diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp index 635bdf85d074fc39a5a238f02a41229aed6f8967..dcd44a1d0b78417d5abbd564c39b22e1b94a7e1e 100644 --- a/src/closestBed/closestBed.cpp +++ b/src/closestBed/closestBed.cpp @@ -21,11 +21,13 @@ const int SLOPGROWTH = 2048000; /* Constructor */ -BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool forceStrand, string &tieMode, bool reportDistance, bool ignoreOverlaps) +BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool diffStrand, + string &tieMode, bool reportDistance, bool ignoreOverlaps) : _bedAFile(bedAFile) , _bedBFile(bedBFile) , _tieMode(tieMode) - , _forceStrand(forceStrand) + , _sameStrand(sameStrand) + , _diffStrand(diffStrand) , _reportDistance(reportDistance) , _ignoreOverlaps(ignoreOverlaps) { @@ -76,7 +78,7 @@ void BedClosest::FindWindowOverlaps(BED &a, vector<BED> &hits) { // THE HEAVY LIFTING // search for hits with the current slop added - _bedB->FindOverlapsPerBin(a.chrom, aFudgeStart, aFudgeEnd, a.strand, hits, _forceStrand); + _bedB->FindOverlapsPerBin(a.chrom, aFudgeStart, aFudgeEnd, a.strand, hits, _sameStrand, _diffStrand); vector<BED>::const_iterator h = hits.begin(); vector<BED>::const_iterator hitsEnd = hits.end(); diff --git a/src/closestBed/closestBed.h b/src/closestBed/closestBed.h index e50830030707e918d59dd537a8cbb7946342f457..0ee74d2596b1e02b0b9a749d619bcc3b6507b764 100644 --- a/src/closestBed/closestBed.h +++ b/src/closestBed/closestBed.h @@ -28,7 +28,7 @@ public: // constructor BedClosest(string &bedAFile, string &bedBFile, - bool forceStrand, string &tieMode, + bool sameStrand, bool diffStrand, string &tieMode, bool reportDistance, bool ignoreOverlaps); // destructor @@ -43,7 +43,8 @@ private: string _bedAFile; string _bedBFile; string _tieMode; - bool _forceStrand; + bool _sameStrand; + bool _diffStrand; bool _reportDistance; bool _ignoreOverlaps; diff --git a/src/closestBed/closestMain.cpp b/src/closestBed/closestMain.cpp index d34e01ff585ad4b86dd28e3f1bc80d89ef015a0e..d2f4fce7b0576c6fae745a98ea23e84c0b9644c7 100644 --- a/src/closestBed/closestMain.cpp +++ b/src/closestBed/closestMain.cpp @@ -36,7 +36,8 @@ int main(int argc, char* argv[]) { bool haveBedA = false; bool haveBedB = false; bool haveTieMode = false; - bool forceStrand = false; + bool sameStrand = false; + bool diffStrand = false; bool ignoreOverlaps = false; bool reportDistance = false; @@ -75,7 +76,10 @@ int main(int argc, char* argv[]) { } } else if (PARAMETER_CHECK("-s", 2, parameterLength)) { - forceStrand = true; + sameStrand = true; + } + else if (PARAMETER_CHECK("-S", 2, parameterLength)) { + diffStrand = true; } else if (PARAMETER_CHECK("-d", 2, parameterLength)) { reportDistance = true; @@ -108,8 +112,13 @@ int main(int argc, char* argv[]) { showHelp = true; } + if (sameStrand && diffStrand) { + cerr << endl << "*****" << endl << "*****ERROR: Request either -s OR -S, not both." << endl << "*****" << endl; + showHelp = true; + } + if (!showHelp) { - BedClosest *bc = new BedClosest(bedAFile, bedBFile, forceStrand, tieMode, reportDistance, ignoreOverlaps); + BedClosest *bc = new BedClosest(bedAFile, bedBFile, sameStrand, diffStrand, tieMode, reportDistance, ignoreOverlaps); delete bc; return 0; } @@ -131,8 +140,12 @@ void ShowHelp(void) { cerr << "Usage: " << PROGRAM_NAME << " [OPTIONS] -a <bed/gff/vcf> -b <bed/gff/vcf>" << endl << endl; cerr << "Options: " << endl; - cerr << "\t-s\t" << "Force strandedness. That is, find the closest feature in B" << endl; - cerr << "\t\tthat overlaps A on the same strand." << endl; + cerr << "\t-s\t" << "Require same strandedness. That is, find the closest feature in B" << endl; + cerr << "\t\tthat overlaps A on the _same_ strand." << endl; + cerr << "\t\t- By default, overlaps are reported without respect to strand." << endl << endl; + + cerr << "\t-s\t" << "Require opposite strandedness. That is, find the closest feature in B" << endl; + cerr << "\t\tthat overlaps A on the _opposite_ strand." << endl; cerr << "\t\t- By default, overlaps are reported without respect to strand." << endl << endl; cerr << "\t-d\t" << "In addition to the closest feature in B, " << endl;