2017-10-01 1 views
0

Ich bin neu zu Snakemake, und ich verwende es, um Schritte aus zwei Pipelines in eine einzige größere Pipeline zusammenführen. Das Problem, dass mehrere Schritte ähnlich benannte Dateien erstellen, und ich kann keinen Weg finden, die Platzhalter zu begrenzen, so bekomme ich einen Fehler in einem Schritt, den ich einfach nicht auflösen kann.Eingang Platzhalter Einschränkungen Snakemake

Der vollständige snakefile ist lang, und ist hier verfügbar: https://mdd.li/snakefile

Die entsprechenden Abschnitte sind (Abschnitte der Datei unten fehlen):

wildcard_constraints: 
    sdir="[^/]+", 
    name="[^/]+", 
    prefix="[^/]+" 

# Several mapping rules here 

rule find_intersecting_snps: 
    input: 
     bam="hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.bam" 
    params: 
     hornet=os.path.expanduser(config['hornet']), 
     snps=config['snps'] 
    output: 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.remap.fq1.gz", 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.remap.fq2.gz", 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.keep.bam", 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.to.remap.bam", 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.to.remap.num.gz" 
    shell: 
     dedent(
      """\ 
      python2 {params.hornet}/find_intersecting_snps.py \ 
      -p {input.bam} {params.snps} 
      """ 
     ) 

# Several remapping steps, similar to the first mapping steps, but in a different directory 

rule wasp_merge: 
    input: 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.keep.bam", 
     "hic_mapping/wasp_results/{sdir}_{prefix}_filt_hg19.remap.kept.bam" 
    output: 
     "hic_mapping/wasp_results/{sdir}_{prefix}_filt_hg19.bwt2pairs.filt.bam" 
    params: 
     threads=config['job_cores'] 
    shell: 
     dedent(
      """\ 
      {module} 
      module load samtools 
      samtools merge --threads {params.threads} {output} {input} 
      """ 
     ) 

# All future steps use the name style wildcard, like below 

rule move_results: 
    input: 
     "hic_mapping/wasp_results/{name}_filt_hg19.bwt2pairs.filt.bam" 
    output: 
     "hic_mapping/wasp_results/{name}_filt_hg19.bwt2pairs.bam" 
    shell: 
     dedent(
      """\ 
      mv {input} {output} 
      """ 
     ) 

Diese Pipeline im wesentlichen Schritte einige Mapping macht in Eine Verzeichnisstruktur, die aussieht wie hic_mapping/bowtie_results/bwt2/<subdir>/<file>, (wobei das Unterverzeichnis drei verschiedene Verzeichnisse ist), dann die Ergebnisse filtern und einen weiteren, fast identischen Schritt in hic_remap/bowtie_results/bwt2/<subdir>/<file> ausführen, bevor die Ergebnisse in ein völlig neues Verzeichnis zusammengeführt und die Unterverzeichnisse in die Datei eingeklappt werden Name: hic_mapping/wasp_results/<subdir>_<file>.

Das Problem, das ich habe, ist, dass der wasp_merge Schritt bricht die find_intersecting_snps Schritt wenn ich das Unterverzeichnis Namen in den Dateinamen auszublenden. Wenn ich nur die Unterverzeichnisstruktur verwalte, funktioniert alles gut. Dies würde jedoch zukünftige Schritte der Pipeline durchbrechen.

Der Fehler, den ich bekommen ist:

MissingInputException in line 243 of /godot/quertermous/PooledHiChip/pipeline/Snakefile: 
Missing input files for rule find_intersecting_snps: 
hic_mapping/bowtie_results/bwt2/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006/001_hg19.bwt2pairs.bam 

Die richtige Datei ist: hic_mapping/bowtie_results/bwt2/HCASMC5-8/HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_hg19.bwt2pairs.bam

Aber es sucht: hic_mapping/bowtie_results/bwt2/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006/001_hg19.bwt2pairs.bam

Welche nicht überall erstellt wird, noch durch irgendeine definiert Regel. Ich denke, es ist irgendwie durch die Existenz der Datei durch den wasp_merge Schritt erstellt verwirrt: hic_mapping/wasp_results/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_filt_hg19.bwt2pairs.filt.bam

oder möglicherweise eine Downstream-Datei (nach dem Ziel, die diesen Fehler erzeugt): hic_mapping/wasp_results/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_filt_hg19.bwt2pairs.bam

Allerdings habe ich keine Ahnung, warum eine dieser Dateien die find_intersecting_snps Regel verwechseln würde, weil die Verzeichnisstrukturen völlig verschieden sind.

Ich fühle mich wie ich muss offensichtlich etwas fehlen, weil dieser Fehler so absurd ist, aber ich kann nicht herausfinden, was es ist.

Antwort

0

Das Problem ist, dass sowohl der Verzeichnisname als auch der Dateiname Unterstriche enthalten, und im endgültigen Dateinamen trennen Sie die beiden Komponenten durch Unterstriche.

Indem ich entweder dieses Trennungszeichen ändere oder die Regel durch eine Python-Funktion ersetze, die die Namen von anderswo erhält, kann ich das Problem lösen.

Dies funktioniert:

rule wasp_merge: 
    input: 
     "hic_mapping/bowtie_results/bwt2/{sdir}/{prefix}_hg19.bwt2pairs.keep.bam", 
     "hic_mapping/wasp_results/{sdir}{prefix}_filt_hg19.remap.kept.bam" 
    output: 
     "hic_mapping/wasp_results/{sdir}{prefix}_filt_hg19.bwt2pairs.filt.bam" 
    params: 
     threads=config['job_cores'] 
    shell: 
     dedent(
      """\ 
      {module} 
      module load samtools 
      samtools merge --threads {params.threads} {output} {input} 
      """ 
     )