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/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 2c4f19ac1a9..b03b8ecbcad 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -1192,38 +1192,42 @@ * Note that if you are extending this code, there is also a parallel copy * in src/hg/utils/oligoMatch/ that should be kept up to date! * */ { char *dna = dnaInWindow(); char *fOligo = oligoMatchSeq(); toDna(fOligo); char *(*finder)(char *needle, char *haystack) = (anyIupac(fOligo) ? iupacIn : stringInWrapper); int oligoSize = strlen(fOligo); char *rOligo = cloneString(fOligo); char *rMatch = NULL, *fMatch = NULL; struct bed *bedList = NULL, *bed; char strand; int count = 0, maxCount = 1000000; +char *strandFilter = cartUsualString(cart, oligoMatchStrandVar, oligoMatchStrandDefault); +boolean searchForward = sameString(strandFilter, "both") || sameString(strandFilter, "forward"); +boolean searchReverse = sameString(strandFilter, "both") || sameString(strandFilter, "reverse"); if (oligoSize >= 2) { + if (searchForward) fMatch = finder(fOligo, dna); iupacReverseComplement(rOligo, oligoSize); if (sameString(rOligo, fOligo)) rOligo = NULL; - else + else if (searchReverse) rMatch = finder(rOligo, dna); for (;;) { char *oneMatch = NULL; if (rMatch == NULL) { if (fMatch == NULL) break; else { oneMatch = fMatch; fMatch = finder(fOligo, fMatch+1); strand = '+'; } }