2017-10-01 2 views
0

나는 snakemake를 처음 사용하고 있으며 두 파이프 라인의 단계를 하나의 큰 파이프 라인으로 병합하는 데 사용하고 있습니다. 여러 단계에서 비슷한 이름의 파일을 만드는 문제와 와일드 카드를 제한하는 방법을 찾을 수 없기 때문에 해결할 수없는 한 단계에서 Missing input files for rule 오류가 발생합니다.와일드 카드 제약 입력 Snakemake

전체 snakefile 오래이며, 여기에 있습니다 : https://mdd.li/snakefile

관련 섹션 (파일의 섹션 아래에 누락)입니다

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} 
      """ 
     ) 

이 파이프 라인은 본질적으로 일부 매핑 단계를하고있다 하나의 디렉토리 구조가 hic_mapping/bowtie_results/bwt2/<subdir>/<file> (subdir은 3 개의 다른 디렉토리 임)으로 표시되고 그 결과를 필터링하고 결과를 완전히 새로운 디렉토리로 병합 한 다음 서브 디렉토리를 파일로 축소하기 전에 hic_remap/bowtie_results/bwt2/<subdir>/<file>에서 또 다른 거의 동일한 매핑 단계를 수행하십시오 이름 : hic_mapping/wasp_results/<subdir>_<file>.

내가 가진 문제는 wasp_merge 단계는 내가 파일 이름에 하위 디렉토리 이름을 축소 경우 find_intersecting_snps 단계 을 나누기 때문이다. 방금 하위 디렉토리 구조를 유지하면 모든 것이 잘 작동합니다. 이렇게하면 파이프 라인의 향후 단계가 깨질 수 있습니다.

내가 오류는 다음과 같습니다 hic_mapping/bowtie_results/bwt2/HCASMC5-8/HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_hg19.bwt2pairs.bam

하지만 찾고 있습니다 :

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 

올바른 파일이 어떤으로 어디서든 만들어도 정의되지 않은 hic_mapping/bowtie_results/bwt2/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006/001_hg19.bwt2pairs.bam

규칙. 아마도 hic_mapping/wasp_results/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_filt_hg19.bwt2pairs.filt.bam

또는 (이 오류를 생성 대상 후) 다운 스트림 파일 : hic_mapping/wasp_results/HCASMC5-8_HCASMC-8-CAGAGAGG-TACTCCTT_S8_L006_001_filt_hg19.bwt2pairs.bam

그러나, 내가 가진 나는 그것이 어떻게 든 wasp_merge 단계에 의해 생성 된 파일의 존재에 의해 혼란스러워지고 생각 디렉터리 구조가 완전히 다르기 때문에 두 파일 중 어느 하나가 find_intersecting_snps 규칙을 혼동하는 이유는 알 수 없습니다.

이 오류는 매우 터무니 없기 때문에 나는 분명히 분명한 것 같아 보이지만, 나는 그것이 무엇인지 알 수 없다.

답변

0

문제는 디렉토리 이름과 파일 이름에 모두 밑줄이 있고 마지막 파일 이름에 밑줄로 두 구성 요소를 구분한다는 것입니다.

분리 문자를 변경하거나 규칙을 다른 곳에서 이름을 가져 오는 파이썬 함수로 바꾸면 문제를 해결할 수 있습니다.

이 작동 :

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} 
      """ 
     )