module Biobase.Vienna where
import Data.Map (Map,empty)
import Data.Ix.Tuple
import Data.PrimitiveArray.Ix
import Data.PrimitiveArray
import Biobase.RNA
import Biobase.Turner.Tables
import Biobase.Constants
type ViennaEnergySet = (Temperature, ViennaTables, ViennaTables)
type ViennaTables = Turner2004 ViennaPair Nucleotide Int
type Temperature = Double
emptyTables :: ViennaTables
emptyTables = Turner2004
--stack
{ stack = emptyIV
--dangle
, dangle3 = emptyIV
, dangle5 = emptyIV
--hairpin
, hairpinL = emptyV
, hairpinMM = emptyIV
, hairpinLookup = empty
--eInf
--eInf
--eInf
--eInf
--bulge
, bulgeL = emptyV
--eInf
--internal
, iloop1x1 = emptyIV
, iloop1x2 = emptyIV
, iloop2x2 = emptyIV
, iloopMM = emptyIV
, iloop2x3MM = emptyIV
, iloop1xnMM = emptyIV
, iloopL = emptyV
--multibranch
, multiMM = emptyIV
, ninio = eInf
, maxNinio = eInf
, multiOffset = eInf
, multiNuc = eInf
, multiHelix = eInf
--eInf
--eInf
--exterior
, extMM = emptyIV
--emptyIV
--emptyIV
--emptyIV
, largeLoop = fInf
, termAU = eInf
, intermolecularInit = eInf
}
emptyIV = fromAssocs minBound maxBound eInf []
emptyV = fromAssocs 0 30 eInf []