2fc33abc4c89f2ca1881911666b7dbea8b6ae343
hiram
  Tue Mar 24 15:05:26 2026 -0700
refactor the GC on fly calculation to move into a library function rfefs #35958

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index ba853ae81d5..21ae16b4262 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -24197,46 +24197,38 @@
 /* Display GC percent info for visible window, computed on the fly from sequence.
  * No tdb or bigWig file needed - this is a synthetic track with no database table. */
 {
 char *winSizeStr = cartUsualString(cart, gcOnFlyWindowSize, gcOnFlyDefaultSize);
 int span = atoi(winSizeStr);
 char num1Buf[64], num2Buf[64];
 
 cartWebStart(cart, database, "GC Percent On the Fly");
 sprintLongWithCommas(num1Buf, BASE_1(winStart));
 sprintLongWithCommas(num2Buf, winEnd);
 printf("<B>Position:</B> %s:%s-%s<BR>\n", seqName, num1Buf, num2Buf);
 sprintLongWithCommas(num1Buf, winEnd - winStart);
 printf("<B>Total bases in view:</B> %s<BR>\n", num1Buf);
 printf("<B>Window size for GC calculation:</B> %d bases<BR>\n", span);
 
-struct dnaSeq *seq = hChromSeq(database, seqName, winStart, winEnd);
-if (seq != NULL)
-    {
-    int gcCount = 0, validBases = 0;
-    int i;
-    for (i = 0; i < seq->size; i++)
-        {
-        char b = seq->dna[i];
-        if (b == 'g' || b == 'c') { gcCount++;  validBases++; }
-        else if (b != 'n')          validBases++;
-        }
-    if (validBases > 0)
-        printf("<B>GC percent in view:</B> %.3f%%<BR>\n",
-               100.0 * gcCount / validBases);
-    dnaSeqFree(&seq);
-    }
+/* Use whole view as one window to get overall GC percent */
+struct gcOnTheFlyWindow *windows = NULL;
+int regionSize = winEnd - winStart;
+int windowCount = gcOnTheFlyCompute(database, seqName, winStart, winEnd,
+    regionSize, &windows);
+if (windowCount > 0)
+    printf("<B>GC percent in view:</B> %.3f%%<BR>\n", windows[0].gcPct);
+freeMem(windows);
 webIncludeHelpFile(GC_ON_FLY_TRACK_NAME, TRUE);
 }
 
 struct slName *cutterIsoligamers(struct cutter *myEnzyme)
 /* Find enzymes with same cut site. */
 {
 struct sqlConnection *conn;
 struct cutter *cutters = NULL;
 struct slName *ret = NULL;
 
 conn = hAllocConn("hgFixed");
 char query[1024];
 sqlSafef(query, sizeof query, "select * from cutters");
 cutters = cutterLoadByQuery(conn, query);
 ret = findIsoligamers(myEnzyme, cutters);