675293a87172d440c9c78b1c1bdc54610bc35a77 braney Tue May 7 14:14:26 2024 -0700 changes to HPRC rearrangements track in response to SAB refs #33484 diff --git src/hg/utils/chainInDel/chainInDel.c src/hg/utils/chainInDel/chainInDel.c index c8ad927..93625d2 100644 --- src/hg/utils/chainInDel/chainInDel.c +++ src/hg/utils/chainInDel/chainInDel.c @@ -1,110 +1,110 @@ /* chainInDel - output a bed file with indels within the given chain. */ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" #include "chain.h" void usage() /* Explain usage and exit. */ { errAbort( "chainInDel - output a bed file with indels within the given chain\n" "usage:\n" " chainIndel file.chain label indels.bed\n" "options:\n" " -xxx=XXX\n" ); } /* Command line validation table. */ static struct optionSpec options[] = { {NULL, 0}, }; int chainCmp(const void *va, const void *vb) /* Compare to sort based on start. */ { const struct chain *a = *((struct chain **)va); const struct chain *b = *((struct chain **)vb); int ret = strcmp(a->qName, b->qName); if (ret) return ret; ret = a->tStart - b->tStart; if (ret) return ret; return a->qStart - b->qStart; } static void parseChrom(struct chain *chains, char *label, FILE *inDelF) { slSort(&chains, chainCmp); struct chain *chain; for(chain = chains; chain ; chain = chain->next) { struct cBlock *cb = chain->blockList; for(; cb->next != NULL; cb = cb->next) { - fprintf(inDelF,"%s %d %d %s %d\n", chain->tName, + fprintf(inDelF,"%s\t%d\t%d\t%s\t%d\n", chain->tName, cb->tEnd, cb->next->tStart, label, cb->next->qStart - cb->qEnd); } } } struct chainHead { struct chainHead *next; struct chain *chains; }; struct chainHead *readChains(char *inChain) { struct lineFile *lf = lineFileOpen(inChain, TRUE); struct hash *hash = newHash(0); struct chainHead *chainHead, *chainHeads = NULL; struct chain *chain; while ((chain = chainRead(lf)) != NULL) { if ((chainHead = hashFindVal(hash, chain->tName)) == NULL) { AllocVar(chainHead); slAddHead(&chainHeads, chainHead); hashAdd(hash, chain->tName, chainHead); } slAddHead(&chainHead->chains, chain); } return chainHeads; } void chainInDel(char *inChain, char *label, char *inDels) /* chainInDel - output a set of rearrangement breakpoints. */ { struct chainHead *chainHeads = readChains(inChain); FILE *inDelF = mustOpen(inDels, "w"); for (; chainHeads != NULL; chainHeads = chainHeads->next) { struct chain *chains = chainHeads->chains; parseChrom(chains, label, inDelF); } } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 4) usage(); chainInDel(argv[1], argv[2], argv[3]); return 0; }