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
|
/*
Copyright (C) 2011 Tal Pupko TalP@tauex.tau.ac.il.
This program 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 for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ___SIMULATE_CHANGES__
#define ___SIMULATE_CHANGES__
#include "definitions.h"
#include "tree.h"
#include "stochasticProcess.h"
#include "alphabet.h"
#include "sequenceContainer.h"
#include <map>
#include <vector>
using namespace std;
/******************************************************************
This class simulates jumps (events) along a
given tree, with the aim of creating a dataset (seqeunceContainer)
in which we know the exact number of transitions along the tree
*******************************************************************/
class simulateChangesAlongTree {
public:
simulateChangesAlongTree(const tree& inTree, const stochasticProcess& sp, alphabet* pAlph);
virtual ~simulateChangesAlongTree();
sequenceContainer simulatePosition();
VVint getChangesForBranch(int nodeID);
int getNodeContent(int nodeId) {return _nodesContent[nodeId];}
void removeAllSequnces(){
_sc.removeAll();
};
private:
void init();
void simulateOnce(tree::nodeP curNode, MDOUBLE disFromNode, int previousContent, int whichSon = 0);
private:
tree _tree;
stochasticProcess _sp;
alphabet* _pAlph;
Vdouble _waitingTimeParams;//each entry is the lambda parameter of the exponential distribution modeling the waiting time for "getting out" of state i
//_jumpProbs[i][j] is the probability of jumping from state i to state j (given that a change has ocured).
VVdouble _jumpProbs;
VVVint _changesOccurred; // number of times changes from i to j occurred , for each branch
Vint _nodesContent; // the actual state at each node, retrieval according to node id
sequenceContainer _sc;
};
#endif
|