{- | 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)