module BioInf.Params where
import Data.PrimitiveArray
import Data.PrimitiveArray.Ix
import Biobase.Primary
import Biobase.Secondary
data Params = Params
{ hairpinLength :: PaLength
, hairpinClose :: PaExtPairNN
, stem :: Pa2ExtPairs
, stemTriplet :: Pa2ExtPairs
, interiorLength :: PaLength
, interiorAsym :: PaLength
, interiorClose :: PaExtPairNN
, bulgeLength :: PaLength
, bulgeTriplet :: Pa2ExtPairs
, bulgeClose :: PaExtPair
, mbClose :: PaExtPairNN
, multiBranched :: Double
, multiHelix :: Double
, multiUnpaired :: Double
, pairDistance :: PaDistance
, interMolInit :: Double
} deriving (Read,Show)
maxLength = 1000 :: Int
maxDistance = 1000 :: Int
minExtPair = ((nN,nN),(cis,wc,wc))
maxExtPair = ((nT,nT),(trans,hoogsteen,hoogsteen))
min2ExtPairs = (minExtPair,minExtPair)
max2ExtPairs = (maxExtPair,maxExtPair)
minExtPairNN = (minExtPair,nN,nN)
maxExtPairNN = (maxExtPair,nT,nT)
minTriplet = min2ExtPairs
maxTriplet = max2ExtPairs
zeroParams = Params
{ hairpinLength = zeroLength
, hairpinClose = zeroExtPairNN
, stem = zero2ExtPairs
, stemTriplet = zeroTriplet
, interiorLength = zeroLength
, interiorAsym = zeroLength
, interiorClose = zeroExtPairNN
, bulgeLength = zeroLength
, bulgeTriplet = zeroTriplet
, bulgeClose = zeroExtPair
, mbClose = zeroExtPairNN
, multiBranched = 0
, multiHelix = 0
, multiUnpaired = 0
, pairDistance = zeroDistance
, interMolInit = 0
}
zeroLength = fromAssocs 0 maxLength 0 []
zeroDistance = fromAssocs 0 maxDistance 0 []
zeroExtPair = fromAssocs minExtPair maxExtPair 0 []
zero2ExtPairs = fromAssocs min2ExtPairs max2ExtPairs 0 []
zeroExtPairNN = fromAssocs minExtPairNN maxExtPairNN 0 []
zeroTriplet = fromAssocs minTriplet maxTriplet 0 []
type PaLength = PrimArray Int Double
type PaDistance = PrimArray Int Double
type PaExtPair = PrimArray ExtPair Double
type Pa2ExtPairs = PrimArray (ExtPair,ExtPair) Double
type PaExtPairNN = PrimArray (ExtPair,Nuc,Nuc) Double