3279 const Int_t big = 9999;
3280 const Int_t kMaxDiff = 7;
3283 return fPie->DistancetoPrimitive(px, py);
3292 Int_t curdist = big;
3293 Int_t yxaxis, dyaxis,xyaxis, dxaxis;
3296 if (!PadPointer)
return 0;
3310 if (d3 <= kMaxDiff) {
gPad->SetSelected(
fZaxis);
return 0;}
3312 if (d1 <= kMaxDiff) {
gPad->SetSelected(
fXaxis);
return 0;}
3314 if (d2 <= kMaxDiff) {
gPad->SetSelected(
fYaxis);
return 0;}
3315 if ( px > puxmin && px < puxmax && py > puymax && py < puymin) curdist = 1;
3326 if (px <= xyaxis+dyaxis && px >= xyaxis && py >puymax && py < puymin) {
3335 if (px >= xyaxis-dyaxis && px <= xyaxis && py >puymax && py < puymin) {
3347 if (py >= yxaxis-dxaxis && py <= yxaxis && px <puxmax && px > puxmin) {
3356 if (yxaxis < puymin) yxaxis = puymin;
3357 if (py <= yxaxis+dxaxis && py >= yxaxis && px <puxmax && px > puxmin) {
3367 if ((px > puxmin) && (py < puymin) && (px < puxmax) && (py > puymax))
3383 Int_t bin =
th2->FindBin(pxu, pyu);
3384 if (bin>0) curdist = 1;
3390 if ( px > puxmin + delta2
3391 && px < puxmax - delta2
3392 && py > puymax + delta2
3393 && py < puymin - delta2) {curdist =1;
goto FUNCTIONS;}
3397 if (
gPad->IsVertical()) {
3402 if (binval == 0 && pybin < puymin) pybin = 10000;
3408 for (
Int_t ibin=bin+1; ibin<binsup; ibin++) {
3410 if (binvalmin>binvaltmp) binvalmin=binvaltmp;
3411 if (binvalmax<binvaltmp) binvalmax=binvaltmp;
3413 Int_t pybinmin =
gPad->YtoAbsPixel(
gPad->YtoPad(binvalmax));
3414 Int_t pybinmax =
gPad->YtoAbsPixel(
gPad->YtoPad(binvalmin));
3415 if (py<pybinmax+kMaxDiff/2 && py>pybinmin-kMaxDiff/2) pybin = py;
3417 if (bin != binsup) {
3419 Int_t pybinsub =
gPad->YtoAbsPixel(
gPad->YtoPad(binsupval));
3420 if (py <=
TMath::Max(pybinsub,pybin) && py >=
TMath::Min(pybinsub,pybin) && pybin != 10000)
return 0;
3430 if (binval == 0 && pxbin > puxmin) pxbin = 10000;
3436 for (
Int_t ibin=bin+1; ibin<binsup; ibin++) {
3438 if (binvalmin>binvaltmp) binvalmin=binvaltmp;
3439 if (binvalmax<binvaltmp) binvalmax=binvaltmp;
3441 Int_t pxbinmin =
gPad->XtoAbsPixel(
gPad->XtoPad(binvalmax));
3442 Int_t pxbinmax =
gPad->XtoAbsPixel(
gPad->XtoPad(binvalmin));
3443 if (px<pxbinmax+kMaxDiff/2 && px>pxbinmin-kMaxDiff/2) pxbin = px;
3453 if (
f->InheritsFrom(
TF1::Class())) dist =
f->DistancetoPrimitive(-px,py);
3454 else dist =
f->DistancetoPrimitive(px,py);
3455 if (dist < kMaxDiff) {
gPad->SetSelected(
f);
return dist;}
3468 Error(
"DrawPanel",
"need to draw histogram first");
3473 gROOT->ProcessLine(
TString::Format(
"((TCanvas*)0x%zx)->Selected((TVirtualPad*)0x%zx,(TObject*)0x%zx,1)",
3496 const char *opt = parent.
OpaqueMoving() ?
"izoombox" :
"ilzoombox";
3538 auto &parent = *
gPad;
3541 TView *view = parent.GetView();
3547 Bool_t opaque = parent.OpaqueMoving();
3556 if (hopt.
Index(
"same") >= 0) {
3557 TIter next(parent.GetListOfPrimitives());
3558 while (
auto obj = next()) {
3559 if (
auto h1 =
dynamic_cast<TH1 *
>(obj)) {
3585 if ((dimension == 1) &&
gROOT->GetEditHistograms()) {
3593 h1edit->xup = h1edit->xlow + barwidth*binwidth;
3596 if (!h1edit->factor)
3597 h1edit->factor = 1.;
3606 if ((dimension == 1) && h1edit) {
3607 Double_t yup = parent.PadtoY(parent.AbsPixeltoY(py)) / h1edit->factor;
3611 parent.PaintBox(parent.XtoPad(h1edit->xlow), parent.YtoPad(h1edit->y0), parent.XtoPad(h1edit->xup), parent.YtoPad(yup),
"ilh1edit");
3612 parent.UpdateAsync();
3617 if (zoombox && dimension == 2)
3624 if (dimension == 2) {
3641 if (dimension == 2) {
3647 if (resetXaxisRange)
3654 if (resetYaxisRange)
3663 if ((dimension == 1) && h1edit) {
3668 if ((dimension == 2) && zoombox)
3669 zoombox->ChangeRange(xaxis, yaxis);
3670 parent.FreeInteractive(
this);
3681 event = parent.GetCanvasImp()->RequestLocator(px, py);
3705 if (!dt && !dtOld)
return nullptr;
3710 ((
THistPainter*)
this)->fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
3722 if (!
gPad)
return (
char*)
"";
3732 if (
gPad->GetView() || drawOption.
Index(
"cont") >= 0) {
3733 uxmin=
gPad->GetUxmin();
3734 uxmax=
gPad->GetUxmax();
3738 uymin=
gPad->GetUymin();
3739 uymax=
gPad->GetUymax();
3745 Int_t binx,biny,binmin=0,binx1;
3746 if (
gPad->IsVertical()) {
3748 if (drawOption.
Index(
"same") >= 0) {
3750 TIter next(
gPad->GetListOfPrimitives());
3751 while ((
h1 = (
TH1 *)next())) {
3764 for (
Int_t ibin=binx+1; ibin<binx1; ibin++) {
3776 if (drawOption.
Index(
"same") >= 0) {
3778 TIter next(
gPad->GetListOfPrimitives());
3779 while ((
h1 = (
TH1 *)next())) {
3792 for (
Int_t ibin=binx+1; ibin<binx1; ibin++) {
3818 biny =
th2->FindBin(
x,
y);
3820 th2->GetBinTitle(biny),
x,
y,biny,
th2->GetBinContent(biny));
3826 fObjectInfo.
Form(
"(x=%g, y=%g, binx=%d, biny=%d, binc=%g, bine=%g, binn=%d)",
3882 if (!changedBin)
return;
3908 if (
gPad->GetLogx()) {
3912 if (
gPad->GetLogy()) {
3919 if (
gPad->IsVertical()) {
3921 if ((hcenter < uxmin) || (hcenter > uxmax))
return;
3924 if ((hcenter < uymin) || (hcenter > uymax))
return;
3928 if ((hcenter < uymin) || (hcenter > uymax))
return;
3933 if (
gPad->IsVertical()) {
4023 Int_t nch = strlen(choptin);
4024 strlcpy(chopt,choptin,128);
4052 for (
Int_t i=0;i<nch;i++) chopt[i] = toupper(chopt[i]);
4058 char *l1 = strstr(chopt,
"PFC");
4059 char *l2 = strstr(chopt,
"PLC");
4060 char *l3 = strstr(chopt,
"PMC");
4061 if (l1 || l2 || l3) {
4069 l = strstr(chopt,
"MIN0");
4075 l = strstr(chopt,
"SPEC");
4080 l = strstr(chopt,
"BF(");
4082 if (sscanf(&
l[3],
"%d",&bs) > 0) {
4095 l = strstr(chopt,
"GL");
4099 l = strstr(chopt,
"X+");
4104 l = strstr(chopt,
"Y+");
4112 l = strstr(chopt,
"SAMES");
4119 l = strstr(chopt,
"SAME");
4127 l = strstr(chopt,
"SCAT");
4129 Warning(
"MakeChopt",
"option SCAT is deprecated.");
4135 l = strstr(chopt,
"PIE");
4142 l = strstr(chopt,
"CANDLE");
4149 l = strstr(chopt,
"VIOLIN");
4156 l = strstr(chopt,
"LEGO");
4167 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4170 l = strstr(chopt,
"SURF");
4185 l = strstr(chopt,
"TF3");
4192 l = strstr(chopt,
"ISO");
4200 l = strstr(chopt,
"LIST");
if (
l) {
Hoption.
List = 1; memcpy(
l,
" ",4);}
4202 l = strstr(chopt,
"CONT");
4217 l = strstr(chopt,
"HBAR");
4226 l = strstr(chopt,
"BAR");
4236 l = strstr(chopt,
"ARR" );
4242 l = strstr(chopt,
"COL");
if (
l) {
Hoption.
Arrow = 2; memcpy(
l,
" ",3); }
4248 l = strstr(chopt,
"BOX" );
4261 l = strstr(chopt,
"TEXT");
4264 if (sscanf(&
l[4],
"%d",&
angle) > 0) {
4272 l = strstr(chopt,
"N");
4276 l = strstr(chopt,
"COLZ");
4280 explicitColor =
kTRUE;
4284 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4290 l = strstr(chopt,
"COL" );
4294 explicitColor =
kTRUE;
4297 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4305 l = strstr(chopt,
"AXIS");
if (
l) {
Hoption.
Axis = 1; memcpy(
l,
" ",4); }
4306 l = strstr(chopt,
"AXIG");
if (
l) {
Hoption.
Axis = 2; memcpy(
l,
" ",4); }
4307 l = strstr(chopt,
"SCAT");
if (
l) {
Hoption.
Scat = 1; memcpy(
l,
" ",4); }
4315 l = strstr(chopt,
"TRI");
4321 l = strstr(chopt,
"ERR");
if (
l) memcpy(
l,
" ",3);
4324 l = strstr(chopt,
"AITOFF");
4328 l = strstr(chopt,
"MERCATOR");
4332 l = strstr(chopt,
"SINUSOIDAL");
4336 l = strstr(chopt,
"PARABOLIC");
4340 l = strstr(chopt,
"MOLLWEIDE");
4366 if (strstr(chopt,
"E")) {
4376 if (strstr(chopt,
"X0")) {
4399 Warning(
"MakeChopt",
"option SURF5 is not supported in Cartesian and Polar modes");
4420 char *left = (
char*)strchr(choptin,
'[');
4421 if (!left)
return 0;
4422 char *right = (
char*)strchr(choptin,
']');
4423 if (!right)
return 0;
4424 Int_t nch = right-left;
4425 if (nch < 2)
return 0;
4426 char *cuts = left+1;
4428 char *comma, *minus;
4431 comma = strchr(cuts,
',');
4432 if (comma) *comma = 0;
4433 minus = strchr(cuts,
'-');
4434 if (minus) cuts = minus+1;
4435 while (*cuts ==
' ') cuts++;
4436 Int_t nc = strlen(cuts);
4437 while (cuts[nc-1] ==
' ') {cuts[nc-1] = 0; nc--;}
4441 while ((obj = next())) {
4443 if (strcmp(obj->
GetName(),cuts))
continue;
4456 for (i=0;i<=nch;i++) left[i] =
' ';
4484 gROOT->ProcessLineFast(
TString::Format(
"TSpectrum2Painter::PaintSpectrum((TH2F*)0x%zx,\"%s\",%d)",
4497 fPie = std::make_unique<TPie>(
fH);
4500 Error(
"Paint",
"Option PIE is for 1D histograms only");
4534 Int_t logysav=0, logzsav=0;
4571 gPad->RangeAxisChanged();
4589 if (gridx)
gPad->SetGridx(0);
4590 if (gridy)
gPad->SetGridy(0);
4592 if (gridx)
gPad->SetGridx(1);
4593 if (gridy)
gPad->SetGridy(1);
4628 if (gridx)
gPad->SetGridx(0);
4629 if (gridy)
gPad->SetGridy(0);
4631 if (gridx)
gPad->SetGridx(1);
4632 if (gridy)
gPad->SetGridy(1);
4641 while ((obj = next())) {
4649 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode())
4676 arrow->SetAngle(30);
4677 arrow->SetFillStyle(1001);
4683 Int_t ncolors=0, ndivz=0;
4697 for (
Int_t id=1;
id<=2;
id++) {
4704 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
4722 }
else if (
id == 2) {
4734 if (theColor > ncolors-1) theColor = ncolors-1;
4764 if (drawGridOnly && (
gPad->PadInHighlightMode() ||
gPad->PadInSelectionMode()))
4772 TAxis *xaxis =
nullptr;
4773 TAxis *yaxis =
nullptr;
4776 TIter next(
gPad->GetListOfPrimitives());
4779 while ((obj = next())) {
4785 if (strstr(opt,
"hbar")) {
4789 if (!strcmp(xaxis->
GetName(),
"xaxis")) {
4799 static char chopt[10] =
"";
4801 Int_t ndiv, ndivx, ndivy, nx1, nx2, ndivsave;
4802 Int_t useHparam = 0;
4803 Double_t umin, umax, uminsave, umaxsave;
4819 TIter next(
gPad->GetListOfPrimitives());
4820 while ((obj=next())) {
4831 if (
gPad->PadInSelectionMode())
4835 if (
gPad->PadInSelectionMode() || !
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() &&
gPad->GetSelected() ==
fXaxis)) {
4846 strlcat(chopt,
"SDH",10);
4847 if (ndivx < 0) strlcat(chopt,
"N",10);
4848 if (
gPad->GetGridx()) {
4849 gridl = (aymax-aymin)/(
gPad->GetY2() -
gPad->GetY1());
4850 strlcat(chopt,
"W",10);
4855 strlcat(chopt,
"G",10);
4877 strlcat(chopt,
"t",10);
4885 if (xAxisPos == 1) {
4901 strlcat(chopt,
"-",10);
4910 umin, umax, ndiv, chopt, gridl, drawGridOnly);
4915 if (
gPad->GetTickx() && !
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
4917 cw=strstr(chopt,
"-");
4920 strlcat(chopt,
"-",10);
4922 if (
gPad->GetTickx() < 2) strlcat(chopt,
"U",10);
4923 if ((cw=strstr(chopt,
"W"))) *cw=
'z';
4927 uminsave, umaxsave, ndivsave, chopt, gridl, drawGridOnly);
4933 if (
gPad->PadInSelectionMode())
4937 if (
gPad->PadInSelectionMode() || !
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() &&
gPad->GetSelected() ==
fYaxis)) {
4942 strlcat(chopt,
"SDH",10);
4943 if (ndivy < 0) strlcat(chopt,
"N",10);
4944 if (
gPad->GetGridy()) {
4945 gridl = (axmax-axmin)/(
gPad->GetX2() -
gPad->GetX1());
4946 strlcat(chopt,
"W",10);
4951 strlcat(chopt,
"G",10);
4973 strlcat(chopt,
"t",10);
4981 if (yAxisPos == 1) {
4997 strlcat(chopt,
"+L",10);
5006 umin, umax, ndiv, chopt, gridl, drawGridOnly);
5011 if (
gPad->GetTicky() && !
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
5012 if (
gPad->GetTicky() < 2) {
5013 strlcat(chopt,
"U",10);
5016 strlcat(chopt,
"+L",10);
5018 if ((cw=strstr(chopt,
"W"))) *cw=
'z';
5022 uminsave, umaxsave, ndivsave, chopt, gridl, drawGridOnly);
5045 if (hcolor ==
gPad->GetFrameFillColor()) ++hcolor;
5047 box.SetFillColor(hcolor);
5048 box.SetFillStyle(hstyle);
5058 if (ymax < gPad->GetUymin())
continue;
5060 if (ymin < gPad->GetUymin())
ymin =
gPad->GetUymin();
5073 box.SetFillColor(hcolor);
5093 if (!strcmp(xaxis->
GetName(),
"xaxis")) {
5107 if (hcolor ==
gPad->GetFrameFillColor()) ++hcolor;
5109 box.SetFillColor(hcolor);
5110 box.SetFillStyle(hstyle);
5119 if (xmax < gPad->GetUxmin())
continue;
5121 if (xmin < gPad->GetUxmin())
xmin =
gPad->GetUxmin();
5134 box.SetFillColor(hcolor);
5147 while ((obj = next())) {
5168 fH->TAttLine::Modify();
5169 fH->TAttFill::Modify();
5171 Double_t z, xk,xstep, yk, ystep, xcent, ycent, xlow, xup, ylow, yup;
5182 Double_t zminlin = zmin, zmaxlin = zmax;
5188 TIter next(
gPad->GetListOfPrimitives());
5189 while ((h2 = (
TH2 *)next())) {
5239 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
5246 if (kZminNeg && z==0)
continue;
5258 if (dz == 0)
continue;
5260 if (zratio == 0)
continue;
5262 xup = xcent*zratio + xk + xcent;
5263 xlow = 2*(xk + xcent) - xup;
5264 if (xup-xlow < dxmin) xup = xlow+dxmin;
5272 yup = ycent*zratio + yk + ycent;
5273 ylow = 2*(yk + ycent) - yup;
5274 if (yup-ylow < dymin) yup = ylow+dymin;
5287 if (xlow >= xup)
continue;
5288 if (ylow >= yup)
continue;
5292 fH->TAttFill::Modify();
5293 gPad->PaintBox(xlow, ylow, xup, yup);
5295 gPad->PaintLine(xlow, ylow, xup, yup);
5296 gPad->PaintLine(xlow, yup, xup, ylow);
5301 fH->TAttFill::Modify();
5302 gPad->PaintBox(xlow, ylow, xup, yup);
5307 x[0] = xlow;
y[0] = ylow;
5308 x[1] = xlow + bwidth*(xup-xlow);
y[1] = ylow + bwidth*(yup-ylow);
5309 x[2] =
x[1];
y[2] = yup - bwidth*(yup-ylow);
5310 x[3] = xup - bwidth*(xup-xlow);
y[3] =
y[2];
5311 x[4] = xup;
y[4] = yup;
5312 x[5] = xlow;
y[5] = yup;
5313 x[6] = xlow;
y[6] = ylow;
5316 fH->TAttFill::Modify();
5317 gPad->PaintFillArea(7,
x,
y);
5320 x[0] = xlow;
y[0] = ylow;
5321 x[1] = xlow + bwidth*(xup-xlow);
y[1] = ylow + bwidth*(yup-ylow);
5322 x[2] = xup - bwidth*(xup-xlow);
y[2] =
y[1];
5323 x[3] =
x[2];
y[3] = yup - bwidth*(yup-ylow);
5324 x[4] = xup;
y[4] = yup;
5325 x[5] = xup;
y[5] = ylow;
5326 x[6] = xlow;
y[6] = ylow;
5329 fH->TAttFill::Modify();
5330 gPad->PaintFillArea(7,
x,
y);
5338 fH->TAttFill::Modify();
5348 TH1D *hproj =
nullptr;
5363 const Double_t standardCandleWidth = 0.66;
5364 const Double_t standardHistoWidth = 0.8;
5366 double allMaxContent = 0, allMaxIntegral = 0;
5375 if (hproj->
Integral() > allMaxIntegral) allMaxIntegral = hproj->
Integral();
5385 double myIntegral = hproj->
Integral();
5387 if (candleWidth > 0.999 && candleWidth < 1.001) {
5388 candleWidth = standardCandleWidth;
5389 histoWidth = standardHistoWidth;
5393 if (myCandle.
IsViolinScaled() && myMaxContent > 0 && allMaxContent > 0)
5396 histoWidth *= myMaxContent/allMaxContent;
5398 candleWidth *= myIntegral/allMaxIntegral;
5412 if (hproj->
Integral() > allMaxIntegral) allMaxIntegral = hproj->
Integral();
5422 double myIntegral = hproj->
Integral();
5424 if (candleWidth > 0.999 && candleWidth < 1.001) {
5425 candleWidth = standardCandleWidth;
5426 histoWidth = standardHistoWidth;
5430 if (myCandle.
IsViolinScaled() && myMaxContent > 0 && allMaxContent > 0)
5433 histoWidth *= myMaxContent/allMaxContent;
5435 candleWidth *= myIntegral/allMaxIntegral;
5464std::vector<THistRenderingRegion>
5467 std::vector<THistRenderingRegion> regions;
5469 enum STRATEGY { Bins, Pixels } strategy;
5473 if (nBins >= nPixels) {
5485 while (xMin <= 0 && ((pAxis->
GetFirst()+binOffset) != pAxis->
GetLast()) ) {
5495 if (strategy == Bins) {
5513 std::make_pair(bin, bin+1)};
5514 regions.push_back(region);
5523 for (
Int_t pixelIndex=0; pixelIndex<(nPixels-1); pixelIndex++) {
5528 std::make_pair(binLow, binHigh)};
5529 regions.push_back(region);
5535 if (strategy == Bins) {
5542 Int_t xPx1 = xPx0 + nPixels/nBins;
5545 if (xPx1>= nPixels) xPx1 = nPixels-1;
5548 std::make_pair(bin, bin+1)};
5549 regions.push_back(region);
5553 for (
Int_t pixelIndex=0; pixelIndex<nPixels-1; pixelIndex++) {
5555 Int_t binLow = (nBins*pixelIndex)/nPixels + pAxis->
GetFirst();
5556 Int_t binHigh = binLow + nBins/nPixels;
5558 std::make_pair(binLow, binHigh)};
5559 regions.push_back(region);
5574 Error(
"THistPainter::PaintColorLevelsFast(Option_t*)",
5575 "Only cartesian coordinates supported by 'COL2' option. Using 'COL' option instead.");
5588 if ((zmin == -1111) && (zmax == -1111)) {
5592 }
else if (zmin == -1111) {
5595 }
else if (zmax == -1111) {
5613 Error(
"THistPainter::PaintColorLevelsFast(Option_t*)",
5614 "Cannot plot logz because bin content is less than 0.");
5625 std::vector<Double_t> colorBounds(ndiv);
5626 std::vector<Double_t> contours(ndiv, 0);
5634 for (
Int_t i=0; i<ndiv; ++i) {
5635 colorBounds[i] = step*i;
5638 auto pFrame =
gPad->GetFrame();
5639 Int_t px0 =
gPad->XtoPixel(pFrame->GetX1());
5640 Int_t px1 =
gPad->XtoPixel(pFrame->GetX2());
5641 Int_t py0 =
gPad->YtoPixel(pFrame->GetY1());
5642 Int_t py1 =
gPad->YtoPixel(pFrame->GetY2());
5643 Int_t nXPixels = px1-px0;
5644 Int_t nYPixels = py0-py1;
5646 std::vector<Double_t> buffer(nXPixels*nYPixels, 0);
5650 if (xRegions.empty() || yRegions.empty()) {
5651 Error(
"THistPainter::PaintColorLevelFast(Option_t*)",
5652 "Encountered error while computing rendering regions.");
5660 for (
auto& yRegion : yRegions) {
5661 for (
auto& xRegion : xRegions ) {
5663 const auto& xBinRange = xRegion.fBinRange;
5664 const auto& yBinRange = yRegion.fBinRange;
5675 if (z > zmax) z = zmax;
5676 if (z < zmin) z = zmin;
5681 z = colorBounds[
index];
5685 index = 0.001 + ((z - zmin)/dz)*ndiv;
5688 if (
index ==
static_cast<Int_t>(colorBounds.size())) {
5696 }
else if (
index ==
static_cast<Int_t>(colorBounds.size()-1)) {
5700 z = colorBounds[
index];
5711 const auto& xPixelRange = xRegion.fPixelRange;
5712 const auto& yPixelRange = yRegion.fPixelRange;
5713 for (
Int_t xPx = xPixelRange.first; xPx <= xPixelRange.second; ++xPx) {
5714 for (
Int_t yPx = yPixelRange.first; yPx <= yPixelRange.second; ++yPx) {
5726 if (minValue != maxValue) {
5732 buffer[buffer.size()-nXPixels] = 0.95;
5740 pImage->
SetImage(buffer.data(), nXPixels, nYPixels, pPalette);
5743 auto pp =
gPad->GetPainter();
5745 pp->DrawImage(pImage, px0, py1);
5764 Double_t z,
e, zc, xk, xstep, yk, ystep, xlow, xup, ylow, yup;
5780 TIter next(
gPad->GetListOfPrimitives());
5781 while ((h2 = (
TH2 *)next())) {
5813 fH->TAttFill::Modify();
5824 Double_t scale = (dz ? ndivz / dz : 1.0);
5856 }
else if ((pymax > 0) && (pymin > 0)) {
5880 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
5886 if (binEntries == 0)
5891 if (z == 0 &&
e == 0) {
5904 if ((xup <= 0) || (xlow <= 0))
5912 if ((yup <= 0) || (ylow <= 0))
5930 if (z < zc)
continue;
5932 for (
Int_t k=0; k<ndiv; k++) {
5945 if (theColor > ncolors-1)
5946 theColor = ncolors-1;
5950 fH->TAttFill::Modify();
5951 gPad->PaintBox(xlow, ylow, xup, yup);
5963 a1 = ((xlow - pxmin) / (pxmax - pxmin) - 0.5) * 360;
5964 a2 = ((xup - pxmin) / (pxmax - pxmin) - 0.5) * 360;
5966 Double_t r1 = (ylow - pymin) / (pymax - pymin) * rx * pkr;
5967 Double_t r2 = (yup - pymin) / (pymax - pymin) * rx * pkr;
5969 TCrown crown(midx, midy, r1, r2, a1, a2);
5984 fH->TAttFill::Modify();
5994 Int_t i, j, count, ncontour, icol,
n, lj,
m, ix, jx, ljfill;
5996 Double_t xsave, ysave, thesave,phisave,
x[4],
y[4], zc[4];
6001 thesave =
gPad->GetTheta();
6002 phisave =
gPad->GetPhi();
6004 gPad->SetTheta(90.);
6006 gPad->SetPhi(phisave);
6007 gPad->SetTheta(thesave);
6018 TIter next(
gPad->GetListOfPrimitives());
6019 while ((obj=next())) {
6036 if (!dt && !dtOld)
return;
6038 fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
6054 if (ncontour == 0) {
6059 Warning(
"PaintContour",
"maximum number of contours is %d, asked for %d",
6070 fH->TAttLine::Modify();
6073 std::vector<std::unique_ptr<TPolyLine>> polys;
6075 TList *list =
nullptr;
6077 std::vector<Int_t>
np;
6079 np.resize(ncontour);
6080 for (i=0;i<ncontour;i++)
6082 for (i=0;i<ncontour;i++)
6083 polys.emplace_back(std::make_unique<TPolyLine>(100));
6087 gROOT->GetListOfSpecials()->Remove(contours);
6089 for (i=0;i<count;i++) {
6090 list = (
TList*)contours->
At(i);
6091 if (list) list->
Delete();
6097 contours->
SetName(
"contours");
6098 gROOT->GetListOfSpecials()->Add(contours);
6099 for (i=0;i<ncontour;i++) {
6101 contours->
Add(list);
6134 if (ir[0] != ir[1] || ir[1] != ir[2] || ir[2] != ir[3] || ir[3] != ir[0]) {
6139 if (zc[0] <= zc[1])
n = 0;
else n = 1;
6140 if (zc[2] <= zc[3])
m = 2;
else m = 3;
6141 if (zc[
n] > zc[
m])
n =
m;
6144 for (ix=1;ix<=4;ix++) {
6147 ir[
m-1],
x[
m-1],
y[
m-1], xarr.data()+lj-1,yarr.data()+lj-1,itarr.data()+lj-1, levels.data());
6152 if (zc[0] <= zc[1])
n = 0;
else n = 1;
6153 if (zc[2] <= zc[3])
m = 2;
else m = 3;
6154 if (zc[
n] > zc[
m])
n =
m;
6157 for (ix=1;ix<=4;ix++) {
6161 ir[
m-1],
x[
m-1],
y[
m-1],xarr.data()+lj-1,yarr.data()+lj-1,itarr.data()+lj-1, levels.data());
6169 for (ix=1; ix<=lj-5; ix +=2) {
6171 while (itarr[ix-1] != itarr[ix]) {
6175 for (jx=ix; jx<=lj-5; jx +=2) {
6176 xarr[jx] = xarr[jx+2];
6177 yarr[jx] = yarr[jx+2];
6178 itarr[jx] = itarr[jx+2];
6182 itarr[lj-3] = itars;
6183 if (count > 100)
break;
6188 if (count > 100)
continue;
6189 for (ix=1; ix<=lj-2; ix +=2) {
6201 fH->TAttLine::Modify();
6202 gPad->PaintPolyLine(2,xarr.data()+ix-1,yarr.data()+ix-1);
6207 ipoly = itarr[ix-1];
6208 if (ipoly >=0 && ipoly <ncontour) {
6209 polys[ipoly]->SetPoint(
np[ipoly] ,xarr[ix-1],yarr[ix-1]);
6210 polys[ipoly]->SetPoint(
np[ipoly]+1,xarr[ix], yarr[ix]);
6212 if (npmax <
np[ipoly]) npmax =
np[ipoly];
6220 std::vector<Double_t> xp, yp;
6221 Int_t nadd,iminus,iplus;
6223 Int_t first = ncontour;
6224 std::vector<Int_t> polysort;
6239 polysort.resize(ncontour);
6241 for (ipoly=0;ipoly<ncontour;ipoly++) {
6242 if (levels[ipoly] >= 0) {first = ipoly;
break;}
6246 for (ipoly=first-1;ipoly>=0;ipoly--) {polysort[k] = ipoly; k++;}
6247 for (ipoly=first;ipoly<ncontour;ipoly++) {polysort[k] = ipoly; k++;}
6251 for (k=0;k<ncontour;k++) {
6252 ipoly = polysort[k];
6257 Double_t *xx = polys[ipoly]->GetX();
6258 Double_t *yy = polys[ipoly]->GetY();
6263 xp[iminus]= xx[istart]; yp[iminus] = yy[istart];
6264 xp[iplus] = xx[istart+1]; yp[iplus] = yy[istart+1];
6265 xx[istart] =
xmin; yy[istart] =
ymin;
6266 xx[istart+1] =
xmin; yy[istart+1] =
ymin;
6269 for (i=2;i<
np[ipoly];i+=2) {
6270 if ((iplus < 2*npmax-1) && (xx[i] == xp[iplus]) && (yy[i] == yp[iplus])) {
6272 xp[iplus] = xx[i+1]; yp[iplus] = yy[i+1];
6277 if ((iminus > 0) && (xx[i+1] == xp[iminus]) && (yy[i+1] == yp[iminus])) {
6279 xp[iminus] = xx[i]; yp[iminus] = yy[i];
6285 if (nadd == 0)
break;
6291 fH->TAttFill::Modify();
6292 gPad->PaintFillArea(iplus-iminus+1,xp.data()+iminus,yp.data()+iminus);
6295 graph =
new TGraph(iplus-iminus+1,xp.data()+iminus,yp.data()+iminus);
6310 for (i=2;i<
np[ipoly];i+=2) {
6311 if (xx[i] !=
xmin && yy[i] !=
ymin) {
6316 if (istart == 0)
break;
6337 Double_t tlen, tdif, elev, diff, pdif, xlen;
6349 tdif = elev2 - elev1;
6355 diff = elev - elev1;
6366 yarr[i] =
y1 + xlen;
6371 xarr[i] =
x1 + xlen;
6394 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
return;
6396 const Int_t kBASEMARKER=8;
6397 Double_t xp, yp, ex1, ex2, ey1, ey2;
6399 Double_t s2x, s2y, bxsize, bysize, symbolsize, xerror, sbasex, sbasey;
6400 Double_t xi1, xi2, xi3, xi4, yi1, yi2, yi3, yi4;
6406 Int_t i, k, npoints, first, last, fixbin;
6411 Int_t option0, option1, option2, option3, option4, optionE, optionEX0, optionI0;
6412 static Float_t cxx[30] = {1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.6,1.0,0.5,0.5,1.0,0.5,0.6,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,0.5,0.5,0.5,1.0};
6413 static Float_t cyy[30] = {1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.5,0.5,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,0.5,0.5,0.5,1.0};
6415 std::vector<Double_t> xline, yline, xsegm, ysegm, xmarker, ymarker;
6416 option0 = option1 = option2 = option3 = option4 = optionE = optionEX0 = optionI0 = 0;
6425 if (
Hoption.
Error == 16) {optionI0 = 1; option4 = 1; option3 = 1;}
6426 if (option2+option3 == 0) optionE = 1;
6441 if (errormarker == 1) symbolsize = 0.01;
6442 sbasex = sbasey = symbolsize*kBASEMARKER;
6443 if (errormarker >= 20 && errormarker <= 49) {
6444 sbasex *= cxx[errormarker-20];
6445 sbasey *= cyy[errormarker-20];
6449 fH->TAttLine::Modify();
6450 fH->TAttFill::Modify();
6451 fH->TAttMarker::Modify();
6458 npoints = last - first +1;
6464 xsegm.reserve(1024);
6465 ysegm.reserve(1024);
6466 if (!xsegm.capacity() || !ysegm.capacity()) {
6467 Error(
"PaintErrors",
"out of memory for lines painting");
6471 auto flush_segmentes = [&]() {
6472 if (xsegm.size() > 0) {
6473 gPad->PaintSegments(xsegm.size()/2, xsegm.data(), ysegm.data());
6480 xsegm.emplace_back(
x1);
6481 xsegm.emplace_back(
x2);
6482 ysegm.emplace_back(
y1);
6483 ysegm.emplace_back(
y2);
6484 if (xsegm.size() == xsegm.capacity())
6488 auto flush_markers = [&]() {
6489 if (xmarker.size() > 0) {
6490 gPad->PaintPolyMarker(xmarker.size(), xmarker.data(), ymarker.data());
6497 if (xmarker.capacity() == 0) {
6498 xmarker.reserve(256);
6499 ymarker.reserve(256);
6502 xmarker.emplace_back(
x);
6503 ymarker.emplace_back(
y);
6504 if (xmarker.size() == xmarker.capacity()) {
6512 xline.resize(2*npoints);
6513 yline.resize(2*npoints);
6514 if ((npoints > 0) && (xline.empty() || yline.empty())) {
6515 Error(
"PaintErrors",
"too many points, out of memory");
6523 s2x =
gPad->PixeltoX(
Int_t(0.5*sbasex)) -
gPad->PixeltoX(0);
6524 s2y =-
gPad->PixeltoY(
Int_t(0.5*sbasey)) +
gPad->PixeltoY(0);
6528 bxsize =
gPad->PixeltoX(dxend) -
gPad->PixeltoX(0);
6529 bysize =-
gPad->PixeltoY(dxend) +
gPad->PixeltoY(0);
6545 for (k=first; k<=last; k++) {
6564 xminTmp +=
offset*(xmaxTmp-xminTmp);
6565 xmaxTmp = xminTmp +
w;
6566 xp = (xminTmp+xmaxTmp)/2.;
6569 if (xp <= 0)
goto L30;
6570 if (xp < logxmin)
goto L30;
6573 if (xp <
xmin)
goto L30;
6574 if (xp >
xmax)
break;
6577 if (optionI0 && yp==0)
goto L30;
6629 if (!option0 && !option3) {
6631 if (yi1 < ymin || yi1 >
ymax)
goto L30;
6634 if (!symbolsize || !errormarker) drawmarker =
kFALSE;
6638 if ((yi3 >=
ymax) || (yi4 <=
ymin))
6640 gPad->PaintBox(xi1,yi3,xi2,yi4);
6656 if (optionE && drawmarker) {
6657 if ((yi3 < yi1 - s2y) && (yi3 <
ymax))
6659 if ((yi1 + s2y < yi4) && (yi4 >
ymin))
6663 if (yi1<ymax && yi1>
ymin) {
6664 if (xi1 < xi3 - s2x)
6665 add_segment(xi1,yi1,xi3 - s2x,yi2);
6666 if (xi3 + s2x < xi2)
6667 add_segment(xi3 + s2x,yi1,xi2,yi2);
6671 if (optionE && !drawmarker && (ey1 != 0 || ey2 !=0)) {
6672 if ((yi3 < yi1) && (yi3 <
ymax))
6674 if ((yi1 < yi4) && (yi4 >
ymin))
6678 if (yi1<ymax && yi1>
ymin) {
6680 add_segment(xi1,yi1,xi3,yi2);
6682 add_segment(xi3,yi1,xi2,yi2);
6689 if (option1 && drawmarker) {
6691 if (yi3 < yi1-s2y && yi3 < ymax && yi3 >
ymin)
6692 add_segment(xi3 - bxsize, yi3, xi3 + bxsize, yi3);
6693 if (yi4 > yi1+s2y && yi4 < ymax && yi4 >
ymin)
6694 add_segment(xi3 - bxsize, yi4, xi3 + bxsize, yi4);
6695 if (yi1 <= ymax && yi1 >=
ymin) {
6697 add_segment(xi1, yi1 - bysize, xi1, yi1 + bysize);
6699 add_segment(xi2, yi1 - bysize, xi2, yi1 + bysize);
6706 add_marker(xi3, yi1);
6740 if (if2 > npoints) {
6741 for (i=1; i<if1; i++) {
6742 xline[if1-2+i] = xline[if2-1+i];
6743 yline[if1-2+i] = yline[if2-1+i];
6747 if (option4) graph.
PaintGraph(2*npoints,xline.data(),yline.data(),
"FC");
6748 else graph.
PaintGraph(2*npoints,xline.data(),yline.data(),
"F");
6749 gPad->SetLogx(logx);
6750 gPad->SetLogy(logy);
6760 fH->TAttMarker::Modify();
6761 fH->TAttLine::Modify();
6770 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
6773 Error(
"Paint2DErrors",
"no TView in current pad");
6780 view->
SetView(phideg, thedeg, psideg, irep);
6783 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
6784 fLego->SetFillColor(
gPad->GetFrameFillColor());
6785 fLego->TAttFill::Modify();
6791 fLego->TAttFill::Modify();
6795 fLego->InitMoveScreen(-1.1,1.1);
6832 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
6875 gPad->PaintLine3D(temp1, temp2);
6882 gPad->PaintLine3D(temp1, temp2);
6889 gPad->PaintLine3D(temp1, temp2);
6893 view->
WCtoNDC(temp1, &temp2[0]);
6894 gPad->PaintPolyMarker(1, &temp2[0], &temp2[1]);
6900 fLego->InitMoveScreen(-1.1,1.1);
6902 fLego->FrontBox(90);
6927 if (frame)
gPad->Remove(frame);
6933 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode())
6954 f2->
Paint(
"surf same");
6956 obj->Paint(
"cont3 same");
6959 }
else if (obj->InheritsFrom(
TF1::Class())) {
6963 gPad->PushSelectableObject(obj);
6967 if (!
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() && obj ==
gPad->GetSelected()))
6968 obj->Paint(lnk->GetOption());
6982 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
6985 static char chopth[17];
6987 Int_t htype, oldhtype;
6988 Int_t i, j, first, last, nbins, fixbin;
6992 strlcpy(chopth,
" ",17);
7007 nbins = last - first + 1;
7009 std::vector<Double_t> keepx, keepy;
7012 if (fixbin) keepx.resize(2);
7013 else keepx.resize(nbins+1);
7014 keepy.resize(nbins);
7020 for (j=first; j<=last;j++) {
7030 keepy[j-first] = yb;
7046 if (htype == 0 || htype == 1000) htype = 1001;
7068 if (!fixbin && strlen(chopth)) {
7103 graph.
PaintGrapHist(nbins, keepx.data(), keepy.data() ,chopth);
7142 if (strstr(opt,
"iso")) {
7157 view->
SetView(phideg, thedeg, psideg, irep);
7160 cmd.
Form(
"TPolyMarker3D::PaintH3((TH1 *)0x%zx,\"%s\");",(
size_t)
fH,
option);
7205 while (
auto obj = next()) {
7228 static const char *where =
"PaintInit";
7249 Error(where,
"cannot set X axis to log scale");
7256 TIter next(
gPad->GetListOfPrimitives());
7257 while ((obj = (
TObject *)next())) {
7268 Error(where,
"undefined user's coordinates. Cannot use option SAME");
7272 for (i=first; i<=last; i++) {
7284 Error(where,
"cannot set X axis to log scale");
7308 Int_t nonNullErrors = 0;
7310 for (i=first; i<=last;i++) {
7312 if (std::isnan(
c1) || std::isinf(
c1))
7325 if (e1 > 0) nonNullErrors++;
7342 fval =
f1->
Eval(xv[0],0,0);
7354 if (!nonNullErrors) {
7373 Error(where,
"log scale requested with a negative argument (%f)", xm);
7386 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)",
ymax);
7394 }
else if (
ymin < 0) {
7414 if (allchan) factor /= allchan;
7415 if (factor == 0) factor = 1;
7433 Error(where,
"Cannot set Y axis to log scale");
7479 static const char *where =
"PaintInitH";
7504 Error(where,
"cannot set Y axis to log scale");
7526 for (i=first; i<=last;i++) {
7541 fval =
f1->
Eval(xv[0],0,0);
7563 Error(where,
"log scale requested with zero or negative argument (%f)", xm);
7571 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)",
xmax);
7579 }
else if (
xmin < 0) {
7593 if (allchan) factor /= allchan;
7594 if (factor == 0) factor = 1;
7605 Error(where,
"Cannot set Y axis to log scale");
7644 Double_t wxyz[8][3] = { {-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1},
7645 {-1,-1, 1}, {1,-1, 1}, {1,1, 1}, {-1,1, 1} };
7646 Int_t iface[6][4] = { {0,3,2,1}, {4,5,6,7},
7647 {0,1,5,4}, {1,2,6,5}, {2,3,7,6}, {3,0,4,7} };
7661 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
7666 Error(
"PaintH3",
"no TView in current pad");
7673 view->
SetView(phideg, thedeg, psideg, irep);
7679 fLego->InitMoveScreen(-1.1,1.1);
7691 Int_t incrx = (tnorm[ 8] < 0.) ? -1 : +1;
7692 Int_t incry = (tnorm[ 9] < 0.) ? -1 : +1;
7693 Int_t incrz = (tnorm[10] < 0.) ? -1 : +1;
7708 fH->TAttFill::Modify();
7709 fH->TAttLine::Modify();
7718 Double_t pmin[3], pmax[3], sxyz[8][3];
7719 for (
Int_t ix = ix1; ix !=ix2+incrx; ix += incrx) {
7722 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
7725 for (
Int_t iz = iz1; iz != iz2+incrz; iz += incrz) {
7735 if (
w <
wmin)
continue;
7738 if (scale == 0)
continue;
7739 for (
Int_t i=0; i<3; ++i) {
7742 for (
Int_t k=0; k<8; ++k) {
7743 sxyz[k][i] = wxyz[k][i]*
d +
c;
7746 for (
Int_t k=0; k<8; ++k) {
7747 view->
WCtoNDC(&sxyz[k][0],&sxyz[k][0]);
7750 for (
Int_t k=0; k<6; ++k) {
7751 for (
Int_t i=0; i<4; ++i) {
7752 Int_t iv = iface[k][i];
7756 x[4] =
x[0] ;
y[4] =
y[0];
7758 x[5] =
x[2] ;
y[5] =
y[2];
7759 x[6] =
x[3] ;
y[6] =
y[3];
7760 x[7] =
x[1] ;
y[7] =
y[1];
7766 if (z <= 0.)
continue;
7771 if (k == 3 || k == 5) {
7773 }
else if (k == 0 || k == 1) {
7779 fH->TAttFill::Modify();
7780 gPad->PaintFillArea(4,
x,
y);
7781 if (iopt != 3)
gPad->PaintPolyLine(
n,
x,
y);
7810 while (
auto obj = next()) {
7826 fH->TAttFill::Modify();
7836 {-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1},
7837 {-1,-1, 1}, {1,-1, 1}, {1,1, 1}, {-1,1, 1}
7839 Int_t iface[6][4] = {
7840 {0,3,2,1}, {4,5,6,7},
7841 {0,1,5,4}, {1,2,6,5}, {2,3,7,6}, {3,0,4,7}
7845 {0,-1,0}, {1,0,0}, {0,1,0}, {-1,0,0}
7860 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
7865 Error(
"PaintH3",
"no TView in current pad");
7872 view->
SetView(phideg, thedeg, psideg, irep);
7879 fLego->InitMoveScreen(-1.1,1.1);
7884 fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
7889 Int_t incrx = (tnorm[ 8] < 0.) ? +1 : -1;
7890 Int_t incry = (tnorm[ 9] < 0.) ? +1 : -1;
7891 Int_t incrz = (tnorm[10] < 0.) ? +1 : -1;
7900 fH->TAttLine::Modify();
7903 const Int_t NTMAX = 100;
7908 Double_t pmin[3], pmax[3], sxyz[8][3], pp[4][2];
7909 for (
Int_t ix = ix1; ix !=ix2+incrx; ix += incrx) {
7912 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
7915 for (
Int_t iz = iz1; iz != iz2+incrz; iz += incrz) {
7924 if (
w <
wmin)
continue;
7927 if (scale == 0)
continue;
7928 for (
Int_t i=0; i<3; ++i) {
7931 for (
Int_t k=0; k<8; ++k) {
7932 sxyz[k][i] = wxyz[k][i]*
d +
c;
7935 for (
Int_t k=0; k<8; ++k) {
7936 view->
WCtoNDC(&sxyz[k][0],&sxyz[k][0]);
7938 for (
Int_t k=0; k<6; ++k) {
7940 view->
FindNormal(normal[k][0], normal[k][1], normal[k][2], zn);
7941 if (zn <= 0)
continue;
7942 for (
Int_t i=0; i<4; ++i) {
7943 Int_t ip = iface[k][i];
7944 pp[i][0] = sxyz[ip][0];
7945 pp[i][1] = sxyz[ip][1];
7947 for (
Int_t i=0; i<4; ++i) {
7949 Int_t i2 = (i == 3) ? 0 : i + 1;
7951 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7952 Double_t xdel = pp[i2][0] - pp[i1][0];
7953 Double_t ydel = pp[i2][1] - pp[i1][1];
7955 for (
Int_t it = 0; it < nt; ++it) {
7956 x[0] = pp[i1][0] + xdel*
tt[it][0];
7957 y[0] = pp[i1][1] + ydel*
tt[it][0];
7958 x[1] = pp[i1][0] + xdel*
tt[it][1];
7959 y[1] = pp[i1][1] + ydel*
tt[it][1];
7960 gPad->PaintPolyLine(2,
x,
y);
7967 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7968 Double_t xdel = pp[i2][0] - pp[i1][0];
7969 Double_t ydel = pp[i2][1] - pp[i1][1];
7971 for (
Int_t it = 0; it < nt; ++it) {
7972 x[0] = pp[i1][0] + xdel*
tt[it][0];
7973 y[0] = pp[i1][1] + ydel*
tt[it][0];
7974 x[1] = pp[i1][0] + xdel*
tt[it][1];
7975 y[1] = pp[i1][1] + ydel*
tt[it][1];
7976 gPad->PaintPolyLine(2,
x,
y);
7980 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7981 xdel = pp[i2][0] - pp[i1][0];
7982 ydel = pp[i2][1] - pp[i1][1];
7983 for (
Int_t it = 0; it < nt; ++it) {
7984 x[0] = pp[i1][0] + xdel*
tt[it][0];
7985 y[0] = pp[i1][1] + ydel*
tt[it][0];
7986 x[1] = pp[i1][0] + xdel*
tt[it][1];
7987 y[1] = pp[i1][1] + ydel*
tt[it][1];
7988 gPad->PaintPolyLine(2,
x,
y);
7991 fLego->FillPolygonBorder(4, &pp[0][0]);
8016 while (
auto obj = next()) {
8047 Int_t ic2 = ic1+nbcol;
8048 Int_t ic3 = ic2+nbcol;
8058 std::vector<Double_t>
x(nx);
8059 std::vector<Double_t>
y(ny);
8060 std::vector<Double_t> z(nz);
8078 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
8082 Error(
"PaintH3Iso",
"no TView in current pad");
8088 view->
SetView(phideg, thedeg, psideg, irep);
8103 for (
Int_t col=0;col<nbcol;col++) {
8109 fLego->InitMoveScreen(-1.1,1.1);
8117 fLego->LightSource(0, ydiff, 0, 0, 0, irep);
8118 fLego->LightSource(1, yligh1, 1, 1, 1, irep);
8119 fLego->SurfaceProperty(qa, qd, qs, 1, irep);
8121 fmax = ydiff*qa + (yligh1+0.1)*(qd+qs);
8122 fLego->SetIsoSurfaceParameters(fmin, fmax, nbcol, ic1, ic2, ic3);
8124 fLego->IsoSurface(1, s, nx, ny, nz,
x.data(),
y.data(), z.data(),
"BF");
8127 fLego->InitMoveScreen(-1.1,1.1);
8129 fLego->FrontBox(90);
8141 while (
auto obj = next()) {
8174 if (deltaz == 0) deltaz = 1;
8221 TH1 * hid =
nullptr;
8222 Color_t colormain = -1, colordark = -1;
8233 drawShadowsInLego1 =
kFALSE;
8259 for (
Int_t id=0;
id<=nids;
id++) {
8262 if (colormain == 1) colormain = 17;
8264 else colordark = colormain;
8265 fLego->SetColorMain(colormain,
id);
8266 fLego->SetColorDark(colordark,
id);
8267 if (
id <= 1)
fLego->SetColorMain(colormain,-1);
8268 if (
id == nids)
fLego->SetColorMain(colormain,99);
8277 Error(
"PaintLego",
"no TView in current pad");
8284 view->
SetView(phideg, thedeg, psideg, irep);
8290 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
8291 fLego->SetFillColor(
gPad->GetFrameFillColor());
8292 fLego->TAttFill::Modify();
8300 fLego->TAttFill::Modify();
8304 if (raster)
fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
8305 else fLego->InitMoveScreen(-1.1,1.1);
8347 fLego->LegoCartesian(90,nx,ny,
"FB");}
8359 fLego->InitMoveScreen(-1.1,1.1);
8382 Int_t ndivx, ndivy, ndivz, i;
8384 static char chopax[8], chopay[8], chopaz[8];
8385 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
8390 Error(
"PaintLegoAxis",
"no TView in current pad");
8415 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
8416 for (i = 1; i <= 8; ++i) {
8417 r[i*3 - 3] = av[i*3 - 3] + av[i*3 - 2]*cosa;
8418 r[i*3 - 2] = av[i*3 - 2]*sina;
8419 r[i*3 - 1] = av[i*3 - 1];
8433 if (!rmin || !rmax)
return;
8436 if (
x1[0] >
x2[0]) strlcpy(chopax,
"SDH=+",8);
8437 else strlcpy(chopax,
"SDH=-",8);
8438 if (
y1[0] >
y2[0]) strlcpy(chopay,
"SDH=+",8);
8439 else strlcpy(chopay,
"SDH=-",8);
8440 if (z2[1] > z1[1]) strlcpy(chopaz,
"SDH=+",8);
8441 else strlcpy(chopaz,
"SDH=-",8);
8455 strlcat(chopax,
"N",8);
8459 strlcat(chopay,
"N",8);
8463 strlcat(chopaz,
"N",8);
8485 strlcat(chopax,
"t",8);
8503 strlcpy(chopay,
"V=+UN",8);
8518 strlcat(chopay,
"t",8);
8541 strlcat(chopaz,
"t",8);
8550 if (ztit.
Index(
";")>0) {
8554 axis->
PaintAxis(z1[0], z1[1], z2[0], z2[1], bmin, bmax, ndivz, chopaz);
8571 delete palette; palette =
nullptr;
8576 delete palette; palette =
nullptr;
8604 fH->TAttMarker::Modify();
8607 Double_t dz, z, xk,xstep, yk, ystep;
8612 if (zmin == 0 && zmax == 0)
return;
8623 if (zmin == 0 && zmax == 0)
return;
8626 if (ncells > 10000) scale /= 5;
8630 if (dz >=
kNMAX || zmax < 1) {
8631 scale = (
kNMAX-1)/dz;
8632 if (ncells > 10000) scale /= 5;
8639 if (zmin >= 0) zmin = 0;
8640 else zmin -= yMARGIN*(zmax-zmin);
8642 Double_t dzmin = yMARGIN*(zmax-zmin);
8643 if (zmin >= 0 && (zmin-dzmin <= 0)) zmin = 0;
8652 strlcpy(optscat,opt.
Data(),100);
8653 char *oscat = strstr(optscat,
"scat=");
8654 char *blank = strstr(oscat,
" ");
if (blank) *blank = 0;
8655 sscanf(oscat+5,
"%lg",&scale);
8669 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
8671 if (z < zmin) z = zmin;
8672 if (z > zmax) z = zmax;
8678 if (z <= 0)
continue;
8682 for (
Int_t loop=0; loop<k; loop++) {
8683 if (k+marker >=
kNMAX) {
8687 fXbuf[marker] = (random.
Rndm()*xstep) + xk;
8688 fYbuf[marker] = (random.
Rndm()*ystep) + yk;
8697 if (
fXbuf[marker] <
gPad->GetUxmin())
break;
8698 if (
fYbuf[marker] <
gPad->GetUymin())
break;
8699 if (
fXbuf[marker] >
gPad->GetUxmax())
break;
8700 if (
fYbuf[marker] >
gPad->GetUymax())
break;
8706 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
8758 while (
auto obj = next()) {
8765 if (stats && dostat) {
8771 if (!dofit) fit =
nullptr;
8772 if (dofit == 1) dofit = 111;
8773 if (dostat == 1) dostat = 1111;
8774 Int_t print_name = dostat%10;
8775 Int_t print_entries = (dostat/10)%10;
8776 Int_t print_mean = (dostat/100)%10;
8777 Int_t print_stddev = (dostat/1000)%10;
8778 Int_t print_under = (dostat/10000)%10;
8779 Int_t print_over = (dostat/100000)%10;
8780 Int_t print_integral= (dostat/1000000)%10;
8781 Int_t print_skew = (dostat/10000000)%10;
8782 Int_t print_kurt = (dostat/100000000)%10;
8783 Int_t nlines = print_name + print_entries + print_mean + print_stddev +
8784 print_under + print_over + print_integral +
8785 print_skew + print_kurt;
8786 Int_t print_fval = dofit%10;
8787 Int_t print_ferrors = (dofit/10)%10;
8788 Int_t print_fchi2 = (dofit/100)%10;
8789 Int_t print_fprob = (dofit/1000)%10;
8790 Int_t nlinesf = print_fval + print_fchi2 + print_fprob;
8793 else nlinesf += fit->
GetNpar();
8799 if (!dostat && !fit) {
8838 if (print_entries) {
8844 if (print_mean == 1) {
8854 if (print_mean == 1) {
8866 if (print_stddev == 1) {
8876 if (print_stddev == 1) {
8897 if (print_integral) {
8898 if (print_integral == 1) {
8908 if (print_skew == 1) {
8919 if (print_kurt == 1) {
8935 if (print_fchi2) stats->
AddText(
tt.Data());
8941 if (print_fval || print_ferrors) {
8945 if (print_fval < 2 && parmin*parmax != 0 && parmin >= parmax)
continue;
8946 if (print_ferrors) {
8977 while (
auto obj = next()) {
8983 if (stats && dostat) {
8989 if (dostat == 1) dostat = 1111;
8990 Int_t print_name = dostat%10;
8991 Int_t print_entries = (dostat/10)%10;
8992 Int_t print_mean = (dostat/100)%10;
8993 Int_t print_stddev = (dostat/1000)%10;
8994 Int_t print_under = (dostat/10000)%10;
8995 Int_t print_over = (dostat/100000)%10;
8996 Int_t print_integral= (dostat/1000000)%10;
8997 Int_t print_skew = (dostat/10000000)%10;
8998 Int_t print_kurt = (dostat/100000000)%10;
8999 Int_t nlines = print_name + print_entries + 2*print_mean + 2*print_stddev + print_integral;
9000 if (print_under || print_over) nlines += 3;
9005 if (!dostat && !fit) {
9045 if (print_entries) {
9051 if (print_mean == 1) {
9070 if (print_stddev == 1) {
9088 if (print_integral) {
9094 if (print_skew == 1) {
9113 if (print_kurt == 1) {
9131 if (print_under || print_over) {
9142 unov[0] = h2->
Integral( 0, firstX-1, lastY+1, cellsY );
9143 unov[1] = h2->
Integral(firstX , lastX , lastY+1, cellsY );
9144 unov[2] = h2->
Integral(lastX+1, cellsX , lastY+1, cellsY );
9145 unov[3] = h2->
Integral( 0, firstX-1, firstY , lastY );
9146 unov[4] = h2->
Integral(firstX , lastX , firstY , lastY );
9147 unov[5] = h2->
Integral(lastX+1, cellsX , firstY , lastY );
9148 unov[6] = h2->
Integral( 0, firstX-1, 0, firstY-1);
9149 unov[7] = h2->
Integral(firstX, lastX, 0, firstY-1);
9150 unov[8] = h2->
Integral(lastX+1, cellsX , 0, firstY-1);
9152 tt.Form(
"%g|%g|%g\n", unov[0], unov[1], unov[2]);
9154 tt.Form(
"%g|%g|%g\n", unov[3], unov[4], unov[5]);
9156 tt.Form(
"%g|%g|%g\n", unov[6], unov[7], unov[8]);
9166 tt.Form(
"%-8s = %5.4g #pm %5.4g ",fit->
GetParName(ipar)
9190 while (
auto obj = next()) {
9196 if (stats && dostat) {
9202 if (dostat == 1) dostat = 1111;
9203 Int_t print_name = dostat%10;
9204 Int_t print_entries = (dostat/10)%10;
9205 Int_t print_mean = (dostat/100)%10;
9206 Int_t print_stddev = (dostat/1000)%10;
9207 Int_t print_under = (dostat/10000)%10;
9208 Int_t print_over = (dostat/100000)%10;
9209 Int_t print_integral= (dostat/1000000)%10;
9210 Int_t print_skew = (dostat/10000000)%10;
9211 Int_t print_kurt = (dostat/100000000)%10;
9212 Int_t nlines = print_name + print_entries + 3*print_mean + 3*print_stddev + print_integral;
9213 if (print_under || print_over) nlines += 3;
9218 if (!dostat && !fit) {
9256 if (print_entries) {
9262 if (print_mean == 1) {
9288 if (print_stddev == 1) {
9313 if (print_integral) {
9318 if (print_skew == 1) {
9344 if (print_kurt == 1) {
9369 if (print_under || print_over) {
9380 tt.Form(
"%-8s = %5.4g #pm %5.4g ",fit->
GetParName(ipar)
9417 if (deltaz == 0) deltaz = 1;
9484 Error(
"PaintSurface",
"no TView in current pad");
9491 view->
SetView(phideg, thedeg, psideg, irep);
9495 fLego->SetFillStyle(0);
9496 fLego->SetFillColor(1);
9498 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
9499 fLego->SetFillColor(
gPad->GetFrameFillColor());
9501 fLego->TAttFill::Modify();
9509 fLego->TAttFill::Modify();
9529 if (raster)
fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
9530 else fLego->InitMoveScreen(-1.1,1.1);
9543 fLego->LightSource(0, ydiff, 0,0,0,irep);
9544 fLego->LightSource(1, yligh1 ,1,1,1,irep);
9545 fLego->SurfaceProperty(qa, qd, qs, 1, irep);
9547 fmax = fmin + (yligh1+0.1)*(qd+qs);
9552 if (!colref)
return;
9557 for (
Int_t col=0;col<nbcol;col++) {
9562 fLego->Spectrum(nbcol, fmin, fmax, icol1, 1, irep);
9604 fLego->InitMoveScreen(-1.1,1.1);
9624 fLego->InitMoveScreen(-1.1,1.1);
9651 if (!dt && !dtOld)
return;
9655 fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
9662 Error(
"PaintTriangles",
"no TView in current pad, do not use option SAME");
9667 if (!rmin || !rmax)
return;
9687 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
9690 Error(
"PaintTriangles",
"no TView in current pad");
9697 view->
SetView(phideg, thedeg, psideg, irep);
9700 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
9701 fLego->SetFillColor(
gPad->GetFrameFillColor());
9702 fLego->TAttFill::Modify();
9708 fLego->TAttFill::Modify();
9712 fLego->InitMoveScreen(-1.1,1.1);
9723 fLego->InitMoveScreen(-1.1,1.1);
9725 fLego->FrontBox(90);
9749 Warning(
"PaintSurface",
"too many color levels, %d >= 100, reset to 99", ndivz);
9752 std::vector<Double_t> funlevel(ndivz+1);
9753 std::vector<Int_t> colorlevel(ndivz+1);
9756 for (i = 0; i < ndivz; ++i) {
9762 fLego->ColorFunction(ndivz, funlevel.data(), colorlevel.data(), irep);
9830 while (
auto obj = next()) {
9838 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
9858 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
return;
9875 while ((obj=next())) {
9877 z =
b->GetContent();
9879 poly =
b->GetPolygon();
9884 g->TAttLine::Modify();
9885 g->TAttMarker::Modify();
9886 g->TAttFill::Modify();
9894 g->SetFillStyle(
fs);
9896 if (fill)
g->Paint(
"F");
9897 if (mark)
g->Paint(
"P");
9907 while ((
g = (
TGraph*) nextg())) {
9908 g->TAttLine::Modify();
9909 g->TAttMarker::Modify();
9910 g->TAttFill::Modify();
9918 g->SetFillStyle(
fs);
9920 if (fill)
g->Paint(
"F");
9921 if (mark)
g->Paint(
"P");
9934 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
9937 Int_t ncolors, color, theColor;
9965 while (
auto obj = next()) {
9969 z =
b->GetContent();
9975 if (z < zmin)
continue;
9980 if (z < zc)
continue;
9982 for (
Int_t k=0; k<ndiv; k++) {
9991 color =
Int_t(0.01+(z-zmin)*scale);
9994 if (theColor > ncolors-1) theColor = ncolors-1;
10001 auto origin =
g->GetFillColor();
10002 g->SetFillColor(rootColor);
10003 g->TAttFill::Modify();
10005 g->SetFillColor(origin);
10012 while (
auto g = (
TGraph*) nextg()) {
10013 auto origin =
g->GetFillColor();
10014 g->SetFillColor(rootColor);
10015 g->TAttFill::Modify();
10017 g->SetFillColor(origin);
10031 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
10034 Int_t k, loop, marker=0;
10035 Double_t z, xk,xstep, yk, ystep, xp, yp;
10049 scale = (
kNMAX-1)/dz;
10063 while ((obj=next())) {
10066 if (
a>maxarea) maxarea =
a;
10071 while ((obj=next())) {
10073 poly =
b->GetPolygon();
10074 z =
b->GetContent();
10075 if (z < zmin) z = zmin;
10076 if (z > zmax) z = zmax;
10082 k =
Int_t((z*scale)*(
b->GetArea()/maxarea));
10085 xstep =
b->GetXMax()-xk;
10086 ystep =
b->GetYMax()-yk;
10091 if (k <= 0 || z <= 0)
continue;
10094 if (k+marker >=
kNMAX) {
10098 xp = (random.
Rndm()*xstep) + xk;
10099 yp = (random.
Rndm()*ystep) + yk;
10100 if (
g->IsInside(xp,yp)) {
10101 fXbuf[marker] = xp;
10102 fYbuf[marker] = yp;
10107 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
10115 if (k <= 0 || z <= 0)
continue;
10118 if (k+marker >=
kNMAX) {
10122 xp = (random.
Rndm()*xstep) + xk;
10123 yp = (random.
Rndm()*ystep) + yk;
10125 fXbuf[marker] = xp;
10126 fYbuf[marker] = yp;
10131 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
10154 text.SetTextAlign(22);
10157 text.TAttText::Modify();
10164 while ((obj=next())) {
10166 p =
b->GetPolygon();
10167 x = (
b->GetXMin()+
b->GetXMax())/2;
10172 y = (
b->GetYMin()+
b->GetYMax())/2;
10177 z =
b->GetContent();
10181 tf.
Form(
"#splitline{%s%s}{#pm %s%s}",
10218 getentries =
kTRUE;
10221 text.SetTextAlign(11);
10222 if (
angle == 90)
text.SetTextAlign(12);
10224 text.TAttText::Modify();
10238 if (yt == 0.)
continue;
10248 if (
y >=
gPad->GetY2())
continue;
10249 if (y <= gPad->GetY1())
continue;
10258 text.SetTextAlign(22);
10261 text.TAttText::Modify();
10280 tf.
Form(
"#splitline{%s%s}{#pm %s%s}",
10313 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
10317 Error(
"PaintTF3",
"no TView in current pad");
10323 view->
SetView(phideg, thedeg, psideg, irep);
10325 fLego->InitMoveScreen(-1.1,1.1);
10330 fLego->BackBox(90);
10340 fLego->InitMoveScreen(-1.1,1.1);
10342 fLego->FrontBox(90);
10379 TIter next(
gPad->GetListOfPrimitives());
10380 while ((obj = next())) {
10383 if (strcmp(title->
GetName(),
"title")) {title =
nullptr;
continue;}
10387 if (title)
delete title;
10402 if (ht <= 0) ht = 0.05;
10423 if (talh < 1) talh = 1;
else if (talh > 3) talh = 3;
10425 if (talv < 1) talv = 1;
else if (talv > 3) talv = 3;
10448 ptitle->
Paint(
"blNDC");
10450 if(!
gPad->IsEditable())
delete ptitle;
10458 if (!strcmp(mess,
"SetF3")) {
10562 for (
int i = 0; i < 100; i++) {
10571 theta -= num / den;
10619 Double_t xmin_aid, ymin_aid, xmax_aid, ymax_aid;
10626 if (
xmin > xmin_aid)
xmin = xmin_aid;
10627 if (
ymin > ymin_aid)
ymin = ymin_aid;
10628 if (
xmax < xmax_aid)
xmax = xmax_aid;
10629 if (
ymax < ymax_aid)
ymax = ymax_aid;
10632 func(
Hparam.
xmin*xscale, 0, xmin_aid, ymin_aid);
10633 func(
Hparam.
xmax*xscale, 0, xmax_aid, ymin_aid);
10634 if (
xmin > xmin_aid)
xmin = xmin_aid;
10635 if (
xmax < xmax_aid)
xmax = xmax_aid;
10640 if (
ymin > ymin_aid)
ymin = ymin_aid;
10641 if (
ymax < ymax_aid)
ymax = ymax_aid;
10658 ymin - dyr*
gPad->GetBottomMargin(),
10659 xmax + dxr*
gPad->GetRightMargin(),
10670 if (
h ==
nullptr)
return;
10684 static const char *where =
"TableInit";
10712 Error(where,
"cannot set X axis to log scale");
10741 Error(where,
"cannot set Y axis to log scale");
10777 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)", zmax);
10783 if (zmin >= zmax) {
10785 if (zmax > 0) zmin = 0.001*zmax;
10787 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)", zmax);
10797 if (allchan) factor /= allchan;
10798 if (factor == 0) factor = 1;
10800 zmax = factor*zmax;
10801 zmin = factor*zmin;
10827 zmax += yMARGIN*(zmax-zmin);
10835 if (zmin >= 0) zmin = 0;
10836 else zmin -= yMARGIN*(zmax-zmin);
10838 Double_t dzmin = yMARGIN*(zmax-zmin);
10839 if (zmin >= 0 && (zmin-dzmin <= 0)) zmin = 0;
10840 else zmin -= dzmin;
10866 tf.
Form(
"%s%s",
"%",
f);
10870 int ie = tv.
Index(
"e");
10871 int iE = tv.
Index(
"E");
10872 int id = tv.
Index(
".");
10876 if (ie >= 0 || iE >= 0) {
10877 if (tv.
Index(
"+") >= 0) {
10879 ef.
Form(
"%s.1f",
"%");
10882 ef.
Form(
"%s.%de",
"%",ie-
id-1);
10884 ef.
Form(
"%s.%dE",
"%",iE-
id-1);
10889 ef.
Form(
"%s.%de",
"%",ie-
id-1);
10891 ef.
Form(
"%s.%dE",
"%",iE-
id-1);
10896 }
else if (
id < 0) {
10897 ef.
Form(
"%s.1f",
"%");
10916 Int_t projection = 0;
10946 auto c2 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name2.Data()));
10952 auto c1 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name1.Data()));
10961 Error(
"SetShowProjection",
"TH3 projections do not work in GL mode");
10966 if (projection == 0)
10974 gROOT->MakeDefCanvas();
10986 auto c2 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name2.Data()));
10992 auto c1 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name1.Data()));
10997 if ((nbinsX <= 0) || (nbinsY <= 0))
11001 Error(
"SetShowProjectionXY",
"TH3 projections do not work in GL mode");
11006 if (projection == 0)
11014 gROOT->MakeDefCanvas();
11017 gROOT->MakeDefCanvas();
11042 gPad->PaintBox(uxmin,py1,uxmax,py2,
"iprojX");
11043 gPad->UpdateAsync();
11048 auto c =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name1.Data()));
11056 c->SetLogy(ctxt.
GetSaved()->GetLogz());
11057 c->SetLogx(ctxt.
GetSaved()->GetLogx());
11061 if (
auto hp = ((
TH2*)
fH)->ProjectionX(prjName, biny1, biny2)) {
11062 hp->SetFillColor(38);
11065 if (biny1 == biny2) {
11073 hp->SetTitle(
TString::Format(
"ProjectionX of biny=%d [y=%.*lf..%.*lf]", biny1, valuePrecision, valueFrom, valuePrecision, valueTo));
11085 hp->SetTitle(
TString::Format(
"ProjectionX of biny=[%d,%d] [y=%.*lf..%.*lf]", biny1, biny2, valuePrecision, valueFrom, valuePrecision, valueTo));
11115 gPad->PaintBox(px1, uymin, px2, uymax,
"iprojY");
11116 gPad->UpdateAsync();
11132 c->SetLogy(ctxt.
GetSaved()->GetLogz());
11133 c->SetLogx(ctxt.
GetSaved()->GetLogy());
11137 if (
auto hp = ((
TH2*)
fH)->ProjectionY(prjName, binx1, binx2)) {
11138 hp->SetFillColor(38);
11141 if (binx1 == binx2) {
11149 hp->SetTitle(
TString::Format(
"ProjectionY of binx=%d [x=%.*lf..%.*lf]", binx1, valuePrecision, valueFrom, valuePrecision, valueTo));
11161 hp->SetTitle(
TString::Format(
"ProjectionY of binx=[%d,%d] [x=%.*lf..%.*lf]", binx1, binx2, valuePrecision, valueFrom, valuePrecision, valueTo));
11200 auto &parent = *
gPad;
11203 if (parent.GetGLDevice() != -1)
11206 auto view = parent.GetView();
11211 if ((parent.GetUxmin() == parent.GetUxmax()) || (parent.GetUymin() == parent.GetUymax()))
11215 Double_t rect1x[5] = {0,0,0,0,0}, rect1y[5] = {0,0,0,0,0}, rect2x[5] = {0,0,0,0,0}, rect2y[5] = {0,0,0,0,0};
11219 auto h3 =
dynamic_cast<TH3 *
>(
fH);
11230 static constexpr Int_t iMin = -111;
11231 static constexpr Int_t iMax = -11;
11232 static constexpr Int_t kMaxDist = 50;
11239 auto findAxis = [&parent, px, py, xaxis, yaxis, zaxis, view, getx](
Int_t &besti1,
Int_t &besti2,
char name) {
11241 TAxis *axis1 =
nullptr, *axis2 =
nullptr;
11242 Int_t xindx = 0, yindx = 0, zindx = 0;
11265 for (
Int_t i2 = axis2->GetFirst(); i2 <= axis2->GetLast(); ++i2) {
11267 case 'x': yindx = i1; zindx = i2;
break;
11268 case 'y': xindx = i1; zindx = i2;
break;
11269 default: xindx = i1; yindx = i2;
break;
11271 Double_t v[3] = {getx(xaxis, xindx), getx(yaxis, yindx), getx(zaxis, zindx)};
11273 view->WCtoNDC(
v, ndc);
11274 Int_t px1 = parent.XtoAbsPixel(ndc[0]);
11275 Int_t py1 = parent.YtoAbsPixel(ndc[1]);
11276 Double_t distance =
TMath::Sqrt(1. * (px1 - px) * (px1 - px) + 1. * (py1 - py) * (py1 - py));
11277 if (distance < best_dist) {
11278 best_dist = distance;
11284 return best_dist < kMaxDist;
11287 auto convert = [view, getx, xaxis, yaxis, zaxis](
Int_t ix,
Int_t iy,
Int_t iz,
11289 Double_t vvv[3] = {getx(xaxis, ix), getx(yaxis, iy), getx(zaxis, iz)};
11291 view->WCtoNDC(vvv, uu);
11296 auto draw_rects = [&parent, nbins, kind, &rect1x, &rect2x, &rect1y, &rect2y]() {
11297 rect1x[4] = rect1x[0];
11298 rect1y[4] = rect1y[0];
11299 rect2x[4] = rect2x[0];
11300 rect2y[4] = rect2y[0];
11302 parent.PaintPolyLine(5, rect1x, rect1y,
"iproj3_rect1");
11304 parent.PaintPolyLine(5, rect2x, rect2y,
"iproj3_rect2");
11306 parent.PaintPolyLine(nbins > 1 ? 5 : 2, rect1x, rect1y,
"iproj3_rect1");
11308 parent.PaintPolyLine(5, rect2x, rect2y,
"iproj3_rect2");
11316 parent.UpdateAsync();
11319 Int_t binx = -1, biny = -1, binz = -1, binx2 = -1, biny2 = -1, binz2 = -1, dummy = -1;
11321 auto extend_bin = [nbins](
TAxis *axis,
Int_t &bin) {
11330 auto make_proj = [h3, &binx, &biny, &binz, &binx2, &biny2, &binz2, xaxis, yaxis, zaxis](
const char *proj_kind) {
11343 auto hp = h3->Project3D(proj_kind);
11357 if (!findAxis(biny, binz,
'x'))
11360 biny2 = extend_bin(yaxis, biny);
11361 binz2 = extend_bin(zaxis, binz);
11363 convert(iMin, biny, binz, rect1x[0], rect1y[0]);
11364 convert(iMax, biny, binz, rect1x[1], rect1y[1]);
11365 convert(iMax, biny, binz2, rect1x[2], rect1y[2]);
11366 convert(iMin, biny, binz2, rect1x[3], rect1y[3]);
11367 convert(iMin, biny2, binz, rect2x[0], rect2y[0]);
11368 convert(iMax, biny2, binz, rect2x[1], rect2y[1]);
11369 convert(iMax, biny2, binz2, rect2x[2], rect2y[2]);
11370 convert(iMin, biny2, binz2, rect2x[3], rect2y[3]);
11376 if (
auto hp = make_proj(
"x")) {
11377 hp->SetFillColor(38);
11378 if ((biny == biny2) && (binz == binz2))
11385 hp->SetYTitle(
"Number of Entries");
11392 if (!findAxis(binx, binz,
'y'))
11395 binx2 = extend_bin(xaxis, binx);
11396 binz2 = extend_bin(zaxis, binz);
11398 convert(binx, iMin, binz, rect1x[0], rect1y[0]);
11399 convert(binx, iMax, binz, rect1x[1], rect1y[1]);
11400 convert(binx, iMax, binz2, rect1x[2], rect1y[2]);
11401 convert(binx, iMin, binz2, rect1x[3], rect1y[3]);
11402 convert(binx2, iMin, binz, rect2x[0], rect2y[0]);
11403 convert(binx2, iMax, binz, rect2x[1], rect2y[1]);
11404 convert(binx2, iMax, binz2, rect2x[2], rect2y[2]);
11405 convert(binx2, iMin, binz2, rect2x[3], rect2y[3]);
11410 if (
auto hp = make_proj(
"y")) {
11411 hp->SetFillColor(38);
11412 if ((binx == binx2) && (binz == binz2))
11419 hp->SetYTitle(
"Number of Entries");
11426 if (!findAxis(binx, biny,
'z'))
11428 binx2 = extend_bin(xaxis, binx);
11429 biny2 = extend_bin(yaxis, biny);
11431 convert(binx, biny, iMin, rect1x[0], rect1y[0]);
11432 convert(binx, biny, iMax, rect1x[1], rect1y[1]);
11433 convert(binx, biny2, iMax, rect1x[2], rect1y[2]);
11434 convert(binx, biny2, iMin, rect1x[3], rect1y[3]);
11435 convert(binx2, biny, iMin, rect2x[0], rect2y[0]);
11436 convert(binx2, biny, iMax, rect2x[1], rect2y[1]);
11437 convert(binx2, biny2, iMax, rect2x[2], rect2y[2]);
11438 convert(binx2, biny2, iMin, rect2x[3], rect2y[3]);
11443 if (
auto hp = make_proj(
"z")) {
11444 hp->SetFillColor(38);
11445 if ((binx == binx2) && (biny == biny2))
11452 hp->SetYTitle(
"Number of Entries");
11460 if (!findAxis(dummy, binz,
'x') && !findAxis(dummy, binz,
'y'))
11462 binz2 = extend_bin(zaxis, binz);
11464 convert(iMin, iMax, binz, rect1x[0], rect1y[0]);
11465 convert(iMax, iMax, binz, rect1x[1], rect1y[1]);
11466 convert(iMax, iMin, binz, rect1x[2], rect1y[2]);
11467 convert(iMin, iMin, binz, rect1x[3], rect1y[3]);
11468 if (binz != binz2) {
11469 convert(iMin, iMax, binz2, rect2x[0], rect2y[0]);
11470 convert(iMax, iMax, binz2, rect2x[1], rect2y[1]);
11471 convert(iMax, iMin, binz2, rect2x[2], rect2y[2]);
11472 convert(iMin, iMin, binz2, rect2x[3], rect2y[3]);
11479 if (
auto hp = make_proj(kind == 4 ?
"xy" :
"yx")) {
11480 hp->SetFillColor(38);
11482 hp->SetTitle(
TString::Format(
"Projection%s, binz=%s [z=%.1f..%.1f]", kind == 4 ?
"XY" :
"YX", sbins.
Data(),
11491 hp->SetZTitle(
"Number of Entries");
11499 if (!findAxis(biny, dummy,
'x') && !findAxis(dummy, biny,
'z'))
11502 biny2 = extend_bin(yaxis, biny);
11504 convert(iMin, biny, iMax, rect1x[0], rect1y[0]);
11505 convert(iMax, biny, iMax, rect1x[1], rect1y[1]);
11506 convert(iMax, biny, iMin, rect1x[2], rect1y[2]);
11507 convert(iMin, biny, iMin, rect1x[3], rect1y[3]);
11509 if (biny != biny2) {
11510 convert(iMin, biny2, iMax, rect2x[0], rect2y[0]);
11511 convert(iMax, biny2, iMax, rect2x[1], rect2y[1]);
11512 convert(iMax, biny2, iMin, rect2x[2], rect2y[2]);
11513 convert(iMin, biny2, iMin, rect2x[3], rect2y[3]);
11520 if (
auto hp = make_proj(kind == 6 ?
"xz" :
"zx")) {
11521 hp->SetFillColor(38);
11523 hp->SetTitle(
TString::Format(
"Projection%s, biny=%s [y=%.1f..%.1f]", kind == 6 ?
"XZ" :
"ZX", sbins.
Data(),
11532 hp->SetZTitle(
"Number of Entries");
11540 if (!findAxis(binx, dummy,
'y') && !findAxis(binx, dummy,
'z'))
11543 binx2 = extend_bin(xaxis, binx);
11545 convert(binx, iMax, iMin, rect1x[0], rect1y[0]);
11546 convert(binx, iMax, iMax, rect1x[1], rect1y[1]);
11547 convert(binx, iMin, iMax, rect1x[2], rect1y[2]);
11548 convert(binx, iMin, iMin, rect1x[3], rect1y[3]);
11549 if (binx != binx2) {
11550 convert(binx2, iMax, iMin, rect2x[0], rect2y[0]);
11551 convert(binx2, iMax, iMax, rect2x[1], rect2y[1]);
11552 convert(binx2, iMin, iMax, rect2x[2], rect2y[2]);
11553 convert(binx2, iMin, iMin, rect2x[3], rect2y[3]);
11559 if (
auto hp = make_proj(kind == 8 ?
"yz" :
"zy")) {
11560 hp->SetFillColor(38);
11562 hp->SetTitle(
TString::Format(
"Projection%s of binx=%s [x=%.1f..%.f]", kind == 8 ?
"YZ" :
"ZY", sbins.
Data(),
11571 hp->SetZTitle(
"Number of Entries");
short Style_t
Style number (short)
int Int_t
Signed integer 4 bytes (int)
short Color_t
Color number (short)
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
short Width_t
Line width (short)
float Float_t
Float 4 bytes (float)
short Short_t
Signed Short integer 2 bytes (short)
double Double_t
Double 8 bytes.
const char Option_t
Option string (const char)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pixel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmin
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char cname
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint angle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void xpos
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char backcolor
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void ypos
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmax
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TH1 * gCurrentHist
R__EXTERN Hoption_t Hoption
static TString gStringStdDevZ
static TString gStringStdDevX
static TString gStringIntegralBinWidth
const UInt_t kCannotRotate
static TString gStringStdDev
static TString gStringOverflow
static TString gStringUnderflow
static TString gStringSkewnessY
static TString gStringMean
static TString gStringKurtosis
static TString gStringMeanX
static TString gStringEntries
static TString gStringIntegral
static TString gStringKurtosisY
static TString gStringStdDevY
static TString gStringMeanY
static TString gStringSkewnessX
static TString gStringKurtosisX
static std::unique_ptr< TBox > gXHighlightBox
static std::unique_ptr< TBox > gYHighlightBox
static TString gStringSkewnessZ
static TString gStringMeanZ
static TString gStringSkewness
static TString gStringKurtosisZ
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
Draw all kinds of Arrows.
virtual Int_t GetNdivisions() const
virtual Float_t GetLabelOffset() const
virtual Float_t GetLabelSize() const
virtual Float_t GetTickLength() const
virtual Float_t GetTitleOffset() const
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual void SetImageQuality(EImageQuality lquality)
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
static Style_t GetMarkerStyleBase(Style_t style)
Internal helper function that returns the corresponding marker style with line width 1 for the given ...
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
virtual Font_t GetTextFont() const
Return the text font.
virtual void SetTextAngle(Float_t tangle=0)
Set the text angle.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Class to manage histogram axis.
virtual Bool_t GetTimeDisplay() const
Bool_t IsAlphanumeric() const
const char * GetTitle() const override
Returns title of object.
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
const TArrayD * GetXbins() const
const char * GetBinLabel(Int_t bin) const
Return label for bin.
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual Int_t FindFixBin(Double_t x) const
Find bin number corresponding to abscissa x
const char * ChooseTimeFormat(Double_t axislength=0)
Choose a reasonable time format from the coordinates in the active pad and the number of divisions in...
Int_t GetLast() const
Return last bin on the axis i.e.
virtual const char * GetTimeFormatOnly() const
Return only the time format from the string fTimeFormat.
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates, that is,...
virtual const char * GetTimeFormat() const
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis using bin numbers.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Int_t GetFirst() const
Return first bin on the axis i.e.
THashList * GetLabels() const
The candle plot painter class.
void SetLog(int x, int y, int z)
void SetHistoWidth(const Double_t width)
virtual void Paint(Option_t *option="")
Paint one candle with its current attributes.
Bool_t IsViolinScaled() const
Returns true if violin plot should be scaled.
Bool_t IsHorizontal() const
int ParseOption(char *optin)
Parsing of the option-string.
void SetOption(CandleOption opt)
void SetHistogram(TH1D *proj)
Bool_t IsCandleScaled() const
Returns true if candle plot should be scaled.
void SetCandleWidth(const Double_t width)
void SetAxisPosition(const Double_t candlePos)
static Bool_t SupportAlpha()
Static function returning "true" if transparency is supported.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
void SetName(const char *name)
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
void Paint(Option_t *option="") override
Paint all objects in this collection.
The color creation and management class.
virtual void SetRGB(Float_t r, Float_t g, Float_t b)
Initialize this color and its "dark" and "bright" associated colors.
static void RGBtoHLS(Float_t r, Float_t g, Float_t b, Float_t &h, Float_t &l, Float_t &s)
virtual void GetRGB(Float_t &r, Float_t &g, Float_t &b) const
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
static Int_t GetColorBright(Int_t color)
Static function: Returns the bright color number corresponding to n If the TColor object does not exi...
static Int_t GetColorDark(Int_t color)
Static function: Returns the dark color number corresponding to n If the TColor object does not exist...
static void HLStoRGB(Float_t h, Float_t l, Float_t s, Float_t &r, Float_t &g, Float_t &b)
void Paint(Option_t *option="") override
Paint this crown with its current attributes.
void SetYXRatio(Double_t v=1)
TDirectory::TContext keeps track and restore the current directory.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual Double_t GetXmax() const
virtual Int_t GetNDF() const
Return the number of degrees of freedom in the fit the fNDF parameter has been previously computed du...
virtual void GetParLimits(Int_t ipar, Double_t &parmin, Double_t &parmax) const
Return limits for parameter ipar.
virtual Double_t GetParError(Int_t ipar) const
Return value of parameter number ipar.
Double_t GetChisquare() const
Return the Chisquare after fitting. See ROOT::Fit::FitResult::Chi2()
virtual void SetMaximum(Double_t maximum=-1111)
Set the maximum value along Y for this function In case the function is already drawn,...
virtual Double_t GetMaximumStored() const
virtual Int_t GetNpar() const
virtual Int_t GetNumberFreeParameters() const
Return the number of free parameters.
virtual void SetMinimum(Double_t minimum=-1111)
Set the minimum value along Y for this function In case the function is already drawn,...
virtual const char * GetParName(Int_t ipar) const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
virtual Double_t GetXmin() const
virtual Double_t GetParameter(Int_t ipar) const
A 2-Dim function with parameters.
void Paint(Option_t *option="") override
Paint this 2-D function with its current attributes.
void SetRange(Double_t xmin, Double_t xmax) override
Initialize the upper and lower bounds to draw the function.
TF3 defines a 3D Function with Parameters.
void SetTimeFormat(const char *tformat)
Change the format used for time plotting.
virtual void PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Double_t &wmin, Double_t &wmax, Int_t &ndiv, Option_t *chopt="", Double_t gridlength=0, Bool_t drawGridOnly=kFALSE)
Control function to draw an axis.
void SetTitleOffset(Float_t titleoffset=1)
virtual void SetTitle(const char *title="")
Change the title of the axis.
void SetLabelOffset(Float_t labeloffset)
virtual void ImportAxisAttributes(TAxis *axis)
Internal method to import TAxis attributes to this TGaxis.
void SetTickSize(Float_t ticksize)
void SetLabelSize(Float_t labelsize)
void SetOption(Option_t *option="")
To set axis options.
Graphics object made of three arrays X, Y and Z with the same number of points each.
TGraphDelaunay2D generates a Delaunay triangulation of a TGraph2D.
TGraphDelaunay generates a Delaunay triangulation of a TGraph2D.
A TGraph is an object made of two arrays X and Y with npoints each.
@ kClipFrame
Clip to the frame boundary.
void PaintGraph(Int_t npoints, const Double_t *x, const Double_t *y, Option_t *chopt)
Draw the (x,y) as a graph.
void PaintGrapHist(Int_t npoints, const Double_t *x, const Double_t *y, Option_t *chopt)
Draw the (x,y) as a histogram.
1-D histogram with a double per channel (see TH1 documentation)
1-D histogram with a float per channel (see TH1 documentation)
TH1 is the base class of all histogram classes in ROOT.
virtual EBinErrorOpt GetBinErrorOption() const
virtual Float_t GetBarWidth() const
virtual Double_t GetMinimumStored() const
virtual Float_t GetBarOffset() const
virtual Double_t GetStdDev(Int_t axis=1) const
Returns the Standard Deviation (Sigma).
virtual Int_t GetNbinsY() const
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
virtual Int_t GetNbinsZ() const
virtual Double_t GetNormFactor() const
virtual Double_t GetMean(Int_t axis=1) const
For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
virtual Double_t GetSkewness(Int_t axis=1) const
virtual Double_t GetContourLevelPad(Int_t level) const
Return the value of contour number "level" in Pad coordinates.
virtual Int_t GetDimension() const
@ kNoTitle
Don't draw the histogram title.
@ kUserContour
User specified contour levels.
@ kNoStats
Don't draw stats box.
virtual Double_t GetSumOfWeights() const
Return the sum of weights across all bins excluding under/overflows.
virtual Int_t GetBin(Int_t binx, Int_t biny=0, Int_t binz=0) const
Return Global bin number corresponding to binx,y,z.
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
Return maximum value smaller than maxval of bins in the range, unless the value has been overridden b...
virtual Int_t GetNbinsX() const
virtual void SetMaximum(Double_t maximum=-1111)
virtual Double_t GetBinErrorLow(Int_t bin) const
Return lower error associated to bin number bin.
void Draw(Option_t *option="") override
Draw this histogram with options.
virtual void SetMinimum(Double_t minimum=-1111)
virtual Double_t Integral(Option_t *option="") const
Return integral of bin contents.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
virtual Double_t GetEntries() const
Return the current number of entries.
TList * GetListOfFunctions() const
virtual Double_t GetMeanError(Int_t axis=1) const
Return standard error of mean of this histogram along the X axis.
virtual Double_t GetMaximumStored() const
virtual void GetMinimumAndMaximum(Double_t &min, Double_t &max) const
Retrieve the minimum and maximum values in the histogram.
virtual Int_t GetMaximumBin() const
Return location of bin with maximum value in the range.
@ kNormal
Errors with Normal (Wald) approximation: errorUp=errorLow= sqrt(N)
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual Int_t GetContour(Double_t *levels=nullptr)
Return contour values into array levels if pointer levels is non zero.
const Double_t * GetBuffer() const
virtual Bool_t IsHighlight() const
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
virtual void SetContour(Int_t nlevels, const Double_t *levels=nullptr)
Set the number and values of contour levels.
virtual Double_t GetBinErrorUp(Int_t bin) const
Return upper error associated to bin number bin.
virtual Int_t GetSumw2N() const
virtual Double_t GetStdDevError(Int_t axis=1) const
Return error of standard deviation estimation for Normal distribution.
virtual Double_t GetMinimum(Double_t minval=-FLT_MAX) const
Return minimum value larger than minval of bins in the range, unless the value has been overridden by...
virtual void LabelsDeflate(Option_t *axis="X")
Reduce the number of bins for the axis passed in the option to the number of bins having a label.
virtual Int_t BufferEmpty(Int_t action=0)
Fill histogram with all entries in the buffer.
virtual Double_t GetKurtosis(Int_t axis=1) const
2-D histogram with a double per channel (see TH1 documentation)
2-D histogram with a float per channel (see TH1 documentation)
Helper class to represent a bin in the TH2Poly histogram.
2D Histogram with Polygonal Bins
Service class for 2-D histogram classes.
TH1D * ProjectionY(const char *name="_py", Int_t firstxbin=0, Int_t lastxbin=-1, Option_t *option="") const
Project a 2-D histogram into a 1-D histogram along Y (integration along X).
TH1D * ProjectionX(const char *name="_px", Int_t firstybin=0, Int_t lastybin=-1, Option_t *option="") const
Project a 2-D histogram into a 1-D histogram along X (integration along Y).
Double_t GetBinContent(Int_t binx, Int_t biny) const override
Double_t Integral(Option_t *option="") const override
Return integral of bin contents.
The 3-D histogram classes derived from the 1-D histogram classes.
Double_t Integral(Option_t *option="") const override
Return integral of bin contents.
The Histogram stack class.
The histogram painter class.
static Int_t ProjectSinusoidal2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for sinusoidal projection from Ernst-Jan Buis Source https://en....
void Paint(Option_t *option="") override
Control routine to paint any kind of histograms
TAxis * fYaxis
Pointer to Y axis.
std::unique_ptr< TPainter3dAlgorithms > fLego
Pointer to a TPainter3dAlgorithms object.
std::vector< Double_t > fXbuf
X buffer coordinates.
Int_t fXHighlightBin
X highlight bin.
TF3 * fCurrentF3
Current TF3 function.
virtual void PaintErrors(Option_t *option)
Draw 1D histograms error bars.
~THistPainter() override
destructor.
Int_t fShowProjection2
True if a second projection must be drawn (when calling SetShowProjectionXY on a TH2)
virtual void PaintTF3()
Control function to draw a 3D implicit functions.
virtual Int_t TableInit()
Initialize various options to draw 2D histograms.
virtual void PaintTH2PolyScatterPlot(Option_t *option)
Control function to draw a TH2Poly as a scatter plot.
static Int_t ProjectMollweide2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
static Int_t ProjectAitoff2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
virtual void PaintText(Option_t *option)
Control function to draw a 1D/2D histograms with the bin values.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute the distance from the point px,py to a line.
virtual void PaintAxis(Bool_t drawGridOnly=kFALSE)
Draw axis (2D case) of an histogram.
virtual void PaintColorLevelsFast(Option_t *option)
[Rendering scheme for the COL2 and COLZ2 options] (HP14)
virtual Int_t PaintInit()
Compute histogram parameters used by the drawing routines.
virtual void Paint2DErrors(Option_t *option)
Draw 2D histograms errors.
Int_t fYHighlightBin
Y highlight bin.
virtual void PaintCandlePlot(Option_t *option)
Control function to draw a 2D histogram as a candle (box) plot or violin plot
virtual void PaintScatterPlot(Option_t *option)
Control function to draw a 2D histogram as a scatter plot.
void SetShowProjectionXY(const char *option, Int_t nbinsY, Int_t nbinsX) override
Set projection XY.
virtual void PaintLego(Option_t *option)
Control function to draw a 2D histogram as a lego plot.
virtual void PaintH3(Option_t *option="")
Control function to draw a 3D histograms.
Int_t fNcuts
Number of graphical cuts.
TString fShowOption
Option to draw the projection.
virtual void PaintHighlightBin(Option_t *option="")
Paint highlight bin as TBox object.
virtual void PaintTH2PolyBins(Option_t *option)
Control function to draw a TH2Poly bins' contours.
virtual Int_t PaintContourLine(Double_t elev1, Int_t icont1, Double_t x1, Double_t y1, Double_t elev2, Int_t icont2, Double_t x2, Double_t y2, Double_t *xarr, Double_t *yarr, Int_t *itarr, Double_t *levels)
Fill the matrix xarr and yarr for Contour Plot.
Int_t DetectProjectionKind(Option_t *option)
Return projection kind from option string.
Int_t fShowProjection
True if a projection must be drawn.
virtual void PaintLegoAxis(TGaxis *axis, Double_t ang)
Draw the axis for legos and surface plots.
virtual void PaintTriangles(Option_t *option)
Control function to draw a table using Delaunay triangles.
virtual void HighlightBin(Int_t px, Int_t py)
Check on highlight bin.
virtual void PaintH3Box(Int_t iopt)
Control function to draw a 3D histogram with boxes.
Int_t MakeCuts(char *cutsopt) override
Decode string choptin and fill Graphical cuts structure.
TList * fFunctions
Pointer to histogram list of functions.
void DrawPanel() override
Display a panel with all histogram drawing options.
std::unique_ptr< TPie > fPie
Pointer to a TPie in case of option PIE.
static void PaintSpecialObjects(const TObject *obj, Option_t *option)
Static function to paint special objects like vectors and matrices.
virtual void PaintTitle()
new TGaxis/////////////////// Draw the histogram title
virtual void PaintTH2PolyColorLevels(Option_t *option)
Control function to draw a TH2Poly as a color plot.
virtual std::vector< THistRenderingRegion > ComputeRenderingRegions(TAxis *pAxis, Int_t nPixels, bool isLog)
Returns the rendering regions for an axis to use in the COL2 option.
virtual void ShowProjectionX(Int_t px, Int_t py)
Show projection onto X.
virtual void PaintPalette()
Paint the color palette on the right side of the pad.
TAxis * fXaxis
Pointer to X axis.
virtual void PaintStat2(Int_t dostat, TF1 *fit)
Draw the statistics box for 2D histograms.
virtual void PaintArrows(Option_t *option)
Control function to draw a table as an arrow plot
virtual void RecalculateRange()
Recompute the histogram range following graphics operations.
void PaintStat(Int_t dostat, TF1 *fit) override
Draw the statistics box for 1D and profile histograms.
static Int_t ProjectParabolic2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function code for parabolic projection from Ernst-Jan Buis.
std::unique_ptr< TGraph2DPainter > fGraph2DPainter
Pointer to a TGraph2DPainter object.
virtual void PaintBarH(Option_t *option)
Draw a bar char in a rotated pad (X vertical, Y horizontal)
virtual void PaintStat3(Int_t dostat, TF1 *fit)
Draw the statistics box for 3D histograms.
virtual void PaintSurface(Option_t *option)
Control function to draw a 2D histogram as a surface plot.
TList * fStack
Pointer to stack of histograms (if any)
THistPainter()
Default constructor.
TH1 * fH
Pointer to histogram to paint.
virtual void PaintTH2PolyText(Option_t *option)
Control function to draw a TH2Poly as a text plot.
virtual void ShowProjection3(Int_t px, Int_t py)
Show projection (specified by fShowProjection) of a TH3.
TAxis * fZaxis
Pointer to Z axis.
void SetHistogram(TH1 *h) override
Set current histogram to h
virtual void PaintFunction(Option_t *option)
[Paint functions associated to an histogram.](HP28")
virtual void PaintBar(Option_t *option)
Draw a bar-chart in a normal pad.
static Int_t ProjectMercator2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
Static function.
virtual void PaintBoxes(Option_t *option)
Control function to draw a 2D histogram as a box plot
virtual Int_t MakeChopt(Option_t *option)
Decode string choptin and fill Hoption structure.
char * GetObjectInfo(Int_t px, Int_t py) const override
Display the histogram info (bin number, contents, integral up to bin corresponding to cursor position...
TList * GetContourList(Double_t contour) const override
Get a contour (as a list of TGraphs) using the Delaunay triangulation.
void ProcessMessage(const char *mess, const TObject *obj) override
Process message mess.
void SetShowProjection(const char *option, Int_t nbins) override
Set projection.
virtual void ShowProjectionY(Int_t px, Int_t py)
Show projection onto Y.
static const char * GetBestFormat(Double_t v, Double_t e, const char *f)
This function returns the best format to print the error value (e) knowing the parameter value (v) an...
virtual void PaintContour(Option_t *option)
Control function to draw a 2D histogram as a contour plot.
TCutG * fCuts[kMaxCuts]
Pointers to graphical cuts.
virtual void PaintTable(Option_t *option)
Control function to draw 2D/3D histograms (tables).
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute the actions corresponding to event.
virtual Int_t PaintInitH()
Compute histogram parameters used by the drawing routines for a rotated pad.
virtual void PaintFrame()
Calculate range and clear pad (canvas).
Int_t fCutsOpt[kMaxCuts]
Sign of each cut.
virtual void PaintH3Iso()
Control function to draw a 3D histogram with Iso Surfaces.
std::vector< Double_t > fYbuf
Y buffer coordinates.
virtual void PaintH3BoxRaster()
Control function to draw a 3D histogram with boxes.
virtual void PaintHist(Option_t *option)
Control routine to draw 1D histograms
void SetHighlight() override
Set highlight (enable/disable) mode for fH.
virtual void DefineColorLevels(Int_t ndivz)
Define the color levels used to paint legos, surfaces etc..
virtual void PaintColorLevels(Option_t *option)
Control function to draw a 2D histogram as a color plot.
Bool_t IsInside(Int_t x, Int_t y) override
Return kTRUE if the cell ix, iy is inside one of the graphical cuts.
A class to define a conversion from pixel values to pixel color.
static TImagePalette * CreateCOLPalette(Int_t nContours)
Factory method to creates an image palette for histogram plotting.
An abstract interface to image processing library.
static TImage * Create()
Create an image.
virtual void SetImage(const Double_t *, UInt_t, UInt_t, TImagePalette *=nullptr)
To draw Mathematical Formula.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
TObject * Remove(TObject *obj) override
Remove object from the list.
TObject * First() const override
Return the first object in the list. Returns 0 when list is empty.
virtual TObjLink * FirstLink() const
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
void AddFirst(TObject *obj) override
Add object at the beginning of the list.
A TMultiGraph is a collection of TGraph (or derived) objects.
TList * GetListOfGraphs() const
virtual Int_t IsInside(Double_t x, Double_t y) const
Return 1 if the point (x,y) is inside one of the graphs 0 otherwise.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
void Delete(Option_t *option="") override
Remove all objects from the array AND delete all heap based objects.
TObject * At(Int_t idx) const override
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Add(TObject *obj) override
TObject * GetObject() const
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual Option_t * GetDrawOption() const
Get option used by the graphics system to draw this object.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
virtual void Delete(Option_t *option="")
Delete this object.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * GetTitle() const
Returns title of object.
virtual TClass * IsA() const
virtual void Paint(Option_t *option="")
This method must be overridden if a class wants to paint itself.
@ kCannotPick
if object in a pad cannot be picked
@ kCanDelete
if object in a list can be deleted
@ kMustCleanup
if object destructor must call RecursiveRemove()
void DrawFaceMove3(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 3rd variant for "MOVING SCREEN" algorithm (draw level lines only)
void DrawLevelLines(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw level lines without hidden line removal.
void SurfaceFunction(Int_t ia, Int_t ib, Double_t *f, Double_t *t)
Service function for Surfaces.
void DrawFaceMode1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 1st variant (2 colors: 1st for external surface, 2nd for internal)
void GouraudFunction(Int_t ia, Int_t ib, Double_t *f, Double_t *t)
Find part of surface with luminosity in the corners.
void DrawFaceMove1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 1st variant for "MOVING SCREEN" algorithm (draw face with level lines)
void DrawFaceRaster2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 2nd variant for "RASTER SCREEN" algorithm (draw face for stacked lego plot)
void LegoFunction(Int_t ia, Int_t ib, Int_t &nv, Double_t *ab, Double_t *vv, Double_t *t)
Service function for Legos.
void DrawFaceMove2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 2nd variant for "MOVING SCREEN" algorithm (draw face for stacked lego plot)
void DrawFaceRaster1(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *tt)
Draw face - 1st variant for "RASTER SCREEN" algorithm (draw face with level lines)
void DrawFaceMode3(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 3rd option (draw face for stacked lego plot)
void DrawFaceMode2(Int_t *icodes, Double_t *xyz, Int_t np, Int_t *iface, Double_t *t)
Draw face - 2nd option (fill in correspondence with function levels)
The palette painting class.
void Paint(Option_t *option="") override
Paint the palette.
void SetHistogram(TH1 *h)
The histogram statistics painter class.
Int_t GetOptStat() const
Return the stat option.
virtual void SetStatFormat(const char *format="6.4g")
Change (i.e. set) the format for printing statistics.
void SetOptStat(Int_t stat=1)
Set the stat option.
virtual const char * GetFitFormat() const
virtual void SetFitFormat(const char *format="5.4g")
Change (i.e. set) the format for printing fit parameters in statistics box.
Int_t GetOptFit() const
Return the fit option.
void SetParent(TObject *obj) override
void SetOptFit(Int_t fit=1)
Set the fit option.
virtual const char * GetStatFormat() const
void Paint(Option_t *option="") override
Paint the pave stat.
A Pave (see TPave) with text, lines or/and boxes inside.
virtual TText * AddText(Double_t x1, Double_t y1, const char *label)
Add a new Text line to this pavetext at given coordinates.
void Clear(Option_t *option="") override
Clear all lines in this pavetext.
void Draw(Option_t *option="") override
Draw this pavetext with its current attributes.
void Paint(Option_t *option="") override
Paint this pavetext with its current attributes.
virtual TText * GetLine(Int_t number) const
Get Pointer to line number in this pavetext.
const char * GetName() const override
Returns name of object.
virtual void SetName(const char *name="")
virtual void SetBorderSize(Int_t bordersize=4)
Sets the border size of the TPave box and shadow.
Option_t * GetOption() const override
Double_t GetX1NDC() const
virtual void SetX2NDC(Double_t x2)
Profile2D histograms are used to display the mean value of Z and its error for each cell in X,...
virtual Double_t GetBinEntries(Int_t bin) const
Return bin entries of a Profile2D histogram.
virtual Double_t GetBinEntries(Int_t bin) const
Return bin entries of a Profile histogram.
Random number generator class based on the maximally equidistributed combined Tausworthe generator by...
Double_t Rndm() override
TausWorth generator from L'Ecuyer, uses as seed 3x32bits integers Use a mask of 0xffffffffUL to make ...
Sequenceable collection abstract base class.
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Color_t GetStatTextColor() const
Float_t GetTitleX() const
Int_t GetOptTitle() const
Float_t GetStatFontSize() const
Float_t GetBarOffset() const
Float_t GetTitleSize(Option_t *axis="X") const
Return title size.
Float_t GetTitleY() const
Style_t GetTitleFont(Option_t *axis="X") const
Return title font.
Bool_t GetHistMinimumZero() const
Color_t GetTitleFillColor() const
Style_t GetTitleStyle() const
Color_t GetStatColor() const
Float_t GetBarWidth() const
void SetDrawBorder(Int_t drawborder=1)
Width_t GetTitleBorderSize() const
Int_t GetColorPalette(Int_t i) const
Return color number i in current palette.
Float_t GetErrorX() const
Double_t GetHistTopMargin() const
void SetBarOffset(Float_t baroff=0.5)
Float_t GetEndErrorSize() const
Int_t GetDrawBorder() const
Width_t GetStatBorderSize() const
Color_t GetTitleTextColor() const
void SetBarWidth(Float_t barwidth=0.5)
Float_t GetTitleH() const
Style_t GetStatStyle() const
const char * GetFitFormat() const
const char * GetStatFormat() const
Int_t GetNumberOfColors() const
Return number of colors in the color palette.
Int_t GetNumberContours() const
const char * GetPaintTextFormat() const
Style_t GetStatFont() const
Float_t GetTitleFontSize() const
Int_t GetTitleAlign() const
Float_t GetTitleW() const
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
Base class for several text objects.
virtual Double_t GetPsi()=0
virtual Double_t * GetRmax()=0
virtual void SetAxisNDC(const Double_t *x1, const Double_t *x2, const Double_t *y1, const Double_t *y2, const Double_t *z1, const Double_t *z2)=0
virtual Double_t * GetRmin()=0
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)=0
virtual void SetOutlineToCube()=0
virtual Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t &ratio)=0
virtual Double_t * GetTnorm()=0
virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)=0
virtual TSeqCollection * GetOutline()=0
virtual void PadRange(Int_t rback)=0
virtual void SetRange(const Double_t *min, const Double_t *max)=0
virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)=0
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)=0
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)=0
Abstract base class used by ROOT graphics editor.
static TVirtualPadEditor * GetPadEditor(Bool_t load=kTRUE)
Returns the pad editor dialog. Static method.
small helper class to store/restore gPad context in TPad methods
Helper class to store interactive parameters for individual objects Should be used via MakeInteractiv...
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual Double_t PadtoX(Double_t x) const =0
virtual void UpdateAsync()=0
virtual Double_t AbsPixeltoX(Double_t px)=0
virtual void PaintBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Option_t *option="")=0
virtual Double_t PadtoY(Double_t y) const =0
virtual void Close(Option_t *option="")=0
virtual Double_t AbsPixeltoY(Double_t py)=0
virtual Bool_t OpaqueMoving() const =0
TZoomInteractive(TVirtualPad &parent, Int_t px, Int_t py)
void ChangeRange(TAxis *xaxis, TAxis *yaxis)
void MovePoint(TVirtualPad &parent, Int_t px, Int_t py)
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...
Double_t ATan(Double_t)
Returns the principal value of the arc tangent of x, expressed in radians.
constexpr Double_t PiOver2()
Double_t Log(Double_t x)
Returns the natural logarithm of x.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Bool_t AreEqualRel(Double_t af, Double_t bf, Double_t relPrec)
Comparing floating points.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Double_t Tan(Double_t)
Returns the tangent of an angle of x radians.
Long64_t BinarySearch(Long64_t n, const T *array, T value)
Binary search in an array of n values to locate value.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Histograms' drawing options structure.
int Curve
"C" A smooth Curve is drawn.
int Proj
"AITOFF", "MERCATOR", "SINUSOIDAL" and "PARABOLIC" projections for 2d plots.
int Axis
"A" Axis are not drawn around the graph.
int Box
"BOX" Draw 2D plot with proportional Boxes.
int Scat
"SCAT" Draw 2D plot a Scatter plot.
int Text
"TEXT" Draw 2D plot with the content of each cell.
int Color
"COL" Draw 2D plot with Colored boxes.
int AxisPos
"X+" and "Y+" Axis position
int List
"LIST" Generate the TObjArray "contours". To be used with option "CONT"
int Logx
log scale in X. Also set by histogram option
int Zscale
"Z" Display the color palette.
int MinimumZero
"MIN0" or gStyle->GetHistMinimumZero()
int Contour
"CONTn" Draw 2D plot as a Contour plot (0 <= n <= 5).
int Off
"][" The first and last vertical lines are not drawn.
int Func
"FUNC" Draw only the function (for example in case of fit).
long Candle
"CANDLE" and "VIOLIN" Draw a 2D histogram as candle/box plot or violin plot.
int Spec
"SPEC" TSpectrum graphics
int FrontBox
"FB" Suppress the front box for the 3D plots.
int Pie
"PIE" Draw 1D plot as a pie chart.
int Star
"*" With option "P", a * is plotted at each point.
int Zero
"0" if selected with any LEGO option the empty bins are not drawn.
int Logz
log scale in Z. Also set by histogram option
int Tri
"TRI" Draw TGraph2D with Delaunay triangles.
int BackBox
"BB" Suppress the back box for the 3D plots.
int Mark
"P" The current Marker is drawn at each point.
int Arrow
"ARR" Draw 2D plot with Arrows.
int Line
"L" A simple polyline through every point is drawn.
int Same
"SAME" Histogram is plotted in the current pad.
int Lego
"LEGO" and "LEGOn" Draw as a Lego plot(1 <= n <= 4).
int Bar
"B", "BAR" and "HBAR" A Bar chart is drawn at each point.
int Polar
"POL" Draw 2D plot with Polar coordinates.
int Fill
"F" A fill area is drawn ("CF" draw a smooth fill area).
int Hist
"HIST" Draw only the histogram.
int Surf
"SURF" and "SURFn" Draw as a Surface ((1 <= n <= 4).
int Logy
log scale in Y. Also set by histogram option
int System
"POL", "CYL", "SPH" and "PSR" Type of coordinate system for 3D plots.
int Error
"En" Draw Errors with current marker type and size (0 <= n <=6).
Histogram parameters structure.
Double_t baroffset
Offset of bin for bars or legos [0,1].
Double_t ylowedge
Low edge of axis.
Double_t xmin
Minimum value along X.
Int_t ylast
Last bin number along Y.
Int_t xfirst
First bin number along X.
Double_t zmin
Minimum value along Z.
Double_t xbinsize
Bin size in case of equidistant bins.
Double_t ymin
Minimum value along y.
Double_t allchan
Integrated sum of contents.
Double_t xlowedge
Low edge of axis.
Double_t ymax
Maximum value along y.
Double_t factor
Multiplication factor (normalization)
Int_t xlast
Last bin number along X.
Double_t ybinsize
Bin size in case of equidistant bins.
Double_t barwidth
Width of bin for bars and legos [0,1].
Double_t zmax
Maximum value along Z.
Double_t xmax
Maximum value along X.
Int_t yfirst
First bin number along Y.