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)
 {