.. _`bio/hisat2/align`: HISAT2 ALIGN ============ .. image:: https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/hisat2/align?label=version%20update%20pull%20requests :target: https://github.com/snakemake/snakemake-wrappers/pulls?q=is%3Apr+is%3Aopen+label%3Abio/hisat2/align Map reads with hisat2. **URL**: http://daehwankimlab.github.io/hisat2 Example ------- This wrapper can be used in the following way: .. code-block:: python rule hisat2_align: input: reads=["reads/{sample}_R1.fastq", "reads/{sample}_R2.fastq"], idx="index/", output: "mapped/{sample}.bam", log: "logs/hisat2_align_{sample}.log", params: extra="", threads: 2 wrapper: "v3.0.1/bio/hisat2/align" Note that input, output and log file paths can be chosen freely. When running with .. code-block:: bash snakemake --use-conda the software dependencies will be automatically deployed into an isolated environment before execution. Notes ----- * The `-S` flag must not be used since output is already directly piped to `samtools` for compression. * The `--threads/-p` flag must not be used since threads is set separately via the snakemake `threads` directive. * The wrapper does not yet handle SRA input accessions. * No reference index files checking is done since the actual number of files may differ depending on the reference sequence size. This is also why the index is supplied in the `params` directive instead of the `input` directive. Software dependencies --------------------- * ``hisat2=2.2.1`` * ``samtools=1.18`` Input/Output ------------ **Input:** * ``reads``: either 1 or 2 FASTQ files with reads **Output:** * bam file with mapped reads Params ------ * ``idx``: prefix of index file path (required) * ``extra``: additional parameters Authors ------- * Wibowo Arindrarto Code ---- .. code-block:: python __author__ = "Wibowo Arindrarto" __copyright__ = "Copyright 2016, Wibowo Arindrarto" __email__ = "bow@bow.web.id" __license__ = "BSD" import os from pathlib import Path from snakemake.shell import shell # Placeholder for optional parameters extra = snakemake.params.get("extra", "") # Run log log = snakemake.log_fmt_shell() # Input file wrangling reads = snakemake.input.get("reads") if isinstance(reads, str): input_flags = "-U {0}".format(reads) elif len(reads) == 1: input_flags = "-U {0}".format(reads[0]) elif len(reads) == 2: input_flags = "-1 {0} -2 {1}".format(*reads) else: raise RuntimeError( "Reads parameter must contain at least 1 and at most 2" " input files." ) ht2_files = Path(snakemake.input.idx).glob("*.ht2") idx_prefix = os.path.commonprefix(list(ht2_files)).rstrip(".") # Executed shell command shell( "(hisat2 {extra} " "--threads {snakemake.threads} " " -x {idx_prefix} {input_flags} " " | samtools view -Sbh -o {snakemake.output[0]} -) " " {log}" ) .. |nl| raw:: html