¿Cómo seleccionar todos los archivos de una muestra?
Tengo un problema para descubrir cómo hacer que la directiva de entrada solo seleccione todos{samples}
archivos en la siguiente regla.
rule MarkDup:
input:
expand("Outputs/MergeBamAlignment/{samples}_{lanes}_{flowcells}.merged.bam", zip,
samples=samples['sample'],
lanes=samples['lane'],
flowcells=samples['flowcell']),
output:
bam = "Outputs/MarkDuplicates/{samples}_markedDuplicates.bam",
metrics = "Outputs/MarkDuplicates/{samples}_markedDuplicates.metrics",
shell:
"gatk --java-options -Djava.io.tempdir=`pwd`/tmp \
MarkDuplicates \
$(echo ' {input}' | sed 's/ / --INPUT /g') \
-O {output.bam} \
--VALIDATION_STRINGENCY LENIENT \
--METRICS_FILE {output.metrics} \
--MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 200000 \
--CREATE_INDEX true \
--TMP_DIR Outputs/MarkDuplicates/tmp"
Actualmente creará archivos de salida con nombre correcto, pero selecciona todos los archivos que coinciden con el patrón en función de todos los comodines. Entonces tal vez estoy a medio camino. Traté de cambiar{samples}
a{{samples}}
en la directiva de entrada como tal:
expand("Outputs/MergeBamAlignment/{{samples}}_{lanes}_{flowcells}.merged.bam", zip,
lanes=samples['lane'],
flowcells=samples['flowcell']),`
pero esto rompió la regla anterior de alguna manera. Entonces la solución es algo así como
input:
"{sample}_*.bam"
Pero claramente esto no funciona. ¿Es posible recopilar todos los archivos que coinciden con{sample}_*.bam
con una función y usar eso como entrada? Y si es así, ¿funcionará la función con$(echo ' {input}' etc...)
en la directiva de shell?