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/annoStreamDbFactorSource.c src/hg/lib/annoStreamDbFactorSource.c
deleted file mode 100644
index ce03287..0000000
--- src/hg/lib/annoStreamDbFactorSource.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* annoStreamDbFactorSource -- factorSource track w/related tables */
-
-#include "annoStreamDbFactorSource.h"
-#include "annoStreamDb.h"
-#include "factorSource.h"
-#include "hdb.h"
-#include "sqlNum.h"
-
-static char *asfsAutoSqlString =
-"table factorSourcePlus"
-"\"factorSourcePlus: Peaks clustered by factor w/normalized scores plus cell type and treatment\""
-"   ("
-"   string  chrom;          \"Chromosome\""
-"   uint    chromStart;     \"Start position in chrom\""
-"   uint    chromEnd;       \"End position in chrom\""
-"   string  name;           \"factor that has a peak here\""
-"   uint   score;           \"Score from 0-1000\""
-"   uint expCount;          \"Number of experiment values\""
-"   uint[expCount] expNums; \"Comma separated list of experiment numbers\""
-"   float[expCount] expScores; \"Comma separated list of experiment scores\""
-"   string[expCount] cellType; \"Comma separated list of experiment cell types\""
-"   string[expCount] treatment; \"Comma separated list of experiment treatments\""
-"   )";
-
-#define FACTORSOURCEPLUS_NUM_COLS 10
-
-struct annoStreamDbFactorSource
-{
-    struct annoStreamer streamer;	// Parent class members & methods (external interface)
-    // Private members
-    struct annoStreamer *mySource;	// Internal source of track table rows
-    // Data from related tables
-    int expCount;			// Number of experiments whose results were clustered
-    char **expCellType;			// Array[expCount] of cellType used in each experiment
-    char **expTreatment;		// Array[expCount] of treatment used in each experiment
-};
-
-struct asObject *annoStreamDbFactorSourceAsObj()
-/* Return an autoSql object that describs fields of a joining query on a factorSource table
- * and its inputs. */
-{
-return asParseText(asfsAutoSqlString);
-}
-
-static void asdfsSetRegion(struct annoStreamer *sSelf, char *chrom, uint rStart, uint rEnd)
-/* Pass setRegion down to internal source. */
-{
-annoStreamerSetRegion(sSelf, chrom, rStart, rEnd);
-struct annoStreamDbFactorSource *self = (struct annoStreamDbFactorSource *)sSelf;
-self->mySource->setRegion(self->mySource, chrom, rStart, rEnd);
-}
-
-static char *commaSepFromExpData(char **expAttrs, int *expNums, uint expCount, struct lm *lm)
-/* Look up experiment attribute strings by experiment numbers; return a comma-separated string
- * of experiment attributes, allocated using lm. */
-{
-int i;
-int len = 0, offset = 0;
-for (i = 0;  i < expCount;  i++)
-    len += (strlen(expAttrs[expNums[i]]) + 1);
-char *str = lmAlloc(lm, len + 1);
-for (i = 0;  i < expCount;  i++)
-    {
-    char *attr = expAttrs[expNums[i]];
-    safef(str + offset, len + 1 - offset, "%s,", attr);
-    offset += strlen(attr) + 1;
-    }
-return str;
-}
-
-INLINE void getCommaSepInts(char *commaSep, int *values, int expectedCount)
-/* Parse comma-separated ints into values[]. This is like sqlSignedStaticArray,
- * but we give it an expected count and it's thread-safe because it doesn't use
- * static variables. */
-{
-char *s = commaSep, *e = NULL;
-int count;
-for (count = 0;  isNotEmpty(s);  count++, s = e)
-    {
-    e = strchr(s, ',');
-    if (e != NULL)
-	*e++ = 0;
-    if (count < expectedCount)
-	values[count] = sqlSigned(s);
-    }
-if (count != expectedCount)
-    errAbort("getCommaSepInts: expected %d values but found %d", expectedCount, count);
-}
-
-static void factorSourceToFactorSourcePlus(struct annoStreamDbFactorSource *self,
-					   char **fsWords, char **fspWords, struct lm *lm)
-/* Copy fsWords into fspWords and add columns for cellTypes and treatments corresponding to
- * expNums. */
-{
-// Parse out experiment IDs from expNums column
-uint expCount = sqlUnsigned(fsWords[5]);
-int expNums[expCount];
-getCommaSepInts(fsWords[6], expNums, expCount);
-// Copy factorSource columns, then add experiment attribute columns.
-int i;
-for (i = 0;  i < FACTORSOURCE_NUM_COLS;  i++)
-    fspWords[i] = fsWords[i];
-fspWords[i++] = commaSepFromExpData(self->expCellType, expNums, expCount, lm);
-fspWords[i++] = commaSepFromExpData(self->expTreatment, expNums, expCount, lm);
-if (i != FACTORSOURCEPLUS_NUM_COLS)
-    errAbort("annoStreamDbFactorSource %s: expected to make %d columns but made %d",
-	     self->streamer.name, FACTORSOURCEPLUS_NUM_COLS, i);
-}
-
-static struct annoRow *asdfsNextRow(struct annoStreamer *sSelf, char *minChrom, uint minEnd,
-				    struct lm *lm)
-/* Join experiment data with expNums from track table and apply filters. */
-{
-struct annoStreamDbFactorSource *self = (struct annoStreamDbFactorSource *)sSelf;
-char **fspWords;
-lmAllocArray(lm, fspWords, FACTORSOURCEPLUS_NUM_COLS);
-struct annoRow *fsRow;
-boolean rightJoinFail = FALSE;
-while ((fsRow = self->mySource->nextRow(self->mySource, minChrom, minEnd, lm)) != NULL)
-    {
-    char **fsWords = fsRow->data;
-    factorSourceToFactorSourcePlus(self, fsWords, fspWords, lm);
-    // If there are filters on experiment attributes, apply them, otherwise just return aRow.
-    if (sSelf->filters)
-	{
-	boolean fails = annoFilterRowFails(sSelf->filters, fspWords, FACTORSOURCEPLUS_NUM_COLS,
-					   &rightJoinFail);
-	// If this row passes the filter, or fails but is rightJoin, then we're done looking.
-	if (!fails || rightJoinFail)
-	    break;
-	}
-    else
-	// no filtering to do, just use this row
-	break;
-    }
-if (fsRow != NULL)
-    return annoRowFromStringArray(fsRow->chrom, fsRow->start, fsRow->end, rightJoinFail,
-				  fspWords, FACTORSOURCEPLUS_NUM_COLS, lm);
-else
-    return NULL;
-}
-
-static void getExperimentData(struct annoStreamDbFactorSource *self, char *db,
-			      char *sourceTable, char *inputsTable)
-/* Join two small tables to relate experiment IDs from the track tables expNums column
- * to experiment attributes cellType and treatment. */
-{
-struct sqlConnection *conn = hAllocConn(db);
-self->expCount = sqlRowCount(conn, sourceTable);
-AllocArray(self->expCellType, self->expCount);
-AllocArray(self->expTreatment, self->expCount);
-struct dyString *query = sqlDyStringCreate("select id, cellType, treatment "
-					   "from %s, %s where %s.description = %s.source",
-					   sourceTable, inputsTable, sourceTable, inputsTable);
-struct sqlResult *sr = sqlGetResult(conn, query->string);
-char **row;
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    int id = sqlSigned(row[0]);
-    if (id < 0 || id >= self->expCount)
-	errAbort("annoStreamDbFactorSource %s: found out-of-range id %d in %s (expected [0-%d])",
-		 ((struct annoStreamer *)self)->name, id, sourceTable, self->expCount - 1);
-    self->expCellType[id] = cloneString(row[1]);
-    self->expTreatment[id] = cloneString(row[2]);
-    }
-sqlFreeResult(&sr);
-hFreeConn(&conn);
-}
-
-static void asdfsClose(struct annoStreamer **pSSelf)
-/* Free up state. */
-{
-if (pSSelf == NULL)
-    return;
-struct annoStreamDbFactorSource *self = *(struct annoStreamDbFactorSource **)pSSelf;
-self->mySource->close(&(self->mySource));
-int i;
-for (i = 0;  i < self->expCount;  i++)
-    {
-    freeMem(self->expCellType[i]);
-    freeMem(self->expTreatment[i]);
-    }
-freez(&self->expCellType);
-freez(&self->expTreatment);
-annoStreamerFree(pSSelf);
-}
-
-struct annoStreamer *annoStreamDbFactorSourceNew(char *db, char *trackTable, char *sourceTable,
-						 char *inputsTable, struct annoAssembly *aa,
-						 int maxOutRows)
-/* Create an annoStreamer (subclass) object using three database tables:
- * trackTable: the table for a track with type factorSource (bed5 + exp{Count,Nums,Scores})
- * sourceTable: trackTable's tdb setting sourceTable; expNums -> source name "cellType+lab+antibody"
- * inputsTable: trackTable's tdb setting inputTrackTable; source name -> cellType, treatment, etc.
- */
-{
-struct annoStreamDbFactorSource *self;
-AllocVar(self);
-struct annoStreamer *streamer = &(self->streamer);
-// Set up external streamer interface
-annoStreamerInit(streamer, aa, annoStreamDbFactorSourceAsObj(), trackTable);
-streamer->rowType = arWords;
-// Get internal streamer for trackTable
-self->mySource = annoStreamDbNew(db, trackTable, aa, maxOutRows, NULL);
-// Slurp in data from small related tables
-getExperimentData(self, db, sourceTable, inputsTable);
-// Override methods that need to pass through to internal source:
-streamer->setRegion = asdfsSetRegion;
-streamer->nextRow = asdfsNextRow;
-streamer->close = asdfsClose;
-
-return (struct annoStreamer *)self;
-}