-- | Different types of energies and conversion between. -- -- TODO enthalpy -- TODO entropy module Biobase.Types.Energy where import Data.Aeson (FromJSON, ToJSON) import Data.Binary (Binary) import Data.Default import Data.Hashable import Data.Serialize (Serialize) import Data.Vector.Unboxed.Deriving import GHC.Generics import Biobase.Types.NumericalExtremes -- | Gibbs free energy change. -- -- For RNA structure, the change in energy from the unfolded structure to -- the given structure. -- -- In units of @kcal / mol@. -- -- TODO shall we phantom-type the actual units? newtype DeltaGibbs = DG { getDG :: Double } deriving (Eq,Ord,Num,Fractional,Read,Show,Generic) derivingUnbox "DeltaGibbs" [t| DeltaGibbs -> Double |] [| getDG |] [| DG |] instance Hashable DeltaGibbs instance Binary DeltaGibbs instance Serialize DeltaGibbs instance FromJSON DeltaGibbs instance ToJSON DeltaGibbs deriving instance NumericalExtremes DeltaGibbs deriving instance NumericalEpsilon DeltaGibbs instance Default DeltaGibbs where def = extremelyLarge {-# Inline def #-} -- | @round $ DeltaGibbs / 100@. newtype DeltaDekaGibbs = DekaG { getDekaG :: Int } deriving (Eq,Ord,Num,Read,Show,Generic) derivingUnbox "DeltaDekaGibbs" [t| DeltaDekaGibbs -> Int |] [| getDekaG |] [| DekaG |] instance Hashable DeltaDekaGibbs instance Binary DeltaDekaGibbs instance Serialize DeltaDekaGibbs instance FromJSON DeltaDekaGibbs instance ToJSON DeltaDekaGibbs deriving instance NumericalExtremes DeltaDekaGibbs instance Default DeltaDekaGibbs where def = extremelyLarge {-# Inline def #-}