Comme vous pouvez le lire sur le titre, je suis intéressé par le stockage du résultat d'une commande shell et passez-le à une autre règle.Stocker le résultat d'une commande shell
Bellow sont mes règles:
SAMTOOLS = config["SAMTOOLS"]
rule useDepth:
input:
depth = "{individual}_{chr}.fixmate.sort.rgmdup.bam.depth"
output:
tmpVCF = "{individual}_{chr}.vcf"
run:
depth = storage.fetch("chrDepth")
shell("echo {depth} | exit 1")
rule calDepth:
input:
bam = "{individual}.fixmate.sort.rgmdup.bam"
output:
temp("{individual}_{chr}.fixmate.sort.rgmdup.bam.depth")
run:
import subprocess,shlex
depth=subprocess.check_output(shlex.split("{SAMTOOLS} depth -r {wildcards.chr} {input.bam} | awk '{{sum += $3}} END {{print sum/NR}}'"),shell=True)
storage.store("chrDepth", depth)
shell("echo \"Depth for {wildcards.chr} has been calculated\" > {output[0]}")
Pour que je reçu une erreur ici à cause de la sortie 1! Mais juste pour tester. L'erreur que j'essaie de résoudre est la valeur de {SAMTOOLS} dans subprocess.check_output()!
depth: 1: depth: {SAMTOOLS}: not found
Error in job chrDepth while creating output file
RuleException:
Command '['{SAMTOOLS}', 'depth', '-r', '{wildcards.chr}', '{input.bam}', '|', 'awk', '{{sum += $3}} END {{print sum/NR}}']'
Pour être plus informatif, car l'utilisateur peut installer diffrent samtools dans un endroit différent nous rendre l'adresse de samtools configurable par configfile. Cependant, ici je ne peux pas:
1) Lire la bonne valeur de {SAMTOOLS}!
2) Rendre l'ensemble de la commande exécutable! Donc, pourriez-vous s'il vous plaît me dire s'il y a un autre moyen de stocker/passer la sortie d'une règle à une autre règle? Plus particulièrement comment puis-je améliorer snakemake pour dire à shell que le {SAMTOOLS} est disponible.
Merci!
Comme vous avez suggéré d'utiliser SAMTOOLS en dehors de qutation était l'astuce! Cependant, je me demande pourquoi je n'ai pas reçu cette erreur plus tôt. J'utilisais {SAMTOOLS} ou tout autre programme sans joker et aucune de mes règles ne se plaignait de cette utilisation (c'est-à-dire que j'utilisais shell dans ces règles). – khikho