Source code for iCount.externals.cutadapt
""".. Line to protect from pydocstyle D205, D400.
Cutadapt
--------
Remove adapter sequences from reads in FASTQ file.
"""
import subprocess
from iCount.files.fastq import get_qual_encoding, ENCODING_TO_OFFSET
[docs]def get_version():
"""Get cutadapt version."""
args = ['cutadapt', '--version']
try:
ver = subprocess.check_output(args, shell=False, universal_newlines=True)
return str(ver).rstrip('\n\r')
except (FileNotFoundError, subprocess.CalledProcessError):
return None
[docs]def run(reads, reads_trimmed, adapter, qual_trim=None, minimum_length=None):
"""
Remove adapter sequences from high-throughput sequencing reads.
Parameters
----------
reads : str
Input FASTQ file.
reads_trimmed : str
Output FASTQ file containing trimmed reads.
adapter : str
Sequence of an adapter ligated to the 3' end.
qual_trim : int
Trim low-quality bases before adapter removal.
minimum_length : int
Discard trimmed reads that are shorter than `minimum_length`.
Returns
-------
int
Return code of the `cutadapt` program.
"""
args = [
'cutadapt',
'--quiet',
'-a', adapter,
]
qual_base = ENCODING_TO_OFFSET[get_qual_encoding(reads)]
args.extend(['--quality-base={}'.format(qual_base)])
if qual_trim is not None:
args.extend(['-q', '{:d}'.format(qual_trim)])
if minimum_length is not None:
args.extend(['-m', '{:d}'.format(minimum_length)])
args.extend(['-o', reads_trimmed, reads])
return subprocess.call(args, shell=False)