void BedShuffle::ShuffleWithExclusions() { int lineNum = 0; BED bedEntry, nullBed; // used to store the current BED line from the BED file. BedLineStatus bedStatus; _bed->Open(); while ((bedStatus = _bed->GetNextBed(bedEntry, lineNum)) != BED_INVALID) { if (bedStatus == BED_VALID) { // keep looking as long as the chosen // locus happens to overlap with regions // that the user wishes to exclude. int tries = 0; bool haveOverlap = false; do { // choose a new locus ChooseLocus(bedEntry); haveOverlap = _exclude->FindOneOrMoreOverlapsPerBin(bedEntry.chrom, bedEntry.start, bedEntry.end, bedEntry.strand, false, _overlapFraction); tries++; } while ((haveOverlap == true) && (tries <= MAX_TRIES)); if (tries > MAX_TRIES) { cerr << "Error, line " << lineNum << ": tried " << MAX_TRIES << " potential loci for entry, but could not avoid excluded regions. Ignoring entry and moving on." << endl; } else { _bed->reportBedNewLine(bedEntry); } } bedEntry = nullBed; } _bed->Close(); }
void BedShuffle::ShuffleWithExclusions() { BED bedEntry; _bed->Open(); while (_bed->GetNextBed(bedEntry)) { if (_bed->_status == BED_VALID) { // keep looking as long as the chosen // locus happens to overlap with regions // that the user wishes to exclude. int tries = 0; bool haveOverlap = false; do { // choose a new locus ChooseLocus(bedEntry); haveOverlap = _exclude->anyHits(bedEntry.chrom, bedEntry.start, bedEntry.end, bedEntry.strand, false, false, _overlapFraction, false); tries++; } while ((haveOverlap == true) && (tries <= MAX_TRIES)); if (tries > MAX_TRIES) { cerr << "Error, line " << _bed->_lineNum << ": tried " << MAX_TRIES << " potential loci for entry, but could not avoid excluded regions. Ignoring entry and moving on." << endl; } else { _bed->reportBedNewLine(bedEntry); } } } _bed->Close(); }
void BedShuffle::Shuffle() { BED bedEntry; _bed->Open(); while (_bed->GetNextBed(bedEntry)) { if (_bed->_status == BED_VALID) { ChooseLocus(bedEntry); _bed->reportBedNewLine(bedEntry); } } _bed->Close(); }
void BedShuffle::Shuffle() { int lineNum = 0; BED bedEntry, nullBed; // used to store the current BED line from the BED file. BedLineStatus bedStatus; _bed->Open(); while ((bedStatus = _bed->GetNextBed(bedEntry, lineNum)) != BED_INVALID) { if (bedStatus == BED_VALID) { ChooseLocus(bedEntry); _bed->reportBedNewLine(bedEntry); bedEntry = nullBed; } } _bed->Close(); }