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 */