← Files Life Sciences NGS AnalysisARCHIVED FILE

workflows/scrnaseq_fastq_to_count/run_star_genome_generate.py

1.74 KB · Oct 4, 2026 · 12:07 UTC

↓ Download file

import os
import subprocess
from pathlib import Path

execution = snakemake.config.get("execution", {})
star_runner = execution.get("star_runner", "native")
star_image = execution.get(
    "star_image",
    "josousa/star@sha256:2683d370b9c91a2e497d776d9b0dff2ddcc01dfec5029103ffa66b2a8da7b0c2",
)

output_dir = Path(str(snakemake.output[0])).resolve()
output_dir.mkdir(parents=True, exist_ok=True)

if star_runner == "docker":
    run_root = output_dir.parents[1]
    fasta = Path(str(snakemake.input.fasta)).resolve()
    gtf = Path(str(snakemake.input.gtf)).resolve()
    cmd = [
        "docker",
        "run",
        "--rm",
        "--platform",
        "linux/amd64",
        "-u",
        f"{os.getuid()}:{os.getgid()}",
        "-w",
        "/work",
        "-v",
        f"{run_root}:/work",
        "-v",
        f"{fasta.parent}:/fasta_ro:ro",
        "-v",
        f"{gtf.parent}:/gtf_ro:ro",
        star_image,
        "STAR",
        "--runThreadN",
        str(snakemake.threads),
        "--runMode",
        "genomeGenerate",
        "--genomeDir",
        f"/work/{output_dir.relative_to(run_root)}",
        "--genomeFastaFiles",
        f"/fasta_ro/{fasta.name}",
        "--sjdbGTFfile",
        f"/gtf_ro/{gtf.name}",
        "--sjdbOverhang",
        str(snakemake.params.sjdb_overhang),
    ]
else:
    cmd = [
        "STAR",
        "--runThreadN",
        str(snakemake.threads),
        "--runMode",
        "genomeGenerate",
        "--genomeDir",
        str(output_dir),
        "--genomeFastaFiles",
        str(Path(str(snakemake.input.fasta)).resolve()),
        "--sjdbGTFfile",
        str(Path(str(snakemake.input.gtf)).resolve()),
        "--sjdbOverhang",
        str(snakemake.params.sjdb_overhang),
    ]

subprocess.run(cmd, check=True)

SHA-256: 153860c1661e96127c1834d8ef8e04bc02ab980d3e8646a74475409117ded391