d22f72049b67be2c8745828b1e6ebba9d5087ead chmalee Wed Mar 18 09:40:51 2026 -0700 Add explanatory text and notes to hgConvert page, refs #36111 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> diff --git src/hg/hgConvert/hgConvert.c src/hg/hgConvert/hgConvert.c index 2374737ac43..fd4951ad84f 100644 --- src/hg/hgConvert/hgConvert.c +++ src/hg/hgConvert/hgConvert.c @@ -76,30 +76,37 @@ if (quickLiftEnabled(cart)) { askAboutQuickLift = TRUE; quickLift = cartUsualBoolean(cart, "doQuickLift", FALSE); } cartWebStart(cart, database, "Convert %s to New Assembly", fromPos); /* Include autocomplete libraries */ jsIncludeAutoCompleteLibs(); /* create HTML form */ puts("<FORM ACTION=\"../cgi-bin/hgConvert\" NAME=\"mainForm\">\n"); cartSaveSession(cart); +cgiParagraph( + "This tool converts the current genome browser position to the corresponding " + "region in another assembly or species using genome sequence alignments. " + "Select a target assembly below and click Submit to jump to the matching region. " + "If a pair of assemblies cannot be selected directly, a sequential conversion " + "may still be possible (e.g., mm9 to mm10 to mm39)."); + /* CSS for two-section layout */ puts("<style>\n" ".convertGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; max-width: 800px; }\n" ".convertSection { padding: 15px; border: 1px solid #ddd; border-radius: 4px; background: #fafafa; }\n" ".sectionLabel { font-weight: bold; margin-bottom: 10px; border-bottom: 1px solid #ccc; padding-bottom: 5px; }\n" ".fieldRow { margin: 8px 0; }\n" ".fieldLabel { display: inline-block; width: 80px; font-weight: bold; }\n" ".currentSelection { margin-top: 8px; color: #333; }\n" ".currentSelection::before { content: 'Selected: '; font-weight: bold; }\n" "</style>\n"); puts("<div class='convertGrid'>\n"); /* SOURCE SECTION (read-only) */ puts("<div class='convertSection'>\n"); @@ -125,33 +132,33 @@ /* Current selection display */ char *selectedLabel = getCurrentGenomeLabel(liftOver->toDb); hPrintf("<div class='currentSelection' id='toGenomeLabel'>%s</div>\n", selectedLabel); /* Assembly dropdown (updates based on genome selection) */ puts("<div class='fieldRow'>\n"); puts("<span class='fieldLabel'>Assembly:</span>\n"); dbList = hGetLiftOverToDatabases(liftOver->fromDb); printAllAssemblyListHtmlParm(liftOver->toDb, dbList, HGLFT_TODB_VAR, TRUE, "change", onChangeToOrg); puts("</div>\n"); /* QuickLift option */ if (askAboutQuickLift) { puts("<div class='fieldRow' style='margin-top: 15px;'>\n"); cgiMakeCheckBoxWithId("doQuickLift", quickLift, "doQuickLift"); - puts(" <label for='doQuickLift'>QuickLift tracks</label>\n"); + puts(" <label for='doQuickLift' title='Display tracks from the source assembly mapped onto the target assembly'>QuickLift tracks</label>\n"); puts(" <a href='https://docs.google.com/document/d/1wecESHUpgTlE6U_Mj0OnfHeSZBrTX9hkZRN5jlJS8ZQ/edit?usp=sharing' " - "target='ucscHelp' title='QuickLift is in beta testing' " + "target='ucscHelp' title='QuickLift is in beta testing. Click to view more documentation about this feature.' " "style='color:#8A2BE2;font-weight:bold;text-transform:uppercase;font-size:smaller;padding:2px " "4px;background:lavender;border-radius:3px;text-decoration:none;margin-left:6px;'>beta</a>\n"); puts("</div>\n"); } puts("</div>\n"); /* end destination section */ puts("</div>\n"); /* end grid */ /* Submit button centered below */ puts("<div style='text-align: center; margin-top: 20px;'>\n"); cgiMakeButton(HGLFT_DO_CONVERT, "Submit"); puts("</div>\n"); /* JavaScript initialization for autocomplete with liftOver filtering */ jsInlineF( @@ -237,30 +244,40 @@ " $input.focus();\n" " }\n" " });\n" " }\n" "});\n" , liftOver->fromDb , liftOver->fromDb , HGLFT_TOORG_VAR , HGLFT_TODB_VAR , searchBarId, searchBarId, searchBarId, searchBarId , searchBarId, searchBarId, searchBarId ); puts("</FORM>\n"); +webNewSection("Notes"); +cgiParagraph( + "<B>QuickLift tracks:</B> When enabled, QuickLift displays tracks from " + "the source assembly mapped onto the target assembly, allowing you to view " + "your current tracks in the context of the new genome."); +cgiParagraph( + "If your desired target assembly is not available, you can search for it " + "and request it on our " + "<A HREF=\"../assemblySearch.html\">Assembly Search</A> page."); + cartWebEnd(); } static double scoreLiftOverChain(struct liftOverChain *chain, char *fromOrg, char *fromDb, char *toOrg, char *toDb, struct hash *dbRank ) /* Score the chain in terms of best match for cart settings */ { double score = 0; char *chainFromOrg = hOrganism(chain->fromDb); char *chainToOrg = hOrganism(chain->toDb); int fromRank = hashIntValDefault(dbRank, chain->fromDb, 0); int maxRank = hashIntVal(dbRank, "maxRank"); int toRank = hashIntValDefault(dbRank, chain->toDb, maxRank);