packages feed

elynx-markov-0.2.1: src/ELynx/Data/MarkovProcess/PhyloModel.hs

{- |
Module      :  ELynx.Data.MarkovProcess.PhyloModel
Description :  Phylogenetic model
Copyright   :  (c) Dominik Schrempf 2020
License     :  GPL-3.0-or-later

Maintainer  :  dominik.schrempf@gmail.com
Stability   :  unstable
Portability :  portable

Creation date: Fri Feb  1 12:43:06 2019.

A phylogenetic model is a complete description of the evolutionary process. At
the moment, it is either a mixture model or a plain substitution model, but more
complicated models may be added in the future.

To be imported qualified.

-}

module ELynx.Data.MarkovProcess.PhyloModel
  ( PhyloModel(..)
  , getAlphabet
  , summarize
  )
where

import qualified Data.ByteString.Lazy.Char8    as L

import           ELynx.Data.Alphabet.Alphabet

import qualified ELynx.Data.MarkovProcess.MixtureModel
                                               as M
import qualified ELynx.Data.MarkovProcess.SubstitutionModel
                                               as S

-- | A phylogenetic model is a mixture model or a substitution model. More
-- complicated models may be added.
data PhyloModel = MixtureModel M.MixtureModel | SubstitutionModel S.SubstitutionModel
  deriving (Show, Read)

-- | Extract code from phylogenetic model.
getAlphabet :: PhyloModel -> Alphabet
getAlphabet (MixtureModel      mm) = M.getAlphabet mm
getAlphabet (SubstitutionModel sm) = S.alphabet sm

-- | Summarize a phylogenetic model; lines to be printed to screen or log.
summarize :: PhyloModel -> [L.ByteString]
summarize (MixtureModel      mm) = M.summarize mm
summarize (SubstitutionModel sm) = S.summarize sm