COOPY » Guide  version 0.6.5
/home/paulfitz/cvs/coopy_scm/coopy/src/libcoopy_core/include/coopy/Viterbi.h
Go to the documentation of this file.
00001 #ifndef COOPY_VITERBI_INC
00002 #define COOPY_VITERBI_INC
00003 
00004 #include <assert.h>
00005 #include <coopy/SparseSheet.h>
00006 #include <coopy/Dbg.h>
00007 
00008 namespace coopy {
00009   namespace cmp {
00010     class Viterbi;
00011   }
00012 }
00013 
00014 class coopy::cmp::Viterbi {
00015 public:
00016   int K;
00017   int T;
00018   int index;
00019   int mode;
00020   int path_valid;
00021   float best_cost;
00022   coopy::store::SparseFloatSheet cost;
00023   coopy::store::SparseIntSheet src;
00024   coopy::store::SparseIntSheet path;
00025 
00026   Viterbi() {
00027       K = T = 0;
00028       reset();
00029     }
00030 
00031   void setSize(int states, int sequence_length);
00032 
00033   void reset()
00034     {
00035       index = 0;
00036       mode = 0;
00037       path_valid = 0;
00038       best_cost = 0;
00039     }
00040 
00041   void assertMode(int n_mode);
00042 
00043   void addTransition(int s0, int s1, float c);
00044 
00045   void endTransitions() {
00046     path_valid = 0;
00047     assertMode(0);
00048   }
00049 
00050   void beginTransitions() {
00051     path_valid = 0;
00052     assertMode(1);
00053   }
00054 
00055   void calculatePath();
00056 
00057   void showPath();
00058 
00059   int length() {
00060     if (index>0) {
00061       calculatePath();
00062     }
00063     return index;
00064   }
00065 
00066   int getPath(int i) {
00067     calculatePath();
00068     COOPY_ASSERT(i<index);
00069     return path(0,i);
00070   }
00071 
00072   int operator() (int i) {
00073     return getPath(i);
00074   }
00075 
00076   float getCost() {
00077     calculatePath();
00078     return best_cost;
00079   }
00080 };
00081 
00082 
00083 #endif
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines