annotate BEDTools-Version-2.14.3/src/utils/chromsweep/chromsweep.h @ 0:dfcd8b6c1bda

Uploaded
author aaronquinlan
date Thu, 03 Nov 2011 10:25:04 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
1 /*****************************************************************************
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
2 chromsweepBed.h
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
3
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
4 (c) 2009 - Aaron Quinlan
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
5 Hall Laboratory
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
6 Department of Biochemistry and Molecular Genetics
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
7 University of Virginia
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
8 aaronquinlan@gmail.com
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
9
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
10 Licenced under the GNU General Public License 2.0 license.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
11 ******************************************************************************/
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
12 #ifndef CHROMSWEEP_H
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
13 #define CHROMSWEEP_H
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
14
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
15 #include "bedFile.h"
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
16 #include <vector>
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
17 #include <queue>
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
18 #include <iostream>
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
19 #include <fstream>
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
20 #include <stdlib.h>
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
21 using namespace std;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
22
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
23
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
24
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
25 class ChromSweep {
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
26
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
27 // public interface.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
28 public:
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
29
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
30 // A is the query and B is the database
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
31
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
32 // constructor using existing BedFile pointers
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
33 ChromSweep(BedFile *bedA, BedFile *bedB, bool sameStrand = false, bool diffStrand = false);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
34
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
35 // constructor using filenames
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
36 ChromSweep(string &bedAFile, string &bedBFile);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
37
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
38 // destructor
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
39 ~ChromSweep(void);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
40
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
41 // loads next (a pair) with the current query and it's overlaps
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
42 // next.first is the current query interval
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
43 // next.second is a vector of the current query's hits.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
44 // returns true if overlap
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
45 bool Next(pair<BED, vector<BED> > &next);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
46
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
47 // Usage:
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
48 // ChromSweep sweep = ChromSweep(_bedA, _bedB);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
49 // pair<BED, vector<BED> > hit_set;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
50 // while (sweep.Next(hit_set))
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
51 // {
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
52 // // magic happens here!
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
53 // processHits(hit_set.first, hit_set.second);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
54 // }
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
55
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
56 // private variables.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
57 private:
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
58
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
59 // instances of a bed file class.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
60 BedFile *_bedA, *_bedB;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
61 // do we care about strandedness.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
62 bool _sameStrand, _diffStrand;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
63 // a cache of still active features from the database file
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
64 vector<BED> _cache;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
65 // the set of hits in the database for the current query
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
66 vector<BED> _hits;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
67 // a queue from which we retrieve overlap results. used by Next()
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
68 queue< pair<BED, vector<BED> > > _results;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
69 BED _nullBed;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
70 // an empty BED vector for returning no hits for a given query
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
71 vector<BED> _no_hits;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
72 // the current query and db features.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
73 BED _curr_qy, _curr_db;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
74 // a cache of the current chrom from the query. used to handle chrom changes.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
75 string _curr_chrom;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
76 // the current line status in the database and query files
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
77 BedLineStatus _qy_status, _db_status;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
78 // the current line numbers in the database and query files
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
79 int _qy_lineNum, _db_lineNum;
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
80
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
81 // private methods.
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
82 private:
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
83
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
84 void ScanCache();
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
85 bool ChromChange();
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
86 bool IsValidHit(const BED &query, const BED &db);
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
87 };
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
88
dfcd8b6c1bda Uploaded
aaronquinlan
parents:
diff changeset
89 #endif /* CHROMSWEEP_H */