1 #ifndef MULTIREADS_H 2 #define MULTIREADS_H 3 4 #include <boost/thread.hpp> 5 6 typedef uint64_t RefID; 7 typedef uint64_t InsertID; 8 9 struct MultiHit 10 { MultiHitMultiHit11 MultiHit(RefID id, int l, int r) 12 : r_id(id), 13 left(l), 14 right(r), 15 expr(0) {} 16 RefID r_id; 17 int left; 18 int right; 19 double expr; 20 }; 21 22 class MultiRead 23 { 24 size_t _curr_index; 25 std::vector<MultiHit> _hits; 26 double _tot_expr; 27 InsertID _id; 28 29 MultiHit* get_hit(RefID r_id, int left, int right); 30 31 public: 32 MultiRead(InsertID id,int exp_num_hits)33 MultiRead(InsertID id, int exp_num_hits) 34 : _curr_index(0), 35 _tot_expr(0.0), 36 _id(id) 37 { 38 _hits.reserve(exp_num_hits); 39 } 40 num_hits()41 size_t num_hits() { return (int)_hits.size(); } 42 void add_hit(RefID r_id, int left, int right); 43 void add_expr(RefID r_id, int left, int right, double expr); 44 double get_mass(RefID r_id, int left, int right, bool valid_mass); 45 }; 46 47 class MateHit; 48 49 class MultiReadTable 50 { 51 typedef std::map<InsertID, MultiRead> MultiReadMap; 52 MultiReadMap _read_map; 53 bool _valid_mass; 54 MultiRead* get_read(InsertID mr_id); 55 #if ENABLE_THREADS 56 boost::mutex _lock; 57 #endif 58 public: MultiReadTable()59 MultiReadTable(): _valid_mass(false) {} 60 valid_mass(bool vm)61 void valid_mass(bool vm) { _valid_mass = vm; } 62 void add_hit(const MateHit& hit); 63 void add_hit(RefID r_id, int left, int right, InsertID mr_id, int exp_num_hits); 64 void add_expr(const MateHit& hit, double expr); 65 void add_expr(RefID r_id, int left, int right, InsertID mr_id, double expr); 66 double get_mass(const MateHit& hit); 67 size_t num_multireads(); 68 size_t num_multihits(); 69 70 }; 71 72 #endif 73