Source code for iss.error_models.basic

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

from iss import util
from iss.error_models import ErrorModel


[docs] class BasicErrorModel(ErrorModel): """Basic Error Model class Basic error model. The phred scores are based on a normal distribution. Only substitutions errors occur. The substitution rate is assumed equal between all nucleotides. """ def __init__(self, fragment_length=None, fragment_sd=None, store_mutations=False): super().__init__() self.read_length = 125 self.insert_size = 200 self.fragment_length = fragment_length self.fragment_sd = fragment_sd self.store_mutations = store_mutations self.quality_forward = self.quality_reverse = 30 self.subst_choices_for = self.subst_choices_rev = [ { "A": (["T", "C", "G"], [1 / 3, 1 / 3, 1 / 3]), "T": (["A", "C", "G"], [1 / 3, 1 / 3, 1 / 3]), "C": (["A", "T", "G"], [1 / 3, 1 / 3, 1 / 3]), "G": (["A", "T", "C"], [1 / 3, 1 / 3, 1 / 3]), } for _ in range(self.read_length) ] self.ins_for = self.ins_rev = self.del_for = self.del_rev = [ {"A": 0.0, "T": 0.0, "C": 0.0, "G": 0.0} for _ in range(125) ]
[docs] def gen_phred_scores(self, mean_quality, orientation): """Generate a normal distribution, transform to phred scores Generate a list of phred score according to a normal distribution centered around the ErrorModel quality Args: mean_quality (int): mean phred score Returns: list: list of phred scores following a normal distribution """ norm = [min(q, 0.9999) for q in np.random.normal(util.phred_to_prob(mean_quality), 0.01, self.read_length)] phred = [util.prob_to_phred(p) for p in norm] return phred
[docs] def random_insert_size(self): """Fake random function returning the default insert size of the basic arror model Returns: int: insert size """ return self.insert_size