Changeset 159
- Timestamp:
- 03/09/09 00:50:16 (9 months ago)
- Files:
-
- MPI/mpi_maker (modified) (1 diff)
- bin/fasta_merge (modified) (1 diff)
- bin/gff3_preds2models (added)
- bin/maker (modified) (4 diffs)
- lib/Dumper/GFF/GFFV3.pm (modified) (1 diff)
- lib/File (added)
- lib/File/NFSLock.pm (added)
- lib/GFFDB.pm (modified) (2 diffs)
- lib/GI.pm (modified) (27 diffs)
- lib/Process/MpiChunk.pm (modified) (8 diffs)
- lib/Process/MpiTiers.pm (modified) (1 diff)
- lib/Widget/RepeatMasker.pm (modified) (1 diff)
- lib/Widget/fgenesh.pm (modified) (1 diff)
- lib/cluster.pm (modified) (3 diffs)
- lib/evaluator/evaluate.pm (modified) (2 diffs)
- lib/runlog.pm (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
MPI/mpi_maker
r151 r159 250 250 "predictor=s" =>\$OPT{predictor}, 251 251 "retry=i" =>\$OPT{retry}, 252 "ignore" =>\$OPT{ignore}, 252 253 "quiet" =>\$main::quiet, 253 254 "CTL" => sub {GI::generate_control_files() if($rank == $root); MPI_Finalize(); exit(0);}, bin/fasta_merge
r154 r159 79 79 80 80 dump_it($trans, "$outfile.all.$source.transcripts.fasta"); 81 dump_it($prot, "$outfile.all.$source.proteins s.fasta");81 dump_it($prot, "$outfile.all.$source.proteins.fasta"); 82 82 } 83 83 bin/maker
r151 r159 143 143 "predictor=s" =>\$OPT{predictor}, 144 144 "retry=i" =>\$OPT{retry}, 145 "clean_try" =>\$OPT{clean_try}, 146 "evaluate" =>\$OPT{evaluate}, 145 147 "quiet" => \$main::quiet, 146 148 "CTL" => sub {GI::generate_control_files(); exit(0);}, … … 236 238 #-set up variables that are the result of chunk accumulation 237 239 my $masked_total_seq; 238 my $p_fastas; 239 my $t_fastas; 240 240 my %p_fastas; 241 my %t_fastas; 241 242 242 243 my $GFF3 = Dumper::GFF::GFFV3->new("$out_dir/$safe_seq_id.gff", … … 718 719 ); 719 720 721 my $non_over = maker::auto_annotator::get_non_overlaping_abinits($maker_anno, 722 $annotations->{abinit} 723 ); 724 720 725 #==OUTPUT DATA HERE 721 726 … … 734 739 $GFF3->resolved_flag if (not $chunk->is_last); #adds ### between contigs 735 740 736 #--- building fastas for annotations (grows with itteration) 737 my ($p_fasta, $t_fasta) = GI::maker_p_and_t_fastas($maker_anno); 738 $p_fastas .= $p_fasta; 739 $t_fastas .= $t_fasta; 741 #--- building fastas for annotations (grows with iteration) 742 GI::maker_p_and_t_fastas($maker_anno, 743 $non_over, 744 $annotations->{abinit}, 745 \%p_fastas, 746 \%t_fastas, 747 ); 740 748 } 741 749 #END CONTIG 742 750 743 751 #--- write fastas for ab-initio predictions 744 my ($p_snap_fastas, 745 $t_snap_fastas) = GI::abinit_p_and_t_fastas($preds, 746 $safe_seq_id, 747 $q_seq_ref, 748 $out_dir 749 ); 750 751 #--Write fasta files now that all chunks are finished 752 FastaFile::writeFile(\$p_fastas, 753 "$out_dir/$safe_seq_id.maker.proteins.fasta" 754 ); 755 FastaFile::writeFile(\$t_fastas, 756 "$out_dir/$safe_seq_id.maker.transcripts.fasta" 757 ); 752 753 #--Write annotation fasta files now that all chunks are finished 754 GI::write_p_and_t_fastas(\%p_fastas, \%t_fastas, $safe_seq_id, $out_dir); 758 755 759 756 #--- write GFF3 file lib/Dumper/GFF/GFFV3.pm
r151 r159 485 485 $type = $k eq 'hit' ? 'match' : 'match_part'; 486 486 } 487 elsif ($class =~ /^repeat/i){ 487 elsif ($class =~ /^blastx\:repeat/i){ 488 $type = $k eq 'hit' ? 'protein_match' : 'match_part'; 489 } 490 elsif ($class =~ /^repeatmasker$/i){ 491 $type = $k eq 'hit' ? 'match' : 'match_part'; 492 } 493 elsif ($class =~ /^maker$/i){ #pasthrough maker annotation as evidence 488 494 $type = $k eq 'hit' ? 'match' : 'match_part'; 489 495 } lib/GFFDB.pm
r157 r159 181 181 182 182 my $table; 183 if($l->{source} =~ /^repeatmasker$|^blastx\:repeat mask$|^repeat_gff\:/i){183 if($l->{source} =~ /^repeatmasker$|^blastx\:repeat|^repeat_gff\:/i){ 184 184 next if (! $codes{rm_pass}); 185 185 next if ($skip{repeat_maker}); … … 618 618 $f->{gene_id} = $gene_id unless(! $gene_id); 619 619 $f->{gene_name} = $gene_name unless(! $gene_name); 620 $f->{_tran_name} = $tran_name unless(! $gene_name); 620 621 $f->{_tran_id} = $tran_id unless(! $tran_id); 621 622 $f->{maker_qi} = $t->{maker_qi} unless(! $t->{maker_qi}); lib/GI.pm
r153 r159 39 39 use repeat_mask_seq; 40 40 use maker::sens_spec; 41 use File::NFSLock; 41 42 42 43 @ISA = qw( … … 46 47 #------------------------------------------------------------------------ 47 48 #--------------------------- CLASS FUNCTIONS ---------------------------- 49 #------------------------------------------------------------------------ 50 sub set_global_temp { 51 my $dir = shift; 52 53 $TMP = $dir; 54 } 48 55 #------------------------------------------------------------------------ 49 56 sub get_preds_on_chunk { … … 414 421 # } 415 422 #----------------------------------------------------------------------------- 416 sub abinit_p_and_t_fastas {417 my $preds = shift;418 my $id = shift;419 my $seq_ref = shift;420 my $out_dir = shift;421 422 my %fhs;423 424 foreach my $hit (@{$preds}) {425 my $source = $hit->algorithm;426 $source = uri_escape($source,427 '\*\?\|\\\/\'\"\{\}\<\>\;\,\^\(\)\$\~\:'428 );429 my $t_name = $hit->name(); # note this is being set in GFFV3::pred_data430 my $t_seq = maker::auto_annotator::get_transcript_seq($hit, $seq_ref);431 432 my ($p_seq, $offset, $end) =433 maker::auto_annotator::get_translation_seq($t_seq);434 435 my $score = 0;436 foreach my $hsp ($hit->hsps) {437 $score += $hsp->score();438 }439 my $t_def = ">$t_name transcript offset:$offset score:$score";440 my $p_def = ">$t_name protein score:$score";441 442 if (! exists $fhs{$source}) {443 open(my $t_fh, "> $out_dir/$id.maker.$source.transcripts.fasta");444 open(my $p_fh, "> $out_dir/$id.maker.$source.proteins.fasta");445 $fhs{$source}{t} = $t_fh;446 $fhs{$source}{p} = $p_fh;447 }448 449 my $t_fh = $fhs{$source}{t};450 my $p_fh = $fhs{$source}{p};451 452 print $t_fh Fasta::toFasta($t_def, \$t_seq);453 print $p_fh Fasta::toFasta($p_def, \$p_seq);454 }455 }456 #-----------------------------------------------------------------------------457 423 sub maker_p_and_t_fastas { 458 my $annotations = shift @_; 424 my $maker = shift @_; 425 my $non_over = shift @_; 426 my $abinit = shift @_; 427 my $p_fastas = shift @_; 428 my $t_fastas = shift @_; 459 429 460 my $p_fastas = ''; 461 my $t_fastas = ''; 462 463 foreach my $an (@$annotations) { 430 foreach my $an (@$maker) { 464 431 foreach my $a (@{$an->{t_structs}}) { 465 432 my ($p_fasta, $t_fasta) = get_p_and_t_fastas($a); 466 $p_fastas .= $p_fasta; 467 $t_fastas .= $t_fasta; 468 } 433 $p_fastas->{maker} .= $p_fasta; 434 $t_fastas->{maker} .= $t_fasta; 435 } 436 } 437 438 foreach my $an (@$non_over) { 439 foreach my $a (@{$an->{t_structs}}) { 440 my ($p_fasta, $t_fasta) = get_p_and_t_fastas($a); 441 $p_fastas->{non_overlapping_ab_initio} .= $p_fasta; 442 $t_fastas->{non_overlapping_ab_initio} .= $t_fasta; 443 } 469 444 } 470 445 471 return $p_fastas, $t_fastas; 446 foreach my $an (@$abinit) { 447 foreach my $a (@{$an->{t_structs}}) { 448 my ($p_fasta, $t_fasta) = get_p_and_t_fastas($a); 449 my $source = $a->{hit}->algorithm; 450 $source =~ s/pred_gff\://; 451 $p_fastas->{$source} .= $p_fasta; 452 $t_fastas->{$source} .= $t_fasta; 453 } 454 } 472 455 } 473 456 … … 488 471 489 472 return($p_fasta, $t_fasta); 473 } 474 #---------------------------------------------------------------------------- 475 sub write_p_and_t_fastas{ 476 my $p_fastas = shift @_; 477 my $t_fastas = shift @_; 478 my $safe_seq_id = shift @_; 479 my $out_dir = shift @_; 480 481 while( my $key = each %$p_fastas){ 482 my $name = "$out_dir/$safe_seq_id.maker"; 483 $name .= ".$key" unless($key eq 'maker'); 484 $name .= "\.proteins.fasta"; 485 486 FastaFile::writeFile(\$p_fastas->{$key}, 487 $name, 488 ); 489 } 490 491 while( my $key = each %$t_fastas){ 492 my $name = "$out_dir/$safe_seq_id.maker"; 493 $name .= ".$key" unless($key eq 'maker'); 494 $name .= "\.transcripts.fasta"; 495 496 FastaFile::writeFile(\$t_fastas->{$key}, 497 $name, 498 ); 499 } 490 500 } 491 501 #---------------------------------------------------------------------------- … … 1052 1062 #----------------------------------------------------------------------------- 1053 1063 sub build_all_indexes { 1054 my @dbs = @_; 1055 1056 foreach my $db (@dbs) { 1057 my $index = new Bio::DB::Fasta($db); 1064 my $CTL_OPT = shift; 1065 1066 my @dbs = ($CTL_OPT->{_est}, 1067 $CTL_OPT->{_protein}, 1068 $CTL_OPT->{_repeat_protein}, 1069 $CTL_OPT->{_est_reads}, 1070 $CTL_OPT->{_altest} 1071 ); 1072 1073 foreach my $db (@dbs){ 1074 next if(! $db); 1075 new Bio::DB::Fasta($db); 1058 1076 } 1059 1077 } … … 1136 1154 1137 1155 $db =~ /([^\/]+)$/; 1138 my $tmp_db = "$ t_dir/$1";1156 my $tmp_db = "$TMP/$1"; 1139 1157 1140 1158 $LOG->add_entry("STARTED", $blast_finished, "") if($LOG_FLAG); 1141 1159 1142 #copy db to local tmp dir and run xdformat or formatdb 1143 if (! @{[<$tmp_db.xn?*>]} && (! -e $blast_finished || $opt_f) ) { 1144 copy($db, $tmp_db); 1145 dbformat($formater, $tmp_db, 'blastn'); 1160 #copy db to local tmp dir and run xdformat or formatdb 1161 if ((! @{[<$tmp_db.x?d*>]} || ! @{[<$tmp_db.?sq*>]}) && (! -e $blast_finished || $opt_f)) { 1162 if(my $lock = new File::NFSLock("$tmp_db.lock", 'EX', , 300)){ 1163 copy($db, $tmp_db) if(! -e $tmp_db); 1164 dbformat($formater, $tmp_db, 'blastn'); 1165 $lock->unlock; 1166 } 1146 1167 } 1147 1168 elsif (-e $blast_finished && ! $opt_f) { … … 1385 1406 1386 1407 $db =~ /([^\/]+)$/; 1387 my $tmp_db = "$ t_dir/$1";1408 my $tmp_db = "$TMP/$1"; 1388 1409 1389 1410 $LOG->add_entry("STARTED", $blast_finished, "") if($LOG_FLAG); 1390 1411 1391 1412 #copy db to local tmp dir and run xdformat or format db 1392 if (! @{[<$tmp_db.xp?*>]} && (! -e $blast_finished || $opt_f) ) { 1393 copy($db, $tmp_db); 1394 dbformat($formater, $tmp_db, 'blastx'); 1413 if ((! @{[<$tmp_db.x?d*>]} || ! @{[<$tmp_db.?sq*>]}) && (! -e $blast_finished || $opt_f) ) { 1414 if(my $lock = new File::NFSLock("$tmp_db.lock", 'EX', , 300)){ 1415 copy($db, $tmp_db) if(! -e $tmp_db); 1416 dbformat($formater, $tmp_db, 'blastx'); 1417 $lock->unlock; 1418 } 1395 1419 } 1396 1420 elsif (-e $blast_finished && ! $opt_f) { … … 1646 1670 1647 1671 $db =~ /([^\/]+)$/; 1648 my $tmp_db = "$ t_dir/$1";1672 my $tmp_db = "$TMP/$1"; 1649 1673 1650 1674 $LOG->add_entry("STARTED", $blast_finished, "") if($LOG_FLAG); 1651 1675 1652 1676 #copy db to local tmp dir and run xdformat or formatdb 1653 if (! @{[<$tmp_db.xn?*>]} && (! -e $blast_finished || $opt_f) ) { 1654 copy($db, $tmp_db); 1655 dbformat($formater, $tmp_db, 'tblastx'); 1677 if ((! @{[<$tmp_db.x?d*>]} || ! @{[<$tmp_db.?sq*>]}) && (! -e $blast_finished || $opt_f) ) { 1678 if(my $lock = new File::NFSLock("$tmp_db.lock", 'EX', , 300)){ 1679 copy($db, $tmp_db) if(! -e $tmp_db); 1680 dbformat($formater, $tmp_db, 'tblastx'); 1681 $lock->unlock; 1682 } 1656 1683 } 1657 1684 elsif (-e $blast_finished && ! $opt_f) { … … 1977 2004 $CTL_OPT{'model_pass'} = 1; 1978 2005 $CTL_OPT{'pred_pass'} = 0; 1979 $CTL_OPT{'other_pass'} = 1;2006 $CTL_OPT{'other_pass'} = 0; 1980 2007 $CTL_OPT{'est'} = ''; 1981 2008 $CTL_OPT{'est_reads'} = ''; … … 1990 2017 $CTL_OPT{'rm_gff'} = ''; 1991 2018 $CTL_OPT{'predictor'} = 'est2genome'; 2019 $CTL_OPT{'predictor'} = 'gff' if($main::eva); 1992 2020 $CTL_OPT{'snaphmm'} = 'fly'; 1993 2021 $CTL_OPT{'augustus_species'} = 'fly'; … … 1996 2024 $CTL_OPT{'pred_gff'} = ''; 1997 2025 $CTL_OPT{'other_gff'} = ''; 1998 $CTL_OPT{'alt_peptide'} = ' c';2026 $CTL_OPT{'alt_peptide'} = 'C'; 1999 2027 $CTL_OPT{'cpus'} = 1; 2028 $CTL_OPT{'evaluate'} = 0; 2029 $CTL_OPT{'evaluate'} = 1 if($main::eva); 2000 2030 $CTL_OPT{'max_dna_len'} = 100000; 2001 2031 $CTL_OPT{'min_contig'} = 1; … … 2003 2033 $CTL_OPT{'pred_flank'} = 200; 2004 2034 $CTL_OPT{'single_exon'} = 0; 2035 $CTL_OPT{'single_length'} = 250; 2005 2036 $CTL_OPT{'keep_preds'} = 0; 2006 2037 $CTL_OPT{'retry'} = 1; 2007 $CTL_OPT{'datastore'} = 0; 2038 $CTL_OPT{'clean_try'} = 0; 2039 $CTL_OPT{'TMP'} = ''; 2040 $CTL_OPT{'eval_pred'} = ''; 2041 $CTL_OPT{'eval_pred'} = 'snap' if($main::eva); 2008 2042 $CTL_OPT{'clean_up'} = 0; 2009 2043 } … … 2075 2109 $CTL_OPT{'eva_gspmax'} = 100; 2076 2110 $CTL_OPT{'enable_fathom'} = 0; 2077 2111 $CTL_OPT{'enable_fathom'} = 1 if($main::eva); 2078 2112 } 2079 2113 … … 2133 2167 #--load command line options 2134 2168 $CTL_OPT{genome} = $OPT{genome} if (defined $OPT{genome}); 2169 $CTL_OPT{genome_gff} = $OPT{genome_gff} if (defined $OPT{genome_gff}); 2135 2170 $CTL_OPT{force} = $OPT{force} if (defined $OPT{force}); 2136 2171 $CTL_OPT{predictor} = $OPT{predictor} if (defined $OPT{predictor}); 2137 2172 $CTL_OPT{retry} = $OPT{retry} if (defined $OPT{retry}); 2138 2173 $CTL_OPT{cpus} = $OPT{cpus} if (defined $OPT{cpus}); 2174 $CTL_OPT{clean_try} = $OPT{clean_try} if (defined $OPT{clean_try}); 2139 2175 2140 2176 #skip repeat masking command line option … … 2147 2183 } 2148 2184 2185 #required for evaluator to work 2186 $CTL_OPT{predictor} = 'gff' if($main::eva); 2187 $CTL_OPT{model_pass} = 1 if($main::eva); 2188 2149 2189 #parse predictor and error check 2150 2190 $CTL_OPT{predictor} =~ s/\s+//g; 2151 2191 my @predictors = split(',', $CTL_OPT{predictor}); 2152 $CTL_OPT{_predictor} = \ @predictors;2192 $CTL_OPT{_predictor} = \@predictors; 2153 2193 2154 2194 foreach my $p (@predictors) { … … 2159 2199 "Valid entries are: est2genome, abinit, gff, snap, augustus,\n". 2160 2200 "or fgenesh\n\n"; 2201 } 2202 } 2203 2204 #parse eval_pred and error check 2205 $CTL_OPT{eval_pred} =~ s/\s+//g; 2206 my @eval_preds = split(',', $CTL_OPT{eval_pred}); 2207 $CTL_OPT{_eval_pred} = \@eval_preds; 2208 2209 foreach my $p (@eval_preds) { 2210 if ($p !~ /^snap$|^augustus$|^fgenesh$|^twinscan$|^jigsaw$|^gff$/) { 2211 $error .= "ERROR: Invalid eval_pred defined: $p\n". 2212 "Valid entries are: gff, snap, augustus, or fgenesh\n\n"; 2161 2213 } 2162 2214 } … … 2232 2284 push (@infiles, 'rmlib') if ($CTL_OPT{rmlib}); 2233 2285 push (@infiles, 'snap') if (grep (/snap/, $CTL_OPT{predictor})); 2234 push (@infiles, 'snap') if ($CTL_OPT{snap});2235 2286 push (@infiles, 'augustus') if (grep (/augustus/, $CTL_OPT{predictor})); 2236 push (@infiles, 'augustus') if ($CTL_OPT{augustus});2237 2287 push (@infiles, 'fgenesh') if (grep (/fgenesh/, $CTL_OPT{predictor})); 2238 push (@infiles, 'fgenesh') if ($CTL_OPT{fgenesh});2239 2288 push (@infiles, 'twinscan') if (grep (/twinscan/, $CTL_OPT{predictor})); 2240 push (@infiles, 'twinscan') if ($CTL_OPT{twinscan});2241 2289 push (@infiles, 'jigsaw') if (grep (/jigsaw/, $CTL_OPT{predictor})); 2242 push (@infiles, 'jigsaw') if ($CTL_OPT{jigsaw}); 2243 push (@infiles, 'qrna') if ($CTL_OPT{qrna}); 2290 push (@infiles, 'snap') if (grep (/snap/, $CTL_OPT{eval_red})); 2291 push (@infiles, 'augustus') if (grep (/augustus/, $CTL_OPT{eval_pred})); 2292 push (@infiles, 'fgenesh') if (grep (/fgenesh/, $CTL_OPT{eval_pred})); 2293 push (@infiles, 'twinscan') if (grep (/twinscan/, $CTL_OPT{eval_pred})); 2294 push (@infiles, 'jigsaw') if (grep (/jigsaw/, $CTL_OPT{eval_pred})); 2295 push (@infiles, 'fathom') if ($CTL_OPT{enable_fathom}); 2244 2296 push (@infiles, 'rm_gff') if($CTL_OPT{rm_gff}); 2245 2297 push (@infiles, 'est_gff') if($CTL_OPT{est_gff}); … … 2266 2318 next; 2267 2319 } 2268 2269 if (not -e $CTL_OPT{$in}) { 2320 elsif (not -e $CTL_OPT{$in}) { 2270 2321 $error .= "ERROR: The \'$in\' file $CTL_OPT{$in} does not exist.\n". 2271 2322 "Please check your control files: maker_opts.ctl, maker_bopts, or maker_exe.ctl\n\n"; … … 2279 2330 2280 2331 #--error check that values are meaningful 2281 if ( $CTL_OPT{augustus}&& not $CTL_OPT{augustus_species}) {2332 if (grep (/^augustus$/, @infiles) && not $CTL_OPT{augustus_species}) { 2282 2333 warn "WARNING: There is no species specified for Augustus in maker_opts.ctl augustus_species.\n". 2283 2334 "As a result the default (fly) will be used.\n\n"; 2284 2335 $CTL_OPT{augustus_species} = "fly"; 2285 2336 } 2286 if ( $CTL_OPT{augustus}&&2337 if (grep (/^augustus$/, @infiles) && 2287 2338 (! $ENV{AUGUSTUS_CONFIG_PATH} || ! -e "$ENV{AUGUSTUS_CONFIG_PATH}/extrinsic/extrinsic.MPE.cfg") 2288 2339 ) { 2289 2340 $error .= "ERROR: The environmental variable AUGUSTUS_CONFIG_PATH has not been set\n". 2290 2341 "or is not set correctly Please set this in your profile per Augustus\n". 2291 "installation instructions \n\n";2292 } 2293 if ( ($CTL_OPT{snap}||$CTL_OPT{enable_fathom}) && not $CTL_OPT{snaphmm}) {2294 warn "WARNING: There is no model specified for for Snap in maker_opts.ctl snaphmm.\n".2342 "installation instructions then try again.\n\n"; 2343 } 2344 if (grep (/^snaps$|^fathom$/, @infiles) && not $CTL_OPT{snaphmm}) { 2345 warn "WARNING: There is no model specified for for Snap/Fathom in maker_opts.ctl snaphmm.\n". 2295 2346 "As a result, the default (fly) will be used.\n\n"; 2296 2347 $CTL_OPT{snaphmm} = "fly"; 2297 2348 } 2298 2299 if (($CTL_OPT{snap} || $CTL_OPT{enable_fathom}) && 2300 ! -e $CTL_OPT{snaphmm} && 2349 if (grep (/^snap$|^fathom$/, @infiles) && ! -e $CTL_OPT{snaphmm} && 2301 2350 (! exists $ENV{ZOE} || ! -e $ENV{ZOE}."/HMM/".$CTL_OPT{snaphmm}) 2302 2351 ) { 2303 $error .= "ERROR: The snaphmm specified for Snap in maker_opts.ctl does not exist.\n\n";2304 } 2305 if ( $CTL_OPT{fgenesh}) {2352 $error .= "ERROR: The snaphmm specified for Snap/Fathom in maker_opts.ctl does not exist.\n\n"; 2353 } 2354 if (grep (/^fgenesh$/, @infiles)) { 2306 2355 if (! $CTL_OPT{fgenesh_par_file}) { 2307 2356 $error .= "ERROR: There is no parameter file secified for for FgenesH in\n". … … 2323 2372 } 2324 2373 if ($CTL_OPT{retry} < 0) { 2325 warn "WARNING: \'retry\' must be set to 0 or greater.\n\n"; 2374 warn "WARNING: \'retry\' must be set to 0 or greater.\n". 2375 "It will now be set to 0\n\n"; 2326 2376 $CTL_OPT{retry} = 0; 2327 } 2328 2377 } 2378 if($CTL_OPT{TMP} && ! -d $CTL_OPT{TMP}){ 2379 $error .= "The TMP value \'$CTL_OPT{TMP}\' is not a directory or does not exist\n"; 2380 } 2381 2329 2382 die $error if ($error); 2330 2383 … … 2342 2395 if ($iterator->number_of_entries() > 1000 && ! $CTL_OPT{datastore}) { 2343 2396 warn "WARNING: There are more than 1000 fasta entries in the input file.\n". 2344 " Datastore will be used to avoid overloading the data structure of\n".2397 "A two depth datastore will be used to avoid overloading the data structure of\n". 2345 2398 "the output directory.\n\n"; 2346 2399 … … 2365 2418 } 2366 2419 2367 #---set up blast databases for analyisis2420 #---set up blast databases and indexes for analyisis 2368 2421 create_blastdb(\%CTL_OPT, $mpi_size); 2422 build_all_indexes(\%CTL_OPT); 2423 2424 #--set up optional global TMP 2425 if($CTL_OPT{TMP}){ 2426 $CTL_OPT{_TMP} = tempdir("maker_XXXXXX", CLEANUP => 1, DIR => 1); 2427 } 2369 2428 2370 2429 #--set values for datastructure … … 2390 2449 my $dir = shift || Cwd::cwd(); 2391 2450 my %O = (@_) ? @_ : set_defaults(); 2392 2393 #--build maker_opts.ctl file 2394 open (OUT, "> $dir/maker_opts.ctl"); 2395 print OUT "#-----Genome (Required for De-Novo Annotations)\n"; 2396 print OUT "genome:$O{genome} #genome sequence file in fasta format\n"; 2397 print OUT "\n"; 2398 print OUT "#-----Re-annotation Options\n"; 2399 print OUT "genome_gff:$O{genome_gff} #re-annotate genome based on this gff3 file\n"; 2451 $main::eva = 1; 2452 my $ev = $main::eva; 2453 2454 #--build opts.ctl file 2455 open (OUT, "> $dir/eval_opts.ctl") if($ev); 2456 open (OUT, "> $dir/maker_opts.ctl") if(!$ev); 2457 print OUT "#-----Genome (Required for De-Novo Annotation)\n" if(!$ev); 2458 print OUT "genome:$O{genome} #genome sequence file in fasta format\n"if(!$ev); 2459 print OUT "\n"if(!$ev); 2460 print OUT "#-----Re-annotation Options (Only Maker derived GFF3)\n" if(!$ev); 2461 print OUT "#-----Maker Derived GFF3 Annotations to Evaluate (genome fasta is internal to GFF3)\n" if($ev); 2462 print OUT "genome_gff:$O{genome_gff} #re-annotate genome based on this gff3 file\n" if(!$ev); 2463 print OUT "genome_gff:$O{genome_gff} #Maker derived gff3 file\n" if($ev); 2400 2464 print OUT "est_pass:$O{est_pass} #use ests in genome_gff: 1 = yes, 0 = no\n"; 2401 2465 print OUT "altest_pass:$O{altest_pass} #use alternate organism ests in genome_gff: 1 = yes, 0 = no\n"; 2402 2466 print OUT "protein_pass:$O{protein_pass} #use proteins in genome_gff: 1 = yes, 0 = no\n"; 2403 print OUT "rm_pass:$O{ protein_pass} #use repeats in genome_gff: 1 = yes, 0 = no\n";2404 print OUT "model_pass:$O{ protein_pass} #use gene models in genome_gff: 1 = yes, 0 = no\n";2467 print OUT "rm_pass:$O{rm_pass} #use repeats in genome_gff: 1 = yes, 0 = no\n"; 2468 print OUT "model_pass:$O{model_pass} #use gene models in genome_gff: 1 = yes, 0 = no\n" if(!$ev); 2405 2469 print OUT "pred_pass:$O{pred_pass} #use ab-initio predictions in genome_gff: 1 = yes, 0 = no\n"; 2406 print OUT "other_pass:$O{ protein_pass} #passthrough everything else in genome_gff: 1 = yes, 0 = no\n";2470 print OUT "other_pass:$O{other_pass} #passthrough everything else in genome_gff: 1 = yes, 0 = no\n" if(!$ev); 2407 2471 print OUT "\n"; 2408 print OUT "#-----EST Evidence (you must provide a value for at least one)\n"; 2472 print OUT "#-----External GFF3 Annotations to Evaluate\n" if($ev); 2473 print OUT "model_gff:$O{model_gff} #gene models from an external gff3 file\n" if($ev); 2474 print OUT "genome:$O{genome} #genome sequence file in fasta format for GFF3\n"if($ev); 2475 print OUT "\n"if($ev); 2476 print OUT "#-----EST Evidence (you should provide a value for at least one)\n"; 2409 2477 print OUT "est:$O{est} #non-redundant set of assembled ESTs in fasta format (classic EST analysis)\n"; 2410 2478 print OUT "est_reads:$O{est_reads} #un-assembled EST reads in fasta format (for deep nextgen mRNASeq)\n"; 2411 2479 print OUT "altest:$O{altest} #EST/cDNA sequence file in fasta format from an alternate organism\n"; 2412 print OUT "est_gff:$O{est_gff} #EST evidence from a seperategff3 file\n";2480 print OUT "est_gff:$O{est_gff} #EST evidence from an external gff3 file\n"; 2413 2481 print OUT "altest_gff:$O{altest_gff} #Alternate organism EST evidence from a seperate gff3 file\n"; 2414 2482 print OUT "\n"; 2415 print OUT "#-----Protein Homology Evidence (you mustprovide a value for at least one)\n";2483 print OUT "#-----Protein Homology Evidence (you should provide a value for at least one)\n"; 2416 2484 print OUT "protein:$O{protein} #protein sequence file in fasta format\n"; 2417 print OUT "protein_gff:$O{protein_gff} #protein homology evidence from a gff3 file\n";2485 print OUT "protein_gff:$O{protein_gff} #protein homology evidence from an external gff3 file\n"; 2418 2486 print OUT "\n"; 2419 2487 print OUT "#-----Repeat Masking (leave values blank to skip)\n"; … … 2421 2489 print OUT "repeat_protein:$O{repeat_protein} #a database of transposable element proteins in fasta format\n"; 2422 2490 print OUT "rmlib:$O{rmlib} #an organism specific repeat library in fasta format\n"; 2423 print OUT "rm_gff:$O{rm_gff} #repeat elements from a gff3 file\n";2491 print OUT "rm_gff:$O{rm_gff} #repeat elements from an external gff3 file\n"; 2424 2492 print OUT "\n"; 2425 print OUT "#-----Gene Prediction Options\n"; 2426 print OUT "predictor:$O{predictor} #prediction method for annotations (seperate multiple values by ',')\n"; 2493 print OUT "#-----Gene Prediction Options\n" if(!$ev); 2494 print OUT "#-----Evaluator Ab-Initio Comparison Options\n" if($ev); 2495 print OUT "predictor:$O{predictor} #prediction method for annotations (seperate multiple values by ',')\n" if(!$ev); 2496 print OUT "eval_pred:$O{eval_pred} #prediction method for comparisons (seperate multiple values by ',')\n" if($ev); 2427 2497 print OUT "snaphmm:$O{snaphmm} #SNAP HMM model\n"; 2428 2498 print OUT "augustus_species:$O{augustus_species} #Augustus gene prediction model\n"; 2429 2499 print OUT "fgenesh_par_file:$O{fgenesh_par_file} #Fgenesh parameter file\n"; 2430 print OUT "model_gff:$O{model_gff} #gene models from a gff3 file (annotation passthrough)\n";2431 print OUT "pred_gff:$O{model_gff} #ab-initio predictions from a gff3 file\n";2500 print OUT "model_gff:$O{model_gff} #gene models from an external gff3 file (annotation pass-through)\n" if(!$ev); 2501 print OUT "pred_gff:$O{model_gff} #ab-initio predictions from an external gff3 file\n"; 2432 2502 print OUT "\n"; 2433 print OUT "#-----Other Annotation Type Options (features maker doesn't recognize)\n" ;2434 print OUT "other_gff:$O{other_gff} #features to pass through to final output from a gff3 file\n";2435 print OUT "\n" ;2503 print OUT "#-----Other Annotation Type Options (features maker doesn't recognize)\n" if(!$ev); 2504 print OUT "other_gff:$O{other_gff} #features to pass-through to final output from an extenal gff3 file\n" if(!$ev); 2505 print OUT "\n" if(!$ev); 2436 2506 print OUT "#-----External Application Specific Options\n"; 2437 2507 print OUT "alt_peptide:$O{alt_peptide} #amino acid used to replace non standard amino acids in blast databases\n"; … … 2439 2509 print OUT "\n"; 2440 2510 print OUT "#-----Maker Specific Options\n"; 2511 print OUT "evaluate:$O{evaluate} #run Evaluator on all annotations\n" if(!$ev); 2441 2512 print OUT "max_dna_len:$O{max_dna_len} #length for dividing up contigs into chunks (larger values increase memory usage)\n"; 2442 2513 print OUT "min_contig:$O{min_contig} #all contigs from the input genome file below this size will be skipped\n"; 2443 print OUT "split_hit:$O{split_hit} #length for the splitting of hits (expected max intron size for EST and proteinalignments)\n";2514 print OUT "split_hit:$O{split_hit} #length for the splitting of hits (expected max intron size for evidence alignments)\n"; 2444 2515 print OUT "pred_flank:$O{pred_flank} #length of sequence surrounding EST and protein evidence used to extend gene predictions\n"; 2445 print OUT "single_exon:$O{single_exon} #consider EST hits aligning to single exons when generating annotations, 1 = yes, 0 = no\n"; 2446 print OUT "keep_preds:$O{keep_preds} #keep ab-initio predictions that do not overlap a maker annotation, 1 = yes, 0 = no\n"; 2516 print OUT "single_exon:$O{single_exon} #consider single exon EST evidence when generating annotations, 1 = yes, 0 = no\n"; 2517 print OUT "single_length:$O{single_length} #min length required for single exon ESTs if \'single_exon\ is enabled'\n"; 2518 print OUT "keep_preds:$O{keep_preds} #Add non-overlapping ab-inito gene prediction to final annotation set, 1 = yes, 0 = no\n" if(!$ev); 2447 2519 print OUT "retry:$O{retry} #number of times to retry a contig if annotation fails for some reason\n"; 2448 print OUT "clean_up:$O{clean_up} #remove theVoid directory: 1 = yes, 0 = no\n"; 2520 print OUT "clean_try:$O{clean_try} #remove all data from previous run before retrying, 1 = yes, 0 = no\n"; 2521 print OUT "TMP:$O{TMP} #secify a directory other than the system default temporary directory for temporary files\n"; 2522 print OUT "clean_up:$O{clean_up} #removes theVoid directory with individual analysis files, 1 = yes, 0 = no\n"; 2449 2523 close (OUT); 2450 2524 2451 #--build maker_bopts.ctl file 2452 open (OUT, "> $dir/maker_bopts.ctl"); 2525 #--build bopts.ctl file 2526 open (OUT, "> $dir/eval_bopts.ctl") if($ev); 2527 open (OUT, "> $dir/maker_bopts.ctl") if(!$ev); 2453 2528 print OUT "#-----BLAST and Exonerate Statistics Thresholds\n"; 2454 2529 print OUT "blast_type:$O{blast_type} #set to 'wublast' or 'ncbi'\n"; … … 2479 2554 2480 2555 #--build maker_exe.ctl file 2481 open (OUT, "> $dir/maker_exe.ctl"); 2482 print OUT "#-----Location of Executables Used by Maker\n"; 2556 open (OUT, "> $dir/eval_exe.ctl") if($ev); 2557 open (OUT, "> $dir/maker_exe.ctl") if(!$ev); 2558 print OUT "#-----Location of Executables Used by Maker/Evaluator\n"; 2483 2559 print OUT "formatdb:$O{formatdb} #location of NCBI formatdb executable\n"; 2484 2560 print OUT "blastall:$O{blastall} #location of NCBI blastall executable\n"; … … 2494 2570 print OUT "augustus:$O{augustus} #location of augustus executable\n"; 2495 2571 print OUT "fgenesh:$O{fgenesh} #location of fgenesh executable\n"; 2496 # print OUT "twinscan:$O{twinscan} #location of twinscan executable\n"; 2497 print OUT "fathom:$O{fathom} #location of fathom executable\n"; 2572 print OUT "twinscan:$O{twinscan} #location of twinscan executable (not yet implemented)\n"; 2498 2573 print OUT "\n"; 2499 2574 print OUT "#-----Other Algorithms\n"; 2500 2575 print OUT "jigsaw:$O{jigsaw} #location of jigsaw executable (not yet implemented)\n"; 2501 2576 print OUT "qrna:$O{qrna} #location of qrna executable (not yet implemented)\n"; 2577 print OUT "fathom:$O{fathom} #location of fathom executable (not yet implemented)\n"; 2502 2578 close(OUT); 2503 2579 lib/Process/MpiChunk.pm
r151 r159 130 130 #-set up variables that are the result of chunk accumulation 131 131 $VARS->{masked_total_seq} = ''; 132 $VARS->{p_fastas} = '';133 $VARS->{t_fastas} = '';132 $VARS->{p_fastas} = {}; 133 $VARS->{t_fastas} = {}; 134 134 135 135 #--prebuild an index of the databases … … 650 650 my $masked_preds = GI::abinits($masked_file, 651 651 $the_void, 652 $safe_seq_id ,652 $safe_seq_id.".masked", 653 653 \%CTL_OPT, 654 654 $LOG … … 1527 1527 \%CTL_OPT 1528 1528 ); 1529 1530 #-------------------------CODE 1531 1532 #------------------------RESULTS 1533 %results = (maker_anno => $maker_anno); 1529 1530 my $non_over = maker::auto_annotator::get_non_overlaping_abinits($maker_anno, 1531 $annotations->{abinit} 1532 ); 1533 #-------------------------CODE 1534 1535 #------------------------RESULTS 1536 %results = (maker_anno => $maker_anno, annotations => $annotations, non_over => $non_over); 1534 1537 #------------------------RESULTS 1535 1538 } … … 1551 1554 @args = (qw{chunk 1552 1555 maker_anno 1556 non_over 1557 annotations 1553 1558 blastx_data 1554 1559 blastn_data … … 1569 1574 elsif ($flag eq 'run') { 1570 1575 #-------------------------CODE 1571 my $chunk = $VARS->{chunk}; 1572 my $maker_anno = $VARS->{maker_anno}; 1576 my $chunk = $VARS->{chunk}; 1577 my $maker_anno = $VARS->{maker_anno}; 1578 my $non_over = $VARS->{non_over}; 1579 my $annotations = $VARS->{annotations}; 1573 1580 my $blastx_data = $VARS->{blastx_data}; 1574 1581 my $blastn_data = $VARS->{blastn_data}; … … 1601 1608 $GFF3->resolved_flag if (not $chunk->is_last); #adds ### between contigs 1602 1609 1603 #--- building fastas for annotations (grows with itteration) 1604 my ($p_fasta, $t_fasta) = GI::maker_p_and_t_fastas($maker_anno); 1605 $p_fastas .= $p_fasta; 1606 $t_fastas .= $t_fasta; 1610 #--- building fastas for annotations (grows with iteration) 1611 GI::maker_p_and_t_fastas($maker_anno, 1612 $non_over, 1613 $annotations->{abinit}, 1614 $p_fastas, 1615 $t_fastas, 1616 ); 1607 1617 #-------------------------CODE 1608 1618 … … 1661 1671 1662 1672 #--- write fastas for ab-initio predictions 1663 my ($p_snap_fastas, 1664 $t_snap_fastas) = GI::abinit_p_and_t_fastas($preds, 1665 $safe_seq_id, 1666 $q_seq_ref, 1667 $out_dir 1668 ); 1669 1670 #--Write fasta files now that all chunks are finished 1671 FastaFile::writeFile(\$p_fastas, 1672 "$out_dir/$safe_seq_id.maker.proteins.fasta" 1673 ); 1674 FastaFile::writeFile(\$t_fastas, 1675 "$out_dir/$safe_seq_id.maker.transcripts.fasta" 1676 ); 1673 GI::write_p_and_t_fastas($p_fastas, $t_fastas, $safe_seq_id, $out_dir); 1677 1674 1678 1675 #--- write GFF3 file … … 1821 1818 my $tag = shift || 'throw'; 1822 1819 1823 $E->{-text} = "ERROR: Failed while ".$extra."!!\n\n";1820 $E->{-text} .= "ERROR: Failed while ".$extra."!!\n\n" if($extra); 1824 1821 1825 1822 if($tag eq 'handle'){ lib/Process/MpiTiers.pm
r144 r159 260 260 if($chunk->failed){ 261 261 my $E = $chunk->exception; 262 $self->_handler($E, " ERROR:Chunk failed at level $level_num\n");262 $self->_handler($E, "Chunk failed at level $level_num\n"); 263 263 } 264 264 else{ lib/Widget/RepeatMasker.pm
r127 r159 250 250 foreach my $key (keys %hsps){ 251 251 my $f = 252 Bio::Search::Hit::PhatHit::repeatmasker->new('-name' => $ q_name,252 Bio::Search::Hit::PhatHit::repeatmasker->new('-name' => $key, 253 253 '-description' => 'NA', 254 254 '-algorithm' => 'repeat_masker', lib/Widget/fgenesh.pm
r143 r159 157 157 158 158 my $iterator = new Iterator::Fasta($q_file); 159 my $fasta = $iterator->next Entry();159 my $fasta = $iterator->nextFasta(); 160 160 161 161 my $def = Fasta::getDef($fasta); 162 162 my $q_seq = Fasta::getSeqRef($fasta); 163 164 my ($q_name) = $def =~ /^>(.+?) /; 163 my $q_name = Fasta::def2SeqID($def);; 165 164 166 165 my $fh = new FileHandle(); lib/cluster.pm
r151 r159 14 14 use compare; 15 15 use SimpleCluster; 16 use Shadower; 17 16 18 @ISA = qw( 17 19 ); … … 166 168 my $ref = $hit->algorithm; 167 169 168 return 0 if $ref =~ /repeat/i; 170 return 0 if $ref =~ /^repeat/i; 171 return 0 if $ref =~ /^repeat_gff\:/i; 169 172 return 1 if $ref =~ /^snap$/i; 170 173 return 1 if $ref =~ /^augustus$/i; 171 174 return 1 if $ref =~ /^fgenesh$/i; 172 175 return 1 if $ref =~ /^twinscan$/i; 176 return 1 if $ref =~ /^jigsaw$/i; 177 return 1 if $ref =~ /^pred_gff\:/i; 173 178 return 2 if $ref =~ /^blastn$/i; 174 179 return 2 if $ref =~ /^tblastx$/i; 180 return 2 if $ref =~ /^altest_gff\:/i; 175 181 return 3 if $ref =~ /^blastx$/i; 182 return 3 if $ref =~ /^protein_gff\:/i; 176 183 return 4 if $ref =~ /2genome$/i; 184 return 4 if $ref =~ /^est_gff\:/i; 185 return 5 if $ref =~ /^maker$/i; 186 return 5 if $ref =~ /^model_gff\:/i; 177 187 die "UNKNOWN CLASS(".ref($hit)."), ALGORITHM($ref), in cluster::criteria\n"; 178 188 } … … 182 192 183 193 my $score = $hit->score(); 194 $score = '' if(! defined $score); 184 195 #check if value is numerical ad adjust if not 185 196 if($score !~ /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[-+]?\d+)?$/){ 186 $score = $hit->bits() 197 $score = $hit->bits(); 198 $score = '' if(! defined $score); 187 199 } 188 200 if($score !~ /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[-+]?\d+)?$/){ 189 201 $score = $hit->significance; 202 $score = '' if(! defined $score); 190 203 if($score =~ /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[-+]?\d+)?$/){ 191 204 $score = 10000 - (10000 * $score); lib/evaluator/evaluate.pm
r156 r159 21 21 #--------------------------------- METHODS ------------------------------------ 22 22 #------------------------------------------------------------------------------ 23 24 23 sub evaluate_in_maker { 25 24 … … 114 113 } 115 114 } 116 115 #------------------------------------------------------------------------------- 116 sub evaluate_maker_annotations { 117 my $annotations = shift; 118 my $seq = shift; 119 my $out_base = shift; 120 my $the_void = shift; 121 my $CTL_OPTIONS = shift; 122 123 #iterate over each gene annotation 124 foreach my $ann (@$annotations){ 125 my @t_cluster; 126 my @pol_p_hits; 127 my @pol_e_hits; 128 my @blastx_hits; 129 my @tblastx_hits; 130 my @ab_inits; 131 132 #collect all evidence and transcripts hit for the gene 133 foreach my $t_struct (@{$ann->{t_structs}}){ 134 my $hit = $t_struct->{hit}; 135 my $evi = $t_struct->{evi}; 136 137 $pol_p = maker::auto_annotator::get_selected_types($evi->{gomiph}, 'protein2genome'); 138 $pol_e = maker::auto_annotator::get_selected_types($evi->{ests}, 'est2genome', 'est_gff'); 139 $blastx = maker::auto_annotator::get_selected_types($evi->{gomiph},'blastx', 'protein_gff'); 140 $tblastx = maker::auto_annotator::get_selected_types($evi->{alt_ests},'tblastx', 'altest_gff'); 141 $ab = $evi->{all_preds}; 142 143 push(@t_cluster, $hit); 144 push(@pol_p_hits, @$pol_p); 145 push(@pol_e_hits, @$pol_e); 146 push(@blastx_hits, @$blastx); 147 push(@tblastx_hits, @$tblastx); 148 push(@ab_inits, @$ab); 149 } 150 151 #unique the set of evidence 152 foreach my $hit (@pol_p_hits, @pol_e_hits, @blastx_hits, @tblastx_hits, @ab_inits){ 153 $hit->{_uniq_set} = 0; 154 } 155 @pol_p_hits = grep {$_->{_uniq_set}++ == 0} @pol_p_hits; 156 @pol_e_hits = grep {$_->{_uniq_set}++ == 0} @pol_e_hits; 157 @blastx_hits = grep {$_->{_uniq_set}++ == 0} @blastx_hits; 158 @tblastx_hits = grep {$_->{_uniq_set}++ == 0} @tblastx_hits; 159 @ab_inits = grep {$_->{_uniq_set}++ == 0} @ab_inits; 160 161 #get gene level statistics 162 my $so_code = evaluator::so_classifier::so_code(\@t_cluster); 163 my $alt_spli_sup = evaluator::funs::alt_spli(\@t_cluster, \@pol_e_hits, $seq); 164 my $geneAED = evaluator::AED::gene_AED($c, \@pol_e_hits, \@pol_p_hits, \@blastx_hits, \@ab_inits, $seq); 165 166 $ann->{geneAED} = $geneAED; 167 $ann->{so_code} = $so_code; 168 169 #get transcript level statistics; 170 foreach my $t_struct (@{$ann->{t_structs}}){ 171 my $t_name = $t_struct->{t_name}; 172 173 #run evaluator 174 my $eva = power_evaluate($f, 175 $seq, 176 \@pol_p_hits, 177 \@pol_e_hits, 178 \@blastx_hits, 179 \@abinits, 180 $so_code, 181 $geneAED, 182 $alt_spli_sup, 183 $t_name, 184 $CTL_OPTIONS, 185 $the_void, 186 ); 187 188 $t_struct->{report} = $eva->{report}; 189 190 #print report 191 my $dir = "$out_base/evaluator"; 192 mkdir($dir) if(! -e $dir); 193 my $file = "$dir/".Fasta::seqID2SafeID($t->{hit}->name); 194 ($file) = $file =~ /^([^\s\t\n]+)/; 195 $file . = ".eva"; 196 open(my $FH, "> $file"); 197 print $FH $t->{report}; 198 close($FH); 199 } 200 } 201 } 117 202 #------------------------------------------------------------------------------- 118 203 sub power_evaluate { lib/runlog.pm
r145 r159 24 24 'rm_gff', 25 25 'predictor', 26 'eval_pred', 26 27 'sort_base', 27 28 'snaphmm', … … 34 35 'pred_flank', 35 36 'single_exon', 37 'single_length', 36 38 'keep_preds', 37 39 'alt_peptide', 40 'evaluate', 38 41 'blast_type', 39 42 'pcov_blastn', … … 55 58 'ep_score_limit', 56 59 'en_score_limit', 60 'enable_fathom' 57 61 ); 58 62 … … 155 159 } 156 160 else{ 157 $continue_flag = 2; #rerun died161 $continue_flag = ($CTL_OPTIONS{clean_try}) ? 2 : 3; #rerun died 158 162 $continue_flag = -1 if($self->{die_count} > $CTL_OPTIONS{retry}); #only let die up to count 159 163 $rm_key{retry}++ if ($continue_flag == 2); … … 196 200 $continue_flag = 1; #re-run because ctlopts changed 197 201 198 $rm_key{preds}++; #all changes affect final predictions 199 202 if($key ne 'evaluate' && 203 $key ne 'enable_fathom'){ 204 $rm_key{preds}++; #almost all changes affect final predictions 205 } 206 200 207 if (-e $gff_file) { 201 208 $rm_key{gff}++; #always rebuild gff when some option has changed … … 544 551 print STDERR "#---------------------------------------------------------------------\n", 545 552 "Now retrying the contig!!\n", 553 "All contig related data will be erased before continuing!!\n", 554 "SeqID: $seq_id\n", 555 "Length: $length\n", 556 "Retry: $die_count!!\n", 557 "#---------------------------------------------------------------------\n\n\n"; 558 } 559 elsif($flag == 3){ 560 print STDERR "#---------------------------------------------------------------------\n", 561 "Now retrying the contig!!\n", 546 562 "SeqID: $seq_id\n", 547 563 "Length: $length\n", … … 587 603 } 588 604 elsif($flag == 2){ 589 $message = 'RETRY'; #re-run previously died 605 $message = 'RETRY_CLEAN'; #re-run previously died 606 } 607 elsif($flag == 3){ 608 $message = 'RETRY'; #re-run previously died 590 609 } 591 610 elsif($flag == -1){
