8165601dddc27978eb4a2fe2654ba81212e30473
braney
  Sat May 31 11:46:07 2025 -0700
hgGene changes for quickLift

diff --git src/hg/hgGene/sequence.c src/hg/hgGene/sequence.c
index 206953a5b8c..d8fb75fa54e 100644
--- src/hg/hgGene/sequence.c
+++ src/hg/hgGene/sequence.c
@@ -73,47 +73,80 @@
     sqlSafef(query, sizeof(query), "select count(*) from %s where name = '%s'",
     	table, geneId);
     if (sqlExists(conn, query))
         {
 	hPrintf("<A HREF=\"../cgi-bin/hgGene?%s&%s=1&hgg_gene=%s\" class=\"toc\">",
 	       cartSidUrlString(cart), command, geneId);
 	hPrintf("%s</A>", label);
 	gotHyperlink = TRUE;
 	}
     }
 if (!gotHyperlink)
     hPrintf("%s", label);
 webPrintLinkCellEnd();
 }
 
+char *hgcPathAndSettings()
+/* Return path with hgc and session state variable. */
+{
+static struct dyString *dy = NULL;
+if (dy == NULL)
+    {
+    dy = dyStringNew(128);
+    dyStringPrintf(dy, "%s?%s", hgcName(), cartSidUrlString(cart));
+    }
+return dy->string;
+}
 
 void printMrnaSeqLink(struct sqlConnection *conn, char *geneId)
 /* Print out link to fetch mRNA. */
 {
+if (liftDb) // if we're quicklifting go through hgc because local functions assume sequence can come from files
+    {
+    char *command = "htcGeneMrna";
+    webPrintWideCellStart(2, HG_COL_TABLE);
+    printf("<A class=\"toc\" HREF=\"%s&g=%s&i=%s&c=%s&l=%d&r=%d&o=%s&table=%s\">",
+       hgcPathAndSettings(), command, geneId, curGenePred->chrom, curGenePred->txStart, curGenePred->txEnd, globalTdb->track,globalTdb->track);
+    printf("Predicted mRNA from genomic DNA</A>\n");
+    webPrintLinkCellEnd();
+    return;
+    }
+
 char *title = "mRNA";
 char *tableId = "knownGene";
 if (genomeOptionalSetting("knownGeneMrna") != NULL)
     {
     title = "mRNA (may differ from genome)";
     tableId = "knownGeneMrna";
     }
 printSeqLink(conn, geneId, tableId, hggDoGetMrnaSeq, title, 2);
 }
 
 void printProteinSeqLink(struct sqlConnection *conn, char *geneId)
 /* Print out link to fetch protein. */
 {
+if (liftDb) // if we're quicklifting go through hgc because local functions assume sequence can come from files
+    {
+    char *command = "htcTranslatedPredMRna";
+    webPrintWideCellStart(3, HG_COL_TABLE);
+    printf("<A class=\"toc\" HREF=\"%s&g=%s&i=%s&c=%s&l=%d&r=%d&o=%s&table=%s\">",
+       hgcPathAndSettings(), command, geneId, curGenePred->chrom, curGenePred->txStart, curGenePred->txEnd, "translate", globalTdb->track);
+    printf("Translated Protein from genomic DNA</A>\n");
+    webPrintLinkCellEnd();
+    return;
+    }
+
 char *table = genomeSetting("knownGenePep");
 char query[256];
 char title[128];
 sqlSafef(query, sizeof(query), 
 	"select length(seq) from %s where name='%s'" , table,  geneId);
 int protSize = sqlQuickNum(conn, query);
 if (protSize > 0)
     {
     safef(title, sizeof(title), "Protein (%d aa)", protSize);
     printSeqLink(conn, geneId, "knownGenePep", hggDoGetProteinSeq,
 	    title, 1);
     }
 else
     {
     webPrintLinkCellStart();