mirror of
http://43.156.76.180:8026/YuuMJ/EukPhylo.git
synced 2025-12-27 23:20:24 +08:00
64 lines
3.5 KiB
C++
64 lines
3.5 KiB
C++
// $Id: ssrvDistanceSeqs2Tree.h 962 2006-11-07 15:13:34Z privmane $
|
|
|
|
#ifndef ___SSRV_DISTANCE_SEQS2TREE
|
|
#define ___SSRV_DISTANCE_SEQS2TREE
|
|
|
|
#include "distanceBasedSeqs2Tree.h"
|
|
#include "tree.h"
|
|
|
|
/* class ssrvDistanceSeqs2Tree
|
|
A type of distance-based tree reconstruction method like the iterative
|
|
method commonAlphaDistanceSeqs2Tree, but using a model with SSRV
|
|
(Site-Specific Rate Variation, AKA covarion model). Compared to
|
|
commonAlphaDistanceSeqs2Tree, we change the distance method to use an
|
|
SSRV model, and in the optimizations we estimate ni in addition to
|
|
alpha.
|
|
*/
|
|
class ssrvDistanceSeqs2Tree : public iterativeDistanceSeqs2Tree {
|
|
public:
|
|
// Given likeDist is assumed to hold a gamma-distribution, SSRV stochasticProcess
|
|
ssrvDistanceSeqs2Tree(likeDist &distM, distances2Tree &dist2et, const Vdouble *weights = NULL,
|
|
const MDOUBLE epsilonLikelihoodImprovement = 0.001,
|
|
const MDOUBLE epsilonLikelihoodImprovement4paramOptimiz = 0.001,
|
|
const MDOUBLE epsilonLikelihoodImprovement4BBL = 0.001,
|
|
const int maxIterationsBBL = 50)
|
|
: iterativeDistanceSeqs2Tree(distM, dist2et, weights, epsilonLikelihoodImprovement, epsilonLikelihoodImprovement4paramOptimiz, epsilonLikelihoodImprovement4BBL, maxIterationsBBL) {}
|
|
virtual ~ssrvDistanceSeqs2Tree () {}
|
|
|
|
// Datastruct for handling side info for the SSRV model (used as return value)
|
|
struct alphaAndNu {
|
|
MDOUBLE alpha;
|
|
MDOUBLE nu;
|
|
alphaAndNu(){}
|
|
alphaAndNu(MDOUBLE setAlpha, MDOUBLE setNu) : alpha(setAlpha), nu(setNu) {}
|
|
};
|
|
|
|
// NOTE! This version calls ITERATIVE seqs2Tree because side info is not given by the user, so we have to generate and optimize it
|
|
virtual tree seqs2Tree(const sequenceContainer &sc, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
// NOTE! This version is a NON-ITERATIVE version that uses the side info supplied by the user
|
|
tree seqs2Tree(const sequenceContainer &sc, MDOUBLE alpha, MDOUBLE nu, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
// Does one bootstrap iteration
|
|
tree seqs2TreeBootstrap(const sequenceContainer &sc, const MDOUBLE alpha, MDOUBLE nu, const Vdouble *weights, const tree* constraintTreePtr=NULL);
|
|
// Explicitly ask for iterations
|
|
virtual tree seqs2TreeIterative(const sequenceContainer &sc, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL); // homogenous rates will be used for first iteration
|
|
tree seqs2TreeIterative(const sequenceContainer &sc, MDOUBLE initAlpha, MDOUBLE initNu, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
virtual tree seqs2TreeIterative(const sequenceContainer &sc, const tree &initTree, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
virtual tree seqs2TreeIterative(const sequenceContainer &sc, const tree &initTree, MDOUBLE initAlpha, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
tree seqs2TreeIterative(const sequenceContainer &sc, const tree &initTree, MDOUBLE initAlpha, MDOUBLE initNu, const Vdouble *weights=NULL, const tree* constraintTreePtr=NULL);
|
|
|
|
// handling side info
|
|
virtual MDOUBLE optimizeSideInfo(const sequenceContainer &sc, tree &et);
|
|
virtual MDOUBLE calcSideInfoGivenTreeAndAlpha(const sequenceContainer &sc, const tree &et, MDOUBLE alpha);
|
|
virtual void acceptSideInfo();
|
|
virtual void utilizeSideInfo();
|
|
virtual void printSideInfo(ostream& out) const;
|
|
void setSideInfo(const MDOUBLE alpha, MDOUBLE nu);
|
|
alphaAndNu getSideInfo() const;
|
|
|
|
protected:
|
|
MDOUBLE _nu;
|
|
MDOUBLE _newNu;
|
|
};
|
|
|
|
#endif
|