77421e0dc5eb5327b15ce1d12509d549068dfc73 angie Thu Feb 20 10:48:31 2020 -0800 featureBits .chain support: ignore chains on chroms other than the current chrom, and lineFileClose when done. tangentially refs #21650 diff --git src/hg/featureBits/featureBits.c src/hg/featureBits/featureBits.c index e4ff10d..c05d8e7 100644 --- src/hg/featureBits/featureBits.c +++ src/hg/featureBits/featureBits.c @@ -385,39 +385,43 @@ void fbOrChain(Bits *acc, char *track, char *chrom, int chromSize) /* Or in a chain file. */ { struct lineFile *lf; char fileName[512]; struct chain *chain; struct cBlock *b; chromFileName(track, chrom, fileName); if (!fileExists(fileName)) return; lf = lineFileOpen(fileName, TRUE); while ((chain = chainRead(lf)) != NULL) { + if (sameString(chrom, chain->tName)) + { for (b = chain->blockList; b != NULL; b = b->next) { int s = b->tStart, e = b->tEnd; if (s < 0) outOfRange(lf, chrom, chromSize); if (e > chromSize) outOfRange(lf, chrom, chromSize); bitSetRange(acc, b->tStart, b->tEnd - b->tStart); } + } chainFree(&chain); } +lineFileClose(&lf); } void isolateTrackPartOfSpec(char *spec, char track[512]) /* Convert something like track:exon to just track */ { char *s; strncpy(track, spec, 512); s = strchr(track, ':'); if (s != NULL) *s = 0; } void orFile(Bits *acc, char *track, char *chrom, int chromSize) /* Or some sort of file into bits. */ {