2017-11-10 11 views
0

수십 개의 규칙이있는 snakefile을 가지고 있으며 수천 개의 파일을 처리합니다. 이것은 DNA 시퀀싱 분석을위한 생물 정보학 파이프 라인입니다. 오늘 샘플 세트에 두 개의 샘플을 더 추가했는데 Snakemake를 실행할 수있을 것으로 예상했는데 새 샘플 파일을 처리 할 파일과 해당 파일에 종속 된 모든 파일을 처리 할 규칙을 자동으로 결정합니다 최상위 레벨로. 그러나 아무것도하지 않습니다. 그리고 -R 옵션도 그렇게하지 않습니다.새 파일이 계층의 맨 아래에 나타나면 Snakemake를 통해 계층 적 규칙 기반 방식으로 파일을 업데이트 할 수 있습니까?

문제점이 snakefile으로 도시되어

> rm test*.txt 
> touch test2.txt 
> touch test1.txt 
> snakemake -s tst -F 

출력된다 : 다음

> cat tst 
rule A: 
    output: "test1.txt" 
    input: "test2.txt" 
    shell: "cp {input} {output}" 

rule B: 
    output: "test2.txt" 
    input: "test3.txt" 
    shell: "cp {input} {output}" 

rule C: 
    output: "test3.txt" 
    input: "test4.txt" 
    shell: "cp {input} {output}" 

rule D: 
    output: "test4.txt" 
    input: "test5.txt" 
    shell: "cp {input} {output}" 

그것을 실행

Provided cores: 1 
Rules claiming more threads will be scaled down. 
Job counts: 
    count jobs 
    1 A 
    1 

rule A: 
    input: test2.txt 
    output: test1.txt 
    jobid: 0 

Finished job 0. 
1 of 1 steps (100%) done 

가 test5.txt가 존재하지 않기 때문에, I은 그 효과에 대한 오류 메시지가 예상되었지만 발생하지 않았습니다. 물론 test3.txt와 test4.txt는 존재하지 않습니다.

-F 대신 -R을 사용하면 "수행 할 작업 없음"이됩니다. "-R A"를 사용하면 규칙 A 만 실행됩니다.

이것은 Snakemake가 트리의 맨 위에 규칙을 작성하고 해당 규칙의 출력 및 입력 파일이 이미 존재하는 경우 Snakemake가 전체 종속 트리를 분석하지 않는다는 것을 보여주는 점에서 내 프로젝트와 관련이 있습니다. 그리고 -R 옵션은 강제하지 않습니다. 내 프로젝트에서 -F 시도했을 때 재건 할 필요가없는 파일을 포함하여 전체를 다시 빌드하기 시작했습니다.

이것이 Snakemake가해야 할 일의 기본이며, 나는 그것을 이해하지 못하는 것 같습니다. 새로운 샘플을 분석하기 위해 파이프 라인을 확보하는 유일한 방법은 새 파일에 필요한 각 규칙을 순서대로 개별적으로 호출하는 것입니다. 그리고 그것은 너무 지루하고 첫 번째 장소에서 Snakemake를 사용한 이유 중 하나입니다.

도움말!

답변

0

snakemake는 첫 번째 규칙의 종속성을 충족시키고 초기 의존성을 충족시키기 위해 나머지 그래프를 통해 추가 종속성을 끌어 와서 그래프를 작성한다는 점에 유의하십시오. test2.txt을 만지면 첫 번째 규칙의 종속성이 충족되므로 더 이상 수행 할 필요가 없습니다. -R A을 사용해도 규칙 A의 종속성을 충족시키기 위해 실행할 필요가없는 파일은 이미 있습니다.

Snakemake는 분명히 원하는대로 (새 샘플을 추가하고 전체 규칙 그래프가 해당 샘플에서 실행됩니다.) 각 규칙을 개별적으로 호출 할 필요는 없지만 종속성을 생각할 수 있습니다. 잘못된. 나는 당신의 새로운 샘플이 당신이 주어진 예제에 들어 맞는 곳을 완전히 이해하고 있는지 확신 할 수 없지만 최소한 두 가지 가능성을 보았습니다.

그래프 의존성이 D->C->B->A으로 실행되므로 맨 위에 새 입력 데이터를 추가했다고 생각하면 (예 : 규칙 D의 test5.txt이라는 새 샘플), 종속성이 있는지 확인해야합니다 엔드 포인트에서 (규칙 A의 test2.txt). test2.txt을 만지면 방금 파이프 라인이 완료되었으므로 종속성이 없습니다. touch test5.txt (새 데이터)이면 예제가 작동하고 전체 그래프가 실행됩니다.

예를 들어 test1.txttest2.txt을 터치 했으므로 새 샘플을 나타 내기를 원했을 것입니다. 그렇다면 종속성 그래프를 추가해도 그래프의 나머지 부분에 종속성이 생기지 않으므로 의존성 그래프를 재고해야합니다. 귀하의 예에서 test2.txt 파일은 터미널 의존성입니다 (워크 플로의 최종 종속성은 입력이 아닙니다). 귀하의 첫 번째 예제에서 새로운 데이터 요구는 test5.txt을 규칙 D (그래프의 상단)에 대한 입력으로 받아서 규칙 A의 입력 종속성 인 test2.txt을 충족 시키도록 종속 그래프를 통해 가져옵니다. test1.txt 또는 test2.txt을 새 입력으로 생각하는 경우 snakemake가 그래프를 통해 데이터를 가져 와서 그래프 하단의 종속성을 충족 시키며 데이터를 위에서 아래로 푸시하지 않음을 기억해야합니다. snakemake -F --rulegraph을 실행하면 그래프가 D->C->B->A으로 실행되므로 규칙 D에 대한 입력으로 새로운 데이터가 올 필요가 있고 규칙 A에 대한 종속성으로 그래프를 통해 가져옵니다.

+0

새 샘플이 위의 예제에 어떻게 들어 맞는 지 보여줍니다. 규칙 D를 으로 변경하십시오. 규칙 D : 출력 : "test4.txt" 입력 : "test5.txt", "test6.txt" 쉘 : "cat {input [0]} {input [1]} > {출력} " " – tedtoal

+0

나는 왜 코멘트 편집 규칙이 작동하지 않는지 모르겠다. – tedtoal

+0

규칙 D를 변경 한 다음 다시 실행하면 -R을 사용하여도 아무 일도 일어나지 않습니다. – tedtoal

0

새 입력을 추가 할 때 Snakemake가 자동으로 재실행을 트리거하지 않습니다. 파일 (예 : 샘플)을 DAG에 보냅니다. 그러나 FAQ에 설명 된대로이를 시행 할 수 있습니다.

기본적으로이 작업을 수행하지 않는 이유는 대부분 일관성입니다. 이렇게하려면 Snakemake가 메타 정보를 저장해야합니다. 따라서 메타 정보가 유실 된 경우와 다른 행동을하게됩니다. 그러나 앞으로이 변경 될 수 있습니다. 이러한 근본적인 변화가 있었지만 현재의 기본 동작이 장점 인 카운터 예제를 잊지 않기 위해 일반적으로 매우 신중합니다.

+0

감사. 나는 전에 FAQ를 보았던 것을 기억합니다. – tedtoal