mirror of
http://43.156.76.180:8026/YuuMJ/EukPhylo.git
synced 2025-12-27 21:10:24 +08:00
128 lines
4.0 KiB
C++
128 lines
4.0 KiB
C++
#ifndef ___COMPUTE_JUMPS__
|
|
#define ___COMPUTE_JUMPS__
|
|
|
|
#include "definitions.h"
|
|
#include "tree.h"
|
|
#include "stochasticProcess.h"
|
|
#include "alphabet.h"
|
|
#include "someUtil.h"
|
|
#include <math.h>
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
using namespace std;
|
|
|
|
/******************************************************************
|
|
This class compute jumps (events) by Suchard equations along differing branch lengths (according to a
|
|
given tree), with the aim of giving the expectation of the number of jumps
|
|
from state a to state b given that the terminal states at the end of the branch are
|
|
x and y.
|
|
*******************************************************************/
|
|
|
|
class computeJumps {
|
|
public:
|
|
computeJumps(const MDOUBLE Lambda1, const MDOUBLE Lambda2, const MDOUBLE r=1, const int maxNumOfChangesPerBranchSum=5);
|
|
virtual ~computeJumps();
|
|
|
|
/******************************************************************
|
|
Foreach computeJumps, for gFunc objects are needed:
|
|
inner class gFunc, if startState=0, Lambda1=gain, Lambda2= loss
|
|
if startState=1, Lambda1=loss, Lambda2= gain.
|
|
For both with use +r and -r versions
|
|
*******************************************************************/
|
|
class gFunc {
|
|
public:
|
|
gFunc(const MDOUBLE Lambda1, const MDOUBLE Lambda2 , const MDOUBLE r);
|
|
gFunc(){};
|
|
~gFunc(){};
|
|
|
|
MDOUBLE gFunc_dr(MDOUBLE BranchLength);
|
|
MDOUBLE g1Func_dr(MDOUBLE BranchLength);
|
|
MDOUBLE g2Func_dr(MDOUBLE BranchLength);
|
|
MDOUBLE g1Exp(MDOUBLE BranchLength);
|
|
MDOUBLE g2Exp(MDOUBLE BranchLength);
|
|
MDOUBLE gFunc_(MDOUBLE BranchLength);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
MDOUBLE _A_(int k, int i);
|
|
MDOUBLE _B_(int k, int i);
|
|
MDOUBLE _C_(int k, int i);
|
|
MDOUBLE _D_(int k, int i);
|
|
// prob for (2k-1) transitions (gains and losses), given start=0
|
|
MDOUBLE qFunc_2k_1 (MDOUBLE BranchLength, int k=1);
|
|
// prob for (2k) transitions (gains and losses), given start=0
|
|
MDOUBLE qFunc_2k (MDOUBLE BranchLength, int k=0);
|
|
|
|
private:
|
|
MDOUBLE _r;
|
|
MDOUBLE _Lambda1;
|
|
MDOUBLE _Lambda2;
|
|
|
|
MDOUBLE _Alpha1;
|
|
MDOUBLE _Alpha2;
|
|
MDOUBLE _Alpha1_dr;
|
|
MDOUBLE _Alpha2_dr;
|
|
|
|
MDOUBLE _Alpha1_2;
|
|
MDOUBLE _Alpha1_2_dr;
|
|
|
|
MDOUBLE _delta;
|
|
MDOUBLE _delta_dr;
|
|
|
|
MDOUBLE _g1Part;
|
|
MDOUBLE _g2Part;
|
|
MDOUBLE _g1Part_dr;
|
|
MDOUBLE _g2Part_dr;
|
|
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
MDOUBLE getExpectation(const MDOUBLE BranchLength, int terminalStart, int terminalEnd, int fromId, int toId);
|
|
MDOUBLE getTotalExpectation(const MDOUBLE BranchLength, int terminalStart, int terminalEnd);
|
|
|
|
MDOUBLE gainExp(MDOUBLE BranchLength,MDOUBLE prob01,MDOUBLE prob11);
|
|
|
|
MDOUBLE gainExpGiven01(MDOUBLE BranchLength);
|
|
MDOUBLE gainExpGiven00(MDOUBLE BranchLength);
|
|
MDOUBLE gainExpGiven11(MDOUBLE BranchLength);
|
|
MDOUBLE gainExpGiven10(MDOUBLE BranchLength);
|
|
|
|
MDOUBLE lossExpGiven01(MDOUBLE BranchLength);
|
|
MDOUBLE lossExpGiven00(MDOUBLE BranchLength);
|
|
MDOUBLE lossExpGiven11(MDOUBLE BranchLength);
|
|
MDOUBLE lossExpGiven10(MDOUBLE BranchLength);
|
|
|
|
MDOUBLE getProb(const MDOUBLE BranchLength, int terminalStart, int terminalEnd, int fromId, int toId);
|
|
MDOUBLE gainProbGiven01(MDOUBLE BranchLength);
|
|
MDOUBLE gainProbGiven00(MDOUBLE BranchLength);
|
|
MDOUBLE gainProbGiven11(MDOUBLE BranchLength);
|
|
MDOUBLE gainProbGiven10(MDOUBLE BranchLength);
|
|
|
|
MDOUBLE lossProbGiven01(MDOUBLE BranchLength);
|
|
MDOUBLE lossProbGiven00(MDOUBLE BranchLength);
|
|
MDOUBLE lossProbGiven11(MDOUBLE BranchLength);
|
|
MDOUBLE lossProbGiven10(MDOUBLE BranchLength);
|
|
|
|
|
|
MDOUBLE gFunc_dr(MDOUBLE BranchLength, int startState);
|
|
|
|
private:
|
|
MDOUBLE m01(MDOUBLE BranchLength);
|
|
MDOUBLE m00(MDOUBLE BranchLength);
|
|
MDOUBLE m11(MDOUBLE BranchLength);
|
|
MDOUBLE m10(MDOUBLE BranchLength);
|
|
|
|
MDOUBLE Pij_t(const int i,const int j, const MDOUBLE d);
|
|
|
|
MDOUBLE _Lambda1;
|
|
MDOUBLE _Lambda2;
|
|
int _maxNumOfChangesPerBranchSum;
|
|
|
|
gFunc _gFuncStart0;
|
|
gFunc _gFuncStart0MinusR;
|
|
gFunc _gFuncStart1;
|
|
gFunc _gFuncStart1MinusR;
|
|
};
|
|
|
|
#endif
|