annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/ProbeFeature.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 # Ensembl module for Bio::EnsEMBL::Funcgen::ProbeFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 Copyright (c) 1999-2011 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 Bio::EnsEMBL::ProbeFeature - A module to represent an nucleotide probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 genomic mapping.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 use Bio::EnsEMBL::Funcgen::ProbeFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $feature = Bio::EnsEMBL::Funcgen::ProbeFeature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 -PROBE => $probe,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 -MISMATCHCOUNT => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 -SLICE => $chr_1_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 -START => 1_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 -END => 1_000_024,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 -STRAND => -1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 -ANALYSIS => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 -CIGAR_STRING => '1U2M426D2M1m21M',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 An ProbeFeature object represents the genomic placement of an Probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 object. The data are stored in the probe_feature table.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 package Bio::EnsEMBL::Funcgen::ProbeFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use Bio::EnsEMBL::Utils::Exception qw( throw );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 use Bio::EnsEMBL::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use Bio::EnsEMBL::Funcgen::Storable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use Bio::EnsEMBL::Funcgen::Utils::EFGUtils qw(median);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 @ISA = qw(Bio::EnsEMBL::Feature Bio::EnsEMBL::Funcgen::Storable);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Arg [-PROBE] : Bio::EnsEMBL::Funcgen::Probe - probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 A ProbeFeature must have a probe. This probe must already be stored if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 you plan to store the feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 Arg [-MISMATCHCOUNT]: int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Number of mismatches over the length of the probe.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 Arg [-SLICE] : Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 The slice on which this feature is.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 Arg [-START] : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 The start coordinate of this feature relative to the start of the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 it is sitting on. Coordinates start at 1 and are inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Arg [-END] : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 The end coordinate of this feature relative to the start of the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 it is sitting on. Coordinates start at 1 and are inclusive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Arg [-STRAND] : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 The orientation of this feature. Valid values are 1, -1 and 0.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Arg [-dbID] : (optional) int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Internal database ID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Arg [-ADAPTOR] : (optional) Bio::EnsEMBL::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Database adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Example : my $feature = Bio::EnsEMBL::Funcgen::ProbeFeature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 -PROBE => $probe,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 -MISMATCHCOUNT => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 -SLICE => $chr_1_slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 -START => 1_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 -END => 1_000_024,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 -STRAND => -1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 -ANALYSIS => $analysis,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 -CIGARLINE => '15M2m3d4M',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 #Can represent transcript alignment as gapped genomic alignments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 #D(eletions) representing introns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 #Lowercase m's showing sequence mismatches
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Description: Constructor for ProbeFeature objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Returntype : Bio::EnsEMBL::Funcgen::ProbeFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my ($probe, $mismatchcount, $pid, $cig_line)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 = rearrange(['PROBE', 'MISMATCHCOUNT', 'PROBE_ID', 'CIGAR_STRING'], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 #remove mismatch?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 #mandatory args?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 #warn "creating probe feature with $pid";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $self->{'probe_id'} = $pid if $pid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $self->probe($probe) if $probe;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $self->mismatchcount($mismatchcount) if defined $mismatchcount;#do not remove until probe mapping pipeline fixed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $self->cigar_string($cig_line) if defined $cig_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 #do we need to validate this against the db? Grab from slice and create new if not present? Will this be from the dnadb?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 #do we need this coordsys id if we're passing a slice? We should have the method but not in here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 =head2 new_fast
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Args : Hashref with all internal attributes set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Description: Quick and dirty version of new. Only works if the code is very
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 disciplined.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Returntype : Bio::EnsEMBL::Funcgen::ProbeFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 sub new_fast {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 bless ($_[1], $_[0]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head2 probeset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Arg [1] : (optional) string - probeset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Example : my $probeset = $feature->probeset();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Description: Getter and setter for the probeset for this feature. Shortcut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 for $feature->probe->probeset(), which should be used instead.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Probeset is not persisted if set with this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Status : Medium Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 : Use $feature->probe->probeset() because this may be removed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 sub probeset {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $self->{'probeset'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 if (! $self->{'probeset'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $self->{'probeset'} = $self->probe()->probeset();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 #We could bypass this entirely and call directly using proveset_id?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 return $self->{'probeset'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 #Only ever needs to be set in _objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 #This is to allow linkage of probe_feature glyphs without retrieving the probeset.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 sub probeset_id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 return $self->{'_probeset_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 =head2 mismatchcount
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Arg [1] : int - number of mismatches
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Example : my $mismatches = $feature->mismatchcount();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Description: Getter and setter for number of mismatches for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Status : High Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 sub mismatchcount {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 #replace with dynamic check of cigarline?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $self->{'mismatchcount'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 return $self->{'mismatchcount'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 =head2 cigar_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Arg [1] : str - Cigar line alignment annotation (M = Align & Seq match, m = Align matcht & Seq mismatch, D = Deletion in ProbeFeature wrt genome, U = Unknown at time of alignment)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Example : my $cg = $feature->cigar_string();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Description: Getter and setter for number of the cigar line attribute for this feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Returntype : str
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Status : High Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 sub cigar_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self->{'cigar_string'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 return $self->{'cigar_string'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 =head2 probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Arg [1] : Bio::EnsEMBL::Funcgen::Probe - probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Example : my $probe = $feature->probe();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Description: Getter, setter and lazy loader of probe attribute for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 ProbeFeature objects. Features are retrieved from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 without attached probes, so retrieving probe information for a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 feature will involve another query.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Returntype : Bio::EnsEMBL::Funcgen::Probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub probe {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my $probe = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #can we not use _probe_id here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 #why is probe_id not set sometimes?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 #warn "in pf and probe is ".$self->{'probe_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if ($probe) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 #warn "Probe defined and is ".$probe. "and probe id is".$self->{'probe_id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 if ( !ref $probe || !$probe->isa('Bio::EnsEMBL::Funcgen::Probe') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 throw('Probe must be a Bio::EnsEMBL::Funcgen::Probe object');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $self->{'probe'} = $probe;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 if ( ! defined $self->{'probe'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # && $self->dbID() && $self->adaptor() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 #$self->{'probe'} = $self->adaptor()->db()->get_ProbeAdaptor()->fetch_by_ProbeFeature($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 #warn "fetching probe with dbID ".$self->probe_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $self->{'probe'} = $self->adaptor()->db()->get_ProbeAdaptor()->fetch_by_dbID($self->probe_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 return $self->{'probe'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 =head2 probe_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Example : my $probe_id = $pfeature->probe_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Description: Getter for the probe db id of the ProbeFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Returntype : int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 sub probe_id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 return $self->{'probe_id'} || $self->probe->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 =head2 get_results_by_channel_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Arg [1] : int - channel_id (mandatory)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Arg [2] : string - Analysis name e.g. RawValue, VSN (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Example : my @results = $feature->results();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Description: Getter, setter and lazy loader of results attribute for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 ProbeFeature objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Returntype : List ref to arrays containing ('score', 'Analysis logic_name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Status : Medium Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 sub get_results_by_channel_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $channel_id = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my $anal_name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 warn("This method not fully implemented, remove/deprecate?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 #$self->{'results'} ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $self->{'results_complete'} ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 if(! $self->{'results'} || ($anal_name && ! exists $self->{'results'}{$anal_name})){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 #fetch all, set complete set flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $self->{'results_complete'} ||= 1 if(! $anal_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 foreach my $results_ref(@{$self->adaptor->fetch_results_by_channel_analysis($self->probe->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 $channel_id, $anal_name)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->{'results'}{$$results_ref[1]} = $$results_ref[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 return $self->{'results'}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 #The experiment/al chip specificity has already been done by the ofa->fetch_all_by_Slice_Experiment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 #This may be called with no preceding Experiment specificity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 #this would return results for all experiments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 #do we need to set a default Experiment?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 #THis should return both Chip and Channel based results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 #just Chip for now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 #maybe retrieve and hash all if not Analysis object passed? Then return what?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 =head2 get_result_by_Analysis_ExperimentalChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Arg [1] : Bio::EnsEMBL::Analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Arg [2] : listref - Bio::EnsEMBL::Funcgen::ExperimentalChip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Example : my $result = $feature->get_result_by_Analysis_ExperimentalChips($anal, \@echips);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Description: Getter of results attribute for a given Analysis and set of ExperimentalChips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Returntype : float
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Exceptions : Throws is no Analysis or ExperimentalChips are not passed?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Status : High Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 #make ExperimentalChips optional?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 #or have ResultSetAdaptor? Do we need a ResultSet?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 #may not have ExperimentalChip, so would need to return ec dbID aswell
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 ######This will break/return anomalous if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 #ECs are passed from different experiments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 #ECs are passed from different Arrays
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 sub get_result_by_Analysis_ExperimentalChips{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my ($self, $anal, $exp_chips) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 throw("Need to pass listref of ExperiemntalChips") if(scalar(@$exp_chips) == 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 throw("Need to pass a valid Bio::EnsEMBL::Analysis") if ! $anal->isa("Bio::EnsEMBL::Analysis");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 my (%query_ids, %all_ids, %ac_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $anal_name = $anal->logic_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 foreach my $ec(@$exp_chips){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 throw("Need to pass a listref of Bio::EnsEMBL::Funcgen::ExperimentalChip objects")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 if ! $ec->isa("Bio::EnsEMBL::Funcgen::ExperimentalChip");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 #my $tmp_id = $self->adaptor->db->get_ArrayAdaptor->fetch_by_array_chip_dbID($ec->array_chip_id())->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 #$array_id ||= $tmp_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 #throw("You have passed ExperimentalChips from different if($array_id != $tmp_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 #if(exists $ac_ids{$ec->array_chip_id()}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 # throw("Multiple chip query only works with contiguous chips within an array, rather than duplicates");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $ac_ids{$ec->array_chip_id()} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $all_ids{$ec->dbID()} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $query_ids{$ec->dbID()} = 1 if(! exists $self->{'results'}{$anal_name}{$ec->dbID()});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 my @ec_ids = keys %query_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 my @all_ids = keys %all_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 #warn "ec ids @ec_ids\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 #warn "all ids @all_ids\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 #$self->{'results'} ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 #$self->{'results_complete'} ||= 0;#do we need this now?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 if((scalar(@all_ids) - scalar(@ec_ids))> 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 throw("DATA ERROR - There is more than one result stored for the following ExperimentalChip ids: @all_ids");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 elsif(! $self->{'results'} || (($anal_name && scalar(@ec_ids) > 0) && scalar(@all_ids) == scalar(@ec_ids))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 #fetch all, set complete set flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 #$self->{'results_complete'} ||= 1 if(! $anal_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 #would need to look up chip and channel analyses here and call relevant fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 #or pass the chip and then build the query as = or IN dependent on context of logic name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 #if there are multiple results, last one will overwrite others
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 #could do foreach here to deal with retrieving all i.e. no logic name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 #Can supply mutliple chips, but probe ids "should" be unique(in the DB at least) amongst contiguous array_chips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 #build the cache based on logic name and table_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 #cahce key?? should we cat the ec_ids together?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my @result_refs = @{$self->adaptor->fetch_results_by_Probe_Analysis_experimental_chip_ids($self->probe(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $anal,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 \@ec_ids)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 #Remove lines with no result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 while(@result_refs && (! $result_refs[0]->[0])){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 shift @result_refs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $num_results = scalar(@result_refs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 my ($result, $mpos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 #throw("Fetched more than one result for this ProbeFeature, Analysis and ExperimentalChips") if (scalar(@result_refs) >1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 #No sort needed as we sort in the query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 if($num_results == 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $result = $result_refs[0]->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 elsif($num_results == 2){#mean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 $result = ($result_refs[0]->[0] + $result_refs[1]->[0])/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 elsif($num_results > 2){#median or mean of median flanks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $mpos = $num_results/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 if($mpos =~ /\./){#true median
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 $mpos =~ s/\..*//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $mpos ++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 $result = $result_refs[$mpos]->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 $result = ($result_refs[$mpos]->[0] + $result_refs[($mpos+1)]->[0])/2 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $self->{'results'}{$anal_name}{":".join(":", @ec_ids).":"} = $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 #do we return the ec ids here to, or do we trust that the user will know to only pass contiguous rather than duplicate chips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 #how are we going to retrieve the result for one of many possible ec id keys?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 #options, cat ec dbids as key, and grep them to find full key, then return result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 #this may hide the duplicate chip problem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 #If a query has already been made and cached,another query with one differing ID(duplicate result) may never be queried as we already have a cahced result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 #We shoulld pick up duplicates before this happens
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 #If we try and mix ExperimentalChips from different experiments, then this would also cause multiple results, and hence hide some data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 my @keys;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 foreach my $id(@all_ids){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 my @tmp = grep(/:${id}:/, keys %{$self->{'results'}{$anal_name}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 #Hacky needs sorting, quick fix for release!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 if(@tmp){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 push @keys, grep(/:${id}:/, keys %{$self->{'results'}{$anal_name}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 throw("Got more than one key for the results cache") if scalar(@keys) > 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 return $self->{'results'}{$anal_name}{$keys[0]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 #Will this be too slow, can we not do one query across all tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 sub get_result_by_ResultSet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my ($self, $rset) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 my $results = $rset->adaptor->fetch_results_by_probe_id_ResultSet($self->probe_id(), $rset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 return median($results);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508