#include "hp2graph.h" #include "output.h" /* * trcelement() -- Drop entries from entrysize-1 and downwards. * Stop just before total dropped area exceeds threshold * */ void trcelement(int threshold) { double area = 0; double limit; int i; for(i=0; iarea; limit *= (double)threshold; limit /= 100.0; for(i=entrysize; i>1 && (area+=entrydata[i-1]->area) < limit; i--) ; entrysize = i; } /* * topkeys() -- We only have room in the key for a maximum of 20 identifiers. * We therefore choose to keep the top 20 bands --- these will * be the most important ones, since this pass is performed * after the threshold and standard deviation passes. If there * are more than 20 bands, the excess are gathered together as * an "OTHER" band which appears as band 20. * (If are is 0 % of total area, and we are sorted, then collect rest as OTHER) */ int visiblePercentage(double area) { return 0 != (int)(100*area/areabelow+0.5); } void topkeys(int sorted) { int i; int j; int maxkey; Value *ovp = 0; if (entrysize < MAXKEY) maxkey = entrysize; else maxkey = MAXKEY; if(sorted) while(maxkey>0 && !visiblePercentage(entrydata[maxkey-1]->area)) maxkey--; if(maxkeyvalue; while(vp) { Value *t = vp; yUInts[vp->census] += vp->size; vp = vp ->next; t->next = ovp; ovp = t; } } entrydata[maxkey]->key.token = "OTHER"; entrydata[maxkey]->value = 0; entrydata[maxkey]->area = areaID(sampledata,yUInts,samplesize); ovp = vector2value(yUInts,entrydata[maxkey],ovp); { UInt height = 0; for(i=0; iheight) height = yUInts[i]; entrydata[maxkey]->height = height; } if(visiblePercentage(entrydata[maxkey]->area)) entrysize = maxkey+1; else entrysize = maxkey; } }