2016-05-10 3 views
0
sub runBlast { 
    # order is preserved ! 
    for (my $subject_counter = 0 ; $subject_counter < scalar (@{$xmlcfg->{sources}[0]->{entry}}) ; $subject_counter++) { 
     my $subjectTitle = $INFO{$subject_counter}{title}; 
     my $subjectSubtitle = $INFO{$subject_counter}{subtitle}; 
     for (my $query_counter = 0 ; $query_counter < scalar (@{$xmlcfg->{sources}[0]->{entry}}) ; $query_counter++) { 
      my $queryTitle = $INFO{$query_counter}{title}; 
      my $querySubtitle = $INFO{$query_counter}{subtitle}; 
      $tab_h{"$query_counter-$subject_counter"} = $cm->start(); 
      unless ($tab_h{"$query_counter-$subject_counter"}) { 
       my $blastreport_scratch = "$scratch/$query_counter-$subject_counter.blastout.gz"; 
       my $jobid = md5 ("$scratch/$query_counter.fsa" , "$scratch/$subject_counter.fsa") ; 
       system "$perl /usr/biotools/indirect/cacher --id='$jobid' --source='$cache_source' -action get > $blastreport_scratch"; 
       if ($? != 0 or $clean or -s $blastreport_scratch == 0) { 
        print STDERR "# jobid $jobid not in cache - redoing\n"; 
        my $cmd = "$BLASTALL -F 0 -p blastp -d $scratch/$subject_counter.fsa -e 1e-5 -m 7 < $scratch/$query_counter.fsa | $TIGRCUT | gawk '{print \$1\"\\t\"\$2}' | $gzip > $blastreport_scratch"; 
        system $cmd; 
        die "# failed at '$cmd'\n" if $? != 0; 
        system "$perl /usr/biotools/indirect/cacher --id=$jobid --source=$cache_source -action put -expire 100 < $blastreport_scratch"; 
       } else { 
         my $s = -s $blastreport_scratch; 
         print STDERR "# fetched jobid $jobid from cache ($s bytes)\n"; 
       } 
       exit; 
      } 
     } 
    } 
    $cm->wait_all_children; 
} 

私はPerlプログラミングでは全くゼロです。私はCMG BiotoolsというこのツールをPerlでコード化して実行しなければなりませんでした。CMG biotools - Perlベースのツール

ここにコードの一部を添付しています。誰でもjobid not in cache...redoingメッセージが表示されたら教えてください。 /usr/biotools/indirect/cacher - - code for CMG biotools

+0

あなたの質問にコードを追加してください。スクリーンショットへのリンクとしてではありません – Jens

+0

これは完全なコードの一部です....全コードは@ githubで利用できます....リンクは ですhttps://github.com/thomasp85/Biotools/blob/master/ blastmatrix – user3774046

答えて

0

あなたのスクリプト、blastmatrixは、 "キャッシャ" と呼ばれるperlのツール(このスクリプトに)外部を使用しようと渡すパラメータ

  • -action get
  • --source='$cache_source'を。そして
  • --id='$jobid'

ので、スクリプトは、キャッシングutillityとその失敗からID $jobidでジョブを取得するためにattemtingされます。失敗した場合、「やり直し」への参照はBLASTALL、つまり/usr/biotools/blast/bin/blastallを実行しようとしているように見え、同じキャッシュコマンドを再試行します。

メッセージが表示されていてもスクリプトが機能している場合は、BLASTALLは予期しないファイル、見つからないファイル、 - キャッシュの2回目の試行が機能しています。

もしそれがまったく機能しないのなら、私はそれが最後に失敗するとしか言えません - それはキャッチャーを使用しようとすると "根本的な原因は..."とは異なることです。

注 - 上記はすべて投機的です。

+0

あなたの返事ありがとうMarty。問題は、入力が約15〜20ファイルであるときにコードが正常に動作していることです。ファイル数が増えると、しばらくしてから "キャッシュにないジョブID"メッセージが端末に表示されます。 – user3774046

+0

あなたはそのファイルの数だけに基づいていますか?明確な「失敗セット」を見つけてください。毎回失敗するファイルがたくさんあります。それらを10のグループに分割し、すべてのグループをコマンドで別々に実行します。あなたが言うことが真実ならば、すべてのグループは成功するはずですが、グループの1つが失敗し、繰り返し失敗すると、そのグループのファイルに固有の何かを確実にすることができます。明らかに、問題を特定のファイルに分離するまで、「疑わしい」グループ(またはグループ)を小さなファイルセットに分割することができます。 – Marty

関連する問題