| 272 | |
| 273 | |
| 274 | bool 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 | |
| 329 | unsigned long BedFile::getTotalLength(void) { |
no outgoing calls
no test coverage detected