61baacb2558c51f93fe4219337d4b5a0b21a6faa
jcasper
  Tue Aug 13 22:16:36 2024 -0700
hgGene will start linking to our ncbiRefSeq track instead of refGene, refs #34291

diff --git src/hg/hgGene/synonym.c src/hg/hgGene/synonym.c
index d2c8f76..8e7f732 100644
--- src/hg/hgGene/synonym.c
+++ src/hg/hgGene/synonym.c
@@ -18,30 +18,38 @@
 /* Print URL for Entrez browser on a nucleotide. */
 {
 fprintf(f, "../cgi-bin/hgc?%s&g=mrna&i=%s&c=%s&o=%d&t=%d&l=%d&r=%d&db=%s",
     cartSidUrlString(cart), accession, curGeneChrom, curGeneStart, curGeneEnd, curGeneStart,
     curGeneEnd, database);
 }
 
 static void printOurRefseqUrl(FILE *f, char *accession)
 /* Print URL for Entrez browser on a nucleotide. */
 {
 fprintf(f, "../cgi-bin/hgc?%s&g=refGene&i=%s&c=%s&o=%d&l=%d&r=%d&db=%s",
     cartSidUrlString(cart),  accession, curGeneChrom, curGeneStart, curGeneStart,
     curGeneEnd, database);
 }
 
+static void printNcbiRefseqUrl(FILE *f, char *accession)
+/* Print URL for ncbiRefSeq in hgc on a nucleotide. */
+{
+fprintf(f, "../cgi-bin/hgc?%s&g=ncbiRefSeq&i=%s&c=%s&o=%d&l=%d&r=%d&db=%s",
+    cartSidUrlString(cart),  accession, curGeneChrom, curGeneStart, curGeneStart,
+    curGeneEnd, database);
+}
+
 static int countAlias(char *id, struct sqlConnection *conn)
 /* Count how many valid gene symbols to be printed */
 {
 char query[256];
 struct sqlResult *sr;
 int cnt = 0;
 char **row;
 sqlSafef(query, sizeof(query), "select alias from kgAlias where kgId = '%s' order by alias", id);
 sr = sqlGetResult(conn, query);
 
 row = sqlNextRow(sr);
 while (row != NULL)
     {
     /* skip kgId and the maint gene symbol (curGeneName) */
     if ((!sameWord(id, row[0])) && (!sameWord(row[0], curGeneName))) 
@@ -308,45 +316,58 @@
     /* get Gene Symbol and RefSeq accession from Zebrafish-specific */
     /* cross-reference table */
     printGeneSymbol(id, xrefTable, geneIdCol, conn);
     refSeqAcc = getRefSeqAcc(id, xrefTable, geneIdCol, conn);
     hPrintf("<B>ENSEMBL ID:</B> %s", id);
     }
 else
     {
     char query[256];
     char *toRefTable = genomeOptionalSetting("knownToRef");
     if (toRefTable != NULL && sqlTableExists(conn, toRefTable))
         {
 	sqlSafef(query, sizeof(query), "select value from %s where name='%s'", toRefTable,
 		id);
 	refSeqAcc = emptyForNull(sqlQuickString(conn, query));
+        if (sqlTableExists(conn, "ncbiRefSeqLink"))
+            {
+            // Find the versioned accession number.  Technically GENCODE might have specified a different
+            // version (e.g. their record lists NM_XXX.5, we cut off the .5 for kgXref, and our (older)
+            // ncbiRefSeq track still has the .4 version of the transcript).  Probably better to link to
+            // an older transcript version than nothing though.  On the plus side, this should help
+            // insulate kgXref from changes to ncbiRefSeq.
+            sqlSafef(query, sizeof(query), "select id from ncbiRefSeqLink where id like '%s%%'", refSeqAcc);
+            refSeqAcc = emptyForNull(sqlQuickString(conn, query));
+            }
 	}
     if (sqlTableExists(conn, "kgXref"))
 	{
 	sqlSafef(query, sizeof(query), "select mRNA from kgXref where kgID='%s'", id);
 	mrnaAcc = emptyForNull(sqlQuickString(conn, query));
 	}
     if (sameWord(genome, "C. elegans"))
 	hPrintf("<B>WormBase ID:</B> %s<BR>", id);
     else
 	hPrintf("<B>UCSC ID:</B> %s<BR>", isGencode2 ? curAlignId : curGeneId );
     }
     
 if (refSeqAcc[0] != 0)
     {
     hPrintf("<B>RefSeq Accession: </B> <A HREF=\"");
+    if (stringIn(".",refSeqAcc))
+        printNcbiRefseqUrl(stdout, refSeqAcc);
+    else
         printOurRefseqUrl(stdout, refSeqAcc);
     hPrintf("\">%s</A><BR>\n", refSeqAcc);
     }
 else if (mrnaAcc[0] != 0)
     {
     sqlSafef(condStr, sizeof(condStr), "acc = '%s'", mrnaAcc);
     if (sqlGetField(database, gbCdnaInfoTable, "acc", condStr) != NULL)
         {
     	hPrintf("<B>Representative RNA: </B> <A HREF=\"");
     	printOurMrnaUrl(stdout, mrnaAcc);
     	hPrintf("\">%s</A><BR>\n", mrnaAcc);
     	}
     else
     /* do not show URL link if it is not found in gbCdnaInfoTable */
     	{