Update mussa to build on ubuntu 10.04 with qt 4.6.2 +boost 1.40.0.1
[mussa.git] / alg / nway_paths.hpp
index 10aa6cba8581d861d0b47773b02d5adb8334ce46..686e27f524602521efc24af61d1fe08a22795299 100644 (file)
 //                        ----------------------------------------
 //                         ----------  mussa_nway.hh  -----------
 //                        ----------------------------------------
+#include <QObject>
+#include <QString>
+
 #include <boost/filesystem/path.hpp>
 
 #include <list>
 #include <string>
 #include <vector>
 
-#include "alg/flp.hpp"
 #include "alg/conserved_path.hpp"
+#include "alg/flp.hpp"
+#include "alg/sequence.hpp"
 
-class NwayPaths
+class NwayPaths : public QObject
 {
-  friend class ConnView;
-  friend class SeqView;
-  protected:
-    int threshold;
-    size_t win_size;
-    int soft_thres;
+  Q_OBJECT
 
-    double ent_thres;
-    std::vector<char *> c_sequences; //used by entropy_path_search
+signals:
+  //! emit to indicate how much progress we've made
+  void progress(const QString& description, int cur, int max);
 
-  public:
+public:
+    typedef size_t size_type;
+    typedef std::list<ConservedPath> ConservedPaths;
+    
     NwayPaths();
+    NwayPaths(const NwayPaths&);
+
     //! setup an nway comparison, initialize # of species, window size, 
     //! threshold
     void setup(int w, int t);
-    void setup_ent(double new_entropy_thres, std::vector<std::string> some_Seqs);
+    void setup_ent(double new_entropy_thres, std::vector<Sequence> some_Seqs);
+    //! clear out our path
+    void clear();
+    //! get the "soft" threshold (between the hard threshold and window size)
+    int get_soft_threshold() const;
+    //! set the score that a match must exceed inorder to be recorded as a path
     void set_soft_threshold(int soft_thres);
     //! return minimum threshold for this analysis
     int get_threshold() const;
@@ -53,7 +63,7 @@ class NwayPaths
 
   // old recursive transitive nway ... has issues checking all links?
     void find_paths_r(std::vector<std::vector<FLPs> > all_comparisons);
-    void path_search(std::vector<std::vector<FLPs> > all_comparisons, ConservedPath path, size_t depth);
+    void path_search(std::vector<std::vector<FLPs> > all_comparisons, ConservedPath path, size_type depth);
 
     void simple_refine();
     void save(boost::filesystem::path save_file_path);
@@ -62,7 +72,7 @@ class NwayPaths
     void add_path(int threshold, std::vector<int>& loaded_path);
     void add_path(ConservedPath loaded_path);
     //! how many sequences are in our comparison
-    size_t sequence_count();
+    size_type sequence_count() const;
 
     void find_paths(std::vector<std::vector<FLPs> > all_comparisons);
     void refine();
@@ -72,16 +82,25 @@ class NwayPaths
 
     // The following iterator functions are mostly for the python interface
     // they'll have problems when being called from within a const object
-    std::list<ConservedPath>::iterator pbegin() { return pathz.begin() ; }
-    std::list<ConservedPath>::iterator pend() { return pathz.end() ; }
-    size_t path_size() const { return refined_pathz.size(); }
-    std::list<ConservedPath>::iterator rpbegin() { return refined_pathz.begin() ; }
-    std::list<ConservedPath>::iterator rpend() { return refined_pathz.end() ; }
-    size_t refined_path_size() const { return refined_pathz.size(); }
+    ConservedPaths::iterator pbegin() { return pathz.begin() ; }
+    ConservedPaths::iterator pend() { return pathz.end() ; }
+    size_type path_size() const { return pathz.size(); }
+    ConservedPaths::iterator rpbegin() { return refined_pathz.begin() ; }
+    ConservedPaths::iterator rpend() { return refined_pathz.end() ; }
+    size_type refined_path_size() const { return refined_pathz.size(); }
 
+    size_type size() const;
     // these probably shouldn't be public, but lets start 
     // simple
-    std::list<ConservedPath> pathz;
-    std::list<ConservedPath > refined_pathz;
+    ConservedPaths pathz;
+    ConservedPaths refined_pathz;
+
+protected:
+    int threshold;
+    size_type win_size;
+    int soft_thres;
+
+    double ent_thres;
+    std::vector<char *> c_sequences; //used by entropy_path_search
 };
 #endif