src/hg/instinct/hgHeatmap2/hgCircleMaps.c 1.8

1.8 2009/02/27 22:25:45 jsanborn
updated code
Index: src/hg/instinct/hgHeatmap2/hgCircleMaps.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgHeatmap2/hgCircleMaps.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -b -B -U 4 -r1.7 -r1.8
--- src/hg/instinct/hgHeatmap2/hgCircleMaps.c	27 Feb 2009 21:26:46 -0000	1.7
+++ src/hg/instinct/hgHeatmap2/hgCircleMaps.c	27 Feb 2009 22:25:45 -0000	1.8
@@ -32,8 +32,9 @@
     char *name;              /* name of ring (optional) */
     char *dataset;           /* name of dataset */
     char *type;              /* type of data (feature, SNP, CNV, expression, etc.) */
 
+    int numSamples;          /* num samples in ring */
     int numElements;         /* number of elements in ring */
     double minR;             /* min radius for current ring */
     double maxR;             /* max radius for current ring */
 
@@ -162,8 +163,9 @@
 rg2->dataset = cloneString(rg->dataset);
 rg2->type = cloneString(rg->type);
 rg2->maxDev = rg->maxDev;
 rg2->gain = rg->gain;
+rg2->numSamples = rg->numSamples;
 rg2->numElements = rg->numElements;
 rg2->minR = rg->minR;
 rg2->maxR = rg->maxR;
 rg2->data = NULL;
@@ -190,8 +192,9 @@
 rg->type = cloneString(gh->platform);
 rg->maxDev = maxDev(gh);
 rg->gain = gh->gainSet;
 rg->numElements = 0;
+rg->numSamples = 0;
 rg->minR = 0.0;
 rg->maxR = 0.0;
 rg->data = NULL;
 
@@ -252,8 +255,9 @@
 	slAddHead(&sdList, sd);
 	}
 
     hashAdd(rg->data, sl->name, sdList);
+    rg->numSamples += 1;
     i++;  // increment expId pointer.
     }
 
 rg->median = slDoubleMedian(allData);
@@ -345,8 +349,9 @@
 
     hashAdd(rg->data, sl->name, sd);
     i++;  // increment expId pointer.
 
+    rg->numSamples++;
     freez(&id); 
     }
 }
 
@@ -486,9 +491,9 @@
 }
 
 void drawRing(struct vGfx *vg, struct circleMap *cm, struct ring *rg)
 {
-if (!rg->data) // nothing to draw
+if (!rg->data || rg->numSamples == 0) // nothing to draw
     return;
 
 Color valCol;
 
@@ -614,9 +619,9 @@
 
 struct ring *rg;
 int numRings = 0;
 for (rg = cm->rings; rg; rg = rg->next)
-    if (rg->visible)
+    if (rg->visible && rg->numSamples > 0)
 	numRings++;
 
 double step = (cm->maxR - cm->minR) / (double) numRings;
 
@@ -631,8 +636,15 @@
 for (rg = cm->rings; rg; rg = rg->next)
     {
     if (!rg->visible)  // keep minR/maxR at zero for no display
 	continue;
+    if (rg->numSamples == 0)
+	{
+	rg->minR = 0;
+	rg->maxR = 0;
+	continue;
+	}
+
     rg->minR = rStart;
     rg->maxR = rStop;
 
     rStart += step;
@@ -983,18 +995,20 @@
 for (subset = 0; subset < subsetNum; subset++)
     {
     rg2 = ptRings[subset];
     rg2->data = hashNew(0);
-
+    rg2->numSamples = 0;
     for (sl = ptSubsets[subset]; sl; sl = sl->next)
 	{
 	struct hashEl *el = hashLookup(rg->data, sl->name);
 	if (!el)
 	    continue;
 	struct slDouble *sdList = el->val;
 
 	hashAdd(rg2->data, sl->name, sdList);
+	rg2->numSamples += 1;
 	hashRemove(rg->data, sl->name);
+	rg->numSamples -= 1;
 	}
     }
 
 /* Remove empty ring that was split */