Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module F2 where
- dnaLetter = "ACGT"
- data SeqTypes = Dna | Protein deriving (Show, Eq)
- data MolSeq = MolSeq String String SeqTypes deriving (Show)
- string2seq :: String -> String -> MolSeq
- string2seq namn sekvens = MolSeq namn sekvens (string2seqHelper namn sekvens)
- string2seqHelper :: String -> String -> SeqTypes
- string2seqHelper namn sekvens
- | (null sekvens) = Dna
- | (head sekvens) `elem` dnaLetter = string2seqHelper namn (tail sekvens)
- | otherwise = Protein
- seqName :: MolSeq -> String
- seqName (MolSeq namn sekvens typ) = namn
- seqSequence :: MolSeq -> String
- seqSequence (MolSeq namn sekvens typ) = sekvens
- seqType :: MolSeq -> SeqTypes
- seqType (MolSeq namn sekvens typ) = typ
- seqLength :: MolSeq -> Double
- seqLength (MolSeq namn sekvens typ) = sum [ 1 | _ <- sekvens] :: Double
- getAlpha :: MolSeq -> MolSeq -> Double
- getAlpha (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2) = sum [ if x == y then 1 else 0 | x <- sekvens1, y <- sekvens2] :: Double
- checkValidity :: MolSeq -> MolSeq -> Bool
- checkValidity (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2) = if typ1 == typ2 then True else False
- eDistanceDNA :: MolSeq -> MolSeq -> Double
- eDistanceDNA (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2)
- | alpha > 0.74 = 3.3
- | otherwise = (-3/4)*log(1-(4*alpha/3))
- where alpha = gA/(seqLength (MolSeq namn1 sekvens1 typ1))
- gA = getAlpha (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2)
- eDistanceProtein :: MolSeq -> MolSeq -> Double
- eDistanceProtein (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2)
- | alpha > 0.94 = 3.7
- | otherwise = (-19/20)*log(1-(20*alpha/19))
- where alpha = gA/(seqLength (MolSeq namn1 sekvens1 typ1))
- gA = getAlpha (MolSeq namn1 sekvens1 typ1) (MolSeq namn2 sekvens2 typ2)
- seqDistance :: MolSeq -> MolSeq -> Double
- seqDistance molseq1 molseq2 =
- if (checkValidity molseq1 molseq2)
- then (if (seqType molseq1) == Dna then eDistanceDNA molseq1 molseq2 else eDistanceProtein molseq1 molseq2)
- else error "FU BRO"
Advertisement
Add Comment
Please, Sign In to add comment