diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp index 046db2077c98ca89c0961accd25221032c0f7957..735e2a9ebfe3a8012592c58a30c61dc3827e3370 100644 --- a/src/closestBed/closestBed.cpp +++ b/src/closestBed/closestBed.cpp @@ -23,7 +23,7 @@ const int SLOPGROWTH = 2048000; */ BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool diffStrand, string &tieMode, bool reportDistance, bool signDistance, string &_strandedDistMode, - bool ignoreOverlaps) + bool ignoreOverlaps, bool printHeader) : _bedAFile(bedAFile) , _bedBFile(bedBFile) , _tieMode(tieMode) @@ -33,6 +33,7 @@ BedClosest::BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool , _signDistance(signDistance) , _strandedDistMode(_strandedDistMode) , _ignoreOverlaps(ignoreOverlaps) + , _printHeader(printHeader) { _bedA = new BedFile(_bedAFile); _bedB = new BedFile(_bedBFile); @@ -220,6 +221,10 @@ void BedClosest::FindClosestBed() { BedLineStatus bedStatus; _bedA->Open(); + // report A's header first if asked. + if (_printHeader == true) { + _bedA->PrintHeader(); + } // process each entry in A in search of the closest feature in B while ((bedStatus = _bedA->GetNextBed(a, lineNum)) != BED_INVALID) { if (bedStatus == BED_VALID) { diff --git a/src/closestBed/closestBed.h b/src/closestBed/closestBed.h index 82bd9b40b5fc6f6c2de1d246502f586f5ccdf923..8190dec93ee25443cb85c9a8a10a71547851d28a 100644 --- a/src/closestBed/closestBed.h +++ b/src/closestBed/closestBed.h @@ -30,7 +30,7 @@ public: BedClosest(string &bedAFile, string &bedBFile, bool sameStrand, bool diffStrand, string &tieMode, bool reportDistance, bool signDistance, string &strandedDistMode, - bool ignoreOverlaps); + bool ignoreOverlaps, bool printHeader); // destructor ~BedClosest(void); @@ -50,6 +50,7 @@ private: bool _signDistance; string _strandedDistMode; bool _ignoreOverlaps; + bool _printHeader; BedFile *_bedA, *_bedB; diff --git a/src/closestBed/closestMain.cpp b/src/closestBed/closestMain.cpp index 8b34a70743ef21688f3ed2067ca7da1c001d501c..0128af24fc6edbb4fa20558e56a1b541774be9b1 100644 --- a/src/closestBed/closestMain.cpp +++ b/src/closestBed/closestMain.cpp @@ -43,6 +43,7 @@ int main(int argc, char* argv[]) { bool reportDistance = false; bool signDistance = false; bool haveStrandedDistMode = false; + bool printHeader = false; // check to see if we should print out some help @@ -106,6 +107,9 @@ int main(int argc, char* argv[]) { i++; } } + else if(PARAMETER_CHECK("-header", 7, parameterLength)) { + printHeader = true; + } else { cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl; showHelp = true; @@ -136,7 +140,9 @@ int main(int argc, char* argv[]) { } if (!showHelp) { - BedClosest *bc = new BedClosest(bedAFile, bedBFile, sameStrand, diffStrand, tieMode, reportDistance, signDistance, strandedDistMode, ignoreOverlaps); + BedClosest *bc = new BedClosest(bedAFile, bedBFile, sameStrand, + diffStrand, tieMode, reportDistance, + signDistance, strandedDistMode, ignoreOverlaps, printHeader); delete bc; return 0; } @@ -191,6 +197,8 @@ void ShowHelp(void) { cerr << "\t\t- \"all\" Report all ties (default)." << endl; cerr << "\t\t- \"first\" Report the first tie that occurred in the B file." << endl; cerr << "\t\t- \"last\" Report the last tie that occurred in the B file." << endl << endl; + + cerr << "\t-header\t" << "Print the header from the A file prior to results." << endl << endl; cerr << "Notes: " << endl; cerr << "\tReports \"none\" for chrom and \"-1\" for all other fields when a feature" << endl; diff --git a/src/flankBed/flankBed.cpp b/src/flankBed/flankBed.cpp index 33ff711b5c8ad5377a518c746bd1f10e8d9604f2..f7e12495120281194aa38f5c22aa1695bb2e83a7 100644 --- a/src/flankBed/flankBed.cpp +++ b/src/flankBed/flankBed.cpp @@ -13,14 +13,18 @@ #include "flankBed.h" -BedFlank::BedFlank(string &bedFile, string &genomeFile, bool forceStrand, float leftFlank, float rightFlank, bool fractional) { +BedFlank::BedFlank(string &bedFile, string &genomeFile, bool forceStrand, + float leftFlank, float rightFlank, bool fractional, + bool printHeader) +{ _bedFile = bedFile; _genomeFile = genomeFile; _forceStrand = forceStrand; _leftFlank = leftFlank; _rightFlank = rightFlank; - _fractional = fractional; + _fractional = fractional; + _printHeader = printHeader; _bed = new BedFile(bedFile); _genome = new GenomeFile(genomeFile); @@ -42,6 +46,11 @@ void BedFlank::FlankBed() { BedLineStatus bedStatus; _bed->Open(); + // report A's header first if asked. + if (_printHeader == true) { + _bed->PrintHeader(); + } + bedStatus = _bed->GetNextBed(bedEntry, lineNum); while (bedStatus != BED_INVALID) { if (bedStatus == BED_VALID) { diff --git a/src/flankBed/flankBed.h b/src/flankBed/flankBed.h index a77326a80637d6602b007447d4b15dd6df068e41..f344f60f18686f84f796618a4ad1659a52430189 100644 --- a/src/flankBed/flankBed.h +++ b/src/flankBed/flankBed.h @@ -30,7 +30,9 @@ class BedFlank { public: // constructor - BedFlank(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional); + BedFlank(string &bedFile, string &genomeFile, bool forceStrand, + float leftSlop, float rightSlop, bool fractional, + bool printHeader); // destructor ~BedFlank(void); @@ -46,6 +48,7 @@ private: float _leftFlank; float _rightFlank; bool _fractional; + bool _printHeader; BedFile *_bed; GenomeFile *_genome; diff --git a/src/flankBed/flankBedMain.cpp b/src/flankBed/flankBedMain.cpp index 107db20e044e3d63b898a12a7805d7545338d51e..062839e6a377298ce849bd209ea5d9e093df46f5 100644 --- a/src/flankBed/flankBedMain.cpp +++ b/src/flankBed/flankBedMain.cpp @@ -43,6 +43,7 @@ int main(int argc, char* argv[]) { float leftSlop = 0.0; float rightSlop = 0.0; bool fractional = false; + bool printHeader = false; for(int i = 1; i < argc; i++) { int parameterLength = (int)strlen(argv[i]); @@ -101,6 +102,9 @@ int main(int argc, char* argv[]) { else if(PARAMETER_CHECK("-pct", 4, parameterLength)) { fractional = true; } + else if(PARAMETER_CHECK("-header", 7, parameterLength)) { + printHeader = true; + } else { cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl; showHelp = true; @@ -126,7 +130,8 @@ int main(int argc, char* argv[]) { } if (!showHelp) { - BedFlank *bc = new BedFlank(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional); + BedFlank *bc = new BedFlank(bedFile, genomeFile, forceStrand, + leftSlop, rightSlop, fractional, printHeader); delete bc; return 0; @@ -163,6 +168,8 @@ void ShowHelp(void) { cerr << "\t-pct\t" << "Define -l and -r as a fraction of the feature's length." << endl; cerr << "\t\tE.g. if used on a 1000bp feature, -l 0.50, " << endl; cerr << "\t\twill add 500 bp \"upstream\". Default = false." << endl << endl; + + cerr << "\t-header\t" << "Print the header from the input file prior to results." << endl << endl; cerr << "Notes: " << endl; cerr << "\t(1) Starts will be set to 0 if options would force it below 0." << endl; diff --git a/src/slopBed/slopBed.cpp b/src/slopBed/slopBed.cpp index be9e37687c14f1e21cd626d24525dc43b65bf764..68eda5a2859aa7760aae8341d04f330865e45f87 100644 --- a/src/slopBed/slopBed.cpp +++ b/src/slopBed/slopBed.cpp @@ -13,14 +13,17 @@ #include "slopBed.h" -BedSlop::BedSlop(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional) { +BedSlop::BedSlop(string &bedFile, string &genomeFile, bool forceStrand, + float leftSlop, float rightSlop, bool fractional, + bool printHeader) { _bedFile = bedFile; _genomeFile = genomeFile; _forceStrand = forceStrand; _leftSlop = leftSlop; _rightSlop = rightSlop; - _fractional = fractional; + _fractional = fractional; + _printHeader = printHeader; _bed = new BedFile(bedFile); _genome = new GenomeFile(genomeFile); @@ -42,6 +45,11 @@ void BedSlop::SlopBed() { BedLineStatus bedStatus; _bed->Open(); + // report header first if asked. + if (_printHeader == true) { + _bed->PrintHeader(); + } + bedStatus = _bed->GetNextBed(bedEntry, lineNum); while (bedStatus != BED_INVALID) { if (bedStatus == BED_VALID) { diff --git a/src/slopBed/slopBed.h b/src/slopBed/slopBed.h index d22590c729a8da7c6241b07636dac784d3ed6e23..7de0afd728cce49b85f31f0ec60c1f2efbcd4001 100644 --- a/src/slopBed/slopBed.h +++ b/src/slopBed/slopBed.h @@ -30,7 +30,8 @@ class BedSlop { public: // constructor - BedSlop(string &bedFile, string &genomeFile, bool forceStrand, float leftSlop, float rightSlop, bool fractional); + BedSlop(string &bedFile, string &genomeFile, bool forceStrand, + float leftSlop, float rightSlop, bool fractional, bool printHeader); // destructor ~BedSlop(void); @@ -46,6 +47,7 @@ private: float _leftSlop; float _rightSlop; bool _fractional; + bool _printHeader; BedFile *_bed; GenomeFile *_genome; diff --git a/src/slopBed/slopBedMain.cpp b/src/slopBed/slopBedMain.cpp index 01e0164908b49cb981498ca9753e156b5f51697f..b5f148e56dc6aab8aa714a1f7cc45ba8f01ded44 100644 --- a/src/slopBed/slopBedMain.cpp +++ b/src/slopBed/slopBedMain.cpp @@ -43,6 +43,7 @@ int main(int argc, char* argv[]) { float leftSlop = 0.0; float rightSlop = 0.0; bool fractional = false; + bool printHeader = false; for(int i = 1; i < argc; i++) { int parameterLength = (int)strlen(argv[i]); @@ -101,6 +102,9 @@ int main(int argc, char* argv[]) { else if(PARAMETER_CHECK("-pct", 4, parameterLength)) { fractional = true; } + else if(PARAMETER_CHECK("-header", 7, parameterLength)) { + printHeader = true; + } else { cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl; showHelp = true; @@ -126,7 +130,7 @@ int main(int argc, char* argv[]) { } if (!showHelp) { - BedSlop *bc = new BedSlop(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional); + BedSlop *bc = new BedSlop(bedFile, genomeFile, forceStrand, leftSlop, rightSlop, fractional, printHeader); delete bc; return 0; @@ -164,6 +168,8 @@ void ShowHelp(void) { cerr << "\t\tE.g. if used on a 1000bp feature, -l 0.50, " << endl; cerr << "\t\twill add 500 bp \"upstream\". Default = false." << endl << endl; + cerr << "\t-header\t" << "Print the header from the input file prior to results." << endl << endl; + cerr << "Notes: " << endl; cerr << "\t(1) Starts will be set to 0 if options would force it below 0." << endl; cerr << "\t(2) Ends will be set to the chromosome length if requested slop would" << endl; diff --git a/src/windowBed/windowBed.cpp b/src/windowBed/windowBed.cpp index 513d91fef05c5cbc0a59d00f05d611d1b6a9bd88..b93ea4ae8fef38753f00afff61b6cb6acf03a008 100644 --- a/src/windowBed/windowBed.cpp +++ b/src/windowBed/windowBed.cpp @@ -18,7 +18,8 @@ */ BedWindow::BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSlop, bool anyHit, bool noHit, bool writeCount, bool strandWindows, - bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, bool bamOutput, bool isUncompressedBam) { + bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, + bool bamOutput, bool isUncompressedBam, bool printHeader) { _bedAFile = bedAFile; _bedBFile = bedBFile; @@ -35,6 +36,7 @@ BedWindow::BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSl _bamInput = bamInput; _bamOutput = bamOutput; _isUncompressedBam = isUncompressedBam; + _printHeader = printHeader; _bedA = new BedFile(bedAFile); _bedB = new BedFile(bedBFile); @@ -133,6 +135,10 @@ void BedWindow::WindowIntersectBed() { hits.reserve(100); _bedA->Open(); + // report A's header first if asked. + if (_printHeader == true) { + _bedA->PrintHeader(); + } while ((bedStatus = _bedA->GetNextBed(a, lineNum)) != BED_INVALID) { if (bedStatus == BED_VALID) { FindWindowOverlaps(a, hits); diff --git a/src/windowBed/windowBed.h b/src/windowBed/windowBed.h index 84f1b1b1e9e4fa576be0cd35198699f56d499481..31c8a076c43c14c8ada993df96d94e1c9741226e 100644 --- a/src/windowBed/windowBed.h +++ b/src/windowBed/windowBed.h @@ -34,7 +34,8 @@ public: // constructor BedWindow(string bedAFile, string bedBFile, int leftSlop, int rightSlop, bool anyHit, bool noHit, bool writeCount, bool strandWindows, - bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, bool bamOutput, bool isUncompressedBam); + bool matchOnSameStrand, bool matchOnDiffStrand, bool bamInput, + bool bamOutput, bool isUncompressedBam, bool printHeader); // destructor ~BedWindow(void); @@ -53,7 +54,8 @@ private: bool _matchOnDiffStrand; bool _bamInput; bool _bamOutput; - bool _isUncompressedBam; + bool _isUncompressedBam; + bool _printHeader; // instance of a bed file class. BedFile *_bedA, *_bedB; diff --git a/src/windowBed/windowMain.cpp b/src/windowBed/windowMain.cpp index 7d70f3a4359951b233cf83b31e8f1812390f8a1f..cbb5739a14120596893da0d89c26e34a78809249 100644 --- a/src/windowBed/windowMain.cpp +++ b/src/windowBed/windowMain.cpp @@ -37,20 +37,21 @@ int main(int argc, char* argv[]) { int leftSlop = 1000; int rightSlop = 1000; - bool haveBedA = false; - bool haveBedB = false; - bool noHit = false; - bool anyHit = false; - bool writeCount = false; - bool haveSlop = false; - bool haveLeft = false; - bool haveRight = false; - bool strandWindows = false; + bool haveBedA = false; + bool haveBedB = false; + bool noHit = false; + bool anyHit = false; + bool writeCount = false; + bool haveSlop = false; + bool haveLeft = false; + bool haveRight = false; + bool strandWindows = false; bool matchOnSameStrand = false; bool matchOnDiffStrand = false; - bool inputIsBam = false; - bool outputIsBam = true; - bool uncompressedBam = false; + bool inputIsBam = false; + bool outputIsBam = true; + bool uncompressedBam = false; + bool printHeader = false; // check to see if we should print out some help if(argc <= 1) showHelp = true; @@ -139,6 +140,9 @@ int main(int argc, char* argv[]) { else if(PARAMETER_CHECK("-ubam", 5, parameterLength)) { uncompressedBam = true; } + else if(PARAMETER_CHECK("-header", 7, parameterLength)) { + printHeader = true; + } else { cerr << endl << "*****ERROR: Unrecognized parameter: " << argv[i] << " *****" << endl << endl; showHelp = true; @@ -189,7 +193,7 @@ int main(int argc, char* argv[]) { if (!showHelp) { BedWindow *bi = new BedWindow(bedAFile, bedBFile, leftSlop, rightSlop, anyHit, noHit, writeCount, strandWindows, matchOnSameStrand, matchOnDiffStrand, - inputIsBam, outputIsBam, uncompressedBam); + inputIsBam, outputIsBam, uncompressedBam, printHeader); delete bi; return 0; } @@ -257,6 +261,8 @@ void ShowHelp(void) { cerr << "\t-v\t" << "Only report those entries in A that have _no overlaps_ with B." << endl; cerr << "\t\t- Similar to \"grep -v.\"" << endl << endl; + + cerr << "\t-header\t" << "Print the header from the A file prior to results." << endl << endl; // end the program here exit(1);