src/hg/hgc/hgc.c 1.1634

1.1634 2010/05/24 20:19:22 kent
Cleared up some more track/table mixups in the details pages involving printAlignments in refGene. I tested on quite a number of the details pages that use printAlignments, and made changes to get the transMap and retroGene stuff to work. It looks like some of the retroGene stuff has not worked in some time actually.
Index: src/hg/hgc/hgc.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgc/hgc.c,v
retrieving revision 1.1633
retrieving revision 1.1634
diff -b -B -U 4 -r1.1633 -r1.1634
--- src/hg/hgc/hgc.c	21 May 2010 16:34:26 -0000	1.1633
+++ src/hg/hgc/hgc.c	24 May 2010 20:19:22 -0000	1.1634
@@ -2497,11 +2497,11 @@
 if (hGenBankHaveSeq(database, item, NULL))
     {
     printf("<H3>%s/Genomic Alignments</H3>", item);
     if (sameString("protein", subType))
-        printAlignments(pslList, start, "htcProteinAli", tdb->track, item);
+        printAlignments(pslList, start, "htcProteinAli", tdb->table, item);
     else
-        printAlignments(pslList, start, "htcCdnaAli", tdb->track, item);
+        printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
     }
 else
     {
     /* just dump the psls */
@@ -5179,16 +5179,16 @@
 return ((psl->tStart == startFirst) && sameString(psl->tName, seqName)) == isClicked;
 }
 
 void printAlignmentsSimple(struct psl *pslList, int startFirst, char *hgcCommand,
-                           char *trackName, char *itemIn)
+                           char *tableName, char *itemIn)
 /* Print list of mRNA alignments, don't add extra textual link when
  * doesn't honor hgcCommand. */
 {
 struct psl *psl;
 int aliCount = slCount(pslList);
 boolean isClicked;
-if (pslList == NULL || trackName == NULL)
+if (pslList == NULL || tableName == NULL)
     return;
 
 if (aliCount > 1)
     printf("The alignment you clicked on is first in the table below.<BR>\n");
@@ -5205,9 +5205,9 @@
 	{
 	if (isPslToPrintByClick(psl, startFirst, isClicked))
 	    {
             char otherString[512];
-	    safef(otherString, sizeof(otherString), "%d&aliTrack=%s", psl->tStart, trackName);
+	    safef(otherString, sizeof(otherString), "%d&aliTable=%s", psl->tStart, tableName);
             printf("<A HREF=\"%s&db=%s&position=%s%%3A%d-%d\">browser</A> | ",
                    hgTracksPathAndSettings(), database, psl->tName, psl->tStart+1, psl->tEnd);
 	    hgcAnchorSomewhere(hgcCommand, itemIn, otherString, psl->tName);
 	    printf("%5d  %5.1f%%  %9s     %s %9d %9d  %20s %5d %5d %5d</A>",
@@ -5222,15 +5222,14 @@
 printf("</TT></PRE>");
 }
 
 void printAlignments(struct psl *pslList, int startFirst, char *hgcCommand,
-		     char *trackName, char *itemIn)
+		     char *tableName, char *itemIn)
 /* Print list of mRNA alignments. */
 {
-if (pslList == NULL || trackName == NULL)
+if (pslList == NULL || tableName == NULL)
     return;
-char *tableName = hGetTableForTrack(database, trackName);
-printAlignmentsSimple(pslList, startFirst, hgcCommand, trackName, itemIn);
+printAlignmentsSimple(pslList, startFirst, hgcCommand, tableName, itemIn);
 
 struct psl *psl = pslList;
 for (psl = pslList; psl != NULL; psl = psl->next)
     {
@@ -5242,10 +5241,10 @@
         && sameString(psl->tName, seqName)
 	)
 	{
         char otherString[512];
-	safef(otherString, sizeof(otherString), "%d&aliTrack=%s",
-	      psl->tStart, trackName);
+	safef(otherString, sizeof(otherString), "%d&aliTable=%s",
+	      psl->tStart, tableName);
 	hgcAnchorSomewhere("htcCdnaAliInWindow", cgiEncode(psl->qName),
 			   otherString, psl->tName);
 	printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n");
 	}
@@ -5381,9 +5380,9 @@
 printf("<H3>%s/Genomic Alignments</H3>", type);
 if (startsWith("mrnaBlastz",tdb->table))
     slSort(&pslList, pslCmpScoreDesc);
 
-printAlignments(pslList, start, "htcCdnaAli", track, acc);
+printAlignments(pslList, start, "htcCdnaAli", table, acc);
 
 printTrackHtml(tdb);
 hFreeConn(&conn);
 }
@@ -5401,9 +5400,9 @@
  * set it up so they can click through to the alignment. */
 if (hGenBankHaveSeq(database, item, NULL))
     {
     printf("<H3>%s/Genomic Alignments</H3>", item);
-    printAlignments(pslList, start, "htcCdnaAli", tdb->track, item);
+    printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
     }
 else
     {
     /* print out the psls */
@@ -6507,10 +6506,9 @@
 struct sqlResult *sr;
 char **row;
 struct psl *psl;
 struct dnaSeq *rnaSeq;
-char *type;
-char *rootTable;
+char *aliTable;
 int start;
 unsigned int cdsStart = 0, cdsEnd = 0;
 boolean hasBin;
 char accChopped[512] ;
@@ -6519,11 +6517,10 @@
 
 /* Print start of HTML. */
 writeFramesetType();
 puts("<HTML>");
-type = cartString(cart, "aliTrack");
-rootTable = hGetTableForTrack(database,type);
-printf("<HEAD>\n<TITLE>%s vs Genomic [%s]</TITLE>\n</HEAD>\n\n", accChopped, type);
+aliTable = cartString(cart, "aliTable");
+printf("<HEAD>\n<TITLE>%s vs Genomic [%s]</TITLE>\n</HEAD>\n\n", accChopped, aliTable);
 
 /* Get some environment vars. */
 start = cartInt(cart, "o");
 
@@ -6544,9 +6541,9 @@
     sqlFreeResult(&sr);
     }
 
 /* Look up alignments in database */
-hFindSplitTable(database, seqName, rootTable, table, &hasBin);
+hFindSplitTable(database, seqName, aliTable, table, &hasBin);
 sprintf(query, "select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d",
 	table, acc, seqName, start);
 sr = sqlGetResult(conn, query);
 if ((row = sqlNextRow(sr)) == NULL)
@@ -6554,27 +6551,27 @@
 psl = pslLoad(row+hasBin);
 sqlFreeResult(&sr);
 
 /* get bz rna snapshot for blastz alignments */
-if (sameString("mrnaBlastz", type) || sameString("pseudoMrna", type))
+if (sameString("mrnaBlastz", aliTable) || sameString("pseudoMrna", aliTable))
     {
     struct sqlConnection *conn = hAllocConn(database);
     unsigned retId = 0;
     sprintf(accTmp,"bz-%s",acc);
     if (hRnaSeqAndIdx(accTmp, &rnaSeq, &retId, conn) == -1)
         rnaSeq = hRnaSeq(database, acc);
     hFreeConn(&conn);
     }
-else if (sameString("HInvGeneMrna", type))
+else if (sameString("HInvGeneMrna", aliTable))
     {
     /* get RNA accession for the gene id in the alignment */
     sprintf(query, "select mrnaAcc from HInv where geneId='%s'", acc);
     rnaSeq = hRnaSeq(database, sqlQuickString(conn, query));
     }
 else
     rnaSeq = hRnaSeq(database, acc);
 
-if (startsWith("xeno", type))
+if (startsWith("xeno", aliTable))
     showSomeAlignment(psl, rnaSeq, gftDnaX, 0, rnaSeq->size, NULL, cdsStart, cdsEnd);
 else
     showSomeAlignment(psl, rnaSeq, gftDna, 0, rnaSeq->size, NULL, cdsStart, cdsEnd);
 hFreeConn(&conn);
@@ -6589,25 +6586,25 @@
 struct sqlResult *sr;
 char **row;
 struct psl *wholePsl, *partPsl;
 struct dnaSeq *rnaSeq;
-char *track;
+char *aliTable;
 int start;
 unsigned int cdsStart = 0, cdsEnd = 0;
 boolean hasBin;
 char accChopped[512] ;
 safef(accChopped, sizeof(accChopped), "%s",acc);
 chopSuffix(accChopped);
 
 /* Get some environment vars. */
-track = cartString(cart, "aliTrack");
+aliTable = cartString(cart, "aliTable");
 start = cartInt(cart, "o");
 
 /* Print start of HTML. */
 writeFramesetType();
 puts("<HTML>");
 printf("<HEAD>\n<TITLE>%s vs Genomic [%s]</TITLE>\n</HEAD>\n\n",
-       accChopped, track);
+       accChopped, aliTable);
 
 /* Get cds start and stop, if available */
 conn = hAllocConn(database);
 if (sqlTableExists(conn, "gbCdnaInfo"))
@@ -6626,9 +6623,9 @@
 	}
     sqlFreeResult(&sr);
     }
 
-if (startsWith("user", track))
+if (startsWith("user", aliTable))
     {
     char *pslName, *faName, *qName;
     struct lineFile *lf;
     bioSeq *oSeqList = NULL, *oSeq = NULL;
@@ -6677,10 +6674,10 @@
     }
 else
     {
     /* Look up alignments in database */
-    struct trackDb *tdb = hashMustFindVal(trackHash, track);
-    hFindSplitTable(database, seqName, tdb->table, table, &hasBin);
+    // struct trackDb *tdb = hashMustFindVal(trackHash, aliTable);	// ugly
+    hFindSplitTable(database, seqName, aliTable, table, &hasBin);
     safef(query, sizeof(query),
 	  "select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d",
 	  table, acc, seqName, start);
     sr = sqlGetResult(conn, query);
@@ -6688,11 +6685,13 @@
 	errAbort("Couldn't find alignment for %s at %d", acc, start);
     wholePsl = pslLoad(row+hasBin);
     sqlFreeResult(&sr);
 
-    if (startsWith("ucscRetroAli", track) || startsWith("retroMrnaAli", track) || sameString("pseudoMrna", track))
+    if (startsWith("ucscRetroAli", aliTable) || startsWith("retroMrnaAli", aliTable) || sameString("pseudoMrna", aliTable))
 	{
         rnaSeq = NULL;
+	char *trackName = hGetTrackForTable(database, aliTable);
+	struct trackDb *tdb = hashMustFindVal(trackHash, trackName);
         char *spec = trackDbRequiredSetting(tdb, BASE_COLOR_USE_SEQUENCE);
         char *specCopy = cloneString(spec);
 
         // value is: extFile seqTbl extFileTbl
@@ -6701,9 +6700,9 @@
         if ((nwords != ArraySize(words)) || !sameString(words[0], "extFile"))
             errAbort("invalid %s track setting: %s", BASE_COLOR_USE_SEQUENCE, spec);
         rnaSeq = hDnaSeqGet(database, acc, words[1], words[2]);
 	}
-    else if (sameString("HInvGeneMrna", track))
+    else if (sameString("HInvGeneMrna", aliTable))
 	{
 	/* get RNA accession for the gene id in the alignment */
 	safef(query, sizeof(query), "select mrnaAcc from HInv where geneId='%s'",
 	      acc);
@@ -6717,9 +6716,9 @@
     partPsl = wholePsl;
 else
     partPsl = pslTrimToTargetRange(wholePsl, winStart, winEnd);
 
-if (startsWith("xeno", track))
+if (startsWith("xeno", aliTable))
     errAbort("htcCdnaAliInWindow does not support translated alignments.");
 else
     showSomePartialDnaAlignment(partPsl, wholePsl, rnaSeq,
 				NULL, cdsStart, cdsEnd);
@@ -7868,9 +7867,9 @@
 
 puts("<P>");
 puts("<B>Alignment Summary:</B><BR>\n");
 pslList = getAlignments(conn, tdb->table, item);
-printAlignments(pslList, start, "htcCdnaAli", tdb->track, item);
+printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
 
 puts("<P>");
 total = 0;
 for (i=0;  i < pslList -> blockCount;  i++)
@@ -9134,9 +9133,9 @@
 
 /* print alignments that track was based on */
 struct psl *pslList = getAlignments(conn, aliTbl, item);
 printf("<H3>Genomic Alignments</H3>");
-printAlignments(pslList, start, "htcCdnaAli", tdb->track, item);
+printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
 hFreeConn(&conn);
 
 printTrackHtml(tdb);
 }
@@ -9160,9 +9159,9 @@
 
 /* print alignments that track was based on */
 struct psl *pslList = getAlignments(conn, aliTbl, item);
 printf("<H3>Genomic Alignments</H3>");
-printAlignments(pslList, start, "htcCdnaAli", tdb->track, item);
+printAlignments(pslList, start, "htcCdnaAli", tdb->table, item);
 hFreeConn(&conn);
 
 printTrackHtml(tdb);
 }
@@ -10211,9 +10210,9 @@
 #endif /* NOT_USED */
 
     if (pslList != NULL)
         {
-        printAlignments(pslList, pslList->tStart, "htcCdnaAli", "mrna", \
+        printAlignments(pslList, pslList->tStart, "htcCdnaAli", "all_mrna", \
                 pg->name);
         htmlHorizontalLine();
         safef(chainTable_chrom,sizeof(chainTable_chrom), "%s_chainSelf",\
                 pg->chrom);
@@ -11403,9 +11402,9 @@
     slAddHead(&pslList, psl);
     }
 sqlFreeResult(&sr);
 slReverse(&pslList);
-printAlignments(pslList, start, "htcBlatXeno", tdb->track, itemName);
+printAlignments(pslList, start, "htcBlatXeno", tdb->table, itemName);
 printTrackHtml(tdb);
 }
 
 boolean parseRange(char *range, char **retSeq, int *retStart, int *retEnd)
@@ -11981,9 +11980,9 @@
     slAddHead(&pslList, psl);
     }
 sqlFreeResult(&sr);
 slReverse(&pslList);
-printAlignments(pslList, start, "htcBlatXeno", tdb->track, itemName);
+printAlignments(pslList, start, "htcBlatXeno", tdb->table, itemName);
 printTrackHtml(tdb);
 }
 
 void doTSS(struct trackDb *tdb, char *itemName)
@@ -12016,9 +12015,9 @@
     }
 
 sqlFreeResult(&sr);
 slReverse(&pslList);
-printAlignments(pslList, start, "htcCdnaAli", tdb->track, itemName);
+printAlignments(pslList, start, "htcCdnaAli", tdb->table, itemName);
 printTrackHtml(tdb);
 }
 
 void doEst3(char *itemName)
@@ -18736,13 +18735,13 @@
     for (psl = pslList; psl != NULL; psl = psl->next)
 	{
 	if (isPslToPrintByClick(psl, start, isClicked))
 	    {
-	    printf("<A HREF=\"%s&o=%d&g=htcProteinAli&i=%s&c=%s&l=%d&r=%d&db=%s&aliTrack=%s&pred=%s\">",
+	    printf("<A HREF=\"%s&o=%d&g=htcProteinAli&i=%s&c=%s&l=%d&r=%d&db=%s&aliTable=%s&pred=%s\">",
 		hgcPathAndSettings(), psl->tStart, psl->qName,  psl->tName,
 		psl->tStart, psl->tEnd, database,tdb->track, pred);
 	    printf("alignment</A> ");
-	    printf("<A HREF=\"%s&o=%d&g=htcGetBlastPep&i=%s&c=%s&l=%d&r=%d&db=%s&aliTrack=%s\">",
+	    printf("<A HREF=\"%s&o=%d&g=htcGetBlastPep&i=%s&c=%s&l=%d&r=%d&db=%s&aliTable=%s\">",
 		hgcPathAndSettings(), psl->tStart, psl->qName,  psl->tName,
 		psl->tStart, psl->tEnd, database,tdb->track);
 	    printf("peptide</A> ");
 	    printf("%5.1f%%    %5.1f%% %5d %5d %5.1f%%    %c   ",
@@ -21543,9 +21542,9 @@
 		 psl->qName);
 	if (hGenBankHaveSeq(database, itemName, NULL))
 	    {
 	    printf("<H3>%s/Genomic Alignments</H3>", name);
-	    printAlignments(psl, start, "htcCdnaAli", tdb->track,
+	    printAlignments(psl, start, "htcCdnaAli", tdb->table,
 			    encodedName);
 	    }
 	else
 	    {
@@ -22157,9 +22156,11 @@
 else if (startsWith("transMapAln", table) || startsWith("reconTransMapAln", table))
     transMapClickHandler(tdb, item);
 else if (startsWith("hgcTransMapCdnaAli", table))
     {
-    tdb = hashMustFindVal(trackHash, cartString(cart, "aliTrack"));
+    char *aliTable = cartString(cart, "aliTable");
+    char *track = hGetTrackForTable(database, aliTable);
+    tdb = hashMustFindVal(trackHash, track);
     transMapShowCdnaAli(tdb, item);
     }
 else if (sameWord(table, "mrna") || sameWord(table, "mrna2") ||
 	 startsWith("all_mrna",table) ||
@@ -22707,17 +22708,17 @@
     htcUserAli(item);
     }
 else if (sameWord(table, "htcGetBlastPep"))
     {
-    doGetBlastPep(item, cartString(cart, "aliTrack"));
+    doGetBlastPep(item, cartString(cart, "aliTable"));
     }
 else if (sameWord(table, "htcProteinAli"))
     {
-    htcProteinAli(item, cartString(cart, "aliTrack"));
+    htcProteinAli(item, cartString(cart, "aliTable"));
     }
 else if (sameWord(table, "htcBlatXeno"))
     {
-    htcBlatXeno(item, cartString(cart, "aliTrack"));
+    htcBlatXeno(item, cartString(cart, "aliTable"));
     }
 else if (sameWord(table, "htcExtSeq"))
     {
     htcExtSeq(item);
@@ -23192,9 +23193,9 @@
 cart = theCart;
 doMiddle();
 }
 
-char *excludeVars[] = {"hgSeq.revComp", "bool.hcg.dna.rc", "Submit", "submit", "g", "i", "aliTrack", "addp", "pred", NULL};
+char *excludeVars[] = {"hgSeq.revComp", "bool.hcg.dna.rc", "Submit", "submit", "g", "i", "aliTable", "addp", "pred", NULL};
 
 int main(int argc, char *argv[])
 {
 pushCarefulMemHandler(LIMIT_2or6GB);