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 );
00065
00067
00072 Markov( const SequenceSet & seqset,
00073 bool calc_rank = false,
00074 const string& prior_alpha_file = string() );
00075
00077
00082 Markov( const Sequence & seq,
00083 bool calc_rank = false,
00084 const string& prior_alpha_file = string() );
00085
00087 Markov( const Markov & );
00088
00090 Markov();
00091
00093
00100 Markov( short size, short order, bool alloc=true,
00101 const string& prior_alpha_file = string() ):PhasedMarkov(size,order,1,alloc, prior_alpha_file)
00102 {
00103 if (alloc){
00104 _Pi=_Pis[0];_container=_containers[0];
00105 }
00106 else{
00107 _Pi = NULL; _container=NULL;
00108 }
00109 _Mu=NULL;_PowPi=NULL;
00110 }
00111
00113
00118 Markov(const Markov &M1, const Markov &M2,const float p);
00119
00121
00139 Markov( const gsl_rng * r,
00140 short size, short order,
00141 bool calc_rank = false)
00142 : PhasedMarkov( r, size, order, 1, calc_rank ){
00143 _Pi=_Pis[0];_container=_containers[0];_Mu=NULL;_PowPi=NULL;
00144 };
00145
00147
00154 Markov( unsigned long * count,
00155 short size, short order,
00156 const string& prior_alpha_file = string(),
00157 bool calc_rank = false );
00158
00160 virtual ~Markov();
00161
00162
00164
00170 template <class TSeq>
00171 void estimate( const TSeq & tseq,
00172 unsigned long beg, unsigned long end,
00173 bool calc_rank ) {
00174 this->PhasedMarkov::estimate( tseq, 1,0, beg, end, calc_rank );
00175 }
00176
00178
00183 void estimate( unsigned long * count, bool decal_required, bool calc_rank= false ){
00184 this->PhasedMarkov::estimate( &count, decal_required, calc_rank );
00185 }
00186
00188
00192 void estimate( const string& count_file, bool calc_rank= false )
00193 {
00194 this->PhasedMarkov::estimate( count_file, calc_rank );
00195 }
00196
00197
00198
00200 const double * markov_matrix() const{
00201 return PhasedMarkov::markov_matrix(0);
00202 }
00203
00205
00224 void draw_markov_matrix(const gsl_rng * r){
00225 PhasedMarkov::draw_markov_matrices(r);
00226 }
00227
00229 void free_markov_matrix(){
00230 PhasedMarkov::free_markov_matrices();
00231 }
00232
00234
00235
00236
00237 void compute_stat_law( bool force=false ){
00238 PhasedMarkov::compute_stat_laws( force );
00239 _Mu = _Mus[0];
00240 }
00242 void free_stat_law(){
00243 PhasedMarkov::free_stat_laws();
00244 _Mu = NULL;
00245 }
00247 const double * stat_law() const{
00248 return PhasedMarkov::stat_law(0);
00249 }
00250
00252 virtual int compute_rank();
00253
00255 void compute_power();
00256
00258 int free_power();
00259
00261
00267
00269
00274
00275
00277
00283 double proba_step( long w1, long w2, int step ){
00284 compute_rank();
00285 compute_power();
00286 if (step<=_rank)
00287 return(_PowPi[step-1][w1][w2]);
00288 else
00289 return(_Mu[w2]);
00290 }
00291
00292
00294 bool isPi() const { return(_Pi != NULL);};
00296 bool isPow() const { return(_PowPi != NULL);};
00298 bool isMu() const { return(_Mu != NULL);};
00299
00301
00304 double & operator() (int index){
00305 return(_Pi[index]);
00306 }
00308
00311 double Mu(int index) const {
00312 return(_Mu[index]);
00313 }
00314
00315 protected :
00316
00318 double *_Pi;
00320 double *_container;
00321
00323 double *_Mu;
00324
00326 double ***_PowPi;
00327 };
00328 #endif
00329