module Bio.Sequence.AminoProperties where
import Prelude hiding (or)
import Bio.Sequence.SeqData
type AAProp = Amino -> Bool
oneOf = flip elem
or f g = \x -> f x || g x
aliphatic, aromatic, hydrophobic, polar, small, tiny, charged, negative, positive :: AAProp
aliphatic = oneOf [Ile,Leu,Val]
aromatic = oneOf [Phe,Tyr,Trp,His]
hydrophobic = aromatic `or` aliphatic `or` oneOf [Cys,Ala,Gly,Thr,Met,Lys]
polar = charged `or` oneOf [Asn,Ser,Thr,Tyr,Trp,Gln]
small = tiny `or` oneOf [Pro,Cys,Val,Thr,Asp,Asn]
tiny = oneOf [Ala,Gly,Ser]
charged = negative `or` positive
negative = oneOf [Asp,Glu]
positive = oneOf [Lys,His,Arg]
hydropathy :: Amino -> Double
hydropathy x = case x of
Ala -> 1.8
Arg -> 4.5
Asn -> 3.5
Asp -> 3.5
Cys -> 2.5
Gln -> 3.5
Glu -> 3.5
Gly -> 0.4
His -> 3.2
Ile -> 4.5
Leu -> 3.8
Lys -> 3.9
Met -> 1.9
Phe -> 2.8
Pro -> 1.6
Ser -> 0.8
Thr -> 0.7
Trp -> 0.9
Tyr -> 1.3
Val -> 4.2
_ -> 0
mass :: Amino -> Double
mass x = case x of
Gly -> 57.021464
Ala -> 71.037114
Ser -> 87.032029
Pro -> 97.052764
Val -> 99.068414
Thr -> 101.04768
Cys -> 103.00919
Asn -> 114.04293
Asp -> 115.02694
Leu -> 113.08406
Ile -> 113.08406
Gln -> 128.05858
Lys -> 128.09496
Glu -> 129.04259
Met -> 131.04048
His -> 137.05891
Phe -> 147.06841
Arg -> 156.10111
Tyr -> 163.06333
Trp -> 186.07931
_ -> 0
helixP, strandP :: Amino -> Double
helixP x = case x of
Ala -> 1.42
Cys -> 0.70
Asp -> 1.01
Glu -> 1.51
Phe -> 1.13
Gly -> 0.61
His -> 1.00
Ile -> 1.08
Lys -> 1.16
Leu -> 1.21
Met -> 1.45
Asn -> 0.67
Pro -> 0.57
Gln -> 1.11
Arg -> 0.98
Ser -> 0.77
Thr -> 0.83
Val -> 1.06
Trp -> 1.08
Tyr -> 0.69
_ -> 0
strandP x = case x of
Ala -> 0.83
Cys -> 1.19
Asp -> 0.54
Glu -> 0.37
Phe -> 1.38
Gly -> 0.75
His -> 0.87
Ile -> 1.60
Lys -> 0.74
Leu -> 1.30
Met -> 1.05
Asn -> 0.89
Pro -> 0.55
Gln -> 1.10
Arg -> 0.93
Ser -> 0.75
Thr -> 1.19
Val -> 1.70
Trp -> 1.37
Tyr -> 1.40
_ -> 0