[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.1 - (view) (download) (as text)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3