f9d03e79d5565c0d9a28d57c0c67986a085a40c4 kent Tue Dec 14 21:09:37 2021 -0800 Fixing a three little bugs. Adding some #defines to avoid magic numbers. Fixing differences in sorting between expression values and labels. diff --git src/hg/inc/facetedTable.h src/hg/inc/facetedTable.h index 6f25360..01f63a8 100644 --- src/hg/inc/facetedTable.h +++ src/hg/inc/facetedTable.h @@ -1,94 +1,95 @@ /* facetedTable - routines to help produce a sortable table with facet selection fields. * This builds on top of things in tablesTables and facetField. */ #ifndef FACETEDTABLE_H #define FACETEDTABLE_H /* Typical usage of this module would be as so for interactive updates of facets and selection: * * struct facetedTable *facTab = facetedTableFromTable(myTable, varPrefix, "organ,cell,stage"); * facetedTableUpdateOnClick(facTab, cart); * struct facetField *selectedFf; * struct fieldedTable *selected = facetedTableSelect(facTab, cart, &selectedFf); * facetedTableWriteHtml(facTab, cart, selected, selectedFf, "shortLabel,expressionValue", * "../cgi-bin/hgSomething?hgsid=123_ABC", 32, * NULL, NULL, 7); * * For just getting a list of selected rows (by row index) * * struct facetedTable *facTab = facetedTableFromTable(myTable, varPrefix, "organ,cell,stage"); * struct slInt *selList = facetedTableSelectOffsets(facTab, cart); * */ struct facetedTable /* Help manage a faceted table */ { struct facetedTable *next; char *name; /* Name of file or database table */ char *varPrefix; /* Prefix used on CGI variables */ char *facets; /* Comma separated list of facets */ struct fieldedTable *table; /* Associated table-in-memory */ struct facetField **ffArray; /* Additional info on each field of table for faceter */ boolean mergeFacetsOk; /* If set can merge facets */ }; void facetedTableFree(struct facetedTable **pFt); /* Free up resources associated with faceted table */ struct facetedTable *facetedTableFromTable(struct fieldedTable *table, char *varPrefix, char *facets); /* Construct a facetedTable around a fieldedTable */ boolean facetedTableUpdateOnClick(struct facetedTable *facTab, struct cart *cart); /* If we got called by a click on a facet deal with that and return TRUE, else do * nothing and return false */ struct fieldedTable *facetedTableSelect(struct facetedTable *facTab, struct cart *cart, struct facetField ***retFfArray); /* Return table containing rows of facTab->table that have passed facet selection */ void facetedTableWriteHtml(struct facetedTable *facTab, struct cart *cart, /* User settingss and stuff */ struct fieldedTable *selected, /* Table that just contains rows that survive selection */ struct facetField **selectedFf, /* Fields that survive selection */ char *displayList, /* Comma separated list of fields to display in table */ char *returnUrl, /* Url that takes us back to page we are writing next click */ int maxFieldWidth, /* How big do we let fields get in characters */ struct hash *tagOutWrappers, /* A hash full of callbacks, keyed by field name */ void *wrapperContext, /* Gets passed to callbacks in tagOutWrappers */ int facetUsualSize); /* Ho many items in a facet before opening */ /* Write out the main HTML associated with facet selection and table. */ struct slInt *facetedTableSelectOffsets(struct facetedTable *facTab, struct cart *cart); /* Return a list of row positions that pass faceting */ struct facetedTableCountOffset /* An offset to a value field, and a count to help us merge values */ { struct facetedTableCountOffset *next; int valIx; /* Index of value field */ int count; /* How many samples are behind this value */ }; struct facetedTableMergedOffset /* What we need to know to merge */ { struct facetedTableMergedOffset *next; char *name; /* Name of merged bar */ char color[8]; /* Color for merged bar */ int totalCount; /* Total count of all merged elements */ struct facetedTableCountOffset *colList; /* List of indexes int parent table to sum together */ int outIx; /* Position in output file */ }; struct facetedTableMergedOffset *facetedTableMakeMergedOffsets(struct facetedTable *facTab, struct cart *cart); /* Return a structure that will let us relatively rapidly merge together one row */ -void facetedTableMergeVals(struct facetedTableMergedOffset *tmoList, float *inVals, float *outVals); +void facetedTableMergeVals(struct facetedTableMergedOffset *tmoList, float *inVals, int inValCount, + float *outVals, int outValCount); /* Populate outVals array with columns of weighted averages derived from applying * tmoList to inVals array. */ #endif /* FACETEDTABLE_H */