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; 
} 

Ich bin völlig Null in Perl-Programmierung. Ich musste dieses Tool namens CMG Biotools ausführen, das in Perl codiert wurde.CMG Biotools - ein Perl-basiertes Werkzeug

Ich füge einen Teil seines Codes hier an. Kann mir bitte jemand sagen, wenn jobid not in cache...redoing Nachricht angezeigt wird. code for CMG biotools

+0

Fügen Sie den Code zu Ihrer Frage hinzu. nicht als Link zu einem Screenshot – Jens

+0

Dies ist der Teil des vollständigen Codes .... der gesamte Code ist verfügbar @ github .... der Link ist https://github.com/thomasp85/Biotools/blob/master/ blastmatrix – user3774046

Antwort

0

Ihr Skript, blastmatrix, versucht, eine externe zu verwenden (das Skript) Perl-Tool "Cacher" genannt - /usr/biotools/indirect/cacher - Übergabe von Parametern

  • -action get
  • --source='$cache_source'; und
  • --id='$jobid'

So wird das Skript attemting einen Auftrag mit ID abzurufen $jobid von einem Caching utillity und seinem Scheitern. Nach dem Fehlschlagen scheint der Verweis auf "Wiederholen" ein Versuch zu sein, BLASTALL auszuführen, also /usr/biotools/blast/bin/blastall, und führt dann den gleichen Cache-Befehl erneut aus.

Also, wenn alles, was Sie sehen, ist die Nachricht, aber das Skript funktioniert, dann würde ich raten - und das ist alles, was ich tun kann - dass BLASTALL ist ein Problem aufräumen - eine unerwartete Datei, eine fehlende Datei - wer weiß - und der zweite Versuch im Cache funktioniert.

Wenn es überhaupt nicht funktioniert, kann ich nur sagen, dass es schließlich scheitert - was eine andere Sache ist als sagen "die Ursache ist ..." - wenn es versucht, den Cacher zu verwenden.

Hinweis - all das ist spekulativ.

+0

Danke für Ihre Antwort Marty. Das Problem ist, dass der Code gut funktioniert, wenn die Eingabe etwa 15 bis 20 Dateien umfasst. Sobald die Anzahl der Dateien zunimmt, wird nach einiger Zeit die Meldung "Jobid not in cache --redoing" im Terminal angezeigt. – user3774046

+0

Sind Sie sicher, dass es nur auf der Anzahl der Dateien basiert? Finden Sie eine bestimmte "Fail-Set" - eine Reihe von Dateien, die jedes Mal fehlschlagen. Teilen Sie sie in Gruppen von 10 auf und führen Sie alle Gruppen separat durch den Befehl aus. Wenn das, was Sie sagen, wahr ist, sollten alle Gruppen erfolgreich sein, aber wenn eine der Gruppen fehlschlägt und wiederholt fehlschlägt, können Sie sicher sein, dass es sich um etwas handelt, das für diese Gruppe von Dateien spezifisch ist. Offensichtlich können Sie die "verdächtige" Gruppe (oder Gruppen) in kleinere Dateigruppen zerlegen, bis Sie das Problem auf bestimmte Dateien beschränkt haben. – Marty

Verwandte Themen