61a6db3160c99a8fef6004db5c5c6402c07255a5
markd
  Tue Mar 14 16:31:59 2017 -0700
fixed transmap preserving hgsqi when linking to another genome and fixed getting transmap custom display with V4 track names

diff --git src/hg/hgc/transMapClick.c src/hg/hgc/transMapClick.c
index e2b4f9c..9ca6166 100644
--- src/hg/hgc/transMapClick.c
+++ src/hg/hgc/transMapClick.c
@@ -308,33 +308,33 @@
 {
 printf("<TABLE class=\"transMap\">\n");
 printf("<CAPTION>Source Alignment</CAPTION>\n");
 
 printf("<TBODY>\n");
 // organism/assembly
 printf("<TR CLASS=\"transMapLeft\"><TD>Organism<TD>%s (%s)</TR>\n",
        bag->meta->commonName, bag->meta->scientificName);
 printf("<TR CLASS=\"transMapLeft\"><TD>Genome<TD>%s</TR>\n", bag->meta->srcDb);
 printf("<TR CLASS=\"transMapLeft\"><TD>Source<TD>%s</TR>\n", formatGeneSrcSet(bag->srcSet));
 
 // position
 printf("<TR CLASS=\"transMapLeft\"><TD>Position\n");
 printf("<TD CLASS=\"transMapNoWrap\">");
 if (bag->srcDbIsActive)
-    printf("<A HREF=\"%s?db=%s&position=%s:%d-%d\" target=_blank>"
+    printf("<A HREF=\"%s&db=%s&position=%s:%d-%d\" target=_blank>"
            "%s:%d-%d</A>",
-           hgTracksName(), bag->meta->srcDb,
+           hgTracksPathAndSettings(), bag->meta->srcDb,
            bag->meta->srcChrom, bag->meta->srcChromStart, bag->meta->srcChromEnd,
            bag->meta->srcChrom, bag->meta->srcChromStart, bag->meta->srcChromEnd);
 else
     printf("%s:%d-%d", bag->meta->srcChrom, bag->meta->srcChromStart, bag->meta->srcChromEnd);
 printf("</TR>\n");
 
 // % identity and % aligned, values stored as 1000*fraction ident
 printf("<TR CLASS=\"transMapLeft\"><TD>Identity<TD>%0.1f%%</TR>\n",
        bag->meta->srcScore/10.0);
 printf("<TR CLASS=\"transMapLeft\"><TD>Aligned<TD>%0.1f%%</TR>\n",
        bag->meta->srcAligned/10.0);
 
 // gene and CDS
 printf("<TR CLASS=\"transMapLeft\"><TD>Gene<TD>%s</TR>\n",
        strOrNbsp(bag->meta->geneName));
@@ -350,30 +350,34 @@
        strOrNbsp(bag->meta->oCDS));
 printf("</TBODY></TABLE>\n");
 }
 
 static void displayAligns(struct trackDb *tdb, struct transMapBag *bag)
 /* display cDNA alignments */
 {
 int start = cartInt(cart, "o");
 printf("<H3>mRNA/Genomic Alignments</H3>");
 printAlignmentsSimple(bag->psl, start, "hgcTransMapCdnaAli", tdb->table, bag->psl->qName);
 }
 
 void transMapClickHandler(struct trackDb *tdb, char *mappedId)
 /* Handle click on a transMap tracks */
 {
+if (tdb == NULL)
+    errAbort("transMapClickHandler called without trackDb");
+if (mappedId == NULL)
+    errAbort("transMapClickHandler called without mappedId");
 struct transMapBag *bag = (trackDbSetting(tdb, "bigDataUrl") == NULL)
     ? transMapBagLoadDb(tdb, mappedId)
     : transMapBagLoadBig(tdb, mappedId);
 
 genericHeader(tdb, mappedId);
 printf("<TABLE class=\"transMapLayout\">\n");
 
 printf("<TR><TD>\n");
 displayMapped(bag);
 printf("<TD>\n");
 displaySource(bag);
 printf("<TD>&nbsp;\n");
 printf("</TR>\n");
 printf("<TR><TD COLSPAN=3>\n");
 displayAligns(tdb, bag);
@@ -394,30 +398,34 @@
 char *specCopy = cloneString(spec);
 
 // value is: extFile seqTbl extFileTbl
 char *words[3];
 int nwords = chopByWhite(specCopy, words, ArraySize(words));
 if ((nwords != ArraySize(words)) || !sameString(words[0], "extFile"))
     errAbort("invalid %s track setting: %s", BASE_COLOR_USE_SEQUENCE, spec);
 struct dnaSeq *seq = hDnaSeqMustGet(NULL, name, words[1], words[2]);
 freeMem(specCopy);
 return seq;
 }
 
 void transMapShowCdnaAli(struct trackDb *tdb, char *mappedId)
 /* Show alignment for mappedId, mostly ripped off from htcCdnaAli */
 {
+if (tdb == NULL)
+    errAbort("transMapShowCdnaAli called without trackDb");
+if (mappedId == NULL)
+    errAbort("transMapShowCdnaAli called without mappedId");
 struct transMapBag *bag = NULL;
 struct dnaSeq *seq = NULL;
 if (trackDbSetting(tdb, "bigDataUrl") == NULL)
     {
     bag = transMapBagLoadDb(tdb, mappedId);
     seq = getCdnaSeqDb(tdb, transMapIdToSeqId(mappedId));
     }
 else
     {
     bag = transMapBagLoadBig(tdb, mappedId);
     seq = newDnaSeq(cloneString(bag->meta->oSequence), strlen(bag->meta->oSequence),
                     mappedId);
     }
 
 struct genbankCds cds;