simseq-0.0: src/Sanger.hs
{- Implement Sanger type sequencing
Random primer position
Terminate after ...850±50 nucleotides(?)
initial errors, uniform errors, terminal errors
-}
module Sanger (sanger) where
import UnfoldMut
-- Sanger error distribution. High initial rate,
-- long stretch of high quality, then degradation at the end
sanger_dist :: Distribution
sanger_dist = combine [ (*0.05) . uniform -- 0.5% error rate in HQ region
, (*0.30) . gradient 25 0 -- high initial error rate
, (*0.40) . sigma 700 25] -- terminal degradation
mods :: [Char]
mods = "ACGTN"
-- | Relationship of 3:1 between substitutions and indels
s_mutate :: [Mutator]
s_mutate = mkmut ((*0.60) . sanger_dist) (subst mods) -- 3/4 subst
++ mkmut ((*0.10) . sanger_dist) (ins mods) -- 1/8 insert
++ mkmut ((*0.10) . sanger_dist) del -- 1/8 delete
++ mkmut ((*0.30) . sigma 700 25) dup -- terminal duplications
++ mkmut ((*0.20) . sigma 700 25) del -- ...and deletions
terminator :: Terminator
terminator (MS _ _ l) = sigma 850 25 $ fromIntegral l
sanger :: [String] -> Model
sanger = \[n,d] -> (p_uniform [n,d],s_mutate,terminator)