-
Notifications
You must be signed in to change notification settings - Fork 2
/
Model.h
146 lines (135 loc) · 4.74 KB
/
Model.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
* DPPDiv version 1.0b source code (git: 9c0ac3d2258f89827cfe9ba2b5038f0f656b82c1)
* Copyright 2009-2011
* Tracy Heath(1,2,3) (NSF postdoctoral fellowship in biological informatics DBI-0805631)
* Mark Holder(1)
* John Huelsenbeck(2)
*
* (1) Department of Ecology and Evolutionary Biology, University of Kansas, Lawrence, KS 66045
* (2) Integrative Biology, University of California, Berkeley, CA 94720-3140
* (3) email: tracyh@berkeley.edu
*
* DPPDiv is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License (the file gpl.txt included with this
* distribution or http://www.gnu.org/licenses/gpl.txt for more
* details.
*
* Some of this code is from publicly available source by John Huelsenbeck
*/
#ifndef MODEL_H
#define MODEL_H
#include <string>
#include <vector>
#include "MbMatrix.h"
class Calibration;
class Alignment;
class Basefreq;
class Exchangeability;
class MbRandom;
class MbTransitionMatrix;
class Node;
class NodeRate;
class Parameter;
class Shape;
class Speciation;
class Tree;
class Treescale;
class Cphyperp;
class ExpCalib;
class Model {
enum TreeDirection
{
DOWN_TREE_DIR = 0,
LEFT_TREE_DIR = 1,
RIGHT_TREE_DIR = 2,
DIRTY_FLAG = 3
};
public:
Model(MbRandom *rp, Alignment *ap, std::string ts, double pm,
double ra, double rb, double hal, double hbe, bool ubl,
bool alnm, int offmv, bool rndNo, std::string clfn, int nodpr,
double bdr, double bda, double fxclkrt, bool roofix,
bool sfb, bool ehpc, bool dphpc, int dphpng, bool gamhp, int rmod,
bool fxmod);
~Model(void);
double lnLikelihood(void);
double getPriorMeanV(void) { return priorMeanN; }
Basefreq* getActiveBasefreq(void);
Tree* getActiveTree(void);
Treescale* getActiveTreeScale(void);
Exchangeability* getActiveExchangeability(void);
Shape* getActiveShape(void);
NodeRate* getActiveNodeRate(void);
Speciation* getActiveSpeciation(void);
Cphyperp* getActiveCphyperp(void);
ExpCalib* getActiveExpCalib(void);
Parameter* pickParmToUpdate(void);
void printTis(std::ostream &) const;
void setTiProb(void);
void setTiProb(Node *p, Shape *s, NodeRate *r);
void setNodeRateGrpIndxs(void);
void upDateRateMatrix(void);
void updateAccepted(void);
void updateRejected(void);
double safeExponentiation(double lnX);
void switchActiveParm(void) { (activeParm == 0 ? activeParm = 1 : activeParm = 0); }
seedType getStartingSeed1() { return startS1; }
seedType getStartingSeed2() { return startS2; }
void setRunUnderPrior(bool b) { runUnderPrior = b; }
void setLnLGood(bool b) { lnLGood = b; }
double getMyCurrLnL(void);
void setMyCurrLnl(double d) { myCurLnL = d; }
int getTreeTimePriorNum() { return treeTimePrior; }
double getRootNExpRate() { return rootNExpRate; }
bool getExponCalibHyperParm() { return exponCalibHyperParm; }
bool getExponDPMCalibHyperParm() { return exponDPMCalibHyperParm; }
void setUpdateProbabilities(bool initial);
private:
void initializeConditionalLikelihoods(void);
void initializeTransitionProbabilityMatrices(void);
double readCalibFile();
Calibration* getRootCalibration();
MbRandom *ranPtr;
Alignment *alignmentPtr;
int numGammaCats;
std::vector<Parameter *> parms[2];
double *cls;
double **clPtr[2];
MbTransitionMatrix *tiCalculator;
int activeParm;
std::vector<double> updateProb;
int numParms;
int numPatterns;
MbMatrix<double> **tis[2];
double priorMeanN;
seedType startS1, startS2;
bool runUnderPrior;
double fixedClockRate;
typedef double ** TransitionMat;
typedef TransitionMat * TransitionMatArray;
TransitionMatArray * tiMatArrays;
TreeDirection * tiMatFlags;
double myCurLnL;
bool lnLGood;
int turnedOffMove;
std::string calibfilen;
std::vector<Calibration*> calibrs;
bool fixRootHeight;
int treeTimePrior;
bool zeroNodeTimeMove;
double rHtY;
double rHtO;
double rootNExpRate;
bool exponCalibHyperParm;
bool exponDPMCalibHyperParm;
bool fixSomeModParams;
bool cpfix;
};
#endif