provide python interpreter for mussa qui via a seperate thread
[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 #include <QString>
18
19 #include <boost/filesystem/path.hpp>
20
21 #include <list>
22 #include <string>
23 #include <vector>
24
25 #include "alg/conserved_path.hpp"
26 #include "alg/flp.hpp"
27 #include "alg/sequence.hpp"
28
29 class NwayPaths : public QObject
30 {
31   Q_OBJECT
32
33 signals:
34   //! emit to indicate how much progress we've made
35   void progress(const QString& description, int cur, int max);
36
37 public:
38     typedef std::list<ConservedPath> ConservedPaths;
39     
40     NwayPaths();
41     NwayPaths(const NwayPaths&);
42
43     //! setup an nway comparison, initialize # of species, window size, 
44     //! threshold
45     void setup(int w, int t);
46     void setup_ent(double new_entropy_thres, std::vector<Sequence> some_Seqs);
47     //! clear out our path
48     void clear();
49     //! get the "soft" threshold (between the hard threshold and window size)
50     int get_soft_threshold() const;
51     //! set the score that a match must exceed inorder to be recorded as a path
52     void set_soft_threshold(int soft_thres);
53     //! return minimum threshold for this analysis
54     int get_threshold() const;
55     //! return window size used for this analysis
56     int get_window() const;
57
58     void radiate_path_search(std::vector<std::vector<FLPs> > all_comparisons);
59     void trans_path_search(std::vector<std::vector<FLPs> > all_comparisons);
60     void entropy_path_search(std::vector<std::vector<FLPs> > all_comparisons);
61     double path_entropy(std::vector<int> path);
62
63   // old recursive transitive nway ... has issues checking all links?
64     void find_paths_r(std::vector<std::vector<FLPs> > all_comparisons);
65     void path_search(std::vector<std::vector<FLPs> > all_comparisons, ConservedPath path, size_t depth);
66
67     void simple_refine();
68     void save(boost::filesystem::path save_file_path);
69     //! load a muway file, \throws mussa_load_error
70     void load(boost::filesystem::path load_file_path);
71     void add_path(int threshold, std::vector<int>& loaded_path);
72     void add_path(ConservedPath loaded_path);
73     //! how many sequences are in our comparison
74     size_t sequence_count();
75
76     void find_paths(std::vector<std::vector<FLPs> > all_comparisons);
77     void refine();
78
79     void save_old(boost::filesystem::path save_file_path);
80     void print(std::list<std::vector<int> >&);
81
82     // The following iterator functions are mostly for the python interface
83     // they'll have problems when being called from within a const object
84     ConservedPaths::iterator pbegin() { return pathz.begin() ; }
85     ConservedPaths::iterator pend() { return pathz.end() ; }
86     size_t path_size() const { return refined_pathz.size(); }
87     ConservedPaths::iterator rpbegin() { return refined_pathz.begin() ; }
88     ConservedPaths::iterator rpend() { return refined_pathz.end() ; }
89     size_t refined_path_size() const { return refined_pathz.size(); }
90
91     // these probably shouldn't be public, but lets start 
92     // simple
93     ConservedPaths pathz;
94     ConservedPaths refined_pathz;
95
96 protected:
97     int threshold;
98     size_t win_size;
99     int soft_thres;
100
101     double ent_thres;
102     std::vector<char *> c_sequences; //used by entropy_path_search
103
104 };
105 #endif