use Qt Signals & Slots for progress tracking
[mussa.git] / alg / nway_paths.hpp
1 #ifndef _MUSSA_NWAY_H_
2 #define _MUSSA_NWAY_H_
3 //  This file is part of the Mussa source distribution.
4 //  http://mussa.caltech.edu/
5 //  Contact author: Tristan  De Buysscher, tristan@caltech.edu
6
7 // This program and all associated source code files are Copyright (C) 2005
8 // the California Institute of Technology, Pasadena, CA, 91125 USA.  It is
9 // under the GNU Public License; please see the included LICENSE.txt
10 // file for more information, or contact Tristan directly.
11
12
13 //                        ----------------------------------------
14 //                         ----------  mussa_nway.hh  -----------
15 //                        ----------------------------------------
16 #include <QObject>
17
18 #include <boost/filesystem/path.hpp>
19
20 #include <list>
21 #include <string>
22 #include <vector>
23
24 #include "alg/conserved_path.hpp"
25 #include "alg/flp.hpp"
26
27 class NwayPaths : public QObject
28 {
29   Q_OBJECT
30
31 signals:
32   //! emit to indicate how much progress we've made
33   void progress(const std::string& description, int cur, int max);
34
35 public:
36     NwayPaths();
37     NwayPaths(const NwayPaths&);
38
39     //! setup an nway comparison, initialize # of species, window size, 
40     //! threshold
41     void setup(int w, int t);
42     void setup_ent(double new_entropy_thres, std::vector<std::string> some_Seqs);
43     //! clear out our path
44     void clear();
45     //! set the score that a match must exceed inorder to be recorded as a path
46     void set_soft_threshold(int soft_thres);
47     //! return minimum threshold for this analysis
48     int get_threshold() const;
49     //! return window size used for this analysis
50     int get_window() const;
51
52     void radiate_path_search(std::vector<std::vector<FLPs> > all_comparisons);
53     void trans_path_search(std::vector<std::vector<FLPs> > all_comparisons);
54     void entropy_path_search(std::vector<std::vector<FLPs> > all_comparisons);
55     double path_entropy(std::vector<int> path);
56
57   // old recursive transitive nway ... has issues checking all links?
58     void find_paths_r(std::vector<std::vector<FLPs> > all_comparisons);
59     void path_search(std::vector<std::vector<FLPs> > all_comparisons, ConservedPath path, size_t depth);
60
61     void simple_refine();
62     void save(boost::filesystem::path save_file_path);
63     //! load a muway file, \throws mussa_load_error
64     void load(boost::filesystem::path load_file_path);
65     void add_path(int threshold, std::vector<int>& loaded_path);
66     void add_path(ConservedPath loaded_path);
67     //! how many sequences are in our comparison
68     size_t sequence_count();
69
70     void find_paths(std::vector<std::vector<FLPs> > all_comparisons);
71     void refine();
72
73     void save_old(boost::filesystem::path save_file_path);
74     void print(std::list<std::vector<int> >&);
75
76     // The following iterator functions are mostly for the python interface
77     // they'll have problems when being called from within a const object
78     std::list<ConservedPath>::iterator pbegin() { return pathz.begin() ; }
79     std::list<ConservedPath>::iterator pend() { return pathz.end() ; }
80     size_t path_size() const { return refined_pathz.size(); }
81     std::list<ConservedPath>::iterator rpbegin() { return refined_pathz.begin() ; }
82     std::list<ConservedPath>::iterator rpend() { return refined_pathz.end() ; }
83     size_t refined_path_size() const { return refined_pathz.size(); }
84
85     // these probably shouldn't be public, but lets start 
86     // simple
87     std::list<ConservedPath> pathz;
88     std::list<ConservedPath > refined_pathz;
89
90 protected:
91     int threshold;
92     size_t win_size;
93     int soft_thres;
94
95     double ent_thres;
96     std::vector<char *> c_sequences; //used by entropy_path_search
97
98 };
99 #endif