54406b80d5d435970989acff7b22dd6146c6b411 braney Sat Jan 22 15:24:59 2022 -0800 adding chrom alias support to big files diff --git src/hg/hgc/bigDbSnpClick.c src/hg/hgc/bigDbSnpClick.c index 16fe621..cebb059 100644 --- src/hg/hgc/bigDbSnpClick.c +++ src/hg/hgc/bigDbSnpClick.c @@ -1,27 +1,28 @@ /* Show details for bigDbSnp track items. */ /* Copyright (C) 2019 The Regents of the University of California * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "hgc.h" #include "bigDbSnp.h" #include "dbSnpDetails.h" #include "bPlusTree.h" #include "htslib/bgzf.h" #include "soTerm.h" +#include "chromAlias.h" static struct dbSnpDetails *getDetails(struct bigDbSnp *bds, char *detailsFileOrUrl) /* Seek to the offset for this variant in detailsFileOrUrl, read the line and load as * struct dbSnpDetails. */ { bits64 offset = bds->_dataOffset; bits64 len = bds->_dataLen; char *line = readOneLineMaybeBgzip(detailsFileOrUrl, offset, len); // Newline must be trimmed or else it messes up parsing of final column if empty! if (line[len-1] == '\n') line[len-1] = '\0'; char *row[DBSNPDETAILS_NUM_COLS+1]; int wordCount = chopTabs(line, row); if (wordCount != DBSNPDETAILS_NUM_COLS) errAbort("dbSnpDetails: expected %d tab-separated words at offset %Ld in %s, got %d", @@ -329,31 +330,31 @@ } puts("</p>"); } bptFileDetach(&bpt); lmCleanup(&lm); } void doBigDbSnp(struct trackDb *tdb, char *rsId) /* Show details for bigDbSnp item. */ { int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); char *fileOrUrl = hReplaceGbdb(trackDbSetting(tdb, "bigDataUrl")); if (isEmpty(fileOrUrl)) errAbort("bigDbSnpClick: trackDb is missing bigDataUrl setting"); -struct bbiFile *bbi = bigBedFileOpen(fileOrUrl); +struct bbiFile *bbi = bigBedFileOpenAlias(fileOrUrl, chromAliasGetHash(database)); boolean found = FALSE; char *chrom = cartString(cart, "c"); int ivStart = start, ivEnd = end; if (start == end) { // item is an insertion; expand the search range from 0 bases to 2 so we catch it: ivStart = max(0, start-1); ivEnd++; } struct lm *lm = lmInit(0); struct bigBedInterval *bbList = bigBedIntervalQuery(bbi, chrom, ivStart, ivEnd, 0, lm); struct bigBedInterval *bb; for (bb = bbList; bb != NULL; bb = bb->next) { if (!startsWithWord(rsId, bb->rest))