elynx-seq-0.0.1: src/ELynx/Data/MarkovProcess/EDMModel.hs
{- |
Module : ELynx.Data.MarkovProcess.EDMModel
Description : Empiricial distribution mixture models
Copyright : (c) Dominik Schrempf 2019
License : GPL-3
Maintainer : dominik.schrempf@gmail.com
Stability : unstable
Portability : portable
Creation date: Tue Mar 19 13:25:55 2019.
-}
module ELynx.Data.MarkovProcess.EDMModel
(
EDMComponent
, edmModel
) where
import qualified Data.Vector.Storable as V
import ELynx.Data.MarkovProcess.MixtureModel
import ELynx.Data.MarkovProcess.RateMatrix
import ELynx.Data.MarkovProcess.SubstitutionModel
-- | An empirical mixture model component has a weight and a stationary
-- distribution.
type EDMComponent = (Weight, V.Vector Double)
-- | Create an EDM model from components and a substitution module construction
-- manual from stationary distributions.
edmModel :: [EDMComponent] -> (StationaryDistribution -> SubstitutionModel)
-> MixtureModel
edmModel cs f =
MixtureModel n [ Component w (f d)
| (w, d) <- cs ]
where n = "EDM" ++ show (length cs)