Skip to content

Commit b3ecc9c

Browse files
committed
Handle prefer_saved option for TF1
Now usage of save points default for TF1 therefore it is normal if evaluation failed. Inform problem to TWebCanvas when not configured. Provide central method to parse tf1 options
1 parent 7424dbe commit b3ecc9c

File tree

3 files changed

+45
-55
lines changed

3 files changed

+45
-55
lines changed

modules/hist/TF1Painter.mjs

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,24 @@ function produceTAxisLogScale(axis, num, min, max) {
2727
axis.fXmax = Math.exp(lmax);
2828
}
2929

30+
function scanTF1Options(opt) {
31+
if (!isStr(opt)) opt = '';
32+
let p = opt.indexOf(';webcanv_hist'), webcanv_hist = false, prefer_saved = false;
33+
if (p >= 0) {
34+
webcanv_hist = true;
35+
opt = opt.slice(0, p);
36+
}
37+
p = opt.indexOf(';force_saved'); // only to support old JSON files from TWebCanvas
38+
if (p < 0)
39+
p = opt.indexOf(';prefer_saved');
40+
if (p >= 0) {
41+
prefer_saved = true;
42+
opt = opt.slice(0, p);
43+
}
44+
return { opt, webcanv_hist, prefer_saved };
45+
}
46+
47+
3048
/**
3149
* @summary Painter for TF1 object
3250
*
@@ -89,7 +107,7 @@ class TF1Painter extends TH1Painter {
89107
xmax = Math.max(xmax, gr.zoom_xmax);
90108
}
91109

92-
this._use_saved_points = (tf1.fSave.length > 3) && (settings.PreferSavedPoints || this.force_saved);
110+
this._use_saved_points = (tf1.fSave.length > 3) && (settings.PreferSavedPoints || this.prefer_saved);
93111

94112
const ensureBins = num => {
95113
if (hist.fNcells !== num + 2) {
@@ -297,29 +315,20 @@ class TF1Painter extends TH1Painter {
297315
}
298316

299317
/** @summary fill information for TWebCanvas
318+
* @desc Used to inform webcanvas when evaluation failed
300319
* @private */
301320
fillWebObjectOptions(opt) {
302-
// mark that saved points are used or evaluation failed
303-
opt.fcust = this._fail_eval ? 'func_fail' : '';
321+
opt.fcust = this._fail_eval && !this.prefer_saved ? 'func_fail' : '';
304322
}
305323

306324
/** @summary draw TF1 object */
307325
static async draw(dom, tf1, opt) {
308-
if (!isStr(opt)) opt = '';
309-
let p = opt.indexOf(';webcanv_hist'), webcanv_hist = false, force_saved = false;
310-
if (p >= 0) {
311-
webcanv_hist = true;
312-
opt = opt.slice(0, p);
313-
}
314-
p = opt.indexOf(';force_saved');
315-
if (p >= 0) {
316-
force_saved = true;
317-
opt = opt.slice(0, p);
318-
}
319-
326+
const web = scanTF1Options(opt);
327+
opt = web.opt;
328+
delete web.opt;
320329
let hist;
321330

322-
if (webcanv_hist) {
331+
if (web.webcanv_hist) {
323332
const dummy = new ObjectPainter(dom);
324333
hist = dummy.getPadPainter()?.findInPrimitives('Func', clTH1D);
325334
}
@@ -335,8 +344,7 @@ class TF1Painter extends TH1Painter {
335344
const painter = new TF1Painter(dom, hist);
336345

337346
painter.$func = tf1;
338-
painter.webcanv_hist = webcanv_hist;
339-
painter.force_saved = force_saved;
347+
Object.assign(painter, web);
340348

341349
painter.createTF1Histogram(tf1, hist);
342350

@@ -345,4 +353,4 @@ class TF1Painter extends TH1Painter {
345353

346354
} // class TF1Painter
347355

348-
export { TF1Painter, produceTAxisLogScale };
356+
export { TF1Painter, produceTAxisLogScale, scanTF1Options };

modules/hist/TF2Painter.mjs

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createHistogram, setHistogramTitle, kNoStats, settings, gStyle, clTF2, clTH2F, isStr, isFunc } from '../core.mjs';
22
import { TH2Painter } from '../hist/TH2Painter.mjs';
33
import { proivdeEvalPar } from '../base/func.mjs';
4-
import { produceTAxisLogScale } from '../hist/TF1Painter.mjs';
4+
import { produceTAxisLogScale, scanTF1Options } from '../hist/TF1Painter.mjs';
55
import { ObjectPainter, getElementMainPainter } from '../base/ObjectPainter.mjs';
66
import { DrawOptions, floatToString } from '../base/BasePainter.mjs';
77
import { THistPainter } from '../hist2d/THistPainter.mjs';
@@ -62,7 +62,7 @@ class TF2Painter extends TH2Painter {
6262
if ((nsave > 0) && (nsave !== (func.fSave[nsave+4]+1) * (func.fSave[nsave+5]+1)))
6363
nsave = 0;
6464

65-
this._use_saved_points = (nsave > 0) && (settings.PreferSavedPoints || this.force_saved);
65+
this._use_saved_points = (nsave > 0) && (settings.PreferSavedPoints || this.prefer_saved);
6666

6767
const fp = this.getFramePainter(),
6868
pad = this.getPadPainter()?.getRootPad(true),
@@ -281,25 +281,17 @@ class TF2Painter extends TH2Painter {
281281
}
282282

283283
/** @summary fill information for TWebCanvas
284+
* @desc Used to inform webcanvas when evaluation failed
284285
* @private */
285286
fillWebObjectOptions(opt) {
286-
// mark that saved points are used or evaluation failed
287-
opt.fcust = this._fail_eval ? 'func_fail' : '';
287+
opt.fcust = this._fail_eval && !this.prefer_saved ? 'func_fail' : '';
288288
}
289289

290290
/** @summary draw TF2 object */
291291
static async draw(dom, tf2, opt) {
292-
if (!isStr(opt)) opt = '';
293-
let p = opt.indexOf(';webcanv_hist'), webcanv_hist = false, force_saved = false;
294-
if (p >= 0) {
295-
webcanv_hist = true;
296-
opt = opt.slice(0, p);
297-
}
298-
p = opt.indexOf(';force_saved');
299-
if (p >= 0) {
300-
force_saved = true;
301-
opt = opt.slice(0, p);
302-
}
292+
const web = scanTF1Options(opt);
293+
opt = web.opt;
294+
delete web.opt;
303295

304296
const d = new DrawOptions(opt);
305297
if (d.empty())
@@ -319,7 +311,7 @@ class TF2Painter extends TH2Painter {
319311

320312
let hist;
321313

322-
if (webcanv_hist) {
314+
if (web.webcanv_hist) {
323315
const dummy = new ObjectPainter(dom);
324316
hist = dummy.getPadPainter()?.findInPrimitives('Func', clTH2F);
325317
}
@@ -332,8 +324,7 @@ class TF2Painter extends TH2Painter {
332324
const painter = new TF2Painter(dom, hist);
333325

334326
painter.$func = tf2;
335-
painter.webcanv_hist = webcanv_hist;
336-
painter.force_saved = force_saved;
327+
Object.assign(painter, web);
337328
painter.createTF2Histogram(tf2, hist);
338329
return THistPainter._drawHist(painter, opt);
339330
}

modules/hist/TF3Painter.mjs

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createHistogram, setHistogramTitle, kNoStats, settings, clTF3, clTH2F, isStr } from '../core.mjs';
22
import { TH2Painter } from '../hist/TH2Painter.mjs';
33
import { proivdeEvalPar } from '../base/func.mjs';
4-
import { produceTAxisLogScale } from '../hist/TF1Painter.mjs';
4+
import { produceTAxisLogScale, scanTF1Options } from '../hist/TF1Painter.mjs';
55
import { ObjectPainter, getElementMainPainter } from '../base/ObjectPainter.mjs';
66
import { DrawOptions } from '../base/BasePainter.mjs';
77
import { THistPainter } from '../hist2d/THistPainter.mjs';
@@ -74,7 +74,7 @@ class TF3Painter extends TH2Painter {
7474
createTF3Histogram(func, hist) {
7575
const nsave = func.fSave.length - 9;
7676

77-
this._use_saved_points = (nsave > 0) && (settings.PreferSavedPoints || this.force_saved);
77+
this._use_saved_points = (nsave > 0) && (settings.PreferSavedPoints || this.prefer_saved);
7878

7979
const fp = this.getFramePainter(),
8080
pad = this.getPadPainter()?.getRootPad(true),
@@ -238,25 +238,17 @@ class TF3Painter extends TH2Painter {
238238
}
239239

240240
/** @summary fill information for TWebCanvas
241+
* @desc Used to inform webcanvas when evaluation failed
241242
* @private */
242243
fillWebObjectOptions(opt) {
243-
// mark that saved points are used or evaluation failed
244-
opt.fcust = this._fail_eval ? 'func_fail' : '';
244+
opt.fcust = this._fail_eval && !this.prefer_saved ? 'func_fail' : '';
245245
}
246246

247247
/** @summary draw TF3 object */
248248
static async draw(dom, tf3, opt) {
249-
if (!isStr(opt)) opt = '';
250-
let p = opt.indexOf(';webcanv_hist'), webcanv_hist = false, force_saved = false;
251-
if (p >= 0) {
252-
webcanv_hist = true;
253-
opt = opt.slice(0, p);
254-
}
255-
p = opt.indexOf(';force_saved');
256-
if (p >= 0) {
257-
force_saved = true;
258-
opt = opt.slice(0, p);
259-
}
249+
const web = scanTF1Options(opt);
250+
opt = web.opt;
251+
delete web.opt;
260252

261253
const d = new DrawOptions(opt);
262254
if (d.empty() || (opt === 'gl'))
@@ -271,7 +263,7 @@ class TF3Painter extends TH2Painter {
271263

272264
let hist;
273265

274-
if (webcanv_hist) {
266+
if (web.webcanv_hist) {
275267
const dummy = new ObjectPainter(dom);
276268
hist = dummy.getPadPainter()?.findInPrimitives('Func', clTH2F);
277269
}
@@ -284,8 +276,7 @@ class TF3Painter extends TH2Painter {
284276
const painter = new TF3Painter(dom, hist);
285277

286278
painter.$func = tf3;
287-
painter.webcanv_hist = webcanv_hist;
288-
painter.force_saved = force_saved;
279+
Object.assign(painter, web);
289280
painter.createTF3Histogram(tf3, hist);
290281
return THistPainter._drawHist(painter, opt);
291282
}

0 commit comments

Comments
 (0)