483878d23907da9695facf9610aa986208f0a1d7 galt Fri May 9 11:26:36 2025 -0700 Revert "Simplify use of BLAT results by always creating a custom track. fixes #32751" This reverts commit a5a45be7e379b64278e667f80c75cc0cc41d9ea4. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index d2ffbf54a87..35db5935b93 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -3352,38 +3352,30 @@ struct bbiFile *bbi = bigBedFileOpenAlias(fileName, chromAliasFindAliases); struct lm *lm = lmInit(0); int ivStart = start, ivEnd = end; if (start == end) { // item is an insertion; expand the search range from 0 bases to 2 so we catch it: ivStart = max(0, start-1); ivEnd++; } if (cfgOptionBooleanDefault("drawDot", FALSE)) bigPslDotPlot(tdb, bbi, seqName, winStart, winEnd); boolean showEvery = sameString(item, "PrintAllSequences"); -boolean buildBigPsl = FALSE; -if (sameString(item, "buildBigPsl")) - { - buildBigPsl = TRUE; - showEvery = TRUE; - item = cloneString("PrintAllSequences"); - } - boolean showAll = trackDbSettingOn(tdb, "showAll"); unsigned seqTypeField = bbExtraFieldIndex(bbi, "seqType"); struct bigBedInterval *bb, *bbList = NULL; // If showAll is on, show all alignments with this qName, not just the // selected one. if (showEvery) { struct bbiChromInfo *chrom, *chromList = bbiChromList(bbi); for (chrom = chromList; chrom != NULL; chrom = chrom->next) { char *chromName = chrom->name; int start = 0, end = chrom->size; int itemsLeft = 0; // Zero actually means no limit.... struct bigBedInterval *intervalList = bigBedIntervalQuery(bbi, chromName, @@ -3422,99 +3414,30 @@ if (itemForUrl) printIframe(tdb, itemForUrl); printPos(seqName, ivStart, ivEnd, strand, FALSE, item); int printCount = extraFieldsPrint(tdb,NULL,extraFields, extraFieldCount); printCount += 0; } } } char *bedRow[32]; char startBuf[16], endBuf[16]; int lastChromId = -1; char chromName[bbi->chromBpt->keySize+1]; -if (buildBigPsl) - { - - char *browserUrl = hgTracksName(); - char* posStr = cartOptionalString(cart, "position"); - if (posStr != NULL) - printf("

Go back to %s on the Genome Browser.

\n", browserUrl, posStr); - - printf("
\n\n", - hgTracksName(), cartSessionId(cart), database, cartUsualString(cart, "formMethod", "POST")); - - cartSaveSession(cart); - - cgiMakeButton(CT_DO_REMOVE_VAR, "Remove custom track"); - cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track); - printf("
\n"); - - - // new re-submit code with new trackname and decription - - printf("
\n"); - printf("
\n"); - printf("\n"); - printf("
\n"); - printf("
\n"); - - printf("\n"); - - jsInline("$('#showRenameForm').click(function(){\n" - " $('#renameForm')[0].style.display = 'block';\n" - " $('#renameFormItem')[0].style.display = 'none';\n" - " $('#showRenameForm')[0].style.display = 'none';\n" - "return false;\n" - "});\n"); - - } - boolean firstTime = TRUE; struct hash *seqHash = hashNew(0); struct dyString *sequencesText = dyStringNew(256); int sequencesFound = 0; for (bb = bbList; bb != NULL; bb = bb->next) { bbiCachedChromLookup(bbi, bb->chromId, lastChromId, chromName, sizeof(chromName)); lastChromId=bb->chromId; bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, 4); if (showEvery || sameString(bedRow[3], item)) { char *cdsStr, *seq; struct psl *psl= getPslAndSeq(tdb, chromName, bb, seqTypeField, &seq, &cdsStr); slAddHead(&pslList, psl); @@ -6678,178 +6601,82 @@ if (end != 0 && differentString(chrom,"0") && isNotEmpty(chrom)) { printf("Position: " "", hgTracksPathAndSettings(), database, chrom, start+1, end); printf("%s:%d-%d
\n", chrom, start+1, end); } gbWarnFree(&gbWarn); sqlFreeResult(&sr); dyStringFree(&dy); hFreeConn(&conn); hFreeConn(&conn2); } - -void printLuckyRedirect(char *browserUrl, struct psl *psl, char *database, boolean empty) -/* Print out a very short page that redirects us. */ -{ - -char url[1024]; - -if (empty) - safef(url, sizeof(url), "%s?db=%s", - browserUrl, database); -else - safef(url, sizeof(url), "%s?position=%s:%d-%d&db=%s", - browserUrl, psl->tName, psl->tStart + 1, psl->tEnd, database); - -/* htmlStart("Redirecting"); */ -/* Odd it appears that we've already printed the Content-Typ:text/html line - but I can't figure out where... */ -htmStart(stdout, "Redirecting"); -jsInlineF("location.replace('%s');\n", url); -printf("\n", url); -htmlEnd(); - -} - - static boolean isPslToPrintByClick(struct psl *psl, int startFirst, boolean isClicked) /* Determine if a psl should be printed based on if it was or was not the one that was clicked * on. */ { return ((psl->tStart == startFirst) && sameString(psl->tName, seqName)) == isClicked; } void printAlignmentsSimple(struct psl *pslList, int startFirst, char *hgcCommand, 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 || tableName == NULL) return; boolean showEvery = sameString(itemIn, "PrintAllSequences"); - -boolean feelingLucky = cgiOptionalString("feelingLucky") != NULL; -if (feelingLucky) - { - // If we found something jump browser to there. - if(slCount(pslList) > 0) - printLuckyRedirect(hgTracksPathAndSettings(), pslList, database, FALSE); - // Otherwise call ourselves again not feeling lucky to print empty results. - else - { - printLuckyRedirect(hgTracksPathAndSettings(), pslList, database, TRUE); - } - } - if (!showEvery && (aliCount > 1)) printf("The alignment you clicked on is first in the table below.
\n"); -char *browserHelp = "Open a Genome Browser showing this match"; -char *helpText = "Open a Genome Browser with the BLAT results, but in a new internet browser tab"; -// XX putting SVG into C code like this is ugly. define somewhere? maybe have globals for these? -char *icon = ""; printf("
");
-
-
-// find maximum query name size for padding calculations and
-// find maximum target chrom name size for padding calculations
-int maxQChromNameSize = 0;
-int maxTChromNameSize = 0;
-for (psl = pslList; psl != NULL; psl = psl->next)
-    {
-    int qLen = strlen(psl->qName);
-    maxQChromNameSize = max(maxQChromNameSize,qLen);
-    int tLen = strlen(psl->tName);
-    maxTChromNameSize = max(maxTChromNameSize,tLen);
-    }
-maxQChromNameSize = max(maxQChromNameSize, strlen("QUERY"));
-
-printf("BROWSER           |");
-printf(" SIZE IDENTITY  ");
 if (startsWith("chr", pslList->tName))
-    {
-    maxTChromNameSize = max(maxTChromNameSize, strlen("CHROMOSOME"));
-    spaceOut(stdout, maxTChromNameSize - strlen("CHROMOSOME"));
-    printf("CHROMOSOME");
-    }
+    printf("BROWSER | SIZE IDENTITY CHROMOSOME  STRAND    START     END              QUERY      START  END  TOTAL\n");
 else
-    {
-    maxTChromNameSize = max(maxTChromNameSize, strlen("SCAFFOLD"));
-    spaceOut(stdout, maxTChromNameSize - strlen("SCAFFOLD"));
-    printf("SCAFFOLD");
-    }
-printf(" STRAND     START      END   ");
-spaceOut(stdout, maxQChromNameSize - strlen("QUERY"));
-printf("QUERY");
-printf(" START  END  TOTAL\n");
-
-printf("--------------------------------------------------------------------------------------------");
-repeatCharOut(stdout, '-', maxQChromNameSize - 5);
-repeatCharOut(stdout, '-', maxTChromNameSize - 5);
-printf("\n");
-
-char fmt[256];
-safef(fmt, sizeof fmt, "%%5d  %%5.1f%%%%  %%%ds     %%s %%9d %%9d  %%%ds %%5d %%5d %%5d", maxTChromNameSize, maxQChromNameSize);
-
+    printf("BROWSER | SIZE IDENTITY  SCAFFOLD   STRAND    START     END              QUERY      START  END  TOTAL\n");
+printf("-----------------------------------------------------------------------------------------------------\n");
 for (isClicked = 1; isClicked >= 0; isClicked -= 1)
     {
     for (psl = pslList; psl != NULL; psl = psl->next)
 	{
 	if (isPslToPrintByClick(psl, startFirst, isClicked))
 	    {
             char otherString[512];
             char *qName = itemIn;
             if (sameString(itemIn, "PrintAllSequences"))
                 qName = psl->qName;
 	    safef(otherString, sizeof(otherString), "%d&aliTable=%s", psl->tStart, tableName);
-            printf("browser ",
-                   browserHelp, hgTracksPathAndSettings(), database, psl->tName, psl->tStart+1, psl->tEnd);
-
-            printf("new tab%s | ",
-                   helpText, hgTracksPathAndSettings(), database, psl->tName, psl->tStart+1, psl->tEnd, icon);
-
+            printf("browser | ",
+                   hgTracksPathAndSettings(), database, psl->tName, psl->tStart+1, psl->tEnd);
 	    if (psl->qSize <= MAX_DISPLAY_QUERY_SEQ_SIZE) // Only anchor if small enough 
 		hgcAnchorWindow(hgcCommand, qName, psl->tStart, psl->tEnd, otherString, psl->tName);
             char *displayChromName = chromAliasGetDisplayChrom(database, cart, psl->tName);
-	    printf(fmt,
+	    printf("%5d  %5.1f%%  %9s     %s %9d %9d  %20s %5d %5d %5d",
 		   psl->match + psl->misMatch + psl->repMatch,
 		   100.0 - pslCalcMilliBad(psl, TRUE) * 0.1,
 		   skipChr(displayChromName), psl->strand, psl->tStart + 1, psl->tEnd,
 		   psl->qName, psl->qStart+1, psl->qEnd, psl->qSize);
 	    if (psl->qSize <= MAX_DISPLAY_QUERY_SEQ_SIZE)
 	        printf("");
-	    
-	    // if you modify this, also modify hgPcr.c:doQuery, which implements a similar feature
-	    char *seq = psl->tName;
-	    if (endsWith(seq, "_fix"))
-		printf("   What is chrom_fix?");
-	    else if (endsWith(seq, "_alt"))
-		printf("   What is chrom_alt?");
-	    else if (endsWith(seq, "_random"))
-		printf("   What is chrom_random?");
-	    else if (startsWith(seq, "chrUn"))
-		printf("   What is a chrUn sequence?");
-
 	    printf("\n");
 	    }
 	}
     }
 printf("
"); } void printAlignmentsExtra(struct psl *pslList, int startFirst, char *hgcCommand, char *hgcCommandInWindow, char *tableName, char *itemIn) /* Print list of mRNA alignments with special "in window" alignment function. */ { if (pslList == NULL || tableName == NULL) return; printAlignmentsSimple(pslList, startFirst, hgcCommand, tableName, itemIn); @@ -22607,38 +22434,38 @@ if (wordCount > 1) num = atoi(words[1]); if (num < 3) num = 3; footPrinterSampleClick(conn, tdb, item, start, num); } printTrackHtml(tdb); freez(&dupe); hFreeConn(&conn); } void bigPslHandlingCtAndGeneric(struct sqlConnection *conn, struct trackDb *tdb, char *item, int start, int end) /* Special option to show all alignments for blat ct psl */ { -if (startsWith("ct_blat", tdb->track) && (!(sameString(item,"PrintAllSequences") || sameString(item,"buildBigPsl")))) +if (startsWith("ct_blat", tdb->track) && !sameString(item,"PrintAllSequences")) printf("Show All\n"); printf("
\n"); genericBigPslClick(NULL, tdb, item, start, end); printf("
\n"); -if (startsWith("ct_blat", tdb->track) && (!(sameString(item,"PrintAllSequences") || sameString(item,"buildBigPsl")))) +if (startsWith("ct_blat", tdb->track) && !sameString(item,"PrintAllSequences")) { printf("\n"); jsInline("$('#genericPslShowAllLink').click(function(){\n" " $('#genericPslShowAll')[0].style.display = 'block';\n" " $('#genericPslShowItem')[0].style.display = 'none';\n" " $('#genericPslShowAllLink')[0].style.display = 'none';\n" "return false;\n" "});\n"); } } @@ -22648,31 +22475,31 @@ char *fileName, *itemName; struct customTrack *ctList = getCtList(); struct customTrack *ct; struct bed *bed = (struct bed *)NULL; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); char *item = cartString(cart, "i"); char *type; fileName = nextWord(&fileItem); for (ct = ctList; ct != NULL; ct = ct->next) if (sameString(trackId, ct->tdb->track)) break; if (ct == NULL) errAbort("Couldn't find '%s' in '%s'", trackId, fileName); type = ct->tdb->type; -cartWebStart(cart, database, "Custom Track: %s (%s) %s ", trackHubSkipHubName(organism), trackHubSkipHubName(database), ct->tdb->shortLabel); +cartWebStart(cart, database, "Custom Track: %s", ct->tdb->shortLabel); itemName = skipLeadingSpaces(fileItem); printf("

%s

\n", ct->tdb->longLabel); if (sameWord(type, "array")) doExpRatio(ct->tdb, fileItem, ct); else if ( startsWith( "longTabix", type)) doLongTabix(ct->tdb, item); else if (sameWord(type, "encodePeak")) doEncodePeak(ct->tdb, ct, fileName); else if (sameWord(type, "bigNarrowPeak")) doBigEncodePeak(ct->tdb, NULL, item); else if (sameWord(type, "bigWig")) bigWigCustomClick(ct->tdb); else if (sameWord(type, "bigChain")) genericChainClick(NULL, ct->tdb, item, start, "seq"); else if (sameWord(type, "bigPsl")) @@ -26761,31 +26588,31 @@ boolean isProt = cgiOptionalString("isProt") != NULL; char *customTextTemplate = "track type=bigPsl indelDoubleInsert=on indelQueryInsert=on pslFile=%s visibility=pack showAll=on htmlUrl=http://%s/goldenPath/help/hgUserPsl.html %s bigDataUrl=%s name=\"%s\" description=\"%s\" colorByStrand=\"0,0,0 0,0,150\" mouseOver=\"${oChromStart}-${oChromEnd} of ${oChromSize} bp, strand ${oStrand}\"\n"; char *extraForMismatch = "indelPolyA=on showDiffBasesAllScales=. baseColorUseSequence=lfExtra baseColorDefault=diffBases"; if (isProt) extraForMismatch = ""; char buffer[4096]; safef(buffer, sizeof buffer, customTextTemplate, bigBedTn.forCgi, host, extraForMismatch, bigBedTn.forCgi, trackName, trackDescription); struct customTrack *ctList = getCtList(); struct customTrack *newCts = customFactoryParse(database, buffer, FALSE, NULL, NULL); theCtList = customTrackAddToList(ctList, newCts, NULL, FALSE); customTracksSaveCart(database, cart, theCtList); -cartSetString(cart, "i", "buildBigPsl"); +cartSetString(cart, "i", "PrintAllSequences"); hgCustom(newCts->tdb->track, NULL); } void doHPRCTable(struct trackDb *tdb, char *itemName) /* Put up a generic bigBed details page, with a table of links to turn on related * * chain tracks with visibility toggles */ { int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); genericHeader(tdb, itemName); genericBigBedClick(NULL, tdb, itemName, start, end, 0); printTrackHtml(tdb); // tell the javscript to reorganize the column of assemblies: jsIncludeFile("hgc.js", NULL); jsInlineF("var doHPRCTable = true;\n");