478610d3be4abc22e330f4fbb154a2ac8ac4abfa
max
  Tue Jan 20 15:24:18 2026 -0800
add strand filter option to oligoMatch track refs #36984

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index cacbbcb946b..c1c21d0ac0e 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -2242,42 +2242,51 @@
 puts("</P><P>\n");
 printf("<B>Color sequence matches by </B>");
 char *colorText[3] = {"topic", "impact of journal", "year"};
 char *colorVals[3] = {"topic", "impact", "year"};
 safef(cgiVar,sizeof(cgiVar),"%s.%s",tdb->track,PUBS_COLORBY_TAG);
 cgiDropDownWithTextValsAndExtra(cgiVar, colorText, colorVals, 3, colorBy, NULL);
 puts("</P>\n");
 
 wigOption(cart, tdb->track, tdb->shortLabel, tdb);
 }
 
 void oligoMatchUi(struct trackDb *tdb)
 /* UI for oligo match track */
 {
 char *oligo = cartUsualString(cart, oligoMatchVar, oligoMatchDefault);
+char *strand = cartUsualString(cart, oligoMatchStrandVar, oligoMatchStrandDefault);
 puts("<P><B>Short (2-30 base) sequence:</B>");
 jsInline(
 "function packTrack()\n"
 "{\n"
 "var box = jQuery('select[name$=oligoMatch]');\n"
 "if (box.val()=='hide')\n"
 "    box.val('pack');\n"
 "}\n");
 printf("<input name='%s' id='%s' size=\"%d\" value=\"%s\" type=\"TEXT\">",
     oligoMatchVar, oligoMatchVar, 45, oligo);
 puts("<br>Examples: TATAWAAR, AAAAA");
 jsOnEventById("input", oligoMatchVar, "packTrack();");
+
+puts("<P><B>Search strand:</B> ");
+cgiMakeRadioButton(oligoMatchStrandVar, "both", sameString(strand, "both"));
+puts(" Both ");
+cgiMakeRadioButton(oligoMatchStrandVar, "forward", sameString(strand, "forward"));
+puts(" Forward (+) ");
+cgiMakeRadioButton(oligoMatchStrandVar, "reverse", sameString(strand, "reverse"));
+puts(" Reverse (-) ");
 }
 
 void cutterUi(struct trackDb *tdb)
 /* UI for restriction enzyme track */
 {
 char *enz = cartUsualString(cart, cutterVar, cutterDefault);
 puts("<P><B>Filter display by enzymes (separate with commas):</B><BR>");
 cgiMakeTextVar(cutterVar, enz, 100);
 }
 
 void genericWiggleUi(struct trackDb *tdb, int optionNum )
 /* put up UI for any standard wiggle track (a.k.a. sample track)*/
 {
 
 char options[7][256];