Mercurial > repos > aaronquinlan > multi_intersect
diff BEDTools-Version-2.14.3/src/flankBed/flankBed.cpp @ 1:bec36315bd12 default tip
Deleted selected files
author | aaronquinlan |
---|---|
date | Sat, 19 Nov 2011 14:17:03 -0500 |
parents | dfcd8b6c1bda |
children |
line wrap: on
line diff
--- a/BEDTools-Version-2.14.3/src/flankBed/flankBed.cpp Thu Nov 03 10:25:04 2011 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/***************************************************************************** - flankBed.cpp - - (c) 2009 - Aaron Quinlan - Hall Laboratory - Department of Biochemistry and Molecular Genetics - University of Virginia - aaronquinlan@gmail.com - - Licensed under the GNU General Public License 2.0 license. -******************************************************************************/ -#include "lineFileUtilities.h" -#include "flankBed.h" - - -BedFlank::BedFlank(string &bedFile, string &genomeFile, bool forceStrand, float leftFlank, float rightFlank, bool fractional) { - - _bedFile = bedFile; - _genomeFile = genomeFile; - _forceStrand = forceStrand; - _leftFlank = leftFlank; - _rightFlank = rightFlank; - _fractional = fractional; - - _bed = new BedFile(bedFile); - _genome = new GenomeFile(genomeFile); - - // get going, slop it up. - FlankBed(); -} - - -BedFlank::~BedFlank(void) { - -} - - -void BedFlank::FlankBed() { - - int lineNum = 0; - BED bedEntry, nullBed; // used to store the current BED line from the BED file. - BedLineStatus bedStatus; - - _bed->Open(); - bedStatus = _bed->GetNextBed(bedEntry, lineNum); - while (bedStatus != BED_INVALID) { - if (bedStatus == BED_VALID) { - - int leftFlank = _leftFlank; - int rightFlank = _rightFlank; - if (_fractional == true) { - leftFlank = (int) (_leftFlank * bedEntry.size()); - rightFlank = (int) (_rightFlank * bedEntry.size()); - } - - if ((_forceStrand == false) || (bedEntry.strand == "+")) - { - AddFlank(bedEntry, leftFlank, rightFlank); - } - else if ((_forceStrand == true) && (bedEntry.strand == "-" )) - { - AddStrandedFlank(bedEntry, leftFlank, rightFlank); - } - bedEntry = nullBed; - } - bedStatus = _bed->GetNextBed(bedEntry, lineNum); - } - _bed->Close(); -} - - -void BedFlank::AddFlank(BED &bed, int leftFlank, int rightFlank) { - - int chromSize = _genome->getChromSize(bed.chrom); - if (chromSize == -1) { - cerr << "ERROR: chrom \"" << bed.chrom << "\" not found in genome file. Exiting." << endl; - exit(1); - } - - // init. our left and right flanks to the original BED entry. - // we'll create the flanks from these coordinates. - BED left = bed; - BED right = bed; - - // make the left flank (if necessary) - if (leftFlank > 0) { - if ( (static_cast<int>(left.start) - leftFlank) > 0) - { - left.end = left.start; - left.start -= leftFlank; - } - else - { - left.end = left.start; - left.start = 0; - } - // report the left flank - _bed->reportBedNewLine(left); - } - - // make the left flank (if necessary) - if (rightFlank > 0) { - if ( (static_cast<int>(right.end) + (rightFlank+1)) <= static_cast<int>(chromSize)) - { - right.start = right.end; - right.end += (rightFlank); - } - else { - right.start = right.end; - right.end += chromSize; - } - // report the right flank - _bed->reportBedNewLine(right); - } -} - - -void BedFlank::AddStrandedFlank(BED &bed, int leftFlank, int rightFlank) { - - int chromSize = _genome->getChromSize(bed.chrom); - if (chromSize == -1) { - cerr << "ERROR: chrom \"" << bed.chrom << "\" not found in genome file. Exiting." << endl; - exit(1); - } - - // init. our left and right flanks to the original BED entry. - // we'll create the flanks from these coordinates. - BED left = bed; - BED right = bed; - - // make the left flank (if necessary) - if (rightFlank > 0) { - if ( (static_cast<int>(left.start) - rightFlank) > 0) - { - left.end = left.start; - left.start -= rightFlank; - } - else - { - left.end = left.start; - left.start = 0; - } - // report the left flank - _bed->reportBedNewLine(left); - } - - // make the left flank (if necessary) - if (leftFlank > 0) { - if ( (static_cast<int>(right.end) + leftFlank) <= static_cast<int>(chromSize)) - { - right.start = right.end; - right.end += leftFlank; - } - else { - right.start = right.end; - right.end = chromSize; - } - // report the right flank - _bed->reportBedNewLine(right); - } -} - -