72327e4e2d294b9d2fcb6cbdadd4e628c006345b braney Fri Sep 18 10:07:40 2026 -0700 bigChain: move the chain to bigChain conversion into the library chainRecToBigChain() and chainBlockToBigLink() sat in chainToBigChain.c next to its main(), so a CGI could not link against them. Move both into hg/lib/bigChain.c, add chainToBigChainOne() for one chain and chainToBigChainList() for a list, and leave the utility as a thin main(). No behavior change; the chainToBigChain test output is unchanged. refs #38382 diff --git src/hg/utils/chainToBigChain/chainToBigChain.c src/hg/utils/chainToBigChain/chainToBigChain.c index 2b6cc310740..6537e36ab40 100644 --- src/hg/utils/chainToBigChain/chainToBigChain.c +++ src/hg/utils/chainToBigChain/chainToBigChain.c @@ -15,85 +15,38 @@ " chainToBigChain chainIn bigChainOut bigLinkOut\n" "\n" "Output will be sorted\n" "\n" "To build bigBed files:\n" " bedToBigBed -type=bed6+6 -as=bigChain.as -tab data.bigChain hg38.chrom.sizes data.bb\n" " bedToBigBed -type=bed4+1 -as=bigLink.as -tab data.bigLink hg38.chrom.sizes data.link.bb\n" ); } /* Command line validation table. */ static struct optionSpec options[] = { {NULL, 0}, }; -struct bigChain *chainRecToBigChain(struct chain *chain) -/* make a bigChain from a chain */ -{ -struct bigChain *bc; -AllocVar(bc); -bc->chrom = cloneString(chain->tName); -bc->chromStart = chain->tStart; -bc->chromEnd = chain->tEnd; -char buf[128]; -safef(buf, sizeof(buf), "%d", chain->id); -bc->name = cloneString(buf); -bc->score = 1000; -bc->strand[0] = chain->qStrand; -bc->tSize = chain->tSize; -bc->qName = cloneString(chain->qName); -bc->qSize = chain->qSize; -bc->qStart = chain->qStart; -bc->qEnd = chain->qEnd; -bc->chainScore = chain->score; -return bc; -} - -struct bigLink *chainBlockToBigLink(struct chain *chain, struct cBlock *cblk) -/* make a chain link from a chain block */ -{ -struct bigLink *bl; -AllocVar(bl); -bl->chrom = cloneString(chain->tName); -bl->chromStart = cblk->tStart; -bl->chromEnd = cblk->tEnd; -char buf[128]; -safef(buf, sizeof(buf), "%d", chain->id); -bl->name = cloneString(buf); -bl->qStart = cblk->qStart; -return bl; -} - -void convertChain(struct chain *chain, struct bigChain **bigChains, struct bigLink **bigLinks) -/* convert on chain to bigChain and bigLink */ -{ -for (struct cBlock *cblk = chain->blockList; cblk != NULL; cblk = cblk->next) - { - slAddHead(bigLinks, chainBlockToBigLink(chain, cblk)); - } -slAddHead(bigChains, chainRecToBigChain(chain)); -} - static void convertChains(char *chainIn, struct bigChain **bigChains, struct bigLink **bigLinks) /* convert all chains to bigChains and links */ { struct chain *chain; struct lineFile *lf = lineFileOpen(chainIn, TRUE); while ((chain = chainRead(lf)) != NULL) { - convertChain(chain, bigChains, bigLinks); + chainToBigChainOne(chain, bigChains, bigLinks); chainFree(&chain); } lineFileClose(&lf); slSort(bigChains, bigChainCmpTarget); slSort(bigLinks, bigLinkCmpTarget); } static void bigChainWrite(char *bigChainOut, struct bigChain *bigChains) /* write bigChain records to a tab file */ { FILE *fh = mustOpen(bigChainOut, "w"); for (struct bigChain *bc = bigChains; bc != NULL; bc = bc->next) bigChainTabOut(bc, fh); carefulClose(&fh); }