3 // This file is part of the Mussa source distribution.
4 // http://mussa.caltech.edu/
5 // Contact author: Tristan De Buysscher, tristan@caltech.edu
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.
13 // ----------------------------------------
14 // ---------- flp.hh -----------
15 // ----------------------------------------
16 #include <boost/filesystem/path.hpp>
24 //! FLP = Fixed Length Pairs (Data)
26 * vector of linked lists of the match type struct
31 typedef size_t size_type;
35 //! Setup a FLP and reserve space for the match lists
37 * Initialize the all_matches structure with a list of matches
38 * for enough windows for the size of sequence 1
46 friend bool operator==(const match&, const match& );
47 friend std::ostream &operator<<(std::ostream&, const match&);
50 void setup(int win_size, int hard_thres);
51 //! compare two sequences and store the list of results in all_matches
52 void seqcomp(const Sequence& seq1, const Sequence& seq2, bool is_RC);
53 //bool FLPs::match_less(match *match1, match *match2);
55 //! Return all the matches for a particular window?
56 std::list<match> matches(int index) const;
57 //! Return all the match indexes for a particular window?
58 std::list<int> match_locations(int index) const;
59 //! Return all the match indexes for a particular window above a threshold
60 std::list<int> thres_matches(int index, int thres) const;
61 //! Return the number of windows stored in this FLPs
62 /*! (this is should be the same as seq1_len-window_size+1
65 //! Save all the FLPs to save_file_path
66 void save(boost::filesystem::path save_file_path);
67 //! Load a vector of a lists of FLPs
68 void load(boost::filesystem::path file_path);
70 //! how far we are through current seqcomp
71 float progress() const;
73 const static int seqcomp_not_running = -1;
75 //! the number of base pairs in the sliding window
77 //! the minimum tnumber of base pairs need for this window to be saved.
80 //! add a match from location seq1_i to seq2_i with a threshold of a_score
81 /*! i2_offset is used to shift the window start when doing a reverse
82 * compliment. (This is called by seqcomp() )
84 inline void add(int seq1_i, int seq2_i, int a_score, int i2_offset);
85 //! this list of matches between the two sequences
86 /*! All of the matches are stored here, it appears each window position
87 * in sequence 1 gets an entry in the vector, the list contains matches
88 * between sequence 1 and sequence 2
90 std::vector<std::list<match> > *all_matches;
91 //! reserve space for the appropriate number of windows.
92 /*! this is mostly so seqcomp can use operator[]
94 void alloc_matches(std::string::size_type len1=0);
96 //! make sure that a sequence is acceptable to seqcomp
97 void validate_sequence(const Sequence&) const;
99 //! current loop index
101 //! end seqcomp index (when terminating, seqcomp_i == seqcomp_end.
102 //! when not running seqcomp_i == seqcomp_end == seqcomp_not_running