00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00028 #ifndef SEQPP_MARKOV_H
00029 #define SEQPP_MARKOV_H
00030
00031 #include <seqpp/PhasedMarkov.h>
00032 #include <seqpp/arnoldi.h>
00033
00043 class Markov : public PhasedMarkov
00044 {
00045 public :
00046
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 Markov( const char * ConfFile,
00064 bool calc_rank = false );
00066
00070 Markov( const SequenceSet & seqset,
00071 bool calc_rank = false );
00073
00077 Markov( const Sequence & seq,
00078 bool calc_rank = false );
00079
00081 Markov( const Markov & );
00082
00084 Markov();
00085
00087
00092 Markov( short size, short order):PhasedMarkov(size,order,1)
00093 {
00094 _Pi=_Pis[0];_Mu=NULL;_PowPi=NULL;};
00095
00097
00102 Markov(const Markov &M1, const Markov &M2,const float p);
00103
00105
00123 Markov( const gsl_rng * r,
00124 short size, short order,
00125 bool calc_rank = false)
00126 : PhasedMarkov( r, size, order, 1, calc_rank ){
00127 _Pi=_Pis[0];_Mu=NULL;_PowPi=NULL;
00128 };
00129
00131
00137 Markov( unsigned long * count,
00138 short size, short order,
00139 bool calc_rank = false );
00140
00142 virtual Markov::~Markov();
00143
00144
00146
00152 template <class TSeq>
00153 void estimate( const TSeq & tseq,
00154 unsigned long beg, unsigned long end,
00155 bool calc_rank ) {
00156 this->PhasedMarkov::estimate( tseq, 1,0, beg, end, calc_rank );
00157 }
00158
00159
00161 const double * markov_matrix() const{
00162 return PhasedMarkov::markov_matrix(0);
00163 }
00164
00166
00185 void draw_markov_matrix(const gsl_rng * r){
00186 PhasedMarkov::draw_markov_matrices(r);
00187 }
00188
00190 void free_markov_matrix(){
00191 PhasedMarkov::free_markov_matrices();
00192 }
00194
00195
00196
00197 void compute_stat_law( bool force ){
00198 PhasedMarkov::compute_stat_laws( force );
00199 _Mu = _Mus[0];
00200 }
00202 void free_stat_law(){
00203 PhasedMarkov::free_stat_laws();
00204 _Mu = NULL;
00205 }
00207 const double * stat_law() const{
00208 return PhasedMarkov::stat_law(0);
00209 }
00210
00212 virtual int compute_rank();
00213
00215 void compute_power();
00216
00218 int free_power();
00219
00221
00227
00229
00234
00235
00237
00243 double proba_step( long w1, long w2, int step ){
00244 compute_rank();
00245 compute_power();
00246 if (step<=_rank)
00247 return(_PowPi[step-1][w1][w2]);
00248 else
00249 return(_Mu[w2]);
00250 }
00251
00252
00254 bool isPi() const { return(_Pi != NULL);};
00256 bool isPow() const { return(_PowPi != NULL);};
00258 bool isMu() const { return(_Mu != NULL);};
00259
00261
00264 double & operator() (int i){
00265 return(_Pi[i]);
00266 }
00268
00271 double Mu(int i) const {
00272 return(_Mu[i]);
00273 }
00274
00275 protected :
00276
00278 double *_Pi;
00279
00281 double *_Mu;
00282
00284 double ***_PowPi;
00285 };
00286 #endif
00287