Snakemake
¶
Warning
This notebook is a demo for Python scripting that you could run before and after Snakemake runs. Typically, you would include lamindb directly within your Snakemake workflow.
Snakemake is a popular workflow manager in bioinformatics. This guide is based on the example of the rna-seq-star-deseq2 pipeline.
First we clone the Snakemake pipeline with git. Because the test datasets come with the repo and, for simplicity, we want to avoid moving them into another directory, we initialize a LaminDB instance in the same directory.
# pip install lamindb snakemake
!git clone https://github.com/snakemake-workflows/rna-seq-star-deseq2 --single-branch --branch v3.1.0
!lamin init --storage ./rna-seq-star-deseq2
Show code cell output
Cloning into 'rna-seq-star-deseq2'...
remote: Enumerating objects: 874, done.
remote: Counting objects: 0% (1/322)
remote: Counting objects: 1% (4/322)
remote: Counting objects: 2% (7/322)
remote: Counting objects: 3% (10/322)
remote: Counting objects: 4% (13/322)
remote: Counting objects: 5% (17/322)
remote: Counting objects: 6% (20/322)
remote: Counting objects: 7% (23/322)
remote: Counting objects: 8% (26/322)
remote: Counting objects: 9% (29/322)
remote: Counting objects: 10% (33/322)
remote: Counting objects: 11% (36/322)
remote: Counting objects: 12% (39/322)
remote: Counting objects: 13% (42/322)
remote: Counting objects: 14% (46/322)
remote: Counting objects: 15% (49/322)
remote: Counting objects: 16% (52/322)
remote: Counting objects: 17% (55/322)
remote: Counting objects: 18% (58/322)
remote: Counting objects: 19% (62/322)
remote: Counting objects: 20% (65/322)
remote: Counting objects: 21% (68/322)
remote: Counting objects: 22% (71/322)
remote: Counting objects: 23% (75/322)
remote: Counting objects: 24% (78/322)
remote: Counting objects: 25% (81/322)
remote: Counting objects: 26% (84/322)
remote: Counting objects: 27% (87/322)
remote: Counting objects: 28% (91/322)
remote: Counting objects: 29% (94/322)
remote: Counting objects: 30% (97/322)
remote: Counting objects: 31% (100/322)
remote: Counting objects: 32% (104/322)
remote: Counting objects: 33% (107/322)
remote: Counting objects: 34% (110/322)
remote: Counting objects: 35% (113/322)
remote: Counting objects: 36% (116/322)
remote: Counting objects: 37% (120/322)
remote: Counting objects: 38% (123/322)
remote: Counting objects: 39% (126/322)
remote: Counting objects: 40% (129/322)
remote: Counting objects: 41% (133/322)
remote: Counting objects: 42% (136/322)
remote: Counting objects: 43% (139/322)
remote: Counting objects: 44% (142/322)
remote: Counting objects: 45% (145/322)
remote: Counting objects: 46% (149/322)
remote: Counting objects: 47% (152/322)
remote: Counting objects: 48% (155/322)
remote: Counting objects: 49% (158/322)
remote: Counting objects: 50% (161/322)
remote: Counting objects: 51% (165/322)
remote: Counting objects: 52% (168/322)
remote: Counting objects: 53% (171/322)
remote: Counting objects: 54% (174/322)
remote: Counting objects: 55% (178/322)
remote: Counting objects: 56% (181/322)
remote: Counting objects: 57% (184/322)
remote: Counting objects: 58% (187/322)
remote: Counting objects: 59% (190/322)
remote: Counting objects: 60% (194/322)
remote: Counting objects: 61% (197/322)
remote: Counting objects: 62% (200/322)
remote: Counting objects: 63% (203/322)
remote: Counting objects: 64% (207/322)
remote: Counting objects: 65% (210/322)
remote: Counting objects: 66% (213/322)
remote: Counting objects: 67% (216/322)
remote: Counting objects: 68% (219/322)
remote: Counting objects: 69% (223/322)
remote: Counting objects: 70% (226/322)
remote: Counting objects: 71% (229/322)
remote: Counting objects: 72% (232/322)
remote: Counting objects: 73% (236/322)
remote: Counting objects: 74% (239/322)
remote: Counting objects: 75% (242/322)
remote: Counting objects: 76% (245/322)
remote: Counting objects: 77% (248/322)
remote: Counting objects: 78% (252/322)
remote: Counting objects: 79% (255/322)
remote: Counting objects: 80% (258/322)
remote: Counting objects: 81% (261/322)
remote: Counting objects: 82% (265/322)
remote: Counting objects: 83% (268/322)
remote: Counting objects: 84% (271/322)
remote: Counting objects: 85% (274/322)
remote: Counting objects: 86% (277/322)
remote: Counting objects: 87% (281/322)
remote: Counting objects: 88% (284/322)
remote: Counting objects: 89% (287/322)
remote: Counting objects: 90% (290/322)
remote: Counting objects: 91% (294/322)
remote: Counting objects: 92% (297/322)
remote: Counting objects: 93% (300/322)
remote: Counting objects: 94% (303/322)
remote: Counting objects: 95% (306/322)
remote: Counting objects: 96% (310/322)
remote: Counting objects: 97% (313/322)
remote: Counting objects: 98% (316/322)
remote: Counting objects: 99% (319/322)
remote: Counting objects: 100% (322/322)
remote: Counting objects: 100% (322/322), done.
remote: Compressing objects: 0% (1/144)
remote: Compressing objects: 1% (2/144)
remote: Compressing objects: 2% (3/144)
remote: Compressing objects: 3% (5/144)
remote: Compressing objects: 4% (6/144)
remote: Compressing objects: 5% (8/144)
remote: Compressing objects: 6% (9/144)
remote: Compressing objects: 7% (11/144)
remote: Compressing objects: 8% (12/144)
remote: Compressing objects: 9% (13/144)
remote: Compressing objects: 10% (15/144)
remote: Compressing objects: 11% (16/144)
remote: Compressing objects: 12% (18/144)
remote: Compressing objects: 13% (19/144)
remote: Compressing objects: 14% (21/144)
remote: Compressing objects: 15% (22/144)
remote: Compressing objects: 16% (24/144)
remote: Compressing objects: 17% (25/144)
remote: Compressing objects: 18% (26/144)
remote: Compressing objects: 19% (28/144)
remote: Compressing objects: 20% (29/144)
remote: Compressing objects: 21% (31/144)
remote: Compressing objects: 22% (32/144)
remote: Compressing objects: 23% (34/144)
remote: Compressing objects: 24% (35/144)
remote: Compressing objects: 25% (36/144)
remote: Compressing objects: 26% (38/144)
remote: Compressing objects: 27% (39/144)
remote: Compressing objects: 28% (41/144)
remote: Compressing objects: 29% (42/144)
remote: Compressing objects: 30% (44/144)
remote: Compressing objects: 31% (45/144)
remote: Compressing objects: 32% (47/144)
remote: Compressing objects: 33% (48/144)
remote: Compressing objects: 34% (49/144)
remote: Compressing objects: 35% (51/144)
remote: Compressing objects: 36% (52/144)
remote: Compressing objects: 37% (54/144)
remote: Compressing objects: 38% (55/144)
remote: Compressing objects: 39% (57/144)
remote: Compressing objects: 40% (58/144)
remote: Compressing objects: 41% (60/144)
remote: Compressing objects: 42% (61/144)
remote: Compressing objects: 43% (62/144)
remote: Compressing objects: 44% (64/144)
remote: Compressing objects: 45% (65/144)
remote: Compressing objects: 46% (67/144)
remote: Compressing objects: 47% (68/144)
remote: Compressing objects: 48% (70/144)
remote: Compressing objects: 49% (71/144)
remote: Compressing objects: 50% (72/144)
remote: Compressing objects: 51% (74/144)
remote: Compressing objects: 52% (75/144)
remote: Compressing objects: 53% (77/144)
remote: Compressing objects: 54% (78/144)
remote: Compressing objects: 55% (80/144)
remote: Compressing objects: 56% (81/144)
remote: Compressing objects: 57% (83/144)
remote: Compressing objects: 58% (84/144)
remote: Compressing objects: 59% (85/144)
remote: Compressing objects: 60% (87/144)
remote: Compressing objects: 61% (88/144)
remote: Compressing objects: 62% (90/144)
remote: Compressing objects: 63% (91/144)
remote: Compressing objects: 64% (93/144)
remote: Compressing objects: 65% (94/144)
remote: Compressing objects: 66% (96/144)
remote: Compressing objects: 67% (97/144)
remote: Compressing objects: 68% (98/144)
remote: Compressing objects: 69% (100/144)
remote: Compressing objects: 70% (101/144)
remote: Compressing objects: 71% (103/144)
remote: Compressing objects: 72% (104/144)
remote: Compressing objects: 73% (106/144)
remote: Compressing objects: 74% (107/144)
remote: Compressing objects: 75% (108/144)
remote: Compressing objects: 76% (110/144)
remote: Compressing objects: 77% (111/144)
remote: Compressing objects: 78% (113/144)
remote: Compressing objects: 79% (114/144)
remote: Compressing objects: 80% (116/144)
remote: Compressing objects: 81% (117/144)
remote: Compressing objects: 82% (119/144)
remote: Compressing objects: 83% (120/144)
remote: Compressing objects: 84% (121/144)
remote: Compressing objects: 85% (123/144)
remote: Compressing objects: 86% (124/144)
remote: Compressing objects: 87% (126/144)
remote: Compressing objects: 88% (127/144)
remote: Compressing objects: 89% (129/144)
remote: Compressing objects: 90% (130/144)
remote: Compressing objects: 91% (132/144)
remote: Compressing objects: 92% (133/144)
remote: Compressing objects: 93% (134/144)
remote: Compressing objects: 94% (136/144)
remote: Compressing objects: 95% (137/144)
remote: Compressing objects: 96% (139/144)
remote: Compressing objects: 97% (140/144)
remote: Compressing objects: 98% (142/144)
remote: Compressing objects: 99% (143/144)
remote: Compressing objects: 100% (144/144)
remote: Compressing objects: 100% (144/144), done.
Receiving objects: 0% (1/874)
Receiving objects: 1% (9/874)
Receiving objects: 2% (18/874)
Receiving objects: 3% (27/874)
Receiving objects: 4% (35/874)
Receiving objects: 5% (44/874)
Receiving objects: 6% (53/874)
Receiving objects: 7% (62/874)
Receiving objects: 8% (70/874)
Receiving objects: 9% (79/874)
Receiving objects: 10% (88/874)
Receiving objects: 11% (97/874)
Receiving objects: 12% (105/874)
Receiving objects: 13% (114/874)
Receiving objects: 14% (123/874)
Receiving objects: 15% (132/874)
Receiving objects: 16% (140/874)
Receiving objects: 17% (149/874)
Receiving objects: 18% (158/874)
Receiving objects: 19% (167/874)
Receiving objects: 20% (175/874)
Receiving objects: 21% (184/874)
Receiving objects: 22% (193/874)
Receiving objects: 23% (202/874)
Receiving objects: 24% (210/874)
Receiving objects: 25% (219/874)
Receiving objects: 26% (228/874)
Receiving objects: 27% (236/874)
Receiving objects: 28% (245/874)
Receiving objects: 29% (254/874)
Receiving objects: 30% (263/874)
Receiving objects: 31% (271/874)
Receiving objects: 32% (280/874)
Receiving objects: 33% (289/874)
Receiving objects: 34% (298/874)
Receiving objects: 35% (306/874)
Receiving objects: 36% (315/874)
Receiving objects: 37% (324/874)
Receiving objects: 38% (333/874)
Receiving objects: 39% (341/874)
Receiving objects: 40% (350/874)
Receiving objects: 41% (359/874)
Receiving objects: 42% (368/874)
Receiving objects: 43% (376/874)
Receiving objects: 44% (385/874)
Receiving objects: 45% (394/874)
Receiving objects: 46% (403/874)
Receiving objects: 47% (411/874)
Receiving objects: 48% (420/874)
Receiving objects: 49% (429/874)
Receiving objects: 50% (437/874)
Receiving objects: 51% (446/874)
Receiving objects: 52% (455/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 53% (464/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 54% (472/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 55% (481/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 56% (490/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 57% (499/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 58% (507/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 59% (516/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 60% (525/874), 11.79 MiB | 23.42 MiB/s
remote: Total 874 (delta 241), reused 178 (delta 178), pack-reused 552 (from 1)
Receiving objects: 61% (534/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 62% (542/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 63% (551/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 64% (560/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 65% (569/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 66% (577/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 67% (586/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 68% (595/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 69% (604/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 70% (612/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 71% (621/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 72% (630/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 73% (639/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 74% (647/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 75% (656/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 76% (665/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 77% (673/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 78% (682/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 79% (691/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 80% (700/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 81% (708/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 82% (717/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 83% (726/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 84% (735/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 85% (743/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 86% (752/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 87% (761/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 88% (770/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 89% (778/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 90% (787/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 91% (796/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 92% (805/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 93% (813/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 94% (822/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 95% (831/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 96% (840/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 97% (848/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 98% (857/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 99% (866/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 100% (874/874), 11.79 MiB | 23.42 MiB/s
Receiving objects: 100% (874/874), 16.97 MiB | 29.81 MiB/s, done.
Resolving deltas: 0% (0/465)
Resolving deltas: 1% (5/465)
Resolving deltas: 2% (10/465)
Resolving deltas: 3% (14/465)
Resolving deltas: 4% (20/465)
Resolving deltas: 5% (24/465)
Resolving deltas: 6% (28/465)
Resolving deltas: 7% (33/465)
Resolving deltas: 8% (38/465)
Resolving deltas: 9% (42/465)
Resolving deltas: 10% (47/465)
Resolving deltas: 11% (52/465)
Resolving deltas: 12% (57/465)
Resolving deltas: 13% (61/465)
Resolving deltas: 14% (66/465)
Resolving deltas: 15% (70/465)
Resolving deltas: 16% (75/465)
Resolving deltas: 17% (80/465)
Resolving deltas: 18% (84/465)
Resolving deltas: 19% (89/465)
Resolving deltas: 20% (93/465)
Resolving deltas: 21% (98/465)
Resolving deltas: 22% (103/465)
Resolving deltas: 23% (107/465)
Resolving deltas: 24% (112/465)
Resolving deltas: 25% (117/465)
Resolving deltas: 26% (121/465)
Resolving deltas: 27% (126/465)
Resolving deltas: 28% (131/465)
Resolving deltas: 29% (135/465)
Resolving deltas: 30% (140/465)
Resolving deltas: 31% (145/465)
Resolving deltas: 32% (149/465)
Resolving deltas: 33% (155/465)
Resolving deltas: 34% (159/465)
Resolving deltas: 35% (163/465)
Resolving deltas: 36% (168/465)
Resolving deltas: 37% (173/465)
Resolving deltas: 38% (177/465)
Resolving deltas: 39% (182/465)
Resolving deltas: 40% (186/465)
Resolving deltas: 41% (192/465)
Resolving deltas: 42% (196/465)
Resolving deltas: 43% (200/465)
Resolving deltas: 44% (205/465)
Resolving deltas: 45% (210/465)
Resolving deltas: 46% (214/465)
Resolving deltas: 47% (219/465)
Resolving deltas: 48% (224/465)
Resolving deltas: 49% (228/465)
Resolving deltas: 50% (233/465)
Resolving deltas: 51% (238/465)
Resolving deltas: 52% (242/465)
Resolving deltas: 53% (247/465)
Resolving deltas: 54% (252/465)
Resolving deltas: 55% (257/465)
Resolving deltas: 56% (261/465)
Resolving deltas: 57% (266/465)
Resolving deltas: 58% (270/465)
Resolving deltas: 59% (275/465)
Resolving deltas: 60% (279/465)
Resolving deltas: 61% (284/465)
Resolving deltas: 62% (289/465)
Resolving deltas: 63% (293/465)
Resolving deltas: 64% (298/465)
Resolving deltas: 65% (303/465)
Resolving deltas: 66% (307/465)
Resolving deltas: 67% (312/465)
Resolving deltas: 68% (317/465)
Resolving deltas: 69% (321/465)
Resolving deltas: 70% (326/465)
Resolving deltas: 71% (331/465)
Resolving deltas: 72% (335/465)
Resolving deltas: 73% (340/465)
Resolving deltas: 74% (345/465)
Resolving deltas: 75% (349/465)
Resolving deltas: 76% (354/465)
Resolving deltas: 77% (360/465)
Resolving deltas: 78% (363/465)
Resolving deltas: 79% (368/465)
Resolving deltas: 80% (372/465)
Resolving deltas: 81% (377/465)
Resolving deltas: 82% (382/465)
Resolving deltas: 83% (387/465)
Resolving deltas: 84% (391/465)
Resolving deltas: 85% (396/465)
Resolving deltas: 86% (401/465)
Resolving deltas: 87% (405/465)
Resolving deltas: 88% (411/465)
Resolving deltas: 89% (415/465)
Resolving deltas: 90% (419/465)
Resolving deltas: 91% (424/465)
Resolving deltas: 92% (429/465)
Resolving deltas: 93% (433/465)
Resolving deltas: 94% (438/465)
Resolving deltas: 95% (443/465)
Resolving deltas: 96% (447/465)
Resolving deltas: 97% (452/465)
Resolving deltas: 98% (457/465)
Resolving deltas: 99% (461/465)
Resolving deltas: 100% (465/465)
Resolving deltas: 100% (465/465), done.
Note: switching to '5fbe51c94aa1f5c8c8cbdca379eb00436d6491bf'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
! using anonymous user (to identify, call: lamin login)
→ initialized lamindb: anonymous/rna-seq-star-deseq2
import lamindb as ln
Show code cell output
→ connected lamindb: anonymous/rna-seq-star-deseq2
Registering inputs¶
root_dir = "rna-seq-star-deseq2"
sample_sheet = ln.Artifact(f"{root_dir}/.test/config_basic/samples.tsv").save()
input_fastqs = ln.Artifact.from_dir(f"{root_dir}/.test/ngs-test-data/reads/")
ln.save(input_fastqs)
Show code cell output
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! no run & transform got linked, call `ln.track()` & re-run
! there are multiple artifact uids with the same hashes, dropping 2 duplicates out of 10 artifacts:
wXvrW3LNyXKuX3Lt0000
JOulObhbPuVckvhz0000
Track a Snakemake run¶
Track the Snakemake workflow & run:
transform = ln.Transform(
key="snakemake-rna-seq-star-deseq2",
version="2.0.0",
type="pipeline",
reference="https://github.com/snakemake-workflows/rna-seq-star-deseq2",
)
ln.track(transform)
Show code cell output
/tmp/ipykernel_3487/1213032725.py:1: DeprecationWarning: `type` argument of transform was renamed to `kind` and will be removed in a future release.
transform = ln.Transform(
→ created Transform('dksmUrzHPzeW0000', key='snakemake-rna-seq-star-deseq2'), started new Run('y8B2ArK4mapTXyLH') at 2026-03-20 14:28:11 UTC
If we call cache() on the input artifacts, they’ll be downloaded into a cache and tracked as run inputs. In this test case however, no download happened because the files are already available locally.
input_sample_sheet_path = sample_sheet.cache()
input_paths = [input_fastq.cache() for input_fastq in input_fastqs]
Let’s run the pipeline.
!snakemake \
--directory rna-seq-star-deseq2/.test \
--snakefile rna-seq-star-deseq2/workflow/Snakefile \
--configfile rna-seq-star-deseq2/.test/config_basic/config.yaml \
--use-conda \
--show-failed-logs \
--cores 2 \
--conda-frontend conda \
--conda-cleanup-pkgs cache
Show code cell output
Workflow defines that rule get_genome is eligible for caching between workflows (use the --cache argument to enable this).
Workflow defines that rule get_annotation is eligible for caching between workflows (use the --cache argument to enable this).
Workflow defines that rule genome_faidx is eligible for caching between workflows (use the --cache argument to enable this).
Workflow defines that rule bwa_index is eligible for caching between workflows (use the --cache argument to enable this).
Workflow defines that rule star_index is eligible for caching between workflows (use the --cache argument to enable this).
Assuming unrestricted shared filesystem usage.
host: runnervm46oaq
Building DAG of jobs...
Cloning github.com/snakemake/snakemake-wrappers to /home/runner/.cache/snakemake/snakemake/source-cache/snakemake-git-cache/github.com/snakemake/snakemake-wrappers
Your conda installation is not configured to use strict channel priorities. This is however important for having robust and correct environments (for details, see https://conda-forge.org/docs/user/tipsandtricks.html). Please consider to configure strict priorities by executing 'conda config --set channel_priority strict'.
Creating conda environment https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/multiqc/environment.yaml...
Using pinnings from https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/multiqc/environment.linux-64.pin.txt.
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/multiqc/environment.yaml created (location: .snakemake/conda/270ca3d7080244d890aa4523c74ed889_)
Creating conda environment https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/reference/ensembl-annotation/environment.yaml...
Using pinnings from https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/reference/ensembl-annotation/environment.linux-64.pin.txt.
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/reference/ensembl-annotation/environment.yaml created (location: .snakemake/conda/c4f5d39b0c24d197ead66a4306083ae3_)
Creating conda environment ../workflow/envs/deseq2.yaml...
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/workflow/rules/../envs/deseq2.yaml created (location: .snakemake/conda/71391f233ddac307563d6978fdd31ba6_)
Creating conda environment https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/star/index/environment.yaml...
Using pinnings from https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/star/index/environment.linux-64.pin.txt.
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/star/index/environment.yaml created (location: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_)
Creating conda environment ../workflow/envs/rseqc.yaml...
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/workflow/rules/../envs/rseqc.yaml created (location: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_)
Creating conda environment ../workflow/envs/pandas.yaml...
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/workflow/rules/../envs/pandas.yaml created (location: .snakemake/conda/e1ed8058a1a68e8227ab2570fcc2ba13_)
Creating conda environment https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/fastp/environment.yaml...
Using pinnings from https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/fastp/environment.linux-64.pin.txt.
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for https://raw.githubusercontent.com/snakemake/snakemake-wrappers/v7.2.0/bio/fastp/environment.yaml created (location: .snakemake/conda/54e9c2abca1764149016fc4acdcd2b53_)
Creating conda environment ../workflow/envs/gffutils.yaml...
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/workflow/rules/../envs/gffutils.yaml created (location: .snakemake/conda/fbfd5a68673f4cd57529e4d91882f884_)
Creating conda environment ../workflow/envs/biomart.yaml...
Downloading and installing remote packages.
Cleaning up conda package tarballs and package cache.
Environment for /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/workflow/rules/../envs/biomart.yaml created (location: .snakemake/conda/5be176b9627ee82c134aaa9bbe9f5182_)
Using shell: /usr/bin/bash
Provided cores: 2
Rules claiming more threads will be scaled down.
Singularity containers: ignored
Job stats:
job count
------------------------- -------
fastp_pe 4
get_annotation 1
get_genome 1
rseqc_gtf2bed 1
star_index 1
star_align 4
count_matrix 1
rseqc_infer 4
rseqc_innerdis 4
rseqc_junction_annotation 4
rseqc_junction_saturation 4
rseqc_readdis 4
rseqc_readdup 4
rseqc_readgc 4
rseqc_stat 4
deseq2_init 1
gene_2_symbol 3
multiqc 1
deseq2 1
pca 1
all 1
total 53
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:31:58 2026]
localrule fastp_pe:
input: ngs-test-data/reads/a.scerevisiae.1.fq, ngs-test-data/reads/a.scerevisiae.2.fq
output: results/trimmed/A1/A1-1_R1.fastq.gz, results/trimmed/A1/A1-1_R2.fastq.gz, results/trimmed/A1/A1-1.unpaired.R1.fastq.gz, results/trimmed/A1/A1-1.unpaired.R2.fastq.gz, results/trimmed/A1/A1-1_paired.failed.fastq.gz, results/trimmed/A1/A1-1.html, results/trimmed/A1/A1-1.json
log: logs/trimmed/A1/A1-1.log
jobid: 6
reason: Missing output files: results/trimmed/A1/A1-1_R1.fastq.gz, results/trimmed/A1/A1-1_R2.fastq.gz
wildcards: sample=A1, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/54e9c2abca1764149016fc4acdcd2b53_
Select jobs to execute...
[Fri Mar 20 14:32:00 2026]
Finished jobid: 6 (Rule: fastp_pe)
1 of 53 steps (2%) done
Execute 1 jobs...
[Fri Mar 20 14:32:00 2026]
localrule fastp_pe:
input: ngs-test-data/reads/b.scerevisiae.1.fq, ngs-test-data/reads/b.scerevisiae.2.fq
output: results/trimmed/B2/B2-1_R1.fastq.gz, results/trimmed/B2/B2-1_R2.fastq.gz, results/trimmed/B2/B2-1.unpaired.R1.fastq.gz, results/trimmed/B2/B2-1.unpaired.R2.fastq.gz, results/trimmed/B2/B2-1_paired.failed.fastq.gz, results/trimmed/B2/B2-1.html, results/trimmed/B2/B2-1.json
log: logs/trimmed/B2/B2-1.log
jobid: 15
reason: Missing output files: results/trimmed/B2/B2-1_R1.fastq.gz, results/trimmed/B2/B2-1_R2.fastq.gz
wildcards: sample=B2, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/54e9c2abca1764149016fc4acdcd2b53_
Select jobs to execute...
[Fri Mar 20 14:32:00 2026]
Finished jobid: 15 (Rule: fastp_pe)
2 of 53 steps (4%) done
Execute 1 jobs...
[Fri Mar 20 14:32:00 2026]
localrule fastp_pe:
input: ngs-test-data/reads/c.scerevisiae.1.fq, ngs-test-data/reads/c.scerevisiae.2.fq
output: results/trimmed/B1/B1-1_R1.fastq.gz, results/trimmed/B1/B1-1_R2.fastq.gz, results/trimmed/B1/B1-1.unpaired.R1.fastq.gz, results/trimmed/B1/B1-1.unpaired.R2.fastq.gz, results/trimmed/B1/B1-1_paired.failed.fastq.gz, results/trimmed/B1/B1-1.html, results/trimmed/B1/B1-1.json
log: logs/trimmed/B1/B1-1.log
jobid: 13
reason: Missing output files: results/trimmed/B1/B1-1_R1.fastq.gz, results/trimmed/B1/B1-1_R2.fastq.gz
wildcards: sample=B1, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/54e9c2abca1764149016fc4acdcd2b53_
Select jobs to execute...
[Fri Mar 20 14:32:01 2026]
Finished jobid: 13 (Rule: fastp_pe)
3 of 53 steps (6%) done
Execute 1 jobs...
[Fri Mar 20 14:32:01 2026]
localrule fastp_pe:
input: ngs-test-data/reads/c.scerevisiae.1.fq, ngs-test-data/reads/c.scerevisiae.2.fq
output: results/trimmed/A2/A2-1_R1.fastq.gz, results/trimmed/A2/A2-1_R2.fastq.gz, results/trimmed/A2/A2-1.unpaired.R1.fastq.gz, results/trimmed/A2/A2-1.unpaired.R2.fastq.gz, results/trimmed/A2/A2-1_paired.failed.fastq.gz, results/trimmed/A2/A2-1.html, results/trimmed/A2/A2-1.json
log: logs/trimmed/A2/A2-1.log
jobid: 11
reason: Missing output files: results/trimmed/A2/A2-1_R1.fastq.gz, results/trimmed/A2/A2-1_R2.fastq.gz
wildcards: sample=A2, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/54e9c2abca1764149016fc4acdcd2b53_
Select jobs to execute...
[Fri Mar 20 14:32:02 2026]
Finished jobid: 11 (Rule: fastp_pe)
4 of 53 steps (8%) done
Execute 2 jobs...
[Fri Mar 20 14:32:02 2026]
localrule get_genome:
output: resources/genome.fasta
log: logs/get-genome.log
jobid: 8
reason: Missing output files: resources/genome.fasta
resources: tmpdir=/tmp
[Fri Mar 20 14:32:02 2026]
localrule get_annotation:
output: resources/genome.gtf
log: logs/get_annotation.log
jobid: 9
reason: Missing output files: resources/genome.gtf
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/c4f5d39b0c24d197ead66a4306083ae3_
Activating conda environment: .snakemake/conda/c4f5d39b0c24d197ead66a4306083ae3_
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
curl: (78) The file does not exist
% Total % Recei
ved % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
[Fri Mar 20 14:32:07 2026]
Finished jobid: 9 (Rule: get_annotation)
5 of 53 steps (9%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:32:07 2026]
localrule rseqc_gtf2bed:
input: resources/genome.gtf
output: results/qc/rseqc/annotation.bed, results/qc/rseqc/annotation.db
log: logs/rseqc_gtf2bed.log
jobid: 20
reason: Missing output files: results/qc/rseqc/annotation.bed; Input files updated by another job: resources/genome.gtf
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/fbfd5a68673f4cd57529e4d91882f884_
Activating conda environment: .snakemake/conda/fbfd5a68673f4cd57529e4d91882f884_
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 3695k 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
Content-Length: 3784201
[Fri Mar 20 14:32:09 2026]
Finished jobid: 8 (Rule: get_genome)
6 of 53 steps (11%) done
Select jobs to execute...
[Fri Mar 20 14:32:12 2026]
Finished jobid: 20 (Rule: rseqc_gtf2bed)
7 of 53 steps (13%) done
Removing temporary output results/qc/rseqc/annotation.db.
Execute 1 jobs...
[Fri Mar 20 14:32:12 2026]
localrule star_index:
input: resources/genome.fasta, resources/genome.gtf
output: resources/star_genome
log: logs/star_index_genome.log
jobid: 7
reason: Missing output files: resources/star_genome; Input files updated by another job: resources/genome.fasta, resources/genome.gtf
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_
[Fri Mar 20 14:32:33 2026]
Finished jobid: 7 (Rule: star_index)
8 of 53 steps (15%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:32:33 2026]
localrule star_align:
input: results/trimmed/B2/B2-1_R1.fastq.gz, results/trimmed/B2/B2-1_R2.fastq.gz, resources/star_genome, resources/genome.gtf
output: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/star/B2-1/ReadsPerGene.out.tab, results/star/B2-1/Log.out, results/star/B2-1/SJ.out.tab, results/star/B2-1/Log.final.out
log: logs/star/B2-1.log
jobid: 14
reason: Missing output files: results/star/B2-1/ReadsPerGene.out.tab, results/star/B2-1/Aligned.sortedByCoord.out.bam; Input files updated by another job: results/trimmed/B2/B2-1_R1.fastq.gz, resources/genome.gtf, resources/star_genome, results/trimmed/B2/B2-1_R2.fastq.gz
wildcards: sample=B2, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_
Select jobs to execute...
[Fri Mar 20 14:32:39 2026]
Finished jobid: 14 (Rule: star_align)
9 of 53 steps (17%) done
Execute 2 jobs...
[Fri Mar 20 14:32:39 2026]
localrule rseqc_readdis:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B2-1.readdistribution.txt
log: logs/rseqc/rseqc_readdis/B2-1.log
jobid: 43
reason: Missing output files: results/qc/rseqc/B2-1.readdistribution.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:32:39 2026]
localrule rseqc_stat:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B2-1.stats.txt
log: logs/rseqc/rseqc_stat/B2-1.log
jobid: 35
reason: Missing output files: results/qc/rseqc/B2-1.stats.txt; Input files updated by another job: results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:41 2026]
Finished jobid: 35 (Rule: rseqc_stat)
10 of 53 steps (19%) done
Execute 1 jobs...
[Fri Mar 20 14:32:41 2026]
localrule rseqc_innerdis:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B2-1.inner_distance_freq.inner_distance.txt
log: logs/rseqc/rseqc_innerdis/B2-1.log
jobid: 39
reason: Missing output files: results/qc/rseqc/B2-1.inner_distance_freq.inner_distance.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:41 2026]
Finished jobid: 43 (Rule: rseqc_readdis)
11 of 53 steps (21%) done
Execute 1 jobs...
[Fri Mar 20 14:32:41 2026]
localrule rseqc_readgc:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B2-1.readgc.GC_plot.pdf
log: logs/rseqc/rseqc_readgc/B2-1.log
jobid: 51
reason: Missing output files: results/qc/rseqc/B2-1.readgc.GC_plot.pdf; Input files updated by another job: results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:43 2026]
Finished jobid: 39 (Rule: rseqc_innerdis)
12 of 53 steps (23%) done
Execute 1 jobs...
[Fri Mar 20 14:32:43 2026]
localrule rseqc_readdup:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B2-1.readdup.DupRate_plot.pdf
log: logs/rseqc/rseqc_readdup/B2-1.log
jobid: 47
reason: Missing output files: results/qc/rseqc/B2-1.readdup.DupRate_plot.pdf; Input files updated by another job: results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:32:43 2026]
Finished jobid: 51 (Rule: rseqc_readgc)
13 of 53 steps (25%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:32:43 2026]
localrule rseqc_infer:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B2-1.infer_experiment.txt
log: logs/rseqc/rseqc_infer/B2-1.log
jobid: 31
reason: Missing output files: results/qc/rseqc/B2-1.infer_experiment.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:45 2026]
Finished jobid: 31 (Rule: rseqc_infer)
14 of 53 steps (26%) done
Execute 1 jobs...
[Fri Mar 20 14:32:45 2026]
localrule rseqc_junction_annotation:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B2-1.junctionanno.junction.bed
log: logs/rseqc/rseqc_junction_annotation/B2-1.log
jobid: 23
reason: Missing output files: logs/rseqc/rseqc_junction_annotation/B2-1.log, results/qc/rseqc/B2-1.junctionanno.junction.bed; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:45 2026]
Finished jobid: 47 (Rule: rseqc_readdup)
15 of 53 steps (28%) done
Execute 1 jobs...
[Fri Mar 20 14:32:45 2026]
localrule rseqc_junction_saturation:
input: results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B2-1.junctionsat.junctionSaturation_plot.pdf
log: logs/rseqc/rseqc_junction_saturation/B2-1.log
jobid: 27
reason: Missing output files: results/qc/rseqc/B2-1.junctionsat.junctionSaturation_plot.pdf; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:47 2026]
Finished jobid: 23 (Rule: rseqc_junction_annotation)
16 of 53 steps (30%) done
[Fri Mar 20 14:32:47 2026]
Finished jobid: 27 (Rule: rseqc_junction_saturation)
17 of 53 steps (32%) done
Execute 1 jobs...
[Fri Mar 20 14:32:47 2026]
localrule star_align:
input: results/trimmed/A1/A1-1_R1.fastq.gz, results/trimmed/A1/A1-1_R2.fastq.gz, resources/star_genome, resources/genome.gtf
output: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/star/A1-1/ReadsPerGene.out.tab, results/star/A1-1/Log.out, results/star/A1-1/SJ.out.tab, results/star/A1-1/Log.final.out
log: logs/star/A1-1.log
jobid: 5
reason: Missing output files: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/star/A1-1/ReadsPerGene.out.tab; Input files updated by another job: resources/genome.gtf, resources/star_genome, results/trimmed/A1/A1-1_R1.fastq.gz, results/trimmed/A1/A1-1_R2.fastq.gz
wildcards: sample=A1, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_
Select jobs to execute...
[Fri Mar 20 14:32:53 2026]
Finished jobid: 5 (Rule: star_align)
18 of 53 steps (34%) done
Execute 2 jobs...
[Fri Mar 20 14:32:53 2026]
localrule rseqc_junction_saturation:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A1-1.junctionsat.junctionSaturation_plot.pdf
log: logs/rseqc/rseqc_junction_saturation/A1-1.log
jobid: 24
reason: Missing output files: results/qc/rseqc/A1-1.junctionsat.junctionSaturation_plot.pdf; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:32:53 2026]
localrule rseqc_infer:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A1-1.infer_experiment.txt
log: logs/rseqc/rseqc_infer/A1-1.log
jobid: 28
reason: Missing output files: results/qc/rseqc/A1-1.infer_experiment.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:55 2026]
Finished jobid: 28 (Rule: rseqc_infer)
19 of 53 steps (36%) done
Execute 1 jobs...
[Fri Mar 20 14:32:55 2026]
localrule rseqc_readdup:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A1-1.readdup.DupRate_plot.pdf
log: logs/rseqc/rseqc_readdup/A1-1.log
jobid: 44
reason: Missing output files: results/qc/rseqc/A1-1.readdup.DupRate_plot.pdf; Input files updated by another job: results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:32:55 2026]
Finished jobid: 24 (Rule: rseqc_junction_saturation)
20 of 53 steps (38%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:32:55 2026]
localrule rseqc_readgc:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A1-1.readgc.GC_plot.pdf
log: logs/rseqc/rseqc_readgc/A1-1.log
jobid: 48
reason: Missing output files: results/qc/rseqc/A1-1.readgc.GC_plot.pdf; Input files updated by another job: results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:57 2026]
Finished jobid: 44 (Rule: rseqc_readdup)
21 of 53 steps (40%) done
Execute 1 jobs...
[Fri Mar 20 14:32:57 2026]
localrule rseqc_junction_annotation:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A1-1.junctionanno.junction.bed
log: logs/rseqc/rseqc_junction_annotation/A1-1.log
jobid: 19
reason: Missing output files: results/qc/rseqc/A1-1.junctionanno.junction.bed, logs/rseqc/rseqc_junction_annotation/A1-1.log; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:32:57 2026]
Finished jobid: 48 (Rule: rseqc_readgc)
22 of 53 steps (42%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:32:57 2026]
localrule rseqc_readdis:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A1-1.readdistribution.txt
log: logs/rseqc/rseqc_readdis/A1-1.log
jobid: 40
reason: Missing output files: results/qc/rseqc/A1-1.readdistribution.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:59 2026]
Finished jobid: 19 (Rule: rseqc_junction_annotation)
23 of 53 steps (43%) done
Execute 1 jobs...
[Fri Mar 20 14:32:59 2026]
localrule rseqc_stat:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A1-1.stats.txt
log: logs/rseqc/rseqc_stat/A1-1.log
jobid: 32
reason: Missing output files: results/qc/rseqc/A1-1.stats.txt; Input files updated by another job: results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:32:59 2026]
Finished jobid: 40 (Rule: rseqc_readdis)
24 of 53 steps (45%) done
Execute 1 jobs...
[Fri Mar 20 14:32:59 2026]
localrule rseqc_innerdis:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A1-1.inner_distance_freq.inner_distance.txt
log: logs/rseqc/rseqc_innerdis/A1-1.log
jobid: 36
reason: Missing output files: results/qc/rseqc/A1-1.inner_distance_freq.inner_distance.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:00 2026]
Finished jobid: 32 (Rule: rseqc_stat)
25 of 53 steps (47%) done
[Fri Mar 20 14:33:01 2026]
Finished jobid: 36 (Rule: rseqc_innerdis)
26 of 53 steps (49%) done
Execute 1 jobs...
[Fri Mar 20 14:33:01 2026]
localrule star_align:
input: results/trimmed/B1/B1-1_R1.fastq.gz, results/trimmed/B1/B1-1_R2.fastq.gz, resources/star_genome, resources/genome.gtf
output: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/star/B1-1/ReadsPerGene.out.tab, results/star/B1-1/Log.out, results/star/B1-1/SJ.out.tab, results/star/B1-1/Log.final.out
log: logs/star/B1-1.log
jobid: 12
reason: Missing output files: results/star/B1-1/ReadsPerGene.out.tab, results/star/B1-1/Aligned.sortedByCoord.out.bam; Input files updated by another job: results/trimmed/B1/B1-1_R1.fastq.gz, resources/genome.gtf, resources/star_genome, results/trimmed/B1/B1-1_R2.fastq.gz
wildcards: sample=B1, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_
Select jobs to execute...
[Fri Mar 20 14:33:31 2026]
Finished jobid: 12 (Rule: star_align)
27 of 53 steps (51%) done
Execute 2 jobs...
[Fri Mar 20 14:33:31 2026]
localrule rseqc_innerdis:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B1-1.inner_distance_freq.inner_distance.txt
log: logs/rseqc/rseqc_innerdis/B1-1.log
jobid: 38
reason: Missing output files: results/qc/rseqc/B1-1.inner_distance_freq.inner_distance.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:33:31 2026]
localrule rseqc_readdis:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B1-1.readdistribution.txt
log: logs/rseqc/rseqc_readdis/B1-1.log
jobid: 42
reason: Missing output files: results/qc/rseqc/B1-1.readdistribution.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:33 2026]
Finished jobid: 38 (Rule: rseqc_innerdis)
28 of 53 steps (53%) done
Execute 1 jobs...
[Fri Mar 20 14:33:33 2026]
localrule rseqc_stat:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B1-1.stats.txt
log: logs/rseqc/rseqc_stat/B1-1.log
jobid: 34
reason: Missing output files: results/qc/rseqc/B1-1.stats.txt; Input files updated by another job: results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:33 2026]
Finished jobid: 42 (Rule: rseqc_readdis)
29 of 53 steps (55%) done
Execute 1 jobs...
[Fri Mar 20 14:33:33 2026]
localrule rseqc_infer:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B1-1.infer_experiment.txt
log: logs/rseqc/rseqc_infer/B1-1.log
jobid: 30
reason: Missing output files: results/qc/rseqc/B1-1.infer_experiment.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:35 2026]
Finished jobid: 34 (Rule: rseqc_stat)
30 of 53 steps (57%) done
Execute 1 jobs...
[Fri Mar 20 14:33:35 2026]
localrule rseqc_junction_saturation:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B1-1.junctionsat.junctionSaturation_plot.pdf
log: logs/rseqc/rseqc_junction_saturation/B1-1.log
jobid: 26
reason: Missing output files: results/qc/rseqc/B1-1.junctionsat.junctionSaturation_plot.pdf; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:35 2026]
Finished jobid: 30 (Rule: rseqc_infer)
31 of 53 steps (58%) done
Execute 1 jobs...
[Fri Mar 20 14:33:35 2026]
localrule rseqc_readgc:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B1-1.readgc.GC_plot.pdf
log: logs/rseqc/rseqc_readgc/B1-1.log
jobid: 50
reason: Missing output files: results/qc/rseqc/B1-1.readgc.GC_plot.pdf; Input files updated by another job: results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:37 2026]
Finished jobid: 26 (Rule: rseqc_junction_saturation)
32 of 53 steps (60%) done
Execute 1 jobs...
[Fri Mar 20 14:33:37 2026]
localrule rseqc_junction_annotation:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/B1-1.junctionanno.junction.bed
log: logs/rseqc/rseqc_junction_annotation/B1-1.log
jobid: 22
reason: Missing output files: logs/rseqc/rseqc_junction_annotation/B1-1.log, results/qc/rseqc/B1-1.junctionanno.junction.bed; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:37 2026]
Finished jobid: 50 (Rule: rseqc_readgc)
33 of 53 steps (62%) done
Execute 1 jobs...
[Fri Mar 20 14:33:37 2026]
localrule rseqc_readdup:
input: results/star/B1-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/B1-1.readdup.DupRate_plot.pdf
log: logs/rseqc/rseqc_readdup/B1-1.log
jobid: 46
reason: Missing output files: results/qc/rseqc/B1-1.readdup.DupRate_plot.pdf; Input files updated by another job: results/star/B1-1/Aligned.sortedByCoord.out.bam
wildcards: sample=B1, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:33:39 2026]
Finished jobid: 22 (Rule: rseqc_junction_annotation)
34 of 53 steps (64%) done
[Fri Mar 20 14:33:39 2026]
Finished jobid: 46 (Rule: rseqc_readdup)
35 of 53 steps (66%) done
Execute 1 jobs...
[Fri Mar 20 14:33:39 2026]
localrule star_align:
input: results/trimmed/A2/A2-1_R1.fastq.gz, results/trimmed/A2/A2-1_R2.fastq.gz, resources/star_genome, resources/genome.gtf
output: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/star/A2-1/ReadsPerGene.out.tab, results/star/A2-1/Log.out, results/star/A2-1/SJ.out.tab, results/star/A2-1/Log.final.out
log: logs/star/A2-1.log
jobid: 10
reason: Missing output files: results/star/A2-1/ReadsPerGene.out.tab, results/star/A2-1/Aligned.sortedByCoord.out.bam; Input files updated by another job: results/trimmed/A2/A2-1_R1.fastq.gz, resources/genome.gtf, resources/star_genome, results/trimmed/A2/A2-1_R2.fastq.gz
wildcards: sample=A2, unit=1
threads: 2
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/75bdf52aa307081b07fa5eaa5025d72b_
[Fri Mar 20 14:34:09 2026]
Finished jobid: 10 (Rule: star_align)
36 of 53 steps (68%) done
Select jobs to execute...
Execute 2 jobs...
[Fri Mar 20 14:34:09 2026]
localrule rseqc_readgc:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A2-1.readgc.GC_plot.pdf
log: logs/rseqc/rseqc_readgc/A2-1.log
jobid: 49
reason: Missing output files: results/qc/rseqc/A2-1.readgc.GC_plot.pdf; Input files updated by another job: results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:34:09 2026]
localrule rseqc_readdup:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A2-1.readdup.DupRate_plot.pdf
log: logs/rseqc/rseqc_readdup/A2-1.log
jobid: 45
reason: Missing output files: results/qc/rseqc/A2-1.readdup.DupRate_plot.pdf; Input files updated by another job: results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:34:11 2026]
Finished jobid: 49 (Rule: rseqc_readgc)
37 of 53 steps (70%) done
Execute 1 jobs...
[Fri Mar 20 14:34:11 2026]
localrule rseqc_infer:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A2-1.infer_experiment.txt
log: logs/rseqc/rseqc_infer/A2-1.log
jobid: 29
reason: Missing output files: results/qc/rseqc/A2-1.infer_experiment.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:34:11 2026]
Finished jobid: 45 (Rule: rseqc_readdup)
38 of 53 steps (72%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:11 2026]
localrule rseqc_junction_saturation:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A2-1.junctionsat.junctionSaturation_plot.pdf
log: logs/rseqc/rseqc_junction_saturation/A2-1.log
jobid: 25
reason: Missing output files: results/qc/rseqc/A2-1.junctionsat.junctionSaturation_plot.pdf; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:34:12 2026]
Finished jobid: 29 (Rule: rseqc_infer)
39 of 53 steps (74%) done
Execute 1 jobs...
[Fri Mar 20 14:34:12 2026]
localrule rseqc_stat:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam
output: results/qc/rseqc/A2-1.stats.txt
log: logs/rseqc/rseqc_stat/A2-1.log
jobid: 33
reason: Missing output files: results/qc/rseqc/A2-1.stats.txt; Input files updated by another job: results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
[Fri Mar 20 14:34:13 2026]
Finished jobid: 25 (Rule: rseqc_junction_saturation)
40 of 53 steps (75%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:13 2026]
localrule rseqc_readdis:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A2-1.readdistribution.txt
log: logs/rseqc/rseqc_readdis/A2-1.log
jobid: 41
reason: Missing output files: results/qc/rseqc/A2-1.readdistribution.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:34:14 2026]
Finished jobid: 33 (Rule: rseqc_stat)
41 of 53 steps (77%) done
Execute 1 jobs...
[Fri Mar 20 14:34:14 2026]
localrule rseqc_junction_annotation:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A2-1.junctionanno.junction.bed
log: logs/rseqc/rseqc_junction_annotation/A2-1.log
jobid: 21
reason: Missing output files: results/qc/rseqc/A2-1.junctionanno.junction.bed, logs/rseqc/rseqc_junction_annotation/A2-1.log; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:34:15 2026]
Finished jobid: 41 (Rule: rseqc_readdis)
42 of 53 steps (79%) done
Execute 1 jobs...
[Fri Mar 20 14:34:15 2026]
localrule rseqc_innerdis:
input: results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/annotation.bed
output: results/qc/rseqc/A2-1.inner_distance_freq.inner_distance.txt
log: logs/rseqc/rseqc_innerdis/A2-1.log
jobid: 37
reason: Missing output files: results/qc/rseqc/A2-1.inner_distance_freq.inner_distance.txt; Input files updated by another job: results/qc/rseqc/annotation.bed, results/star/A2-1/Aligned.sortedByCoord.out.bam
wildcards: sample=A2, unit=1
priority: 1
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/ffb635c126ac3e8b0d89888e5fd9ba2d_
Select jobs to execute...
[Fri Mar 20 14:34:16 2026]
Finished jobid: 21 (Rule: rseqc_junction_annotation)
43 of 53 steps (81%) done
Execute 1 jobs...
[Fri Mar 20 14:34:16 2026]
localrule count_matrix:
input: results/star/A1-1/ReadsPerGene.out.tab, results/star/A2-1/ReadsPerGene.out.tab, results/star/B1-1/ReadsPerGene.out.tab, results/star/B2-1/ReadsPerGene.out.tab
output: results/counts/all.tsv
log: logs/count-matrix.log
jobid: 4
reason: Missing output files: results/counts/all.tsv; Input files updated by another job: results/star/A2-1/ReadsPerGene.out.tab, results/star/B2-1/ReadsPerGene.out.tab, results/star/B1-1/ReadsPerGene.out.tab, results/star/A1-1/ReadsPerGene.out.tab
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/e1ed8058a1a68e8227ab2570fcc2ba13_
Activating conda environment: .snakemake/conda/e1ed8058a1a68e8227ab2570fcc2ba13_
[Fri Mar 20 14:34:17 2026]
Finished jobid: 37 (Rule: rseqc_innerdis)
44 of 53 steps (83%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:17 2026]
localrule multiqc:
input: results/star/A1-1/Aligned.sortedByCoord.out.bam, results/star/A2-1/Aligned.sortedByCoord.out.bam, results/star/B1-1/Aligned.sortedByCoord.out.bam, results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/A1-1.junctionanno.junction.bed, results/qc/rseqc/A2-1.junctionanno.junction.bed, results/qc/rseqc/B1-1.junctionanno.junction.bed, results/qc/rseqc/B2-1.junctionanno.junction.bed, results/qc/rseqc/A1-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/A2-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/B1-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/B2-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/A1-1.infer_experiment.txt, results/qc/rseqc/A2-1.infer_experiment.txt, results/qc/rseqc/B1-1.infer_experiment.txt, results/qc/rseqc/B2-1.infer_experiment.txt, results/qc/rseqc/A1-1.stats.txt, results/qc/rseqc/A2-1.stats.txt, results/qc/rseqc/B1-1.stats.txt, results/qc/rseqc/B2-1.stats.txt, results/qc/rseqc/A1-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/A2-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/B1-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/B2-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/A1-1.readdistribution.txt, results/qc/rseqc/A2-1.readdistribution.txt, results/qc/rseqc/B1-1.readdistribution.txt, results/qc/rseqc/B2-1.readdistribution.txt, results/qc/rseqc/A1-1.readdup.DupRate_plot.pdf, results/qc/rseqc/A2-1.readdup.DupRate_plot.pdf, results/qc/rseqc/B1-1.readdup.DupRate_plot.pdf, results/qc/rseqc/B2-1.readdup.DupRate_plot.pdf, results/qc/rseqc/A1-1.readgc.GC_plot.pdf, results/qc/rseqc/A2-1.readgc.GC_plot.pdf, results/qc/rseqc/B1-1.readgc.GC_plot.pdf, results/qc/rseqc/B2-1.readgc.GC_plot.pdf, logs/rseqc/rseqc_junction_annotation/A1-1.log, logs/rseqc/rseqc_junction_annotation/A2-1.log, logs/rseqc/rseqc_junction_annotation/B1-1.log, logs/rseqc/rseqc_junction_annotation/B2-1.log
output: results/qc/multiqc_report.html
log: logs/multiqc.log
jobid: 18
reason: Missing output files: results/qc/multiqc_report.html; Input files updated by another job: results/qc/rseqc/A2-1.infer_experiment.txt, results/qc/rseqc/A2-1.junctionsat.junctionSaturation_plot.pdf, results/star/A2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/B1-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/B1-1.readdistribution.txt, results/qc/rseqc/B1-1.stats.txt, results/qc/rseqc/B1-1.infer_experiment.txt, results/qc/rseqc/A1-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/B2-1.inner_distance_freq.inner_distance.txt, logs/rseqc/rseqc_junction_annotation/B2-1.log, results/qc/rseqc/B2-1.junctionanno.junction.bed, results/qc/rseqc/B1-1.readdup.DupRate_plot.pdf, results/qc/rseqc/B2-1.stats.txt, results/qc/rseqc/B2-1.infer_experiment.txt, results/qc/rseqc/A2-1.inner_distance_freq.inner_distance.txt, results/qc/rseqc/B2-1.readgc.GC_plot.pdf, results/qc/rseqc/A1-1.readdup.DupRate_plot.pdf, results/qc/rseqc/A1-1.readgc.GC_plot.pdf, results/qc/rseqc/B1-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/B2-1.junctionsat.junctionSaturation_plot.pdf, results/qc/rseqc/A1-1.stats.txt, results/qc/rseqc/A1-1.inner_distance_freq.inner_distance.txt, results/star/A1-1/Aligned.sortedByCoord.out.bam, results/star/B1-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/B1-1.junctionanno.junction.bed, results/qc/rseqc/A2-1.stats.txt, results/qc/rseqc/A1-1.readdistribution.txt, logs/rseqc/rseqc_junction_annotation/A2-1.log, results/qc/rseqc/A2-1.readdup.DupRate_plot.pdf, logs/rseqc/rseqc_junction_annotation/A1-1.log, results/qc/rseqc/A1-1.infer_experiment.txt, results/qc/rseqc/B1-1.readgc.GC_plot.pdf, results/qc/rseqc/A2-1.readgc.GC_plot.pdf, results/qc/rseqc/A2-1.junctionanno.junction.bed, results/qc/rseqc/B2-1.readdistribution.txt, logs/rseqc/rseqc_junction_annotation/B1-1.log, results/star/B2-1/Aligned.sortedByCoord.out.bam, results/qc/rseqc/A2-1.readdistribution.txt, results/qc/rseqc/A1-1.junctionanno.junction.bed, results/qc/rseqc/B2-1.readdup.DupRate_plot.pdf
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/270ca3d7080244d890aa4523c74ed889_
Activating conda environment: .snakemake/conda/270ca3d7080244d890aa4523c74ed889_
[Fri Mar 20 14:34:18 2026]
Finished jobid: 4 (Rule: count_matrix)
45 of 53 steps (85%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:18 2026]
localrule deseq2_init:
input: results/counts/all.tsv
output: results/deseq2/all.rds, results/deseq2/normcounts.tsv
log: logs/deseq2/init.log
jobid: 3
reason: Missing output files: results/deseq2/all.rds, results/deseq2/normcounts.tsv; Input files updated by another job: results/counts/all.tsv
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/71391f233ddac307563d6978fdd31ba6_
Select jobs to execute...
[Fri Mar 20 14:34:21 2026]
Finished jobid: 18 (Rule: multiqc)
46 of 53 steps (87%) done
Execute 1 jobs...
[Fri Mar 20 14:34:21 2026]
localrule gene_2_symbol:
input: results/counts/all.tsv
output: results/counts/all.symbol.tsv
log: logs/gene2symbol/results/counts/all.log
jobid: 17
reason: Missing output files: results/counts/all.symbol.tsv; Input files updated by another job: results/counts/all.tsv
wildcards: prefix=results/counts/all
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/5be176b9627ee82c134aaa9bbe9f5182_
?25h
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.0 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.2 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
✖ dplyr::select() masks biomaRt::select()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
?25h?25h?25h?25h
[Fri Mar 20 14:34:27 2026]
Finished jobid: 3 (Rule: deseq2_init)
47 of 53 steps (89%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:27 2026]
localrule gene_2_symbol:
input: results/deseq2/normcounts.tsv
output: results/deseq2/normcounts.symbol.tsv
log: logs/gene2symbol/results/deseq2/normcounts.log
jobid: 16
reason: Missing output files: results/deseq2/normcounts.symbol.tsv; Input files updated by another job: results/deseq2/normcounts.tsv
wildcards: prefix=results/deseq2/normcounts
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/5be176b9627ee82c134aaa9bbe9f5182_
Select jobs to execute...
?25h
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.0 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.2 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
✖ dplyr::select() masks biomaRt::select()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
?25h?25h?25h?25h
?25h?25h
?25h?25h
Batch submitting query [===============>---------------] 50% eta: 1s
?25h
?25h?25h?25h?25h?25h[Fri Mar 20 14:34:36 2026]
Finished jobid: 16 (Rule: gene_2_symbol)
48 of 53 steps (91%) done
Execute 1 jobs...
[Fri Mar 20 14:34:36 2026]
localrule deseq2:
input: results/deseq2/all.rds
output: results/diffexp/treated-vs-untreated.diffexp.tsv, results/diffexp/treated-vs-untreated.ma-plot.svg
log: logs/deseq2/treated-vs-untreated.diffexp.log
jobid: 2
reason: Missing output files: results/diffexp/treated-vs-untreated.diffexp.tsv; Input files updated by another job: results/deseq2/all.rds
wildcards: contrast=treated-vs-untreated
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/71391f233ddac307563d6978fdd31ba6_
Select jobs to execute...
?25h?25h?25h?25h
?25h?25h[Fri Mar 20 14:34:36 2026]
Finished jobid: 17 (Rule: gene_2_symbol)
49 of 53 steps (92%) done
Execute 1 jobs...
[Fri Mar 20 14:34:36 2026]
localrule pca:
input: results/deseq2/all.rds
output: results/pca.condition.svg
log: logs/pca.condition.log
jobid: 52
reason: Missing output files: results/pca.condition.svg; Input files updated by another job: results/deseq2/all.rds
wildcards: variable=condition
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/71391f233ddac307563d6978fdd31ba6_
Fontconfig warning: using without calling FcInit()
[Fri Mar 20 14:34:44 2026]
Finished jobid: 2 (Rule: deseq2)
50 of 53 steps (94%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:44 2026]
localrule gene_2_symbol:
input: results/diffexp/treated-vs-untreated.diffexp.tsv
output: results/diffexp/treated-vs-untreated.diffexp.symbol.tsv
log: logs/gene2symbol/results/diffexp/treated-vs-untreated.diffexp.log
jobid: 1
reason: Missing output files: results/diffexp/treated-vs-untreated.diffexp.symbol.tsv; Input files updated by another job: results/diffexp/treated-vs-untreated.diffexp.tsv
wildcards: prefix=results/diffexp/treated-vs-untreated.diffexp
resources: tmpdir=/tmp
Activating conda environment: .snakemake/conda/5be176b9627ee82c134aaa9bbe9f5182_
[Fri Mar 20 14:34:44 2026]
Finished jobid: 52 (Rule: pca)
51 of 53 steps (96%) done
?25h
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.0 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.2 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
✖ dplyr::select() masks biomaRt::select()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
?25h?25h?25h?25h
?25h?25h
?25h?25h?25h?25h?25h?25h
[Fri Mar 20 14:34:51 2026]
Finished jobid: 1 (Rule: gene_2_symbol)
52 of 53 steps (98%) done
Select jobs to execute...
Execute 1 jobs...
[Fri Mar 20 14:34:51 2026]
localrule all:
input: results/diffexp/treated-vs-untreated.diffexp.symbol.tsv, results/deseq2/normcounts.symbol.tsv, results/counts/all.symbol.tsv, results/qc/multiqc_report.html, results/pca.condition.svg, results/pca.condition.svg
jobid: 0
reason: Input files updated by another job: results/counts/all.symbol.tsv, results/pca.condition.svg, results/diffexp/treated-vs-untreated.diffexp.symbol.tsv, results/qc/multiqc_report.html, results/deseq2/normcounts.symbol.tsv
resources: tmpdir=/tmp
[Fri Mar 20 14:34:51 2026]
Finished jobid: 0 (Rule: all)
53 of 53 steps (100%) done
Complete log(s): /home/runner/work/snakemake-lamin/snakemake-lamin/docs/rna-seq-star-deseq2/.test/.snakemake/log/2026-03-20T142812.657563.snakemake.log
Registering outputs¶
Quality control.
multiqc_file = ln.Artifact(f"{root_dir}/.test/results/qc/multiqc_report.html").save()
How would I register all QC files?
multiqc_results = ln.Artifact.from_dir(f"{root_dir}/results/qc/multiqc_report_data/")
ln.save(multiqc_results)
Count matrix.
count_matrix = ln.Artifact(f"{root_dir}/.test/results/counts/all.symbol.tsv")
count_matrix.save()
Show code cell output
Artifact(uid='gcSEEPoCPbMZBgBd0000', key='.test/results/counts/all.symbol.tsv', description=None, suffix='.tsv', kind=None, otype=None, size=115656, hash='raT2a-pfpiOK_4XYNfdxDA', n_files=None, n_observations=None, branch_id=1, created_on_id=1, space_id=1, storage_id=1, run_id=1, schema_id=None, created_by_id=1, created_at=2026-03-20 14:34:52 UTC, is_locked=False, version_tag=None, is_latest=True)
Visualize¶
View data lineage:
count_matrix.view_lineage()
Show code cell output
! calling anonymously, will miss private instances
Appendix¶
Linking biological entities¶
To make the count matrix queryable by biological entities (genes, experimental metadata, etc.), we can now proceed with: Bulk RNA-seq
Linking a Snakemake run ID¶
Snakemake does not have an easily accessible ID that is associated with a run. Therefore, we need to extract it from the log files.
import pathlib
from datetime import datetime
PATH_TO_DOT_SNAKEMAKE_LOG = "rna-seq-star-deseq2/.test/.snakemake/log"
log_files_file_names = list(
map(
lambda lf: str(lf).split("/")[-1],
list(pathlib.Path(PATH_TO_DOT_SNAKEMAKE_LOG).glob("*.snakemake.log")),
)
)
timestamps = [
datetime.strptime(filename.split(".")[0], "%Y-%m-%dT%H%M%S")
for filename in log_files_file_names
]
snakemake_id = log_files_file_names[timestamps.index(max(timestamps))].split(".")[1]
Let us add the information about the session ID to our run record:
run = ln.context.run # let's grab the global run record
run.reference = snakemake_id
run.reference_type = "snakemake_id"
run.save()
Show code cell output
Run(uid='y8B2ArK4mapTXyLH', name=None, description=None, entrypoint=None, started_at=2026-03-20 14:28:11 UTC, finished_at=None, params=None, reference='657563', reference_type='snakemake_id', cli_args=None, branch_id=1, created_on_id=1, space_id=1, transform_id=1, report_id=None, environment_id=None, plan_id=None, created_by_id=1, initiated_by_run_id=None, created_at=2026-03-20 14:28:11 UTC, is_locked=False)