fabf13fff3e3abaf7ef83c69a8c60d0142c288a1 braney Fri May 15 12:05:59 2026 -0700 fix two remaining quickLift issues on UCSC RefSeq item detail page: CCDS link routes to source assembly (with coords lifted back) so the ccdsGene handler doesn't try to open the hub-virtual db, and Get Genomic Sequence Near Gene now reads sequence from the destination assembly at the lifted exon coordinates refs #36125 diff --git src/hg/hgc/ccdsClick.c src/hg/hgc/ccdsClick.c index 07572f58d78..9eabd5ca062 100644 --- src/hg/hgc/ccdsClick.c +++ src/hg/hgc/ccdsClick.c @@ -3,65 +3,78 @@ /* Copyright (C) 2013 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 "ccdsClick.h" #include "ccdsInfo.h" #include "ccdsNotes.h" #include "ccdsGeneMap.h" #include "geneSimilarities.h" #include "genbank.h" #include "genePred.h" #include "genePredReader.h" #include "ensFace.h" #include "mgcClick.h" #include "htmshell.h" +#include "quickLift.h" +#include "trackHub.h" static struct ccdsInfo *getCcdsInfoForSrcDb(struct sqlConnection *conn, char *acc) /* Get a ccdsInfo object for a RefSeq, ensembl, or vega gene, if it * exists, otherwise return NULL */ { if (sqlTableExists(conn, "ccdsInfo")) return ccdsInfoSelectByMrna(conn, acc); else return NULL; } void printCcdsExtUrl(char *ccdsId) /* Print out URL to link to CCDS database at NCBI */ { printf("https://www.ncbi.nlm.nih.gov/CCDS/CcdsBrowse.cgi?REQUEST=CCDS&BUILDS=ALLBUILDS&DATA=%s", ccdsId); } -static void printCcdsUrlForSrcDb(struct sqlConnection *conn, struct ccdsInfo *ccdsInfo) +static void printCcdsUrlForSrcDb(struct trackDb *tdb, struct ccdsInfo *ccdsInfo) /* Print out CCDS hgc URL for a refseq, ensembl, or vega gene, if it * exists. */ { +// When the gene track is quickLifted, the CCDS tables live with the +// source assembly, so route the click to liftDb and lift the window +// coords back to source space. +char *liftDb = (tdb != NULL) ? trackDbSetting(tdb, "quickLiftDb") : NULL; +char *urlDb = (liftDb != NULL) ? liftDb : database; +char *urlChrom = seqName; +int urlStart = winStart, urlEnd = winEnd; +if (liftDb != NULL) + quickLiftLiftPos(trackHubSkipHubName(database), liftDb, + seqName, winStart, winEnd, + &urlChrom, &urlStart, &urlEnd); printf("../cgi-bin/hgc?%s&g=ccdsGene&i=%s&c=%s&o=%d&l=%d&r=%d&db=%s", - cartSidUrlString(cart), ccdsInfo->ccds, seqName, - winStart, winStart, winEnd, database); + cartSidUrlString(cart), ccdsInfo->ccds, urlChrom, + urlStart, urlStart, urlEnd, urlDb); } -void printCcdsForSrcDb(struct sqlConnection *conn, char *acc) +void printCcdsForSrcDb(struct sqlConnection *conn, struct trackDb *tdb, char *acc) /* Print out CCDS hgc link for a refseq, ensembl, or vega gene, if it * exists. */ { struct ccdsInfo *ccdsInfo = getCcdsInfoForSrcDb(conn, acc);; if (ccdsInfo != NULL) { printf("CCDS: %s
", ccdsInfo->ccds); } } struct ccdsGeneMap *getCcdsGenesForMappedGene(struct sqlConnection *conn, char *acc, char *mapTable) /* get a list of ccds genes associated with a current and window from a * mapping table, or NULL */ { struct ccdsGeneMap *ccdsGenes = NULL; if (sqlTableExists(conn, mapTable) && sqlTableExists(conn, "ccdsInfo")) ccdsGenes = ccdsGeneMapSelectByGeneOver(conn, mapTable, acc, seqName, winStart, winEnd, 0.0); slSort(&ccdsGenes, ccdsGeneMapCcdsIdCmp); return ccdsGenes;