struct rbTree *bedBkToTree(struct binKeeper *bk) /* Make a rangeTree covering all exons in tree. */ { struct binElement *el, *list = binKeeperFindAll(bk); struct rbTree *tree = rangeTreeNew(); for (el = list; el != NULL; el = el->next) { struct bed *bed = el->val; bedIntoRangeTree(bed, tree); } slFreeList(&list); return tree; }
void doStrand(struct bed *start, struct bed *end, FILE *f) /* Assuming all beds from start up to end are on same strand, * make a merged bed with all their blocks and output it. */ { struct rbTree *rangeTree = rangeTreeNew(); struct bed *bed; for (bed = start; bed != end; bed = bed->next) bedIntoRangeTree(bed, rangeTree); bed = bedFromRangeTree(rangeTree, start->chrom, start->name, start->strand); bedTabOutN(bed, 12, f); bedFree(&bed); rangeTreeFree(&rangeTree); }
void geneAddBed(struct gene *gene, struct bed *bed) /* Add a bed into gene. */ { slAddHead(&gene->txList, bed); bedIntoRangeTree(bed, gene->exonTree); }