@ndmspc/ndmvr-core 1.1.0-rc.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/{RCanvasPainter-DQGWienR.js → RCanvasPainter-BN1wz_jA.js} +1 -1
  3. package/dist/assets/RNTuple-B19bW6t4.js +1 -0
  4. package/dist/assets/{RPavePainter-CQHUOnSn.js → RPavePainter-BOw0-OFU.js} +1 -1
  5. package/dist/assets/{RTreeMapPainter-B2r2zCJG.js → RTreeMapPainter-DNojexp9.js} +1 -1
  6. package/dist/assets/{TASImagePainter-DRdiRLt1.js → TASImagePainter-BNJ5OAGP.js} +1 -1
  7. package/dist/assets/{TAnnotation3DPainter-BCJen6cS.js → TAnnotation3DPainter-BCGBhq-q.js} +1 -1
  8. package/dist/assets/{TArrowPainter-Dspl2Ikh.js → TArrowPainter-C7a0r3SV.js} +1 -1
  9. package/dist/assets/{TBoxPainter-BQEN4gj8.js → TBoxPainter-Djh43LYY.js} +1 -1
  10. package/dist/assets/{TEfficiencyPainter-TxRejkVD.js → TEfficiencyPainter-dXd5DL3h.js} +1 -1
  11. package/dist/assets/{TF1Painter-BuwSTmhs.js → TF1Painter-DwE8KsBp.js} +1 -1
  12. package/dist/assets/{TF2Painter-BTh6LWBk.js → TF2Painter-SGNNKiK5.js} +1 -1
  13. package/dist/assets/{TF3Painter-R5EVXlD4.js → TF3Painter-yaRyTX9u.js} +1 -1
  14. package/dist/assets/{TGaxisPainter-BJuDLLel.js → TGaxisPainter-DSiIbikC.js} +1 -1
  15. package/dist/assets/{TGraph2DPainter-aeM0xqgu.js → TGraph2DPainter-COqZBIPT.js} +1 -1
  16. package/dist/assets/{TGraphPainter-DLkx_1ES.js → TGraphPainter-Bp7xEbQz.js} +1 -1
  17. package/dist/assets/{TGraphPainter-CtqNpDiH.js → TGraphPainter-CurXuifu.js} +1 -1
  18. package/dist/assets/{TGraphPolarPainter-bMuBuvEZ.js → TGraphPolarPainter-u-FCb_Gb.js} +1 -1
  19. package/dist/assets/{TGraphTimePainter-D_1RHDMz.js → TGraphTimePainter-DDPwiVGX.js} +1 -1
  20. package/dist/assets/{TH1Painter-CMr7gXzd.js → TH1Painter-BXzutgI3.js} +1 -1
  21. package/dist/assets/{TH1Painter--tuoUZTH.js → TH1Painter-DyN-WKyv.js} +1 -1
  22. package/dist/assets/{TH2Painter-DHaL_lR_.js → TH2Painter-BpixRP4j.js} +1 -1
  23. package/dist/assets/{TH2Painter-BLfyBVB5.js → TH2Painter-DceuYQAL.js} +1 -1
  24. package/dist/assets/{TH3Painter-DLCndhZ0.js → TH3Painter-BA_W8tmJ.js} +1 -1
  25. package/dist/assets/{THStackPainter-B3TUpsVt.js → THStackPainter-BWLN_w9A.js} +1 -1
  26. package/dist/assets/{THistPainter-Df-RmCQH.js → THistPainter-B2S5BnuY.js} +1 -1
  27. package/dist/assets/{TLinePainter-RinEQkrM.js → TLinePainter-D8inyuoX.js} +1 -1
  28. package/dist/assets/{TMultiGraphPainter-BQyL8zWX.js → TMultiGraphPainter-DcwdyhOr.js} +1 -1
  29. package/dist/assets/{TPavePainter-Dx40jhkF.js → TPavePainter-1yngbgp8.js} +1 -1
  30. package/dist/assets/{TPiePainter-BaTIH6-e.js → TPiePainter-BgDv4srX.js} +1 -1
  31. package/dist/assets/{TPolyLinePainter-7_jf8MLI.js → TPolyLinePainter-BYlrAjCB.js} +1 -1
  32. package/dist/assets/{TPolyMarker3D-DYlLB9Ww.js → TPolyMarker3D-BaWOSDy6.js} +1 -1
  33. package/dist/assets/{TRatioPlotPainter-BvUop_Na.js → TRatioPlotPainter-CJgkL58z.js} +1 -1
  34. package/dist/assets/{TScatterPainter-CvLCMGW2.js → TScatterPainter-Bt11j8z8.js} +1 -1
  35. package/dist/assets/{TSplinePainter-DJPtQW6I.js → TSplinePainter-p6k_OB02.js} +1 -1
  36. package/dist/assets/{TTextPainter-BwCh-g5B.js → TTextPainter-B26aOYGd.js} +1 -1
  37. package/dist/assets/{TTree-CE4EQRMu.js → TTree-BtFtnLeD.js} +1 -1
  38. package/dist/assets/{TWebPaintingPainter-CexNsDDp.js → TWebPaintingPainter-CZ6lo-7N.js} +1 -1
  39. package/dist/assets/{draw3d-BPJMZpwL.js → draw3d-ejHvJRmG.js} +1 -1
  40. package/dist/assets/{func-C1jNXIub.js → func-C6FX2eN2.js} +1 -1
  41. package/dist/assets/{hist3d-DCmav5Ga.js → hist3d-D9VevdP6.js} +1 -1
  42. package/dist/assets/{latex3d-ITrfFgp8.js → latex3d-8Hbnfz6c.js} +1 -1
  43. package/dist/assets/{main-CvPDcTGr.js → main-DwRPe_ox.js} +191 -191
  44. package/dist/assets/{more-CGvLPt4r.js → more-64laEJ4X.js} +1 -1
  45. package/dist/assets/{ndmvr-aframe-core-Cw91_9_Y.js → ndmvr-aframe-core-DEHQ38JB.js} +4 -4
  46. package/dist/assets/{rntuple-BCwqxNeP.js → rntuple-i8TaG-6V.js} +1 -1
  47. package/dist/assets/{stress-Ihg3ljmc.js → stress-KrXoDujC.js} +1 -1
  48. package/dist/assets/{v7more-H3D-KQGQ.js → v7more-C-UZAxz1.js} +1 -1
  49. package/dist/docs/components/configuration/configuration/index.html +243 -238
  50. package/dist/docs/components/tutorial/canvas/canvas/index.html +1 -1
  51. package/dist/docs/components/tutorial/configurationChapter/configuration-chapter/index.html +1 -1
  52. package/dist/docs/components/tutorial/firstVisualization/first-visualization/index.html +1 -1
  53. package/dist/docs/components/tutorial/interactions/interactions/index.html +1 -1
  54. package/dist/docs/downloads/canvas.zip +0 -0
  55. package/dist/docs/downloads/configuration.zip +0 -0
  56. package/dist/docs/downloads/first-visualization.zip +0 -0
  57. package/dist/docs/downloads/interactions.zip +0 -0
  58. package/dist/docs/index.html +1 -1
  59. package/dist/docs/search/search_index.json +1 -1
  60. package/dist/docs/sitemap.xml.gz +0 -0
  61. package/dist/index.es.js +962 -953
  62. package/dist/index.html +2 -2
  63. package/dist/index.umd.js +10 -10
  64. package/dist/stress.html +2 -2
  65. package/package.json +1 -1
  66. package/dist/assets/RNTuple-L4uyxl3s.js +0 -1
@@ -1 +1 @@
1
- import{TLinePainter as n}from"./TLinePainter-RinEQkrM.js";import{a6 as d}from"./ndmvr-aframe-core-Cw91_9_Y.js";class r extends n{#h;#i;#s;#t;#e;rotate(t,i,s){let h=this.#e*Math.cos(t),e=this.#e*Math.sin(t),a="";return i!==void 0&&s!==void 0?a=`M${Math.round(i-h)},${Math.round(s-e)}`:(h=-h,e=-e),a+=`l${Math.round(h)},${Math.round(e)}`,i&&s===void 0&&(a+="z"),a}createPath(){const t=Math.atan2(this.y2-this.y1,this.x2-this.x1),i=this.#e*Math.cos(this.#t),s=i*Math.cos(t),h=i*Math.sin(t);let e="";return this.#h&&(e+=this.rotate(t-Math.PI-this.#t,this.x1,this.y1)+this.rotate(t-Math.PI+this.#t,this.#h>10)),this.#i%10===2&&(e+=this.rotate(t-Math.PI-this.#t,(this.x1+this.x2-s)/2,(this.y1+this.y2-h)/2)+this.rotate(t-Math.PI+this.#t,this.#i>10)),this.#i%10===1&&(e+=this.rotate(t-this.#t,(this.x1+this.x2+s)/2,(this.y1+this.y2+h)/2)+this.rotate(t+this.#t,this.#i>10)),this.#s&&(e+=this.rotate(t-this.#t,this.x2,this.y2)+this.rotate(t+this.#t,this.#s>10)),`M${Math.round(this.x1+(this.#h>10?s:0))},${Math.round(this.y1+(this.#h>10?h:0))}L${Math.round(this.x2-(this.#s>10?s:0))},${Math.round(this.y2-(this.#s>10?h:0))}`+e}prepareDraw(){super.prepareDraw();const t=this.getObject(),i=t.fOption,s=this.getPadPainter().getPadRect();this.#e=Math.max(3,Math.round(Math.max(s.width,s.height)*t.fArrowSize*.8)),this.#t=t.fAngle/2/180*Math.PI,this.#h=this.#i=this.#s=0,i.indexOf("<")===0&&(this.#h=i.indexOf("<|")===0?12:2),i.indexOf("->-")>=0?this.#i=1:i.indexOf("-|>-")>=0?this.#i=11:i.indexOf("-<-")>=0?this.#i=2:i.indexOf("-<|-")>=0&&(this.#i=12);const h=i.lastIndexOf(">"),e=i.lastIndexOf("|>"),a=i.length;h>=0&&h===a-1&&(this.#s=e>=0&&e===a-2?11:1),this.createAttFill({attr:t,enable:this.#h>10||this.#s>10})}addExtras(t){t.call(this.fillatt.func)}static async draw(t,i,s){const h=new r(t,i,s);return d(h,!1).then(()=>h.redraw())}}export{r as TArrowPainter};
1
+ import{TLinePainter as n}from"./TLinePainter-D8inyuoX.js";import{a6 as d}from"./ndmvr-aframe-core-DEHQ38JB.js";class r extends n{#h;#i;#s;#t;#e;rotate(t,i,s){let h=this.#e*Math.cos(t),e=this.#e*Math.sin(t),a="";return i!==void 0&&s!==void 0?a=`M${Math.round(i-h)},${Math.round(s-e)}`:(h=-h,e=-e),a+=`l${Math.round(h)},${Math.round(e)}`,i&&s===void 0&&(a+="z"),a}createPath(){const t=Math.atan2(this.y2-this.y1,this.x2-this.x1),i=this.#e*Math.cos(this.#t),s=i*Math.cos(t),h=i*Math.sin(t);let e="";return this.#h&&(e+=this.rotate(t-Math.PI-this.#t,this.x1,this.y1)+this.rotate(t-Math.PI+this.#t,this.#h>10)),this.#i%10===2&&(e+=this.rotate(t-Math.PI-this.#t,(this.x1+this.x2-s)/2,(this.y1+this.y2-h)/2)+this.rotate(t-Math.PI+this.#t,this.#i>10)),this.#i%10===1&&(e+=this.rotate(t-this.#t,(this.x1+this.x2+s)/2,(this.y1+this.y2+h)/2)+this.rotate(t+this.#t,this.#i>10)),this.#s&&(e+=this.rotate(t-this.#t,this.x2,this.y2)+this.rotate(t+this.#t,this.#s>10)),`M${Math.round(this.x1+(this.#h>10?s:0))},${Math.round(this.y1+(this.#h>10?h:0))}L${Math.round(this.x2-(this.#s>10?s:0))},${Math.round(this.y2-(this.#s>10?h:0))}`+e}prepareDraw(){super.prepareDraw();const t=this.getObject(),i=t.fOption,s=this.getPadPainter().getPadRect();this.#e=Math.max(3,Math.round(Math.max(s.width,s.height)*t.fArrowSize*.8)),this.#t=t.fAngle/2/180*Math.PI,this.#h=this.#i=this.#s=0,i.indexOf("<")===0&&(this.#h=i.indexOf("<|")===0?12:2),i.indexOf("->-")>=0?this.#i=1:i.indexOf("-|>-")>=0?this.#i=11:i.indexOf("-<-")>=0?this.#i=2:i.indexOf("-<|-")>=0&&(this.#i=12);const h=i.lastIndexOf(">"),e=i.lastIndexOf("|>"),a=i.length;h>=0&&h===a-1&&(this.#s=e>=0&&e===a-2?11:1),this.createAttFill({attr:t,enable:this.#h>10||this.#s>10})}addExtras(t){t.call(this.fillatt.func)}static async draw(t,i,s){const h=new r(t,i,s);return d(h,!1).then(()=>h.redraw())}}export{r as TArrowPainter};
@@ -1 +1 @@
1
- import{a7 as n,ba as o,bX as x,a3 as f,bv as c,a0 as l,a1 as y,a6 as _}from"./ndmvr-aframe-core-Cw91_9_Y.js";class r extends n{#t;#s;moveStart(t,s){const i=Math.abs(this.x2-this.x1),h=Math.abs(this.y1-this.y2);this.c_x1=Math.abs(t-this.x2)>i*.1,this.c_x2=Math.abs(t-this.x1)>i*.1,this.c_y1=Math.abs(s-this.y2)>h*.1,this.c_y2=Math.abs(s-this.y1)>h*.1,this.c_x1!==this.c_x2&&this.c_y1&&this.c_y2&&(this.c_y1=this.c_y2=!1),this.c_y1!==this.c_y2&&this.c_x1&&this.c_x2&&(this.c_x1=this.c_x2=!1)}moveDrag(t,s){this.x1+=this.c_x1?t:0,this.x2+=this.c_x2?t:0,this.y1+=this.c_y1?s:0,this.y2+=this.c_y2?s:0;const i=this.getG().selectAll("path").nodes();this.getPathes().forEach((e,a)=>o(i[a]).attr("d",e))}moveEnd(t){if(t)return;const s=this.getObject(),i=this.swap_xy?"Y":"X",h=this.swap_xy?"X":"Y";let e="";if(this.c_x1){const a=this.svgToAxis("x",this.x1);s[`f${i}1`]=a,e+=`Set${i}1(${a});;`}if(this.c_x2){const a=this.svgToAxis("x",this.x2);s[`f${i}2`]=a,e+=`Set${i}2(${a});;`}if(this.c_y1){const a=this.svgToAxis("y",this.y1);s[`f${h}1`]=a,e+=`Set${h}1(${a});;`}if(this.c_y2){const a=this.svgToAxis("y",this.y2);s[`f${h}2`]=a,e+=`Set${h}2(${a});;`}this.submitCanvExec(e+"Notify();;")}getUserRanges(){const t=this.getObject(),s=Math.min(t.fX1,t.fX2),i=Math.max(t.fX1,t.fX2),h=Math.min(t.fY1,t.fY2),e=Math.max(t.fY1,t.fY2);return{minx:s,miny:h,maxx:i,maxy:e}}getPathes(){const t=Math.round(Math.min(this.x1,this.x2)),s=Math.round(Math.min(this.y1,this.y2)),i=Math.round(Math.abs(this.x2-this.x1)),h=Math.round(Math.abs(this.y1-this.y2)),e=`M${t},${s}h${i}v${h}h${-i}z`;return this.#t?[e].concat(x(t,s,i,h,this.#t,this.#s,this.#s)):[e]}redraw(){const t=this.getObject(),s=new f(this.getDrawOpt()),i=s.check("FRAME")?this.getFramePainter():null,h=s.check("L");this.createAttLine({attr:t}),this.createAttFill({attr:t}),this.swap_xy=i?.swap_xy(),!this.fillatt.empty()&&!h&&(this.lineatt.color="none");const e=this.createG(i);this.x1=this.axisToSvg("x",t.fX1),this.x2=this.axisToSvg("x",t.fX2),this.y1=this.axisToSvg("y",t.fY1),this.y2=this.axisToSvg("y",t.fY2),this.swap_xy&&([this.x1,this.x2,this.y1,this.y2]=[this.y1,this.y2,this.x1,this.x2]),this.#t=t.fBorderMode&&this.fillatt.hasColor()?t.fBorderMode:0,this.#s=t.fBorderSize||2;const a=this.getPathes();return e.append("svg:path").attr("d",a[0]).call(this.lineatt.func).call(this.fillatt.func),this.#t&&(e.append("svg:path").attr("d",a[1]).call(this.fillatt.func).style("fill",c(this.fillatt.color).brighter(.5).formatRgb()),e.append("svg:path").attr("d",a[2]).call(this.fillatt.func).style("fill",c(this.fillatt.color).darker(.5).formatRgb())),l(this),y(this),this}static async draw(t,s,i){const h=new r(t,s,i);return _(h,!1).then(()=>h.redraw())}}export{r as TBoxPainter};
1
+ import{a7 as n,ba as o,bX as x,a3 as f,bv as c,a0 as l,a1 as y,a6 as _}from"./ndmvr-aframe-core-DEHQ38JB.js";class r extends n{#t;#s;moveStart(t,s){const i=Math.abs(this.x2-this.x1),h=Math.abs(this.y1-this.y2);this.c_x1=Math.abs(t-this.x2)>i*.1,this.c_x2=Math.abs(t-this.x1)>i*.1,this.c_y1=Math.abs(s-this.y2)>h*.1,this.c_y2=Math.abs(s-this.y1)>h*.1,this.c_x1!==this.c_x2&&this.c_y1&&this.c_y2&&(this.c_y1=this.c_y2=!1),this.c_y1!==this.c_y2&&this.c_x1&&this.c_x2&&(this.c_x1=this.c_x2=!1)}moveDrag(t,s){this.x1+=this.c_x1?t:0,this.x2+=this.c_x2?t:0,this.y1+=this.c_y1?s:0,this.y2+=this.c_y2?s:0;const i=this.getG().selectAll("path").nodes();this.getPathes().forEach((e,a)=>o(i[a]).attr("d",e))}moveEnd(t){if(t)return;const s=this.getObject(),i=this.swap_xy?"Y":"X",h=this.swap_xy?"X":"Y";let e="";if(this.c_x1){const a=this.svgToAxis("x",this.x1);s[`f${i}1`]=a,e+=`Set${i}1(${a});;`}if(this.c_x2){const a=this.svgToAxis("x",this.x2);s[`f${i}2`]=a,e+=`Set${i}2(${a});;`}if(this.c_y1){const a=this.svgToAxis("y",this.y1);s[`f${h}1`]=a,e+=`Set${h}1(${a});;`}if(this.c_y2){const a=this.svgToAxis("y",this.y2);s[`f${h}2`]=a,e+=`Set${h}2(${a});;`}this.submitCanvExec(e+"Notify();;")}getUserRanges(){const t=this.getObject(),s=Math.min(t.fX1,t.fX2),i=Math.max(t.fX1,t.fX2),h=Math.min(t.fY1,t.fY2),e=Math.max(t.fY1,t.fY2);return{minx:s,miny:h,maxx:i,maxy:e}}getPathes(){const t=Math.round(Math.min(this.x1,this.x2)),s=Math.round(Math.min(this.y1,this.y2)),i=Math.round(Math.abs(this.x2-this.x1)),h=Math.round(Math.abs(this.y1-this.y2)),e=`M${t},${s}h${i}v${h}h${-i}z`;return this.#t?[e].concat(x(t,s,i,h,this.#t,this.#s,this.#s)):[e]}redraw(){const t=this.getObject(),s=new f(this.getDrawOpt()),i=s.check("FRAME")?this.getFramePainter():null,h=s.check("L");this.createAttLine({attr:t}),this.createAttFill({attr:t}),this.swap_xy=i?.swap_xy(),!this.fillatt.empty()&&!h&&(this.lineatt.color="none");const e=this.createG(i);this.x1=this.axisToSvg("x",t.fX1),this.x2=this.axisToSvg("x",t.fX2),this.y1=this.axisToSvg("y",t.fY1),this.y2=this.axisToSvg("y",t.fY2),this.swap_xy&&([this.x1,this.x2,this.y1,this.y2]=[this.y1,this.y2,this.x1,this.x2]),this.#t=t.fBorderMode&&this.fillatt.hasColor()?t.fBorderMode:0,this.#s=t.fBorderSize||2;const a=this.getPathes();return e.append("svg:path").attr("d",a[0]).call(this.lineatt.func).call(this.fillatt.func),this.#t&&(e.append("svg:path").attr("d",a[1]).call(this.fillatt.func).style("fill",c(this.fillatt.color).brighter(.5).formatRgb()),e.append("svg:path").attr("d",a[2]).call(this.fillatt.func).style("fill",c(this.fillatt.color).darker(.5).formatRgb())),l(this),y(this),this}static async draw(t,s,i){const h=new r(t,s,i);return _(h,!1).then(()=>h.redraw())}}export{r as TBoxPainter};
@@ -1 +1 @@
1
- import{a7 as _,a2 as u,s as E,ag as x,ai as P,aI as O,af as A,aJ as F,ak as G,aK as C}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{clTGraphAsymmErrors as S,TGraphPainter as L}from"./TGraphPainter-DLkx_1ES.js";import{TF1Painter as k}from"./TF1Painter-BuwSTmhs.js";import{TH1Painter as M}from"./TH1Painter-CMr7gXzd.js";import{TH2Painter as H}from"./TH2Painter-BLfyBVB5.js";import"./THistPainter-Df-RmCQH.js";import"./TPavePainter-Dx40jhkF.js";import"./TH1Painter--tuoUZTH.js";import"./func-C1jNXIub.js";import"./hist3d-DCmav5Ga.js";import"./latex3d-ITrfFgp8.js";import"./TH2Painter-DHaL_lR_.js";const h=u(14),N=u(15),c=u(17),X=u(18),g=(l,t)=>l.fBeta_bin_params.length>t?l.fBeta_bin_params[t].first:l.fBeta_alpha,T=(l,t)=>l.fBeta_bin_params.length>t?l.fBeta_bin_params[t].second:l.fBeta_beta;class w extends _{getEfficiency(t,i){const a=(e,f)=>e<=0||f<=0?0:e/(e+f),r=(e,f)=>{if(e<=0||f<=0)return 0;if(e<=1||f<=1){if(e<f)return 0;if(e>f)return 1;if(e===f)return .5}return(e-1)/(e+f-2)},n=t.fTotalHistogram.fArray[i],s=t.fPassedHistogram.fArray[i];if(t.TestBit(h)){const e=t.TestBit(c)?g(t,i):t.fBeta_alpha,f=t.TestBit(c)?T(t,i):t.fBeta_beta;let o,m;if(t.TestBit(X)){const d=n,p=t.fTotalHistogram.fSumw2?t.fTotalHistogram.fSumw2[i]:Math.abs(n),B=s;if(p<=0)return B/d;const y=d/p;o=B*y+e,m=(d-B)*y+f}else o=s+e,m=n-s+f;return t.TestBit(N)?r(o,m):a(o,m)}return n?s/n:0}getEfficiencyErrorLow(t,i,a){const r=t.fTotalHistogram.fArray[i],n=t.fPassedHistogram.fArray[i];let s=0,e=0;return t.TestBit(h)&&(s=t.TestBit(c)?g(t,i):t.fBeta_alpha,e=t.TestBit(c)?T(t,i):t.fBeta_beta),a-this.fBoundary(r,n,t.fConfLevel,!1,s,e)}getEfficiencyErrorUp(t,i,a){const r=t.fTotalHistogram.fArray[i],n=t.fPassedHistogram.fArray[i];let s=0,e=0;return t.TestBit(h)&&(s=t.TestBit(c)?g(t,i):t.fBeta_alpha,e=t.TestBit(c)?T(t,i):t.fBeta_beta),this.fBoundary(r,n,t.fConfLevel,!0,s,e)-a}copyAttributes(t,i){["fLineColor","fLineStyle","fLineWidth","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize"].forEach(a=>{t[a]=i[a]})}createGraph(){const t=E(S);return t.fName="eff_graph",t}createHisto(t){const i=t.fTotalHistogram.fXaxis.fNbins,a=t.fTotalHistogram.fYaxis.fNbins,r=x(G,i,a);return Object.assign(r.fXaxis,t.fTotalHistogram.fXaxis),Object.assign(r.fYaxis,t.fTotalHistogram.fYaxis),r.fName="eff_histo",r}fillGraph(t,i){const a=this.getObject(),r=a.fTotalHistogram.fXaxis,n=r.fNbins,s=i.indexOf("e0")>=0;for(let e=0,f=0;e<n;++e){if(!s&&a.fTotalHistogram.getBinContent(e+1)===0)continue;const o=this.getEfficiency(a,e+1);t.fX[f]=r.GetBinCenter(e+1),t.fY[f]=o,t.fEXlow[f]=r.GetBinCenter(e+1)-r.GetBinLowEdge(e+1),t.fEXhigh[f]=r.GetBinLowEdge(e+2)-r.GetBinCenter(e+1),t.fEYlow[f]=this.getEfficiencyErrorLow(a,e+1,o),t.fEYhigh[f]=this.getEfficiencyErrorUp(a,e+1,o),t.fNpoints=++f}t.fTitle=a.fTitle,this.copyAttributes(t,a)}fillHisto(t){const i=this.getObject(),a=t.fXaxis.fNbins,r=t.fYaxis.fNbins;for(let n=0;n<a+2;++n)for(let s=0;s<r+2;++s){const e=t.getBin(n,s);t.fArray[e]=this.getEfficiency(i,e)}t.fTitle=i.fTitle,t.fBits|=P,this.copyAttributes(t,i)}drawFunction(t){const i=this.getObject();return!i?.fFunctions||t>=i.fFunctions.arr.length?this:k.draw(this.getPadPainter(),i.fFunctions.arr[t],i.fFunctions.opt[t]).then(a=>(a?.setSecondaryId(this,`func_${t}`),this.drawFunction(t+1)))}fillContextMenuItems(t){t.addRedrawMenu(this)}async redrawWith(t,i){i||this.getPadPainter()?.removePrimitive(this,!0),(!t||!C(t))&&(t=""),t=t.toLowerCase();let a,r=!1;const n=this.getObject(),s=this.getDrawDom();if(t[0]==="b")r=!0,a=(this.ndim===1?M:H).draw(s,n.fTotalHistogram,t.slice(1));else if(this.ndim===1){t||(t="ap"),t.indexOf("same")<0&&t.indexOf("a")<0&&(t+="a"),t.indexOf("p")<0&&(t+="p");const e=this.createGraph(n);this.fillGraph(e,t),a=L.draw(s,e,t)}else{t||(t="col");const e=this.createHisto(n);this.fillHisto(e,t),a=H.draw(s,e,t)}return a.then(e=>(e?.setSecondaryId(this,"eff"),this.addToPadPrimitives(),r?this:this.drawFunction(0)))}static async draw(t,i,a){if(!i||!i.fTotalHistogram)return null;const r=new w(t,i);if(i.fTotalHistogram._typename.indexOf(O)===0)r.ndim=1;else if(i.fTotalHistogram._typename.indexOf(A)===0)r.ndim=2;else return null;return r.fBoundary=F(i.fStatisticOption,i.TestBit(h)),r.redrawWith(a,!0)}}export{w as TEfficiencyPainter};
1
+ import{a7 as _,a2 as u,s as E,ag as x,ai as P,aI as O,af as A,aJ as F,ak as G,aK as C}from"./ndmvr-aframe-core-DEHQ38JB.js";import{clTGraphAsymmErrors as S,TGraphPainter as L}from"./TGraphPainter-Bp7xEbQz.js";import{TF1Painter as k}from"./TF1Painter-DwE8KsBp.js";import{TH1Painter as M}from"./TH1Painter-BXzutgI3.js";import{TH2Painter as H}from"./TH2Painter-DceuYQAL.js";import"./THistPainter-B2S5BnuY.js";import"./TPavePainter-1yngbgp8.js";import"./TH1Painter-DyN-WKyv.js";import"./func-C6FX2eN2.js";import"./hist3d-D9VevdP6.js";import"./latex3d-8Hbnfz6c.js";import"./TH2Painter-BpixRP4j.js";const h=u(14),N=u(15),c=u(17),X=u(18),g=(l,t)=>l.fBeta_bin_params.length>t?l.fBeta_bin_params[t].first:l.fBeta_alpha,T=(l,t)=>l.fBeta_bin_params.length>t?l.fBeta_bin_params[t].second:l.fBeta_beta;class w extends _{getEfficiency(t,i){const a=(e,f)=>e<=0||f<=0?0:e/(e+f),r=(e,f)=>{if(e<=0||f<=0)return 0;if(e<=1||f<=1){if(e<f)return 0;if(e>f)return 1;if(e===f)return .5}return(e-1)/(e+f-2)},n=t.fTotalHistogram.fArray[i],s=t.fPassedHistogram.fArray[i];if(t.TestBit(h)){const e=t.TestBit(c)?g(t,i):t.fBeta_alpha,f=t.TestBit(c)?T(t,i):t.fBeta_beta;let o,m;if(t.TestBit(X)){const d=n,p=t.fTotalHistogram.fSumw2?t.fTotalHistogram.fSumw2[i]:Math.abs(n),B=s;if(p<=0)return B/d;const y=d/p;o=B*y+e,m=(d-B)*y+f}else o=s+e,m=n-s+f;return t.TestBit(N)?r(o,m):a(o,m)}return n?s/n:0}getEfficiencyErrorLow(t,i,a){const r=t.fTotalHistogram.fArray[i],n=t.fPassedHistogram.fArray[i];let s=0,e=0;return t.TestBit(h)&&(s=t.TestBit(c)?g(t,i):t.fBeta_alpha,e=t.TestBit(c)?T(t,i):t.fBeta_beta),a-this.fBoundary(r,n,t.fConfLevel,!1,s,e)}getEfficiencyErrorUp(t,i,a){const r=t.fTotalHistogram.fArray[i],n=t.fPassedHistogram.fArray[i];let s=0,e=0;return t.TestBit(h)&&(s=t.TestBit(c)?g(t,i):t.fBeta_alpha,e=t.TestBit(c)?T(t,i):t.fBeta_beta),this.fBoundary(r,n,t.fConfLevel,!0,s,e)-a}copyAttributes(t,i){["fLineColor","fLineStyle","fLineWidth","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize"].forEach(a=>{t[a]=i[a]})}createGraph(){const t=E(S);return t.fName="eff_graph",t}createHisto(t){const i=t.fTotalHistogram.fXaxis.fNbins,a=t.fTotalHistogram.fYaxis.fNbins,r=x(G,i,a);return Object.assign(r.fXaxis,t.fTotalHistogram.fXaxis),Object.assign(r.fYaxis,t.fTotalHistogram.fYaxis),r.fName="eff_histo",r}fillGraph(t,i){const a=this.getObject(),r=a.fTotalHistogram.fXaxis,n=r.fNbins,s=i.indexOf("e0")>=0;for(let e=0,f=0;e<n;++e){if(!s&&a.fTotalHistogram.getBinContent(e+1)===0)continue;const o=this.getEfficiency(a,e+1);t.fX[f]=r.GetBinCenter(e+1),t.fY[f]=o,t.fEXlow[f]=r.GetBinCenter(e+1)-r.GetBinLowEdge(e+1),t.fEXhigh[f]=r.GetBinLowEdge(e+2)-r.GetBinCenter(e+1),t.fEYlow[f]=this.getEfficiencyErrorLow(a,e+1,o),t.fEYhigh[f]=this.getEfficiencyErrorUp(a,e+1,o),t.fNpoints=++f}t.fTitle=a.fTitle,this.copyAttributes(t,a)}fillHisto(t){const i=this.getObject(),a=t.fXaxis.fNbins,r=t.fYaxis.fNbins;for(let n=0;n<a+2;++n)for(let s=0;s<r+2;++s){const e=t.getBin(n,s);t.fArray[e]=this.getEfficiency(i,e)}t.fTitle=i.fTitle,t.fBits|=P,this.copyAttributes(t,i)}drawFunction(t){const i=this.getObject();return!i?.fFunctions||t>=i.fFunctions.arr.length?this:k.draw(this.getPadPainter(),i.fFunctions.arr[t],i.fFunctions.opt[t]).then(a=>(a?.setSecondaryId(this,`func_${t}`),this.drawFunction(t+1)))}fillContextMenuItems(t){t.addRedrawMenu(this)}async redrawWith(t,i){i||this.getPadPainter()?.removePrimitive(this,!0),(!t||!C(t))&&(t=""),t=t.toLowerCase();let a,r=!1;const n=this.getObject(),s=this.getDrawDom();if(t[0]==="b")r=!0,a=(this.ndim===1?M:H).draw(s,n.fTotalHistogram,t.slice(1));else if(this.ndim===1){t||(t="ap"),t.indexOf("same")<0&&t.indexOf("a")<0&&(t+="a"),t.indexOf("p")<0&&(t+="p");const e=this.createGraph(n);this.fillGraph(e,t),a=L.draw(s,e,t)}else{t||(t="col");const e=this.createHisto(n);this.fillHisto(e,t),a=H.draw(s,e,t)}return a.then(e=>(e?.setSecondaryId(this,"eff"),this.addToPadPrimitives(),r?this:this.drawFunction(0)))}static async draw(t,i,a){if(!i||!i.fTotalHistogram)return null;const r=new w(t,i);if(i.fTotalHistogram._typename.indexOf(O)===0)r.ndim=1;else if(i.fTotalHistogram._typename.indexOf(A)===0)r.ndim=2;else return null;return r.fBoundary=F(i.fStatisticOption,i.TestBit(h)),r.redrawWith(a,!0)}}export{w as TEfficiencyPainter};
@@ -1 +1 @@
1
- import{aX as y,aY as p,aZ as g,aA as P,a5 as v,ah as X,ai as d,aU as S,ae as T,aV as M,ag as b,aG as N,aK as C}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{T as H}from"./THistPainter-Df-RmCQH.js";import{T as w}from"./TH1Painter--tuoUZTH.js";import{p as _,_ as O}from"./func-C1jNXIub.js";import"./TPavePainter-Dx40jhkF.js";function A(f,e,t,i){let a,n;i>0?(n=Math.log(i),a=t>0?Math.log(t):n-5):(n=-10,a=-15),f.fNbins=e,f.fXbins=new Array(e+1);for(let s=0;s<=e;++s)f.fXbins[s]=Math.exp(a+s/e*(n-a));f.fXmin=Math.exp(a),f.fXmax=Math.exp(n)}function z(f){C(f)||(f="");let e=f.indexOf(";webcanv_hist"),t=!1,i=0;return e>=0&&(t=!0,f=f.slice(0,e)),e=f.indexOf(";force_saved"),e>=0&&(i=2,f=f.slice(0,e)),e=f.indexOf(";prefer_saved"),e>=0&&(i=1,f=f.slice(0,e)),{opt:f,_webcanv_hist:t,_use_saved:i}}class F extends w{#t;#e;#i;#s;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??y}isTF1(){return!0}isTF12(){return this.getClassName()===p}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",g);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF1Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="zoom")&&(this.createTF1Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF1Histogram(e,t){const i=this.getFramePainter(),a=this.getPadPainter()?.getRootPad(!0),n=a?.fLogx,s=i?.getGrFuncs(this.second_x,this.second_y);let o=e.fXmin,c=e.fXmax,m=Math.max(e.fNpx,100);if(s?.zoom_xmin!==s?.zoom_xmax){const l=(c-o)/m;o<s.zoom_xmin&&s.zoom_xmin<c&&(o=Math.max(o,s.zoom_xmin-l)),o<s.zoom_xmax&&s.zoom_xmax<c&&(c=Math.min(c,s.zoom_xmax+l))}this.#t=e.fSave.length>3&&(P.PreferSavedPoints||this._use_saved>1);const h=l=>{t.fNcells!==l+2&&(t.fNcells=l+2,t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=l,t.fXaxis.fXbins=[]};if(this.#s=void 0,!this.#t){let l=!1;if(!e.evalPar)try{this.isTF12()?_(e.fF2)?e.evalPar=function(r){return this.fCase?this.fF2.evalPar(r,this.fXY):this.fF2.evalPar(this.fXY,r)}:l=!0:_(e)||(l=!0)}catch{l=!0}h(m),n?A(t.fXaxis,m,o,c):(t.fXaxis.fXmin=o,t.fXaxis.fXmax=c);for(let r=0;r<m&&!l;r++){const x=t.fXaxis.GetBinCenter(r+1);let u=0;try{u=e.evalPar(x)}catch{l=!0}l||t.setBinContent(r+1,Number.isFinite(u)?u:0)}l&&(this.#s=!0),l&&e.fSave.length>3&&(this.#t=!0)}if(this.#t){m=e.fSave.length-3;let l=null;if(o=e.fSave[m+1],c=e.fSave[m+2],o===c){const r=this.getMainPainter();v(r?.getHisto)&&(l=r?.getHisto()?.fXaxis)}if(l){h(t.fXaxis.fNbins),Object.assign(t.fXaxis,l);for(let r=0;r<m;++r){const x=e.fSave[r];t.setBinContent(r+1,Number.isFinite(x)?x:0)}}else{h(e.fNpx),t.fXaxis.fXmin=e.fXmin,t.fXaxis.fXmax=e.fXmax;for(let r=0;r<e.fNpx;++r){const x=O(e,t.fXaxis.GetBinCenter(r+1));t.setBinContent(r+1,Number.isFinite(x)?x:0)}}}t.fName="Func",X(t,e.fTitle),t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum,t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=d}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>3&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-2]),this.xmax=Math.max(this.xmax,t.fSave[i-1])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax))}canZoomInside(e,t,i){const a=this.#e?.fSave.length??0;if(a>3&&this.#t&&e==="x"){const n=a-2,s=this.#e.fSave[a-2],o=this.#e.fSave[a-1];return Math.abs(o-s)/n<Math.abs(i-t)}return e==="x"||e==="y"}getTF1Tooltips(e){this.#i=void 0;const t=[this.getObjectHint()],i=this.getOptions(),a=this.getFramePainter()?.getGrFuncs(i.second_x,i.second_y);if(!a||!v(this.#e?.evalPar))return t.push("grx = "+e.x,"gry = "+e.y),t;const n=a.revertAxis("x",e.x);let s=0,o=0,c=!1;try{s=this.#e.evalPar(n),o=Math.round(a.gry(s))}catch{c=!0}return t.push("x = "+a.axisAsText("x",n),"value = "+(c?"<fail>":S(s,T.fStatFormat))),c||(this.#i={y:s,gry:o}),t}processTooltipEvent(e){if(this.#t)return super.processTooltipEvent(e);let t=this.getG()?.selectChild(".tooltip_bin");if(!this.getG()||!e)return t?.remove(),null;const i={name:this.#e?.fName,title:this.#e?.fTitle,x:e.x,y:e.y,color1:this.lineatt?.color??"green",color2:this.fillatt?.getFillColorAlt("blue")??"blue",lines:this.getTF1Tooltips(e),exact:!0,menu:!0};return e.disabled?t.remove():(t.empty()&&(t=this.getG().append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").style("fill","none").attr("r",(this.lineatt?.width??1)+4)),t.attr("cx",e.x).attr("cy",this.#i?.gry??e.y),this.lineatt&&t.call(this.lineatt.func)),i}fillWebObjectOptions(e){e.fcust=this.#s&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const a=z(i);i=a.opt,delete a.opt;let n;a._webcanv_hist&&(n=M(e)?.findInPrimitives("Func",g)),n||(n=b(g,100),n.fBits|=d),!i&&N(e)&&(i="same");const s=new F(e,n);return s.setFunc(t),Object.assign(s,a),s.createTF1Histogram(t,n),H._drawHist(s,i)}}export{F as TF1Painter,A as produceTAxisLogScale,z as scanTF1Options};
1
+ import{aX as y,aY as p,aZ as g,aA as P,a5 as v,ah as X,ai as d,aU as S,ae as T,aV as M,ag as b,aG as N,aK as C}from"./ndmvr-aframe-core-DEHQ38JB.js";import{T as H}from"./THistPainter-B2S5BnuY.js";import{T as w}from"./TH1Painter-DyN-WKyv.js";import{p as _,_ as O}from"./func-C6FX2eN2.js";import"./TPavePainter-1yngbgp8.js";function A(f,e,t,i){let a,n;i>0?(n=Math.log(i),a=t>0?Math.log(t):n-5):(n=-10,a=-15),f.fNbins=e,f.fXbins=new Array(e+1);for(let s=0;s<=e;++s)f.fXbins[s]=Math.exp(a+s/e*(n-a));f.fXmin=Math.exp(a),f.fXmax=Math.exp(n)}function z(f){C(f)||(f="");let e=f.indexOf(";webcanv_hist"),t=!1,i=0;return e>=0&&(t=!0,f=f.slice(0,e)),e=f.indexOf(";force_saved"),e>=0&&(i=2,f=f.slice(0,e)),e=f.indexOf(";prefer_saved"),e>=0&&(i=1,f=f.slice(0,e)),{opt:f,_webcanv_hist:t,_use_saved:i}}class F extends w{#t;#e;#i;#s;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??y}isTF1(){return!0}isTF12(){return this.getClassName()===p}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",g);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF1Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="zoom")&&(this.createTF1Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF1Histogram(e,t){const i=this.getFramePainter(),a=this.getPadPainter()?.getRootPad(!0),n=a?.fLogx,s=i?.getGrFuncs(this.second_x,this.second_y);let o=e.fXmin,c=e.fXmax,m=Math.max(e.fNpx,100);if(s?.zoom_xmin!==s?.zoom_xmax){const l=(c-o)/m;o<s.zoom_xmin&&s.zoom_xmin<c&&(o=Math.max(o,s.zoom_xmin-l)),o<s.zoom_xmax&&s.zoom_xmax<c&&(c=Math.min(c,s.zoom_xmax+l))}this.#t=e.fSave.length>3&&(P.PreferSavedPoints||this._use_saved>1);const h=l=>{t.fNcells!==l+2&&(t.fNcells=l+2,t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=l,t.fXaxis.fXbins=[]};if(this.#s=void 0,!this.#t){let l=!1;if(!e.evalPar)try{this.isTF12()?_(e.fF2)?e.evalPar=function(r){return this.fCase?this.fF2.evalPar(r,this.fXY):this.fF2.evalPar(this.fXY,r)}:l=!0:_(e)||(l=!0)}catch{l=!0}h(m),n?A(t.fXaxis,m,o,c):(t.fXaxis.fXmin=o,t.fXaxis.fXmax=c);for(let r=0;r<m&&!l;r++){const x=t.fXaxis.GetBinCenter(r+1);let u=0;try{u=e.evalPar(x)}catch{l=!0}l||t.setBinContent(r+1,Number.isFinite(u)?u:0)}l&&(this.#s=!0),l&&e.fSave.length>3&&(this.#t=!0)}if(this.#t){m=e.fSave.length-3;let l=null;if(o=e.fSave[m+1],c=e.fSave[m+2],o===c){const r=this.getMainPainter();v(r?.getHisto)&&(l=r?.getHisto()?.fXaxis)}if(l){h(t.fXaxis.fNbins),Object.assign(t.fXaxis,l);for(let r=0;r<m;++r){const x=e.fSave[r];t.setBinContent(r+1,Number.isFinite(x)?x:0)}}else{h(e.fNpx),t.fXaxis.fXmin=e.fXmin,t.fXaxis.fXmax=e.fXmax;for(let r=0;r<e.fNpx;++r){const x=O(e,t.fXaxis.GetBinCenter(r+1));t.setBinContent(r+1,Number.isFinite(x)?x:0)}}}t.fName="Func",X(t,e.fTitle),t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum,t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=d}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>3&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-2]),this.xmax=Math.max(this.xmax,t.fSave[i-1])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax))}canZoomInside(e,t,i){const a=this.#e?.fSave.length??0;if(a>3&&this.#t&&e==="x"){const n=a-2,s=this.#e.fSave[a-2],o=this.#e.fSave[a-1];return Math.abs(o-s)/n<Math.abs(i-t)}return e==="x"||e==="y"}getTF1Tooltips(e){this.#i=void 0;const t=[this.getObjectHint()],i=this.getOptions(),a=this.getFramePainter()?.getGrFuncs(i.second_x,i.second_y);if(!a||!v(this.#e?.evalPar))return t.push("grx = "+e.x,"gry = "+e.y),t;const n=a.revertAxis("x",e.x);let s=0,o=0,c=!1;try{s=this.#e.evalPar(n),o=Math.round(a.gry(s))}catch{c=!0}return t.push("x = "+a.axisAsText("x",n),"value = "+(c?"<fail>":S(s,T.fStatFormat))),c||(this.#i={y:s,gry:o}),t}processTooltipEvent(e){if(this.#t)return super.processTooltipEvent(e);let t=this.getG()?.selectChild(".tooltip_bin");if(!this.getG()||!e)return t?.remove(),null;const i={name:this.#e?.fName,title:this.#e?.fTitle,x:e.x,y:e.y,color1:this.lineatt?.color??"green",color2:this.fillatt?.getFillColorAlt("blue")??"blue",lines:this.getTF1Tooltips(e),exact:!0,menu:!0};return e.disabled?t.remove():(t.empty()&&(t=this.getG().append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").style("fill","none").attr("r",(this.lineatt?.width??1)+4)),t.attr("cx",e.x).attr("cy",this.#i?.gry??e.y),this.lineatt&&t.call(this.lineatt.func)),i}fillWebObjectOptions(e){e.fcust=this.#s&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const a=z(i);i=a.opt,delete a.opt;let n;a._webcanv_hist&&(n=M(e)?.findInPrimitives("Func",g)),n||(n=b(g,100),n.fBits|=d),!i&&N(e)&&(i="same");const s=new F(e,n);return s.setFunc(t),Object.assign(s,a),s.createTF1Histogram(t,n),H._drawHist(s,i)}}export{F as TF1Painter,A as produceTAxisLogScale,z as scanTF1Options};
@@ -1 +1 @@
1
- import{aT as H,ak as P,aA as k,ah as B,ai as X,a5 as O,aU as G,ae as L,a3 as j,aV as E,ag as W}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{TH2Painter as I}from"./TH2Painter-BLfyBVB5.js";import{p as D}from"./func-C1jNXIub.js";import{produceTAxisLogScale as z,scanTF1Options as R}from"./TF1Painter-BuwSTmhs.js";import{T as U}from"./THistPainter-Df-RmCQH.js";import"./hist3d-DCmav5Ga.js";import"./latex3d-ITrfFgp8.js";import"./TH2Painter-DHaL_lR_.js";import"./TH1Painter--tuoUZTH.js";import"./TPavePainter-Dx40jhkF.js";class N extends I{#t;#e;#i;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??H}isTF1(){return!0}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",P);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF2Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="logy"||e==="zoom")&&(this.createTF2Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF2Histogram(e,t){let i=e.fSave.length-6;i>0&&i!==(e.fSave[i+4]+1)*(e.fSave[i+5]+1)&&(i=0),this.#t=i>0&&(k.PreferSavedPoints||this._use_saved>1);const m=this.getFramePainter(),v=this.getPadPainter()?.getRootPad(!0),l=v?.fLogx,c=v?.fLogy,s=m?.getGrFuncs(this.second_x,this.second_y);let n=e.fXmin,y=e.fXmax,f=e.fYmin,g=e.fYmax,x=Math.max(e.fNpx,20),d=Math.max(e.fNpy,20);if(s?.zoom_xmin!==s?.zoom_xmax){const a=(y-n)/x;n<s.zoom_xmin&&s.zoom_xmin<y&&(n=Math.max(n,s.zoom_xmin-a)),n<s.zoom_xmax&&s.zoom_xmax<y&&(y=Math.min(y,s.zoom_xmax+a))}if(s?.zoom_ymin!==s?.zoom_ymax){const a=(g-f)/d;f<s.zoom_ymin&&s.zoom_ymin<g&&(f=Math.max(f,s.zoom_ymin-a)),f<s.zoom_ymax&&s.zoom_ymax<g&&(g=Math.min(g,s.zoom_ymax+a))}const T=(a,o)=>{t.fNcells!==(a+2)*(o+2)&&(t.fNcells=(a+2)*(o+2),t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=a,t.fXaxis.fXbins=[],t.fYaxis.fNbins=o,t.fYaxis.fXbins=[]};if(this.#i=void 0,!this.#t){let a=!1;!e.evalPar&&!D(e)&&(a=!0),T(x,d),t.fXaxis.fXmin=n,t.fXaxis.fXmax=y,t.fYaxis.fXmin=f,t.fYaxis.fXmax=g,l&&z(t.fXaxis,x,n,y),c&&z(t.fYaxis,d,f,g);for(let o=0;o<d&&!a;++o)for(let S=0;S<x&&!a;++S){const h=t.fXaxis.GetBinCenter(S+1),p=t.fYaxis.GetBinCenter(o+1);let r=0;try{r=e.evalPar(h,p)}catch{a=!0}a||t.setBinContent(t.getBin(S+1,o+1),Number.isFinite(r)?r:0)}a&&(this.#i=!0),a&&i>6&&(this.#t=!0)}if(this.#t){x=Math.round(e.fSave[i+4]),d=Math.round(e.fSave[i+5]),n=e.fSave[i],y=e.fSave[i+1],f=e.fSave[i+2],g=e.fSave[i+3];const a=(y-n)/x,o=(g-f)/d,S=(h,p)=>{if(h<n||h>y||a<=0||p<f||p>g||o<=0)return 0;const r=Math.min(x-1,Math.floor((h-n)/a)),_=Math.min(d-1,Math.floor((p-f)/o)),F=n+r*a,b=f+_*o,M=(h-F)/a,u=(p-b)/o,C=_*(x+1)+r,Y=_*(x+1)+r+1,w=(_+1)*(x+1)+r+1,A=(_+1)*(x+1)+r;return(1-M)*(1-u)*e.fSave[C]+M*(1-u)*e.fSave[Y]+M*u*e.fSave[w]+(1-M)*u*e.fSave[A]};T(e.fNpx,e.fNpy),t.fXaxis.fXmin=e.fXmin,t.fXaxis.fXmax=e.fXmax,t.fYaxis.fXmin=e.fYmin,t.fYaxis.fXmax=e.fYmax;for(let h=0;h<e.fNpy;++h){const p=t.fYaxis.GetBinCenter(h+1);for(let r=0;r<e.fNpx;++r){const _=t.fXaxis.GetBinCenter(r+1),F=S(_,p);t.setBinContent(t.getBin(r+1,h+1),Number.isFinite(F)?F:0)}}}return t.fName="Func",B(t,e.fTitle),t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum,t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=X,t}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>6&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-6]),this.xmax=Math.max(this.xmax,t.fSave[i-5]),this.ymin=Math.min(this.ymin,t.fSave[i-4]),this.ymax=Math.max(this.ymax,t.fSave[i-3])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax),this.ymin=Math.min(this.ymin,t.fYmin),this.ymax=Math.max(this.ymax,t.fYmax))}getTF2Tooltips(e){const t=[this.getObjectHint()],i=this.getOptions(),m=this.getFramePainter()?.getGrFuncs(i.second_x,i.second_y);if(!m||!O(this.#e?.evalPar))return t.push("grx = "+e.x,"gry = "+e.y),t;const v=m.revertAxis("x",e.x),l=m.revertAxis("y",e.y);let c=0,s=!1;try{c=this.#e.evalPar(v,l)}catch{s=!0}return t.push("x = "+m.axisAsText("x",v),"y = "+m.axisAsText("y",l),"value = "+(s?"<fail>":G(c,L.fStatFormat))),t}processTooltipEvent(e){if(this.#t)return super.processTooltipEvent(e);let t=this.getG()?.selectChild(".tooltip_bin");if(!this.getG()||!e)return t?.remove(),null;const i={name:this.#e?.fName,title:this.#e?.fTitle,x:e.x,y:e.y,color1:this.lineatt?.color??"green",color2:this.fillatt?.getFillColorAlt("blue")??"blue",lines:this.getTF2Tooltips(e),exact:!0,menu:!0};return e.disabled?t.remove():(t.empty()&&(t=this.getG().append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").style("fill","none").attr("r",(this.lineatt?.width??1)+4)),t.attr("cx",e.x).attr("cy",e.y),this.lineatt&&t.call(this.lineatt.func)),i}fillWebObjectOptions(e){e.fcust=this.#i&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const m=R(i);i=m.opt,delete m.opt;const v=new j(i);v.empty()?i="cont3":v.opt==="SAME"&&(i="cont2 same");let l;m._webcanv_hist&&(l=E(e)?.findInPrimitives("Func",P)),l||(l=W(P,20,20),l.fBits|=X);const c=new N(e,l);return c.setFunc(t),Object.assign(c,m),c.createTF2Histogram(t,l),U._drawHist(c,i)}}export{N as TF2Painter};
1
+ import{aT as H,ak as P,aA as k,ah as B,ai as X,a5 as O,aU as G,ae as L,a3 as j,aV as E,ag as W}from"./ndmvr-aframe-core-DEHQ38JB.js";import{TH2Painter as I}from"./TH2Painter-DceuYQAL.js";import{p as D}from"./func-C6FX2eN2.js";import{produceTAxisLogScale as z,scanTF1Options as R}from"./TF1Painter-DwE8KsBp.js";import{T as U}from"./THistPainter-B2S5BnuY.js";import"./hist3d-D9VevdP6.js";import"./latex3d-8Hbnfz6c.js";import"./TH2Painter-BpixRP4j.js";import"./TH1Painter-DyN-WKyv.js";import"./TPavePainter-1yngbgp8.js";class N extends I{#t;#e;#i;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??H}isTF1(){return!0}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",P);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF2Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="logy"||e==="zoom")&&(this.createTF2Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF2Histogram(e,t){let i=e.fSave.length-6;i>0&&i!==(e.fSave[i+4]+1)*(e.fSave[i+5]+1)&&(i=0),this.#t=i>0&&(k.PreferSavedPoints||this._use_saved>1);const m=this.getFramePainter(),v=this.getPadPainter()?.getRootPad(!0),l=v?.fLogx,c=v?.fLogy,s=m?.getGrFuncs(this.second_x,this.second_y);let n=e.fXmin,y=e.fXmax,f=e.fYmin,g=e.fYmax,x=Math.max(e.fNpx,20),d=Math.max(e.fNpy,20);if(s?.zoom_xmin!==s?.zoom_xmax){const a=(y-n)/x;n<s.zoom_xmin&&s.zoom_xmin<y&&(n=Math.max(n,s.zoom_xmin-a)),n<s.zoom_xmax&&s.zoom_xmax<y&&(y=Math.min(y,s.zoom_xmax+a))}if(s?.zoom_ymin!==s?.zoom_ymax){const a=(g-f)/d;f<s.zoom_ymin&&s.zoom_ymin<g&&(f=Math.max(f,s.zoom_ymin-a)),f<s.zoom_ymax&&s.zoom_ymax<g&&(g=Math.min(g,s.zoom_ymax+a))}const T=(a,o)=>{t.fNcells!==(a+2)*(o+2)&&(t.fNcells=(a+2)*(o+2),t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=a,t.fXaxis.fXbins=[],t.fYaxis.fNbins=o,t.fYaxis.fXbins=[]};if(this.#i=void 0,!this.#t){let a=!1;!e.evalPar&&!D(e)&&(a=!0),T(x,d),t.fXaxis.fXmin=n,t.fXaxis.fXmax=y,t.fYaxis.fXmin=f,t.fYaxis.fXmax=g,l&&z(t.fXaxis,x,n,y),c&&z(t.fYaxis,d,f,g);for(let o=0;o<d&&!a;++o)for(let S=0;S<x&&!a;++S){const h=t.fXaxis.GetBinCenter(S+1),p=t.fYaxis.GetBinCenter(o+1);let r=0;try{r=e.evalPar(h,p)}catch{a=!0}a||t.setBinContent(t.getBin(S+1,o+1),Number.isFinite(r)?r:0)}a&&(this.#i=!0),a&&i>6&&(this.#t=!0)}if(this.#t){x=Math.round(e.fSave[i+4]),d=Math.round(e.fSave[i+5]),n=e.fSave[i],y=e.fSave[i+1],f=e.fSave[i+2],g=e.fSave[i+3];const a=(y-n)/x,o=(g-f)/d,S=(h,p)=>{if(h<n||h>y||a<=0||p<f||p>g||o<=0)return 0;const r=Math.min(x-1,Math.floor((h-n)/a)),_=Math.min(d-1,Math.floor((p-f)/o)),F=n+r*a,b=f+_*o,M=(h-F)/a,u=(p-b)/o,C=_*(x+1)+r,Y=_*(x+1)+r+1,w=(_+1)*(x+1)+r+1,A=(_+1)*(x+1)+r;return(1-M)*(1-u)*e.fSave[C]+M*(1-u)*e.fSave[Y]+M*u*e.fSave[w]+(1-M)*u*e.fSave[A]};T(e.fNpx,e.fNpy),t.fXaxis.fXmin=e.fXmin,t.fXaxis.fXmax=e.fXmax,t.fYaxis.fXmin=e.fYmin,t.fYaxis.fXmax=e.fYmax;for(let h=0;h<e.fNpy;++h){const p=t.fYaxis.GetBinCenter(h+1);for(let r=0;r<e.fNpx;++r){const _=t.fXaxis.GetBinCenter(r+1),F=S(_,p);t.setBinContent(t.getBin(r+1,h+1),Number.isFinite(F)?F:0)}}}return t.fName="Func",B(t,e.fTitle),t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum,t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=X,t}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>6&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-6]),this.xmax=Math.max(this.xmax,t.fSave[i-5]),this.ymin=Math.min(this.ymin,t.fSave[i-4]),this.ymax=Math.max(this.ymax,t.fSave[i-3])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax),this.ymin=Math.min(this.ymin,t.fYmin),this.ymax=Math.max(this.ymax,t.fYmax))}getTF2Tooltips(e){const t=[this.getObjectHint()],i=this.getOptions(),m=this.getFramePainter()?.getGrFuncs(i.second_x,i.second_y);if(!m||!O(this.#e?.evalPar))return t.push("grx = "+e.x,"gry = "+e.y),t;const v=m.revertAxis("x",e.x),l=m.revertAxis("y",e.y);let c=0,s=!1;try{c=this.#e.evalPar(v,l)}catch{s=!0}return t.push("x = "+m.axisAsText("x",v),"y = "+m.axisAsText("y",l),"value = "+(s?"<fail>":G(c,L.fStatFormat))),t}processTooltipEvent(e){if(this.#t)return super.processTooltipEvent(e);let t=this.getG()?.selectChild(".tooltip_bin");if(!this.getG()||!e)return t?.remove(),null;const i={name:this.#e?.fName,title:this.#e?.fTitle,x:e.x,y:e.y,color1:this.lineatt?.color??"green",color2:this.fillatt?.getFillColorAlt("blue")??"blue",lines:this.getTF2Tooltips(e),exact:!0,menu:!0};return e.disabled?t.remove():(t.empty()&&(t=this.getG().append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").style("fill","none").attr("r",(this.lineatt?.width??1)+4)),t.attr("cx",e.x).attr("cy",e.y),this.lineatt&&t.call(this.lineatt.func)),i}fillWebObjectOptions(e){e.fcust=this.#i&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const m=R(i);i=m.opt,delete m.opt;const v=new j(i);v.empty()?i="cont3":v.opt==="SAME"&&(i="cont2 same");let l;m._webcanv_hist&&(l=E(e)?.findInPrimitives("Func",P)),l||(l=W(P,20,20),l.fBits|=X);const c=new N(e,l);return c.setFunc(t),Object.assign(c,m),c.createTF2Histogram(t,l),U._drawHist(c,i)}}export{N as TF2Painter};
@@ -1 +1 @@
1
- import{aW as C,ak as X,aA as b,ah as Y,ai as T,a3 as B,aV as L,ag as O}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{TH2Painter as Z}from"./TH2Painter-BLfyBVB5.js";import{p as W}from"./func-C1jNXIub.js";import{produceTAxisLogScale as A,scanTF1Options as j}from"./TF1Painter-BuwSTmhs.js";import{T as E}from"./THistPainter-Df-RmCQH.js";import"./hist3d-DCmav5Ga.js";import"./latex3d-ITrfFgp8.js";import"./TH2Painter-DHaL_lR_.js";import"./TH1Painter--tuoUZTH.js";import"./TPavePainter-Dx40jhkF.js";function k(F,e,t=0){for(let i=F.length-2;i>=0;--i){const n=e[i],f=e[i+1],s=F[i],x=F[i+1];if(n===t)return s;if(f===t)return x;if(n<t!=f<t)return s+(t-n)/(f-n)*(x-s)}return F[0]-1}class H extends Z{#t;#e;#i;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??C}isTF1(){return!0}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",X);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF3Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="logy"||e==="logy"||e==="zoom")&&(this.createTF3Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF3Histogram(e,t){const i=e.fSave.length-9;this.#t=i>0&&(b.PreferSavedPoints||this._use_saved>1);const n=this.getFramePainter(),f=this.getPadPainter()?.getRootPad(!0),s=f?.fLogx,x=f?.fLogy,a=n?.getGrFuncs(this.second_x,this.second_y);let y=e.fXmin,_=e.fXmax,g=e.fYmin,v=e.fYmax,l=e.fZmin,M=e.fZmax,d=Math.max(e.fNpx,20),p=Math.max(e.fNpy,20),o=Math.max(e.fNpz,20);if(a?.zoom_xmin!==a?.zoom_xmax){const m=(_-y)/d;y<a.zoom_xmin&&a.zoom_xmin<_&&(y=Math.max(y,a.zoom_xmin-m)),y<a.zoom_xmax&&a.zoom_xmax<_&&(_=Math.min(_,a.zoom_xmax+m))}if(a?.zoom_ymin!==a?.zoom_ymax){const m=(v-g)/p;g<a.zoom_ymin&&a.zoom_ymin<v&&(g=Math.max(g,a.zoom_ymin-m)),g<a.zoom_ymax&&a.zoom_ymax<v&&(v=Math.min(v,a.zoom_ymax+m))}a?.zoom_zmin!==a?.zoom_zmax&&(l<a.zoom_zmin&&a.zoom_zmin<M&&(l=a.zoom_zmin),l<a.zoom_zmax&&a.zoom_zmax<M&&(M=a.zoom_zmax));const w=(m,h)=>{t.fNcells!==(m+2)*(h+2)&&(t.fNcells=(m+2)*(h+2),t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=m,t.fXaxis.fXbins=[],t.fYaxis.fNbins=h,t.fYaxis.fXbins=[],t.fXaxis.fXmin=y,t.fXaxis.fXmax=_,t.fYaxis.fXmin=g,t.fYaxis.fXmax=v,t.fMinimum=l,t.fMaximum=M};if(this.#i=void 0,!this.#t){let m=!1;!e.evalPar&&!W(e)&&(m=!0),w(d,p),s&&A(t.fXaxis,d,y,_),x&&A(t.fYaxis,p,g,v);const h=new Array(o),S=new Array(o);for(let r=0;r<o;++r)S[r]=l+r/(o-1)*(M-l);for(let r=0;r<p&&!m;++r)for(let z=0;z<d&&!m;++z){const u=t.fXaxis.GetBinCenter(z+1),c=t.fYaxis.GetBinCenter(r+1);let N=0;try{for(let P=0;P<o;++P)h[P]=e.evalPar(u,c,S[P]);N=k(S,h)}catch{m=!0}m||t.setBinContent(t.getBin(z+1,r+1),Number.isFinite(N)?N:0)}m&&(this.#i=!0),m&&i>0&&(this.#t=!0)}if(this.#t){y=e.fSave[i],_=e.fSave[i+1],g=e.fSave[i+2],v=e.fSave[i+3],l=e.fSave[i+4],M=e.fSave[i+5],d=Math.round(e.fSave[i+6]),p=Math.round(e.fSave[i+7]),o=Math.round(e.fSave[i+8]);const m=(M-l)/o;w(d+1,p+1);const h=new Array(o+1),S=new Array(o+1);for(let r=0;r<=o;r++)S[r]=l+r*m;for(let r=0;r<=d;++r)for(let z=0;z<=p;++z){for(let c=0;c<=o;c++)h[c]=e.fSave[r+(d+1)*(z+(p+1)*c)];const u=k(S,h);t.setBinContent(t.getBin(r+1,z+1),Number.isFinite(u)?u:0)}}return t.fName="Func",Y(t,e.fTitle),t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=T,t}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>9&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-9]),this.xmax=Math.max(this.xmax,t.fSave[i-8]),this.ymin=Math.min(this.ymin,t.fSave[i-7]),this.ymax=Math.max(this.ymax,t.fSave[i-6]),this.zmin=Math.min(this.zmin,t.fSave[i-5]),this.zmax=Math.max(this.zmax,t.fSave[i-4])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax),this.ymin=Math.min(this.ymin,t.fYmin),this.ymax=Math.max(this.ymax,t.fYmax),this.zmin=Math.min(this.zmin,t.fZmin),this.zmax=Math.max(this.zmax,t.fZmax))}fillWebObjectOptions(e){e.fcust=this.#i&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const n=j(i);i=n.opt,delete n.opt;const f=new B(i);f.empty()||i==="gl"?i="surf1":f.opt==="SAME"&&(i="surf1 same");let s;n._webcanv_hist&&(s=L(e)?.findInPrimitives("Func",X)),s||(s=O(X,20,20),s.fBits|=T);const x=new H(e,s);return x.setFunc(t,C),Object.assign(x,n),x.createTF3Histogram(t,s),E._drawHist(x,i)}}export{H as TF3Painter};
1
+ import{aW as C,ak as X,aA as b,ah as Y,ai as T,a3 as B,aV as L,ag as O}from"./ndmvr-aframe-core-DEHQ38JB.js";import{TH2Painter as Z}from"./TH2Painter-DceuYQAL.js";import{p as W}from"./func-C6FX2eN2.js";import{produceTAxisLogScale as A,scanTF1Options as j}from"./TF1Painter-DwE8KsBp.js";import{T as E}from"./THistPainter-B2S5BnuY.js";import"./hist3d-D9VevdP6.js";import"./latex3d-8Hbnfz6c.js";import"./TH2Painter-BpixRP4j.js";import"./TH1Painter-DyN-WKyv.js";import"./TPavePainter-1yngbgp8.js";function k(F,e,t=0){for(let i=F.length-2;i>=0;--i){const n=e[i],f=e[i+1],s=F[i],x=F[i+1];if(n===t)return s;if(f===t)return x;if(n<t!=f<t)return s+(t-n)/(f-n)*(x-s)}return F[0]-1}class H extends Z{#t;#e;#i;setFunc(e){this.#e=e}getObjectName(){return this.#e?.fName??"func"}getClassName(){return this.#e?._typename??C}isTF1(){return!0}getPrimaryObject(){return this.#e}updateObject(e){if(!e||this.getClassName()!==e._typename)return!1;delete e.evalPar;const t=this.getHisto();if(this._webcanv_hist){const i=this.getPadPainter()?.findInPrimitives("Func",X);i&&this.updateAxes(t,i,this.getFramePainter())}return this.setFunc(e),this.createTF3Histogram(e,t),this.scanContent(),!0}redraw(e){return!this.#t&&(e==="logx"||e==="logy"||e==="logy"||e==="zoom")&&(this.createTF3Histogram(this.#e,this.getHisto()),this.scanContent()),super.redraw(e)}createTF3Histogram(e,t){const i=e.fSave.length-9;this.#t=i>0&&(b.PreferSavedPoints||this._use_saved>1);const n=this.getFramePainter(),f=this.getPadPainter()?.getRootPad(!0),s=f?.fLogx,x=f?.fLogy,a=n?.getGrFuncs(this.second_x,this.second_y);let y=e.fXmin,_=e.fXmax,g=e.fYmin,v=e.fYmax,l=e.fZmin,M=e.fZmax,d=Math.max(e.fNpx,20),p=Math.max(e.fNpy,20),o=Math.max(e.fNpz,20);if(a?.zoom_xmin!==a?.zoom_xmax){const m=(_-y)/d;y<a.zoom_xmin&&a.zoom_xmin<_&&(y=Math.max(y,a.zoom_xmin-m)),y<a.zoom_xmax&&a.zoom_xmax<_&&(_=Math.min(_,a.zoom_xmax+m))}if(a?.zoom_ymin!==a?.zoom_ymax){const m=(v-g)/p;g<a.zoom_ymin&&a.zoom_ymin<v&&(g=Math.max(g,a.zoom_ymin-m)),g<a.zoom_ymax&&a.zoom_ymax<v&&(v=Math.min(v,a.zoom_ymax+m))}a?.zoom_zmin!==a?.zoom_zmax&&(l<a.zoom_zmin&&a.zoom_zmin<M&&(l=a.zoom_zmin),l<a.zoom_zmax&&a.zoom_zmax<M&&(M=a.zoom_zmax));const w=(m,h)=>{t.fNcells!==(m+2)*(h+2)&&(t.fNcells=(m+2)*(h+2),t.fArray=new Float32Array(t.fNcells)),t.fArray.fill(0),t.fXaxis.fNbins=m,t.fXaxis.fXbins=[],t.fYaxis.fNbins=h,t.fYaxis.fXbins=[],t.fXaxis.fXmin=y,t.fXaxis.fXmax=_,t.fYaxis.fXmin=g,t.fYaxis.fXmax=v,t.fMinimum=l,t.fMaximum=M};if(this.#i=void 0,!this.#t){let m=!1;!e.evalPar&&!W(e)&&(m=!0),w(d,p),s&&A(t.fXaxis,d,y,_),x&&A(t.fYaxis,p,g,v);const h=new Array(o),S=new Array(o);for(let r=0;r<o;++r)S[r]=l+r/(o-1)*(M-l);for(let r=0;r<p&&!m;++r)for(let z=0;z<d&&!m;++z){const u=t.fXaxis.GetBinCenter(z+1),c=t.fYaxis.GetBinCenter(r+1);let N=0;try{for(let P=0;P<o;++P)h[P]=e.evalPar(u,c,S[P]);N=k(S,h)}catch{m=!0}m||t.setBinContent(t.getBin(z+1,r+1),Number.isFinite(N)?N:0)}m&&(this.#i=!0),m&&i>0&&(this.#t=!0)}if(this.#t){y=e.fSave[i],_=e.fSave[i+1],g=e.fSave[i+2],v=e.fSave[i+3],l=e.fSave[i+4],M=e.fSave[i+5],d=Math.round(e.fSave[i+6]),p=Math.round(e.fSave[i+7]),o=Math.round(e.fSave[i+8]);const m=(M-l)/o;w(d+1,p+1);const h=new Array(o+1),S=new Array(o+1);for(let r=0;r<=o;r++)S[r]=l+r*m;for(let r=0;r<=d;++r)for(let z=0;z<=p;++z){for(let c=0;c<=o;c++)h[c]=e.fSave[r+(d+1)*(z+(p+1)*c)];const u=k(S,h);t.setBinContent(t.getBin(r+1,z+1),Number.isFinite(u)?u:0)}}return t.fName="Func",Y(t,e.fTitle),t.fLineColor=e.fLineColor,t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,t.fFillColor=e.fFillColor,t.fFillStyle=e.fFillStyle,t.fMarkerColor=e.fMarkerColor,t.fMarkerStyle=e.fMarkerStyle,t.fMarkerSize=e.fMarkerSize,t.fBits|=T,t}extractAxesProperties(e){super.extractAxesProperties(e);const t=this.#e,i=t?.fSave.length??0;i>9&&this.#t&&(this.xmin=Math.min(this.xmin,t.fSave[i-9]),this.xmax=Math.max(this.xmax,t.fSave[i-8]),this.ymin=Math.min(this.ymin,t.fSave[i-7]),this.ymax=Math.max(this.ymax,t.fSave[i-6]),this.zmin=Math.min(this.zmin,t.fSave[i-5]),this.zmax=Math.max(this.zmax,t.fSave[i-4])),t&&(this.xmin=Math.min(this.xmin,t.fXmin),this.xmax=Math.max(this.xmax,t.fXmax),this.ymin=Math.min(this.ymin,t.fYmin),this.ymax=Math.max(this.ymax,t.fYmax),this.zmin=Math.min(this.zmin,t.fZmin),this.zmax=Math.max(this.zmax,t.fZmax))}fillWebObjectOptions(e){e.fcust=this.#i&&!this._use_saved?"func_fail":""}static async draw(e,t,i){const n=j(i);i=n.opt,delete n.opt;const f=new B(i);f.empty()||i==="gl"?i="surf1":f.opt==="SAME"&&(i="surf1 same");let s;n._webcanv_hist&&(s=L(e)?.findInPrimitives("Func",X)),s||(s=O(X,20,20),s.fBits|=T);const x=new H(e,s);return x.setFunc(t,C),Object.assign(x,n),x.createTF3Histogram(t,s),E._drawHist(x,i)}}export{H as TF3Painter};
@@ -1 +1 @@
1
- import{bn as l,$ as u,a1 as m,a0 as v,al as y,aX as d,cn as X,aF as Y,a6 as b,co as P,aH as T}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{p as F}from"./func-C1jNXIub.js";class _ extends l{convertTo(s){const t=this.getObject(),a=this.axisToSvg("x",t.fX1),i=this.axisToSvg("y",t.fY1),e=this.axisToSvg("x",t.fX2),h=this.axisToSvg("y",t.fY2);if(s==="ndc"){const n=this.getPadPainter().getPadWidth(),r=this.getPadPainter().getPadHeight();t.fX1=a/n,t.fX2=e/n,t.fY1=(r-i)/r,t.fY2=(r-h)/r,this.use_ndc=!0}else if(s==="frame"){const n=this.getFramePainter().getFrameRect();t.fX1=(a-n.x)/n.width,t.fX2=(e-n.x)/n.width,t.fY1=(i-n.y)/n.height,t.fY2=(h-n.y)/n.height,this.bind_frame=!0}}moveDrag(s,t){this.gaxis_x+=s,this.gaxis_y+=t,u(this.getG(),this.gaxis_x,this.gaxis_y)}moveEnd(s){if(s)return;const t=this.getObject();let a,i;if(this.bind_frame){const e=this.getFramePainter().getFrameRect();a=(this.gaxis_x-e.x)/e.width,i=(this.gaxis_y-e.y)/e.height}else a=this.svgToAxis("x",this.gaxis_x,this.use_ndc),i=this.svgToAxis("y",this.gaxis_y,this.use_ndc);this.vertical?(t.fX1=t.fX2=a,this.reverse?(t.fY2=i+(t.fY2-t.fY1),t.fY1=i):(t.fY1=i+(t.fY1-t.fY2),t.fY2=i)):(this.reverse?(t.fX1=a+(t.fX1-t.fX2),t.fX2=a):(t.fX2=a+(t.fX2-t.fX1),t.fX1=a),t.fY1=t.fY2=i),this.submitAxisExec(`SetX1(${t.fX1});;SetX2(${t.fX2});;SetY1(${t.fY1});;SetY2(${t.fY2})`,!0)}redraw(){const s=this.getObject(),t=s.fWmin,a=s.fWmax;let i,e,h,n;if(this.bind_frame){const f=this.getFramePainter().getFrameRect();i=Math.round(f.x+s.fX1*f.width),h=Math.round(f.x+s.fX2*f.width),e=Math.round(f.y+s.fY1*f.height),n=Math.round(f.y+s.fY2*f.height)}else i=this.axisToSvg("x",s.fX1,this.use_ndc),e=this.axisToSvg("y",s.fY1,this.use_ndc),h=this.axisToSvg("x",s.fX2,this.use_ndc),n=this.axisToSvg("y",s.fY2,this.use_ndc);const r=h-i,c=e-n,o=Math.abs(r)<Math.abs(c);let x=o?c:r,g=!1;return x<0&&(g=!0,x=-x,o?n=e:i=h),this.configureAxis(o?"yaxis":"xaxis",t,a,t,a,o,[0,x],{time_scale:s.fChopt.indexOf("t")>=0,log:s.fChopt.indexOf("G")>=0?1:0,reverse:g,swap_side:g,axis_func:this.axis_func}),this.gaxis_x=i,this.gaxis_y=n,this.drawAxis(this.createG(),Math.abs(r),Math.abs(c),u(this.gaxis_x,this.gaxis_y)||"").then(()=>(m(this),v(this,T),this))}fillContextMenuItems(s){s.addTAxisMenu(y,this,this.getObject(),"")}async checkFuncion(){const s=this.getObject();if(!s.fFunctionName){this.axis_func=null;return}const t=this.getPadPainter()?.findInPrimitives(s.fFunctionName,d);let a=Promise.resolve(t);if(!t){const i=P(),e=i?.findItem({name:s.fFunctionName,check_keys:!0});e&&(a=i.getObject({item:e}).then(h=>h?.obj?._typename===d?h.obj:null))}return a.then(i=>{this.axis_func=i,i&&F(i)})}createFuncHandle(s,t,a,i){const e=function(r){return e.toGraph(r)};e._func=s,e._domain=[a,i],e._scale=t?X().base(t):Y(),e._scale.domain(e._domain).range([0,100]),e.eval=function(r){try{r=e._func.evalPar(r)}catch{r=0}return Number.isFinite(r)?r:0};const h=e.eval(a),n=e.eval(i);return h<n==a<i?(e._vmin=h,e._vk=1/(n-h)):h===n?(e._vmin=0,e._vk=1):(e._vmin=n,e._vk=1/(h-n)),e._range=[0,100],e.range=function(r){return r?(e._range=r,e):e._range},e.domain=function(){return e._domain},e.toGraph=function(r){const c=(e.eval(r)-e._vmin)*e._vk;return e._range[0]*(1-c)+e._range[1]*c},e.ticks=function(r){return e._scale.ticks(r)},e}static async draw(s,t,a){const i=new _(s,t,!1);return b(i,!1).then(()=>(a&&i.convertTo(a),i.checkFuncion())).then(()=>i.redraw())}}export{_ as TGaxisPainter};
1
+ import{bn as l,$ as u,a1 as m,a0 as v,al as y,aX as d,cn as X,aF as Y,a6 as b,co as P,aH as T}from"./ndmvr-aframe-core-DEHQ38JB.js";import{p as F}from"./func-C6FX2eN2.js";class _ extends l{convertTo(s){const t=this.getObject(),a=this.axisToSvg("x",t.fX1),i=this.axisToSvg("y",t.fY1),e=this.axisToSvg("x",t.fX2),h=this.axisToSvg("y",t.fY2);if(s==="ndc"){const n=this.getPadPainter().getPadWidth(),r=this.getPadPainter().getPadHeight();t.fX1=a/n,t.fX2=e/n,t.fY1=(r-i)/r,t.fY2=(r-h)/r,this.use_ndc=!0}else if(s==="frame"){const n=this.getFramePainter().getFrameRect();t.fX1=(a-n.x)/n.width,t.fX2=(e-n.x)/n.width,t.fY1=(i-n.y)/n.height,t.fY2=(h-n.y)/n.height,this.bind_frame=!0}}moveDrag(s,t){this.gaxis_x+=s,this.gaxis_y+=t,u(this.getG(),this.gaxis_x,this.gaxis_y)}moveEnd(s){if(s)return;const t=this.getObject();let a,i;if(this.bind_frame){const e=this.getFramePainter().getFrameRect();a=(this.gaxis_x-e.x)/e.width,i=(this.gaxis_y-e.y)/e.height}else a=this.svgToAxis("x",this.gaxis_x,this.use_ndc),i=this.svgToAxis("y",this.gaxis_y,this.use_ndc);this.vertical?(t.fX1=t.fX2=a,this.reverse?(t.fY2=i+(t.fY2-t.fY1),t.fY1=i):(t.fY1=i+(t.fY1-t.fY2),t.fY2=i)):(this.reverse?(t.fX1=a+(t.fX1-t.fX2),t.fX2=a):(t.fX2=a+(t.fX2-t.fX1),t.fX1=a),t.fY1=t.fY2=i),this.submitAxisExec(`SetX1(${t.fX1});;SetX2(${t.fX2});;SetY1(${t.fY1});;SetY2(${t.fY2})`,!0)}redraw(){const s=this.getObject(),t=s.fWmin,a=s.fWmax;let i,e,h,n;if(this.bind_frame){const f=this.getFramePainter().getFrameRect();i=Math.round(f.x+s.fX1*f.width),h=Math.round(f.x+s.fX2*f.width),e=Math.round(f.y+s.fY1*f.height),n=Math.round(f.y+s.fY2*f.height)}else i=this.axisToSvg("x",s.fX1,this.use_ndc),e=this.axisToSvg("y",s.fY1,this.use_ndc),h=this.axisToSvg("x",s.fX2,this.use_ndc),n=this.axisToSvg("y",s.fY2,this.use_ndc);const r=h-i,c=e-n,o=Math.abs(r)<Math.abs(c);let x=o?c:r,g=!1;return x<0&&(g=!0,x=-x,o?n=e:i=h),this.configureAxis(o?"yaxis":"xaxis",t,a,t,a,o,[0,x],{time_scale:s.fChopt.indexOf("t")>=0,log:s.fChopt.indexOf("G")>=0?1:0,reverse:g,swap_side:g,axis_func:this.axis_func}),this.gaxis_x=i,this.gaxis_y=n,this.drawAxis(this.createG(),Math.abs(r),Math.abs(c),u(this.gaxis_x,this.gaxis_y)||"").then(()=>(m(this),v(this,T),this))}fillContextMenuItems(s){s.addTAxisMenu(y,this,this.getObject(),"")}async checkFuncion(){const s=this.getObject();if(!s.fFunctionName){this.axis_func=null;return}const t=this.getPadPainter()?.findInPrimitives(s.fFunctionName,d);let a=Promise.resolve(t);if(!t){const i=P(),e=i?.findItem({name:s.fFunctionName,check_keys:!0});e&&(a=i.getObject({item:e}).then(h=>h?.obj?._typename===d?h.obj:null))}return a.then(i=>{this.axis_func=i,i&&F(i)})}createFuncHandle(s,t,a,i){const e=function(r){return e.toGraph(r)};e._func=s,e._domain=[a,i],e._scale=t?X().base(t):Y(),e._scale.domain(e._domain).range([0,100]),e.eval=function(r){try{r=e._func.evalPar(r)}catch{r=0}return Number.isFinite(r)?r:0};const h=e.eval(a),n=e.eval(i);return h<n==a<i?(e._vmin=h,e._vk=1/(n-h)):h===n?(e._vmin=0,e._vk=1):(e._vmin=n,e._vk=1/(h-n)),e._range=[0,100],e.range=function(r){return r?(e._range=r,e):e._range},e.domain=function(){return e._domain},e.toGraph=function(r){const c=(e.eval(r)-e._vmin)*e._vk;return e._range[0]*(1-c)+e._range[1]*c},e.ticks=function(r){return e._scale.ticks(r)},e}static async draw(s,t,a){const i=new _(s,t,!1);return b(i,!1).then(()=>(a&&i.convertTo(a),i.checkFuncion())).then(()=>i.redraw())}}export{_ as TGaxisPainter};
@@ -1 +1 @@
1
- import{a7 as ot,a3 as Nt,at as ct,au as V,ad as rt,ag as ut,av as dt,ah as Xt,ai as Yt,aw as H,ax as mt,an as tt,ay as xt,az as gt,aA as pt,aB as Mt,aC as yt}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{TH2Painter as nt}from"./TH2Painter-BLfyBVB5.js";import{a as wt}from"./TH2Painter-DHaL_lR_.js";import{c as Tt,a as Ct}from"./hist3d-DCmav5Ga.js";import"./THistPainter-Df-RmCQH.js";import"./TPavePainter-Dx40jhkF.js";import"./latex3d-ITrfFgp8.js";function at(E){let t=E[0];for(let f=1;f<E.length;++f)t=Math.max(t,E[f]);return t}function lt(E){let t=E[0];for(let f=1;f<E.length;++f)t=Math.min(t,E[f]);return t}function _t(E,t,f){const i=new Array(E);for(let s=0;s<E;++s)i[s]={v:t[s],i:s};i.sort((s,N)=>s.v<N.v?-1:s.v>N.v?1:0);for(let s=0;s<E;++s)f[s]=i[s].i}class zt{constructor(t){this.fGraph2D=t,this.fX=t.fX,this.fY=t.fY,this.fZ=t.fZ,this.fNpoints=t.fNpoints,this.fZout=0,this.fNdt=0,this.fNhull=0,this.fHullPoints=null,this.fXN=null,this.fYN=null,this.fOrder=null,this.fDist=null,this.fPTried=null,this.fNTried=null,this.fMTried=null,this.fInit=!1,this.fXNmin=0,this.fXNmax=0,this.fYNmin=0,this.fYNmax=0,this.fXoffset=0,this.fYoffset=0,this.fXScaleFactor=0,this.fYScaleFactor=0,this.SetMaxIter()}Initialize(){this.fInit||(this.CreateTrianglesDataStructure(),this.FindHull(),this.fInit=!0)}ComputeZ(t,f){this.Initialize();const i=(t+this.fXoffset)*this.fXScaleFactor,s=(f+this.fYoffset)*this.fYScaleFactor;let N=this.Interpolate(i,s);return N===0&&(N=this.Interpolate(i+1e-4,s)),N}CreateTrianglesDataStructure(){const t=at(this.fGraph2D.fX),f=at(this.fGraph2D.fY),i=lt(this.fGraph2D.fX),s=lt(this.fGraph2D.fY);this.fXoffset=-(t+i)/2,this.fYoffset=-(f+s)/2,this.fXScaleFactor=1/(t-i),this.fYScaleFactor=1/(f-s),this.fXNmax=(t+this.fXoffset)*this.fXScaleFactor,this.fXNmin=(i+this.fXoffset)*this.fXScaleFactor,this.fYNmax=(f+this.fYoffset)*this.fYScaleFactor,this.fYNmin=(s+this.fYoffset)*this.fYScaleFactor,this.fXN=new Array(this.fNpoints+1),this.fYN=new Array(this.fNpoints+1);for(let N=0;N<this.fNpoints;N++)this.fXN[N+1]=(this.fX[N]+this.fXoffset)*this.fXScaleFactor,this.fYN[N+1]=(this.fY[N]+this.fYoffset)*this.fYScaleFactor;this.fPTried=[],this.fNTried=[],this.fMTried=[]}Enclose(t,f,i,s){const N=[this.fXN[t],this.fXN[f],this.fXN[i],this.fXN[t]],e=[this.fYN[t],this.fYN[f],this.fYN[i],this.fYN[t]],o=this.fXN[s],l=this.fYN[s];let m=0,x=N.length-1,u=!1;for(;m<N.length;++m)(e[m]<l&&e[x]>=l||e[x]<l&&e[m]>=l)&&N[m]+(l-e[m])/(e[x]-e[m])*(N[x]-N[m])<o&&(u=!u),x=m;return u}FileIt(t,f,i){let s,N=t,e=f,o=i;do s=!1,e>N&&([e,N]=[N,e],s=!0),o>e&&([o,e]=[e,o],s=!0);while(s);this.fNdt++,this.fPTried.push(N),this.fNTried.push(e),this.fMTried.push(o)}FindAllTriangles(){if(this.fAllTri)return;this.fAllTri=!0;let t,f,i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_,k=0,M=0,P,p,Z=0;const d=[!1,!1,!1],F=1e-4;for(this.Initialize(),t=0,f=0,p=1;p<=this.fNhull;p++)t+=this.fXN[this.fHullPoints[p-1]],f+=this.fYN[this.fHullPoints[p-1]];for(t=t/this.fNhull+F,f=f/this.fNhull+F,this.Interpolate(t,f),r=1;r<=this.fNdt;){for(w=this.fPTried[r-1],C=this.fNTried[r-1],Y=this.fMTried[r-1],d[0]=!1,d[1]=!1,d[2]=!1,n=1;n<=this.fNdt;n++)n!==r&&(y=this.fPTried[n-1],c=this.fNTried[n-1],_=this.fMTried[n-1],w===y&&C===c||w===y&&C===_||w===c&&C===_?d[0]=!0:w===y&&Y===c||w===y&&Y===_||w===c&&Y===_?d[1]=!0:(C===y&&Y===c||C===y&&Y===_||C===c&&Y===_)&&(d[2]=!0)),d[0]&&d[1]&&d[2];for(P=1;P<=3;P++)d[P-1]||(P===1?(k=w,M=C,Z=Y):P===2?(k=w,M=Y,Z=C):P===3&&(k=C,M=Y,Z=w),i=(this.fXN[k]+this.fXN[M])/2,s=(this.fYN[k]+this.fYN[M])/2,o=this.fXN[k]-this.fXN[M],l=this.fYN[k]-this.fYN[M],m=l,x=-o,h=Math.sqrt(m*m+x*x),m/=h,x/=h,u=this.fXN[Z]-i,X=this.fYN[Z]-s,a=u*m+X*x,a>0&&(m=-m,x=-x),g=Math.abs(Math.max(F*i,F*s)),N=i+m*g,e=s+x*g,this.Interpolate(N,e));r++}}FindHull(){this.fHullPoints||(this.fHullPoints=new Array(this.fNpoints));let t=0;for(let f=1;f<=this.fNpoints;f++)this.InHull(f,f)||(t++,this.fHullPoints[t-1]=f);this.fNhull=t}InHull(t,f){let i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_,k=!1;const M=this.fXN[t],P=this.fYN[t];for(this.fNhull>0?o=this.fNhull:o=this.fNpoints,i=1,s=2,i===f?(i=s,s++):s===f&&s++,u=M-this.fXN[i],h=P-this.fYN[i],X=M-this.fXN[s],g=P-this.fYN[s],y=Math.atan2(h,u),c=Math.atan2(g,X),_=y-c-Math.floor((y-c)/(Math.PI*2))*Math.PI*2,_<0&&(_+=Math.PI*2),l=_,N=1;N<=o;N++)if(this.fNhull>0?e=this.fHullPoints[N-1]:e=N,e!==i&&e!==s&&e!==f&&(u=M-this.fXN[i],h=P-this.fYN[i],X=M-this.fXN[s],g=P-this.fYN[s],a=M-this.fXN[e],r=P-this.fYN[e],m=X*h-u*g,x=u*g-X*h,m*x&&(n=(X*r-a*g)/m,w=(u*r-a*h)/x,n<0||w<0))){if(C=(u*a+h*r)/Math.sqrt(u*u+h*h),Y=(X*a+g*r)/Math.sqrt(X*X+g*g),C>Y?(i=e,y=Math.atan2(r,a),c=Math.atan2(g,X)):(s=e,y=Math.atan2(h,u),c=Math.atan2(r,a)),_=y-c-Math.floor((y-c)/(Math.PI*2))*Math.PI*2,_<0&&(_+=Math.PI*2),(_-Math.PI)*(l-Math.PI)<0)return k=!0,k;l=_}return k}InterpolateOnPlane(t,f,i,s){let N,e=t,o=f,l=i;do N=!1,o>e&&([e,o]=[o,e],N=!0),l>o&&([o,l]=[l,o],N=!0);while(N);const m=this.fXN[e],x=this.fXN[o],u=this.fXN[l],X=this.fYN[e],a=this.fYN[o],h=this.fYN[l],g=this.fZ[e-1],r=this.fZ[o-1],n=this.fZ[l-1],w=(g*(a-h)+r*(h-X)+n*(X-a))/(m*(a-h)+x*(h-X)+u*(X-a)),C=(g*(x-u)+r*(u-m)+n*(m-x))/(X*(x-u)+a*(u-m)+h*(m-x)),Y=g-w*m-C*X;return w*this.fXN[s]+C*this.fYN[s]+Y}Interpolate(t,f){let i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_=0,k=0,M=0,P=0,p=0,Z,d,F,I,L,A,b,O,G,q,v,D,S,z,T,R,W,K,U,J,Q,et,ft;const B=[0,0,0],$=[0,0,0];if(this.Initialize(),this.fOrder||(this.fOrder=new Array(this.fNpoints),this.fDist=new Array(this.fNpoints)),this.fXN[0]=t,this.fYN[0]=f,i=this.fZout,N=0,t>this.fXNmax||t<this.fXNmin||f>this.fYNmax||f<this.fYNmin)return i;for(s=1;s<=this.fNdt;s++)if(e=this.fPTried[s-1],o=this.fNTried[s-1],l=this.fMTried[s-1],this.Enclose(e,o,l,0))return i=this.InterpolateOnPlane(e,o,l,0),i;const ht=this.InHull(0,-1);if(!ht)return i;for(s=1;s<=this.fNpoints;s++)Z=this.fXN[s],d=this.fYN[s],this.fDist[s-1]=Math.sqrt((t-Z)*(t-Z)+(f-d)*(f-d));for(_t(this.fNpoints,this.fDist,this.fOrder),s=0;s<this.fNpoints;s++)this.fOrder[s]++;for(u=3;u<=this.fNpoints;u++)for(l=this.fOrder[u-1],x=2;x<=u-1;x++)for(o=this.fOrder[x-1],m=1;m<=x-1;m++){let j=!1;if(e=this.fOrder[m-1],N>this.fMaxIter)return i;if(N++,F=Math.sqrt((this.fXN[e]-this.fXN[o])**2+(this.fYN[e]-this.fYN[o])**2),I=Math.sqrt((this.fXN[e]-this.fXN[l])**2+(this.fYN[e]-this.fYN[l])**2),L=Math.sqrt((this.fXN[o]-this.fXN[l])**2+(this.fYN[o]-this.fYN[l])**2),!(F+I<=L||F+L<=I||I+L<=F)&&this.Enclose(e,o,l,0)){for(_=0,a=1;a<=this.fNpoints;a++)if(!(a===e||a===o||a===l)){for(X=1;X<=this.fNpoints;X++)if(this.fOrder[X-1]===a)if(X<m||X<x||X<u){if(this.Enclose(e,o,l,a)){j=!0;break}}else break;if(j)break;if((this.fXN[e]-this.fXN[a])*(this.fYN[e]-this.fYN[o])===(this.fYN[e]-this.fYN[a])*(this.fXN[e]-this.fXN[o])?(w=e,C=o):(this.fXN[e]-this.fXN[a])*(this.fYN[e]-this.fYN[l])===(this.fYN[e]-this.fYN[a])*(this.fXN[e]-this.fXN[l])?(w=e,C=l):(this.fXN[o]-this.fXN[a])*(this.fYN[o]-this.fYN[l])===(this.fYN[o]-this.fYN[a])*(this.fXN[o]-this.fXN[l])?(w=o,C=l):(w=0,C=0),w){if(this.fXN[w]!==this.fXN[C])if((this.fXN[a]-this.fXN[w])*(this.fXN[a]-this.fXN[C])<0){j=!0;break}else(this.fXN[a]-this.fXN[w])*(this.fXN[a]-this.fXN[C])===0&&console.warn(`Interpolate Two of these three points are coincident ${w} ${C} ${a}`);else if((this.fYN[a]-this.fYN[w])*(this.fYN[a]-this.fYN[C])<0){j=!0;break}else(this.fYN[a]-this.fYN[w])*(this.fYN[a]-this.fYN[C])===0&&console.warn(`Interpolate Two of these three points are coincident ${w} ${C} ${a}`);continue}if(j)break;for(h=l,r=e,n=o,B[0]=this.fXN[e]-this.fXN[a],$[0]=this.fYN[e]-this.fYN[a],B[1]=this.fXN[o]-this.fXN[a],$[1]=this.fYN[o]-this.fYN[a],B[2]=this.fXN[l]-this.fXN[a],$[2]=this.fYN[l]-this.fYN[a],X=1;X<=3;X++)if(R=B[X-1],W=B[X%3],K=B[(X+1)%3],U=$[X-1],J=$[X%3],Q=$[(X+1)%3],et=(Q*W-K*J)*(U*W-R*J),ft=(Q*R-K*U)*(J*R-W*U),et>=0&&ft>=0){X===1?(h=l,r=e,n=o):X===2?(h=e,r=o,n=l):(h=o,r=l,n=e);break}if(S=((this.fXN[h]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))/Math.sqrt(((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))*((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))),z=((this.fXN[n]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))/Math.sqrt(((this.fXN[n]-this.fXN[r])*(this.fXN[n]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[n]-this.fYN[r]))*((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))),T=((this.fXN[n]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))/Math.sqrt(((this.fXN[n]-this.fXN[r])*(this.fXN[n]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[n]-this.fYN[r]))*((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))),!(S>z||S>T))if(O=Math.sqrt((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r])),G=Math.sqrt((this.fXN[a]-this.fXN[n])*(this.fXN[a]-this.fXN[n])+(this.fYN[a]-this.fYN[n])*(this.fYN[a]-this.fYN[n])),q=Math.sqrt((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r])),v=Math.sqrt((this.fXN[h]-this.fXN[n])*(this.fXN[h]-this.fXN[n])+(this.fYN[h]-this.fYN[n])*(this.fYN[h]-this.fYN[n])),A=((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[n])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[n]))/O/G,b=((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[n])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[n]))/q/v,D=A*Math.sqrt(1-b*b)+b*Math.sqrt(1-A*A),D<-1e-6){j=!0;break}else Math.abs(D)<=1e-6&&(_++,k=a,M=h,P=r,p=n)}if(!j)return _>0?(g=k,h=M,r=P,n=p,this.fZ[r-1]+this.fZ[n-1]>this.fZ[g-1]+this.fZ[h-1]?(Y=e,y=o,c=l,this.FileIt(e,o,l),this.FileIt(g,r,n)):(Y=h,y=g,this.Enclose(h,g,r,0)?c=r:c=n,this.FileIt(h,g,r),this.FileIt(h,g,n))):(this.FileIt(e,o,l),Y=e,y=o,c=l),i=this.InterpolateOnPlane(Y,y,c,0),i}}return ht&&console.error(`Interpolate Point outside hull when expected inside: this point could be dodgy ${t} ${f} ${N}`),i}SetMaxIter(t=1e5){this.fAllTri=!1,this.fMaxIter=t}SetMarginBinsContent(t){this.fZout=t}GetContourList(t){if(!this.fNdt)return null;let f,i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c=0,_,k,M,P;const p=[0,0,0],Z=new Array(this.fNdt).fill(0),d=new Array(this.fNdt).fill(0),F=new Array(this.fNdt).fill(0),I=new Array(this.fNdt).fill(0);for(w=0;w<this.fNdt;w++){if(p[0]=this.fPTried[w],p[1]=this.fNTried[w],p[2]=this.fMTried[w],e=p[0]-1,o=p[1]-1,l=p[2]-1,m=this.fX[e],g=this.fX[e],x=this.fY[e],r=this.fY[e],u=this.fZ[e],n=this.fZ[e],C=Y=y=0,this.fZ[o]<=u&&(u=this.fZ[o],m=this.fX[o],x=this.fY[o],C=1),this.fZ[o]>n&&(n=this.fZ[o],g=this.fX[o],r=this.fY[o],y=1),this.fZ[l]<=u&&(u=this.fZ[l],m=this.fX[l],x=this.fY[l],C=2),this.fZ[l]>n&&(n=this.fZ[l],g=this.fX[l],r=this.fY[l],y=2),C===0&&y===0)return console.error("GetContourList: wrong vertices ordering"),null;Y=3-y-C,X=this.fX[p[Y]-1],a=this.fY[p[Y]-1],h=this.fZ[p[Y]-1],t>=u&&t<=n&&(s=(t-u)/(n-u),_=s*(g-m)+m,k=s*(r-x)+x,t>=h&&t<=n?(i=(t-h)/(n-h),M=i*(g-X)+X,P=i*(r-a)+a):(N=(t-u)/(h-u),M=N*(X-m)+m,P=N*(a-x)+x),(_!==M||k!==P)&&(c++,Z[c-1]=_,d[c-1]=k,F[c-1]=M,I[c-1]=P))}const L=[],A=new Array(this.fNdt).fill(!1);let b=0,O=0,G=0,q=0,v,D,S,z,T;for(z=0;z<c;z++)if(!A[z]){for(D=S=!1,T=0;T<c;T++)z!==T&&(Z[z]===Z[T]&&d[z]===d[T]&&(D=!0),Z[z]===F[T]&&d[z]===I[T]&&(D=!0),F[z]===Z[T]&&I[z]===d[T]&&(S=!0),F[z]===F[T]&&I[z]===I[T]&&(S=!0));if(!D&&!S){f=[],f.push(Z[z],d[z]),f.push(F[z],I[z]),A[z]=!0,L.push(f);continue}if(!D||!S){for(f=[],D&&(b=Z[z],O=d[z],G=F[z],q=I[z]),S&&(b=F[z],O=I[z],G=Z[z],q=d[z]),f.push(G,q),A[z]=!0,T=0;;){for(v=!1;T<c&&A[T];)T++;if(b===Z[T]&&O===d[T]?(b=F[T],O=I[T],v=!0):b===F[T]&&O===I[T]&&(b=Z[T],O=d[T],v=!0),v)A[T]=!0,f.push(b,O),T=0;else if(++T>=c)break}L.push(f)}}for(z=0;z<c;z++)if(!A[z]){for(f=[],A[z]=!0,b=Z[z],O=d[z],T=0,f.push(b,O);;){for(;T<c&&A[T];)T++;if(v=!1,b===Z[T]&&O===d[T]?(b=F[T],O=I[T],v=!0):b===F[T]&&O===I[T]&&(b=Z[T],O=d[T],v=!0),v)A[T]=!0,f.push(b,O),T=0;else if(++T>=c)break}f.push(Z[z],d[z]),L.push(f)}return L}}function it(E){let t=Math.floor(E.index/this.nvertex);if(t<0||t>=this.index.length)return null;const f=l=>l*l;t=this.index[t];const i=this.fp,s=this.graph;let N=i.grx(s.fX[t]),e=i.gry(s.fY[t]),o=i.grz(s.fZ[t]);if(this.check_next&&t+1<s.fX.length){const l=E.point,m=i.grx(s.fX[t+1]),x=i.gry(s.fY[t+1]),u=i.grz(s.fZ[t+1]);f(l.x-m)+f(l.y-x)+f(l.z-u)<f(l.x-N)+f(l.y-e)+f(l.z-o)&&(N=m,e=x,o=u,t++)}return{x1:N-this.scale0,x2:N+this.scale0,y1:e-this.scale0,y2:e+this.scale0,z1:o-this.scale0,z2:o+this.scale0,color:this.tip_color,lines:[this.tip_name,"pnt: "+t,"x: "+i.axisAsText("x",s.fX[t]),"y: "+i.axisAsText("y",s.fY[t]),"z: "+i.axisAsText("z",s.fZ[t])]}}class st extends ot{#i;#t;decodeOptions(t){const f=new Nt(t),i=this.getObject();f.check("FILL_","color")&&i&&(i.fFillColor=f.color),f.check("LINE_","color")&&i&&(i.fLineColor=f.color),f.check("SAME");let s=0,N=0;f.check("CONT5")?N=15:f.check("TRI1")?s=11:f.check("TRI2")?s=10:f.check("TRIW")?s=1:f.check("TRI")&&(s=2);const e=this.setOptions({Triangles:s,Contour:N,Line:f.check("LINE"),Error:f.check("ERR")&&(this.matchObjectType(ct)||this.matchObjectType(V))});f.check("P0COL")?e.Color=e.Circles=e.Markers=!0:(e.Color=f.check("COL"),e.Circles=f.check("P0"),e.Markers=f.check("P")),e.Markers||(e.Color=!1),(e.Color||e.Triangles>=10||e.Contour)&&(e.Zscale=f.check("Z")),e.isAny=function(){return this.Markers||this.Error||this.Circles||this.Line||this.Triangles||e.Contour},e.Contour?e.Axis="":e.isAny()?(e.Axis="lego2",e.Zscale&&(e.Axis+="z")):e.Axis=t,this.storeDrawOpt(t)}createHistogram(){const t=this.getObject(),f=this.getOptions(),i=this.matchObjectType(V);let s=t.fX[0],N=s,e=t.fY[0],o=e,l=t.fZ[0],m=l;for(let c=0;c<t.fNpoints;++c){const _=t.fX[c],k=t.fY[c],M=t.fZ[c];f.Error?(s=Math.min(s,_-(i?t.fEXlow[c]:t.fEX[c])),N=Math.max(N,_+(i?t.fEXhigh[c]:t.fEX[c])),e=Math.min(e,k-(i?t.fEYlow[c]:t.fEY[c])),o=Math.max(o,k+(i?t.fEYhigh[c]:t.fEY[c])),l=Math.min(l,M-(i?t.fEZlow[c]:t.fEZ[c])),m=Math.max(m,M+(i?t.fEZhigh[c]:t.fEZ[c]))):(s=Math.min(s,_),N=Math.max(N,_),e=Math.min(e,k),o=Math.max(o,k),l=Math.min(l,M),m=Math.max(m,M))}function x(c,_,k){return c<_?k*(_-c):Math.abs(c)<1e5?.02:.02*Math.abs(c)}const u=x(s,N,t.fMargin),X=x(e,o,t.fMargin),a=x(l,m,0);let h=s-u,g=N+u,r=e-X,n=o+X,w=l-a,C=m+a;h<0&&s>=0&&(h=s*.98),g>0&&N<=0&&(g=0),r<0&&e>=0&&(r=e*.98),n>0&&o<=0&&(n=0),w<0&&l>=0&&(w=l*.98),C>0&&m<=0&&(C=0);const Y=this.getObject();Y.fMinimum!==rt&&(w=Y.fMinimum),Y.fMaximum!==rt&&(C=Y.fMaximum);const y=ut(dt,Y.fNpx,Y.fNpy);if(y.fName=Y.fName+"_h",Xt(y,Y.fTitle),y.fXaxis.fXmin=h,y.fXaxis.fXmax=g,y.fYaxis.fXmin=r,y.fYaxis.fXmax=n,y.fZaxis.fXmin=w,y.fZaxis.fXmax=C,y.fMinimum=w,y.fMaximum=C,y.fBits|=Yt,!f.isAny()){const c=this.buildDelaunay(Y);if(c)for(let _=0;_<Y.fNpx;++_){const k=h+(_+.5)/Y.fNpx*(g-h);for(let M=0;M<Y.fNpy;++M){const P=r+(M+.5)/Y.fNpy*(n-r),p=c.ComputeZ(k,P);y.fArray[y.getBin(_+1,M+1)]=p}}}return y}buildDelaunay(t){return this.#t||(this.#t=new zt(t),this.#t.FindAllTriangles(),this.#t.fNdt||(this.#t=void 0)),this.#t}drawTriangles(t,f,i,s){const N=this.buildDelaunay(f);if(!N)return;const e=t.logz?X=>X<t.scale_zmin?-.1:t.grz(X):t.grz,o=this.getOptions(),l=o.Triangles===2,m=o.Triangles>=10||l,x=o.Triangles%10===1||l&&f.fLineColor!==f.fFillColor,u=new wt(i,e,0,2*t.size_z3d,x);for(u.loop=0;u.loop<2;++u.loop){u.createBuffers();for(let X=0;X<N.fNdt;++X){const a=[N.fPTried[X],N.fNTried[X],N.fMTried[X]],h=[];let g=!0;for(let r=0;r<3;++r){const n=a[r]-1;h.push(t.grx(f.fX[n]),t.gry(f.fY[n]),e(f.fZ[n])),(f.fX[n]<t.scale_xmin||f.fX[n]>t.scale_xmax||f.fY[n]<t.scale_ymin||f.fY[n]>t.scale_ymax)&&(g=!1)}m&&g&&u.addMainTriangle(...h),x&&g&&(u.addLineSegment(h[0],h[1],h[2],h[3],h[4],h[5]),u.addLineSegment(h[3],h[4],h[5],h[6],h[7],h[8]),u.addLineSegment(h[6],h[7],h[8],h[0],h[1],h[2]))}}u.callFuncs((X,a)=>{const h=Tt(this.getMainPainter(),a,null,100,100),g=l?this.getColor(f.fFillColor):s.calcColor(X,i.length),r=new H.MeshBasicMaterial(mt(g,{side:H.DoubleSide,vertexColors:!1})),n=new H.Mesh(h,r);t.add3DMesh(n,this),n.painter=this},(X,a)=>{const h=this.getColor(f.fLineColor),g=new H.LineBasicMaterial({color:new H.Color(h),linewidth:f.fLineWidth}),r=tt(Ct(this.getMainPainter(),a,100,100),g);t.add3DMesh(r,this)})}updateObject(t,f){if(!this.matchObjectType(t))return!1;const i=this.getOptions();if(f&&f!==i.original&&this.decodeOptions(f,t),Object.assign(this.getObject(),t),this.#t=void 0,this.#i=void 0,this.axes_draw){const s=this.getMainPainter();s?.updateObject(this.createHistogram(),i.Axis),this.#i=s}return!0}async redraw(){const t=xt(this.#i?.redraw());return this.#i=void 0,t.then(()=>this.drawGraph2D())}async drawContour(t,f,i){const s=this.buildDelaunay(i);if(!s)return this;const N=f.getContour(),e=f.getHistPalette(),o=N.getLevels(),l=t.getGrFuncs(),m=this.createG(!0);this.createAttLine({attr:i,nocolor:!0});for(let x=0;x<o.length;++x){const u=s.GetContourList(o[x]),X=N.getPaletteColor(e,o[x]);let a="";for(let h=0;h<u.length;++h){const g=u[h],r=[];for(let n=0;n<g.length;n+=2)r.push({grx:l.grx(g[n]),gry:l.gry(g[n+1])});a+=gt(r,{cmd:"M",line:!0})}this.lineatt.color=X,m.append("svg:path").attr("d",a).style("fill","none").call(this.lineatt.func)}return this}async drawGraph2D(){const t=this.getFramePainter(),f=this.getMainPainter(),i=this.getObject(),s=this.getOptions();if(!i||!f||!t)return this;if(s.Contour)return this.drawContour(t,f,i);if(!t.mode3d)return this;if(t.remove3DMeshes(this),!s.isAny()){if(f.draw_content)return this;i.fMarkerSize===1&&i.fMarkerStyle===1?s.Circles=!0:s.Markers=!0}const N=(h,g)=>{let r=0;for(let n=0;n<i.fNpoints;++n)i.fX[n]>=t.scale_xmin&&i.fX[n]<=t.scale_xmax&&i.fY[n]>=t.scale_ymin&&i.fY[n]<=t.scale_ymax&&i.fZ[n]>=h&&i.fZ[n]<g&&++r;return r};let e=1;if(pt.OptimizeDraw>0&&!t.webgl){const h=N(t.scale_zmin,t.scale_zmax),g=5e4;h>g&&(e=Math.max(2,Math.floor(h/g)))}const o=this.createAttMarker({attr:i,std:!1}),l=[];let m=null,x=[t.scale_zmin,t.scale_zmax],u=t.size_x3d/100*o.getFullSize();s.Circles&&(u=.06*t.size_x3d),t.usesvg&&(u*=.3);const X=t.getFrameWidth(),a=t.getFrameHeight();X>10&&a>10&&(u*=7*Math.max(t.size_x3d/X,t.size_z3d/a)),(s.Color||s.Triangles>=10)&&(x=f.getContourLevels(!0),m=f.getHistPalette()),s.Triangles&&this.drawTriangles(t,i,x,m);for(let h=0;h<x.length-1;++h){const g=Math.max(x[h],t.scale_zmin),r=Math.min(x[h+1],t.scale_zmax);if(g>=r)continue;const n=Math.floor(N(g,r)/e),w=new Int32Array(n),C=s.Markers||s.Circles?new Mt(n,t.webgl,u/3):null,Y=s.Error?new Float32Array(n*6*3):null,y=Y&&this.matchObjectType(V),c=s.Line?new Float32Array((n-1)*6):null;let _=0,k=0,M=0,P=0;for(let p=0;p<i.fNpoints;++p){if(i.fX[p]<t.scale_xmin||i.fX[p]>t.scale_xmax||i.fY[p]<t.scale_ymin||i.fY[p]>t.scale_ymax||i.fZ[p]<g||i.fZ[p]>=r||e>1&&(_=(_+1)%e,_))continue;w[k++]=p;const Z=t.grx(i.fX[p]),d=t.gry(i.fY[p]),F=t.grz(i.fZ[p]);C?.addPoint(Z,d,F),Y&&(Y[M]=t.grx(i.fX[p]-(y?i.fEXlow[p]:i.fEX[p])),Y[M+1]=d,Y[M+2]=F,Y[M+3]=t.grx(i.fX[p]+(y?i.fEXhigh[p]:i.fEX[p])),Y[M+4]=d,Y[M+5]=F,M+=6,Y[M]=Z,Y[M+1]=t.gry(i.fY[p]-(y?i.fEYlow[p]:i.fEY[p])),Y[M+2]=F,Y[M+3]=Z,Y[M+4]=t.gry(i.fY[p]+(y?i.fEYhigh[p]:i.fEY[p])),Y[M+5]=F,M+=6,Y[M]=Z,Y[M+1]=d,Y[M+2]=t.grz(i.fZ[p]-(y?i.fEZlow[p]:i.fEZ[p])),Y[M+3]=Z,Y[M+4]=d,Y[M+5]=t.grz(i.fZ[p]+(y?i.fEZhigh[p]:i.fEZ[p])),M+=6),c&&(P>=6&&(c[P]=c[P-3],c[P+1]=c[P-2],c[P+2]=c[P-1],P+=3),c[P]=Z,c[P+1]=d,c[P+2]=F,P+=3)}if(c&&P>3&&c.length===P){const p=this.getColor(i.fLineColor),Z=new H.LineBasicMaterial({color:new H.Color(p),linewidth:i.fLineWidth}),d=tt(c,Z);t.add3DMesh(d,this),d.graph=i,d.index=w,d.fp=t,d.scale0=.7*u,d.tip_name=this.getObjectHint(),d.tip_color=i.fMarkerColor===3?16711680:65280,d.nvertex=2,d.check_next=!0,d.tooltip=it}if(Y){const p=this.getColor(i.fLineColor),Z=new H.LineBasicMaterial({color:new H.Color(p),linewidth:i.fLineWidth}),d=tt(Y,Z);t.add3DMesh(d,this),d.graph=i,d.index=w,d.fp=t,d.scale0=.7*u,d.tip_name=this.getObjectHint(),d.tip_color=i.fMarkerColor===3?16711680:65280,d.nvertex=6,d.tooltip=it}if(C){let p="blue";(!s.Circles||s.Color)&&(p=m?.calcColor(h,x.length)??this.getColor(i.fMarkerColor));const Z=C.createPoints({color:p,fill:s.Circles?"white":void 0,style:s.Circles?4:i.fMarkerStyle}).then(d=>{d.graph=i,d.fp=t,d.tip_color=i.fMarkerColor===3?16711680:65280,d.scale0=.3*u,d.index=w,d.tip_name=this.getObjectHint(),d.tooltip=it,t.add3DMesh(d,this)});l.push(Z)}}return Promise.all(l).then(()=>{const h=this.getMainPainter();if(!(this.axes_draw||h?.draw_content===!1))return;const r=h?.findFunction(yt),n=this.getPadPainter()?.findPainterFor(r);if(n){if(n.Enabled=s.Zscale,s.Zscale)return n.drawPave();n.removeG()}}).then(()=>(t.render3D(100),this))}static async build3d(t,f){const i=new st(null,t);return i.decodeOptions(f,t),i.options.Contour?(console.error("Contour plot is not 3d"),null):nt.build3d(i.createHistogram(),i.options.Axis,!0).then(s=>{i.axes_draw=!0;const N=s.getFramePainter();return i.getFramePainter=()=>N,i.getMainPainter=()=>s,i.drawGraph2D().then(()=>N.create3DScene(-1,!0))})}static async draw(t,f,i){const s=new st(t,f);s.decodeOptions(i,f);let N=Promise.resolve(null);return s.getMainPainter()||(N=nt.draw(t,s.createHistogram(),s.options.Axis),s.axes_draw=!0),N.then(()=>(s.addToPadPrimitives(),s.drawGraph2D()))}}export{st as TGraph2DPainter};
1
+ import{a7 as ot,a3 as Nt,at as ct,au as V,ad as rt,ag as ut,av as dt,ah as Xt,ai as Yt,aw as H,ax as mt,an as tt,ay as xt,az as gt,aA as pt,aB as Mt,aC as yt}from"./ndmvr-aframe-core-DEHQ38JB.js";import{TH2Painter as nt}from"./TH2Painter-DceuYQAL.js";import{a as wt}from"./TH2Painter-BpixRP4j.js";import{c as Tt,a as Ct}from"./hist3d-D9VevdP6.js";import"./THistPainter-B2S5BnuY.js";import"./TPavePainter-1yngbgp8.js";import"./latex3d-8Hbnfz6c.js";function at(E){let t=E[0];for(let f=1;f<E.length;++f)t=Math.max(t,E[f]);return t}function lt(E){let t=E[0];for(let f=1;f<E.length;++f)t=Math.min(t,E[f]);return t}function _t(E,t,f){const i=new Array(E);for(let s=0;s<E;++s)i[s]={v:t[s],i:s};i.sort((s,N)=>s.v<N.v?-1:s.v>N.v?1:0);for(let s=0;s<E;++s)f[s]=i[s].i}class zt{constructor(t){this.fGraph2D=t,this.fX=t.fX,this.fY=t.fY,this.fZ=t.fZ,this.fNpoints=t.fNpoints,this.fZout=0,this.fNdt=0,this.fNhull=0,this.fHullPoints=null,this.fXN=null,this.fYN=null,this.fOrder=null,this.fDist=null,this.fPTried=null,this.fNTried=null,this.fMTried=null,this.fInit=!1,this.fXNmin=0,this.fXNmax=0,this.fYNmin=0,this.fYNmax=0,this.fXoffset=0,this.fYoffset=0,this.fXScaleFactor=0,this.fYScaleFactor=0,this.SetMaxIter()}Initialize(){this.fInit||(this.CreateTrianglesDataStructure(),this.FindHull(),this.fInit=!0)}ComputeZ(t,f){this.Initialize();const i=(t+this.fXoffset)*this.fXScaleFactor,s=(f+this.fYoffset)*this.fYScaleFactor;let N=this.Interpolate(i,s);return N===0&&(N=this.Interpolate(i+1e-4,s)),N}CreateTrianglesDataStructure(){const t=at(this.fGraph2D.fX),f=at(this.fGraph2D.fY),i=lt(this.fGraph2D.fX),s=lt(this.fGraph2D.fY);this.fXoffset=-(t+i)/2,this.fYoffset=-(f+s)/2,this.fXScaleFactor=1/(t-i),this.fYScaleFactor=1/(f-s),this.fXNmax=(t+this.fXoffset)*this.fXScaleFactor,this.fXNmin=(i+this.fXoffset)*this.fXScaleFactor,this.fYNmax=(f+this.fYoffset)*this.fYScaleFactor,this.fYNmin=(s+this.fYoffset)*this.fYScaleFactor,this.fXN=new Array(this.fNpoints+1),this.fYN=new Array(this.fNpoints+1);for(let N=0;N<this.fNpoints;N++)this.fXN[N+1]=(this.fX[N]+this.fXoffset)*this.fXScaleFactor,this.fYN[N+1]=(this.fY[N]+this.fYoffset)*this.fYScaleFactor;this.fPTried=[],this.fNTried=[],this.fMTried=[]}Enclose(t,f,i,s){const N=[this.fXN[t],this.fXN[f],this.fXN[i],this.fXN[t]],e=[this.fYN[t],this.fYN[f],this.fYN[i],this.fYN[t]],o=this.fXN[s],l=this.fYN[s];let m=0,x=N.length-1,u=!1;for(;m<N.length;++m)(e[m]<l&&e[x]>=l||e[x]<l&&e[m]>=l)&&N[m]+(l-e[m])/(e[x]-e[m])*(N[x]-N[m])<o&&(u=!u),x=m;return u}FileIt(t,f,i){let s,N=t,e=f,o=i;do s=!1,e>N&&([e,N]=[N,e],s=!0),o>e&&([o,e]=[e,o],s=!0);while(s);this.fNdt++,this.fPTried.push(N),this.fNTried.push(e),this.fMTried.push(o)}FindAllTriangles(){if(this.fAllTri)return;this.fAllTri=!0;let t,f,i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_,k=0,M=0,P,p,Z=0;const d=[!1,!1,!1],F=1e-4;for(this.Initialize(),t=0,f=0,p=1;p<=this.fNhull;p++)t+=this.fXN[this.fHullPoints[p-1]],f+=this.fYN[this.fHullPoints[p-1]];for(t=t/this.fNhull+F,f=f/this.fNhull+F,this.Interpolate(t,f),r=1;r<=this.fNdt;){for(w=this.fPTried[r-1],C=this.fNTried[r-1],Y=this.fMTried[r-1],d[0]=!1,d[1]=!1,d[2]=!1,n=1;n<=this.fNdt;n++)n!==r&&(y=this.fPTried[n-1],c=this.fNTried[n-1],_=this.fMTried[n-1],w===y&&C===c||w===y&&C===_||w===c&&C===_?d[0]=!0:w===y&&Y===c||w===y&&Y===_||w===c&&Y===_?d[1]=!0:(C===y&&Y===c||C===y&&Y===_||C===c&&Y===_)&&(d[2]=!0)),d[0]&&d[1]&&d[2];for(P=1;P<=3;P++)d[P-1]||(P===1?(k=w,M=C,Z=Y):P===2?(k=w,M=Y,Z=C):P===3&&(k=C,M=Y,Z=w),i=(this.fXN[k]+this.fXN[M])/2,s=(this.fYN[k]+this.fYN[M])/2,o=this.fXN[k]-this.fXN[M],l=this.fYN[k]-this.fYN[M],m=l,x=-o,h=Math.sqrt(m*m+x*x),m/=h,x/=h,u=this.fXN[Z]-i,X=this.fYN[Z]-s,a=u*m+X*x,a>0&&(m=-m,x=-x),g=Math.abs(Math.max(F*i,F*s)),N=i+m*g,e=s+x*g,this.Interpolate(N,e));r++}}FindHull(){this.fHullPoints||(this.fHullPoints=new Array(this.fNpoints));let t=0;for(let f=1;f<=this.fNpoints;f++)this.InHull(f,f)||(t++,this.fHullPoints[t-1]=f);this.fNhull=t}InHull(t,f){let i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_,k=!1;const M=this.fXN[t],P=this.fYN[t];for(this.fNhull>0?o=this.fNhull:o=this.fNpoints,i=1,s=2,i===f?(i=s,s++):s===f&&s++,u=M-this.fXN[i],h=P-this.fYN[i],X=M-this.fXN[s],g=P-this.fYN[s],y=Math.atan2(h,u),c=Math.atan2(g,X),_=y-c-Math.floor((y-c)/(Math.PI*2))*Math.PI*2,_<0&&(_+=Math.PI*2),l=_,N=1;N<=o;N++)if(this.fNhull>0?e=this.fHullPoints[N-1]:e=N,e!==i&&e!==s&&e!==f&&(u=M-this.fXN[i],h=P-this.fYN[i],X=M-this.fXN[s],g=P-this.fYN[s],a=M-this.fXN[e],r=P-this.fYN[e],m=X*h-u*g,x=u*g-X*h,m*x&&(n=(X*r-a*g)/m,w=(u*r-a*h)/x,n<0||w<0))){if(C=(u*a+h*r)/Math.sqrt(u*u+h*h),Y=(X*a+g*r)/Math.sqrt(X*X+g*g),C>Y?(i=e,y=Math.atan2(r,a),c=Math.atan2(g,X)):(s=e,y=Math.atan2(h,u),c=Math.atan2(r,a)),_=y-c-Math.floor((y-c)/(Math.PI*2))*Math.PI*2,_<0&&(_+=Math.PI*2),(_-Math.PI)*(l-Math.PI)<0)return k=!0,k;l=_}return k}InterpolateOnPlane(t,f,i,s){let N,e=t,o=f,l=i;do N=!1,o>e&&([e,o]=[o,e],N=!0),l>o&&([o,l]=[l,o],N=!0);while(N);const m=this.fXN[e],x=this.fXN[o],u=this.fXN[l],X=this.fYN[e],a=this.fYN[o],h=this.fYN[l],g=this.fZ[e-1],r=this.fZ[o-1],n=this.fZ[l-1],w=(g*(a-h)+r*(h-X)+n*(X-a))/(m*(a-h)+x*(h-X)+u*(X-a)),C=(g*(x-u)+r*(u-m)+n*(m-x))/(X*(x-u)+a*(u-m)+h*(m-x)),Y=g-w*m-C*X;return w*this.fXN[s]+C*this.fYN[s]+Y}Interpolate(t,f){let i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c,_=0,k=0,M=0,P=0,p=0,Z,d,F,I,L,A,b,O,G,q,v,D,S,z,T,R,W,K,U,J,Q,et,ft;const B=[0,0,0],$=[0,0,0];if(this.Initialize(),this.fOrder||(this.fOrder=new Array(this.fNpoints),this.fDist=new Array(this.fNpoints)),this.fXN[0]=t,this.fYN[0]=f,i=this.fZout,N=0,t>this.fXNmax||t<this.fXNmin||f>this.fYNmax||f<this.fYNmin)return i;for(s=1;s<=this.fNdt;s++)if(e=this.fPTried[s-1],o=this.fNTried[s-1],l=this.fMTried[s-1],this.Enclose(e,o,l,0))return i=this.InterpolateOnPlane(e,o,l,0),i;const ht=this.InHull(0,-1);if(!ht)return i;for(s=1;s<=this.fNpoints;s++)Z=this.fXN[s],d=this.fYN[s],this.fDist[s-1]=Math.sqrt((t-Z)*(t-Z)+(f-d)*(f-d));for(_t(this.fNpoints,this.fDist,this.fOrder),s=0;s<this.fNpoints;s++)this.fOrder[s]++;for(u=3;u<=this.fNpoints;u++)for(l=this.fOrder[u-1],x=2;x<=u-1;x++)for(o=this.fOrder[x-1],m=1;m<=x-1;m++){let j=!1;if(e=this.fOrder[m-1],N>this.fMaxIter)return i;if(N++,F=Math.sqrt((this.fXN[e]-this.fXN[o])**2+(this.fYN[e]-this.fYN[o])**2),I=Math.sqrt((this.fXN[e]-this.fXN[l])**2+(this.fYN[e]-this.fYN[l])**2),L=Math.sqrt((this.fXN[o]-this.fXN[l])**2+(this.fYN[o]-this.fYN[l])**2),!(F+I<=L||F+L<=I||I+L<=F)&&this.Enclose(e,o,l,0)){for(_=0,a=1;a<=this.fNpoints;a++)if(!(a===e||a===o||a===l)){for(X=1;X<=this.fNpoints;X++)if(this.fOrder[X-1]===a)if(X<m||X<x||X<u){if(this.Enclose(e,o,l,a)){j=!0;break}}else break;if(j)break;if((this.fXN[e]-this.fXN[a])*(this.fYN[e]-this.fYN[o])===(this.fYN[e]-this.fYN[a])*(this.fXN[e]-this.fXN[o])?(w=e,C=o):(this.fXN[e]-this.fXN[a])*(this.fYN[e]-this.fYN[l])===(this.fYN[e]-this.fYN[a])*(this.fXN[e]-this.fXN[l])?(w=e,C=l):(this.fXN[o]-this.fXN[a])*(this.fYN[o]-this.fYN[l])===(this.fYN[o]-this.fYN[a])*(this.fXN[o]-this.fXN[l])?(w=o,C=l):(w=0,C=0),w){if(this.fXN[w]!==this.fXN[C])if((this.fXN[a]-this.fXN[w])*(this.fXN[a]-this.fXN[C])<0){j=!0;break}else(this.fXN[a]-this.fXN[w])*(this.fXN[a]-this.fXN[C])===0&&console.warn(`Interpolate Two of these three points are coincident ${w} ${C} ${a}`);else if((this.fYN[a]-this.fYN[w])*(this.fYN[a]-this.fYN[C])<0){j=!0;break}else(this.fYN[a]-this.fYN[w])*(this.fYN[a]-this.fYN[C])===0&&console.warn(`Interpolate Two of these three points are coincident ${w} ${C} ${a}`);continue}if(j)break;for(h=l,r=e,n=o,B[0]=this.fXN[e]-this.fXN[a],$[0]=this.fYN[e]-this.fYN[a],B[1]=this.fXN[o]-this.fXN[a],$[1]=this.fYN[o]-this.fYN[a],B[2]=this.fXN[l]-this.fXN[a],$[2]=this.fYN[l]-this.fYN[a],X=1;X<=3;X++)if(R=B[X-1],W=B[X%3],K=B[(X+1)%3],U=$[X-1],J=$[X%3],Q=$[(X+1)%3],et=(Q*W-K*J)*(U*W-R*J),ft=(Q*R-K*U)*(J*R-W*U),et>=0&&ft>=0){X===1?(h=l,r=e,n=o):X===2?(h=e,r=o,n=l):(h=o,r=l,n=e);break}if(S=((this.fXN[h]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))/Math.sqrt(((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))*((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))),z=((this.fXN[n]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))/Math.sqrt(((this.fXN[n]-this.fXN[r])*(this.fXN[n]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[n]-this.fYN[r]))*((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r]))),T=((this.fXN[n]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))/Math.sqrt(((this.fXN[n]-this.fXN[r])*(this.fXN[n]-this.fXN[r])+(this.fYN[n]-this.fYN[r])*(this.fYN[n]-this.fYN[r]))*((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r]))),!(S>z||S>T))if(O=Math.sqrt((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[r])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[r])),G=Math.sqrt((this.fXN[a]-this.fXN[n])*(this.fXN[a]-this.fXN[n])+(this.fYN[a]-this.fYN[n])*(this.fYN[a]-this.fYN[n])),q=Math.sqrt((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[r])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[r])),v=Math.sqrt((this.fXN[h]-this.fXN[n])*(this.fXN[h]-this.fXN[n])+(this.fYN[h]-this.fYN[n])*(this.fYN[h]-this.fYN[n])),A=((this.fXN[a]-this.fXN[r])*(this.fXN[a]-this.fXN[n])+(this.fYN[a]-this.fYN[r])*(this.fYN[a]-this.fYN[n]))/O/G,b=((this.fXN[h]-this.fXN[r])*(this.fXN[h]-this.fXN[n])+(this.fYN[h]-this.fYN[r])*(this.fYN[h]-this.fYN[n]))/q/v,D=A*Math.sqrt(1-b*b)+b*Math.sqrt(1-A*A),D<-1e-6){j=!0;break}else Math.abs(D)<=1e-6&&(_++,k=a,M=h,P=r,p=n)}if(!j)return _>0?(g=k,h=M,r=P,n=p,this.fZ[r-1]+this.fZ[n-1]>this.fZ[g-1]+this.fZ[h-1]?(Y=e,y=o,c=l,this.FileIt(e,o,l),this.FileIt(g,r,n)):(Y=h,y=g,this.Enclose(h,g,r,0)?c=r:c=n,this.FileIt(h,g,r),this.FileIt(h,g,n))):(this.FileIt(e,o,l),Y=e,y=o,c=l),i=this.InterpolateOnPlane(Y,y,c,0),i}}return ht&&console.error(`Interpolate Point outside hull when expected inside: this point could be dodgy ${t} ${f} ${N}`),i}SetMaxIter(t=1e5){this.fAllTri=!1,this.fMaxIter=t}SetMarginBinsContent(t){this.fZout=t}GetContourList(t){if(!this.fNdt)return null;let f,i,s,N,e,o,l,m,x,u,X,a,h,g,r,n,w,C,Y,y,c=0,_,k,M,P;const p=[0,0,0],Z=new Array(this.fNdt).fill(0),d=new Array(this.fNdt).fill(0),F=new Array(this.fNdt).fill(0),I=new Array(this.fNdt).fill(0);for(w=0;w<this.fNdt;w++){if(p[0]=this.fPTried[w],p[1]=this.fNTried[w],p[2]=this.fMTried[w],e=p[0]-1,o=p[1]-1,l=p[2]-1,m=this.fX[e],g=this.fX[e],x=this.fY[e],r=this.fY[e],u=this.fZ[e],n=this.fZ[e],C=Y=y=0,this.fZ[o]<=u&&(u=this.fZ[o],m=this.fX[o],x=this.fY[o],C=1),this.fZ[o]>n&&(n=this.fZ[o],g=this.fX[o],r=this.fY[o],y=1),this.fZ[l]<=u&&(u=this.fZ[l],m=this.fX[l],x=this.fY[l],C=2),this.fZ[l]>n&&(n=this.fZ[l],g=this.fX[l],r=this.fY[l],y=2),C===0&&y===0)return console.error("GetContourList: wrong vertices ordering"),null;Y=3-y-C,X=this.fX[p[Y]-1],a=this.fY[p[Y]-1],h=this.fZ[p[Y]-1],t>=u&&t<=n&&(s=(t-u)/(n-u),_=s*(g-m)+m,k=s*(r-x)+x,t>=h&&t<=n?(i=(t-h)/(n-h),M=i*(g-X)+X,P=i*(r-a)+a):(N=(t-u)/(h-u),M=N*(X-m)+m,P=N*(a-x)+x),(_!==M||k!==P)&&(c++,Z[c-1]=_,d[c-1]=k,F[c-1]=M,I[c-1]=P))}const L=[],A=new Array(this.fNdt).fill(!1);let b=0,O=0,G=0,q=0,v,D,S,z,T;for(z=0;z<c;z++)if(!A[z]){for(D=S=!1,T=0;T<c;T++)z!==T&&(Z[z]===Z[T]&&d[z]===d[T]&&(D=!0),Z[z]===F[T]&&d[z]===I[T]&&(D=!0),F[z]===Z[T]&&I[z]===d[T]&&(S=!0),F[z]===F[T]&&I[z]===I[T]&&(S=!0));if(!D&&!S){f=[],f.push(Z[z],d[z]),f.push(F[z],I[z]),A[z]=!0,L.push(f);continue}if(!D||!S){for(f=[],D&&(b=Z[z],O=d[z],G=F[z],q=I[z]),S&&(b=F[z],O=I[z],G=Z[z],q=d[z]),f.push(G,q),A[z]=!0,T=0;;){for(v=!1;T<c&&A[T];)T++;if(b===Z[T]&&O===d[T]?(b=F[T],O=I[T],v=!0):b===F[T]&&O===I[T]&&(b=Z[T],O=d[T],v=!0),v)A[T]=!0,f.push(b,O),T=0;else if(++T>=c)break}L.push(f)}}for(z=0;z<c;z++)if(!A[z]){for(f=[],A[z]=!0,b=Z[z],O=d[z],T=0,f.push(b,O);;){for(;T<c&&A[T];)T++;if(v=!1,b===Z[T]&&O===d[T]?(b=F[T],O=I[T],v=!0):b===F[T]&&O===I[T]&&(b=Z[T],O=d[T],v=!0),v)A[T]=!0,f.push(b,O),T=0;else if(++T>=c)break}f.push(Z[z],d[z]),L.push(f)}return L}}function it(E){let t=Math.floor(E.index/this.nvertex);if(t<0||t>=this.index.length)return null;const f=l=>l*l;t=this.index[t];const i=this.fp,s=this.graph;let N=i.grx(s.fX[t]),e=i.gry(s.fY[t]),o=i.grz(s.fZ[t]);if(this.check_next&&t+1<s.fX.length){const l=E.point,m=i.grx(s.fX[t+1]),x=i.gry(s.fY[t+1]),u=i.grz(s.fZ[t+1]);f(l.x-m)+f(l.y-x)+f(l.z-u)<f(l.x-N)+f(l.y-e)+f(l.z-o)&&(N=m,e=x,o=u,t++)}return{x1:N-this.scale0,x2:N+this.scale0,y1:e-this.scale0,y2:e+this.scale0,z1:o-this.scale0,z2:o+this.scale0,color:this.tip_color,lines:[this.tip_name,"pnt: "+t,"x: "+i.axisAsText("x",s.fX[t]),"y: "+i.axisAsText("y",s.fY[t]),"z: "+i.axisAsText("z",s.fZ[t])]}}class st extends ot{#i;#t;decodeOptions(t){const f=new Nt(t),i=this.getObject();f.check("FILL_","color")&&i&&(i.fFillColor=f.color),f.check("LINE_","color")&&i&&(i.fLineColor=f.color),f.check("SAME");let s=0,N=0;f.check("CONT5")?N=15:f.check("TRI1")?s=11:f.check("TRI2")?s=10:f.check("TRIW")?s=1:f.check("TRI")&&(s=2);const e=this.setOptions({Triangles:s,Contour:N,Line:f.check("LINE"),Error:f.check("ERR")&&(this.matchObjectType(ct)||this.matchObjectType(V))});f.check("P0COL")?e.Color=e.Circles=e.Markers=!0:(e.Color=f.check("COL"),e.Circles=f.check("P0"),e.Markers=f.check("P")),e.Markers||(e.Color=!1),(e.Color||e.Triangles>=10||e.Contour)&&(e.Zscale=f.check("Z")),e.isAny=function(){return this.Markers||this.Error||this.Circles||this.Line||this.Triangles||e.Contour},e.Contour?e.Axis="":e.isAny()?(e.Axis="lego2",e.Zscale&&(e.Axis+="z")):e.Axis=t,this.storeDrawOpt(t)}createHistogram(){const t=this.getObject(),f=this.getOptions(),i=this.matchObjectType(V);let s=t.fX[0],N=s,e=t.fY[0],o=e,l=t.fZ[0],m=l;for(let c=0;c<t.fNpoints;++c){const _=t.fX[c],k=t.fY[c],M=t.fZ[c];f.Error?(s=Math.min(s,_-(i?t.fEXlow[c]:t.fEX[c])),N=Math.max(N,_+(i?t.fEXhigh[c]:t.fEX[c])),e=Math.min(e,k-(i?t.fEYlow[c]:t.fEY[c])),o=Math.max(o,k+(i?t.fEYhigh[c]:t.fEY[c])),l=Math.min(l,M-(i?t.fEZlow[c]:t.fEZ[c])),m=Math.max(m,M+(i?t.fEZhigh[c]:t.fEZ[c]))):(s=Math.min(s,_),N=Math.max(N,_),e=Math.min(e,k),o=Math.max(o,k),l=Math.min(l,M),m=Math.max(m,M))}function x(c,_,k){return c<_?k*(_-c):Math.abs(c)<1e5?.02:.02*Math.abs(c)}const u=x(s,N,t.fMargin),X=x(e,o,t.fMargin),a=x(l,m,0);let h=s-u,g=N+u,r=e-X,n=o+X,w=l-a,C=m+a;h<0&&s>=0&&(h=s*.98),g>0&&N<=0&&(g=0),r<0&&e>=0&&(r=e*.98),n>0&&o<=0&&(n=0),w<0&&l>=0&&(w=l*.98),C>0&&m<=0&&(C=0);const Y=this.getObject();Y.fMinimum!==rt&&(w=Y.fMinimum),Y.fMaximum!==rt&&(C=Y.fMaximum);const y=ut(dt,Y.fNpx,Y.fNpy);if(y.fName=Y.fName+"_h",Xt(y,Y.fTitle),y.fXaxis.fXmin=h,y.fXaxis.fXmax=g,y.fYaxis.fXmin=r,y.fYaxis.fXmax=n,y.fZaxis.fXmin=w,y.fZaxis.fXmax=C,y.fMinimum=w,y.fMaximum=C,y.fBits|=Yt,!f.isAny()){const c=this.buildDelaunay(Y);if(c)for(let _=0;_<Y.fNpx;++_){const k=h+(_+.5)/Y.fNpx*(g-h);for(let M=0;M<Y.fNpy;++M){const P=r+(M+.5)/Y.fNpy*(n-r),p=c.ComputeZ(k,P);y.fArray[y.getBin(_+1,M+1)]=p}}}return y}buildDelaunay(t){return this.#t||(this.#t=new zt(t),this.#t.FindAllTriangles(),this.#t.fNdt||(this.#t=void 0)),this.#t}drawTriangles(t,f,i,s){const N=this.buildDelaunay(f);if(!N)return;const e=t.logz?X=>X<t.scale_zmin?-.1:t.grz(X):t.grz,o=this.getOptions(),l=o.Triangles===2,m=o.Triangles>=10||l,x=o.Triangles%10===1||l&&f.fLineColor!==f.fFillColor,u=new wt(i,e,0,2*t.size_z3d,x);for(u.loop=0;u.loop<2;++u.loop){u.createBuffers();for(let X=0;X<N.fNdt;++X){const a=[N.fPTried[X],N.fNTried[X],N.fMTried[X]],h=[];let g=!0;for(let r=0;r<3;++r){const n=a[r]-1;h.push(t.grx(f.fX[n]),t.gry(f.fY[n]),e(f.fZ[n])),(f.fX[n]<t.scale_xmin||f.fX[n]>t.scale_xmax||f.fY[n]<t.scale_ymin||f.fY[n]>t.scale_ymax)&&(g=!1)}m&&g&&u.addMainTriangle(...h),x&&g&&(u.addLineSegment(h[0],h[1],h[2],h[3],h[4],h[5]),u.addLineSegment(h[3],h[4],h[5],h[6],h[7],h[8]),u.addLineSegment(h[6],h[7],h[8],h[0],h[1],h[2]))}}u.callFuncs((X,a)=>{const h=Tt(this.getMainPainter(),a,null,100,100),g=l?this.getColor(f.fFillColor):s.calcColor(X,i.length),r=new H.MeshBasicMaterial(mt(g,{side:H.DoubleSide,vertexColors:!1})),n=new H.Mesh(h,r);t.add3DMesh(n,this),n.painter=this},(X,a)=>{const h=this.getColor(f.fLineColor),g=new H.LineBasicMaterial({color:new H.Color(h),linewidth:f.fLineWidth}),r=tt(Ct(this.getMainPainter(),a,100,100),g);t.add3DMesh(r,this)})}updateObject(t,f){if(!this.matchObjectType(t))return!1;const i=this.getOptions();if(f&&f!==i.original&&this.decodeOptions(f,t),Object.assign(this.getObject(),t),this.#t=void 0,this.#i=void 0,this.axes_draw){const s=this.getMainPainter();s?.updateObject(this.createHistogram(),i.Axis),this.#i=s}return!0}async redraw(){const t=xt(this.#i?.redraw());return this.#i=void 0,t.then(()=>this.drawGraph2D())}async drawContour(t,f,i){const s=this.buildDelaunay(i);if(!s)return this;const N=f.getContour(),e=f.getHistPalette(),o=N.getLevels(),l=t.getGrFuncs(),m=this.createG(!0);this.createAttLine({attr:i,nocolor:!0});for(let x=0;x<o.length;++x){const u=s.GetContourList(o[x]),X=N.getPaletteColor(e,o[x]);let a="";for(let h=0;h<u.length;++h){const g=u[h],r=[];for(let n=0;n<g.length;n+=2)r.push({grx:l.grx(g[n]),gry:l.gry(g[n+1])});a+=gt(r,{cmd:"M",line:!0})}this.lineatt.color=X,m.append("svg:path").attr("d",a).style("fill","none").call(this.lineatt.func)}return this}async drawGraph2D(){const t=this.getFramePainter(),f=this.getMainPainter(),i=this.getObject(),s=this.getOptions();if(!i||!f||!t)return this;if(s.Contour)return this.drawContour(t,f,i);if(!t.mode3d)return this;if(t.remove3DMeshes(this),!s.isAny()){if(f.draw_content)return this;i.fMarkerSize===1&&i.fMarkerStyle===1?s.Circles=!0:s.Markers=!0}const N=(h,g)=>{let r=0;for(let n=0;n<i.fNpoints;++n)i.fX[n]>=t.scale_xmin&&i.fX[n]<=t.scale_xmax&&i.fY[n]>=t.scale_ymin&&i.fY[n]<=t.scale_ymax&&i.fZ[n]>=h&&i.fZ[n]<g&&++r;return r};let e=1;if(pt.OptimizeDraw>0&&!t.webgl){const h=N(t.scale_zmin,t.scale_zmax),g=5e4;h>g&&(e=Math.max(2,Math.floor(h/g)))}const o=this.createAttMarker({attr:i,std:!1}),l=[];let m=null,x=[t.scale_zmin,t.scale_zmax],u=t.size_x3d/100*o.getFullSize();s.Circles&&(u=.06*t.size_x3d),t.usesvg&&(u*=.3);const X=t.getFrameWidth(),a=t.getFrameHeight();X>10&&a>10&&(u*=7*Math.max(t.size_x3d/X,t.size_z3d/a)),(s.Color||s.Triangles>=10)&&(x=f.getContourLevels(!0),m=f.getHistPalette()),s.Triangles&&this.drawTriangles(t,i,x,m);for(let h=0;h<x.length-1;++h){const g=Math.max(x[h],t.scale_zmin),r=Math.min(x[h+1],t.scale_zmax);if(g>=r)continue;const n=Math.floor(N(g,r)/e),w=new Int32Array(n),C=s.Markers||s.Circles?new Mt(n,t.webgl,u/3):null,Y=s.Error?new Float32Array(n*6*3):null,y=Y&&this.matchObjectType(V),c=s.Line?new Float32Array((n-1)*6):null;let _=0,k=0,M=0,P=0;for(let p=0;p<i.fNpoints;++p){if(i.fX[p]<t.scale_xmin||i.fX[p]>t.scale_xmax||i.fY[p]<t.scale_ymin||i.fY[p]>t.scale_ymax||i.fZ[p]<g||i.fZ[p]>=r||e>1&&(_=(_+1)%e,_))continue;w[k++]=p;const Z=t.grx(i.fX[p]),d=t.gry(i.fY[p]),F=t.grz(i.fZ[p]);C?.addPoint(Z,d,F),Y&&(Y[M]=t.grx(i.fX[p]-(y?i.fEXlow[p]:i.fEX[p])),Y[M+1]=d,Y[M+2]=F,Y[M+3]=t.grx(i.fX[p]+(y?i.fEXhigh[p]:i.fEX[p])),Y[M+4]=d,Y[M+5]=F,M+=6,Y[M]=Z,Y[M+1]=t.gry(i.fY[p]-(y?i.fEYlow[p]:i.fEY[p])),Y[M+2]=F,Y[M+3]=Z,Y[M+4]=t.gry(i.fY[p]+(y?i.fEYhigh[p]:i.fEY[p])),Y[M+5]=F,M+=6,Y[M]=Z,Y[M+1]=d,Y[M+2]=t.grz(i.fZ[p]-(y?i.fEZlow[p]:i.fEZ[p])),Y[M+3]=Z,Y[M+4]=d,Y[M+5]=t.grz(i.fZ[p]+(y?i.fEZhigh[p]:i.fEZ[p])),M+=6),c&&(P>=6&&(c[P]=c[P-3],c[P+1]=c[P-2],c[P+2]=c[P-1],P+=3),c[P]=Z,c[P+1]=d,c[P+2]=F,P+=3)}if(c&&P>3&&c.length===P){const p=this.getColor(i.fLineColor),Z=new H.LineBasicMaterial({color:new H.Color(p),linewidth:i.fLineWidth}),d=tt(c,Z);t.add3DMesh(d,this),d.graph=i,d.index=w,d.fp=t,d.scale0=.7*u,d.tip_name=this.getObjectHint(),d.tip_color=i.fMarkerColor===3?16711680:65280,d.nvertex=2,d.check_next=!0,d.tooltip=it}if(Y){const p=this.getColor(i.fLineColor),Z=new H.LineBasicMaterial({color:new H.Color(p),linewidth:i.fLineWidth}),d=tt(Y,Z);t.add3DMesh(d,this),d.graph=i,d.index=w,d.fp=t,d.scale0=.7*u,d.tip_name=this.getObjectHint(),d.tip_color=i.fMarkerColor===3?16711680:65280,d.nvertex=6,d.tooltip=it}if(C){let p="blue";(!s.Circles||s.Color)&&(p=m?.calcColor(h,x.length)??this.getColor(i.fMarkerColor));const Z=C.createPoints({color:p,fill:s.Circles?"white":void 0,style:s.Circles?4:i.fMarkerStyle}).then(d=>{d.graph=i,d.fp=t,d.tip_color=i.fMarkerColor===3?16711680:65280,d.scale0=.3*u,d.index=w,d.tip_name=this.getObjectHint(),d.tooltip=it,t.add3DMesh(d,this)});l.push(Z)}}return Promise.all(l).then(()=>{const h=this.getMainPainter();if(!(this.axes_draw||h?.draw_content===!1))return;const r=h?.findFunction(yt),n=this.getPadPainter()?.findPainterFor(r);if(n){if(n.Enabled=s.Zscale,s.Zscale)return n.drawPave();n.removeG()}}).then(()=>(t.render3D(100),this))}static async build3d(t,f){const i=new st(null,t);return i.decodeOptions(f,t),i.options.Contour?(console.error("Contour plot is not 3d"),null):nt.build3d(i.createHistogram(),i.options.Axis,!0).then(s=>{i.axes_draw=!0;const N=s.getFramePainter();return i.getFramePainter=()=>N,i.getMainPainter=()=>s,i.drawGraph2D().then(()=>N.create3DScene(-1,!0))})}static async draw(t,f,i){const s=new st(t,f);s.decodeOptions(i,f);let N=Promise.resolve(null);return s.getMainPainter()||(N=nt.draw(t,s.createHistogram(),s.options.Axis),s.axes_draw=!0),N.then(()=>(s.addToPadPrimitives(),s.drawGraph2D()))}}export{st as TGraph2DPainter};
@@ -1 +1 @@
1
- import{a7 as V,aK as J,a3 as A,bS as tt,ag as H,ai as N,ad as F,ah as q,aA as v,a5 as X,bL as S,aX as z,aT as R,a2 as K,b$ as D,s as I,aN as et,az as w,$ as W,ae as T,bY as C,c0 as it,a1 as rt,a0 as st,ba as Y,bT as Z,ak as at,aj as nt,aH as ht}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{F as j}from"./THistPainter-Df-RmCQH.js";import{P as lt,T as ft}from"./TH1Painter--tuoUZTH.js";import"./TPavePainter-Dx40jhkF.js";import"./func-C1jNXIub.js";const G=K(18),O="TGraphErrors",Q="TGraphAsymmErrors",U="TGraphBentErrors",B="TGraphMultiErrors";let mt=class L extends V{#t;#u;#p;#f;#s;#c;#x;#o;#g;#y;#r;#n;#i;#a;#_;#M;#h;#l;#m;#d;#e;constructor(t,e){super(t,e),this.axes_draw=!1,this.xmin=this.ymin=this.xmax=this.ymax=0,this.#d=e._typename===U,this.#m=e._typename===O||e._typename===B||e._typename===Q||this.#d||e._typename.match(/^RooHist/),this.#e=""}get _wheel_zoomy(){return!0}getGraph(){return this.getObject()}getHistogram(){return this.getObject()?.fHistogram}isDummyHistogram(t){const e=this.getHistogram();if(!e)return!0;let i=!1;return t!=="y"&&(i||=e.fXaxis.fXmin!==.0011||e.fXaxis.fXmax!==1.1),t!=="x"&&(i||=e.fYaxis.fXmin!==.0011||e.fYaxis.fXmax!==1.1||e.fMinimum!==.0011||e.fMaximum!==1.1),!i}setHistogram(t){const e=this.getObject();e&&(e.fHistogram=t)}isScatter(){return!1}async redraw(){let t=Promise.resolve(!0);if(this.#f){this.#f=void 0;const e=this.getMainPainter();e?.isSecondary(this)&&this.axes_draw&&(t=e.redraw())}return t.then(()=>this.drawGraph()).then(()=>{const e=this.#c?.drawNext(0)??this;return this.#c=void 0,e})}cleanup(){this.#t=void 0,this.#y=void 0,super.cleanup()}get_gme(){const t=this.getGraph();return t?._typename===B?t:null}decodeOptions(t,e){J(t)&&t.indexOf("same ")===0&&(t=t.slice(5));const i=this.getGraph(),n=!!this.get_gme(),h=e?!!this.getMainPainter():!this.axes_draw;function s(f,c){Object.assign(c,{Line:0,Curve:0,Rect:0,Mark:0,Bar:0,OutRange:0,EF:0,Fill:0,MainError:1,Ends:1,ScaleErrX:1}),n&&f.check("S=",!0)&&(c.ScaleErrX=f.partAsFloat()),f.check("L")&&(c.Line=1),f.check("F")&&(c.Fill=1),f.check("CC")&&(c.Curve=2),f.check("C")&&(c.Curve=1),f.check("*")&&(c.Mark=103),f.check("P0")&&(c.Mark=104),f.check("P")&&(c.Mark=1),f.check("B")&&(c.Bar=1,c.Errors=0),f.check("Z")&&(c.Errors=1,c.Ends=0),f.check("||")&&(c.Errors=1,c.MainError=0,c.Ends=1),f.check("[]")&&(c.Errors=1,c.MainError=0,c.Ends=2),f.check("|>")&&(c.Errors=1,c.Ends=3),f.check(">")&&(c.Errors=1,c.Ends=4),f.check("0")&&(c.Mark=1,c.Errors=1,c.OutRange=1),f.check("1")&&c.Bar===1&&(c.Bar=2),f.check("2")&&(c.Rect=1,c.Errors=0),f.check("3")&&(c.EF=1,c.Errors=0),f.check("4")&&(c.EF=2,c.Errors=0),f.check("5")&&(c.Rect=2,c.Errors=0),f.check("X")&&(c.Errors=0)}const a=this.setOptions({Axis:"",NoOpt:0,PadStats:!1,PadPalette:!1,original:t,second_x:!1,second_y:!1,individual_styles:!1});let x=[];n&&t&&(t.indexOf(";")>0?(x=t.split(";"),t=x.shift()):t.indexOf("_")>0&&(x=t.split("_"),t=x.shift()));let l=new A(t),p="";if(lt.forEach(f=>{l.check(f)&&(p+=";"+f)}),l.check("XAXIS_",!0)&&(p+=";XAXIS_"+l.part),l.check("YAXIS_",!0)&&(p+=";YAXIS_"+l.part),l.empty()&&(a.original=h?"lp":"alp",l=new A(a.original)),l.check("FILL_","color")&&(a.graphFillColor=l.color,a.graphFillPattern=1001),l.check("FILLPAT_",!0)&&(a.graphFillPattern=l.partAsInt()),l.check("LINE_","color")&&(a.graphLineColor=this.getColor(l.color)),l.check("WIDTH_",!0)&&(a.graphLineWidth=l.partAsInt()),l.check("NOOPT")&&(a.NoOpt=1),l.check("POS3D_",!0)&&(a.pos3d=l.partAsInt()-.5),l.check("PFC")&&!a._pfc&&(a._pfc=2),l.check("PLC")&&!a._plc&&(a._plc=2),l.check("PMC")&&!a._pmc&&(a._pmc=2),l.check("A")&&(a.Axis=l.check("I")?"A;":" "),l.check("X+")&&(a.Axis+="X+",a.second_x=h),l.check("Y+")&&(a.Axis+="Y+",a.second_y=h),l.check("RX")&&(a.Axis+="RX"),l.check("RY")&&(a.Axis+="RY"),n&&(a.blocks=[],a.skip_errors_x0=a.skip_errors_y0=!1,l.check("X0")&&(a.skip_errors_x0=!0),l.check("Y0")&&(a.skip_errors_y0=!0)),s(l,a),n&&l.check("S")&&(a.individual_styles=!0),a.Errors===void 0&&(a.Errors=this.#m&&(!n||!x.length)?1:0),a.Mark===1&&i.fMarkerStyle===1&&(a.Mark=101),a.Line+a.Fill+a.Curve+a.Mark+a.Bar+a.EF+a.Rect+a.Errors===0&&l.empty()&&(a.Line=1),this.matchObjectType(O)){const f=i.fEX.length;let c=0;for(let m=0;m<f;++m)c=Math.max(c,i.fEX[m],i.fEY[m]);c<1e-100&&(a.Errors=0)}if(this.#o=this.matchObjectType(tt),this.#g=this.#o&&i.fNpoints>3&&i.fX[0]===i.fX[i.fNpoints-1]&&i.fY[0]===i.fY[i.fNpoints-1],!a.Axis){const f=this.getPadPainter()?.getRootPad(!0);(!f||f?.fPrimitives?.arr[0]===this.getObject())&&(a.Axis=" ")}a.Axis+=p;for(let f=0;f<x.length;++f){const c=new A(x[f]),m={};s(c,m),m.skip_errors_x0=a.skip_errors_x0,m.skip_errors_y0=a.skip_errors_y0,a.blocks.push(m)}}_getBins(){return this.#t}createBins(){const t=this.getGraph(),e=this.getOptions();if(!t)return;let i=0,n=t.fNpoints;this.#o&&this.#g&&n--,t._typename===O?i=1:t._typename===B?i=2:(t._typename===Q||t._typename===U||t._typename.match(/^RooHist/))&&(i=3),this.#t=new Array(n);for(let h=0;h<n;++h){const s=this.#t[h]={x:t.fX[h],y:t.fY[h],indx:h};switch(i){case 1:s.exlow=s.exhigh=t.fEX[h],s.eylow=s.eyhigh=t.fEY[h];break;case 2:s.exlow=t.fExL[h],s.exhigh=t.fExH[h],s.eylow=t.fEyL[0][h],s.eyhigh=t.fEyH[0][h];break;case 3:s.exlow=t.fEXlow[h],s.exhigh=t.fEXhigh[h],s.eylow=t.fEYlow[h],s.eyhigh=t.fEYhigh[h];break}h===0&&(this.xmin=this.xmax=s.x,this.ymin=this.ymax=s.y),i>0?(this.xmin=Math.min(this.xmin,s.x-s.exlow,s.x+s.exhigh),this.xmax=Math.max(this.xmax,s.x-s.exlow,s.x+s.exhigh),this.ymin=Math.min(this.ymin,s.y-s.eylow,s.y+s.eyhigh),this.ymax=Math.max(this.ymax,s.y-s.eylow,s.y+s.eyhigh)):(this.xmin=Math.min(this.xmin,s.x),this.xmax=Math.max(this.xmax,s.x),this.ymin=Math.min(this.ymin,s.y),this.ymax=Math.max(this.ymax,s.y))}this.#x=!0,this.xmin===0&&this.ymin===0&&n>0&&this.#t[0].x===0&&this.#t[0].y===0&&e.Mark&&!e.Line&&!e.Curve&&!e.Fill&&(this.#x="upper_layer")}getHistRangeMargin(){return .1}createHistogram(t=!0,e=!0){const i=this.getGraph(),n=this.xmin,h=this.getHistRangeMargin();let s=this.xmax,a=this.ymin,x=this.ymax;n>=s&&(s=n+1),a>=x&&(x=a+1);const l=(s-n)*h,p=(x-a)*h;let f=n-l,c=s+l,m=a-p,r=x+p;a>0&&m<=0&&(m=(1-h)*a),x<0&&r>=0&&(r=(1-h)*x);const d=m,y=r;let o=this.getHistogram();if(!this.isScatter()&&!o?.fXaxis.fTimeDisplay){const _=this.getPadPainter()?.getPadLog("x");f<0&&n>=0&&(f=_?n*(1-h):0),c>0&&s<=0&&(c=_?(1+h)*s:0)}return o?o.fMaximum!==F&&o.fMinimum!==F&&!this.isDummyHistogram("y")&&(m=o.fMinimum,r=o.fMaximum):(o=this.isScatter()?H(at,30,30):H(nt,100),o.fName=i.fName+"_h",o.fBits|=N,this.#y=!0,this.setHistogram(o)),i.fMinimum!==F&&(m=a=i.fMinimum),i.fMaximum!==F&&(r=i.fMaximum),m<0&&a>=0&&(m=(1-h)*a),x<0&&r>=0&&(r=(1-h)*x),q(o,this.getObject().fTitle),t&&!o.fXaxis.fLabels&&(o.fXaxis.fXmin=f,o.fXaxis.fXmax=c),e&&!o.fYaxis.fLabels&&(o.fYaxis.fXmin=Math.min(d,m),o.fYaxis.fXmax=Math.max(y,r),this.isScatter()||(o.fMinimum=m,o.fMaximum=r)),o.$xmin_nz=n>0?n:void 0,o.$ymin_nz=a>0?a:void 0,o}unzoomUserRange(t,e){const i=this.getGraph();if(this.#y||!i)return!1;const n=this.getHistogram();return t=t&&n&&(n.fXaxis.fXmin>this.xmin||n.fXaxis.fXmax<this.xmax),e=e&&n&&(n.fYaxis.fXmin>this.ymin||n.fYaxis.fXmax<this.ymax),!t&&!e?!1:(this.createHistogram(t,e),this.getMainPainter()?.extractAxesProperties(1),!0)}canOptimize(){return v.OptimizeDraw>0&&!this.getOptions().NoOpt}optimizeBins(t,e){if(this.#t.length<30&&!e)return this.#t;let i=null;if(X(e))for(let s=0;s<this.#t.length;++s)e(this.#t[s],s)?i||(i=s===0?[]:this.#t.slice(0,s)):i&&i.push(this.#t[s]);if(i||(i=this.#t),t||(t=5e5),i.length<t||!this.canOptimize())return i;const n=[],h=Math.max(2,Math.floor(i.length/t));for(let s=0;s<i.length;s+=h)n.push(i[s]);return n}needDrawFunc(t,e){return e._typename===S?e.fName!=="stats"||!t.TestBit(N):e._typename===z||e._typename===R?!e.TestBit(K(9)):!0}getTooltips(t){const e=this.get_fp(),i=[],n=this.getOptions(),h=e.getGrFuncs(n.second_x,n.second_y),s=this.get_gme();if(i.push(this.getObjectHint()),t&&h)if(t.indx!==void 0&&i.push("p = "+t.indx),i.push("x = "+h.axisAsText("x",t.x),"y = "+h.axisAsText("y",t.y)),s?i.push("error x = -"+h.axisAsText("x",s.fExL[t.indx])+"/+"+h.axisAsText("x",s.fExH[t.indx])):n.Errors&&h.x_handle.kind===D&&(t.exlow||t.exhigh)&&i.push("error x = -"+h.axisAsText("x",t.exlow)+"/+"+h.axisAsText("x",t.exhigh)),s)for(let a=0;a<s.fNYErrors;++a)i.push(`error y${a} = -${h.axisAsText("y",s.fEyL[a][t.indx])}/+${h.axisAsText("y",s.fEyH[a][t.indx])}`);else(n.Errors||n.EF>0)&&h.y_handle.kind===D&&(t.eylow||t.eyhigh)&&i.push("error y = -"+h.axisAsText("y",t.eylow)+"/+"+h.axisAsText("y",t.eyhigh));return i}get_fp(){let t=this.getFramePainter();if(t?.grx&&t?.gry)return t;const e=this.getPadPainter(),i=e?.getPadRect()||{width:800,height:600};return t={pad_layer:!0,pad:e?.getRootPad(!0)??I(et),pw:i.width,ph:i.height,fX1NDC:.1,fX2NDC:.9,fY1NDC:.1,fY2NDC:.9,getFrameWidth(){return this.pw},getFrameHeight(){return this.ph},grx(n){return this.pad.fLogx?n=n>0?Math.log10(n):this.pad.fUxmin:n=(n-this.pad.fX1)/(this.pad.fX2-this.pad.fX1),n*this.pw},gry(n){return this.pad.fLogv??this.pad.fLogy?n=n>0?Math.log10(n):this.pad.fUymin:n=(n-this.pad.fY1)/(this.pad.fY2-this.pad.fY1),(1-n)*this.ph},revertAxis(n,h){return n==="x"?h/this.pw*(this.pad.fX2-this.pad.fX1)+this.pad.fX1:n==="y"?(1-h/this.ph)*(this.pad.fY2-this.pad.fY1)+this.pad.fY1:h},getGrFuncs(){return this}},t}appendExclusion(t,e,i,n){const h=[];for(let a=i.length-1;a>=0;--a){const x=i[a],l=Math.sqrt(x.dgrx**2+x.dgry**2);l>1e-10&&(x.grx+=n*x.dgry/l,x.gry-=n*x.dgrx/l),h.push(x)}const s=w(h,{cmd:"L",line:!t});this.appendPath(e+s+"Z").call(this.fillatt.func).style("opacity",.75)}drawBins(t,e,i,n,h,s,a,x){const l=this.getGraph();if(!l?.fNpoints)return;let p=0,f=null;const c=!this.isBatchMode()&&(e.Line||e.Errors)?"none":null;if(x&&s.excl_side&&(p=s.excl_width,s.width>0&&!e.Line&&!e.Curve&&(e.Line=1)),e.EF){f=this.optimizeBins(e.EF>1?2e4:0);for(let _=0;_<f.length;++_){const u=f[_];u.grx=t.grx(u.x),u.gry=t.gry(u.y-u.eylow)}const r=w(f,{line:e.EF<2,qubic:!0}),d=[];for(let _=f.length-1;_>=0;--_){const u=f[_];u.gry=t.gry(u.y+u.eyhigh),d.push(u)}const y=w(d,{line:e.EF<2,cmd:"L",qubic:!0}),o=i.append("svg:path").attr("d",r+y+"Z").call(a.func);a.empty()&&a.colorindx&&o.style("stroke",this.getColor(a.colorindx)),x&&(this.#e="lines")}if(e.Line||e.Fill){let r="";this.#o&&(r="Z",e.original||(e.Fill=1)),e.Fill&&(r="Z",p=0),f||(f=this.optimizeBins(0));for(let o=0;o<f.length;++o){const _=f[o];_.grx=t.grx(_.x),_.gry=t.gry(_.y)}const d=w(f,{line:!0,calc:p});p&&this.appendExclusion(!1,d,f,p);const y=i.append("svg:path").attr("d",d+r).style("pointer-events",c);e.Line&&y.call(s.func),e.Fill?y.call(a.func):y.style("fill","none"),x&&(this.#e="lines")}if(e.Curve){let r=f;if(this.#e!=="lines"||!r||e.Curve===1&&r.length>2e4){r=this.optimizeBins(e.Curve===1?2e4:0);for(let y=0;y<r.length;++y){const o=r[y];o.grx=t.grx(o.x),o.gry=t.gry(o.y)}}const d=w(r,{qubic:!p});p&&this.appendExclusion(!0,d,r,p),i.append("svg:path").attr("d",d).call(s.func).style("fill","none").style("pointer-events",c),x&&(this.#e="lines")}let m=null;if((e.Errors||e.Rect||e.Bar)&&(f=this.optimizeBins(5e3,(r,d)=>{const y=t.grx(r.x);if(!e.Bar&&(y<0||y>n))return!0;const o=t.gry(r.y);return!e.Bar&&!e.OutRange&&(o<0||o>h)?!0:(r.grx1=Math.round(y),r.gry1=Math.round(o),this.#m&&(r.grx0=Math.round(t.grx(r.x-e.ScaleErrX*r.exlow)-y),r.grx2=Math.round(t.grx(r.x+e.ScaleErrX*r.exhigh)-y),r.gry0=Math.round(t.gry(r.y-r.eylow)-o),r.gry2=Math.round(t.gry(r.y+r.eyhigh)-o),this.#d?(r.grdx0=Math.round(t.gry(r.y+l.fEXlowd[d])-o),r.grdx2=Math.round(t.gry(r.y+l.fEXhighd[d])-o),r.grdy0=Math.round(t.grx(r.x+l.fEYlowd[d])-y),r.grdy2=Math.round(t.grx(r.x+l.fEYhighd[d])-y)):r.grdx0=r.grdx2=r.grdy0=r.grdy2=0),!1)}),x&&(this.#e="nodes"),m=i.selectAll(".grpoint").data(f).enter().append("svg:g").attr("class","grpoint").attr("transform",r=>W(r.grx1,r.gry1))),e.Bar){let r=0,d=0;for(let g=0;g<f.length;++g)g===0?r=d=f[g].grx1:(r=Math.min(r,f[g].grx1),d=Math.max(d,f[g].grx1));const y=f.length<2?n/4:(d-r)/f.length,o=y*T.fBarWidth,_=y*T.fBarOffset,u=Math.round(t.gry(0));let k=a;if(x){const g=this.getFramePainter(),b=g?.fillatt?.empty()?-1:g.fillatt.getFillColor();b===a.getFillColor()&&(k=this.createAttFill({color:b==="white"?C:it,pattern:1001,std:!1}))}m.append("svg:path").attr("d",g=>{g.bar=!0;const b=o>1?Math.round(_-o/2):0,$=o>1?Math.round(o):1,M=e.Bar!==1?0:g.gry1>u?u-g.gry1:0,E=e.Bar!==1?h>g.gry1?h-g.gry1:0:Math.abs(u-g.gry1);return`M${b},${M}h${$}v${E}h${-$}z`}).call(k.func),this.#u=o,this.#p=_}if(e.Rect&&m.filter(r=>r.exlow>0&&r.exhigh>0&&r.eylow>0&&r.eyhigh>0).append("svg:path").attr("d",r=>(r.rect=!0,`M${r.grx0},${r.gry0}H${r.grx2}V${r.gry2}H${r.grx0}Z`)).call(a.func).call(e.Rect===2?s.func:()=>{}),this.error_size=0,e.Errors){let r=s.width+T.fEndErrorSize;const d=e.Ends?`m0,${r}v${-2*r}`:"",y=e.Ends?`m${r},0h${-2*r}`:"";let o=d,_=d,u=y,k=y,g;const b=(M,E)=>{if(!e.MainError)return`M${M},${E}`;const P="M0,0";return M?P+(E?`L${M},${E}`:`H${M}`):E?P+`V${E}`:P};switch(e.Ends){case 2:g=Math.max(s.width+1,Math.round(r*.66)),o=`m${g},${r}h${-g}v${-2*r}h${g}`,_=`m${-g},${r}h${g}v${-2*r}h${-g}`,u=`m${-r},${g}v${-g}h${2*r}v${g}`,k=`m${-r},${-g}v${g}h${2*r}v${-g}`;break;case 3:r=Math.max(r,Math.round(l.fMarkerSize*8*.66)),g=Math.max(s.width+1,Math.round(r*.66)),o=`l${g},${r}v${-2*r}l${-g},${r}`,_=`l${-g},${r}v${-2*r}l${g},${r}`,u=`l${-r},${g}h${2*r}l${-r},${-g}`,k=`l${-r},${-g}h${2*r}l${-r},${g}`;break;case 4:r=Math.max(r,Math.round(l.fMarkerSize*8*.66)),g=Math.max(s.width+1,Math.round(r*.66)),o=`l${g},${r}m0,${-2*r}l${-g},${r}`,_=`l${-g},${r}m0,${-2*r}l${g},${r}`,u=`l${-r},${g}m${2*r},0l${-r},${-g}`,k=`l${-r},${-g}m${2*r},0l${-r},${g}`;break}this.error_size=r,r=Math.floor((s.width-1)/2);let $=m.filter(M=>M.exlow>0||M.exhigh>0||M.eylow>0||M.eyhigh>0);(e.skip_errors_x0||e.skip_errors_y0)&&($=$.filter(M=>(M.x||!e.skip_errors_x0)&&(M.y||!e.skip_errors_y0))),!this.isBatchMode()&&v.Tooltip&&x&&$.append("svg:path").attr("d",M=>`M${M.grx0},${M.gry0}h${M.grx2-M.grx0}v${M.gry2-M.gry0}h${M.grx0-M.grx2}z`).style("fill","none").style("pointer-events","visibleFill"),$.append("svg:path").attr("d",M=>(M.error=!0,(M.exlow>0?b(M.grx0+r,M.grdx0)+o:"")+(M.exhigh>0?b(M.grx2-r,M.grdx2)+_:"")+(M.eylow>0?b(M.grdy0,M.gry0-r)+k:"")+(M.eyhigh>0?b(M.grdy2,M.gry2+r)+u:""))).style("fill","none").call(s.func)}if(e.Mark){this.createAttMarker({attr:l,style:e.Mark-100}),this.#r=this.markeratt.getFullSize(),this.markeratt.resetPos();const r=!this.isBatchMode()&&v.Tooltip&&(!this.markeratt.fill||this.#r<7)&&!m&&x,d=Math.max(5,Math.round(this.#r*.7)),y=1e6/(this.markeratt.getMarkerLength()+7);let o="",_,u,k,g="",b=1;f?this.canOptimize()&&f.length>1.5*y&&(b=Math.min(2,Math.round(f.length/y))):f=this.optimizeBins(y);for(let $=0;$<f.length;$+=b)_=f[$],u=t.grx(_.x),u>-this.#r&&u<n+this.#r&&(k=t.gry(_.y),k>-this.#r&&k<h+this.#r&&(o+=this.markeratt.create(u,k),r&&(g+=`M${u-d},${k-d}h${2*d}v${2*d}h${-2*d}z`)));o&&(i.append("svg:path").attr("d",o).call(this.markeratt.func),m===null&&this.#e==="none"&&x&&(this.#e=e.Mark===101?"path":"mark")),r&&g&&i.append("svg:path").attr("d",g).style("fill","none").style("pointer-events","visibleFill")}}appendQQ(t,e){const i=Math.max(t.scale_xmin,e.fXq1),n=Math.min(t.scale_xmax,e.fXq2),h=Math.max(t.scale_ymin,e.fYq1),s=Math.min(t.scale_ymax,e.fYq2),a=(m,r,d,y)=>`M${t.grx(m)},${t.gry(r)}L${t.grx(d)},${t.gry(y)}`,x=(e.fYq2-e.fYq1)*(t.scale_xmin-e.fXq1)/(e.fXq2-e.fXq1)+e.fYq1,l=(e.fYq2-e.fYq1)*(t.scale_xmax-e.fXq1)/(e.fXq2-e.fXq1)+e.fYq1;let p;if(x<t.scale_ymin){const m=(e.fXq2-e.fXq1)*(t.scale_ymin-e.fYq1)/(e.fYq2-e.fYq1)+e.fXq1;p=a(m,t.scale_ymin,i,h)}else p=a(t.scale_xmin,x,i,h);if(l>t.scale_ymax){const m=(e.fXq2-e.fXq1)*(t.scale_ymax-e.fYq1)/(e.fYq2-e.fYq1)+e.fXq1;p+=a(n,s,m,t.scale_ymax)}else p+=a(n,s,t.scale_xmax,l);const f=this.createAttLine({style:1,width:1,color:C,std:!1}),c=this.createAttLine({style:2,width:1,color:C,std:!1});this.appendPath(a(i,h,n,s)).call(f.func).style("fill","none"),this.appendPath(p).call(c.func).style("fill","none")}drawBins3D(){console.log("Load ./hist/TGraphPainter.mjs to draw graph in 3D")}createGraphDrawAttributes(t){const e=this.getGraph(),i=this.getOptions();if(i._pfc>1||i._plc>1||i._pmc>1){const n=this.getPadPainter();if(X(n?.getAutoColor)){const h=n.getAutoColor(e.$num_graphs);this.#s="",i._pfc>1&&(i._pfc=1,e.fFillColor=h,this.#s+=`SetFillColor(${h});;`,this.deleteAttr("fill")),i._plc>1&&(i._plc=1,e.fLineColor=h,this.#s+=`SetLineColor(${h});;`,this.deleteAttr("line")),i._pmc>1&&(i._pmc=1,e.fMarkerColor=h,this.#s+=`SetMarkerColor(${h});;`,this.deleteAttr("marker"))}}t?this.deleteAttr():(this.createAttLine({attr:e,can_excl:!0,color0:i.graphLineColor,width:i.graphLineWidth}),this.createAttFill({attr:e,color:i.graphFillColor,pattern:i.graphFillPattern}))}drawGraph(){const t=this.get_fp(),e=this.getGraph(),i=this.getOptions();if(!t)return;if(i.pos3d)return this.drawBins3D(t,e);const n=!!this.get_gme(),h=t.getGrFuncs(i.second_x,i.second_y),s=h.getFrameWidth(),a=h.getFrameHeight(),x=this.createG(t.pad_layer?!1:this.#x);this.createGraphDrawAttributes(),this.fillatt.used=!1,this.#e="none",this.#r=0;const l=n?x.append("svg:g"):x;if(this.drawBins(h,i,l,s,a,this.lineatt,this.fillatt,!0),e._typename==="TGraphQQ"&&this.appendQQ(h,e),n){const p=f=>{this.#t?.forEach(c=>{c.eylow=e.fEyL[f][c.indx],c.eyhigh=e.fEyH[f][c.indx]})};for(let f=0;f<e.fNYErrors;++f){const c=i.individual_styles?this.createAttLine({attr:e.fAttLine[f],std:!1}):this.lineatt,m=i.individual_styles?this.createAttFill({attr:e.fAttFill[f],std:!1}):this.fillatt,r=x.append("svg:g"),d=f<i.blocks.length?i.blocks[f]:i;p(f),this.drawBins(h,d,r,s,a,c,m)}p(0)}this.isBatchMode()||(rt(this,this.testEditable()),st(this,ht))}extractTooltip(t){if(!t)return null;if(this.#e==="lines"||this.#e==="path"||this.#e==="mark")return this.extractTooltipForPath(t);if(this.#e!=="nodes")return null;const e=this.get_fp(),i=this.getOptions(),n=e.getFrameHeight(),h=this.#u,s=this.#p,a=this.error_size,x=i.Bar===1,l=x?e.getGrFuncs(i.second_x,i.second_y):null,p=this.#r?Math.round(this.#r/2+1.5):0;let f=null,c=1e10,m=null;if(this.getG().selectAll(".grpoint").each(function(){const o=Y(this).datum();if(o===void 0)return;let _=(t.x-o.grx1)**2;if(t.nproc===1&&(_+=(t.y-o.gry1)**2),_>=c)return;let u;if(o.error||o.rect||o.marker)u={x1:Math.min(-a,o.grx0,-p),x2:Math.max(a,o.grx2,p),y1:Math.min(-a,o.gry2,-p),y2:Math.max(a,o.gry0,p)};else if(o.bar){if(u={x1:s-h/2,x2:s+h/2,y1:0,y2:n-o.gry1},x){const b=l.gry(0);u.y1=o.gry1>b?b-o.gry1:0,u.y2=o.gry1>b?0:b-o.gry1}}else u={x1:-5,x2:5,y1:-5,y2:5};const k=t.x>=o.grx1+u.x1&&t.x<=o.grx1+u.x2,g=t.y>=o.gry1+u.y1&&t.y<=o.gry1+u.y2;k&&(g||t.nproc>1)&&(c=_,f=this,m=u,m.exact=g)}),f===null)return null;const r=Y(f).datum(),d=this.getGraph(),y={name:d.fName,title:d.fTitle,x:r.grx1,y:r.gry1,color1:this.lineatt.color,lines:this.getTooltips(r),rect:m,d3bin:f};return y.user_info={obj:d,name:d.fName,bin:r.indx,cont:r.y,grx:r.grx1,gry:r.gry1},this.fillatt?.used&&!this.fillatt?.empty()&&(y.color2=this.fillatt.getFillColor()),m.exact&&(y.exact=!0),y.menu=y.exact,y.menu_dist=3,y.bin=r,y.binindx=r.indx,y}showTooltip(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t||!this.getG()){e?.remove();return}if(t.usepath)return this.showTooltipForPath(t);const i=Y(t.d3bin).datum();e.empty()&&(e=this.getG().append("svg:rect").attr("class","tooltip_bin").style("pointer-events","none").call(Z)),t.changed=e.property("current_bin")!==t.d3bin,t.changed&&e.attr("x",i.grx1+t.rect.x1).attr("width",t.rect.x2-t.rect.x1).attr("y",i.gry1+t.rect.y1).attr("height",t.rect.y2-t.rect.y1).style("opacity","0.3").property("current_bin",t.d3bin)}processTooltipEvent(t){const e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}findBestBin(t){if(!this.#t)return null;const e=this.#e==="lines",i=this.getOptions(),n=this.get_fp().getGrFuncs(i.second_x,i.second_y);let h=-1,s=null,a=1e10,x,l,p,f,c;for(f=0;f<this.#t.length;++f)c=this.#t[f],l=n.grx(c.x),p=n.gry(c.y),x=(t.x-l)**2+(t.y-p)**2,x<a&&(a=x,s=c,h=f);a>100&&e&&(s=null);const m=Math.max(this.lineatt.width+3,4,this.#r);s&&(a=Math.sqrt((t.x-n.grx(s.x))**2+(t.y-n.gry(s.y))**2)),!e&&a>m&&(s=null),s||(h=-1);const r={bin:s,indx:h,dist:a,radius:Math.round(m)};if(!s&&e){a=1e10;const d=(k,g,b)=>g>=k&&k>=b||g<=k&&k<=b;let y=this.#t[0],o=n.grx(y.x),_,u;for(f=1;f<this.#t.length;++f)c=this.#t[f],l=n.grx(c.x),d(t.x,o,l)&&(_=n.gry(y.y),p=n.gry(c.y),Math.abs(l-o)<1?(u=t.y,x=d(t.y,_,p)?0:Math.min(Math.abs(t.y-_),Math.abs(t.y-p))):(u=_+(t.x-o)/(l-o)*(p-_),x=Math.abs(u-t.y)),x<a&&(a=x,r.linex=t.x,r.liney=u)),y=c,o=l;a<m*.5&&(r.linedist=a,r.closeline=!0)}return r}testEditable(t){const e=this.getGraph();return X(e?.TestBit)?((t==="toggle"||t!==void 0)&&e.SetBit(G,!t),!e.TestBit(G)):!1}extractTooltipForPath(t){if(!this.#t)return null;const e=this.findBestBin(t);if(!e||!e.bin&&!e.closeline)return null;const i=this.#e==="lines",n=this.#e==="mark",h=this.get_fp(),s=this.getOptions(),a=h.getGrFuncs(s.second_x,s.second_y),x=this.getGraph(),l={name:x.fName,title:x.fTitle,x:e.bin?a.grx(e.bin.x):e.linex,y:e.bin?a.gry(e.bin.y):e.liney,color1:this.lineatt.color,lines:this.getTooltips(e.bin),usepath:!0,ismark:n,islines:i};return l.user_info={obj:x,name:x.fName,bin:0,cont:0,grx:l.x,gry:l.y},e.closeline?(l.menu=l.exact=!0,l.menu_dist=e.linedist):e.bin&&(s.EF&&i?(l.gry1=a.gry(e.bin.y-e.bin.eylow),l.gry2=a.gry(e.bin.y+e.bin.eyhigh)):l.gry1=l.gry2=a.gry(e.bin.y),l.binindx=e.indx,l.bin=e.bin,l.radius=e.radius,l.user_info.bin=e.indx,l.user_info.cont=e.bin.y,l.exact=Math.abs(t.x-l.x)<=e.radius&&(Math.abs(t.y-l.gry1)<=e.radius||Math.abs(t.y-l.gry2)<=e.radius),l.menu=l.exact,l.menu_dist=Math.sqrt((t.x-l.x)**2+Math.min(Math.abs(t.y-l.gry1),Math.abs(t.y-l.gry2))**2)),this.fillatt?.used&&!this.fillatt?.empty()&&(l.color2=this.fillatt.getFillColor()),i||(l.color1=this.getColor(x.fMarkerColor),l.color2||(l.color2=l.color1)),l}showTooltipForPath(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t?.bin||!this.getG()){e?.remove();return}if(e.empty()&&(e=this.getG().append("svg:g").attr("class","tooltip_bin")),t.changed=e.property("current_bin")!==t.bin,t.changed)if(e.selectAll("*").remove(),e.property("current_bin",t.bin),t.ismark)e.append("svg:rect").style("pointer-events","none").call(Z).style("opacity","0.3").attr("x",Math.round(t.x-t.radius)).attr("y",Math.round(t.y-t.radius)).attr("width",2*t.radius).attr("height",2*t.radius);else{e.append("svg:circle").attr("cy",Math.round(t.gry1)),Math.abs(t.gry1-t.gry2)>1&&e.append("svg:circle").attr("cy",Math.round(t.gry2));const i=this.getOptions(),n=e.selectAll("circle").attr("r",t.radius).attr("cx",Math.round(t.x));t.islines?(i.Line||i.Curve?n.call(this.lineatt.func):n.style("stroke","black"),i.Fill?n.call(this.fillatt.func):n.style("fill","none")):n.style("stroke",t.color1==="black"?"green":"black").style("fill","none")}}moveEnabled(){return this.testEditable()}moveStart(t,e,i){const n=this.getOptions();this.#h=this.#l=0,this.#i=this.get_fp().getGrFuncs(n.second_x,n.second_y);const h=i?.shiftKey?null:this.extractTooltip({x:t,y:e});h?.exact&&h.binindx!==void 0?(this.#n=h.binindx,this.#a=h.bin,this.#_=this.#i.grx(this.#a.x),this.#M=this.#i.gry(this.#a.y)):this.#n=void 0}moveDrag(t,e){this.#h+=t,this.#l+=e,this.#n===void 0?W(this.getG(),this.#h,this.#l):this.#i&&this.#a&&(this.#a.x=this.#i.revertAxis("x",this.#_+this.#h),this.#a.y=this.#i.revertAxis("y",this.#M+this.#l),this.drawGraph())}moveEnd(t){const e=this.getGraph(),i=e?.fNpoints-1;let n="";const h=s=>{n+=`SetPoint(${s.indx},${s.x},${s.y});;`,e.fX[s.indx]=s.x,e.fY[s.indx]=s.y,s.indx===0&&this.#g&&(n+=`SetPoint(${i},${s.x},${s.y});;`,e.fX[i]=s.x,e.fY[i]=s.y)};if(this.#n===void 0){if(this.getG().attr("transform",null),this.#i&&this.#t&&!t){for(let s=0;s<this.#t.length;++s){const a=this.#t[s];a.x=this.#i.revertAxis("x",this.#i.grx(a.x)+this.#h),a.y=this.#i.revertAxis("y",this.#i.gry(a.y)+this.#l),h(a)}e.$redraw_pad?this.redrawPad():this.drawGraph()}}else h(this.#a),this.#n=void 0,e.$redraw_pad&&this.redrawPad();this.#i=void 0,n&&!t&&this.submitCanvExec(n)}fillWebObjectOptions(t){this.#s&&t&&(t.fcust="auto_exec:"+this.#s,this.#s=void 0)}fillContextMenuItems(t){this.hasSnapId()||(t.addchk(this.testEditable(),"Editable",()=>{this.testEditable("toggle"),this.drawGraph()}),this.axes_draw&&t.add("Title",()=>t.input("Enter graph title",this.getObject().fTitle).then(e=>{this.getObject().fTitle=e;const i=this.getMainPainter();i?.isSecondary(this)&&(q(i.getHisto(),e),this.interactiveRedraw("pad"))})),t.addRedrawMenu(this.getPrimary()))}executeMenuCommand(t,e){if(super.executeMenuCommand(t,e))return!0;const i=this.getCanvPainter(),n=this.get_fp();if(t.fName==="RemovePoint"||t.fName==="InsertPoint"){if(!i||i.isReadonly())return!0;const h=X(n?.getLastEventPos)?n.getLastEventPos():null,s=this.extractTooltip(h);if(t.fName==="InsertPoint"){if(h){const a=this.getOptions(),x=n.getGrFuncs(a.second_x,a.second_y),l=x.revertAxis("x",h.x)??0,p=x.revertAxis("y",h.y)??0;this.submitCanvExec(`AddPoint(${l.toFixed(3)}, ${p.toFixed(3)})`,t.$execid)}}else t.$execid&&s?.binindx!==void 0&&this.submitCanvExec(`RemovePoint(${s.binindx})`,t.$execid);return!0}return!1}_updateMembers(t,e){t.fBits=e.fBits,t.fTitle=e.fTitle,t.fX=e.fX,t.fY=e.fY,["fEX","fEY","fExL","fExH","fEXlow","fEXhigh","fEYlow","fEYhigh","fEXlowd","fEXhighd","fEYlowd","fEYhighd"].forEach(n=>{e[n]!==void 0&&(t[n]=e[n])}),t.fNpoints=e.fNpoints,t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum;const i=this.getOptions();return this.hasSnapId()&&(i._pfc=i._plc=i._pmc=0),i._pfc||(t.fFillColor=e.fFillColor),t.fFillStyle=e.fFillStyle,i._plc||(t.fLineColor=e.fLineColor),t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,i._pmc||(t.fMarkerColor=e.fMarkerColor),t.fMarkerSize=e.fMarkerSize,t.fMarkerStyle=e.fMarkerStyle,e.fFunctions}updateObject(t,e){if(!this.matchObjectType(t))return!1;const i=this.getOptions();e&&e!==i.original&&this.decodeOptions(e);const n=this._updateMembers(this.getObject(),t);if(this.createBins(),this.#f=void 0,this.axes_draw){const h=this.createHistogram(),s=this.getMainPainter();s?.isSecondary(this)&&(s.updateObject(h,i.Axis),this.#f=!0)}return this.#c=new j(this,this.getPadPainter(),n),!0}canZoomInside(t,e,i){const n=this.getGraph();if(!n||t!=="x"&&t!=="y")return!1;let h=n.fX;if(this.isScatter())h=t==="x"?n.fX:n.fY;else if(t!==(this.getOptions().pos3d?"y":"x"))return!1;for(let s=0;s<n.fNpoints;++s)if(e<h[s]&&h[s]<i)return!0;return!1}clickButton(t){return t!=="ToggleZoom"||this.xmin===this.xmax&&this.ymin===this.ymax?!1:this.getFramePainter()?.zoom(this.xmin,this.xmax,this.ymin,this.ymax)}findFunc(){return this.getGraph()?.fFunctions?.arr?.find(t=>t._typename===z||t._typename===R)}findStat(){return this.getGraph()?.fFunctions?.arr?.find(t=>t._typename===S&&t.fName==="stats")}createStat(){const t=this.findFunc();if(!t)return null;let e=this.findStat();if(e)return e;const i=T;return!i.fOptFit||this.getCanvPainter()?.getRootPad(!0)?.fPrimitives?.arr.length?null:(e=I(S),Object.assign(e,{fName:"stats",fOptStat:0,fOptFit:i.fOptFit,fBorderSize:1,fX1NDC:i.fStatX-i.fStatW,fY1NDC:i.fStatY-i.fStatH,fX2NDC:i.fStatX,fY2NDC:i.fStatY,fFillColor:i.fStatColor,fFillStyle:i.fStatStyle}),e.fTextAngle=0,e.fTextSize=i.fStatFontSize,e.fTextAlign=12,e.fTextColor=i.fStatTextColor,e.fTextFont=i.fStatFont,e.AddText(t.fName),this.getGraph().fFunctions.Add(e),e)}fillStatistic(t,e,i){const n=this.findFunc();return!n||!i?!1:(t.clearPave(),t.fillFunctionStat(n,i===1?111:i,1),!0)}async drawAxisHisto(){const t=this.isDummyHistogram("x"),e=this.isDummyHistogram("y"),i=this.createHistogram(t,e);return ft.draw(this.getDrawDom(),i,this.getOptions().Axis)}static async _drawGraph(t,e){t.decodeOptions(e,!0),t.createBins(),t.createStat();const i=t.getGraph();v.DragGraphs||i?.SetBit(G,!0);let n=Promise.resolve();return(!t.getMainPainter()||t.options.second_x||t.options.second_y)&&t.options.Axis&&(n=t.drawAxisHisto().then(h=>{h?.setSecondaryId(t,"hist"),t.axes_draw=!!h})),n.then(()=>(t.addToPadPrimitives(),t.drawGraph())).then(()=>new j(t,t.getPadPainter(),i.fFunctions,!0).drawNext(0))}static async draw(t,e,i){return L._drawGraph(new L(t,e),i)}};export{mt as TGraphPainter,Q as clTGraphAsymmErrors};
1
+ import{a7 as V,aK as J,a3 as A,bS as tt,ag as H,ai as N,ad as F,ah as q,aA as v,a5 as X,bL as S,aX as z,aT as R,a2 as K,b$ as D,s as I,aN as et,az as w,$ as W,ae as T,bY as C,c0 as it,a1 as rt,a0 as st,ba as Y,bT as Z,ak as at,aj as nt,aH as ht}from"./ndmvr-aframe-core-DEHQ38JB.js";import{F as j}from"./THistPainter-B2S5BnuY.js";import{P as lt,T as ft}from"./TH1Painter-DyN-WKyv.js";import"./TPavePainter-1yngbgp8.js";import"./func-C6FX2eN2.js";const G=K(18),O="TGraphErrors",Q="TGraphAsymmErrors",U="TGraphBentErrors",B="TGraphMultiErrors";let mt=class L extends V{#t;#u;#p;#f;#s;#c;#x;#o;#g;#y;#r;#n;#i;#a;#_;#M;#h;#l;#m;#d;#e;constructor(t,e){super(t,e),this.axes_draw=!1,this.xmin=this.ymin=this.xmax=this.ymax=0,this.#d=e._typename===U,this.#m=e._typename===O||e._typename===B||e._typename===Q||this.#d||e._typename.match(/^RooHist/),this.#e=""}get _wheel_zoomy(){return!0}getGraph(){return this.getObject()}getHistogram(){return this.getObject()?.fHistogram}isDummyHistogram(t){const e=this.getHistogram();if(!e)return!0;let i=!1;return t!=="y"&&(i||=e.fXaxis.fXmin!==.0011||e.fXaxis.fXmax!==1.1),t!=="x"&&(i||=e.fYaxis.fXmin!==.0011||e.fYaxis.fXmax!==1.1||e.fMinimum!==.0011||e.fMaximum!==1.1),!i}setHistogram(t){const e=this.getObject();e&&(e.fHistogram=t)}isScatter(){return!1}async redraw(){let t=Promise.resolve(!0);if(this.#f){this.#f=void 0;const e=this.getMainPainter();e?.isSecondary(this)&&this.axes_draw&&(t=e.redraw())}return t.then(()=>this.drawGraph()).then(()=>{const e=this.#c?.drawNext(0)??this;return this.#c=void 0,e})}cleanup(){this.#t=void 0,this.#y=void 0,super.cleanup()}get_gme(){const t=this.getGraph();return t?._typename===B?t:null}decodeOptions(t,e){J(t)&&t.indexOf("same ")===0&&(t=t.slice(5));const i=this.getGraph(),n=!!this.get_gme(),h=e?!!this.getMainPainter():!this.axes_draw;function s(f,c){Object.assign(c,{Line:0,Curve:0,Rect:0,Mark:0,Bar:0,OutRange:0,EF:0,Fill:0,MainError:1,Ends:1,ScaleErrX:1}),n&&f.check("S=",!0)&&(c.ScaleErrX=f.partAsFloat()),f.check("L")&&(c.Line=1),f.check("F")&&(c.Fill=1),f.check("CC")&&(c.Curve=2),f.check("C")&&(c.Curve=1),f.check("*")&&(c.Mark=103),f.check("P0")&&(c.Mark=104),f.check("P")&&(c.Mark=1),f.check("B")&&(c.Bar=1,c.Errors=0),f.check("Z")&&(c.Errors=1,c.Ends=0),f.check("||")&&(c.Errors=1,c.MainError=0,c.Ends=1),f.check("[]")&&(c.Errors=1,c.MainError=0,c.Ends=2),f.check("|>")&&(c.Errors=1,c.Ends=3),f.check(">")&&(c.Errors=1,c.Ends=4),f.check("0")&&(c.Mark=1,c.Errors=1,c.OutRange=1),f.check("1")&&c.Bar===1&&(c.Bar=2),f.check("2")&&(c.Rect=1,c.Errors=0),f.check("3")&&(c.EF=1,c.Errors=0),f.check("4")&&(c.EF=2,c.Errors=0),f.check("5")&&(c.Rect=2,c.Errors=0),f.check("X")&&(c.Errors=0)}const a=this.setOptions({Axis:"",NoOpt:0,PadStats:!1,PadPalette:!1,original:t,second_x:!1,second_y:!1,individual_styles:!1});let x=[];n&&t&&(t.indexOf(";")>0?(x=t.split(";"),t=x.shift()):t.indexOf("_")>0&&(x=t.split("_"),t=x.shift()));let l=new A(t),p="";if(lt.forEach(f=>{l.check(f)&&(p+=";"+f)}),l.check("XAXIS_",!0)&&(p+=";XAXIS_"+l.part),l.check("YAXIS_",!0)&&(p+=";YAXIS_"+l.part),l.empty()&&(a.original=h?"lp":"alp",l=new A(a.original)),l.check("FILL_","color")&&(a.graphFillColor=l.color,a.graphFillPattern=1001),l.check("FILLPAT_",!0)&&(a.graphFillPattern=l.partAsInt()),l.check("LINE_","color")&&(a.graphLineColor=this.getColor(l.color)),l.check("WIDTH_",!0)&&(a.graphLineWidth=l.partAsInt()),l.check("NOOPT")&&(a.NoOpt=1),l.check("POS3D_",!0)&&(a.pos3d=l.partAsInt()-.5),l.check("PFC")&&!a._pfc&&(a._pfc=2),l.check("PLC")&&!a._plc&&(a._plc=2),l.check("PMC")&&!a._pmc&&(a._pmc=2),l.check("A")&&(a.Axis=l.check("I")?"A;":" "),l.check("X+")&&(a.Axis+="X+",a.second_x=h),l.check("Y+")&&(a.Axis+="Y+",a.second_y=h),l.check("RX")&&(a.Axis+="RX"),l.check("RY")&&(a.Axis+="RY"),n&&(a.blocks=[],a.skip_errors_x0=a.skip_errors_y0=!1,l.check("X0")&&(a.skip_errors_x0=!0),l.check("Y0")&&(a.skip_errors_y0=!0)),s(l,a),n&&l.check("S")&&(a.individual_styles=!0),a.Errors===void 0&&(a.Errors=this.#m&&(!n||!x.length)?1:0),a.Mark===1&&i.fMarkerStyle===1&&(a.Mark=101),a.Line+a.Fill+a.Curve+a.Mark+a.Bar+a.EF+a.Rect+a.Errors===0&&l.empty()&&(a.Line=1),this.matchObjectType(O)){const f=i.fEX.length;let c=0;for(let m=0;m<f;++m)c=Math.max(c,i.fEX[m],i.fEY[m]);c<1e-100&&(a.Errors=0)}if(this.#o=this.matchObjectType(tt),this.#g=this.#o&&i.fNpoints>3&&i.fX[0]===i.fX[i.fNpoints-1]&&i.fY[0]===i.fY[i.fNpoints-1],!a.Axis){const f=this.getPadPainter()?.getRootPad(!0);(!f||f?.fPrimitives?.arr[0]===this.getObject())&&(a.Axis=" ")}a.Axis+=p;for(let f=0;f<x.length;++f){const c=new A(x[f]),m={};s(c,m),m.skip_errors_x0=a.skip_errors_x0,m.skip_errors_y0=a.skip_errors_y0,a.blocks.push(m)}}_getBins(){return this.#t}createBins(){const t=this.getGraph(),e=this.getOptions();if(!t)return;let i=0,n=t.fNpoints;this.#o&&this.#g&&n--,t._typename===O?i=1:t._typename===B?i=2:(t._typename===Q||t._typename===U||t._typename.match(/^RooHist/))&&(i=3),this.#t=new Array(n);for(let h=0;h<n;++h){const s=this.#t[h]={x:t.fX[h],y:t.fY[h],indx:h};switch(i){case 1:s.exlow=s.exhigh=t.fEX[h],s.eylow=s.eyhigh=t.fEY[h];break;case 2:s.exlow=t.fExL[h],s.exhigh=t.fExH[h],s.eylow=t.fEyL[0][h],s.eyhigh=t.fEyH[0][h];break;case 3:s.exlow=t.fEXlow[h],s.exhigh=t.fEXhigh[h],s.eylow=t.fEYlow[h],s.eyhigh=t.fEYhigh[h];break}h===0&&(this.xmin=this.xmax=s.x,this.ymin=this.ymax=s.y),i>0?(this.xmin=Math.min(this.xmin,s.x-s.exlow,s.x+s.exhigh),this.xmax=Math.max(this.xmax,s.x-s.exlow,s.x+s.exhigh),this.ymin=Math.min(this.ymin,s.y-s.eylow,s.y+s.eyhigh),this.ymax=Math.max(this.ymax,s.y-s.eylow,s.y+s.eyhigh)):(this.xmin=Math.min(this.xmin,s.x),this.xmax=Math.max(this.xmax,s.x),this.ymin=Math.min(this.ymin,s.y),this.ymax=Math.max(this.ymax,s.y))}this.#x=!0,this.xmin===0&&this.ymin===0&&n>0&&this.#t[0].x===0&&this.#t[0].y===0&&e.Mark&&!e.Line&&!e.Curve&&!e.Fill&&(this.#x="upper_layer")}getHistRangeMargin(){return .1}createHistogram(t=!0,e=!0){const i=this.getGraph(),n=this.xmin,h=this.getHistRangeMargin();let s=this.xmax,a=this.ymin,x=this.ymax;n>=s&&(s=n+1),a>=x&&(x=a+1);const l=(s-n)*h,p=(x-a)*h;let f=n-l,c=s+l,m=a-p,r=x+p;a>0&&m<=0&&(m=(1-h)*a),x<0&&r>=0&&(r=(1-h)*x);const d=m,y=r;let o=this.getHistogram();if(!this.isScatter()&&!o?.fXaxis.fTimeDisplay){const _=this.getPadPainter()?.getPadLog("x");f<0&&n>=0&&(f=_?n*(1-h):0),c>0&&s<=0&&(c=_?(1+h)*s:0)}return o?o.fMaximum!==F&&o.fMinimum!==F&&!this.isDummyHistogram("y")&&(m=o.fMinimum,r=o.fMaximum):(o=this.isScatter()?H(at,30,30):H(nt,100),o.fName=i.fName+"_h",o.fBits|=N,this.#y=!0,this.setHistogram(o)),i.fMinimum!==F&&(m=a=i.fMinimum),i.fMaximum!==F&&(r=i.fMaximum),m<0&&a>=0&&(m=(1-h)*a),x<0&&r>=0&&(r=(1-h)*x),q(o,this.getObject().fTitle),t&&!o.fXaxis.fLabels&&(o.fXaxis.fXmin=f,o.fXaxis.fXmax=c),e&&!o.fYaxis.fLabels&&(o.fYaxis.fXmin=Math.min(d,m),o.fYaxis.fXmax=Math.max(y,r),this.isScatter()||(o.fMinimum=m,o.fMaximum=r)),o.$xmin_nz=n>0?n:void 0,o.$ymin_nz=a>0?a:void 0,o}unzoomUserRange(t,e){const i=this.getGraph();if(this.#y||!i)return!1;const n=this.getHistogram();return t=t&&n&&(n.fXaxis.fXmin>this.xmin||n.fXaxis.fXmax<this.xmax),e=e&&n&&(n.fYaxis.fXmin>this.ymin||n.fYaxis.fXmax<this.ymax),!t&&!e?!1:(this.createHistogram(t,e),this.getMainPainter()?.extractAxesProperties(1),!0)}canOptimize(){return v.OptimizeDraw>0&&!this.getOptions().NoOpt}optimizeBins(t,e){if(this.#t.length<30&&!e)return this.#t;let i=null;if(X(e))for(let s=0;s<this.#t.length;++s)e(this.#t[s],s)?i||(i=s===0?[]:this.#t.slice(0,s)):i&&i.push(this.#t[s]);if(i||(i=this.#t),t||(t=5e5),i.length<t||!this.canOptimize())return i;const n=[],h=Math.max(2,Math.floor(i.length/t));for(let s=0;s<i.length;s+=h)n.push(i[s]);return n}needDrawFunc(t,e){return e._typename===S?e.fName!=="stats"||!t.TestBit(N):e._typename===z||e._typename===R?!e.TestBit(K(9)):!0}getTooltips(t){const e=this.get_fp(),i=[],n=this.getOptions(),h=e.getGrFuncs(n.second_x,n.second_y),s=this.get_gme();if(i.push(this.getObjectHint()),t&&h)if(t.indx!==void 0&&i.push("p = "+t.indx),i.push("x = "+h.axisAsText("x",t.x),"y = "+h.axisAsText("y",t.y)),s?i.push("error x = -"+h.axisAsText("x",s.fExL[t.indx])+"/+"+h.axisAsText("x",s.fExH[t.indx])):n.Errors&&h.x_handle.kind===D&&(t.exlow||t.exhigh)&&i.push("error x = -"+h.axisAsText("x",t.exlow)+"/+"+h.axisAsText("x",t.exhigh)),s)for(let a=0;a<s.fNYErrors;++a)i.push(`error y${a} = -${h.axisAsText("y",s.fEyL[a][t.indx])}/+${h.axisAsText("y",s.fEyH[a][t.indx])}`);else(n.Errors||n.EF>0)&&h.y_handle.kind===D&&(t.eylow||t.eyhigh)&&i.push("error y = -"+h.axisAsText("y",t.eylow)+"/+"+h.axisAsText("y",t.eyhigh));return i}get_fp(){let t=this.getFramePainter();if(t?.grx&&t?.gry)return t;const e=this.getPadPainter(),i=e?.getPadRect()||{width:800,height:600};return t={pad_layer:!0,pad:e?.getRootPad(!0)??I(et),pw:i.width,ph:i.height,fX1NDC:.1,fX2NDC:.9,fY1NDC:.1,fY2NDC:.9,getFrameWidth(){return this.pw},getFrameHeight(){return this.ph},grx(n){return this.pad.fLogx?n=n>0?Math.log10(n):this.pad.fUxmin:n=(n-this.pad.fX1)/(this.pad.fX2-this.pad.fX1),n*this.pw},gry(n){return this.pad.fLogv??this.pad.fLogy?n=n>0?Math.log10(n):this.pad.fUymin:n=(n-this.pad.fY1)/(this.pad.fY2-this.pad.fY1),(1-n)*this.ph},revertAxis(n,h){return n==="x"?h/this.pw*(this.pad.fX2-this.pad.fX1)+this.pad.fX1:n==="y"?(1-h/this.ph)*(this.pad.fY2-this.pad.fY1)+this.pad.fY1:h},getGrFuncs(){return this}},t}appendExclusion(t,e,i,n){const h=[];for(let a=i.length-1;a>=0;--a){const x=i[a],l=Math.sqrt(x.dgrx**2+x.dgry**2);l>1e-10&&(x.grx+=n*x.dgry/l,x.gry-=n*x.dgrx/l),h.push(x)}const s=w(h,{cmd:"L",line:!t});this.appendPath(e+s+"Z").call(this.fillatt.func).style("opacity",.75)}drawBins(t,e,i,n,h,s,a,x){const l=this.getGraph();if(!l?.fNpoints)return;let p=0,f=null;const c=!this.isBatchMode()&&(e.Line||e.Errors)?"none":null;if(x&&s.excl_side&&(p=s.excl_width,s.width>0&&!e.Line&&!e.Curve&&(e.Line=1)),e.EF){f=this.optimizeBins(e.EF>1?2e4:0);for(let _=0;_<f.length;++_){const u=f[_];u.grx=t.grx(u.x),u.gry=t.gry(u.y-u.eylow)}const r=w(f,{line:e.EF<2,qubic:!0}),d=[];for(let _=f.length-1;_>=0;--_){const u=f[_];u.gry=t.gry(u.y+u.eyhigh),d.push(u)}const y=w(d,{line:e.EF<2,cmd:"L",qubic:!0}),o=i.append("svg:path").attr("d",r+y+"Z").call(a.func);a.empty()&&a.colorindx&&o.style("stroke",this.getColor(a.colorindx)),x&&(this.#e="lines")}if(e.Line||e.Fill){let r="";this.#o&&(r="Z",e.original||(e.Fill=1)),e.Fill&&(r="Z",p=0),f||(f=this.optimizeBins(0));for(let o=0;o<f.length;++o){const _=f[o];_.grx=t.grx(_.x),_.gry=t.gry(_.y)}const d=w(f,{line:!0,calc:p});p&&this.appendExclusion(!1,d,f,p);const y=i.append("svg:path").attr("d",d+r).style("pointer-events",c);e.Line&&y.call(s.func),e.Fill?y.call(a.func):y.style("fill","none"),x&&(this.#e="lines")}if(e.Curve){let r=f;if(this.#e!=="lines"||!r||e.Curve===1&&r.length>2e4){r=this.optimizeBins(e.Curve===1?2e4:0);for(let y=0;y<r.length;++y){const o=r[y];o.grx=t.grx(o.x),o.gry=t.gry(o.y)}}const d=w(r,{qubic:!p});p&&this.appendExclusion(!0,d,r,p),i.append("svg:path").attr("d",d).call(s.func).style("fill","none").style("pointer-events",c),x&&(this.#e="lines")}let m=null;if((e.Errors||e.Rect||e.Bar)&&(f=this.optimizeBins(5e3,(r,d)=>{const y=t.grx(r.x);if(!e.Bar&&(y<0||y>n))return!0;const o=t.gry(r.y);return!e.Bar&&!e.OutRange&&(o<0||o>h)?!0:(r.grx1=Math.round(y),r.gry1=Math.round(o),this.#m&&(r.grx0=Math.round(t.grx(r.x-e.ScaleErrX*r.exlow)-y),r.grx2=Math.round(t.grx(r.x+e.ScaleErrX*r.exhigh)-y),r.gry0=Math.round(t.gry(r.y-r.eylow)-o),r.gry2=Math.round(t.gry(r.y+r.eyhigh)-o),this.#d?(r.grdx0=Math.round(t.gry(r.y+l.fEXlowd[d])-o),r.grdx2=Math.round(t.gry(r.y+l.fEXhighd[d])-o),r.grdy0=Math.round(t.grx(r.x+l.fEYlowd[d])-y),r.grdy2=Math.round(t.grx(r.x+l.fEYhighd[d])-y)):r.grdx0=r.grdx2=r.grdy0=r.grdy2=0),!1)}),x&&(this.#e="nodes"),m=i.selectAll(".grpoint").data(f).enter().append("svg:g").attr("class","grpoint").attr("transform",r=>W(r.grx1,r.gry1))),e.Bar){let r=0,d=0;for(let g=0;g<f.length;++g)g===0?r=d=f[g].grx1:(r=Math.min(r,f[g].grx1),d=Math.max(d,f[g].grx1));const y=f.length<2?n/4:(d-r)/f.length,o=y*T.fBarWidth,_=y*T.fBarOffset,u=Math.round(t.gry(0));let k=a;if(x){const g=this.getFramePainter(),b=g?.fillatt?.empty()?-1:g.fillatt.getFillColor();b===a.getFillColor()&&(k=this.createAttFill({color:b==="white"?C:it,pattern:1001,std:!1}))}m.append("svg:path").attr("d",g=>{g.bar=!0;const b=o>1?Math.round(_-o/2):0,$=o>1?Math.round(o):1,M=e.Bar!==1?0:g.gry1>u?u-g.gry1:0,E=e.Bar!==1?h>g.gry1?h-g.gry1:0:Math.abs(u-g.gry1);return`M${b},${M}h${$}v${E}h${-$}z`}).call(k.func),this.#u=o,this.#p=_}if(e.Rect&&m.filter(r=>r.exlow>0&&r.exhigh>0&&r.eylow>0&&r.eyhigh>0).append("svg:path").attr("d",r=>(r.rect=!0,`M${r.grx0},${r.gry0}H${r.grx2}V${r.gry2}H${r.grx0}Z`)).call(a.func).call(e.Rect===2?s.func:()=>{}),this.error_size=0,e.Errors){let r=s.width+T.fEndErrorSize;const d=e.Ends?`m0,${r}v${-2*r}`:"",y=e.Ends?`m${r},0h${-2*r}`:"";let o=d,_=d,u=y,k=y,g;const b=(M,E)=>{if(!e.MainError)return`M${M},${E}`;const P="M0,0";return M?P+(E?`L${M},${E}`:`H${M}`):E?P+`V${E}`:P};switch(e.Ends){case 2:g=Math.max(s.width+1,Math.round(r*.66)),o=`m${g},${r}h${-g}v${-2*r}h${g}`,_=`m${-g},${r}h${g}v${-2*r}h${-g}`,u=`m${-r},${g}v${-g}h${2*r}v${g}`,k=`m${-r},${-g}v${g}h${2*r}v${-g}`;break;case 3:r=Math.max(r,Math.round(l.fMarkerSize*8*.66)),g=Math.max(s.width+1,Math.round(r*.66)),o=`l${g},${r}v${-2*r}l${-g},${r}`,_=`l${-g},${r}v${-2*r}l${g},${r}`,u=`l${-r},${g}h${2*r}l${-r},${-g}`,k=`l${-r},${-g}h${2*r}l${-r},${g}`;break;case 4:r=Math.max(r,Math.round(l.fMarkerSize*8*.66)),g=Math.max(s.width+1,Math.round(r*.66)),o=`l${g},${r}m0,${-2*r}l${-g},${r}`,_=`l${-g},${r}m0,${-2*r}l${g},${r}`,u=`l${-r},${g}m${2*r},0l${-r},${-g}`,k=`l${-r},${-g}m${2*r},0l${-r},${g}`;break}this.error_size=r,r=Math.floor((s.width-1)/2);let $=m.filter(M=>M.exlow>0||M.exhigh>0||M.eylow>0||M.eyhigh>0);(e.skip_errors_x0||e.skip_errors_y0)&&($=$.filter(M=>(M.x||!e.skip_errors_x0)&&(M.y||!e.skip_errors_y0))),!this.isBatchMode()&&v.Tooltip&&x&&$.append("svg:path").attr("d",M=>`M${M.grx0},${M.gry0}h${M.grx2-M.grx0}v${M.gry2-M.gry0}h${M.grx0-M.grx2}z`).style("fill","none").style("pointer-events","visibleFill"),$.append("svg:path").attr("d",M=>(M.error=!0,(M.exlow>0?b(M.grx0+r,M.grdx0)+o:"")+(M.exhigh>0?b(M.grx2-r,M.grdx2)+_:"")+(M.eylow>0?b(M.grdy0,M.gry0-r)+k:"")+(M.eyhigh>0?b(M.grdy2,M.gry2+r)+u:""))).style("fill","none").call(s.func)}if(e.Mark){this.createAttMarker({attr:l,style:e.Mark-100}),this.#r=this.markeratt.getFullSize(),this.markeratt.resetPos();const r=!this.isBatchMode()&&v.Tooltip&&(!this.markeratt.fill||this.#r<7)&&!m&&x,d=Math.max(5,Math.round(this.#r*.7)),y=1e6/(this.markeratt.getMarkerLength()+7);let o="",_,u,k,g="",b=1;f?this.canOptimize()&&f.length>1.5*y&&(b=Math.min(2,Math.round(f.length/y))):f=this.optimizeBins(y);for(let $=0;$<f.length;$+=b)_=f[$],u=t.grx(_.x),u>-this.#r&&u<n+this.#r&&(k=t.gry(_.y),k>-this.#r&&k<h+this.#r&&(o+=this.markeratt.create(u,k),r&&(g+=`M${u-d},${k-d}h${2*d}v${2*d}h${-2*d}z`)));o&&(i.append("svg:path").attr("d",o).call(this.markeratt.func),m===null&&this.#e==="none"&&x&&(this.#e=e.Mark===101?"path":"mark")),r&&g&&i.append("svg:path").attr("d",g).style("fill","none").style("pointer-events","visibleFill")}}appendQQ(t,e){const i=Math.max(t.scale_xmin,e.fXq1),n=Math.min(t.scale_xmax,e.fXq2),h=Math.max(t.scale_ymin,e.fYq1),s=Math.min(t.scale_ymax,e.fYq2),a=(m,r,d,y)=>`M${t.grx(m)},${t.gry(r)}L${t.grx(d)},${t.gry(y)}`,x=(e.fYq2-e.fYq1)*(t.scale_xmin-e.fXq1)/(e.fXq2-e.fXq1)+e.fYq1,l=(e.fYq2-e.fYq1)*(t.scale_xmax-e.fXq1)/(e.fXq2-e.fXq1)+e.fYq1;let p;if(x<t.scale_ymin){const m=(e.fXq2-e.fXq1)*(t.scale_ymin-e.fYq1)/(e.fYq2-e.fYq1)+e.fXq1;p=a(m,t.scale_ymin,i,h)}else p=a(t.scale_xmin,x,i,h);if(l>t.scale_ymax){const m=(e.fXq2-e.fXq1)*(t.scale_ymax-e.fYq1)/(e.fYq2-e.fYq1)+e.fXq1;p+=a(n,s,m,t.scale_ymax)}else p+=a(n,s,t.scale_xmax,l);const f=this.createAttLine({style:1,width:1,color:C,std:!1}),c=this.createAttLine({style:2,width:1,color:C,std:!1});this.appendPath(a(i,h,n,s)).call(f.func).style("fill","none"),this.appendPath(p).call(c.func).style("fill","none")}drawBins3D(){console.log("Load ./hist/TGraphPainter.mjs to draw graph in 3D")}createGraphDrawAttributes(t){const e=this.getGraph(),i=this.getOptions();if(i._pfc>1||i._plc>1||i._pmc>1){const n=this.getPadPainter();if(X(n?.getAutoColor)){const h=n.getAutoColor(e.$num_graphs);this.#s="",i._pfc>1&&(i._pfc=1,e.fFillColor=h,this.#s+=`SetFillColor(${h});;`,this.deleteAttr("fill")),i._plc>1&&(i._plc=1,e.fLineColor=h,this.#s+=`SetLineColor(${h});;`,this.deleteAttr("line")),i._pmc>1&&(i._pmc=1,e.fMarkerColor=h,this.#s+=`SetMarkerColor(${h});;`,this.deleteAttr("marker"))}}t?this.deleteAttr():(this.createAttLine({attr:e,can_excl:!0,color0:i.graphLineColor,width:i.graphLineWidth}),this.createAttFill({attr:e,color:i.graphFillColor,pattern:i.graphFillPattern}))}drawGraph(){const t=this.get_fp(),e=this.getGraph(),i=this.getOptions();if(!t)return;if(i.pos3d)return this.drawBins3D(t,e);const n=!!this.get_gme(),h=t.getGrFuncs(i.second_x,i.second_y),s=h.getFrameWidth(),a=h.getFrameHeight(),x=this.createG(t.pad_layer?!1:this.#x);this.createGraphDrawAttributes(),this.fillatt.used=!1,this.#e="none",this.#r=0;const l=n?x.append("svg:g"):x;if(this.drawBins(h,i,l,s,a,this.lineatt,this.fillatt,!0),e._typename==="TGraphQQ"&&this.appendQQ(h,e),n){const p=f=>{this.#t?.forEach(c=>{c.eylow=e.fEyL[f][c.indx],c.eyhigh=e.fEyH[f][c.indx]})};for(let f=0;f<e.fNYErrors;++f){const c=i.individual_styles?this.createAttLine({attr:e.fAttLine[f],std:!1}):this.lineatt,m=i.individual_styles?this.createAttFill({attr:e.fAttFill[f],std:!1}):this.fillatt,r=x.append("svg:g"),d=f<i.blocks.length?i.blocks[f]:i;p(f),this.drawBins(h,d,r,s,a,c,m)}p(0)}this.isBatchMode()||(rt(this,this.testEditable()),st(this,ht))}extractTooltip(t){if(!t)return null;if(this.#e==="lines"||this.#e==="path"||this.#e==="mark")return this.extractTooltipForPath(t);if(this.#e!=="nodes")return null;const e=this.get_fp(),i=this.getOptions(),n=e.getFrameHeight(),h=this.#u,s=this.#p,a=this.error_size,x=i.Bar===1,l=x?e.getGrFuncs(i.second_x,i.second_y):null,p=this.#r?Math.round(this.#r/2+1.5):0;let f=null,c=1e10,m=null;if(this.getG().selectAll(".grpoint").each(function(){const o=Y(this).datum();if(o===void 0)return;let _=(t.x-o.grx1)**2;if(t.nproc===1&&(_+=(t.y-o.gry1)**2),_>=c)return;let u;if(o.error||o.rect||o.marker)u={x1:Math.min(-a,o.grx0,-p),x2:Math.max(a,o.grx2,p),y1:Math.min(-a,o.gry2,-p),y2:Math.max(a,o.gry0,p)};else if(o.bar){if(u={x1:s-h/2,x2:s+h/2,y1:0,y2:n-o.gry1},x){const b=l.gry(0);u.y1=o.gry1>b?b-o.gry1:0,u.y2=o.gry1>b?0:b-o.gry1}}else u={x1:-5,x2:5,y1:-5,y2:5};const k=t.x>=o.grx1+u.x1&&t.x<=o.grx1+u.x2,g=t.y>=o.gry1+u.y1&&t.y<=o.gry1+u.y2;k&&(g||t.nproc>1)&&(c=_,f=this,m=u,m.exact=g)}),f===null)return null;const r=Y(f).datum(),d=this.getGraph(),y={name:d.fName,title:d.fTitle,x:r.grx1,y:r.gry1,color1:this.lineatt.color,lines:this.getTooltips(r),rect:m,d3bin:f};return y.user_info={obj:d,name:d.fName,bin:r.indx,cont:r.y,grx:r.grx1,gry:r.gry1},this.fillatt?.used&&!this.fillatt?.empty()&&(y.color2=this.fillatt.getFillColor()),m.exact&&(y.exact=!0),y.menu=y.exact,y.menu_dist=3,y.bin=r,y.binindx=r.indx,y}showTooltip(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t||!this.getG()){e?.remove();return}if(t.usepath)return this.showTooltipForPath(t);const i=Y(t.d3bin).datum();e.empty()&&(e=this.getG().append("svg:rect").attr("class","tooltip_bin").style("pointer-events","none").call(Z)),t.changed=e.property("current_bin")!==t.d3bin,t.changed&&e.attr("x",i.grx1+t.rect.x1).attr("width",t.rect.x2-t.rect.x1).attr("y",i.gry1+t.rect.y1).attr("height",t.rect.y2-t.rect.y1).style("opacity","0.3").property("current_bin",t.d3bin)}processTooltipEvent(t){const e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}findBestBin(t){if(!this.#t)return null;const e=this.#e==="lines",i=this.getOptions(),n=this.get_fp().getGrFuncs(i.second_x,i.second_y);let h=-1,s=null,a=1e10,x,l,p,f,c;for(f=0;f<this.#t.length;++f)c=this.#t[f],l=n.grx(c.x),p=n.gry(c.y),x=(t.x-l)**2+(t.y-p)**2,x<a&&(a=x,s=c,h=f);a>100&&e&&(s=null);const m=Math.max(this.lineatt.width+3,4,this.#r);s&&(a=Math.sqrt((t.x-n.grx(s.x))**2+(t.y-n.gry(s.y))**2)),!e&&a>m&&(s=null),s||(h=-1);const r={bin:s,indx:h,dist:a,radius:Math.round(m)};if(!s&&e){a=1e10;const d=(k,g,b)=>g>=k&&k>=b||g<=k&&k<=b;let y=this.#t[0],o=n.grx(y.x),_,u;for(f=1;f<this.#t.length;++f)c=this.#t[f],l=n.grx(c.x),d(t.x,o,l)&&(_=n.gry(y.y),p=n.gry(c.y),Math.abs(l-o)<1?(u=t.y,x=d(t.y,_,p)?0:Math.min(Math.abs(t.y-_),Math.abs(t.y-p))):(u=_+(t.x-o)/(l-o)*(p-_),x=Math.abs(u-t.y)),x<a&&(a=x,r.linex=t.x,r.liney=u)),y=c,o=l;a<m*.5&&(r.linedist=a,r.closeline=!0)}return r}testEditable(t){const e=this.getGraph();return X(e?.TestBit)?((t==="toggle"||t!==void 0)&&e.SetBit(G,!t),!e.TestBit(G)):!1}extractTooltipForPath(t){if(!this.#t)return null;const e=this.findBestBin(t);if(!e||!e.bin&&!e.closeline)return null;const i=this.#e==="lines",n=this.#e==="mark",h=this.get_fp(),s=this.getOptions(),a=h.getGrFuncs(s.second_x,s.second_y),x=this.getGraph(),l={name:x.fName,title:x.fTitle,x:e.bin?a.grx(e.bin.x):e.linex,y:e.bin?a.gry(e.bin.y):e.liney,color1:this.lineatt.color,lines:this.getTooltips(e.bin),usepath:!0,ismark:n,islines:i};return l.user_info={obj:x,name:x.fName,bin:0,cont:0,grx:l.x,gry:l.y},e.closeline?(l.menu=l.exact=!0,l.menu_dist=e.linedist):e.bin&&(s.EF&&i?(l.gry1=a.gry(e.bin.y-e.bin.eylow),l.gry2=a.gry(e.bin.y+e.bin.eyhigh)):l.gry1=l.gry2=a.gry(e.bin.y),l.binindx=e.indx,l.bin=e.bin,l.radius=e.radius,l.user_info.bin=e.indx,l.user_info.cont=e.bin.y,l.exact=Math.abs(t.x-l.x)<=e.radius&&(Math.abs(t.y-l.gry1)<=e.radius||Math.abs(t.y-l.gry2)<=e.radius),l.menu=l.exact,l.menu_dist=Math.sqrt((t.x-l.x)**2+Math.min(Math.abs(t.y-l.gry1),Math.abs(t.y-l.gry2))**2)),this.fillatt?.used&&!this.fillatt?.empty()&&(l.color2=this.fillatt.getFillColor()),i||(l.color1=this.getColor(x.fMarkerColor),l.color2||(l.color2=l.color1)),l}showTooltipForPath(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t?.bin||!this.getG()){e?.remove();return}if(e.empty()&&(e=this.getG().append("svg:g").attr("class","tooltip_bin")),t.changed=e.property("current_bin")!==t.bin,t.changed)if(e.selectAll("*").remove(),e.property("current_bin",t.bin),t.ismark)e.append("svg:rect").style("pointer-events","none").call(Z).style("opacity","0.3").attr("x",Math.round(t.x-t.radius)).attr("y",Math.round(t.y-t.radius)).attr("width",2*t.radius).attr("height",2*t.radius);else{e.append("svg:circle").attr("cy",Math.round(t.gry1)),Math.abs(t.gry1-t.gry2)>1&&e.append("svg:circle").attr("cy",Math.round(t.gry2));const i=this.getOptions(),n=e.selectAll("circle").attr("r",t.radius).attr("cx",Math.round(t.x));t.islines?(i.Line||i.Curve?n.call(this.lineatt.func):n.style("stroke","black"),i.Fill?n.call(this.fillatt.func):n.style("fill","none")):n.style("stroke",t.color1==="black"?"green":"black").style("fill","none")}}moveEnabled(){return this.testEditable()}moveStart(t,e,i){const n=this.getOptions();this.#h=this.#l=0,this.#i=this.get_fp().getGrFuncs(n.second_x,n.second_y);const h=i?.shiftKey?null:this.extractTooltip({x:t,y:e});h?.exact&&h.binindx!==void 0?(this.#n=h.binindx,this.#a=h.bin,this.#_=this.#i.grx(this.#a.x),this.#M=this.#i.gry(this.#a.y)):this.#n=void 0}moveDrag(t,e){this.#h+=t,this.#l+=e,this.#n===void 0?W(this.getG(),this.#h,this.#l):this.#i&&this.#a&&(this.#a.x=this.#i.revertAxis("x",this.#_+this.#h),this.#a.y=this.#i.revertAxis("y",this.#M+this.#l),this.drawGraph())}moveEnd(t){const e=this.getGraph(),i=e?.fNpoints-1;let n="";const h=s=>{n+=`SetPoint(${s.indx},${s.x},${s.y});;`,e.fX[s.indx]=s.x,e.fY[s.indx]=s.y,s.indx===0&&this.#g&&(n+=`SetPoint(${i},${s.x},${s.y});;`,e.fX[i]=s.x,e.fY[i]=s.y)};if(this.#n===void 0){if(this.getG().attr("transform",null),this.#i&&this.#t&&!t){for(let s=0;s<this.#t.length;++s){const a=this.#t[s];a.x=this.#i.revertAxis("x",this.#i.grx(a.x)+this.#h),a.y=this.#i.revertAxis("y",this.#i.gry(a.y)+this.#l),h(a)}e.$redraw_pad?this.redrawPad():this.drawGraph()}}else h(this.#a),this.#n=void 0,e.$redraw_pad&&this.redrawPad();this.#i=void 0,n&&!t&&this.submitCanvExec(n)}fillWebObjectOptions(t){this.#s&&t&&(t.fcust="auto_exec:"+this.#s,this.#s=void 0)}fillContextMenuItems(t){this.hasSnapId()||(t.addchk(this.testEditable(),"Editable",()=>{this.testEditable("toggle"),this.drawGraph()}),this.axes_draw&&t.add("Title",()=>t.input("Enter graph title",this.getObject().fTitle).then(e=>{this.getObject().fTitle=e;const i=this.getMainPainter();i?.isSecondary(this)&&(q(i.getHisto(),e),this.interactiveRedraw("pad"))})),t.addRedrawMenu(this.getPrimary()))}executeMenuCommand(t,e){if(super.executeMenuCommand(t,e))return!0;const i=this.getCanvPainter(),n=this.get_fp();if(t.fName==="RemovePoint"||t.fName==="InsertPoint"){if(!i||i.isReadonly())return!0;const h=X(n?.getLastEventPos)?n.getLastEventPos():null,s=this.extractTooltip(h);if(t.fName==="InsertPoint"){if(h){const a=this.getOptions(),x=n.getGrFuncs(a.second_x,a.second_y),l=x.revertAxis("x",h.x)??0,p=x.revertAxis("y",h.y)??0;this.submitCanvExec(`AddPoint(${l.toFixed(3)}, ${p.toFixed(3)})`,t.$execid)}}else t.$execid&&s?.binindx!==void 0&&this.submitCanvExec(`RemovePoint(${s.binindx})`,t.$execid);return!0}return!1}_updateMembers(t,e){t.fBits=e.fBits,t.fTitle=e.fTitle,t.fX=e.fX,t.fY=e.fY,["fEX","fEY","fExL","fExH","fEXlow","fEXhigh","fEYlow","fEYhigh","fEXlowd","fEXhighd","fEYlowd","fEYhighd"].forEach(n=>{e[n]!==void 0&&(t[n]=e[n])}),t.fNpoints=e.fNpoints,t.fMinimum=e.fMinimum,t.fMaximum=e.fMaximum;const i=this.getOptions();return this.hasSnapId()&&(i._pfc=i._plc=i._pmc=0),i._pfc||(t.fFillColor=e.fFillColor),t.fFillStyle=e.fFillStyle,i._plc||(t.fLineColor=e.fLineColor),t.fLineStyle=e.fLineStyle,t.fLineWidth=e.fLineWidth,i._pmc||(t.fMarkerColor=e.fMarkerColor),t.fMarkerSize=e.fMarkerSize,t.fMarkerStyle=e.fMarkerStyle,e.fFunctions}updateObject(t,e){if(!this.matchObjectType(t))return!1;const i=this.getOptions();e&&e!==i.original&&this.decodeOptions(e);const n=this._updateMembers(this.getObject(),t);if(this.createBins(),this.#f=void 0,this.axes_draw){const h=this.createHistogram(),s=this.getMainPainter();s?.isSecondary(this)&&(s.updateObject(h,i.Axis),this.#f=!0)}return this.#c=new j(this,this.getPadPainter(),n),!0}canZoomInside(t,e,i){const n=this.getGraph();if(!n||t!=="x"&&t!=="y")return!1;let h=n.fX;if(this.isScatter())h=t==="x"?n.fX:n.fY;else if(t!==(this.getOptions().pos3d?"y":"x"))return!1;for(let s=0;s<n.fNpoints;++s)if(e<h[s]&&h[s]<i)return!0;return!1}clickButton(t){return t!=="ToggleZoom"||this.xmin===this.xmax&&this.ymin===this.ymax?!1:this.getFramePainter()?.zoom(this.xmin,this.xmax,this.ymin,this.ymax)}findFunc(){return this.getGraph()?.fFunctions?.arr?.find(t=>t._typename===z||t._typename===R)}findStat(){return this.getGraph()?.fFunctions?.arr?.find(t=>t._typename===S&&t.fName==="stats")}createStat(){const t=this.findFunc();if(!t)return null;let e=this.findStat();if(e)return e;const i=T;return!i.fOptFit||this.getCanvPainter()?.getRootPad(!0)?.fPrimitives?.arr.length?null:(e=I(S),Object.assign(e,{fName:"stats",fOptStat:0,fOptFit:i.fOptFit,fBorderSize:1,fX1NDC:i.fStatX-i.fStatW,fY1NDC:i.fStatY-i.fStatH,fX2NDC:i.fStatX,fY2NDC:i.fStatY,fFillColor:i.fStatColor,fFillStyle:i.fStatStyle}),e.fTextAngle=0,e.fTextSize=i.fStatFontSize,e.fTextAlign=12,e.fTextColor=i.fStatTextColor,e.fTextFont=i.fStatFont,e.AddText(t.fName),this.getGraph().fFunctions.Add(e),e)}fillStatistic(t,e,i){const n=this.findFunc();return!n||!i?!1:(t.clearPave(),t.fillFunctionStat(n,i===1?111:i,1),!0)}async drawAxisHisto(){const t=this.isDummyHistogram("x"),e=this.isDummyHistogram("y"),i=this.createHistogram(t,e);return ft.draw(this.getDrawDom(),i,this.getOptions().Axis)}static async _drawGraph(t,e){t.decodeOptions(e,!0),t.createBins(),t.createStat();const i=t.getGraph();v.DragGraphs||i?.SetBit(G,!0);let n=Promise.resolve();return(!t.getMainPainter()||t.options.second_x||t.options.second_y)&&t.options.Axis&&(n=t.drawAxisHisto().then(h=>{h?.setSecondaryId(t,"hist"),t.axes_draw=!!h})),n.then(()=>(t.addToPadPrimitives(),t.drawGraph())).then(()=>new j(t,t.getPadPainter(),i.fFunctions,!0).drawNext(0))}static async draw(t,e,i){return L._drawGraph(new L(t,e),i)}};export{mt as TGraphPainter,Q as clTGraphAsymmErrors};
@@ -1 +1 @@
1
- import{TGraphPainter as l}from"./TGraphPainter-DLkx_1ES.js";import{TH1Painter as c}from"./TH1Painter-CMr7gXzd.js";import{an as z,ao as w}from"./ndmvr-aframe-core-Cw91_9_Y.js";class x extends l{drawBins3D(t,i){if(!t.mode3d||!t.grx||!t.gry||!t.grz||!t.toplevel)return console.log("Frame painter missing base 3d elements");const s=this.getOptions();if(t.zoom_xmin!==t.zoom_xmax&&(s.pos3d<t.zoom_xmin||s.pos3d>t.zoom_xmax))return;this.createGraphDrawAttributes(!0);const o=this.optimizeBins(1e3);let r=0,e=o.length-1;if(t.zoom_ymin!==t.zoom_ymax){for(;r<e&&o[r].x<t.zoom_ymin;)r++;for(;r<e&&o[e].x>t.zoom_ymax;)e--}if(r===e)return;const g=[],d=t.grx(s.pos3d);let a=o[r];for(let n=r+1;n<=e;++n){const m=o[n];g.push(d,t.gry(a.x),t.grz(a.y),d,t.gry(m.x),t.grz(m.y)),a=m}const h=z(g,w(this,i));t.add3DMesh(h,this,!0),t.render3D(100)}async drawAxisHisto(){return c.draw(this.getDrawDom(),this.createHistogram(),this.getOptions().Axis)}static async draw(t,i,s){return x._drawGraph(new x(t,i),s)}}export{x as T};
1
+ import{TGraphPainter as l}from"./TGraphPainter-Bp7xEbQz.js";import{TH1Painter as c}from"./TH1Painter-BXzutgI3.js";import{an as z,ao as w}from"./ndmvr-aframe-core-DEHQ38JB.js";class x extends l{drawBins3D(t,i){if(!t.mode3d||!t.grx||!t.gry||!t.grz||!t.toplevel)return console.log("Frame painter missing base 3d elements");const s=this.getOptions();if(t.zoom_xmin!==t.zoom_xmax&&(s.pos3d<t.zoom_xmin||s.pos3d>t.zoom_xmax))return;this.createGraphDrawAttributes(!0);const o=this.optimizeBins(1e3);let r=0,e=o.length-1;if(t.zoom_ymin!==t.zoom_ymax){for(;r<e&&o[r].x<t.zoom_ymin;)r++;for(;r<e&&o[e].x>t.zoom_ymax;)e--}if(r===e)return;const g=[],d=t.grx(s.pos3d);let a=o[r];for(let n=r+1;n<=e;++n){const m=o[n];g.push(d,t.gry(a.x),t.grz(a.y),d,t.gry(m.x),t.grz(m.y)),a=m}const h=z(g,w(this,i));t.add3DMesh(h,this,!0),t.render3D(100)}async drawAxisHisto(){return c.draw(this.getDrawDom(),this.createHistogram(),this.getOptions().Axis)}static async draw(t,i,s){return x._drawGraph(new x(t,i),s)}}export{x as T};
@@ -1 +1 @@
1
- import{aD as A,a3 as R,$ as b,aE as v,aF as E,a0 as T,aA as w,aG as G,a6 as $,a7 as D,a2 as L,az as _,s as N,aH as O}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{drawObjectTitle as Y}from"./TPavePainter-Dx40jhkF.js";const X=L(17);class P extends A{constructor(t,e,r){super(t,e,r),this.$polargram=!0,this.zoom_rmin=this.zoom_rmax=0,this.t0=0,this.mult=1,this.decodeOptions(r),this.setTooltipEnabled(!0)}isNormalAngles(){const t=this.getObject();return t?.fRadian||t?.fGrad||t?.fDegree}decodeOptions(t){const e=new R(t);this.setOptions({rdot:e.check("RDOT"),rangle:e.check("RANGLE",!0)?e.partAsInt():0,NoLabels:e.check("N"),OrthoLabels:e.check("O")}),this.storeDrawOpt(t)}setAnglesRange(t,e,r){if(t>=e&&(e=t+1),r){const i=this.getObject();i.fRwtmin=t,i.fRwtmax=e}this.t0=t,this.mult=2*Math.PI/(e-t)}translate(t,e,r){const i=(t-this.t0)*this.mult;let a=this.r(e),n=a/this.szx*this.szy,o=a*Math.cos(-i),l=n*Math.sin(-i);return r||(o=Math.round(o),l=Math.round(l),a=Math.round(a),n=Math.round(n)),{grx:o,gry:l,rx:a,ry:n}}format(t){return t===Math.round(t)?t.toString():this.ndig>10?t.toExponential(4):t.toFixed(this.ndig>0?this.ndig:0)}axisAsText(t,e){return t==="r"?e===Math.round(e)?e.toString():this.ndig>10?e.toExponential(4):e.toFixed(this.ndig+2):(e*=180/Math.PI,e===Math.round(e)?e.toString():e.toFixed(1))}getFrameRect(){const t=this.getPadPainter(),e=t.getRootPad(!0),r=t.getPadWidth(),i=t.getPadHeight(),a={};return e?(a.szx=Math.round(Math.max(.1,.5-Math.max(e.fLeftMargin,e.fRightMargin))*r),a.szy=Math.round(Math.max(.1,.5-Math.max(e.fBottomMargin,e.fTopMargin))*i)):(a.szx=Math.round(.5*r),a.szy=Math.round(.5*i)),a.width=2*a.szx,a.height=2*a.szy,a.x=Math.round(r/2-a.szx),a.y=Math.round(i/2-a.szy),a.hint_delta_x=a.szx,a.hint_delta_y=a.szy,a.transform=b(a.x,a.y)||"",a}mouseEvent(t,e){let r=null;if(t!=="leave"){const i=v(e,this.getG()?.node());r={x:i[0],y:i[1],touch:!1}}this.processFrameTooltipEvent(r)}mouseWheel(t){t.stopPropagation(),t.preventDefault(),this.processFrameTooltipEvent(null);const e=this.getObject();if(!e)return;let r=t.wheelDelta?-t.wheelDelta:t.deltaY||t.detail;if(!r)return;r=r<0?-.2:.2;let i=this.scale_rmin,a=this.scale_rmax;const n=a-i;a+=r*n,(i<e.fRwrmin||a>e.fRwrmax)&&(i=a=0),(this.zoom_rmin!==i||this.zoom_rmax!==a)&&(this.zoom_rmin=i,this.zoom_rmax=a,this.redrawPad())}mouseDoubleClick(){(this.zoom_rmin||this.zoom_rmax)&&(this.zoom_rmin=this.zoom_rmax=0,this.redrawPad())}async drawPolarLabels(t,e){const r=Math.round(t.fPolarTextSize*this.szy*2),i=this.getOptions();return this.startTextDrawingAsync(t.fPolarLabelFont,r).then(()=>{const a=e===8?["0","#frac{#pi}{4}","#frac{#pi}{2}","#frac{3#pi}{4}","#pi","#frac{5#pi}{4}","#frac{3#pi}{2}","#frac{7#pi}{4}"]:["0","#frac{2#pi}{3}","#frac{4#pi}{3}"],n=[12,11,21,31,32,33,23,13];for(let o=0;o<e;++o){const l=-o*2*Math.PI/e;this.getG().append("svg:path").attr("d",`M0,0L${Math.round(this.szx*Math.cos(l))},${Math.round(this.szy*Math.sin(l))}`).call(this.lineatt.func);let s=12,h=0;if(i.OrthoLabels)h=-o/e*360,h>-271&&h<-91&&(s=32,h+=180);else{const f=Math.round(16-l/Math.PI*4)%8;s=n[f]}this.drawText({align:s,rotate:h,x:Math.round((this.szx+r)*Math.cos(l)),y:Math.round((this.szy+r/this.szx*this.szy)*Math.sin(l)),text:a[o],color:this.getColor(t.fPolarLabelColor),latex:1})}return this.finishTextDrawing()})}async redraw(){if(!this.isMainPainter())return;const t=this.getObject(),e=this.getOptions(),r=this.getPadPainter().getFrameRect(),i=this.createG();b(i,Math.round(r.x+r.width/2),Math.round(r.y+r.height/2)),this.szx=r.szx,this.szy=r.szy,this.scale_rmin=t.fRwrmin,this.scale_rmax=t.fRwrmax,this.zoom_rmin!==this.zoom_rmax&&(this.scale_rmin=this.zoom_rmin,this.scale_rmax=this.zoom_rmax),this.r=E().domain([this.scale_rmin,this.scale_rmax]).range([0,this.szx]),t.fRadian?(t.fRwtmin=0,t.fRwtmax=2*Math.PI):t.fDegree?(t.fRwtmin=0,t.fRwtmax=360):t.fGrad&&(t.fRwtmin=0,t.fRwtmax=200),this.setAnglesRange(t.fRwtmin,t.fRwtmax);const a=this.r.ticks(5);let n=Math.floor(t.fNdivRad%1e4/100),o=t.fNdivPol%100;o!==3&&(o=8),this.createAttLine({attr:t}),this.gridatt||(this.gridatt=this.createAttLine({color:t.fLineColor,style:2,width:1,std:!1}));const l=Math.abs(t.fRwrmax-t.fRwrmin);this.ndig=l<=0?-3:Math.round(Math.log10(a.length/l));let s=[],h=0;for(;h<a.length;){const g=this.format(a[h]);if(s.indexOf(g)>=0){if(++this.ndig>10)break;s=[],h=0;continue}s.push(g),h++}let f=!1;const d=this.isBatchMode()?null:"visibleFill";return a.at(-1)<t.fRwrmax&&this.zoom_rmin===this.zoom_rmax&&(a.push(t.fRwrmax),f=!0),this.startTextDrawingAsync(t.fRadialLabelFont,Math.round(t.fRadialTextSize*this.szy*2)).then(()=>{const g=-(e.rangle||t.fAxisAngle)/180*Math.PI,c=Math.cos(g),M=Math.sin(g);for(let p=0;p<a.length;++p){let u=this.r(a[p]),m=u/this.szx*this.szy;if(i.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(u)).attr("ry",Math.round(m)).style("fill","none").style("pointer-events",d).call(this.lineatt.func),p<a.length-1||!f){const y=c>.7?1:c>0?3:c>-.7?1:3,x=Math.abs(c)<.7?1:3;this.drawText({align:10*y+x,x:Math.round(u*c),y:Math.round(m*M),text:this.format(a[p]),color:this.getColor(t.fRadialLabelColor),latex:0}),e.rdot&&i.append("ellipse").attr("cx",Math.round(u*c)).attr("cy",Math.round(m*M)).attr("rx",3).attr("ry",3).style("fill","red")}if(n>1&&(p<a.length-1||!f)){const y=(a[1]-a[0])/n;for(let x=1;x<n;++x){const z=a[p]+y*x;if(z>this.scale_rmax)break;u=this.r(z),m=u/this.szx*this.szy,i.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(u)).attr("ry",Math.round(m)).style("fill","none").style("pointer-events",d).call(this.gridatt.func)}}}return c<.999&&i.append("path").attr("d",`M0,0L${Math.round(this.szx*c)},${Math.round(this.szy*M)}`).style("pointer-events",d).call(this.lineatt.func),this.finishTextDrawing()}).then(()=>e.NoLabels?!0:this.drawPolarLabels(t,o)).then(()=>{if(n=Math.floor(t.fNdivPol%1e4/100),n>1)for(let g=0;g<o*n;++g){if(g%n===0)continue;const c=-g*2*Math.PI/o/n;i.append("svg:path").attr("d",`M0,0L${Math.round(this.szx*Math.cos(c))},${Math.round(this.szy*Math.sin(c))}`).call(this.gridatt.func)}this.isBatchMode()||(T(this,O),this.assignZoomHandler(i))})}fillContextMenuItems(t){const e=this.getObject(),r=this.getOptions();t.sub("Axis range"),t.addchk(e.fRadian,"Radian",i=>{e.fRadian=i,e.fDegree=e.fGrad=!1,this.interactiveRedraw("pad",i?"exec:SetToRadian()":"exec:SetTwoPi()")},"Handle data angles as radian range 0..2*Pi"),t.addchk(e.fDegree,"Degree",i=>{e.fDegree=i,e.fRadian=e.fGrad=!1,this.interactiveRedraw("pad",i?"exec:SetToDegree()":"exec:SetTwoPi()")},"Handle data angles as degree range 0..360"),t.addchk(e.fGrad,"Grad",i=>{e.fGrad=i,e.fRadian=e.fDegree=!1,this.interactiveRedraw("pad",i?"exec:SetToGrad()":"exec:SetTwoPi()")},"Handle data angles as grad range 0..200"),t.endsub(),t.addSizeMenu("Axis angle",0,315,45,r.rangle||e.fAxisAngle,i=>{r.rangle=e.fAxisAngle=i,this.interactiveRedraw("pad",`exec:SetAxisAngle(${i})`)})}assignZoomHandler(t){t.on("mouseenter",e=>this.mouseEvent("enter",e)).on("mousemove",e=>this.mouseEvent("move",e)).on("mouseleave",e=>this.mouseEvent("leave",e)),w.Zooming&&t.on("dblclick",e=>this.mouseDoubleClick(e)),w.Zooming&&w.ZoomWheel&&t.on("wheel",e=>this.mouseWheel(e))}static async draw(t,e,r){const i=G(t);if(i){if(i.getObject()===e)return i;throw Error("Cannot superimpose TGraphPolargram with any other drawings")}const a=new P(t,e,r);return $(a,!1).then(()=>(a.setAsMainPainter(),a.redraw())).then(()=>a)}}class k extends D{decodeOptions(t){const e=new R(t||"L"),r=e.check("RDOT"),i=e.check("RANGLE",!0)?e.partAsInt():0,a=this.setOptions({mark:e.check("P"),err:e.check("E"),fill:e.check("F"),line:e.check("L"),curve:e.check("C"),radian:e.check("R"),degree:e.check("D"),grad:e.check("G"),Axis:e.check("N")?"N":""},t);e.check("O")&&(a.Axis+="O"),r&&(a.Axis+="_rdot"),i&&(a.Axis+=`_rangle${i}`),this.storeDrawOpt(t)}updateObject(t,e){return this.matchObjectType(t)?(e&&e!==this.getOptions().original&&this.decodeOptions(e),this._draw_axis&&t.fPolargram&&this.getMainPainter().updateObject(t.fPolargram),delete t.fPolargram,Object.assign(this.getObject(),t),!0):!1}async drawTitle(t){return Y(this,t,this._draw_axis,!this.getObject()?.TestBit(X))}async redraw(){return this.drawGraphPolar().then(()=>this.drawTitle())}async drawGraphPolar(){const t=this.getObject(),e=this.getOptions(),r=this.getMainPainter();if(!t||!r?.$polargram)return;e.mark&&this.createAttMarker({attr:t}),(e.err||e.line||e.curve)&&this.createAttLine({attr:t}),e.fill&&this.createAttFill({attr:t});const i=this.createG();if(this._draw_axis&&!r.isNormalAngles()){const s=t.fEX?.length;let h=t.fX[0],f=t.fX[0];for(let d=0;d<t.fNpoints;++d)h=Math.min(h,t.fX[d]-(s?t.fEX[d]:0)),f=Math.max(f,t.fX[d]+(s?t.fEX[d]:0));f+=(f-h)/t.fNpoints,r.setAnglesRange(h,f,!0)}i.attr("transform",r.getG().attr("transform"));let a="",n="";const o=[],l=this.isBatchMode()?null:"visibleFill";for(let s=0;s<t.fNpoints;++s){if(t.fY[s]>r.scale_rmax)continue;if(e.err){const f=r.translate(t.fX[s],t.fY[s]-t.fEY[s]),d=r.translate(t.fX[s],t.fY[s]+t.fEY[s]),g=r.translate(t.fX[s]+t.fEX[s],t.fY[s]),c=r.translate(t.fX[s]-t.fEX[s],t.fY[s]);n+=`M${f.grx},${f.gry}L${d.grx},${d.gry}M${g.grx},${g.gry}A${c.rx},${c.ry},0,0,1,${c.grx},${c.gry}`}const h=r.translate(t.fX[s],t.fY[s]);e.mark&&(a+=this.markeratt.create(h.grx,h.gry)),(e.curve||e.line||e.fill)&&o.push(h)}if((e.fill||e.line)&&o.length){const s=_(o,{line:!0});e.fill&&i.append("svg:path").attr("d",s+"Z").style("pointer-events",l).call(this.fillatt.func),e.line&&i.append("svg:path").attr("d",s).style("fill","none").style("pointer-events",l).call(this.lineatt.func)}e.curve&&o.length&&i.append("svg:path").attr("d",_(o)).style("fill","none").style("pointer-events",l).call(this.lineatt.func),n&&i.append("svg:path").attr("d",n).style("fill","none").style("pointer-events",l).call(this.lineatt.func),a&&i.append("svg:path").attr("d",a).style("pointer-events",l).call(this.markeratt.func),this.isBatchMode()||(T(this,O),r.assignZoomHandler(i))}createPolargram(t){const e=this.getOptions();t.fPolargram||(t.fPolargram=N("TGraphPolargram"),e.radian?t.fPolargram.fRadian=!0:e.degree?t.fPolargram.fDegree=!0:e.grad&&(t.fPolargram.fGrad=!0));let r=t.fY[0]||0,i=r;const a=t.fEY?.length;for(let n=0;n<t.fNpoints;++n)r=Math.min(r,t.fY[n]-(a?t.fEY[n]:0)),i=Math.max(i,t.fY[n]+(a?t.fEY[n]:0));return t.fPolargram.fRwrmin=r-(i-r)*.1,t.fPolargram.fRwrmax=i+(i-r)*.1,t.fPolargram}extractTooltip(t){if(!t)return null;const e=this.getObject(),r=this.getMainPainter();let i=1e10,a=-1,n=null;for(let s=0;s<e.fNpoints;++s){const h=r.translate(e.fX[s],e.fY[s]),f=(h.grx-t.x)**2+(h.gry-t.y)**2;f<i&&(i=f,a=s,n=h)}let o=5;if(this.markeratt?.used&&(o=this.markeratt.getFullSize()),Math.sqrt(i)>o)return null;const l={name:this.getObject().fName,title:this.getObject().fTitle,x:n.grx,y:n.gry,color1:(this.markeratt?.used?this.markeratt.color:void 0)??(this.fillatt?.used?this.fillatt.color:void 0)??this.lineatt?.color,exact:Math.sqrt(i)<4,lines:[this.getObjectHint()],binindx:a,menu_dist:o,radius:o};return l.lines.push(`r = ${r.axisAsText("r",e.fY[a])}`,`phi = ${r.axisAsText("phi",e.fX[a])}`),e.fEY&&e.fEY[a]&&l.lines.push(`error r = ${r.axisAsText("r",e.fEY[a])}`),e.fEX&&e.fEX[a]&&l.lines.push(`error phi = ${r.axisAsText("phi",e.fEX[a])}`),l}showTooltip(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t||!this.getG()){e?.remove();return}e.empty()&&(e=this.getG().append("svg:ellipse").attr("class","tooltip_bin").style("pointer-events","none")),t.changed=e.property("current_bin")!==t.binindx,t.changed&&e.attr("cx",t.x).attr("cy",t.y).attr("rx",Math.round(t.radius)).attr("ry",Math.round(t.radius)).style("fill","none").style("stroke",t.color1).property("current_bin",t.binindx)}processTooltipEvent(t){const e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}static async draw(t,e,r){const i=new k(t,e,r);i.decodeOptions(r);const a=i.getMainPainter();if(a&&!a.$polargram)return console.error("Cannot superimpose TGraphPolar with plain histograms"),null;let n=Promise.resolve(null);return a||(i._draw_axis=!0,n=P.draw(t,i.createPolargram(e),i.options.Axis)),n.then(o=>(o?.setSecondaryId(i,"polargram"),i.addToPadPrimitives(),i.drawGraphPolar())).then(()=>i.drawTitle(!0))}}export{k as TGraphPolarPainter,P as TGraphPolargramPainter};
1
+ import{aD as A,a3 as R,$ as b,aE as v,aF as E,a0 as T,aA as w,aG as G,a6 as $,a7 as D,a2 as L,az as _,s as N,aH as O}from"./ndmvr-aframe-core-DEHQ38JB.js";import{drawObjectTitle as Y}from"./TPavePainter-1yngbgp8.js";const X=L(17);class P extends A{constructor(t,e,r){super(t,e,r),this.$polargram=!0,this.zoom_rmin=this.zoom_rmax=0,this.t0=0,this.mult=1,this.decodeOptions(r),this.setTooltipEnabled(!0)}isNormalAngles(){const t=this.getObject();return t?.fRadian||t?.fGrad||t?.fDegree}decodeOptions(t){const e=new R(t);this.setOptions({rdot:e.check("RDOT"),rangle:e.check("RANGLE",!0)?e.partAsInt():0,NoLabels:e.check("N"),OrthoLabels:e.check("O")}),this.storeDrawOpt(t)}setAnglesRange(t,e,r){if(t>=e&&(e=t+1),r){const i=this.getObject();i.fRwtmin=t,i.fRwtmax=e}this.t0=t,this.mult=2*Math.PI/(e-t)}translate(t,e,r){const i=(t-this.t0)*this.mult;let a=this.r(e),n=a/this.szx*this.szy,o=a*Math.cos(-i),l=n*Math.sin(-i);return r||(o=Math.round(o),l=Math.round(l),a=Math.round(a),n=Math.round(n)),{grx:o,gry:l,rx:a,ry:n}}format(t){return t===Math.round(t)?t.toString():this.ndig>10?t.toExponential(4):t.toFixed(this.ndig>0?this.ndig:0)}axisAsText(t,e){return t==="r"?e===Math.round(e)?e.toString():this.ndig>10?e.toExponential(4):e.toFixed(this.ndig+2):(e*=180/Math.PI,e===Math.round(e)?e.toString():e.toFixed(1))}getFrameRect(){const t=this.getPadPainter(),e=t.getRootPad(!0),r=t.getPadWidth(),i=t.getPadHeight(),a={};return e?(a.szx=Math.round(Math.max(.1,.5-Math.max(e.fLeftMargin,e.fRightMargin))*r),a.szy=Math.round(Math.max(.1,.5-Math.max(e.fBottomMargin,e.fTopMargin))*i)):(a.szx=Math.round(.5*r),a.szy=Math.round(.5*i)),a.width=2*a.szx,a.height=2*a.szy,a.x=Math.round(r/2-a.szx),a.y=Math.round(i/2-a.szy),a.hint_delta_x=a.szx,a.hint_delta_y=a.szy,a.transform=b(a.x,a.y)||"",a}mouseEvent(t,e){let r=null;if(t!=="leave"){const i=v(e,this.getG()?.node());r={x:i[0],y:i[1],touch:!1}}this.processFrameTooltipEvent(r)}mouseWheel(t){t.stopPropagation(),t.preventDefault(),this.processFrameTooltipEvent(null);const e=this.getObject();if(!e)return;let r=t.wheelDelta?-t.wheelDelta:t.deltaY||t.detail;if(!r)return;r=r<0?-.2:.2;let i=this.scale_rmin,a=this.scale_rmax;const n=a-i;a+=r*n,(i<e.fRwrmin||a>e.fRwrmax)&&(i=a=0),(this.zoom_rmin!==i||this.zoom_rmax!==a)&&(this.zoom_rmin=i,this.zoom_rmax=a,this.redrawPad())}mouseDoubleClick(){(this.zoom_rmin||this.zoom_rmax)&&(this.zoom_rmin=this.zoom_rmax=0,this.redrawPad())}async drawPolarLabels(t,e){const r=Math.round(t.fPolarTextSize*this.szy*2),i=this.getOptions();return this.startTextDrawingAsync(t.fPolarLabelFont,r).then(()=>{const a=e===8?["0","#frac{#pi}{4}","#frac{#pi}{2}","#frac{3#pi}{4}","#pi","#frac{5#pi}{4}","#frac{3#pi}{2}","#frac{7#pi}{4}"]:["0","#frac{2#pi}{3}","#frac{4#pi}{3}"],n=[12,11,21,31,32,33,23,13];for(let o=0;o<e;++o){const l=-o*2*Math.PI/e;this.getG().append("svg:path").attr("d",`M0,0L${Math.round(this.szx*Math.cos(l))},${Math.round(this.szy*Math.sin(l))}`).call(this.lineatt.func);let s=12,h=0;if(i.OrthoLabels)h=-o/e*360,h>-271&&h<-91&&(s=32,h+=180);else{const f=Math.round(16-l/Math.PI*4)%8;s=n[f]}this.drawText({align:s,rotate:h,x:Math.round((this.szx+r)*Math.cos(l)),y:Math.round((this.szy+r/this.szx*this.szy)*Math.sin(l)),text:a[o],color:this.getColor(t.fPolarLabelColor),latex:1})}return this.finishTextDrawing()})}async redraw(){if(!this.isMainPainter())return;const t=this.getObject(),e=this.getOptions(),r=this.getPadPainter().getFrameRect(),i=this.createG();b(i,Math.round(r.x+r.width/2),Math.round(r.y+r.height/2)),this.szx=r.szx,this.szy=r.szy,this.scale_rmin=t.fRwrmin,this.scale_rmax=t.fRwrmax,this.zoom_rmin!==this.zoom_rmax&&(this.scale_rmin=this.zoom_rmin,this.scale_rmax=this.zoom_rmax),this.r=E().domain([this.scale_rmin,this.scale_rmax]).range([0,this.szx]),t.fRadian?(t.fRwtmin=0,t.fRwtmax=2*Math.PI):t.fDegree?(t.fRwtmin=0,t.fRwtmax=360):t.fGrad&&(t.fRwtmin=0,t.fRwtmax=200),this.setAnglesRange(t.fRwtmin,t.fRwtmax);const a=this.r.ticks(5);let n=Math.floor(t.fNdivRad%1e4/100),o=t.fNdivPol%100;o!==3&&(o=8),this.createAttLine({attr:t}),this.gridatt||(this.gridatt=this.createAttLine({color:t.fLineColor,style:2,width:1,std:!1}));const l=Math.abs(t.fRwrmax-t.fRwrmin);this.ndig=l<=0?-3:Math.round(Math.log10(a.length/l));let s=[],h=0;for(;h<a.length;){const g=this.format(a[h]);if(s.indexOf(g)>=0){if(++this.ndig>10)break;s=[],h=0;continue}s.push(g),h++}let f=!1;const d=this.isBatchMode()?null:"visibleFill";return a.at(-1)<t.fRwrmax&&this.zoom_rmin===this.zoom_rmax&&(a.push(t.fRwrmax),f=!0),this.startTextDrawingAsync(t.fRadialLabelFont,Math.round(t.fRadialTextSize*this.szy*2)).then(()=>{const g=-(e.rangle||t.fAxisAngle)/180*Math.PI,c=Math.cos(g),M=Math.sin(g);for(let p=0;p<a.length;++p){let u=this.r(a[p]),m=u/this.szx*this.szy;if(i.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(u)).attr("ry",Math.round(m)).style("fill","none").style("pointer-events",d).call(this.lineatt.func),p<a.length-1||!f){const y=c>.7?1:c>0?3:c>-.7?1:3,x=Math.abs(c)<.7?1:3;this.drawText({align:10*y+x,x:Math.round(u*c),y:Math.round(m*M),text:this.format(a[p]),color:this.getColor(t.fRadialLabelColor),latex:0}),e.rdot&&i.append("ellipse").attr("cx",Math.round(u*c)).attr("cy",Math.round(m*M)).attr("rx",3).attr("ry",3).style("fill","red")}if(n>1&&(p<a.length-1||!f)){const y=(a[1]-a[0])/n;for(let x=1;x<n;++x){const z=a[p]+y*x;if(z>this.scale_rmax)break;u=this.r(z),m=u/this.szx*this.szy,i.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(u)).attr("ry",Math.round(m)).style("fill","none").style("pointer-events",d).call(this.gridatt.func)}}}return c<.999&&i.append("path").attr("d",`M0,0L${Math.round(this.szx*c)},${Math.round(this.szy*M)}`).style("pointer-events",d).call(this.lineatt.func),this.finishTextDrawing()}).then(()=>e.NoLabels?!0:this.drawPolarLabels(t,o)).then(()=>{if(n=Math.floor(t.fNdivPol%1e4/100),n>1)for(let g=0;g<o*n;++g){if(g%n===0)continue;const c=-g*2*Math.PI/o/n;i.append("svg:path").attr("d",`M0,0L${Math.round(this.szx*Math.cos(c))},${Math.round(this.szy*Math.sin(c))}`).call(this.gridatt.func)}this.isBatchMode()||(T(this,O),this.assignZoomHandler(i))})}fillContextMenuItems(t){const e=this.getObject(),r=this.getOptions();t.sub("Axis range"),t.addchk(e.fRadian,"Radian",i=>{e.fRadian=i,e.fDegree=e.fGrad=!1,this.interactiveRedraw("pad",i?"exec:SetToRadian()":"exec:SetTwoPi()")},"Handle data angles as radian range 0..2*Pi"),t.addchk(e.fDegree,"Degree",i=>{e.fDegree=i,e.fRadian=e.fGrad=!1,this.interactiveRedraw("pad",i?"exec:SetToDegree()":"exec:SetTwoPi()")},"Handle data angles as degree range 0..360"),t.addchk(e.fGrad,"Grad",i=>{e.fGrad=i,e.fRadian=e.fDegree=!1,this.interactiveRedraw("pad",i?"exec:SetToGrad()":"exec:SetTwoPi()")},"Handle data angles as grad range 0..200"),t.endsub(),t.addSizeMenu("Axis angle",0,315,45,r.rangle||e.fAxisAngle,i=>{r.rangle=e.fAxisAngle=i,this.interactiveRedraw("pad",`exec:SetAxisAngle(${i})`)})}assignZoomHandler(t){t.on("mouseenter",e=>this.mouseEvent("enter",e)).on("mousemove",e=>this.mouseEvent("move",e)).on("mouseleave",e=>this.mouseEvent("leave",e)),w.Zooming&&t.on("dblclick",e=>this.mouseDoubleClick(e)),w.Zooming&&w.ZoomWheel&&t.on("wheel",e=>this.mouseWheel(e))}static async draw(t,e,r){const i=G(t);if(i){if(i.getObject()===e)return i;throw Error("Cannot superimpose TGraphPolargram with any other drawings")}const a=new P(t,e,r);return $(a,!1).then(()=>(a.setAsMainPainter(),a.redraw())).then(()=>a)}}class k extends D{decodeOptions(t){const e=new R(t||"L"),r=e.check("RDOT"),i=e.check("RANGLE",!0)?e.partAsInt():0,a=this.setOptions({mark:e.check("P"),err:e.check("E"),fill:e.check("F"),line:e.check("L"),curve:e.check("C"),radian:e.check("R"),degree:e.check("D"),grad:e.check("G"),Axis:e.check("N")?"N":""},t);e.check("O")&&(a.Axis+="O"),r&&(a.Axis+="_rdot"),i&&(a.Axis+=`_rangle${i}`),this.storeDrawOpt(t)}updateObject(t,e){return this.matchObjectType(t)?(e&&e!==this.getOptions().original&&this.decodeOptions(e),this._draw_axis&&t.fPolargram&&this.getMainPainter().updateObject(t.fPolargram),delete t.fPolargram,Object.assign(this.getObject(),t),!0):!1}async drawTitle(t){return Y(this,t,this._draw_axis,!this.getObject()?.TestBit(X))}async redraw(){return this.drawGraphPolar().then(()=>this.drawTitle())}async drawGraphPolar(){const t=this.getObject(),e=this.getOptions(),r=this.getMainPainter();if(!t||!r?.$polargram)return;e.mark&&this.createAttMarker({attr:t}),(e.err||e.line||e.curve)&&this.createAttLine({attr:t}),e.fill&&this.createAttFill({attr:t});const i=this.createG();if(this._draw_axis&&!r.isNormalAngles()){const s=t.fEX?.length;let h=t.fX[0],f=t.fX[0];for(let d=0;d<t.fNpoints;++d)h=Math.min(h,t.fX[d]-(s?t.fEX[d]:0)),f=Math.max(f,t.fX[d]+(s?t.fEX[d]:0));f+=(f-h)/t.fNpoints,r.setAnglesRange(h,f,!0)}i.attr("transform",r.getG().attr("transform"));let a="",n="";const o=[],l=this.isBatchMode()?null:"visibleFill";for(let s=0;s<t.fNpoints;++s){if(t.fY[s]>r.scale_rmax)continue;if(e.err){const f=r.translate(t.fX[s],t.fY[s]-t.fEY[s]),d=r.translate(t.fX[s],t.fY[s]+t.fEY[s]),g=r.translate(t.fX[s]+t.fEX[s],t.fY[s]),c=r.translate(t.fX[s]-t.fEX[s],t.fY[s]);n+=`M${f.grx},${f.gry}L${d.grx},${d.gry}M${g.grx},${g.gry}A${c.rx},${c.ry},0,0,1,${c.grx},${c.gry}`}const h=r.translate(t.fX[s],t.fY[s]);e.mark&&(a+=this.markeratt.create(h.grx,h.gry)),(e.curve||e.line||e.fill)&&o.push(h)}if((e.fill||e.line)&&o.length){const s=_(o,{line:!0});e.fill&&i.append("svg:path").attr("d",s+"Z").style("pointer-events",l).call(this.fillatt.func),e.line&&i.append("svg:path").attr("d",s).style("fill","none").style("pointer-events",l).call(this.lineatt.func)}e.curve&&o.length&&i.append("svg:path").attr("d",_(o)).style("fill","none").style("pointer-events",l).call(this.lineatt.func),n&&i.append("svg:path").attr("d",n).style("fill","none").style("pointer-events",l).call(this.lineatt.func),a&&i.append("svg:path").attr("d",a).style("pointer-events",l).call(this.markeratt.func),this.isBatchMode()||(T(this,O),r.assignZoomHandler(i))}createPolargram(t){const e=this.getOptions();t.fPolargram||(t.fPolargram=N("TGraphPolargram"),e.radian?t.fPolargram.fRadian=!0:e.degree?t.fPolargram.fDegree=!0:e.grad&&(t.fPolargram.fGrad=!0));let r=t.fY[0]||0,i=r;const a=t.fEY?.length;for(let n=0;n<t.fNpoints;++n)r=Math.min(r,t.fY[n]-(a?t.fEY[n]:0)),i=Math.max(i,t.fY[n]+(a?t.fEY[n]:0));return t.fPolargram.fRwrmin=r-(i-r)*.1,t.fPolargram.fRwrmax=i+(i-r)*.1,t.fPolargram}extractTooltip(t){if(!t)return null;const e=this.getObject(),r=this.getMainPainter();let i=1e10,a=-1,n=null;for(let s=0;s<e.fNpoints;++s){const h=r.translate(e.fX[s],e.fY[s]),f=(h.grx-t.x)**2+(h.gry-t.y)**2;f<i&&(i=f,a=s,n=h)}let o=5;if(this.markeratt?.used&&(o=this.markeratt.getFullSize()),Math.sqrt(i)>o)return null;const l={name:this.getObject().fName,title:this.getObject().fTitle,x:n.grx,y:n.gry,color1:(this.markeratt?.used?this.markeratt.color:void 0)??(this.fillatt?.used?this.fillatt.color:void 0)??this.lineatt?.color,exact:Math.sqrt(i)<4,lines:[this.getObjectHint()],binindx:a,menu_dist:o,radius:o};return l.lines.push(`r = ${r.axisAsText("r",e.fY[a])}`,`phi = ${r.axisAsText("phi",e.fX[a])}`),e.fEY&&e.fEY[a]&&l.lines.push(`error r = ${r.axisAsText("r",e.fEY[a])}`),e.fEX&&e.fEX[a]&&l.lines.push(`error phi = ${r.axisAsText("phi",e.fEX[a])}`),l}showTooltip(t){let e=this.getG()?.selectChild(".tooltip_bin");if(!t||!this.getG()){e?.remove();return}e.empty()&&(e=this.getG().append("svg:ellipse").attr("class","tooltip_bin").style("pointer-events","none")),t.changed=e.property("current_bin")!==t.binindx,t.changed&&e.attr("cx",t.x).attr("cy",t.y).attr("rx",Math.round(t.radius)).attr("ry",Math.round(t.radius)).style("fill","none").style("stroke",t.color1).property("current_bin",t.binindx)}processTooltipEvent(t){const e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}static async draw(t,e,r){const i=new k(t,e,r);i.decodeOptions(r);const a=i.getMainPainter();if(a&&!a.$polargram)return console.error("Cannot superimpose TGraphPolar with plain histograms"),null;let n=Promise.resolve(null);return a||(i._draw_axis=!0,n=P.draw(t,i.createPolargram(e),i.options.Axis)),n.then(o=>(o?.setSecondaryId(i,"polargram"),i.addToPadPrimitives(),i.drawGraphPolar())).then(()=>i.drawTitle(!0))}}export{k as TGraphPolarPainter,P as TGraphPolargramPainter};
@@ -1 +1 @@
1
- import{a7 as o,aq as f,a3 as c,ar as m,as as n}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{T as u}from"./TH1Painter--tuoUZTH.js";import"./THistPainter-Df-RmCQH.js";import"./TPavePainter-Dx40jhkF.js";import"./func-C1jNXIub.js";class h extends o{#t;#i;#r;#e;constructor(e,t,i){super(e,t,i),this.decodeOptions(i),this.#i="grtime_"+f.id_counter++}redraw(){this.#t===void 0&&this.startDrawing()}decodeOptions(e){const t=new c(e||"REPEAT");this.setOptions({once:t.check("ONCE"),repeat:t.check("REPEAT"),first:t.check("FIRST")}),this.storeDrawOpt(e)}async drawPrimitives(e){const t=this.getObject()?.fSteps.arr[this.#t];if(!t||e>=t.arr.length)return;const i=t.arr[e],r=t.opt[e]+(i._typename===m?";no_interactive":"");return n(this.getPadPainter(),i,r).then(s=>(s&&(s.$grtimeid=this.#i,s.$grstep=this.#t),this.drawPrimitives(e+1)))}continueDrawing(){const e=this.getObject(),t=this.getOptions();if(t.first){this.#t=void 0;return}if(this.#r){this.#r=void 0;const i=this.getPadPainter();if(!i){this.#t=void 0;return}this.drawPrimitives(0).then(()=>{i.cleanPrimitives(r=>r.$grtimeid===this.#i&&r.$grstep!==this.#t),this.continueDrawing()})}else if(this.#e)clearTimeout(this.#e),this.#e=void 0,this.#r=!0,requestAnimationFrame(()=>this.continueDrawing());else{let i=Math.max(e.fSleepTime,10);if(++this.#t>e.fSteps.arr.length)if(t.repeat)this.#t=0,i=Math.max(5e3,5*i);else{this.#t=void 0;return}this.#e=setTimeout(()=>this.continueDrawing(),i)}}startDrawing(){return this.#t=0,this.drawPrimitives(0).then(()=>(this.continueDrawing(),this))}static async draw(e,t,i){if(!t.fFrame)return console.error("Frame histogram not exists"),null;const r=new h(e,t,i);if(r.getMainPainter())return console.error("Cannot draw graph time on top of other histograms"),null;if(!t.fFrame.fTitle&&t.fTitle){const s=t.fTitle.split(";");t.fFrame.fTitle=s[0],s[1]&&(t.fFrame.fXaxis.fTitle=s[1]),s[2]&&(t.fFrame.fYaxis.fTitle=s[2])}return u.draw(e,t.fFrame,"").then(()=>(r.addToPadPrimitives(),r.startDrawing()))}}async function P(a,e){return n(a,e._hist,"hist").then(async t=>{const i=[];for(let r=0;r<e._items.arr.length;++r)i.push(n(a,e._items.arr[r],e._items.opt[r]));return Promise.all(i).then(()=>t)})}export{h as TGraphTimePainter,P as drawRooPlot};
1
+ import{a7 as o,aq as f,a3 as c,ar as m,as as n}from"./ndmvr-aframe-core-DEHQ38JB.js";import{T as u}from"./TH1Painter-DyN-WKyv.js";import"./THistPainter-B2S5BnuY.js";import"./TPavePainter-1yngbgp8.js";import"./func-C6FX2eN2.js";class h extends o{#t;#i;#r;#e;constructor(e,t,i){super(e,t,i),this.decodeOptions(i),this.#i="grtime_"+f.id_counter++}redraw(){this.#t===void 0&&this.startDrawing()}decodeOptions(e){const t=new c(e||"REPEAT");this.setOptions({once:t.check("ONCE"),repeat:t.check("REPEAT"),first:t.check("FIRST")}),this.storeDrawOpt(e)}async drawPrimitives(e){const t=this.getObject()?.fSteps.arr[this.#t];if(!t||e>=t.arr.length)return;const i=t.arr[e],r=t.opt[e]+(i._typename===m?";no_interactive":"");return n(this.getPadPainter(),i,r).then(s=>(s&&(s.$grtimeid=this.#i,s.$grstep=this.#t),this.drawPrimitives(e+1)))}continueDrawing(){const e=this.getObject(),t=this.getOptions();if(t.first){this.#t=void 0;return}if(this.#r){this.#r=void 0;const i=this.getPadPainter();if(!i){this.#t=void 0;return}this.drawPrimitives(0).then(()=>{i.cleanPrimitives(r=>r.$grtimeid===this.#i&&r.$grstep!==this.#t),this.continueDrawing()})}else if(this.#e)clearTimeout(this.#e),this.#e=void 0,this.#r=!0,requestAnimationFrame(()=>this.continueDrawing());else{let i=Math.max(e.fSleepTime,10);if(++this.#t>e.fSteps.arr.length)if(t.repeat)this.#t=0,i=Math.max(5e3,5*i);else{this.#t=void 0;return}this.#e=setTimeout(()=>this.continueDrawing(),i)}}startDrawing(){return this.#t=0,this.drawPrimitives(0).then(()=>(this.continueDrawing(),this))}static async draw(e,t,i){if(!t.fFrame)return console.error("Frame histogram not exists"),null;const r=new h(e,t,i);if(r.getMainPainter())return console.error("Cannot draw graph time on top of other histograms"),null;if(!t.fFrame.fTitle&&t.fTitle){const s=t.fTitle.split(";");t.fFrame.fTitle=s[0],s[1]&&(t.fFrame.fXaxis.fTitle=s[1]),s[2]&&(t.fFrame.fYaxis.fTitle=s[2])}return u.draw(e,t.fFrame,"").then(()=>(r.addToPadPrimitives(),r.startDrawing()))}}async function P(a,e){return n(a,e._hist,"hist").then(async t=>{const i=[];for(let r=0;r<e._items.arr.length;++r)i.push(n(a,e._items.arr[r],e._items.opt[r]));return Promise.all(i).then(()=>t)})}export{h as TGraphTimePainter,P as drawRooPlot};
@@ -1 +1 @@
1
- import{ae as d,bn as l,bo as c}from"./ndmvr-aframe-core-Cw91_9_Y.js";import{b as m,d as u}from"./hist3d-DCmav5Ga.js";import{T as p}from"./THistPainter-Df-RmCQH.js";import{T as h}from"./TH1Painter--tuoUZTH.js";import"./latex3d-ITrfFgp8.js";import"./TH2Painter-DHaL_lR_.js";import"./TPavePainter-Dx40jhkF.js";import"./func-C1jNXIub.js";class a extends h{async draw3D(i){this.mode3d=!0;const e=this.getFramePainter(),t=this.isMainPainter(),r=this.getOptions();r.zmult=1+2*d.fHistTopMargin;let s=Promise.resolve(!0),n=!0;if(i==="resize"){const o=t?e.resize3D():!1;o!==1&&(n=!1,o&&e.render3D())}return n&&(this.createHistDrawAttributes(!0),this.scanContent(i==="zoom"),t&&(s=m(this,l,r.Render3D)),e.mode3d&&(s=s.then(()=>{u(this),e.render3D(),this.updateStatWebCanvas(),e.addKeysHandler()}))),t&&(s=s.then(()=>this.drawColorPalette(r.Zscale&&r.canHavePalette()))),s.then(()=>this.updateFunctions()).then(()=>this.updateHistTitle()).then(()=>this)}static async build3d(i,e){const t=new a(null,i);t.decodeOptions(e),t.scanContent(),t.createHistDrawAttributes(!0),t.options.zmult=1+2*d.fHistTopMargin;const r=new c(null,null);return t.getFramePainter=()=>r,m(t,l).then(()=>u(t)).then(()=>r.create3DScene(-1,!0))}static async draw(i,e,t){return p._drawHist(new a(i,e),t)}}export{a as TH1Painter};
1
+ import{ae as d,bn as l,bo as c}from"./ndmvr-aframe-core-DEHQ38JB.js";import{b as m,d as u}from"./hist3d-D9VevdP6.js";import{T as p}from"./THistPainter-B2S5BnuY.js";import{T as h}from"./TH1Painter-DyN-WKyv.js";import"./latex3d-8Hbnfz6c.js";import"./TH2Painter-BpixRP4j.js";import"./TPavePainter-1yngbgp8.js";import"./func-C6FX2eN2.js";class a extends h{async draw3D(i){this.mode3d=!0;const e=this.getFramePainter(),t=this.isMainPainter(),r=this.getOptions();r.zmult=1+2*d.fHistTopMargin;let s=Promise.resolve(!0),n=!0;if(i==="resize"){const o=t?e.resize3D():!1;o!==1&&(n=!1,o&&e.render3D())}return n&&(this.createHistDrawAttributes(!0),this.scanContent(i==="zoom"),t&&(s=m(this,l,r.Render3D)),e.mode3d&&(s=s.then(()=>{u(this),e.render3D(),this.updateStatWebCanvas(),e.addKeysHandler()}))),t&&(s=s.then(()=>this.drawColorPalette(r.Zscale&&r.canHavePalette()))),s.then(()=>this.updateFunctions()).then(()=>this.updateHistTitle()).then(()=>this)}static async build3d(i,e){const t=new a(null,i);t.decodeOptions(e),t.scanContent(),t.createHistDrawAttributes(!0),t.options.zmult=1+2*d.fHistTopMargin;const r=new c(null,null);return t.getFramePainter=()=>r,m(t,l).then(()=>u(t)).then(()=>r.create3DScene(-1,!0))}static async draw(i,e,t){return p._drawHist(new a(i,e),t)}}export{a as TH1Painter};