annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/Parsers/Sanger.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
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::Parsers::Sanger
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::Funcgen::Parsers::Sanger
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $parser_type = "Bio::EnsEMBL::Funcgen::Parsers::Sanger";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 push @INC, $parser_type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $imp = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 This is a definitions class which should not be instatiated directly, it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 normally inherited from the Importer. Sanger contains meta data and methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 specific to Sanger PCR arrays to aid parsing and importing of experimental data.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 package Bio::EnsEMBL::Funcgen::Parsers::Sanger;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 use Bio::EnsEMBL::Funcgen::Array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 use Bio::EnsEMBL::Funcgen::ProbeSet;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use Bio::EnsEMBL::Funcgen::Probe;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use Bio::EnsEMBL::Funcgen::ProbeFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use Bio::EnsEMBL::Funcgen::FeatureType;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use Bio::EnsEMBL::Funcgen::ExperimentalChip;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use Bio::EnsEMBL::Funcgen::ArrayChip;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use Bio::EnsEMBL::Funcgen::Channel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use Bio::EnsEMBL::Utils::Exception qw( throw warning deprecate );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use Bio::EnsEMBL::Funcgen::Utils::EFGUtils qw(species_chr_num open_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use Bio::EnsEMBL::Funcgen::Utils::Helper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 @ISA = qw(Bio::EnsEMBL::Funcgen::Utils::Helper);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Example : my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Description: Constructor method for Sanger class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Returntype : Bio::EnsEMBL::Funcgen::Parsers::Sanger
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Exceptions : throws if Experiment name not defined or if caller is not Importer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Caller : Bio::EnsEMBL::Funcgen::Importer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 sub new{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 my $self = $class->SUPER::new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 throw("This is a skeleton class for Bio::EnsEMBL::Importer, should not be used directly") if(! $self->isa("Bio::EnsEMBL::Funcgen::Importer"));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 $self->{'config'} = {(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 #order of these data arrays is important!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 array_data => [], #["array_chip"],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 probe_data => ["array_probe"],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 results_data => ["and_import_result"],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 #import_methods => [],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 #data paths here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 norm_method => undef,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 #is this disabling -input_dir override option?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 )};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head2 set_config
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Example : $imp->set_config();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Description: Sets a attribute dependent variables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Caller : Importer
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 set_config{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 #placeholder method for setting any attr dependant vars e.g. file paths etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 sub read_array_probe_data{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my ($self, $array_file) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 warn("Remove hard coding for Sanger array import, and accomodate adf format");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $array_file ||= $self->array_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 my ($line, $fh, @list, $array_file_format, $cmd);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 my ($op, $of, $imported, $fimported, $fanal);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 my $oa_adaptor = $self->db->get_ArrayAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my $op_adaptor = $self->db->get_ProbeAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 my $of_adaptor = $self->db->get_ProbeFeatureAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my $ec_adaptor = $self->db->get_ExperimentalChipAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 my $ac_adaptor = $self->db->get_ArrayChipAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my $slice_adaptor = $self->db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $analysis = $self->db->get_AnalysisAdaptor->fetch_by_logic_name("SangerPCR")->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 #have LiftOver? Could then use liftover in pipeline to redo mappings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 #store now checks whether already stored and updates array chips accordingly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 my $array = Bio::EnsEMBL::Funcgen::Array->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 -NAME => $self->array_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 -FORMAT => uc($self->format()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 -VENDOR => uc($self->vendor()),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 -TYPE => 'PCR',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 -DESCRIPTION => "Sanger ENCODE PCR array 3.1.1",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 ($array) = @{$oa_adaptor->store($array)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 #This is treating each array chip as a separate array, unless arrayset is defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 #AT present we have no way of differentiating between different array_chips on same array???!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 #Need to add functionality afterwards to collate array_chips into single array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 my $array_chip = Bio::EnsEMBL::Funcgen::ArrayChip->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 -NAME => $array->name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 -DESIGN_ID => $array->name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 -ARRAY_ID =>$array->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 ($array_chip) = @{$ac_adaptor->store($array_chip)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $array->add_ArrayChip($array_chip);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->add_Array($array);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 #we also need to test wether the array as been imported as well as the mappings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 #THis needs to use coord_sys-id not schema_build!! Duplcaite entries for different schema_builds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 #with same assembly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 my $dnadb_cs = $self->db->dnadb->get_CoordSystemAdaptor->fetch_by_name('chromosome');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my $fg_cs = $self->db->get_FGCoordSystemAdaptor->validate_and_store_coord_system($dnadb_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 #This fails if we're pointing to an old DB during the release cycle. Will be fine if we manage to cs mapping dynamically
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if ($array_chip->has_status('IMPORTED')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $imported = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $self->log("Skipping ArrayChip probe import (".$array_chip->name().") already fully imported");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 #need to build cache here, from file first else from DB????
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 #This is required for feature only imports
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 #as we won't have the probe dbID available
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 if(! $self->get_probe_cache_by_Array($array)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $self->get_probe_cache_by_Array($array, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 } elsif ($self->recovery()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $self->log("Rolling back partially imported ArrayChip:\t".$array_chip->name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $self->db->rollback_ArrayChip([$array_chip]); #This should really remove all CS imports too?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 #should never really have CS imports if not IMPORTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 #there is however the potential to trash a lot of data if we were to remove the CS importes by mistake
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 #do we need to check whether any other sets are using the data?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 #we have to check for result using relevant cs_id and cc_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 #no removal of probes is the key thing here as nothing is dependent on the feature_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 #get all result sets by array chip? or get all ExperimentalChips by array chip
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 #would have to be result set as we would find our own ecs. May find our own rset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 throw('This needs updating');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 if ($array_chip->has_status('IMPORTED_CS_'.$fg_cs->dbID())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 $fimported = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $self->log("Skipping ArrayChip feature import (".$array_chip->name().") already fully imported for ".$self->data_version());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 } elsif ($self->recovery()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $self->log("Rolling back partially imported ArrayChip features:\t".$array_chip->name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $self->db->rollback_ArrayChip_features($array_chip, $fg_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 #need to check whether already imported on specified schema_build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 #check for appropriate file given format in input dir or take path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 #if (! $fimported) {#now need to do this irrespective of import status due to x y requirements
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 #need only do this once, i.e. if the cache isn't defined yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 #this is assuming cache will be built properly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 #may cause problems if not cleaned up properly after use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 #ignore xy requirements for now, these should be associated with results file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 #if (! defined $self->{'_probe_cache'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 if (! $fimported) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 if (! $array_file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if (! defined $self->get_dir('input')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 throw("No input_dir defined, if you are running in a non Experiment context please use -array_file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 #hacky ..do better?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 for my $suffix ("gff", "adf") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $cmd = $self->get_dir('input')."/".$self->array_name()."*".$suffix;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 @list = `ls $cmd 2>/dev/null`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 if ((scalar(@list) == 1) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 ($list[0] !~ /No such file or directory/o)) { ###this is only printed to STDERR?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 if (! defined $array_file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $array_file = $list[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 throw("Found more than one array file : $array_file\t$list[0]\nSpecify one with -array_file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 throw("Cannot find array file. Specify one with -array_file") if (! defined $array_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 if ($array_file =~ /gff/io) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $array_file_format = "GFF";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 } elsif ($array_file =~ /adf/io) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $array_file_format = "ADF";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 throw("Does not yet accomodate Sanger adf format");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 throw("Could not determine array file format: $array_file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 #if (! $fimported) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 $fanal = $self->db->get_AnalysisAdaptor->fetch_by_logic_name(($array_file_format eq "ADF") ? "VendorMap" : "LiftOver");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $self->log("Parsing ".$self->vendor()." array data (".localtime().")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $fh = open_file($array_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my @lines = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 close($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my ($chr, $start, $end, $strand, $pid);#, $x, $y, $meta_x, $meta_y, @xy);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 #avoid mutliple calls for same array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 my $ac_dbid = $array->get_ArrayChip_by_design_id($array->name())->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 #sort file to enable probe cache method for new feature imports
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 @lines = sort {(split/\t|\;/o, $a)[8] cmp (split/\t|\;/o, $b)[8]} @lines;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 #This is not sorting properly!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 #my @tmp = map ((split/\t|\;/o, $_)[8], @lines);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 #@tmp = sort @tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 #$self->log('Tmp sorted array is :\n'.join("\n", @tmp)."\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 foreach $line(@lines) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $line =~ s/\r*\n//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 #($chr, $start, $end, $ratio, $pid) = split/\t/o, $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 #($chr, undef, undef, $start, $end, undef, $strand, undef, $pid, $x, $y, $meta_x, $meta_y) = split/\t|\;/o, $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 ($chr, undef, undef, $start, $end, undef, $strand, undef, $pid) = split/\t|\;/o, $line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 if($self->ucsc_coords){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $start += 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 #$meta_x =~ s/META_X=//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 #$x =~ s/X=//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 #$x = $x + (($meta_x -1)*26);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 #$meta_y =~ s/META_Y=//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 #$y =~ s/Y=//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 #$y = $y + (($meta_y -1)*25);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $pid =~ s/reporter_id=//o;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $chr =~ s/chr//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $strand = ($strand eq "+") ? 0 : 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 #Hack!!!!!! This is still maintaining the probe entry (and result?)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 if (! $self->cache_slice($chr)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 warn("-- Skipping non standard probe (${pid}) with location:\t${chr}:${start}-${end}\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 #need to parse dependant on file format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 #also need to account for duplicate probes on grid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 #need to test for imprted here for rebuilding the probe_info cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 #this will result in always using first x y for the inital import (i.e. skip any probe already in cache)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 #or using last x y for previosuly imported as we can't check the cache as it will already be there
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 #could check for x y
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 #should always check x y as this will also implicitly check if it is in the cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 #if (! $self->get_probe_id_by_name($pid)) { #already present in cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 #if(! (@xy = @{$self->get_probe_x_y_by_name($pid)})){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 #can we not use store_set_probes_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 #would have to add x y to probe, which is not logical as probe can have many x y's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 #keep like this and just change cache_probe_info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 if (! $imported) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 #when we utilise array coords, we need to look up probe cache and store again with new coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 #we're currently storing duplicates i.e. different ids with for same probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 #when we should be storing two records for the same probe/id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 #the criteria for this will be different for each vendor, may have to check container etc for NimbleGen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $op = Bio::EnsEMBL::Funcgen::Probe->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 -NAME => $pid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 -LENGTH => ($end - $start),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 -ARRAY => $array,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 -ARRAY_CHIP_ID => $ac_dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 -CLASS => 'EXPERIMENTAL',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 ($op) = @{$op_adaptor->store($op)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 #$self->cache_probe_info($pid, $op->dbID, $x, $y);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 #update XY cache for previously imported array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 #$self->cache_probe_info($pid, $self->get_probe_id_by_name($pid), $x, $y);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 #if (! $fimported) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $of = Bio::EnsEMBL::Funcgen::ProbeFeature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 -START => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 -END => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 -STRAND => $strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 -SLICE => $self->cache_slice($chr),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 -ANALYSIS => $fanal,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 -MISMATCHCOUNT => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 -PROBE_ID => ($imported) ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $self->get_probe_id_by_name_Array($pid, $array) : $op->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 #get_probe_id will throw if not in cache, which means that we have an unimported probe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 #for an ArrayChip which is flagged as imported, must have been omitted from the import deisgn
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 #probably a manual fix required. Can we log these and write an update/repair script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 $of_adaptor->store($of);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 #} else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 #warn("Sanger does not accomodate on plate duplicates yet, result are not linked to X Y coords, using first coords for probe if present in results for $pid\n");¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 #}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $array_chip->adaptor->set_status('IMPORTED_CS_'.$fg_cs->dbID(), $array_chip) if ! $fimported;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $self->log("ArrayChip:\t".$array_chip->design_id()." has been IMPORTED_CS_".$fg_cs->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 if (! $imported) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $array_chip->adaptor->set_status('IMPORTED', $array_chip);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $self->log("ArrayChip:\t".$array_chip->design_id()." has been IMPORTED");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $self->resolve_probe_data();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 $self->log("Finished parsing ".$self->vendor()." array/probe data (".localtime().")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 #warn("Finished parsing ".$self->vendor()." array/probe data (".localtime().")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 =head2 read_and_import_result_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Example : $imp->read_and_import_result_data();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Description: Parses and imports result for the sanger PCR array platform
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Caller : Importer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 sub read_and_import_result_data{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 #change this to read_gff_chip_results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 #as opposed to gff channel results
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 #This should also use the default logic names for the Vendor, or take a user defined list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $self->log("Reading ".$self->vendor()." result data (".localtime().")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my ($file, $chip_uid, $line, $echip);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 my ($ratio, $pid, %chip_files, %roll_back);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 my $of_adaptor = $self->db->get_ProbeFeatureAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my $ec_adaptor = $self->db->get_ExperimentalChipAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 my $chan_adaptor = $self->db->get_ChannelAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my $analysis = $self->db->get_AnalysisAdaptor->fetch_by_logic_name("SangerPCR");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $result_adaptor = $self->db->get_ResultSetAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 #this is done to avoid having to self->array_name in loop, will make multiple array loop easier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 my $array = ${$self->arrays()}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 #This works a little differently as we're not parsing a meta file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 #so the echips haven't been added yet.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 #This is treating each array chip as a separate array, unless arrayset is defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 #AT present we have no way of differentiating between different array_chips on same array???!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 #Need to add functionality afterwards to collate array_chips into single array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 #First add the echips to the Experiment
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 if (! @{$self->result_files()}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 my $list = "ls ".$self->input_dir().'/[0-9]*-[0-9a-zA-Z]*\.all\.*';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my @rfiles = `$list`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $self->result_files(\@rfiles);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 foreach $file(@{$self->result_files()}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 chomp $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 ($chip_uid = $file) =~ s/.*\///;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $chip_uid =~ s/\..*//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $self->log("Found SANGER results file for $chip_uid:\t$file");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 $chip_files{$chip_uid} = $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $echip = $ec_adaptor->fetch_by_unique_id_vendor($chip_uid, 'SANGER');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 #this should throw if not recovery
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 #Nee to check Nimbelgen methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 if ($echip) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 if (! $self->recovery()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 throw("ExperimentalChip(".$echip->unqiue_id().") already exists in the database\nMaybe you want to recover?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 }else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 #log pre-reg'd chips for rollback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 $roll_back{$echip->dbID()} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $echip = Bio::EnsEMBL::Funcgen::ExperimentalChip->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 -EXPERIMENT_ID => $self->experiment->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 -ARRAY_CHIP_ID => $self->arrays->[0]->get_ArrayChip_by_design_id($array->name())->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 -UNIQUE_ID => $chip_uid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 ($echip) = @{$ec_adaptor->store($echip)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $self->experiment->add_ExperimentalChip($echip); #if we need a contains method in here , always add!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 #do we need DUMMY entries any more?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 #sub this passing the echip?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 foreach my $type ('DUMMY_TOTAL', 'DUMMY_EXPERIMENTAL') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 my $channel = $chan_adaptor->fetch_by_type_experimental_chip_id($type, $echip->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 if ($channel) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 if (! $self->recovery()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 throw("Channel(".$echip->unique_id().":$type) already exists in the database\nMaybe you want to recover?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $channel = Bio::EnsEMBL::Funcgen::Channel->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 -EXPERIMENTAL_CHIP_ID => $echip->dbID(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 -TYPE => $type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 ($channel) = @{$chan_adaptor->store($channel)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 #Now get rset using experiment echips
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 my $rset = $self->get_import_ResultSet($analysis, 'experimental_chip');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 if ($rset) { #we have some new data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 foreach my $echip (@{$self->experiment->get_ExperimentalChips()}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 if ($echip->has_status('IMPORTED_SangerPCR', $echip)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 $self->log("ExperimentalChip(".$echip->unique_id().") has already been imported");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my $cc_id = $rset->get_chip_channel_id($echip->dbID());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 if ($self->recovery() && $roll_back{$echip->dbID()}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 $self->log("Rolling back results for ExperimentalChip:\t".$echip->unique_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 $self->rollback_results($cc_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 $self->log("Reading SANGER result file for ".$echip->unique_id().":\t".$chip_files{$echip->unique_id()});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 $self->get_probe_cache_by_Array($array) || throw('Failed to reset probe cache handle');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 my $fh = open_file($chip_files{$echip->unique_id()});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 my @lines = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 close($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 my $rfile_path = $self->get_dir("norm")."/result.SangerPCR.".$echip->unique_id().".txt";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 my $rfile = open_file($rfile_path, '>');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my $r_string = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 @lines = sort {(split/\t|\:/o, $a)[5] cmp (split/\t|\:/o, $b)[5]} @lines;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 foreach my $line (@lines) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 $line =~ s/\r*\n//o;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 ($ratio, undef, $pid) = (split/\t|\:/o, $line)[3..5];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $pid =~ s/.*://o;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $ratio = '\N' if $ratio eq 'NA'; #NULL is still useful info to store in result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 #my ($x, $y) = @{$self->get_probe_x_y_by_name($pid)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 #this is throwing away the encode region which could be used for the probeset/family?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 $r_string .= '\N'."\t".$self->get_probe_id_by_name_Array($pid, $array)."\t${ratio}\t${cc_id}\t".'\N'."\t".'\N'."\n";#${x}\t${y}\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 print $rfile $r_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 close($rfile);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 $self->log("Importing:\t$rfile_path");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 $self->db->load_table_data("result", $rfile_path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 $self->log("Finished importing:\t$rfile_path");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $echip->adaptor->set_status('IMPORTED_SangerPCR', $echip);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 $self->log("No new data, skipping result parse");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $self->log("Finished reading and importing ".$self->vendor()." result data (".localtime().")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 1;