Changeset 271
- Timestamp:
- 09/30/09 14:05:39 (2 months ago)
- Files:
-
- lib/GI.pm (modified) (6 diffs)
- lib/Process/MpiChunk.pm (modified) (1 diff)
- lib/Widget/fgenesh.pm (modified) (6 diffs)
- lib/clean.pm (modified) (1 diff)
- lib/ds_utility.pm (modified) (3 diffs)
- lib/maker/auto_annotator.pm (modified) (26 diffs)
- lib/runlog.pm (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
lib/GI.pm
r269 r271 352 352 } 353 353 354 if ($p_cutoff <= 1 && $m_cutoff <= 1) { #too small, all are heldover for next round 355 push (@holdovers, @{$hit_groups}); 354 #too small, all are heldover for next round 355 if ($p_cutoff <= 1 + $chunk->offset && 356 $m_cutoff <= 1 + $chunk->offset) { 357 foreach my $g (@{$hit_groups}){ 358 push (@holdovers, $g); 359 push (@keepers, []); 360 } 356 361 return @holdovers, @keepers; 357 362 } … … 368 373 ($b, $e) = ($e, $b) if $b > $e; 369 374 370 if (($e < $p_cutoff && $strand eq '1' ) ||371 ($e < $m_cutoff && $strand eq '-1' )375 if (($e < $p_cutoff && $strand eq '1' && $p_cutoff > $chunk->offset +1) || 376 ($e < $m_cutoff && $strand eq '-1' && $m_cutoff > $chunk->offset +1) 372 377 ) { 378 push(@{$group_keepers}, $hit); 379 } 380 else { 381 push(@{$group_holdovers}, $hit); 382 } 383 } 384 385 push(@keepers, $group_keepers); 386 push(@holdovers, $group_holdovers); 387 } 388 389 #hit holdovers and keepers are returned in same order given by user 390 return @holdovers, @keepers; 391 } 392 #----------------------------------------------------------------------------- 393 sub process_the_chunk_divide_temp{ 394 my $chunk = shift @_; 395 my $split_hit = shift @_; 396 my $hit_groups = \@_; #processed and returned in order given by user 397 398 my $p_hits; 399 400 foreach my $group (@{$hit_groups}) { 401 push(@{$p_hits}, @{$group}); 402 } 403 404 my $coors = PhatHit_utils::to_begin_and_end_coors($p_hits, 'query'); 405 406 foreach my $coor (@{$coors}) { 407 $coor->[0] -= $chunk->offset(); 408 $coor->[1] -= $chunk->offset(); 409 #fix coordinates for hits outside of chunk end 410 $coor->[0] = $chunk->length if($coor->[0] > $chunk->length); 411 $coor->[1] = $chunk->length if($coor->[1] > $chunk->length); 412 #fix coordinates for hits outside of chunk begin 413 $coor->[0] = 0 if($coor->[0] < 0); 414 $coor->[1] = 0 if($coor->[1] < 0); 415 } 416 417 my $pieces = Shadower::getPieces(\($chunk->seq), $coors, 10); 418 $pieces = [sort {$b->{e} <=> $a->{e}} @{$pieces}]; 419 420 my @keepers; 421 my @holdovers; 422 423 my $cutoff = $chunk->length + $chunk->offset - $split_hit; 424 my $p_cutoff = $chunk->length + $chunk->offset + 1; 425 426 foreach my $piece (@{$pieces}) { 427 if ($piece->{e} + $chunk->offset >= $cutoff) { 428 $p_cutoff = $piece->{b} + $chunk->offset; 429 } 430 } 431 432 #too small, all are heldover for next round 433 if ($p_cutoff <= 1 + $chunk->offset) { 434 foreach my $g (@{$hit_groups}){ 435 push (@holdovers, $g); 436 push (@keepers, []); 437 } 438 return @holdovers, @keepers; 439 } 440 441 foreach my $group (@{$hit_groups}) { 442 my $group_keepers = []; 443 my $group_holdovers = []; 444 445 foreach my $hit (@{$group}) { 446 my $b = $hit->nB('query'); 447 my $e = $hit->nE('query'); 448 my $strand = $hit->strand; 449 450 ($b, $e) = ($e, $b) if $b > $e; 451 452 if (($e < $p_cutoff && $p_cutoff > $chunk->offset +1)) { 373 453 push(@{$group_keepers}, $hit); 374 454 } … … 598 678 #my $FA; 599 679 #open($FA, "> $t_full"); #full file 680 600 681 my $wflag = 1; #flag set so warnings gets printed only once 601 682 while (my $fasta = $fasta_iterator->nextEntry()) { … … 842 923 $command .= " -p $pro"; 843 924 $command .= " -o $out_file"; 844 $command .= " -t $TMP";925 #$command .= " -t $TMP"; 845 926 $command .= " $in_file"; 846 927 … … 935 1016 936 1017 my $command = "$wrap $exe"; 937 $command .= " -tmp $TMP";1018 #$command .= " -tmp $TMP"; 938 1019 $command .= " $org"; 939 1020 $command .= " $in_file"; … … 2736 2817 ($CTL_OPT{out_name}) = $genome =~ /([^\/]+)$/; 2737 2818 $CTL_OPT{out_name} =~ s/\.[^\.]+$//; 2819 $CTL_OPT{CWD} = Cwd::cwd(); 2738 2820 if(! $CTL_OPT{out_base}){ 2739 $CTL_OPT{out_base} = Cwd::cwd()."/$CTL_OPT{out_name}.maker.output";2821 $CTL_OPT{out_base} = $CTL_OPT{CWD}."/$CTL_OPT{out_name}.maker.output"; 2740 2822 } 2741 2823 mkdir($CTL_OPT{out_base}) if(! -d $CTL_OPT{out_base}); lib/Process/MpiChunk.pm
r256 r271 1221 1221 $pred_gff_keepers, 1222 1222 $model_gff_keepers 1223 ) = GI::process_the_chunk_divide ($chunk,1223 ) = GI::process_the_chunk_divide_temp($chunk, 1224 1224 $CTL_OPT{'split_hit'}, 1225 1225 $blastn_keepers, lib/Widget/fgenesh.pm
r244 r271 4 4 package Widget::fgenesh; 5 5 use strict; 6 use lib '~/maker/lib';7 use lib '/data1/hao/projects/MAKER-fgenesh/lib';8 9 use vars qw(@ISA $TMP);6 #use lib '~/maker/lib'; 7 #use lib '/data1/hao/projects/MAKER-fgenesh/lib'; 8 9 use vars qw(@ISA); 10 10 use PostData; 11 11 use FileHandle; … … 144 144 } 145 145 waitpid $pid, 0; 146 #die "ERROR: FgenesH failed\n" if $? != 0;146 die "ERROR: FgenesH failed\n" if $? != 0; 147 147 } 148 148 else { … … 293 293 $command = $wrap . " $command"; #prepend wrapper 294 294 $command .= " $file_name"; 295 $command .= " -tmp $TMP";295 # $command .= " -tmp $TMP"; 296 296 $command .= ' -exon_table:'.$xdef_file if -e $xdef_file; 297 297 … … 530 530 my @xdef; 531 531 532 my $num = (scalar @{$p_pieces} ) + (scalar @{$n_pieces});533 push @xdef, "$num $s";534 532 for (my $i = 0; $i < @{$p_pieces}; $i++){ 535 533 my $p = $p_pieces->[$i]; … … 537 535 my $c_e = $p->{e} - $offset; 538 536 539 my $l = $c_b.' '.$c_e.' '.'1000';537 my $l = "$c_b $c_e 100"; 540 538 541 539 push(@xdef, $l); 542 540 } 543 544 545 return \@xdef if !defined($n_pieces->[1]); 546 541 547 542 for (my $i = @{$n_pieces} - 1; $i > 0; $i--){ 548 543 my $p_r = $n_pieces->[$i]; … … 554 549 next if abs($i_b - $i_e) < 25; 555 550 556 my $l = $i_b.' '.$i_e.' -1000';551 my $l = "$i_b $i_e -1000"; 557 552 558 553 push(@xdef, $l); 559 554 } 555 556 my $num = @xdef; 557 unshift(@xdef, "$num $s"); 560 558 561 559 # The next part also put ESTs as arbitrary exons. lib/clean.pm
r268 r271 216 216 217 217 #if average basepair hits twice on both query and subject, skip 218 push(@keepers, $f) unless(($q_ave + $h_ave)/2 > 2);218 push(@keepers, $f) unless(($q_ave + $h_ave)/2 > 1.5); 219 219 } 220 220 lib/ds_utility.pm
r269 r271 14 14 @ISA = qw( 15 15 ); 16 17 my $CWD = Cwd::getcwd(); 18 16 19 #------------------------------------------------------------------------ 17 20 #--------------------------- METHODS ---------------------------------- … … 32 35 my $self = shift @_; 33 36 my %CTL_OPTIONS = %{shift @_}; 37 38 $CWD = $CTL_OPTIONS{CWD}; 34 39 35 40 my $out_base = $CTL_OPTIONS{out_base}; … … 127 132 128 133 #remove deep directory data so log is relative 129 my $cwd = Cwd::getcwd();134 my $cwd = ($CWD) ? $CWD : Cwd::getcwd(); 130 135 my $entry = join("\t", @F); 131 132 #while loop is used to solve weird incorrect cwd133 #that happens randomly on the cluster134 while($cwd ne Cwd::getcwd()){135 $cwd = Cwd::getcwd();136 }137 136 138 137 if($entry =~ /\tFINISHED|\tSTARTED|\tDIED|\tSKIPPED|\tRETRY/){ lib/maker/auto_annotator.pm
r268 r271 605 605 my $the_void = shift; 606 606 my $build = shift; 607 my $CTL_OPT IONS = shift;607 my $CTL_OPTS = shift; 608 608 $LOG = shift; 609 609 … … 615 615 616 616 #reset gene names 617 #my $GFF_DB = new GFFDB($CTL_OPT IONS);617 #my $GFF_DB = new GFFDB($CTL_OPTS); 618 618 $SEEN = {};#$GFF_DB->get_existing_gene_names($seq_id); 619 619 … … 625 625 $models, 626 626 $v_seq_ref, 627 $CTL_OPT IONS->{single_exon},628 $CTL_OPT IONS->{single_length},629 $CTL_OPT IONS->{organism_type}627 $CTL_OPTS->{single_exon}, 628 $CTL_OPTS->{single_length}, 629 $CTL_OPTS->{organism_type} 630 630 ); 631 631 … … 642 642 'model_gff', 643 643 $predictions, 644 $CTL_OPT IONS644 $CTL_OPTS 645 645 ); 646 646 … … 652 652 'model_gff', 653 653 $the_void, 654 $CTL_OPT IONS654 $CTL_OPTS 655 655 ); 656 656 } 657 657 658 658 #---hint based gene prediction here (includes est2genome) 659 foreach my $prdr (@{$CTL_OPT IONS->{_predictor}}){659 foreach my $prdr (@{$CTL_OPTS->{_predictor}}){ 660 660 next if($prdr eq 'model_gff' || $prdr eq 'pred_gff'); 661 661 print STDERR "Producing $prdr hint based annotations\n" unless($main::quiet); … … 668 668 $prdr, 669 669 $predictions, 670 $CTL_OPT IONS670 $CTL_OPTS 671 671 ); 672 672 … … 678 678 $prdr, 679 679 $the_void, 680 $CTL_OPT IONS680 $CTL_OPTS 681 681 ); 682 682 … … 694 694 'abinit', #all abinits not just pref_gff 695 695 $predictions, 696 $CTL_OPT IONS696 $CTL_OPTS 697 697 ); 698 698 … … 704 704 'abinit', #all abinits not_just pred_gff 705 705 $the_void, 706 $CTL_OPT IONS706 $CTL_OPTS 707 707 ); 708 708 … … 873 873 my $annotations = shift; 874 874 my $out_base = shift; 875 my $CTL_OPT IONS = shift;875 my $CTL_OPTS = shift; 876 876 877 877 print STDERR "Choosing best annotations\n" unless($main::quiet); … … 881 881 882 882 #keep all gff3 passthrough if there's nothing else 883 if(@{$CTL_OPT IONS->{_predictor}} == 1 && $CTL_OPTIONS->{_predictor}->[0] eq 'model_gff'){883 if(@{$CTL_OPTS->{_predictor}} == 1 && $CTL_OPTS->{_predictor}->[0] eq 'model_gff'){ 884 884 foreach my $g (@{$annotations->{'model_gff'}}){ 885 885 if($g->{g_strand} == 1){ … … 891 891 } 892 892 } 893 elsif(@{$CTL_OPT IONS->{_predictor}}){893 elsif(@{$CTL_OPTS->{_predictor}}){ 894 894 #set up lists for plus and minus strands as well as possible mergers 895 895 #predictor types are processed in the order given by control files … … 898 898 my @p_est2g; 899 899 my @m_est2g; 900 foreach my $p (@{$CTL_OPT IONS->{_predictor}}){900 foreach my $p (@{$CTL_OPTS->{_predictor}}){ 901 901 foreach my $g (@{$annotations->{$p}}){ 902 902 if($p ne 'est2genome' && $p ne 'protein2genome' && $g->{g_strand} == 1){ 903 push(@$p_list, $g) if($g->{AED} < 1 || $p eq 'model_gff'); 903 push(@$p_list, $g) if(($g->{AED} < 1 && $g->{AED} <= $CTL_OPTS->{AED_threshold}) 904 || $p eq 'model_gff' 905 ); 904 906 } 905 907 elsif($p ne 'est2genome' && $p ne 'protein2genome' && $g->{g_strand} == -1) { 906 push(@$m_list, $g) if($g->{AED} < 1 || $p eq 'model_gff'); 908 push(@$m_list, $g) if(($g->{AED} < 1 && $g->{AED} <= $CTL_OPTS->{AED_threshold}) 909 || $p eq 'model_gff' 910 ); 907 911 } 908 912 elsif($g->{g_strand} == 1){ 909 push(@p_est2g, $g); #seperate est2genome and protein2genome genes 913 #seperate est2genome and protein2genome genes 914 push(@p_est2g, $g) if($g->{AED} < 1 && $g->{AED} <= $CTL_OPTS->{AED_threshold}); 910 915 } 911 916 elsif($g->{g_strand} == -1){ 912 push(@m_est2g, $g); #seperate est2genome and protein2genome genes 917 #seperate est2genome and protein2genome genes 918 push(@m_est2g, $g) if($g->{AED} < 1 && $g->{AED} <= $CTL_OPTS->{AED_threshold}); 913 919 } 914 920 else{ … … 1155 1161 my $g = shift; 1156 1162 1157 return ($g->{AED} + $g->{abAED})/2;1163 return $g->{AED} + ($g->{abAED} * 1/3); 1158 1164 } 1159 1165 #------------------------------------------------------------------------ … … 1207 1213 my $model = $set->{model}; 1208 1214 my $gomiph = $set->{gomiph}; 1215 my $blastx = get_selected_types($gomiph,'blastx', 'protein_gff'); 1216 my $pol_p = get_selected_types($gomiph,'protein2genome'); 1217 my $alt_ests = $set->{alt_ests}; 1218 my $preds = $set->{preds}; 1209 1219 1210 1220 #------gff passthrough … … 1224 1234 if ($predictor eq 'abinit') { 1225 1235 next if(! defined $model); 1226 1236 1237 #added 2/23/2009 to reduce spurious gene predictions with only single exon blastx suport 1238 if(! defined $mia && (!@$pol_p || (@$pol_p == 1 && $pol_p->[0]->hsps == 1))){ 1239 my $clean = clean::purge_single_exon_hits($alt_ests); 1240 next if(@$clean); 1241 1242 my $coors = PhatHit_utils::get_hsp_coors($blastx, 'query'); 1243 my $pieces = Shadower::getPieces($seq, $coors, 0); 1244 1245 if(@$pieces <= 1){ 1246 my $keep; 1247 1248 my $set = get_overlapping_hits($model, $predictions); 1249 $keep = 1 if(@$set); 1250 1251 my $abAED = shadow_AED::get_abAED($set, $model); 1252 $keep = 0 if($abAED > 0.3); 1253 1254 my $AED = shadow_AED::get_AED($blastx,$model); 1255 $keep = 0 if($AED > 0.3); 1256 1257 next if(! $keep); #skip these spurious predictions 1258 } 1259 } 1260 1227 1261 #add UTR to ab-inits 1228 1262 my $transcript = pneu($ests, $model, $seq); … … 1296 1330 1297 1331 #------default hint based behavior 1298 my $blastx = get_selected_types($gomiph,'blastx', 'protein_gff');1299 my $pol_p = get_selected_types($gomiph,'protein2genome');1300 my $alt_ests = $set->{alt_ests};1301 my $preds = $set->{preds};1302 1303 1332 my ($pred_shots, $strand) = get_pred_shot($seq, 1304 1333 $def, … … 1313 1342 my $on_right_strand = get_best_pred_shots($strand, $pred_shots); 1314 1343 1315 #added 2/23/2009 to reduce spurious gene predictions with only blastx1316 if(@$on_right_strand > 1 && ! defined $mia && ! @$pol_p && ! @$preds){1344 #added 2/23/2009 to reduce spurious gene predictions with only single exon blastx suport 1345 if(@$on_right_strand && ! defined $mia && (!@$pol_p || (@$pol_p == 1 && $pol_p->[0]->hsps == 1))){ 1317 1346 my $clean = clean::purge_single_exon_hits($alt_ests); 1347 next if(@$clean); 1348 1318 1349 my $coors = PhatHit_utils::get_hsp_coors($blastx, 'query'); 1319 1350 my $pieces = Shadower::getPieces($seq, $coors, 0); 1320 1351 1321 if( ! @$clean &&@$pieces <= 1){1352 if(@$pieces <= 1){ 1322 1353 my $keep; 1323 1354 foreach my $h (@$on_right_strand){ 1324 1355 my $set = get_overlapping_hits($h, $predictions); 1325 1356 $keep = 1 if(@$set); 1357 1358 my $abAED = shadow_AED::get_abAED($set, $h); 1359 $keep = 0 if($abAED > 0.3); 1360 1361 my $AED = shadow_AED::get_AED($blastx,$h); 1362 $keep = 0 if($AED > 0.3); 1326 1363 } 1327 1364 … … 1355 1392 my $set = shift; 1356 1393 my $predictor = shift; 1357 my $CTL_OPT IONS = shift;1394 my $CTL_OPTS = shift; 1358 1395 my $LOG = shift; 1359 1396 1360 1397 if($predictor eq 'snap'){ 1361 my $pred_command = $CTL_OPT IONS->{snap}.' '.$CTL_OPTIONS->{snaphmm};1398 my $pred_command = $CTL_OPTS->{snap}.' '.$CTL_OPTS->{snaphmm}; 1362 1399 return Widget::snap::get_pred_shot($seq, 1363 1400 $def, … … 1365 1402 $the_void, 1366 1403 $set, 1367 $CTL_OPT IONS->{pred_flank},1404 $CTL_OPTS->{pred_flank}, 1368 1405 $pred_command, 1369 $CTL_OPT IONS->{force},1406 $CTL_OPTS->{force}, 1370 1407 $LOG 1371 1408 ); 1372 1409 } 1373 1410 elsif($predictor eq 'augustus'){ 1374 my $pred_command = $CTL_OPT IONS->{augustus}.' --species='.$CTL_OPTIONS->{augustus_species};1411 my $pred_command = $CTL_OPTS->{augustus}.' --species='.$CTL_OPTS->{augustus_species}; 1375 1412 return Widget::augustus::get_pred_shot($seq, 1376 1413 $def, … … 1378 1415 $the_void, 1379 1416 $set, 1380 $CTL_OPT IONS->{pred_flank},1417 $CTL_OPTS->{pred_flank}, 1381 1418 $pred_command, 1382 $CTL_OPT IONS->{force},1419 $CTL_OPTS->{force}, 1383 1420 $LOG 1384 1421 ); 1385 1422 } 1386 1423 elsif($predictor eq 'fgenesh'){ 1387 my $pred_command = $CTL_OPT IONS->{fgenesh}.' '.$CTL_OPTIONS->{fgenesh_par_file};1424 my $pred_command = $CTL_OPTS->{fgenesh}.' '.$CTL_OPTS->{fgenesh_par_file}; 1388 1425 return Widget::fgenesh::get_pred_shot($seq, 1389 1426 $def, … … 1391 1428 $the_void, 1392 1429 $set, 1393 $CTL_OPT IONS->{pred_flank},1430 $CTL_OPTS->{pred_flank}, 1394 1431 $pred_command, 1395 $CTL_OPT IONS->{force},1432 $CTL_OPTS->{force}, 1396 1433 $LOG 1397 1434 ); 1398 1435 } 1399 1436 elsif($predictor eq 'twinscan'){ 1400 my $pred_command = $CTL_OPT IONS->{twinscan};1437 my $pred_command = $CTL_OPTS->{twinscan}; 1401 1438 return Widget::twinscan::get_pred_shot($seq, 1402 1439 $def, … … 1404 1441 $the_void, 1405 1442 $set, 1406 $CTL_OPT IONS->{pred_flank},1443 $CTL_OPTS->{pred_flank}, 1407 1444 $pred_command, 1408 $CTL_OPT IONS->{force},1445 $CTL_OPTS->{force}, 1409 1446 $LOG 1410 1447 ); … … 1427 1464 my $p_base = shift; 1428 1465 my $the_void = shift; 1429 my $CTL_OPT IONS = shift;1466 my $CTL_OPTS = shift; 1430 1467 1431 1468 my $transcript_seq = get_transcript_seq($f, $seq); … … 1565 1602 my $predictor = shift; 1566 1603 my $the_void = shift; 1567 my $CTL_OPT IONS = shift;1604 my $CTL_OPTS = shift; 1568 1605 1569 1606 #fix weird sequence names … … 1688 1725 my $p_base = defined($f->{set_id}) ? $p_bases{$f->{set_id}} : undef; 1689 1726 1690 my $t_struct = load_transcript_struct($f, $g_name, $i, $seq, $evidence, $p_base, $the_void, $CTL_OPT IONS);1691 1692 push(@t_structs, $t_struct) unless ($t_struct->{p_length} < $CTL_OPT IONS->{min_protein} ||1693 $t_struct->{AED} > $CTL_OPT IONS->{AED_threshold}1727 my $t_struct = load_transcript_struct($f, $g_name, $i, $seq, $evidence, $p_base, $the_void, $CTL_OPTS); 1728 1729 push(@t_structs, $t_struct) unless ($t_struct->{p_length} < $CTL_OPTS->{min_protein} || 1730 $t_struct->{AED} > $CTL_OPTS->{AED_threshold} 1694 1731 ); 1695 1732 lib/runlog.pm
r269 r271 77 77 78 78 my %SEEN; 79 my $CWD = Cwd::getcwd(); 79 80 80 81 #------------------------------------------------------------------------------- … … 107 108 print STDERR "\n\n\n--Next Contig--\n\n" unless($main::quiet); 108 109 110 $CWD = $self->{CTL_OPTIONS}->{CWD}; 109 111 my $min_contig = $self->{CTL_OPTIONS}->{min_contig}; 110 112 my $length = $self->{params}->{seq_length}; … … 197 199 if($continue_flag >= 0 || $continue_flag == -1){ 198 200 #CHECK CONTROL FILE OPTIONS FOR CHANGES 199 my $cwd = Cwd::getcwd(); 200 201 #while loop is used to solve weird incorrect cwd 202 #that happens randomly on the cluster 203 while($cwd ne Cwd::getcwd()){ 204 $cwd = Cwd::getcwd(); 205 } 201 my $cwd = ($CWD) ?$CWD : Cwd::getcwd(); 206 202 207 203 foreach my $key (@ctl_to_log) { … … 218 214 219 215 #temp lamprey 220 my $chpc = "scratch/serial-pio/u0045039/lamprey2/"; 221 $old =~ s/^$chpc\/*//; 222 $new =~ s/^$chpc\/*//; 223 $chpc = "scratch/serial/u0045039/lamprey2/"; 224 $old =~ s/^$chpc\/*//; 225 $new =~ s/^$chpc\/*//; 226 216 $old =~ s/^\/*scratch\/serial[^\/]*\/u0045039\/lamprey2\/*//; 217 $new =~ s/^\/*scratch\/serial[^\/]*\/u0045039\/lamprey2\/*//; 227 218 228 219 #only continue if change not already happening … … 269 260 if($key eq 'organism_type' && ! $log_val){ 270 261 $log_val = 'eukaryotic'; 262 } 263 264 #softmask was always true before and not logged 265 if($key eq 'softmask' && $log_val eq ''){ 266 $log_val = 1; 271 267 } 272 268 … … 614 610 615 611 #log control file options 616 my $cwd = Cwd::getcwd(); 617 618 #while loop is used to solve weird incorrect cwd 619 #that happens randomly on the cluster 620 while($cwd ne Cwd::getcwd()){ 621 $cwd = Cwd::getcwd(); 622 } 612 my $cwd = ($CWD) ?$CWD : Cwd::getcwd(); 623 613 624 614 foreach my $key (@ctl_to_log) { … … 650 640 651 641 my $log_file = $self->{file_name}; 652 my $cwd = Cwd::getcwd(); 653 654 #while loop is used to solve weird incorrect cwd 655 #that happens randomly on the cluster 656 while($cwd ne Cwd::getcwd()){ 657 $cwd = Cwd::getcwd(); 658 } 642 my $cwd = ($CWD) ?$CWD : Cwd::getcwd(); 659 643 660 644 #this line hides unnecessarilly deep directory details
