2f6acb208e6abe1f09be24d4a6bec948148a5ee9 kent Mon Feb 1 17:29:10 2021 -0800 Moving this to directory for exploratory non-reviewed code. It was a nice little platform to work out ideas. diff --git src/hg/hgFacetedBars/hgFacetedBars.c src/hg/hgFacetedBars/hgFacetedBars.c deleted file mode 100644 index 32dc173..0000000 --- src/hg/hgFacetedBars/hgFacetedBars.c +++ /dev/null @@ -1,166 +0,0 @@ -/* hgFacetedBars - A stand alone to show a faceted barchart selection.. */ -#include <sys/time.h> -#include "common.h" -#include "linefile.h" -#include "hash.h" -#include "options.h" -#include "jksql.h" -#include "htmshell.h" -#include "web.h" -#include "cheapcgi.h" -#include "cart.h" -#include "hui.h" -#include "udc.h" -#include "knetUdc.h" -#include "genbank.h" -#include "tablesTables.h" -#include "facetField.h" -#include "facetedTable.h" -#include "sqlNum.h" - -/* Global Variables */ -struct cart *cart; /* CGI and other variables */ -struct hash *oldVars = NULL; -char *database = NULL; -char *genome = NULL; - -struct wrapContext -/* Context used by various wrappers. */ - { - int nameIx; /* First col by convention is name */ - int countIx; /* Index of count in row */ - int meanIx; /* The field that has total read count */ - int colorIx; /* Index of color in row */ - double maxMean;/* Maximum of any total value */ - }; - -void wrapMean(struct fieldedTable *table, struct fieldedRow *row, - char *field, char *val, char *shortVal, void *context) -/* Write out wrapper draws a SVG bar*/ -{ -struct wrapContext *wc = context; -char *color = "#000000"; -int colorIx = wc->colorIx; -if (colorIx >= 0) - color = row->row[colorIx]; -double mean = sqlDouble(val); -int width = 500, height = 13; // These are units of ~2010 pixels or something -double barWidth = (double)width*mean/wc->maxMean; -printf("<svg width=\"%g\" height=\"%d\">", barWidth, height); -printf("<rect width=\"%g\" height=\"%d\" style=\"fill:%s\">", - barWidth, height, color); -printf("</svg>"); -printf(" %6.2f", mean); -} - -#ifdef OLD -double calcMaxMean(struct fieldedTable *table, struct wrapContext *context) -/* Go through text table figureing out mean for each row based on - * context fields. Return max of the means */ -{ -boolean firstTime = TRUE; -double max = 0.0; -struct fieldedRow *fr; -int countIx = context->countIx; -int totalIx = context->totalIx; -for (fr = table->rowList; fr != NULL; fr = fr->next) - { - double val = sqlDouble(fr->row[totalIx])/sqlDouble(fr->row[countIx]); - if (firstTime) - { - max = val; - firstTime = FALSE; - } - else if (max < val) - max = val; - } -return max; -} -#endif /* OLD */ - -void doBody() -{ -/* Fake up a 'track' for development */ -char *trackName = "cellFacetsJk1"; - -/* Load up table from tsv file */ -char *statsFileName = "/gbdb/hg38/bbi/singleCellMerged/barChart.stats"; -char *requiredStatsFields[] = {"count","organ","cell_class","stage","cell_type"}; -struct fieldedTable *table = fieldedTableFromTabFile(statsFileName, statsFileName, - requiredStatsFields, ArraySize(requiredStatsFields)); -char *keyField = table->fields[0]; - -struct sqlConnection *conn = sqlConnect(database); -struct hash *emptyHash = hashNew(0); -struct hash *wrapperHash = hashNew(0); -struct facetedTable *ft = facetedTableFromTable(table, - trackName, "organ,cell_class,stage,cell_type"); - -/* Working within a form we save context */ -printf("<form action=\"../cgi-bin/hgFacetedBars\" name=\"facetForm\" method=\"GET\">\n"); -cartSaveSession(cart); - -/* Process user input and get selected subtable */ -facetedTableUpdateOnClick(ft, cart); -struct fieldedTable *selected = facetedTableSelect(ft, cart); - -/* Set up url that has enough context to get back to us. This is very much a work in - * progress. */ -char returnUrl[PATH_LEN*2]; -safef(returnUrl, sizeof(returnUrl), "../cgi-bin/hgFacetedBars?%s", - cartSidUrlString(cart) ); - -char viewFields[256]; -safef(viewFields, sizeof(viewFields), "count,%s,mean_total", keyField); - - -/* Set up wrappers for some of output fields */ -struct wrapContext context = {.nameIx = 0, - .countIx = fieldedTableFindFieldIx(table, "count"), - .meanIx = fieldedTableFindFieldIx(table, "mean_total"), - .colorIx = fieldedTableFindFieldIx(table, "color"), - }; -context.maxMean = fieldedTableMaxInCol(table, context.meanIx); - -/* Put up faceted search and table of visible fields. */ -hashAdd(wrapperHash, "mean_total", wrapMean); - -facetedTableWriteHtml(ft, cart, selected, viewFields, returnUrl, 32, wrapperHash, &context, 10); - -/* Clean up and go home. */ -printf("</form>\n"); -hashFree(&emptyHash); -sqlDisconnect(&conn); -} - -void doMiddle(struct cart *theCart) -/* Set up globals and make web page */ -{ -/* Set some major global variable and attach us to current genome and DB. */ -cart = theCart; -getDbAndGenome(cart, &database, &genome, oldVars); -initGenbankTableNames(database); - -/* Set udcTimeout from cart */ -int timeout = cartUsualInt(cart, "udcTimeout", 300); -if (udcCacheTimeout() < timeout) - udcSetCacheTimeout(timeout); -knetUdcInstall(); - -/* Wrap http/html text around main routine */ -htmStart(stdout, "hgFacetedBars"); -doBody(); -htmEnd(stdout); -} - -/* Null terminated list of CGI Variables we don't want to save - * permanently. */ -char *excludeVars[] = {"Submit", "submit", NULL,}; - -int main(int argc, char *argv[]) -/* Process command line. */ -{ -cgiSpoof(&argc, argv); -cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars); -return 0; -}