00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00028 #ifndef SEQPP_PHASEDVLMARKOV_H
00029 #define SEQPP_PHASEDVLMARKOV_H
00030
00031 #include <seqpp/PhasedMarkov.h>
00032 #include <seqpp/vlm_tree.h>
00033
00034
00048 class PhasedVLMarkov : public PhasedMarkov
00049 {
00050 protected :
00052 vlm_tree * _vlmtree;
00053
00054 public:
00056
00063 template <class TSeq>
00064 PhasedVLMarkov( const TSeq & tseq,
00065 vector<double> & init, double cutoff,
00066 short phase, short initial_phase = 0 )
00067 : PhasedMarkov( tseq.tell_alphabet_size(), tseq.tell_order(), phase )
00068 {
00069 _vlmtree = new vlm_tree( tseq.get_coder(),
00070 _size,
00071 _order,
00072 init );
00073 tseq.count_p_occurencies( phase, initial_phase );
00074 _nb_param = 0;
00075 for (int i=0; i<phase; i++){
00076 _vlmtree->estimate_context( tseq.get_count(i),
00077 cutoff );
00078 _vlmtree->tree_to_matrix( _Pis[i] );
00079 _nb_param += _vlmtree->nb_leaves() * (_size-1);
00080 }
00081 delete _vlmtree;
00082 }
00083
00085
00091 template <class TSeq>
00092 PhasedVLMarkov( const TSeq & tseq,
00093 double cutoff,
00094 short phase, short initial_phase = 0 )
00095 : PhasedMarkov( tseq.tell_alphabet_size(), tseq.tell_order(), phase )
00096 {
00097 vector<double> init;
00098 for (short i = 0; i<_size; i++)
00099 init.push_back( 1./_size );
00100
00101 _vlmtree = new vlm_tree( tseq.get_coder(),
00102 _size,
00103 _order,
00104 init );
00105 tseq.count_p_occurencies( phase, initial_phase );
00106 _nb_param = 0;
00107 for (int i=0; i<phase; i++){
00108 _vlmtree->estimate_context( tseq.get_count(i),
00109 cutoff );
00110 _vlmtree->tree_to_matrix( _Pis[i] );
00111 _nb_param += _vlmtree->nb_leaves() * (_size-1);
00112 }
00113
00114 delete _vlmtree;
00115 }
00116
00118 ~PhasedVLMarkov(){};
00119 };
00120 #endif