PYTMB.PY
Calculate a Tumor Mutational Burden (TMB) score from a VCF file
URL: https://github.com/bioinfo-pf-curie/TMB?tab=readme-ov-file#tumor-mutational-burden
Example
This wrapper can be used in the following way:
rule test_pytmb:
input:
vcf="input/sample.bcf",
db_config="input/dbconfig.yaml",
var_config="input/varconfig.yaml",
bed="input/regions.bed",
output:
res="output/tmb.txt",
vcf="output/tmp.vcf",
log:
"log/pytmb.log",
params:
extra="--verbose",
wrapper:
"v9.4.2/bio/tmb/pytmb"
Note that input, output and log file paths can be chosen freely.
When running with
snakemake --use-conda
the software dependencies will be automatically deployed into an isolated environment before execution.
Software dependencies
tmb=1.6.0
Input/Output
Input:
vcf: Path to input variants (vcf, vcf.gz, or bcf formatted)db_config: Path to database config file (yaml formatted)var_config: Path to variant config file (yaml formatted)bed: Path to intervals file to compute effective genome size (bed formatted)
Output:
res: Path to TMB resultsvcf: Optional path to variants considered for TMB calculation
Params
extra: Optional parameters provided to pyTMB.py, besides -i, –dbConfig, –varConfig, –bed, or –export
Code
# coding: utf-8
"""Snakemake wrapper for pyTMB.py"""
__author__ = "Thibault Dayris"
__mail__ = "thibault.dayris@gustaveroussy.fr"
__copyright__ = "Copyright 2024, Thibault Dayris"
__license__ = "MIT"
from pathlib import Path
from snakemake import shell
log = snakemake.log_fmt_shell(stdout=False, stderr=True, append=True)
extra = snakemake.params.get("extra", "")
db_config = snakemake.input.get("db_config", "")
if db_config:
db_config = f"--dbConfig {db_config}"
var_config = snakemake.input.get("var_config", "")
if var_config:
var_config = f"--varConfig {var_config}"
bed = snakemake.input.get("bed", "")
if bed:
bed = f"--bed {bed}"
out_vcf = snakemake.output.get("vcf", "")
if out_vcf:
out_vcf = f"--export {out_vcf}"
shell(
"pyTMB"
" --vcf {snakemake.input.vcf}"
" {db_config}"
" {var_config}"
" {bed}"
" {extra}"
" {out_vcf}"
" > {snakemake.output.res}"
" {log}"
)