src/hg/instinct/hgHeatmap2/hgCircleMaps.c 1.9
1.9 2009/03/02 01:30:30 jsanborn
fixed bug with summary rings and subgrouping
Index: src/hg/instinct/hgHeatmap2/hgCircleMaps.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgHeatmap2/hgCircleMaps.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -b -B -U 4 -r1.8 -r1.9
--- src/hg/instinct/hgHeatmap2/hgCircleMaps.c 27 Feb 2009 22:25:45 -0000 1.8
+++ src/hg/instinct/hgHeatmap2/hgCircleMaps.c 2 Mar 2009 01:30:30 -0000 1.9
@@ -461,8 +461,11 @@
struct ring *rg;
for (rg = cm->rings; rg; rg = rg->next)
{
+ if (rg->numSamples == 0)
+ continue;
+
ringSetDefaultColor(rg);
vgMakeColorGradient(vg, rg->zeroColor, rg->highColor, EXPR_DATA_SHADES, upShades);
vgMakeColorGradient(vg, rg->zeroColor, rg->lowColor, EXPR_DATA_SHADES, downShades);
@@ -996,20 +999,33 @@
{
rg2 = ptRings[subset];
rg2->data = hashNew(0);
rg2->numSamples = 0;
+
+ struct slDouble *ad, *allData = NULL;
for (sl = ptSubsets[subset]; sl; sl = sl->next)
{
struct hashEl *el = hashLookup(rg->data, sl->name);
if (!el)
continue;
- struct slDouble *sdList = el->val;
+ struct slDouble *sd, *sdList = el->val;
+ for (sd = sdList; sd; sd = sd->next)
+ {
+ ad = slDoubleNew(sd->val);
+ slAddHead(&allData, ad);
+ }
hashAdd(rg2->data, sl->name, sdList);
rg2->numSamples += 1;
hashRemove(rg->data, sl->name);
rg->numSamples -= 1;
}
+ if (!allData)
+ rg2->median = 0.0;
+ else
+ rg2->median = slDoubleMedian(allData);
+
+ slFreeList(&allData);
}
/* Remove empty ring that was split */
boolean removed = removeRing(cm, rg);
@@ -1017,9 +1033,14 @@
errAbort("Problem with removing ring");
/* Add new rings */
for (subset = 0; subset < subsetNum; subset++)
+ {
+ rg = ptRings[subset];
+ if (rg->numSamples == 0)
+ continue;
slAddHead(&cm->rings, ptRings[subset]);
+ }
}
void splitCircleMap(struct circleMap *cm, struct slName **ptSubsets, int subsetNum)
{