Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module MolSeq where
- import Hugs.Observe
- import Data.List
- data SequenceType = DNA | Protein
- deriving (Show, Eq)
- data MolSeq = MolSeq { molSeqType :: SequenceType, molSeqName :: String, molSeqSequenceString :: String }
- deriving (Show, Eq)
- string2seq :: String -> String -> MolSeq
- string2seq moleculeName seq
- | isProtein seq = (MolSeq Protein moleculeName seq)
- | otherwise = (MolSeq DNA moleculeName seq)
- where
- isProtein :: String -> Bool
- isProtein [] = False
- isProtein (h:t)
- | (h `elem` "ACGTacgt") = isProtein t
- | otherwise = True
- seqName :: MolSeq -> String
- seqName mol = (molSeqName mol)
- seqType :: MolSeq -> SequenceType
- seqName mol = (molSeqType mol)
- seqLength :: MolSeq -> Int
- seqLength mol = length (molSeqSequenceString mol)
- seqDistance :: MolSeq -> MolSeq -> Float
- seqDistance mol1 mol2
- | compatibleMolecules mol1 mol2 = calcMolDistance mol1 mol2
- | otherwise = error "'mol1' and 'mol2' are not of the same molecule type"
- compatibleMolecules :: MolSeq -> MolSeq -> Bool
- compatibleMolecules mol1 mol2 = (molSeqType mol1) = (molSeqType mol2)
- calcMolDistance :: MolSeq -> MolSeq -> Float
- calcMolDistance mol1 mol2
- | seqType mol1 == DNA = jukesCantor mol1 mol2
- | otherwise = poisson mol1 mol2
- jukesCantor :: MolSeq -> MolSeq -> Float
- jukesCantor mol1 mol2 = -(3/4)
Add Comment
Please, Sign In to add comment