1 #ifndef _CONSERVED_PATH_H
2 #define _CONSERVED_PATH_H
8 typedef int path_element;
9 typedef std::vector<path_element> path_type;
10 typedef path_type::iterator iterator;
11 typedef path_type::const_iterator const_iterator;
12 typedef path_type::size_type size_type;
15 ConservedPath(const ConservedPath& );
16 ConservedPath(size_t window_size, double score, path_type path);
18 //! reset our path to be empty (including setting threshold to 0)
20 path_element& operator[](size_type index);
21 void push_back(const path_element& );
24 size_type size() const;
26 const_iterator begin() const;
28 const_iterator end() const;
30 friend bool operator==(const ConservedPath& a, const ConservedPath &b);
31 friend bool operator!=(const ConservedPath& a, const ConservedPath &b);
32 friend std::ostream& operator<<(std::ostream&, const ConservedPath&);
34 //! return true if all elements of the path are "next to" our current path.
35 /*! Next to is defined as being window index + 1
36 * that definition may not properly track reverse compliment
38 bool nextTo(const ConservedPath& next) const;
39 //! indicate which elements of the path are reversed
40 std::vector<bool> reverseComplimented() const;
41 //! return the list of indexes normalized (to the left)
42 std::vector<path_element> normalizedIndexes() const;
43 //! extend our current path
44 //! (aka increment our window size by growth)
45 ConservedPath& extend(int growth=1);
47 //! window size (really should always be positive
49 //! either number of conserved bases or average entropy
51 //! offsets into each of our sequences representing the start of our window
52 std::vector<path_element> track_indexes;