ec4ec036af9e086a93c98700aba30b4d8048385d braney Wed Apr 3 12:34:02 2024 -0700 ongoing work on quickLift diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 0a1a35d..75151c7 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -9619,38 +9619,52 @@ if (s < 0 || s + size > seq->size) errAbort("Out of range! %d-%d not in %d-%d", s, s+size, 0, size); toUpperN(seq->dna + s, size); } } } static struct bed *getBedsFromBigBedRange(struct trackDb *tdb, char *geneName) /* get a list of beds from a bigBed in the current range */ { struct bbiFile *bbi; char *fileName = hReplaceGbdb(trackDbSetting(tdb, "bigDataUrl")); bbi = bigBedFileOpenAlias(fileName, chromAliasFindAliases); struct lm *lm = lmInit(0); -struct bigBedInterval *bb, *bbList = bigBedIntervalQuery(bbi, seqName, winStart, winEnd, 0, lm); +char *quickLiftFile = cloneString(trackDbSetting(tdb, "quickLiftUrl")); +struct hash *chainHash = NULL; +struct bigBedInterval *bb, *bbList = NULL; +if (quickLiftFile) + bbList = quickLiftIntervals(quickLiftFile, bbi, seqName, winStart, winEnd, &chainHash); +else + bbList = bigBedIntervalQuery(bbi, seqName, winStart, winEnd, 0, lm); + struct bed *bedList = NULL; char *bedRow[32]; char startBuf[16], endBuf[16]; for (bb = bbList; bb != NULL; bb = bb->next) { bigBedIntervalToRow(bb, seqName, startBuf, endBuf, bedRow, ArraySize(bedRow)); - struct bed *bed = bedLoadN(bedRow, 12); + struct bed *bed = NULL; + if (quickLiftFile) + { + if ((bed = quickLiftBed(bbi, chainHash, bb)) == NULL) + errAbort("can't port %s",bedRow[3]); + } + else + bed = bedLoadN(bedRow, 12); if (sameString(bed->name, geneName)) slAddHead(&bedList, bed); } lmCleanup(&lm); return bedList; } static int getSeqForBigGene(struct trackDb *tdb, char *geneName) /* Output sequence for a gene in a bigGenePred file. */ { struct hTableInfo *hti; AllocVar(hti); hti->hasCDS = TRUE; hti->hasBlocks = TRUE;