1db5c89d97fdd3c3580c4ba9b18eba6b5029c97d max Thu Sep 17 05:09:56 2026 -0700 hgSearch: highlight MANE transcript(s) in RefSeq protein-position search results, refs #38285 #Preview2 week - bugs introduced now will need a build patch to fix A gene-symbol + codon-range search (e.g. "BRCA1 100-200") maps to every RefSeq isoform prediction sharing that genomic footprint, which can be dozens of near-identical NP_ accessions with no indication of which one is the clinically-relevant MANE transcript. Cross-reference the mane bigGenePred track by genomic overlap + protein accession and call out the MANE Select/Plus Clinical transcript(s) in their own section above the rest, gated behind showManeInSearch (default off) in hg.conf. diff --git src/hg/inc/bigBedFind.h src/hg/inc/bigBedFind.h index 8b2d076d4d0..3a6156fd46a 100644 --- src/hg/inc/bigBedFind.h +++ src/hg/inc/bigBedFind.h @@ -4,16 +4,34 @@ * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #ifndef BIGBEDFIND_H #define BIGBEDFIND_H boolean findBigBedPosInTdb(struct cart *cart, char *db, struct trackDb *tdb, char *term, struct hgPositions *hgp, struct hgFindSpec *hfs, boolean measureTiming); /* Find a position in a single trackDb entry */ boolean findBigBedPosInTdbList(struct cart *cart, char *db, struct trackDb *tdbList, char *term, struct hgPositions *hgp, struct hgFindSpec *hfs, boolean measureTiming); /* find a term in a list of tracks which may include a bigBed */ struct trackDb *getSearchableBigBeds(struct trackDb *tdbList); /* Given a list of tracks, return those that are searchable */ boolean isTdbSearchable(struct trackDb *tdb); /* Check if a single tdb is searchable */ + +struct maneLookup *maneLookupOpen(char *db, struct trackDb **tdbList); +/* Open the "mane" bigGenePred track for db, if it exists, for repeated calls to + * maneStatusForRegion. Returns NULL if this assembly has no mane track (e.g. non-human, + * or hg19) -- callers should treat that as "can't tell", not an error. tdbList is passed + * through to tdbForTrack, so pass a pointer already shared with other tdbForTrack calls in + * the same request to avoid a second trackDb load. */ + +char *maneStatusForRegion(struct maneLookup *ml, char *chrom, int start, int end, + struct slName *protAccList, char **retProtAcc); +/* Look for a MANE transcript overlapping chrom:start-end whose NCBI protein accession + * (ignoring version suffix) matches one of protAccList. Returns a cloned "MANE Select" / + * "MANE Plus Clinical" string, or NULL if ml is NULL or there is no match. On a match, + * *retProtAcc is set to a cloned copy of the matching (versioned) NCBI protein accession, + * so callers can identify the single MANE transcript out of a group of merged accessions. */ + +void maneLookupClose(struct maneLookup **pMl); +/* Close a maneLookup opened by maneLookupOpen. */ #endif /* BIGBEDFIND_H */