533112afe2a2005e80cdb1f82904ea65032d4302
braney
  Sat Oct 2 11:37:34 2021 -0700
split hg/lib into two separate libaries, one only used by the cgis

diff --git src/hg/lib/mathWig.c src/hg/lib/mathWig.c
deleted file mode 100644
index 0d3d73a..0000000
--- src/hg/lib/mathWig.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/* Copyright (C) 2017 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
-
-#include "common.h"
-#include "bigWig.h"
-#include "hdb.h"
-#include "wiggle.h"
-#include "trackHub.h"
-
-// stack of arithmetic operators
-struct opcodeStack
-    {
-    int depth;
-    int maxDepth;
-    char *stack;
-    };
-
-static boolean pushOpcode(struct opcodeStack *opcodeStack, char *word)
-/* Check to see if word is operator, if so, push it onto the stack */
-{
-boolean ret = FALSE;
-
-if (strlen(word) > 1)
-    return FALSE;
-
-switch(*word)
-    {
-    case '+':
-    case '*':
-    case '-':
-    case '/':
-        if (opcodeStack->depth == opcodeStack->maxDepth)
-            {
-            opcodeStack->maxDepth += 10;
-            opcodeStack->stack = realloc(opcodeStack->stack, opcodeStack->maxDepth);
-            }
-        opcodeStack->stack[opcodeStack->depth] = *word;
-        opcodeStack->depth++;
-        ret =  TRUE;
-        break;
-    }
-
-return ret;
-}
-
-void getWigDataFromFile(struct wiggle *wi, double *array, int winStart, int winEnd)
-/* Read a wib file to get wiggle values for a range. */
-{
-static char *fileName = NULL;
-static struct udcFile *wibFH = NULL;
-unsigned char *readData;    /* the bytes read in from the file */
-int dataOffset;
-
-if ((fileName == NULL) || differentString(fileName, wi->file))
-    {
-    if (wibFH != NULL)
-        udcFileClose(&wibFH);
-    fileName = cloneString(wi->file);
-    wibFH = udcFileOpen(hReplaceGbdb(fileName), NULL);
-    }
-udcSeek(wibFH, wi->offset);
-readData = (unsigned char *) needMem((size_t) (wi->count + 1));
-udcRead(wibFH, readData,
-    (size_t) wi->count * (size_t) sizeof(unsigned char));
-/*  walk through all the data in this block */
-int width = winEnd - winStart;
-for (dataOffset = 0; dataOffset < wi->count; ++dataOffset)
-    {
-    unsigned char datum = readData[dataOffset];
-    if (datum != WIG_NO_DATA)
-        {
-        int x1 = ((wi->chromStart - winStart) + (dataOffset * wi->span));
-        int x2 = x1 + wi->span;
-        if (x2 >= width )
-            x2 = width ;
-        if (x1 < width)
-            {
-            for (; x1 < x2; ++x1)
-                {
-                if ((x1 >= 0))
-                    {
-                    array[x1] = BIN_TO_VALUE(datum,wi->lowerLimit,wi->dataRange);
-                    }
-                }   
-            }   
-        }   
-    }   
-}
-
-void getBedGraphData(char *db, char *table, char *chrom, unsigned winStart, unsigned winEnd, double *array)
-/* Query a bedGraph table and fill in the values in the array. */
-{
-struct sqlConnection *conn = hAllocConn(db);
-int rowOffset;
-struct sqlResult *sr;
-char **row;
-unsigned width = winEnd - winStart;
-
-sr = hRangeQuery(conn, table, chrom, winStart, winEnd,
-        NULL, &rowOffset);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    unsigned chromStart = sqlUnsigned(row[rowOffset + 1]);
-    unsigned chromEnd  = sqlUnsigned(row[rowOffset + 2]);
-    unsigned start = max(0, chromStart - winStart);
-    unsigned end = min(width, chromEnd - winStart);
-    int ii;
-
-    for (ii = start; ii < end; ii++)
-        array[ii] = sqlFloat(row[rowOffset + 3]);
-    }
-
-hFreeConn(&conn);
-}
-
-void getWigData(char *db, char *table, char *chrom, unsigned winStart, unsigned winEnd, double *array)
-/* Query the database to find the regions in the WIB file we need to read to get data for a specified range. Only use the smallest of spans. */
-{
-struct sqlConnection *conn = hAllocConn(db);
-int rowOffset;
-struct sqlResult *sr;
-char **row;
-struct wiggle *wiggleList = NULL, *wiggle;
-int minSpan = 1000000000;
-
-sr = hRangeQuery(conn, table, chrom, winStart, winEnd,
-        NULL, &rowOffset);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    wiggle = wiggleLoad(row + rowOffset);
-    slAddHead(&wiggleList, wiggle);
-    if (wiggle->span < minSpan)
-        minSpan = wiggle->span;
-    }
-
-struct wiggle *nextWiggle;
-for(wiggle = wiggleList; wiggle; wiggle = nextWiggle)
-    {
-    nextWiggle = wiggle->next;
-    if (wiggle->span == minSpan)
-        getWigDataFromFile(wiggle, array, winStart, winEnd);
-    freez(&wiggle);
-    }
-hFreeConn(&conn);
-}
-
-void getBigWigData(char *file, char *chrom, unsigned winStart, unsigned winEnd, double *array)
-/* Query a bigBed file to find the wiggle values we need for a specified range. */
-{
-struct lm *lm = lmInit(0);
-static char *fileName = NULL;
-static struct bbiFile *bwf = NULL;
-
-if ((fileName == NULL) || differentString(fileName, file))
-    {
-    if (bwf != NULL)
-        bbiFileClose(&bwf);
-
-    fileName = cloneString(file);
-    bwf = bigWigFileOpen(hReplaceGbdb(file));
-    }
-
-struct bbiInterval *iv, *ivList = bigWigIntervalQuery(bwf, chrom, winStart, winEnd, lm);
-unsigned width = winEnd - winStart;
-
-for (iv = ivList; iv != NULL; iv = iv->next)
-    {
-    unsigned start = max(0, iv->start - winStart);
-    unsigned end = min(width, iv->end - winStart);
-    int ii;
-
-    for (ii = start; ii < end; ii++)
-        array[ii] = iv->val;
-    }
-}
-
-double *mathWigGetValues(char *db, char *equation, char *chrom, unsigned winStart, unsigned winEnd, boolean missingIsZero)
-/* Build an array of doubles that is calculated from bigWig or wig listed
- * in equation in the requested region. */
-{
-static char lastOpcode = 0;
-char *words[100];
-int count = chopByWhite(equation, words, sizeof(words)/sizeof(char *));
-int jj,ii;
-unsigned width = winEnd - winStart;
-double *accumulator = needHugeMem(width * sizeof(double));
-double *operand = needHugeMem(width * sizeof(double));
-struct opcodeStack opcodeStack;
-bzero(&opcodeStack, sizeof opcodeStack);
-
-boolean firstTime = TRUE;
-for (jj=0; jj < count; jj++)
-    {
-    double *dataLoad = operand;
-    if (firstTime)
-        dataLoad = accumulator;
-
-    if (pushOpcode(&opcodeStack, words[jj]))
-        continue;
-
-    if (missingIsZero)
-        for(ii=0; ii < width; ii++)
-            dataLoad[ii] = 0;
-    else
-        for(ii=0; ii < width; ii++)
-            dataLoad[ii] = NAN;
-
-    boolean isWiggle = FALSE;
-    boolean isBedGraph = FALSE;
-    if (startsWith("$", words[jj]))  
-        isWiggle = TRUE;
-    else if (startsWith("^", words[jj]))  
-        isBedGraph = TRUE;
-
-    if (isBedGraph || isWiggle)
-        {
-        char *useDb = &words[jj][1];
-        char *dot = strchr( &words[jj][1], '.');
-        *dot = 0;
-        char *useTable = dot + 1;
-        if (isWiggle)
-            getWigData(useDb, useTable, chrom, winStart, winEnd, dataLoad);
-        else
-            getBedGraphData(useDb, useTable, chrom, winStart, winEnd, dataLoad);
-        }
-    else
-        getBigWigData(words[jj], chrom, winStart, winEnd, dataLoad);
-        
-    if (firstTime)
-        {
-        firstTime = FALSE;
-        continue;
-        }
-
-    char opcode;
-    if (opcodeStack.depth == 0)
-        {
-        opcode = lastOpcode;
-        if (opcode == 0)
-            opcode = '+';
-
-        //errAbort("underflow in opcode stack");
-        }
-    else
-        lastOpcode = opcode = opcodeStack.stack[--opcodeStack.depth];
-
-    for(ii=0; ii < width; ii++)
-        {
-        switch(opcode)
-            {
-            case '+':
-                accumulator[ii] += operand[ii];
-                break;
-            case '-':
-                accumulator[ii] -= operand[ii];
-                break;
-            case '*':
-                accumulator[ii] *= operand[ii];
-                break;
-            case '/':
-                accumulator[ii] /= operand[ii];
-                break;
-            }
-        }
-    }
-
-return accumulator;
-}