elynx-markov 0.5.1.1 → 0.6.0.0
raw patch · 5 files changed
+131/−499 lines, 5 filesdep ~asyncdep ~attoparsecdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: async, attoparsec, base, bytestring, containers, elynx-seq, elynx-tools, hmatrix, hspec, integration, math-functions, mwc-random, primitive, statistics, vector
API changes (from Hackage documentation)
Files
- ChangeLog.md +10/−0
- README.md +27/−412
- elynx-markov.cabal +85/−80
- src/ELynx/Data/MarkovProcess/GammaRateHeterogeneity.hs +6/−5
- src/ELynx/Data/MarkovProcess/MixtureModel.hs +3/−2
ChangeLog.md view
@@ -5,6 +5,16 @@ ## Unreleased changes +## Version 0.6.0.0++- **elynx-tree:** remove parallel folds with layers (`parBranchFoldMapWithLayer`+ too special and slow).+- **elynx-tree:** fix various tree instances; add zip trees with appropriate+ instances.+- Remove `monad-logger` dependency and implement lighter alternative.+- Significant changes to the tool chain.++ ## Version 0.5.1.0 - **elynx-tree:** new functions `isValidPath`, `isLeaf`, `depth`; add conversion
README.md view
@@ -2,7 +2,7 @@ # The ELynx Suite -Version: 0.5.1.0.+Version: 0.6.0.0. Reproducible evolution made easy. <p align="center"><img src="https://travis-ci.org/dschrempf/elynx.svg?branch=master"/></p>@@ -39,7 +39,7 @@ # Installation -ELynx is written in [Haskell](https://www.haskell.org/) and can be installed with [Stack](https://docs.haskellstack.org/en/stable/README/).+ELynx is written in [Haskell](https://www.haskell.org/) and can be installed with [cabal-install](https://cabal.readthedocs.io/en/3.4/cabal-commands.html) or [Stack](https://docs.haskellstack.org/en/stable/README/). 1. Install Stack with your package manager, or directly from the web page.@@ -67,15 +67,15 @@ [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable. Then, they can be used directly. -# SLynx+# Get help -Handle evolutionary sequences.+For example: - stack exec slynx -- --help | head -n -16+ slynx --help - ELynx Suite version 0.5.1.0.+ ELynx Suite version 0.6.0.0. Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.+ Compiled on September 3, 2021, at 20:56 pm, UTC. Usage: slynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] [-f|--force] [--no-elynx-file] COMMAND@@ -84,7 +84,7 @@ Available options: -h,--help Show this help text -V,--version Show version- -v,--verbosity VALUE Be verbose; one of: Quiet Warning Info Debug+ -v,--verbosity VALUE Be verbose; one of: Quiet Warn Info Debug (default: Info) -o,--output-file-basename NAME Specify base name of output file@@ -112,107 +112,33 @@ - Protein (amino acids) - ProteinX (amino acids; including gaps) - ProteinS (amino acids; including gaps, and translation stops)---## Concatenate--Concatenate multi sequence alignments.-- stack exec slynx -- concatenate --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: slynx concatenate (-a|--alphabet NAME) INPUT-FILE- Concatenate sequences found in input files.- - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- -h,--help Show this help text---## Examine--Examine sequence with `slynx examine`.-- stack exec slynx -- examine --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: slynx examine (-a|--alphabet NAME) INPUT-FILE [--per-site]- Examine sequences. If data is a multi sequence alignment, additionally analyze columns.- - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- --per-site Report per site summary statistics- -h,--help Show this help text---## Filter--Filter sequences with `filer-rows`.-- stack exec slynx -- filter-rows --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: slynx filter-rows (-a|--alphabet NAME) INPUT-FILE [--longer-than LENGTH] - [--shorter-than LENGTH] [--standard-characters]- Filter rows (or sequences) found in input files.- - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- --longer-than LENGTH Only keep sequences longer than LENGTH- --shorter-than LENGTH Only keep sequences shorter than LENGTH- --standard-characters Only keep sequences containing at least one standard- (i.e., non-IUPAC) character- -h,--help Show this help text--Filter columns of multi sequence alignments with `filter-columns`.-- stack exec slynx -- filter-columns --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.+ - ProteinI (amino acids; including gaps, translation stops, and IUPAC codes)+ ELynx+ -----+ A Haskell library and tool set for computational biology. The goal of ELynx is+ reproducible research. Evolutionary sequences and phylogenetic trees can be+ read, viewed, modified and simulated. The command line with all arguments is+ logged consistently, and automatically. Data integrity is verified using SHA256+ sums so that validation of past analyses is possible without the need to+ recompute the result. - Usage: slynx filter-columns (-a|--alphabet NAME) INPUT-FILE - [--standard-chars DOUBLE]- Filter columns of multi sequence alignments.+ slynx Analyze, modify, and simulate evolutionary sequences.+ tlynx Analyze, modify, and simulate phylogenetic trees.+ elynx Validate and redo past analyses. - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- --standard-chars DOUBLE Keep columns with a proportion standard (non-IUPAC)- characters larger than DOUBLE in [0,1]- -h,--help Show this help text+ Get help for sub commands:+ slynx examine --help -## Simulate+## Sub command -Simulate sequences with `slynx simulate`.+The documentation of sub commands can be accessed separately: - stack exec slynx -- simulate --help+ slynx simulate --help - ELynx Suite version 0.5.1.0.+ ELynx Suite version 0.6.0.0. Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.+ Compiled on September 3, 2021, at 20:56 pm, UTC. Usage: slynx simulate (-t|--tree-file Name) [-s|--substitution-model MODEL] [-m|--mixture-model MODEL] [-e|--edm-file NAME] @@ -281,315 +207,4 @@ LG exchangeabilities with site profiles (Phylobayes) given in FILES. -m "EDM(LG-Custom)" -p FILES For special mixture models, mixture weights are optional.---## Sub-sample--Sub-sample columns from multi sequence alignments.-- stack exec slynx -- sub-sample --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: slynx sub-sample (-a|--alphabet NAME) INPUT-FILE- (-n|--number-of-sites INT)- (-m|--number-of-alignments INT) [-S|--seed [INT]]- Sub-sample columns from multi sequence alignments.- - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- -n,--number-of-sites INT Number of sites randomly drawn with replacement- -m,--number-of-alignments INT- Number of multi sequence alignments to be created- -S,--seed [INT] Seed for random number generator; list of 32 bit- integers with up to 256 elements (default: random)- -h,--help Show this help text- - Create a given number of multi sequence alignments, each of which contains a given number of random sites drawn from the original multi sequence alignment.---## Translate--Translate sequences.-- stack exec slynx -- translate --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: slynx translate (-a|--alphabet NAME) INPUT-FILE (-r|--reading-frame INT)- (-u|--universal-code CODE)- Translate from DNA to Protein or DNAX to ProteinX.- - Available options:- -h,--help Show this help text- -V,--version Show version- -a,--alphabet NAME Specify alphabet type NAME- INPUT-FILE Read sequences from INPUT-FILE- -r,--reading-frame INT Reading frame [0|1|2].- -u,--universal-code CODE universal code; one of: Standard,- VertebrateMitochondrial.- -h,--help Show this help text---# TLynx--Handle phylogenetic trees in Newick format.-- stack exec tlynx -- --help | head -n -16-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] - [-f|--force] [--no-elynx-file] COMMAND- Compare, examine, and simulate phylogenetic trees.- - Available options:- -h,--help Show this help text- -V,--version Show version- -v,--verbosity VALUE Be verbose; one of: Quiet Warning Info Debug- (default: Info)- -o,--output-file-basename NAME- Specify base name of output file- -f,--force Ignore previous analysis and overwrite existing- output files.- --no-elynx-file Do not write data required to reproduce an analysis.- - Available commands:- compare Compare two phylogenetic trees (compute distances and branch-wise differences).- connect Connect two phylogenetic trees in all ways (possibly honoring constraints).- distance Compute distances between many phylogenetic trees.- examine Compute summary statistics of phylogenetic trees.- shuffle Shuffle a phylogenetic tree (keep coalescent times, but shuffle topology and leaves).- simulate Simulate phylogenetic trees using a birth and death or coalescent process.- - - Available tree file formats:- - Newick Standard: Branch support values are stored in square brackets after branch lengths.- - Newick IqTree: Branch support values are stored as node names after the closing bracket of forests.- - Newick RevBayes: Key-value pairs is provided in square brackets after node names as well as branch lengths. XXX: Key value pairs are ignored at the moment.---## Compare--Compute distances between phylogenetic trees.-- stack exec tlynx -- compare --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx compare [-n|--normalize] [-b|--bipartitions] [-t|--intersect] - [-f|--newick-format FORMAT] NAMES- Compare two phylogenetic trees (compute distances and branch-wise differences).- - Available options:- -h,--help Show this help text- -V,--version Show version- -n,--normalize Normalize trees before comparison- -b,--bipartitions Print and plot common and missing bipartitions- -t,--intersect Compare intersections; i.e., before comparison, drop- leaves that are not present in the other tree- -f,--newick-format FORMAT- Newick tree format: Standard, IqTree, or RevBayes;- default: Standard; for detailed help, see 'tlynx- --help'- NAMES Tree files- -h,--help Show this help text---## Connect--Connect two phylogenetic tree in all ways (possibly honoring constraints).-- stack exec tlynx -- connect --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx connect [-f|--newick-format FORMAT] [-c|--contraints CONSTRAINTS]- TREE-FILE-A TREE-FILE-B- Connect two phylogenetic trees in all ways (possibly honoring constraints).- - Available options:- -h,--help Show this help text- -V,--version Show version- -f,--newick-format FORMAT- Newick tree format: Standard, IqTree, or RevBayes;- default: Standard; for detailed help, see 'tlynx- --help'- -c,--contraints CONSTRAINTS- File containing one or more Newick trees to be used- as constraints- TREE-FILE-A File containing the first Newick tree- TREE-FILE-B File containing the second Newick tree- -h,--help Show this help text---## Distancce--Compute distances between many phylogenetic trees.-- stack exec tlynx -- distance --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx distance (-d|--distance MEASURE) [-n|--normalize] [-t|--intersect] - [-s|--summary-statistics] - [-m|--master-tree-file MASTER-TREE-File] - [-f|--newick-format FORMAT] [INPUT-FILES]- Compute distances between many phylogenetic trees.- - Available options:- -h,--help Show this help text- -V,--version Show version- -d,--distance MEASURE Type of distance to calculate (available distance- measures are listed below)- -n,--normalize Normalize trees before distance calculation; only- affect distances depending on branch lengths- -t,--intersect Compare intersections; i.e., before comparison, drop- leaves that are not present in the other tree- -s,--summary-statistics Report summary statistics only- -m,--master-tree-file MASTER-TREE-File- Compare all trees to the tree in the master tree- file.- -f,--newick-format FORMAT- Newick tree format: Standard, IqTree, or RevBayes;- default: Standard; for detailed help, see 'tlynx- --help'- INPUT-FILES Read tree(s) from INPUT-FILES; if more files are- given, one tree is expected per file- -h,--help Show this help text- - Distance measures:- symmetric Symmetric distance (Robinson-Foulds distance).- incompatible-split[VAL] Incompatible split distance. Collapse branches with (normalized)- support less than 0.0<=VAL<=1.0 before distance calculation;- if, let's say, VAL>0.7, only well supported differences contribute- to the total distance.- branch-score Branch score distance.---## Examine--Compute summary statistics of phylogenetic trees.-- stack exec tlynx -- examine --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx examine INPUT-FILE [-f|--newick-format FORMAT]- Compute summary statistics of phylogenetic trees.- - Available options:- -h,--help Show this help text- -V,--version Show version- INPUT-FILE Read trees from INPUT-FILE- -f,--newick-format FORMAT- Newick tree format: Standard, IqTree, or RevBayes;- default: Standard; for detailed help, see 'tlynx- --help'- -h,--help Show this help text---## Shuffle--Shuffle a phylogenetic tree (keep coalescent times, but shuffle topology and-leaves).-- stack exec tlynx -- shuffle --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx shuffle [-f|--newick-format FORMAT] [-n|--replicates N] TREE-FILE - [-S|--seed [INT]]- Shuffle a phylogenetic tree (keep coalescent times, but shuffle topology and leaves).- - Available options:- -h,--help Show this help text- -V,--version Show version- -f,--newick-format FORMAT- Newick tree format: Standard, IqTree, or RevBayes;- default: Standard; for detailed help, see 'tlynx- --help'- -n,--replicates N Number of trees to generate- TREE-FILE File containing a Newick tree- -S,--seed [INT] Seed for random number generator; list of 32 bit- integers with up to 256 elements (default: random)- -h,--help Show this help text---## Simulate--Simulate phylogenetic trees using birth and death processes.-- stack exec tlynx -- simulate --help-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: tlynx simulate (-t|--nTrees INT) (-n|--nLeaves INT) PROCESS - [-u|--sub-sample DOUBLE] [-s|--summary-statistics] - [-S|--seed [INT]]- Simulate phylogenetic trees using a birth and death or coalescent process.- - Available options:- -h,--help Show this help text- -V,--version Show version- -t,--nTrees INT Number of trees- -n,--nLeaves INT Number of leaves per tree- -u,--sub-sample DOUBLE Perform sub-sampling; see below.- -s,--summary-statistics For each branch, print length and number of children- -S,--seed [INT] Seed for random number generator; list of 32 bit- integers with up to 256 elements (default: random)- -h,--help Show this help text- - Available processes:- birthdeath Birth and death process- coalescent Coalescent process- - See, for example, 'tlynx simulate birthdeath --help'.- Sub-sample with probability p:- 1. Simulate one big tree with n'=round(n/p), n'>=n, leaves;- 2. Randomly sample sub-trees with n leaves.- (With p=1.0, the same tree is reported over and over again.)---# ELynx--Validate and (optionally) redo past ELynx analyses.-- stack exec elynx -- --help | head -n -16-- ELynx Suite version 0.5.1.0.- Developed by Dominik Schrempf.- Compiled on June 12, 2021, at 14:54 pm, UTC.- - Usage: elynx COMMAND- Validate and redo past ELynx analyses- - Available options:- -h,--help Show this help text- -V,--version Show version- - Available commands:- validate Validate an ELynx analysis- redo Redo an ELynx analysis
elynx-markov.cabal view
@@ -1,19 +1,18 @@-cabal-version: 2.2-name: elynx-markov-version: 0.5.1.1-license: GPL-3.0-or-later-license-file: LICENSE-copyright: Dominik Schrempf (2021)-maintainer: dominik.schrempf@gmail.com-author: Dominik Schrempf-homepage: https://github.com/dschrempf/elynx#readme-bug-reports: https://github.com/dschrempf/elynx/issues-synopsis: Simulate molecular sequences along trees-description:- Examine, modify, and simulate molecular sequences in a reproducible way. Please see the README on GitHub at <https://github.com/dschrempf/elynx>.+cabal-version: 2.2+name: elynx-markov+version: 0.6.0.0+synopsis: Simulate molecular sequences along trees+description: Examine, modify, and simulate molecular sequences in a reproducible way. Please see the README on GitHub at <https://github.com/dschrempf/elynx>.+category: Bioinformatics+homepage: https://github.com/dschrempf/elynx#readme+bug-reports: https://github.com/dschrempf/elynx/issues+author: Dominik Schrempf+maintainer: dominik.schrempf@gmail.com+copyright: Dominik Schrempf (2021)+license: GPL-3.0-or-later+license-file: LICENSE+build-type: Simple -category: Bioinformatics-build-type: Simple extra-source-files: README.md ChangeLog.md@@ -23,74 +22,80 @@ data/HSSPSingle.siteprofiles source-repository head- type: git- location: https://github.com/dschrempf/elynx+ type: git+ location: https://github.com/dschrempf/elynx library- exposed-modules:- ELynx.Data.MarkovProcess.AminoAcid- ELynx.Data.MarkovProcess.CXXModels- ELynx.Data.MarkovProcess.CXXModelsData- ELynx.Data.MarkovProcess.GammaRateHeterogeneity- ELynx.Data.MarkovProcess.MixtureModel- ELynx.Data.MarkovProcess.Nucleotide- ELynx.Data.MarkovProcess.PhyloModel- ELynx.Data.MarkovProcess.RateMatrix- ELynx.Data.MarkovProcess.SubstitutionModel- ELynx.Import.MarkovProcess.EDMModelPhylobayes- ELynx.Import.MarkovProcess.SiteprofilesPhylobayes- ELynx.Simulate.MarkovProcess- ELynx.Simulate.MarkovProcessAlongTree-- hs-source-dirs: src- other-modules: Paths_elynx_markov- autogen-modules: Paths_elynx_markov- default-language: Haskell2010- ghc-options: -Wall -Wunused-packages- build-depends:- async >=2.2.3,- attoparsec >=0.13.2.5,- base >=4.7 && <5,- bytestring >=0.10.12.0,- containers >=0.6.2.1,- elynx-seq >=0.5.1.1,- hmatrix >=0.20.2,- integration >=0.2.1,- math-functions >=0.3.4.2,- mwc-random >=0.15.0.1,- primitive >=0.7.1.0,- statistics >=0.15.2.0,- vector >=0.12.3.0+ exposed-modules:+ ELynx.Data.MarkovProcess.AminoAcid+ ELynx.Data.MarkovProcess.CXXModels+ ELynx.Data.MarkovProcess.CXXModelsData+ ELynx.Data.MarkovProcess.GammaRateHeterogeneity+ ELynx.Data.MarkovProcess.MixtureModel+ ELynx.Data.MarkovProcess.Nucleotide+ ELynx.Data.MarkovProcess.PhyloModel+ ELynx.Data.MarkovProcess.RateMatrix+ ELynx.Data.MarkovProcess.SubstitutionModel+ ELynx.Import.MarkovProcess.EDMModelPhylobayes+ ELynx.Import.MarkovProcess.SiteprofilesPhylobayes+ ELynx.Simulate.MarkovProcess+ ELynx.Simulate.MarkovProcessAlongTree+ other-modules:+ Paths_elynx_markov+ autogen-modules:+ Paths_elynx_markov+ hs-source-dirs: src+ ghc-options: -Wall -Wunused-packages+ build-depends:+ async+ , attoparsec+ , base >=4.7 && <5+ , bytestring+ , containers+ , elynx-seq+ , hmatrix+ , integration+ , math-functions+ , mwc-random+ , primitive+ , statistics+ , vector+ default-language: Haskell2010 test-suite markov-test- type: exitcode-stdio-1.0- main-is: Spec.hs- hs-source-dirs: test- other-modules:- ELynx.Data.MarkovProcess.AminoAcidSpec- ELynx.Data.MarkovProcess.NucleotideSpec- ELynx.Data.MarkovProcess.RateMatrixSpec- ELynx.Import.MarkovProcess.EDMModelPhylobayesSpec- ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec- ELynx.Simulate.MarkovProcessAlongTreeSpec- Paths_elynx_markov-- default-language: Haskell2010- ghc-options: -Wall -Wunused-packages- build-depends:- base >=4.7 && <5,- containers >=0.6.2.1,- elynx-markov -any,- elynx-tools >=0.5.1.1,- hmatrix >=0.20.2,- hspec >=2.7.10,- mwc-random >=0.15.0.1,- vector >=0.12.3.0+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ other-modules:+ ELynx.Data.MarkovProcess.AminoAcidSpec+ ELynx.Data.MarkovProcess.NucleotideSpec+ ELynx.Data.MarkovProcess.RateMatrixSpec+ ELynx.Import.MarkovProcess.EDMModelPhylobayesSpec+ ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec+ ELynx.Simulate.MarkovProcessAlongTreeSpec+ Paths_elynx_markov+ autogen-modules:+ Paths_elynx_markov+ hs-source-dirs: test+ ghc-options: -Wall -Wunused-packages+ build-depends:+ base >=4.7 && <5+ , containers+ , elynx-markov+ , elynx-tools+ , hmatrix+ , hspec+ , mwc-random+ , vector+ default-language: Haskell2010 benchmark markov-bench- type: exitcode-stdio-1.0- main-is: Bench.hs- hs-source-dirs: bench- default-language: Haskell2010- ghc-options: -Wall -Wunused-packages- build-depends: base >=4.14.1.0+ type: exitcode-stdio-1.0+ main-is: Bench.hs+ -- other-modules:+ -- autogen-modules:+ -- ghc-options:+ hs-source-dirs: bench+ ghc-options: -Wall -Wunused-packages+ build-depends:+ base+ default-language: Haskell2010
src/ELynx/Data/MarkovProcess/GammaRateHeterogeneity.hs view
@@ -20,8 +20,8 @@ ) where -import qualified Data.Vector as V import qualified Data.ByteString.Lazy.Char8 as BL+import qualified Data.Vector as V import qualified ELynx.Data.MarkovProcess.MixtureModel as M import qualified ELynx.Data.MarkovProcess.PhyloModel as P import qualified ELynx.Data.MarkovProcess.SubstitutionModel as S@@ -100,10 +100,11 @@ -- probability mass is 1/n. meanFunc x = fromIntegral n * x * density gamma x -- Only calculate the first (n-1) categories with normal integration.- means = V.fromList- [ integralAToB meanFunc (quantiles !! i) (quantiles !! (i + 1))- | i <- [0 .. n - 2]- ]+ means =+ V.fromList+ [ integralAToB meanFunc (quantiles !! i) (quantiles !! (i + 1))+ | i <- [0 .. n - 2]+ ] -- The last category has to be calculated with an improper integration. lastMean = integralAToInf meanFunc (quantiles !! (n - 1))
src/ELynx/Data/MarkovProcess/MixtureModel.hs view
@@ -74,8 +74,9 @@ where comps = V.zipWith Component ws sms alphs = V.map S.alphabet sms- allEqual xs | V.null xs = True- | otherwise = V.all (== V.head xs) xs+ allEqual xs+ | V.null xs = True+ | otherwise = V.all (== V.head xs) xs -- | Concatenate mixture models. concatenate :: S.Name -> V.Vector MixtureModel -> MixtureModel