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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
//
// rateheterotachy.hpp
// iqtree
//
// Created by Minh Bui on 11/8/16.
//
//
#ifndef rateheterotachy_hpp
#define rateheterotachy_hpp
#include "rateheterogeneity.h"
class PhyloTree;
/**
rate-heterotachy model, allowing for mixed branch lengths
*/
class RateHeterotachy: virtual public RateHeterogeneity {
friend class ModelFactoryMixlen;
public:
/**
constructor
@param ncat number of rate categories
@param sorted_rates TRUE to sort the rate in increasing order
@param tree associated phylogenetic tree
*/
RateHeterotachy(int ncat, string params, PhyloTree *tree);
/**
destructor
*/
virtual ~RateHeterotachy();
/**
@return TRUE if this is a heterotachy model, default: FALSE
*/
virtual bool isHeterotachy() { return true; }
/**
start structure for checkpointing
*/
virtual void startCheckpoint();
/**
save object into the checkpoint
*/
virtual void saveCheckpoint();
/**
restore object from the checkpoint
*/
virtual void restoreCheckpoint();
/**
* @return model name with parameters in form of e.g. GTR{a,b,c,d,e,f}
*/
virtual string getNameParams();
/**
fix parameters, so that no optimization done
@param mode some input mode
*/
virtual int getFixParams() { return fix_params; }
/**
fix parameters, so that no optimization done
@param mode some input mode
*/
virtual void setFixParams(int mode) { fix_params = mode; }
/**
return the number of dimensions
*/
virtual int getNDim();
/**
@return the number of rate categories
*/
virtual int getNRate() { return ncategory; }
/**
get the number of rate categories for site-specific category model
@return the number of rate categories
*/
virtual int getNDiscreteRate() { return ncategory; }
/**
@param category category ID from 0 to #category-1
@return the rate of the specified category
*/
virtual double getRate(int category) {
return 1.0;
}
/**
get the proportion of sites under a specified category.
@param category category ID from 0 to #category-1
@return the proportion of the specified category
*/
virtual double getProp(int category) { return prop[category]; }
/**
set the proportion of a specified category.
@param category category ID from 0 to #category-1
@return the proportion of the specified category
*/
virtual void setProp(int category, double value) { prop[category] = value; }
/**
set number of optimization steps
@param opt_steps number of optimization steps
*/
virtual void setOptimizeSteps(int optimize_steps) { this->optimize_steps = optimize_steps; }
/**
optimize parameters. Default is to optimize gamma shape
@return the best likelihood
*/
virtual double optimizeParameters(double gradient_epsilon);
/**
optimize rate parameters using EM algorithm
@return log-likelihood of optimized parameters
*/
double optimizeWithEM();
/**
write information
@param out output stream
*/
virtual void writeInfo(ostream &out);
/**
write parameters, used with modeltest
@param out output stream
*/
virtual void writeParameters(ostream &out);
/**
set number of rate categories
@param ncat #categories
*/
virtual void setNCategory(int ncat);
protected:
/**
number of rate categories
*/
int ncategory;
/**
* proportion of sites for each rate categories
*/
double *prop;
/** TRUE to fix parameters */
int fix_params;
/** number of optimization steps, default: ncategory*2 */
int optimize_steps;
};
#endif /* rateheterotachy_hpp */
|