[Bio] / FortyEight / check_rast_genome.pl Repository:
ViewVC logotype

Annotation of /FortyEight/check_rast_genome.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (view) (download) (as text)

1 : wilke 1.1 # computes some comparision data for rast genomes
2 :     # look up NCBI and SEED
3 :    
4 :     use strict;
5 :     use warnings;
6 :     use vars qw($opt_d $opt_u $opt_o $opt_h $opt_v);
7 :     use Getopt::Std;
8 :     use DBI;
9 :     use FIG;
10 :     use GenomeMeta;
11 :     use ContigMD5;
12 :     use LWP::Simple;
13 :    
14 :     #use TraceLog qw(TL_WARNING TL_ERROR TL_VERBOSE);
15 :    
16 :     use constant META_FILE => "meta.xml";
17 :    
18 :    
19 :     my ($dir,$verbose,$update_meta, $overwrite_submit_candidate) = check_opts();
20 :    
21 :     unless (-d $dir) {
22 :     print STDERR "No directory \n";
23 :     &help;
24 :     exit;
25 :     }
26 :    
27 :     # $data->{job_directory}
28 :     # $data->{sequences}
29 :     # $data->{name}
30 :     # $data->{message}
31 :     # $data->{error}
32 :     # $data->{taxonomy_id}
33 :     # $data->{ fig_id_for_name }
34 :     # $data->{ fig_ids_for_tax_id }
35 :     # $data->{ seed_contigs_for_name }
36 :     # $data->{ seed_contigs_for_taxonomy }
37 :     # $data->{contig_in_seed}->{ $contig } = { checksum => $cksum,
38 :     # fig_id => $gen,
39 :     # };
40 :    
41 :    
42 :     my $data = {};
43 :     my $fig = new FIG;
44 :    
45 :     $data->{job_directory} = $dir;
46 :    
47 :     my $error = check_organism_dir($dir);
48 :     $data->{sequences} = get_sequences_from_organism_dir($dir) if ($dir);
49 :     my ($genomes , $ids) = get_seed_genomes($fig);
50 :    
51 :     ($data->{ name },
52 :     $data->{ taxonomy_id },
53 :     $data->{ fig_id } ) = get_organism_and_tax_id_from_organism_dir($dir);
54 :    
55 :     $data->{ fig_id_for_name } = check_organism_name( $data->{name} , $genomes);
56 :     $data->{ fig_ids_for_tax_id } = check_tax_id( $data->{ taxonomy_id } , $ids );
57 :     $data->{ nr_matched_contigs } = check_checksums($data);
58 :    
59 :     print "check ncbi contigs\n";
60 :     check_nr_contigs_at_ncbi( $data );
61 :     print "checked\n";
62 :     get_contig_info_from_seed( $data );
63 :     create_output( $data ) if ( $verbose );
64 :     make_decision( $data );
65 :     write_statistic_to_file( $data );
66 :    
67 :     print STDERR "next update_meta_file\n";
68 :     update_meta_file( $dir, $data , $overwrite_submit_candidate) if ( $update_meta);
69 :    
70 :    
71 :    
72 :    
73 :     #print STDERR "END \n";
74 :     exit;
75 :    
76 :     sub check_nr_contigs_at_ncbi{
77 :     my ($data) = @_;
78 :    
79 :     my $url = "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=";
80 :     my $search_result = get($url.$data->{ taxonomy_id });
81 :    
82 :    
83 :     my @lines = split ( "\n" , $search_result);
84 :    
85 :     my $nr_seq = 0;
86 :     my $nr_proj = 0;
87 :     my $url_seq = "";
88 :     my $url_proj = "";
89 :     my $genome_name = "";
90 :    
91 :     my $next = "";
92 :     foreach my $line ( @lines ){
93 :    
94 :     if ( $next eq "Sequences"){
95 :     ($url_seq) = $line =~ m/href="([^"]*)"/;
96 :     ($nr_seq) = $line =~ m/>(\d*)<\/font/;
97 :    
98 :     print "Genome Sequences: $nr_seq\n";
99 :    
100 :    
101 :     $next = "";
102 :     }
103 :     elsif ( $next eq "Projects"){
104 :     ($url_proj) = $line =~ m/href="([^"]*)"/;
105 :     ($nr_proj) = $line =~ m/>(\d*)<\/font/;
106 :    
107 :     print "Genome Projects: $nr_proj \n";
108 :    
109 :    
110 :     $next = "";
111 :     }
112 :    
113 :     if ( $line =~ /<title>Taxonomy browser/ ){
114 :     print $line,"\n";
115 :     }
116 :     if ( $line =~ m/<title>Taxonomy browser/){
117 :     print $line,"\n";
118 :    
119 :     }
120 :     if ( $line =~ /<title>Taxonomy browser\s*\(([^()]+)\)\<\/title\>/ ) {
121 :     $genome_name = $1;
122 :     print "Genome Name = $1\n";
123 :     }
124 :    
125 :     if ($line =~ m/(Genome[\w;&]+Sequence)/){
126 :     $next = "Sequences";
127 :     }
128 :     elsif ($line =~ m/(Genome[\w;&]+Projects)/){
129 :     $next = "Projects";
130 :     }
131 :    
132 :     }
133 :    
134 :     print $genome_name,"\n";
135 :    
136 :    
137 :     $data->{ ncbi_genome } = $genome_name;
138 :     $data->{ ncbi_nr_projects } = $nr_proj;
139 :     $data->{ ncbi_nr_seq } = $nr_seq;
140 :     }
141 :    
142 :    
143 :     sub get_contig_info_from_seed{
144 :     my ( $data ) = @_;
145 :    
146 :     # get contigs for orgaism name
147 :     if ( $data->{ fig_id_for_name } ) {
148 :     my @contig_ids = $fig->all_contigs($data->{fig_id_for_name} );
149 :     $data->{ seed_contigs_for_name } = \@contig_ids;
150 :     }
151 :    
152 :     # get contigs for taxonomy
153 :     if ( $data->{ fig_ids_for_tax_id } ) {
154 :    
155 :     foreach my $id (@{$data->{ fig_ids_for_tax_id } } ) {
156 :     my @contig_ids = $fig->all_contigs($id);
157 :     $data->{ seed_contigs_for_taxonomy }->{ $id } = \@contig_ids;
158 :     }
159 :     }
160 :     return $data;
161 :     }
162 :    
163 :    
164 :     sub check_checksums{
165 :     my ($data) = @_;
166 :     my $matched_contigs = 0;
167 :    
168 :     foreach my $sq (@{$data->{sequences}}){
169 :    
170 :     my $c = new ContigMD5;
171 :     $c->add( $sq );
172 :     my $cksum = $c->checksum();
173 :     #print $cksum,"\n";
174 :     my ($contig, $gen , $error) = $fig->md5sum_to_contig_genome( $cksum );
175 :    
176 :     if ($contig){
177 :     #print "Contig is in the SEED\n";
178 :     $data->{contig_in_seed}->{ $contig } = { checksum => $cksum,
179 :     fig_id => $gen,
180 :     };
181 :     $matched_contigs++;
182 :     #print $cksum,"\t",$contig,"\t",$gen,"\n";
183 :     }
184 :     if ( $error ){
185 :     $data->{ error } = $error;
186 :     $data->{ message } .= $error;
187 :     }
188 :     }
189 :     return $matched_contigs;
190 :     }
191 :    
192 :    
193 :     sub get_seed_genomes{
194 :     my ($fig) = @_;
195 :     my $genomes = {};
196 :     my $ids = {};
197 :    
198 :     my @gs = $fig->genomes();
199 :     foreach my $g ( @gs ) {
200 :     my $name = $fig->genus_species( $g );
201 :     $genomes->{ $name } = $g;
202 :     my ($id) = $g =~/(\d+)\.\d+/;
203 :    
204 :     if ( $ids->{ $id } ){
205 :     push @{$ids->{ $id }} , $g ;
206 :     }
207 :     else{
208 :     $ids->{ $id } = [$g];
209 :     }
210 :     }
211 :    
212 :     return ($genomes, $ids);
213 :     }
214 :    
215 :     sub help{
216 :     print "check_rast_genome.pl -d organism_directory \n";
217 :     exit;
218 :     }
219 :    
220 :     sub check_opts{
221 :     # initialise
222 :     my ( $dir , $verbose , $update_meta) = ("","0","0");
223 :     getopts('d:uvoh');
224 :    
225 :     help if ($opt_h);
226 :    
227 :     if (($opt_d) && (-d $opt_d)){
228 :     $dir = $opt_d;;
229 :     }
230 :     else{
231 :     print STDERR "No directory!\n";
232 :     help;
233 :     }
234 :    
235 :     $verbose = 1 if ($opt_v);
236 :     $update_meta = 1 if ( $opt_u );
237 :     my $overwrite_submit_candidate = 0;
238 :     $overwrite_submit_candidate = 1 if ( $opt_o);
239 :    
240 :     return ( $dir, $verbose, $update_meta, $overwrite_submit_candidate);
241 :     }
242 :    
243 :     sub check_organism_dir{
244 :     my ( $dir ) = @_;
245 :     my $error = 0;
246 :     unless ( -f $dir."/DONE" ) {
247 :     }
248 :     if ( -f $dir."/ERROR" ) {
249 :     $error = "\nCheck job directory, there has been an error!\nDon't process $dir.\n\n";
250 :     print STDERR $error;
251 :     exit;
252 :     }
253 :    
254 :     return $error;
255 :     }
256 :    
257 :     sub get_organism_and_tax_id_from_organism_dir{
258 :     my ($dir) = @_;
259 :    
260 :     my $id;
261 :     my $name;
262 :    
263 :     my @id_files = `find $dir -name GENOME_ID`;
264 :     my @genome_files = `find $dir -name GENOME`;
265 :    
266 :     if ( scalar @id_files ){
267 :     open (FILE, $id_files[0] ) or die "Can't open $id_files[0]\n";
268 :     $id = <FILE>;
269 :     close(FILE);
270 :     }
271 :     else{
272 :     print STDERR "No GENOME_ID file in $dir!\n";
273 :     exit;
274 :     }
275 :    
276 :     if ( scalar @genome_files ){
277 :     open (FILE, $genome_files[0] ) or die "Can't open $genome_files[0]\n";
278 :     $name = <FILE>;
279 :     close(FILE);
280 :     }
281 :     else{
282 :     print STDERR "No GENOME file in $dir!\n";
283 :     exit;
284 :     }
285 :    
286 :     my ($seed_tax) = $id =~ /(\d+)\.\d+/;
287 :     chomp $name;
288 :     chomp $id;
289 :     return ( $name , $seed_tax, $id);
290 :    
291 :     }
292 :    
293 :    
294 :    
295 :     # exctract sequences from contigs file
296 :     sub get_sequences_from_organism_dir{
297 :     my ($dir) = @_;
298 :     my @sequences;
299 :    
300 :     $dir = $dir."/raw" if (-d $dir."/raw");
301 :     my @files = `find $dir -name contigs`;
302 :    
303 :     foreach my $file (@files) {
304 :     print STDERR "Use contig file: $file\n" if $verbose;
305 :     open (FILE , $file) or die "Can't open file $file\n";
306 :    
307 :     my $seq = "";
308 :     while (my $line = <FILE>) {
309 :     if ($line =~ /^>/){
310 :     push @sequences, $seq if ($seq);
311 :     $seq = "";
312 :     }
313 :     else{
314 :     chomp $line;
315 :     $seq .= $line;
316 :     }
317 :    
318 :     }
319 :     push @sequences, $seq if ($seq); # get the last entry too
320 :     close(FILE);
321 :    
322 :     }
323 :     return \@sequences;
324 :     }
325 :    
326 :    
327 :     sub check_organism_name{
328 :     my ( $org , $list ) = @_;
329 :    
330 :     # simple check
331 :    
332 :     my $fig_id = $list->{ $org };
333 :    
334 :     return $fig_id;
335 :     }
336 :    
337 :     sub check_tax_id{
338 :     my ( $id , $list ) = @_;
339 :    
340 :     #simple check
341 :    
342 :     my $fig_versions = $list->{ $id };
343 :    
344 :     return $fig_versions;
345 :    
346 :     }
347 :    
348 :     sub create_output{
349 :     my ($data) = @_;
350 :    
351 :     # for organism name
352 :     if ( $data->{ fig_id_for_name } ) {
353 :     print "SEED id found for organism ".$data->{ name }." : ".$data->{ fig_id_for_name }."\n";
354 :    
355 :     my $contig_ids = $data->{ seed_contigs_for_name };
356 :     print scalar @$contig_ids," contigs in the seed for ". $data->{ fig_id_for_name } ."\n";
357 :     }
358 :    
359 :     # for taxonomy
360 :     print "\nFound following ids for given taxonomy: " if ( $data->{ fig_ids_for_tax_id } );
361 :     print join " ",@{ $data->{ fig_ids_for_tax_id } },"\n" if ($data->{ fig_ids_for_tax_id } );
362 :    
363 :     foreach my $id (@{$data->{ fig_ids_for_tax_id } } ) {
364 :     print scalar @{ $data->{ seed_contigs_for_taxonomy }->{ $id } }," contigs in the seed for $id\n";
365 :     }
366 :    
367 :     # from organism dir
368 :     print "\n";
369 :     print scalar @{$data->{sequences}} , " contigs in organism dir\n\n";
370 :    
371 :     # for compared contigs
372 :     if (keys %{ $data->{ contig_in_seed } } ){
373 :    
374 :    
375 :     print "Contig is in the SEED:\n";
376 :     foreach my $contig ( keys %{ $data->{ contig_in_seed } } ) {
377 :    
378 :     print $data->{contig_in_seed}->{ $contig }->{ checksum },"\t",
379 :     $contig,"\t",$data->{contig_in_seed}->{ $contig }->{ fig_id },"\n";
380 :     }
381 :     }
382 :    
383 :     if ( $data->{ message } ){
384 :     print $data->{ message },"\n";
385 :     }
386 :     if ( $data->{ error } ){
387 :     print "\nThere has been an error:\n",$data->{ error },"\n";
388 :     }
389 :    
390 :     }
391 :    
392 :    
393 :     sub write_statistic_to_file{
394 :     my ($data) = @_;
395 :    
396 :     my $job_dir = $data->{ job_directory };
397 :     open (FILE , ">$job_dir/import_info.txt");
398 :    
399 :     # for organism name
400 :     my $seed_id = $data->{ fig_id_for_name } || '';
401 :     print FILE "SEED_ID\t".$seed_id."\n";
402 :    
403 :     my $contig_ids = $data->{ seed_contigs_for_name } || [];
404 :     print FILE "NR_SEED_CONTIGS\t" . scalar @$contig_ids ,"\n";
405 :    
406 :    
407 :     # for taxonomy
408 :     if ($data->{ fig_ids_for_tax_id } ) {
409 :     foreach my $id (@{$data->{ fig_ids_for_tax_id } } ) {
410 :     print FILE "TAX_ID_TO_FIG_IDS\t" . join " ",@{ $data->{ fig_ids_for_tax_id } },"\t",scalar @{ $data->{ seed_contigs_for_taxonomy }->{ $id } },"\n" ;
411 :     }
412 :     print FILE "TAX_ID_TO_FIG_IDS\tnone\t\n" unless scalar @{$data->{ fig_ids_for_tax_id }} ;
413 :     }
414 :     else{
415 :     print FILE "TAX_ID_TO_FIG_IDS\tnone\t\n";
416 :     }
417 :    
418 :    
419 :    
420 :     # from organism dir
421 :     print "\n";
422 :     print FILE "NR_RAST_CONTIGS\t" . scalar @{$data->{sequences}} , "\n";
423 :    
424 :     # for compared contigs
425 :     my $matched_contigs = 0;
426 :     if (keys %{ $data->{ contig_in_seed } } ){
427 :     $matched_contigs = scalar keys %{ $data->{ contig_in_seed } } ;
428 :     }
429 :     print FILE "NR_MATCHED_CONTIGS\t$matched_contigs\n";
430 :    
431 :     if ( $data->{ message } ){
432 :     $data->{ message } =~ s/\n/<br>/g;
433 :     $data->{ message } =~ s/\t/ - /g;
434 :     print FILE "NOTE\t".$data->{ message } ."\n";
435 :     }
436 :     if ( $data->{ error } ){
437 :     print FILE "ERROR\t" . $data->{ error } ."\n";
438 :     }
439 :    
440 :     my $ncbi_genome = $data->{ ncbi_genome } || "none";
441 :     print FILE "TAX_ID_TO_NCBI_GENOME\t$ncbi_genome\n";
442 :     print FILE "NR_NCBI_GENOME_PROJECTS\t" . $data->{ ncbi_nr_projects } ."\n";
443 :     print FILE "NR_NCBI_CONTIGS\t" . $data->{ ncbi_nr_seq } ."\n";
444 :    
445 :     close (FILE)
446 :     }
447 :    
448 :    
449 :     sub update_meta_file{
450 :     my ($job_dir,$data,$overwrite_submit_candidate) = @_;
451 :    
452 :     my $var = '';
453 :    
454 :     unless ( -f $job_dir."/".META_FILE ){
455 :     print STDERR "No ".$job_dir."/".META_FILE,"\n";
456 :     exit;
457 :     }
458 :    
459 :     print STDERR "Get meta.xml file\n";
460 :     #print STDERR "Overwriting: $overwrite_submit_candidate\n";
461 :    
462 :     my $meta = new GenomeMeta($data->{ fig_id }, $job_dir."/".META_FILE);
463 :    
464 :    
465 :    
466 :     if ( $data->{ fig_id_for_name } and
467 :     ($meta->get_metadata("v2c2.fig_id_for_name") ne $data->{ fig_id_for_name })
468 :     ){
469 :     $meta->set_metadata("v2c2.fig_id_for_name",$data->{ fig_id_for_name });
470 :     }
471 :    
472 :    
473 :     if ( $data->{ seed_contigs_for_name } ){
474 :     $var = scalar @{ $data->{ seed_contigs_for_name } };
475 :     }
476 :     else{
477 :     $var = 0;
478 :     }
479 :     if ($meta->get_metadata("v2c2.nr_contigs_for_name") ne $var) {
480 :     $meta->set_metadata("v2c2.nr_contigs_for_name", $var) ;
481 :     }
482 :     $var = '';
483 :    
484 :    
485 :     if ( $data->{ fig_ids_for_tax_id } ) {
486 :     $var = join ";" , @{ $data->{ fig_ids_for_tax_id } } ;
487 :     }
488 :     if ($meta->get_metadata("v2c2.fig_ids_for_tax_id") ne $var ) {
489 :     $meta->set_metadata("v2c2.fig_ids_for_tax_id", $var);
490 :     }
491 :     $var = '';
492 :    
493 :    
494 :     if ( $data->{ seed_contigs_for_taxonomy } ) {
495 :    
496 :     my $nr_contig = 0;
497 :     foreach my $id ( keys %{ $data->{ seed_contigs_for_taxonomy } } ) {
498 :    
499 :     ( $nr_contig ) ? $nr_contig .= ":".scalar @{ $data->{ seed_contigs_for_taxonomy }->{ $id } } : $nr_contig = scalar @{ $data->{ seed_contigs_for_taxonomy }->{ $id } } ;
500 :     }
501 :    
502 :     $meta->set_metadata("v2c2.nr_contigs_for_tax_id", $nr_contig) if ($meta->get_metadata("v2c2.nr_contigs_for_tax_id") ne $nr_contig);
503 :     }
504 :    
505 :     $meta->set_metadata("v2c2.nr_contigs_in_org_dir", scalar @{ $data->{ sequences } } )if ( $meta->get_metadata("v2c2.nr_contigs_in_org_dir") ne (scalar @{ $data->{ sequences } } ) );
506 :    
507 :    
508 :     # count matched contigs
509 :     my $matched_contigs = "";
510 :     my $nr_matched_contigs = 0;
511 :     if (keys %{ $data->{ contig_in_seed } } ){
512 :    
513 :     foreach my $contig ( keys %{ $data->{ contig_in_seed } } ) {
514 :     $nr_matched_contigs++;
515 :     $matched_contigs .= $contig."\t".$data->{contig_in_seed}->{ $contig }->{ fig_id }."\n";
516 :     }
517 :     }
518 :    
519 :     if ($meta->get_metadata("v2c2.matched_contigs") ne $matched_contigs){
520 :     $meta->set_metadata("v2c2.matched_contigs", $matched_contigs );
521 :     }
522 :     if ($meta->get_metadata("v2c2.nr_matched_contigs") ne $nr_matched_contigs){
523 :     $meta->set_metadata("v2c2.nr_matched_contigs", $nr_matched_contigs );
524 :     }
525 :    
526 :    
527 :    
528 :     # set submit candidate
529 :     my $info_submit_candidate = $meta->get_metadata("submit.candidate");
530 :    
531 :     if ( $data->{ remove_candidate} and $overwrite_submit_candidate ){
532 :     print STDERR "Set submit.candidate\n";
533 :     $meta->set_metadata("submit.candidate", 0 ) if ($meta->get_metadata("submit.candidate") ne "0" );
534 :     }
535 :    
536 :     if ( (defined $data->{ replace_seedID}) and ( $meta->get_metadata("replace.seedID") ne $data->{ replace_seedID }) ) {
537 :     $meta->set_metadata("replace.seedID", $data->{ replace_seedID }) if ( (defined $data->{ replace_seedID}) and $overwrite_submit_candidate );
538 :     }
539 :     if ( $meta->get_metadata("v2c2.message") ne $data->{ message }) {
540 :     $meta->set_metadata("v2c2.message", $data->{ message });
541 :     }
542 :    
543 :    
544 :     return 1;
545 :     }
546 :    
547 :     sub make_decision {
548 :     my ( $data ) = @_;
549 :     my $meta;
550 :    
551 :     my $msg = "";
552 :     # 1. name , tax , contigs match -> same genome
553 :     # 2. name , tax match same number of contigs but checksum does not match -> different/new version
554 :     # 3. name , tax match different number of contigs -> different/new version
555 :     # 4. name matches , tax differs
556 :     # 5. name differs, tax matches
557 :     # 6, name , tax differs contigs matches -> problem
558 :     # 7. name , tax , contigs differ -> new genome
559 :    
560 :    
561 :     if ( $data->{ replace_seedID } ) {
562 :     print STDERR "Replace ID submitted : ".$data->{ replace_seedID },"\n";
563 :     exit;
564 :     }
565 :    
566 :     # get matched contigs
567 :     my $matched_contigs = "";
568 :     my $nr_matched_contigs = 0;
569 :    
570 :     if (keys %{ $data->{ contig_in_seed } } ){
571 :     foreach my $contig ( keys %{ $data->{ contig_in_seed } } ) {
572 :     $nr_matched_contigs++;
573 :     $matched_contigs .= $contig."\t".$data->{contig_in_seed}->{ $contig }->{ fig_id }."\n";
574 :     }
575 :     }
576 :     $data->{ matched_contigs } = $matched_contigs;
577 :     $data->{ nr_matched_contigs } = $nr_matched_contigs;
578 :    
579 :     # name is matching
580 :     if ( $data->{ fig_id_for_name } ) {
581 :    
582 :     # check for taxonomy
583 :     if (scalar @{$data->{ fig_ids_for_tax_id }} == 1){
584 :     my $fig_id = $data->{ fig_ids_for_tax_id }->[0];
585 :    
586 :     # name and taxonomy matches
587 :     if ( $fig_id eq $data->{ fig_id_for_name } ){
588 :     # set ID for replacement
589 :     $data->{ replace_seedID } = $fig_id;
590 :    
591 :     if ( @{ $data->{ sequences } } < @{ $data->{ seed_contigs_for_name } } ) {
592 :     $msg .= "less contigs than seed contigs, probably new version\n";
593 :     }
594 :     elsif ( @{ $data->{ sequences } } > @{ $data->{ seed_contigs_for_name } } ) {
595 :     $msg .= "more contigs than seed contigs, either older version or new genome project\n";
596 :     }
597 :     else{
598 :    
599 :     if (scalar @{ $data->{ seed_contigs_for_name } } == $data->{ nr_matched_contigs } ){
600 :     $msg .= "same version, don't import\n";
601 :    
602 :     $data->{ remove_candidate } = 1;
603 :     }
604 :     else{
605 :    
606 :     $msg .= "same number of contigs but not same contigs\n";
607 :     }
608 :     }
609 :    
610 :     }
611 :     # different id for taxonomy and org name
612 :     else{
613 :     $msg .= "ID for taxonomy doesn't match id for organism name: $fig_id and ". $data->{ fig_id_for_name }."\n";
614 :     }
615 :    
616 :     }
617 :     elsif (scalar @{$data->{ fig_ids_for_tax_id }} > 1){
618 :     $msg .= "Geome exists in different versions: ". join (" ", @{$data->{ fig_ids_for_tax_id }} )."\n";
619 :     }
620 :     else{
621 :     # no match for name and taxonomy
622 :     # check for contigs
623 :    
624 :     if ( $data->{ nr_matched_contigs} ){
625 :     $msg .= "Contigs found in the SEED, but no match for name and taxonomy\n";
626 :     $msg .= $data->{ matched_contigs };
627 :     }
628 :     else{
629 :     $msg .= "probably new genome\n";
630 :     }
631 :    
632 :     }
633 :    
634 :     }
635 :     # name is not matching
636 :     else{
637 :    
638 :     # check taxonomy
639 :     if ( ref $data->{ fig_ids_for_tax_id } and scalar ( @{$data->{ fig_ids_for_tax_id }} ) == 1){
640 :    
641 :     my $fig_id_for_taxonomy = $data->{ fig_ids_for_tax_id }->[0];
642 :    
643 :     $msg .= "Seems to be an existing genome ( $fig_id_for_taxonomy ) but name is not correct. Please check organism name.\n";
644 :    
645 :    
646 :     if ( @{ $data->{ sequences } } < @{ $data->{ seed_contigs_for_taxonomy }->{ $fig_id_for_taxonomy } } ) {
647 :     $msg .= "less contigs than seed contigs, probably new version\n";
648 :     }
649 :     elsif ( @{ $data->{ sequences } } > @{ $data->{ seed_contigs_for_taxonomy }->{ $fig_id_for_taxonomy } } ) {
650 :     $msg .= "more contigs than seed contigs, either older version or new genome project\n";
651 :     }
652 :     else{
653 :     if ( $data->{ seed_contigs_for_name } and scalar @{ $data->{ seed_contigs_for_name } } == $data->{ nr_matched_contigs } ){
654 :     $msg .= "same version, don't import\n";
655 :     $data->{ remove_candidate } = 1;
656 :     }
657 :     }
658 :    
659 :     }
660 :     elsif (ref $data->{ fig_ids_for_tax_id } and scalar @{$data->{ fig_ids_for_tax_id }} > 1){
661 :     $msg .= "Geome exists in different versions: ". join (" ", @{$data->{ fig_ids_for_tax_id }} )."\n";
662 :     }
663 :     else{
664 :     # no match for name and taxonomy
665 :     # check for contigs
666 :    
667 :     if ( $data->{ nr_matched_contigs} ){
668 :     $msg .= "Contigs found in the SEED, but no match for name and taxonomy\n";
669 :     $msg .= $data->{ matched_contigs };
670 :     }
671 :     else{
672 :     $msg .= "probably new genome\n";
673 :     }
674 :     }
675 :     }
676 :     if ( $data->{ ncbi_nr_seq} ne @{ $data->{ sequences } } ){
677 :     my $ncbi_tag = $data->{ ncbi_genome} || $data->{ taxonomy_id } ;
678 :     $msg .= "NCBI has ".$data->{ ncbi_nr_seq}." sequences and " . $data->{ ncbi_nr_projects} . " projects for ".$ncbi_tag." in the Taxonomy Browser!<hr>";
679 :    
680 :     my $user = get_user_from_job( $data );
681 :     if ( $user eq "batch"){
682 :     $data->{ remove_candidate } = 1;
683 :     }
684 :    
685 :     }
686 :     if ( $data->{ ncbi_genome } and $data->{ ncbi_genome } ne $data->{ name } ){
687 :     $msg .= "Different genome name at the NCBI for this taxonmy id: <b> ".$data->{ ncbi_genome }."</b>\n";
688 :    
689 :     my $user = get_user_from_job( $data );
690 :     if ( $user eq "batch"){
691 :     $data->{ remove_candidate } = 1;
692 :     }
693 :    
694 :     }
695 :    
696 :     $data->{ message } = $msg;
697 :     return $data;
698 :     }
699 :    
700 :    
701 :     sub get_user_from_job{
702 :     my ( $data ) = @_;
703 :     my $user = "";
704 :    
705 :     if ( -f $dir."/USER" ) {
706 :     open (FILE , "$dir/USER") or die "Can't open $dir/USER\n";
707 :     $user = <FILE>;
708 :     close FILE;
709 :     chomp $user;
710 :     }
711 :    
712 :     return $user;
713 :     }
714 :    
715 :    
716 :     sub _unspace{
717 :     my ($line) =@_;
718 :     my @words = split (/\s+/ , $line );
719 :     $line = join( " ", @words);
720 :     return $line;
721 :     }
722 :    
723 :    
724 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3