Jump to content

Bioinformatics/Sequence mutation: Difference between revisions

m
Line 946:
i <- randomIndex (length xs)
case m of
Swap -> randomDNA >>= \d -> pure ((Swap, i), swapIndexswapElement i d xs)
Insert -> randomDNA >>= \d -> pure ((Insert, i), insertIndexinsertElement i d xs)
Delete -> pure ((Delete, i), dropIndexdropElement i xs)
where
dropIndexdropElement i xs = take (pred i) xs <> drop i xs
insertIndexinsertElement i e xs = take i xs <> [e] <> drop i xs
swapIndexswapElement i a xs = take (pred i) xs <> [a] <> drop i xs
randomIndex max = getStdRandom (randomR (1, max))
randomDNA = head . randoms <$> newStdGen
 
mutationsmutate :: Int -> DNASequence -> IO DNASequence
mutationsmutate 0 s = pure s
mutationsmutate n s = do
(m, ms) <- mutateSequence s
uncurry (printf "%6s @ %d\n") m
mutationsmutate (pred n) ms
 
main :: IO ()
main = do
dnaseqds <- newSequence 200
putStrLn "\nInitial Sequence:" >> showSequence dnaseqds
putStrLn "\nBase Counts:" >> showBaseCounts dnaseqds
printf "Total: %d\n\n" $ length dnaseqds
ms <- mutationsmutate 10 dnaseqds
putStrLn "\nMutated Sequence:" >> showSequence ms
putStrLn "\nBase Counts:" >> showBaseCounts ms
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.