2017-08-31 2 views
2

Lorsqu'un fichier qui a été faite plus tôt dans la canalisation est enlevée, SnakeMake ne semble pas considérer qu'il ya un problème, tant que fichiers ultérieurs sont là:Peut-SnakeMake être forcé à exécuter à nouveau les règles lorsque les fichiers sont manquants

rule All: 
    input: "testC1.txt", "testC2.txt" 

rule A: 
    input: "{X}{Y}.txt" 
    output: "{X}A{Y}.txt" 
    shell: "cp {input} {output}" 

rule B: 
    input: "{X}A{Y}.txt" 
    output: "{X}B{Y}.txt" 
    shell: "cp {input} {output}" 

rule C: 
    input: "{X}B{Y}.txt" 
    output: "{X}C{Y}.txt" 
    shell: "cp {input} {output}" 

Enregistrer ce SnakeFile dans test.sf et faire:

rm testA*.txt testB*.txt testC*.txt 
echo "test1" >test1.txt 
echo "test2" >test2.txt 
snakemake -s test.sf 
# Rerun: 
snakemake -s test.sf 
# SnakeMake says all is up to date, which it is. 
# Remove intermediate results: 
rm testA1.txt 
# Rerun: 
snakemake -s test.sf 

SnakeMake dit tout est à jour. Il ne détecte pas testA1.txt manquant.

Je semble me souvenir de quelque chose dans le manuel en ligne de SnakeMake à ce sujet, mais je ne peux plus le trouver.

Je suppose que c'est le comportement SnakeMake attendu. Il peut parfois être un comportement souhaité, mais parfois vous pouvez le vouloir pour détecter et reconstruire le fichier manquant. Comment cela peut-il être fait?

+1

Je pense que c'est en effet le comportement prévu de Snakemake. Si vous avez vraiment besoin de testA1.txt, je vous suggère de l'ajouter dans votre règle. Tous – rioualen

+0

Il est impossible d'ajouter tous les fichiers intermédiaires possibles que l'on souhaite conserver à la règle Tous. Snakemake devrait fonctionner différemment, il a besoin d'un moyen de faire face à cette situation. – tedtoal

Répondre

0

J'ai trouvé ce thread il y a quelque temps à propos du paramètre --forcerun/-R qui pourrait être instructif. En fin de compte, snakemake forcera l'exécution de l'ensemble du pipeline si vous voulez régénérer ce fichier intermédiaire sans avoir de règle distincte pour cela ou l'inclure comme cible dans tous les fichiers.