MCPcopy Create free account
hub / github.com/arq5x/bedtools2 / GetNextMergedBed

Method GetNextMergedBed

src/utils/bedFile/bedFile.cpp:274–326  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

272
273
274bool BedFile::GetNextMergedBed(BED &merged_bed) {
275
276 if (_bedStream->good()) {
277 BED bed;
278 // force sorting; hence third param = true
279 while (GetNextBed(bed, true)) {
280 if (_status == BED_VALID) {
281 if ((bed.start - _merged_end > 0) ||
282 (_merged_end < 0) ||
283 (bed.chrom != _merged_chrom))
284 {
285 if (_merged_start >= 0) {
286 merged_bed.chrom = _merged_chrom;
287 merged_bed.start = _merged_start;
288 merged_bed.end = _merged_end;
289
290 _merged_chrom = bed.chrom;
291 _merged_start = bed.start;
292 _merged_end = bed.end;
293
294 _total_flattened_length += \
295 (merged_bed.end - merged_bed.start);
296 return true;
297 }
298 else {
299 _merged_start = bed.start;
300 _merged_chrom = bed.chrom;
301 _merged_end = bed.end;
302 }
303 }
304 else if (bed.end > _merged_end)
305 {
306 _merged_end = bed.end;
307 }
308 }
309 }
310
311 // handle the last merged block in the file.
312 if (_status == BED_INVALID)
313 {
314 _status = BED_VALID;
315 merged_bed.chrom = _merged_chrom;
316 merged_bed.start = _merged_start;
317 merged_bed.end = _merged_end;
318
319 _total_flattened_length += \
320 (merged_bed.end - merged_bed.start);
321 return true;
322 }
323 }
324 _status = BED_INVALID;
325 return false;
326}
327
328
329unsigned long BedFile::getTotalLength(void) {

Callers 3

NextQueryMethod · 0.80
NextDatabaseMethod · 0.80
LoadNextItemMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected