Skip to content

Commit 9cd32d0

Browse files
committed
Improve TH2 optimization
Exclude empty x/y bins when doing compression. In some extreme cases one could only see few bins. Now should be better
1 parent b5f2c35 commit 9cd32d0

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

scripts/JSRootCore.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
}
8686
} (function(JSROOT) {
8787

88-
JSROOT.version = "dev 11/12/2015";
88+
JSROOT.version = "dev 14/12/2015";
8989

9090
JSROOT.source_dir = "";
9191
JSROOT.source_min = false;

scripts/JSRootPainter.more.js

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2200,10 +2200,16 @@
22002200
JSROOT.TH2Painter.prototype.CompressAxis = function(arr, maxlen, regular) {
22012201
if (arr.length <= maxlen) return;
22022202

2203+
// check filled bins
2204+
var left = 0, right = arr.length-2;
2205+
while ((left < right) && (arr[left].cnt===0)) ++left;
2206+
while ((left < right) && (arr[right].cnt===0)) --right;
2207+
if ((left==right) || (right-left < maxlen)) return;
2208+
22032209
function RemoveNulls() {
2204-
var j = arr.length-2;
2205-
while (j>0) {
2206-
while ((j>0) && (arr[j]!=null)) --j;
2210+
var j = right;
2211+
while (j>left) {
2212+
while ((j>left) && (arr[j]!=null)) --j;
22072213
var j2 = j;
22082214
while ((j>0) && (arr[j]==null)) --j;
22092215
if (j < j2) arr.splice(j+1, j2-j);
@@ -2212,24 +2218,24 @@
22122218
};
22132219

22142220
if (!regular) {
2215-
var grdist = Math.abs(arr[arr.length-1].gr - arr[0].gr) / maxlen;
2221+
var grdist = Math.abs(arr[right+1].gr - arr[left].gr) / maxlen;
22162222
var i = 0;
2217-
while (i < arr.length-1) {
2223+
while (i <= right) {
22182224
var gr0 = arr[i++].gr;
22192225
// remove points which are not far away from current
2220-
while ((i < arr.length-1) && (Math.abs(arr[i+1].gr - gr0) < grdist)) arr[i++] = null;
2226+
while ((i <= right) && (Math.abs(arr[i+1].gr - gr0) < grdist)) arr[i++] = null;
22212227
}
22222228
RemoveNulls();
22232229
}
22242230

2225-
if (regular || (arr.length > 1.5*maxlen)) {
2231+
if (regular || ((right-left) > 1.5*maxlen)) {
22262232
// just remove regular number of bins
2227-
var period = Math.floor(arr.length / maxlen);
2233+
var period = Math.floor((right-left) / maxlen);
22282234
if (period<2) period = 2;
2229-
var i = 0;
2230-
while (++i < arr.length) {
2235+
var i = left;
2236+
while (++i <= right) {
22312237
for (var k=1;k<period;++k)
2232-
if (++i < arr.length - 1) arr[i] = null;
2238+
if (++i <= right) arr[i] = null;
22332239
}
22342240
RemoveNulls();
22352241
}
@@ -2249,13 +2255,13 @@
22492255
for (var i = i1; i <= i2; ++i) {
22502256
var x = this.GetBinX(i);
22512257
if (this.options.Logx && (x <= 0)) continue;
2252-
xx.push({indx:i, axis: x, gr: this.grx(x)});
2258+
xx.push({indx:i, axis: x, gr: this.grx(x), cnt:0});
22532259
}
22542260

22552261
for (var j = j1; j <= j2; ++j) {
22562262
var y = this.GetBinY(j);
22572263
if (this.options.Logy && (y <= 0)) continue;
2258-
yy.push({indx:j, axis: y, gr: this.gry(y)});
2264+
yy.push({indx:j, axis: y, gr: this.gry(y), cnt:0});
22592265
}
22602266

22612267
// first found min/max values in selected range, and number of non-zero bins
@@ -2295,15 +2301,23 @@
22952301
binz = this.histo.getBinContent(i + 1, j + 1);
22962302
if ((binz == 0) || (binz < this.minbin)) continue;
22972303

2304+
var show = false;
2305+
22982306
if (coordinates_kind == 0) {
2299-
if (this.getValueColor(binz) != null) nbins++;
2307+
if (this.getValueColor(binz) != null) show = true;
23002308
} else {
23012309
zdiff = uselogz ? (logmax - ((binz>0) ? Math.log(binz) : logmin)) : this.maxbin - binz;
23022310
dgrx = zdiff * xfactor;
23032311
dgry = zdiff * yfactor;
23042312

23052313
if (((1 - 2*zdiff*xfactor)*(xx[i-i1+1].gr - xx[i-i1].gr) > 0.05) ||
2306-
((1 - 2*zdiff*yfactor)*(yy[j-j1].gr - yy[j-j1+1].gr) > 0.05)) nbins++;
2314+
((1 - 2*zdiff*yfactor)*(yy[j-j1].gr - yy[j-j1+1].gr) > 0.05)) show = true;
2315+
}
2316+
2317+
if (show) {
2318+
nbins++;
2319+
xx[i-i1].cnt+=1;
2320+
yy[j-j1].cnt+=1;
23072321
}
23082322
}
23092323
}

0 commit comments

Comments
 (0)