Pitanje:
Kako izmijeniti naredbe za izvršenje za Snakemake?
zhanxw
2020-05-03 19:14:01 UTC
view on stackexchange narkive permalink

Cilj mi je obraditi dva uzorka, S1 i S2 , koristeći dva pravila, step1 , step2 . Datoteka Snakemake je poput:

  SAMPLES = ['S1', 'S2'] pravilo sve: input: expand ("{sample} .done", sample = SAMPLES) pravilo step1: input: "{sample}" output: "{sample} .step1.done" shell: "touch {output}" pravilo step2: input: "{sample} .step1.done" output: "{sample} .done" shell : "dodirnite {output}"  

Trenutni redoslijed izvršenja je:

  korak1 na S1step1 na S2step2 na S1step2 na S2  

Postoji li način da se redoslijed promijeni u:

  korak1 na S1step2 na S1step1 na S2step2 na S2  

U osnovi želim dovršiti S1 , a zatim S2 . Postoji li način da odredite redoslijed izvršenja u Snakemakeu?

Dva odgovori:
dariober
2020-05-05 12:53:14 UTC
view on stackexchange narkive permalink

Mislim da biste trebali koristiti direktivu prioritet da biste dali prednost nadređenim pravilima.

Ovdje dolje dajem veći prioritet step2 pa kad prvi uzorak završi korak1 , snakemake će pokrenuti korak2 na tom uzorku, umjesto da preda drugi uzorak koraku1.

  SAMPLES = ['S1', 'S2', 'S3'] wildcard_constraints: sample = '|'. pridruži se ([re.escape (x) for x u SAMPLES]) pravilo sve : input: pravilo za proširivanje ("{sample} .done", sample = SAMPLES) korak1: prioritet: 1 izlaz: pravilo "{sample} .step1.done": r "" "sleep 5 touch {output}" "" pravilo korak 2: prioritet: 10 ulaz: "{sample} .step1.done" output: "{sample} .done" shell: r "" "sleep 5 touch {output}" ""  

(Imajte na umu da bez wildcard_constraints vaš / ovaj kôd baca AmbiguousRuleException )

Patrick Magee
2020-05-04 20:24:02 UTC
view on stackexchange narkive permalink

Problem s kojim se susrećete je taj što kada snakemake utvrdi narudžbu za pokretanje skupa pravila, prvo gradi Usmjereni aciklički graf (DAG) svih pravila. To pokazuje koja su pravila međusobno ovisna i kojim redoslijedom se mogu sigurno izvršiti, bez razbijanja nizvodnih ovisnosti.

Općenito, ako želite da se zadaci izvršavaju jedan za drugim koji ne dijele eksplicitnu ovisnost datoteke, možete koristiti datoteku s oznakama kao izlaz za pravilo 1 , a zatim ga navedite kao ulaz u pravilu 2 .

Nažalost, mislim da vam ovo neće pomoći u vašem slučaju. Proširujete popis SAMPLES i izrađujete zamjenski znak. u DAG ovo stvara dvije međusobno međusobno odvojene izvedbene grane koje međusobno ne ovise. step1 i step2 zajamčeni su za svaki uzorak, no između uzoraka nema jamstva.

Postoji li određeni razlog zbog kojeg trebate pokretati sve zadatke S2 nakon S1 ? Ako je to slučaj, najbolje bi bilo stvoriti eksplicitna pravila za uzorak 1 i uzorak 2, koristeći Označi datoteku za pokretanje kada step2 za S1 je gotovo.

U tipičnoj analizi željeli bismo vidjeti neke rezultate za prvi uzorak i provjeriti je li točan. Stoga bih volio da S1 prvo bude obrađen do kraja. Zahvaljujemo što ste ponudili značajku Označi datoteku. Ali čini se nezgrapnim stvoriti ih kako bi se osigurao nalog za izvršenje u mom slučaju.
Čini se da se @zhanxw uglavnom usredotočuje na QA cjevovoda i osigurava da proizvodi prave izlaze. Često moram potvrditi cjevovod prije pokretanja 10-ih ili 1000-ih uzoraka. Najbolji način koji sam pronašao je da ne pokušavam povezati cjevovod kao što vi predlažete, već ga samo jednom pokrenite s jednim uzorkom, a zatim ponovo pokrenite sa svim preostalim uzorcima kada budete zadovoljni.
Vidim vaše poante: pokrenite jedan po jedan uzorak. Mogu to učiniti, ali to nije zgodno jer moram napisati drugu skriptu za pokretanje snakemakea na svakom uzorku. Zanima me imaju li snakemake već neka rješenja. Hvala.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 4.0 licenci pod kojom se distribuira.
Loading...