3242 const Int_t big = 9999;
3243 const Int_t kMaxDiff = 7;
3246 return fPie->DistancetoPrimitive(px, py);
3255 Int_t curdist = big;
3256 Int_t yxaxis, dyaxis,xyaxis, dxaxis;
3259 if (!PadPointer)
return 0;
3273 if (d3 <= kMaxDiff) {
gPad->SetSelected(
fZaxis);
return 0;}
3275 if (d1 <= kMaxDiff) {
gPad->SetSelected(
fXaxis);
return 0;}
3277 if (d2 <= kMaxDiff) {
gPad->SetSelected(
fYaxis);
return 0;}
3278 if ( px > puxmin && px < puxmax && py > puymax && py < puymin) curdist = 1;
3289 if (px <= xyaxis+dyaxis && px >= xyaxis && py >puymax && py < puymin) {
3298 if (px >= xyaxis-dyaxis && px <= xyaxis && py >puymax && py < puymin) {
3310 if (py >= yxaxis-dxaxis && py <= yxaxis && px <puxmax && px > puxmin) {
3319 if (yxaxis < puymin) yxaxis = puymin;
3320 if (py <= yxaxis+dxaxis && py >= yxaxis && px <puxmax && px > puxmin) {
3330 if ((px > puxmin) && (py < puymin) && (px < puxmax) && (py > puymax))
3346 Int_t bin =
th2->FindBin(pxu, pyu);
3347 if (bin>0) curdist = 1;
3353 if ( px > puxmin + delta2
3354 && px < puxmax - delta2
3355 && py > puymax + delta2
3356 && py < puymin - delta2) {curdist =1;
goto FUNCTIONS;}
3360 if (
gPad->IsVertical()) {
3365 if (binval == 0 && pybin < puymin) pybin = 10000;
3371 for (
Int_t ibin=bin+1; ibin<binsup; ibin++) {
3373 if (binvalmin>binvaltmp) binvalmin=binvaltmp;
3374 if (binvalmax<binvaltmp) binvalmax=binvaltmp;
3376 Int_t pybinmin =
gPad->YtoAbsPixel(
gPad->YtoPad(binvalmax));
3377 Int_t pybinmax =
gPad->YtoAbsPixel(
gPad->YtoPad(binvalmin));
3378 if (py<pybinmax+kMaxDiff/2 && py>pybinmin-kMaxDiff/2) pybin = py;
3380 if (bin != binsup) {
3382 Int_t pybinsub =
gPad->YtoAbsPixel(
gPad->YtoPad(binsupval));
3383 if (py <=
TMath::Max(pybinsub,pybin) && py >=
TMath::Min(pybinsub,pybin) && pybin != 10000)
return 0;
3393 if (binval == 0 && pxbin > puxmin) pxbin = 10000;
3399 for (
Int_t ibin=bin+1; ibin<binsup; ibin++) {
3401 if (binvalmin>binvaltmp) binvalmin=binvaltmp;
3402 if (binvalmax<binvaltmp) binvalmax=binvaltmp;
3404 Int_t pxbinmin =
gPad->XtoAbsPixel(
gPad->XtoPad(binvalmax));
3405 Int_t pxbinmax =
gPad->XtoAbsPixel(
gPad->XtoPad(binvalmin));
3406 if (px<pxbinmax+kMaxDiff/2 && px>pxbinmin-kMaxDiff/2) pxbin = px;
3416 if (
f->InheritsFrom(
TF1::Class())) dist =
f->DistancetoPrimitive(-px,py);
3417 else dist =
f->DistancetoPrimitive(px,py);
3418 if (dist < kMaxDiff) {
gPad->SetSelected(
f);
return dist;}
3431 Error(
"DrawPanel",
"need to draw histogram first");
3436 gROOT->ProcessLine(
TString::Format(
"((TCanvas*)0x%zx)->Selected((TVirtualPad*)0x%zx,(TObject*)0x%zx,1)",
3451 static Int_t bin, px1, py1, px2, py2, pyold;
3452 static std::unique_ptr<TBox> zoombox;
3456 Double_t xlow, xup, ylow, binval,
x, baroffset, barwidth, binwidth;
3459 if (!
gPad->IsEditable())
return;
3462 fPie->ExecuteEvent(event, px, py);
3480 if (IsSame.
Index(
"same")>=0) {
3482 TIter next(
gPad->GetListOfPrimitives());
3483 while ((
h1 = (
TH1 *)next())) {
3500 if (!opaque)
gVirtualX->SetLineColor(-1);
3501 fH->TAttLine::Modify();
3503 if (opaque && dimension ==2) {
3504 zbx1 =
gPad->AbsPixeltoX(px);
3505 zbx2 =
gPad->AbsPixeltoX(px);
3506 zby1 =
gPad->AbsPixeltoY(py);
3507 zby2 =
gPad->AbsPixeltoY(py);
3510 if (
gPad->GetLogx()) {
3514 if (
gPad->GetLogy()) {
3518 if (zoombox)
Error(
"ExecuteEvent",
"Last zoom box was not deleted");
3519 zoombox = std::make_unique<TBox>(zbx1, zby1, zbx2, zby2);
3524 zoombox->SetFillColor(ci);
3536 if (dimension ==1) {
3544 x =
gPad->AbsPixeltoX(px);
3548 xup =
gPad->XtoPad(xlow + barwidth*binwidth);
3549 ylow =
gPad->GetUymin();
3550 px1 =
gPad->XtoAbsPixel(xlow);
3551 px2 =
gPad->XtoAbsPixel(xup);
3552 py1 =
gPad->YtoAbsPixel(ylow);
3562 if (dimension ==1) {
3563 if (
gROOT->GetEditHistograms()) {
3572 binval =
gPad->PadtoY(
gPad->AbsPixeltoY(py2))/factor;
3579 if (opaque && dimension ==2) {
3581 zbx2 =
gPad->AbsPixeltoX(px);
3582 zby2 =
gPad->AbsPixeltoY(py);
3586 zoombox->SetX2(zbx2);
3587 zoombox->SetY2(zby2);
3598 if (dimension ==2) {
3603 if (bin2>bin1) xaxis->
SetRange(bin1,bin2);
3608 if (bin2>bin1) yaxis->
SetRange(bin1,bin2);
3617 if (dimension == 2) {
3622 if (bin2>bin1) xaxis->
SetRange(bin1,bin2);
3627 if (bin2>bin1) yaxis->
SetRange(bin1,bin2);
3635 if (dimension ==1) {
3636 if (
gROOT->GetEditHistograms()) {
3637 binval =
gPad->PadtoY(
gPad->AbsPixeltoY(py2))/factor;
3645 if (opaque && dimension ==2) {
3663 if (opaque)
gVirtualX->SetLineColor(-1);
3673 event =
gVirtualX->RequestLocator(1, 1, px, py);
3697 if (!dt && !dtOld)
return nullptr;
3702 ((
THistPainter*)
this)->fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
3714 if (!
gPad)
return (
char*)
"";
3724 if (
gPad->GetView() || drawOption.
Index(
"cont") >= 0) {
3725 uxmin=
gPad->GetUxmin();
3726 uxmax=
gPad->GetUxmax();
3730 uymin=
gPad->GetUymin();
3731 uymax=
gPad->GetUymax();
3737 Int_t binx,biny,binmin=0,binx1;
3738 if (
gPad->IsVertical()) {
3740 if (drawOption.
Index(
"same") >= 0) {
3742 TIter next(
gPad->GetListOfPrimitives());
3743 while ((
h1 = (
TH1 *)next())) {
3756 for (
Int_t ibin=binx+1; ibin<binx1; ibin++) {
3768 if (drawOption.
Index(
"same") >= 0) {
3770 TIter next(
gPad->GetListOfPrimitives());
3771 while ((
h1 = (
TH1 *)next())) {
3784 for (
Int_t ibin=binx+1; ibin<binx1; ibin++) {
3810 biny =
th2->FindBin(
x,
y);
3812 th2->GetBinTitle(biny),
x,
y,biny,
th2->GetBinContent(biny));
3818 fObjectInfo.
Form(
"(x=%g, y=%g, binx=%d, biny=%d, binc=%g, bine=%g, binn=%d)",
3874 if (!changedBin)
return;
3900 if (
gPad->GetLogx()) {
3904 if (
gPad->GetLogy()) {
3911 if (
gPad->IsVertical()) {
3913 if ((hcenter < uxmin) || (hcenter > uxmax))
return;
3916 if ((hcenter < uymin) || (hcenter > uymax))
return;
3920 if ((hcenter < uymin) || (hcenter > uymax))
return;
3925 if (
gPad->IsVertical()) {
4015 Int_t nch = strlen(choptin);
4016 strlcpy(chopt,choptin,128);
4043 for (
Int_t i=0;i<nch;i++) chopt[i] = toupper(chopt[i]);
4049 char *l1 = strstr(chopt,
"PFC");
4050 char *l2 = strstr(chopt,
"PLC");
4051 char *l3 = strstr(chopt,
"PMC");
4052 if (l1 || l2 || l3) {
4060 l = strstr(chopt,
"MIN0");
4066 l = strstr(chopt,
"SPEC");
4071 l = strstr(chopt,
"BF(");
4073 if (sscanf(&
l[3],
"%d",&bs) > 0) {
4086 l = strstr(chopt,
"GL");
4090 l = strstr(chopt,
"X+");
4095 l = strstr(chopt,
"Y+");
4103 l = strstr(chopt,
"SAMES");
4110 l = strstr(chopt,
"SAME");
4118 l = strstr(chopt,
"SCAT");
4120 Warning(
"MakeChopt",
"option SCAT is deprecated.");
4126 l = strstr(chopt,
"PIE");
4133 l = strstr(chopt,
"CANDLE");
4140 l = strstr(chopt,
"VIOLIN");
4147 l = strstr(chopt,
"LEGO");
4158 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4161 l = strstr(chopt,
"SURF");
4176 l = strstr(chopt,
"TF3");
4183 l = strstr(chopt,
"ISO");
4191 l = strstr(chopt,
"LIST");
if (
l) {
Hoption.
List = 1; memcpy(
l,
" ",4);}
4193 l = strstr(chopt,
"CONT");
4208 l = strstr(chopt,
"HBAR");
4217 l = strstr(chopt,
"BAR");
4227 l = strstr(chopt,
"ARR" );
4233 l = strstr(chopt,
"COL");
if (
l) {
Hoption.
Arrow = 2; memcpy(
l,
" ",3); }
4239 l = strstr(chopt,
"BOX" );
4252 l = strstr(chopt,
"TEXT");
4255 if (sscanf(&
l[4],
"%d",&
angle) > 0) {
4263 l = strstr(chopt,
"N");
4267 l = strstr(chopt,
"COLZ");
4271 explicitColor =
kTRUE;
4275 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4281 l = strstr(chopt,
"COL" );
4285 explicitColor =
kTRUE;
4288 l = strstr(chopt,
"0");
if (
l) {
Hoption.
Zero = 1; memcpy(
l,
" ",1); }
4296 l = strstr(chopt,
"AXIS");
if (
l) {
Hoption.
Axis = 1; memcpy(
l,
" ",4); }
4297 l = strstr(chopt,
"AXIG");
if (
l) {
Hoption.
Axis = 2; memcpy(
l,
" ",4); }
4298 l = strstr(chopt,
"SCAT");
if (
l) {
Hoption.
Scat = 1; memcpy(
l,
" ",4); }
4304 l = strstr(chopt,
"TRI");
4310 l = strstr(chopt,
"ERR");
if (
l) memcpy(
l,
" ",3);
4313 l = strstr(chopt,
"AITOFF");
4317 l = strstr(chopt,
"MERCATOR");
4321 l = strstr(chopt,
"SINUSOIDAL");
4325 l = strstr(chopt,
"PARABOLIC");
4329 l = strstr(chopt,
"MOLLWEIDE");
4355 if (strstr(chopt,
"E")) {
4365 if (strstr(chopt,
"X0")) {
4388 Warning(
"MakeChopt",
"option SURF5 is not supported in Cartesian and Polar modes");
4409 char *left = (
char*)strchr(choptin,
'[');
4410 if (!left)
return 0;
4411 char *right = (
char*)strchr(choptin,
']');
4412 if (!right)
return 0;
4413 Int_t nch = right-left;
4414 if (nch < 2)
return 0;
4415 char *cuts = left+1;
4417 char *comma, *minus;
4420 comma = strchr(cuts,
',');
4421 if (comma) *comma = 0;
4422 minus = strchr(cuts,
'-');
4423 if (minus) cuts = minus+1;
4424 while (*cuts ==
' ') cuts++;
4425 Int_t nc = strlen(cuts);
4426 while (cuts[nc-1] ==
' ') {cuts[nc-1] = 0; nc--;}
4430 while ((obj = next())) {
4432 if (strcmp(obj->
GetName(),cuts))
continue;
4445 for (i=0;i<=nch;i++) left[i] =
' ';
4473 gROOT->ProcessLineFast(
TString::Format(
"TSpectrum2Painter::PaintSpectrum((TH2F*)0x%zx,\"%s\",%d)",
4486 fPie = std::make_unique<TPie>(
fH);
4489 Error(
"Paint",
"Option PIE is for 1D histograms only");
4523 Int_t logysav=0, logzsav=0;
4560 gPad->RangeAxisChanged();
4578 if (gridx)
gPad->SetGridx(0);
4579 if (gridy)
gPad->SetGridy(0);
4581 if (gridx)
gPad->SetGridx(1);
4582 if (gridy)
gPad->SetGridy(1);
4617 if (gridx)
gPad->SetGridx(0);
4618 if (gridy)
gPad->SetGridy(0);
4620 if (gridx)
gPad->SetGridx(1);
4621 if (gridy)
gPad->SetGridy(1);
4630 while ((obj = next())) {
4638 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode())
4665 arrow->SetAngle(30);
4666 arrow->SetFillStyle(1001);
4672 Int_t ncolors=0, ndivz=0;
4686 for (
Int_t id=1;
id<=2;
id++) {
4693 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
4711 }
else if (
id == 2) {
4723 if (theColor > ncolors-1) theColor = ncolors-1;
4753 if (drawGridOnly && (
gPad->PadInHighlightMode() ||
gPad->PadInSelectionMode()))
4761 TAxis *xaxis =
nullptr;
4762 TAxis *yaxis =
nullptr;
4765 TIter next(
gPad->GetListOfPrimitives());
4768 while ((obj = next())) {
4774 if (strstr(opt,
"hbar")) {
4778 if (!strcmp(xaxis->
GetName(),
"xaxis")) {
4788 static char chopt[10] =
"";
4790 Int_t ndiv, ndivx, ndivy, nx1, nx2, ndivsave;
4791 Int_t useHparam = 0;
4792 Double_t umin, umax, uminsave, umaxsave;
4808 TIter next(
gPad->GetListOfPrimitives());
4809 while ((obj=next())) {
4820 if (
gPad->PadInSelectionMode())
4824 if (
gPad->PadInSelectionMode() || !
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() &&
gPad->GetSelected() ==
fXaxis)) {
4835 strlcat(chopt,
"SDH",10);
4836 if (ndivx < 0) strlcat(chopt,
"N",10);
4837 if (
gPad->GetGridx()) {
4838 gridl = (aymax-aymin)/(
gPad->GetY2() -
gPad->GetY1());
4839 strlcat(chopt,
"W",10);
4844 strlcat(chopt,
"G",10);
4866 strlcat(chopt,
"t",10);
4874 if (xAxisPos == 1) {
4890 strlcat(chopt,
"-",10);
4899 umin, umax, ndiv, chopt, gridl, drawGridOnly);
4904 if (
gPad->GetTickx() && !
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
4906 cw=strstr(chopt,
"-");
4909 strlcat(chopt,
"-",10);
4911 if (
gPad->GetTickx() < 2) strlcat(chopt,
"U",10);
4912 if ((cw=strstr(chopt,
"W"))) *cw=
'z';
4916 uminsave, umaxsave, ndivsave, chopt, gridl, drawGridOnly);
4922 if (
gPad->PadInSelectionMode())
4926 if (
gPad->PadInSelectionMode() || !
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() &&
gPad->GetSelected() ==
fYaxis)) {
4931 strlcat(chopt,
"SDH",10);
4932 if (ndivy < 0) strlcat(chopt,
"N",10);
4933 if (
gPad->GetGridy()) {
4934 gridl = (axmax-axmin)/(
gPad->GetX2() -
gPad->GetX1());
4935 strlcat(chopt,
"W",10);
4940 strlcat(chopt,
"G",10);
4962 strlcat(chopt,
"t",10);
4970 if (yAxisPos == 1) {
4986 strlcat(chopt,
"+L",10);
4995 umin, umax, ndiv, chopt, gridl, drawGridOnly);
5000 if (
gPad->GetTicky() && !
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
5001 if (
gPad->GetTicky() < 2) {
5002 strlcat(chopt,
"U",10);
5005 strlcat(chopt,
"+L",10);
5007 if ((cw=strstr(chopt,
"W"))) *cw=
'z';
5011 uminsave, umaxsave, ndivsave, chopt, gridl, drawGridOnly);
5034 if (hcolor ==
gPad->GetFrameFillColor()) ++hcolor;
5036 box.SetFillColor(hcolor);
5037 box.SetFillStyle(hstyle);
5047 if (ymax < gPad->GetUymin())
continue;
5049 if (ymin < gPad->GetUymin())
ymin =
gPad->GetUymin();
5062 box.SetFillColor(hcolor);
5082 if (!strcmp(xaxis->
GetName(),
"xaxis")) {
5096 if (hcolor ==
gPad->GetFrameFillColor()) ++hcolor;
5098 box.SetFillColor(hcolor);
5099 box.SetFillStyle(hstyle);
5108 if (xmax < gPad->GetUxmin())
continue;
5110 if (xmin < gPad->GetUxmin())
xmin =
gPad->GetUxmin();
5123 box.SetFillColor(hcolor);
5136 while ((obj = next())) {
5157 fH->TAttLine::Modify();
5158 fH->TAttFill::Modify();
5160 Double_t z, xk,xstep, yk, ystep, xcent, ycent, xlow, xup, ylow, yup;
5171 Double_t zminlin = zmin, zmaxlin = zmax;
5177 TIter next(
gPad->GetListOfPrimitives());
5178 while ((h2 = (
TH2 *)next())) {
5179 if (!h2->InheritsFrom(
TH2::Class()))
continue;
5228 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
5235 if (kZminNeg && z==0)
continue;
5247 if (dz == 0)
continue;
5249 if (zratio == 0)
continue;
5251 xup = xcent*zratio + xk + xcent;
5252 xlow = 2*(xk + xcent) - xup;
5253 if (xup-xlow < dxmin) xup = xlow+dxmin;
5261 yup = ycent*zratio + yk + ycent;
5262 ylow = 2*(yk + ycent) - yup;
5263 if (yup-ylow < dymin) yup = ylow+dymin;
5276 if (xlow >= xup)
continue;
5277 if (ylow >= yup)
continue;
5281 fH->TAttFill::Modify();
5282 gPad->PaintBox(xlow, ylow, xup, yup);
5284 gPad->PaintLine(xlow, ylow, xup, yup);
5285 gPad->PaintLine(xlow, yup, xup, ylow);
5290 fH->TAttFill::Modify();
5291 gPad->PaintBox(xlow, ylow, xup, yup);
5296 x[0] = xlow;
y[0] = ylow;
5297 x[1] = xlow + bwidth*(xup-xlow);
y[1] = ylow + bwidth*(yup-ylow);
5298 x[2] =
x[1];
y[2] = yup - bwidth*(yup-ylow);
5299 x[3] = xup - bwidth*(xup-xlow);
y[3] =
y[2];
5300 x[4] = xup;
y[4] = yup;
5301 x[5] = xlow;
y[5] = yup;
5302 x[6] = xlow;
y[6] = ylow;
5305 fH->TAttFill::Modify();
5306 gPad->PaintFillArea(7,
x,
y);
5309 x[0] = xlow;
y[0] = ylow;
5310 x[1] = xlow + bwidth*(xup-xlow);
y[1] = ylow + bwidth*(yup-ylow);
5311 x[2] = xup - bwidth*(xup-xlow);
y[2] =
y[1];
5312 x[3] =
x[2];
y[3] = yup - bwidth*(yup-ylow);
5313 x[4] = xup;
y[4] = yup;
5314 x[5] = xup;
y[5] = ylow;
5315 x[6] = xlow;
y[6] = ylow;
5318 fH->TAttFill::Modify();
5319 gPad->PaintFillArea(7,
x,
y);
5327 fH->TAttFill::Modify();
5337 TH1D *hproj =
nullptr;
5352 const Double_t standardCandleWidth = 0.66;
5353 const Double_t standardHistoWidth = 0.8;
5355 double allMaxContent = 0, allMaxIntegral = 0;
5357 allMaxContent = h2->GetBinContent(h2->GetMaximumBin());
5363 hproj = h2->ProjectionY(
"_px", i, i);
5364 if (hproj->
Integral() > allMaxIntegral) allMaxIntegral = hproj->
Integral();
5369 hproj = h2->ProjectionY(
"_px", i, i);
5374 double myIntegral = hproj->
Integral();
5376 if (candleWidth > 0.999 && candleWidth < 1.001) {
5377 candleWidth = standardCandleWidth;
5378 histoWidth = standardHistoWidth;
5382 if (myCandle.
IsViolinScaled() && myMaxContent > 0 && allMaxContent > 0)
5385 histoWidth *= myMaxContent/allMaxContent;
5387 candleWidth *= myIntegral/allMaxIntegral;
5400 hproj = h2->ProjectionX(
"_py", i, i);
5401 if (hproj->
Integral() > allMaxIntegral) allMaxIntegral = hproj->
Integral();
5406 hproj = h2->ProjectionX(
"_py", i, i);
5411 double myIntegral = hproj->
Integral();
5413 if (candleWidth > 0.999 && candleWidth < 1.001) {
5414 candleWidth = standardCandleWidth;
5415 histoWidth = standardHistoWidth;
5419 if (myCandle.
IsViolinScaled() && myMaxContent > 0 && allMaxContent > 0)
5422 histoWidth *= myMaxContent/allMaxContent;
5424 candleWidth *= myIntegral/allMaxIntegral;
5453std::vector<THistRenderingRegion>
5456 std::vector<THistRenderingRegion> regions;
5458 enum STRATEGY { Bins, Pixels } strategy;
5462 if (nBins >= nPixels) {
5474 while (xMin <= 0 && ((pAxis->
GetFirst()+binOffset) != pAxis->
GetLast()) ) {
5484 if (strategy == Bins) {
5502 std::make_pair(bin, bin+1)};
5503 regions.push_back(region);
5512 for (
Int_t pixelIndex=0; pixelIndex<(nPixels-1); pixelIndex++) {
5517 std::make_pair(binLow, binHigh)};
5518 regions.push_back(region);
5524 if (strategy == Bins) {
5531 Int_t xPx1 = xPx0 + nPixels/nBins;
5534 if (xPx1>= nPixels) xPx1 = nPixels-1;
5537 std::make_pair(bin, bin+1)};
5538 regions.push_back(region);
5542 for (
Int_t pixelIndex=0; pixelIndex<nPixels-1; pixelIndex++) {
5544 Int_t binLow = (nBins*pixelIndex)/nPixels + pAxis->
GetFirst();
5545 Int_t binHigh = binLow + nBins/nPixels;
5547 std::make_pair(binLow, binHigh)};
5548 regions.push_back(region);
5563 Error(
"THistPainter::PaintColorLevelsFast(Option_t*)",
5564 "Only cartesian coordinates supported by 'COL2' option. Using 'COL' option instead.");
5577 if ((zmin == -1111) && (zmax == -1111)) {
5581 }
else if (zmin == -1111) {
5584 }
else if (zmax == -1111) {
5602 Error(
"THistPainter::PaintColorLevelsFast(Option_t*)",
5603 "Cannot plot logz because bin content is less than 0.");
5614 std::vector<Double_t> colorBounds(ndiv);
5615 std::vector<Double_t> contours(ndiv, 0);
5623 for (
Int_t i=0; i<ndiv; ++i) {
5624 colorBounds[i] = step*i;
5627 auto pFrame =
gPad->GetFrame();
5628 Int_t px0 =
gPad->XtoPixel(pFrame->GetX1());
5629 Int_t px1 =
gPad->XtoPixel(pFrame->GetX2());
5630 Int_t py0 =
gPad->YtoPixel(pFrame->GetY1());
5631 Int_t py1 =
gPad->YtoPixel(pFrame->GetY2());
5632 Int_t nXPixels = px1-px0;
5633 Int_t nYPixels = py0-py1;
5635 std::vector<Double_t> buffer(nXPixels*nYPixels, 0);
5639 if (xRegions.empty() || yRegions.empty()) {
5640 Error(
"THistPainter::PaintColorLevelFast(Option_t*)",
5641 "Encountered error while computing rendering regions.");
5649 for (
auto& yRegion : yRegions) {
5650 for (
auto& xRegion : xRegions ) {
5652 const auto& xBinRange = xRegion.fBinRange;
5653 const auto& yBinRange = yRegion.fBinRange;
5664 if (z > zmax) z = zmax;
5665 if (z < zmin) z = zmin;
5670 z = colorBounds[
index];
5674 index = 0.001 + ((z - zmin)/dz)*ndiv;
5677 if (
index ==
static_cast<Int_t>(colorBounds.size())) {
5685 }
else if (
index ==
static_cast<Int_t>(colorBounds.size()-1)) {
5689 z = colorBounds[
index];
5700 const auto& xPixelRange = xRegion.fPixelRange;
5701 const auto& yPixelRange = yRegion.fPixelRange;
5702 for (
Int_t xPx = xPixelRange.first; xPx <= xPixelRange.second; ++xPx) {
5703 for (
Int_t yPx = yPixelRange.first; yPx <= yPixelRange.second; ++yPx) {
5715 if (minValue != maxValue) {
5721 buffer[buffer.size()-nXPixels] = 0.95;
5729 pImage->
SetImage(buffer.data(), nXPixels, nYPixels, pPalette);
5733 pImage->
PaintImage(
wid, px0, py1, 0, 0, nXPixels, nYPixels);
5750 Double_t z, zc, xk, xstep, yk, ystep, xlow, xup, ylow, yup;
5766 TIter next(
gPad->GetListOfPrimitives());
5767 while ((h2 = (
TH2 *)next())) {
5768 if (!h2->InheritsFrom(
TH2::Class()))
continue;
5769 zmin = h2->GetMinimum();
5770 zmax = h2->GetMaximum();
5799 fH->TAttFill::Modify();
5810 Double_t scale = (dz ? ndivz / dz : 1.0);
5822 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
5827 if (binEntries == 0)
5860 if (xup < gPad->GetUxmin())
continue;
5861 if (yup < gPad->GetUymin())
continue;
5862 if (xlow >
gPad->GetUxmax())
continue;
5863 if (ylow >
gPad->GetUymax())
continue;
5864 if (xlow < gPad->GetUxmin()) xlow =
gPad->GetUxmin();
5865 if (ylow < gPad->GetUymin()) ylow =
gPad->GetUymin();
5866 if (xup >
gPad->GetUxmax()) xup =
gPad->GetUxmax();
5867 if (yup >
gPad->GetUymax()) yup =
gPad->GetUymax();
5872 if (z < zc)
continue;
5874 for (
Int_t k=0; k<ndiv; k++) {
5883 color =
Int_t(0.01+(z-zmin)*scale);
5887 if (theColor > ncolors-1) theColor = ncolors-1;
5889 fH->TAttFill::Modify();
5891 gPad->PaintBox(xlow, ylow, xup, yup);
5907 fH->TAttFill::Modify();
5917 Int_t i, j, count, ncontour, icol,
n, lj,
m, ix, jx, ljfill;
5919 Double_t xsave, ysave, thesave,phisave,
x[4],
y[4], zc[4];
5924 thesave =
gPad->GetTheta();
5925 phisave =
gPad->GetPhi();
5927 gPad->SetTheta(90.);
5929 gPad->SetPhi(phisave);
5930 gPad->SetTheta(thesave);
5941 TIter next(
gPad->GetListOfPrimitives());
5942 while ((obj=next())) {
5959 if (!dt && !dtOld)
return;
5961 fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
5977 if (ncontour == 0) {
5982 Warning(
"PaintContour",
"maximum number of contours is %d, asked for %d",
5993 fH->TAttLine::Modify();
5996 std::vector<std::unique_ptr<TPolyLine>>
polys;
5998 TList *list =
nullptr;
6000 std::vector<Int_t>
np;
6002 np.resize(ncontour);
6003 for (i=0;i<ncontour;i++)
6005 for (i=0;i<ncontour;i++)
6006 polys.emplace_back(std::make_unique<TPolyLine>(100));
6010 gROOT->GetListOfSpecials()->Remove(contours);
6012 for (i=0;i<count;i++) {
6013 list = (
TList*)contours->
At(i);
6014 if (list) list->
Delete();
6020 contours->
SetName(
"contours");
6021 gROOT->GetListOfSpecials()->Add(contours);
6022 for (i=0;i<ncontour;i++) {
6024 contours->
Add(list);
6057 if (ir[0] != ir[1] || ir[1] != ir[2] || ir[2] != ir[3] || ir[3] != ir[0]) {
6062 if (zc[0] <= zc[1])
n = 0;
else n = 1;
6063 if (zc[2] <= zc[3])
m = 2;
else m = 3;
6064 if (zc[
n] > zc[
m])
n =
m;
6067 for (ix=1;ix<=4;ix++) {
6070 ir[
m-1],
x[
m-1],
y[
m-1], xarr.data()+lj-1,yarr.data()+lj-1,itarr.data()+lj-1, levels.data());
6075 if (zc[0] <= zc[1])
n = 0;
else n = 1;
6076 if (zc[2] <= zc[3])
m = 2;
else m = 3;
6077 if (zc[
n] > zc[
m])
n =
m;
6080 for (ix=1;ix<=4;ix++) {
6084 ir[
m-1],
x[
m-1],
y[
m-1],xarr.data()+lj-1,yarr.data()+lj-1,itarr.data()+lj-1, levels.data());
6092 for (ix=1; ix<=lj-5; ix +=2) {
6094 while (itarr[ix-1] != itarr[ix]) {
6098 for (jx=ix; jx<=lj-5; jx +=2) {
6099 xarr[jx] = xarr[jx+2];
6100 yarr[jx] = yarr[jx+2];
6101 itarr[jx] = itarr[jx+2];
6105 itarr[lj-3] = itars;
6106 if (count > 100)
break;
6111 if (count > 100)
continue;
6112 for (ix=1; ix<=lj-2; ix +=2) {
6124 fH->TAttLine::Modify();
6125 gPad->PaintPolyLine(2,xarr.data()+ix-1,yarr.data()+ix-1);
6129 ipoly = itarr[ix-1];
6130 if (ipoly >=0 && ipoly <ncontour) {
6131 polys[ipoly]->SetPoint(
np[ipoly] ,xarr[ix-1],yarr[ix-1]);
6132 polys[ipoly]->SetPoint(
np[ipoly]+1,xarr[ix], yarr[ix]);
6134 if (npmax <
np[ipoly]) npmax =
np[ipoly];
6142 std::vector<Double_t> xp, yp;
6143 Int_t nadd,iminus,iplus;
6145 Int_t first = ncontour;
6146 std::vector<Int_t> polysort;
6158 polysort.resize(ncontour);
6160 for (ipoly=0;ipoly<ncontour;ipoly++) {
6161 if (levels[ipoly] >= 0) {first = ipoly;
break;}
6165 for (ipoly=first-1;ipoly>=0;ipoly--) {polysort[k] = ipoly; k++;}
6166 for (ipoly=first;ipoly<ncontour;ipoly++) {polysort[k] = ipoly; k++;}
6170 for (k=0;k<ncontour;k++) {
6171 ipoly = polysort[k];
6172 if (
np[ipoly] == 0)
continue;
6181 xp[iminus]= xx[istart]; yp[iminus] = yy[istart];
6182 xp[iplus] = xx[istart+1]; yp[iplus] = yy[istart+1];
6183 xx[istart] =
xmin; yy[istart] =
ymin;
6184 xx[istart+1] =
xmin; yy[istart+1] =
ymin;
6187 for (i=2;i<
np[ipoly];i+=2) {
6188 if ((iplus < 2*npmax-1) && (xx[i] == xp[iplus]) && (yy[i] == yp[iplus])) {
6190 xp[iplus] = xx[i+1]; yp[iplus] = yy[i+1];
6195 if ((iminus > 0) && (xx[i+1] == xp[iminus]) && (yy[i+1] == yp[iminus])) {
6197 xp[iminus] = xx[i]; yp[iminus] = yy[i];
6203 if (nadd == 0)
break;
6208 fH->TAttFill::Modify();
6209 gPad->PaintFillArea(iplus-iminus+1,xp.data()+iminus,yp.data()+iminus);
6211 graph =
new TGraph(iplus-iminus+1,xp.data()+iminus,yp.data()+iminus);
6212 graph->SetFillColor(icol);
6218 for (i=2;i<
np[ipoly];i+=2) {
6219 if (xx[i] !=
xmin && yy[i] !=
ymin) {
6224 if (istart == 0)
break;
6245 Double_t tlen, tdif, elev, diff, pdif, xlen;
6257 tdif = elev2 - elev1;
6263 diff = elev - elev1;
6274 yarr[i] =
y1 + xlen;
6279 xarr[i] =
x1 + xlen;
6302 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
return;
6304 const Int_t kBASEMARKER=8;
6305 Double_t xp, yp, ex1, ex2, ey1, ey2;
6307 Double_t s2x, s2y, bxsize, bysize, symbolsize, xerror, sbasex, sbasey;
6308 Double_t xi1, xi2, xi3, xi4, yi1, yi2, yi3, yi4;
6314 Int_t i, k, npoints, first, last, fixbin;
6317 Int_t drawmarker, errormarker;
6318 Int_t option0, option1, option2, option3, option4, optionE, optionEX0, optionI0;
6319 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};
6320 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};
6322 std::vector<Double_t> xline, yline;
6323 option0 = option1 = option2 = option3 = option4 = optionE = optionEX0 = optionI0 = 0;
6332 if (
Hoption.
Error == 16) {optionI0 = 1; option4 = 1; option3 = 1;}
6333 if (option2+option3 == 0) optionE = 1;
6348 if (errormarker == 1) symbolsize = 0.01;
6349 sbasex = sbasey = symbolsize*kBASEMARKER;
6350 if (errormarker >= 20 && errormarker <= 49) {
6351 sbasex *= cxx[errormarker-20];
6352 sbasey *= cyy[errormarker-20];
6356 fH->TAttLine::Modify();
6357 fH->TAttFill::Modify();
6358 fH->TAttMarker::Modify();
6365 npoints = last - first +1;
6373 xline.resize(2*npoints);
6374 yline.resize(2*npoints);
6375 if ((npoints > 0) && (xline.empty() || yline.empty())) {
6376 Error(
"PaintErrors",
"too many points, out of memory");
6384 s2x =
gPad->PixeltoX(
Int_t(0.5*sbasex)) -
gPad->PixeltoX(0);
6385 s2y =-
gPad->PixeltoY(
Int_t(0.5*sbasey)) +
gPad->PixeltoY(0);
6389 bxsize =
gPad->PixeltoX(dxend) -
gPad->PixeltoX(0);
6390 bysize =-
gPad->PixeltoY(dxend) +
gPad->PixeltoY(0);
6406 for (k=first; k<=last; k++) {
6425 xminTmp +=
offset*(xmaxTmp-xminTmp);
6426 xmaxTmp = xminTmp +
w;
6427 xp = (xminTmp+xmaxTmp)/2.;
6430 if (xp <= 0)
goto L30;
6431 if (xp < logxmin)
goto L30;
6434 if (xp <
xmin)
goto L30;
6435 if (xp >
xmax)
break;
6438 if (optionI0 && yp==0)
goto L30;
6490 if (!option0 && !option3) {
6492 if (yi1 < ymin || yi1 >
ymax)
goto L30;
6495 if (!symbolsize || !errormarker) drawmarker =
kFALSE;
6499 if (yi3 >=
ymax)
goto L30;
6500 if (yi4 <=
ymin)
goto L30;
6501 gPad->PaintBox(xi1,yi3,xi2,yi4);
6516 if (optionE && drawmarker) {
6521 if (yi1<ymax && yi1>
ymin) {
6522 if (xi1 < xi3 - s2x)
gPad->PaintLine(xi1,yi1,xi3 - s2x,yi2);
6523 if (xi3 + s2x < xi2)
gPad->PaintLine(xi3 + s2x,yi1,xi2,yi2);
6527 if (optionE && !drawmarker && (ey1 != 0 || ey2 !=0)) {
6532 if (yi1<ymax && yi1>
ymin) {
6533 if (xi1 < xi3)
gPad->PaintLine(xi1,yi1,xi3,yi2);
6534 if (xi3 < xi2)
gPad->PaintLine(xi3,yi1,xi2,yi2);
6541 if (option1 && drawmarker) {
6543 if (yi3 < yi1-s2y && yi3 < ymax && yi3 >
ymin)
gPad->PaintLine(xi3 - bxsize, yi3 , xi3 + bxsize, yi3);
6544 if (yi4 > yi1+s2y && yi4 < ymax && yi4 >
ymin)
gPad->PaintLine(xi3 - bxsize, yi4 , xi3 + bxsize, yi4);
6545 if (yi1 <= ymax && yi1 >=
ymin) {
6546 if (xi1 < xi3-s2x)
gPad->PaintLine(xi1 , yi1 - bysize, xi1 , yi1 + bysize);
6547 if (xi2 > xi3+s2x)
gPad->PaintLine(xi2 , yi1 - bysize, xi2 , yi1 + bysize);
6553 if (drawmarker)
gPad->PaintPolyMarker(1, &xi3, &yi1);
6582 if (if2 > npoints) {
6583 for (i=1; i<if1; i++) {
6584 xline[if1-2+i] = xline[if2-1+i];
6585 yline[if1-2+i] = yline[if2-1+i];
6589 if (option4)
graph.PaintGraph(2*npoints,xline.data(),yline.data(),
"FC");
6590 else graph.PaintGraph(2*npoints,xline.data(),yline.data(),
"F");
6591 gPad->SetLogx(logx);
6592 gPad->SetLogy(logy);
6602 fH->TAttMarker::Modify();
6603 fH->TAttLine::Modify();
6612 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
6615 Error(
"Paint2DErrors",
"no TView in current pad");
6622 view->
SetView(phideg, thedeg, psideg, irep);
6625 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
6626 fLego->SetFillColor(
gPad->GetFrameFillColor());
6627 fLego->TAttFill::Modify();
6633 fLego->TAttFill::Modify();
6637 fLego->InitMoveScreen(-1.1,1.1);
6674 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
6717 gPad->PaintLine3D(temp1, temp2);
6724 gPad->PaintLine3D(temp1, temp2);
6731 gPad->PaintLine3D(temp1, temp2);
6735 view->
WCtoNDC(temp1, &temp2[0]);
6736 gPad->PaintPolyMarker(1, &temp2[0], &temp2[1]);
6742 fLego->InitMoveScreen(-1.1,1.1);
6744 fLego->FrontBox(90);
6769 if (frame)
gPad->Remove(frame);
6775 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode())
6796 f2->
Paint(
"surf same");
6798 obj->Paint(
"cont3 same");
6801 }
else if (obj->InheritsFrom(
TF1::Class())) {
6805 gPad->PushSelectableObject(obj);
6809 if (!
gPad->PadInHighlightMode() || (
gPad->PadInHighlightMode() && obj ==
gPad->GetSelected()))
6810 obj->Paint(lnk->GetOption());
6824 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
6827 static char chopth[17];
6829 Int_t htype, oldhtype;
6830 Int_t i, j, first, last, nbins, fixbin;
6834 strlcpy(chopth,
" ",17);
6849 nbins = last - first + 1;
6851 std::vector<Double_t> keepx, keepy;
6854 if (fixbin) keepx.resize(2);
6855 else keepx.resize(nbins+1);
6856 keepy.resize(nbins);
6862 for (j=first; j<=last;j++) {
6872 keepy[j-first] = yb;
6888 if (htype == 0 || htype == 1000) htype = 1001;
6910 if (!fixbin && strlen(chopth)) {
6935 graph.SetLineWidth(lw);
6938 graph.SetFillStyle(htype);
6945 graph.PaintGrapHist(nbins, keepx.data(), keepy.data() ,chopth);
6984 if (strstr(opt,
"iso")) {
6999 view->
SetView(phideg, thedeg, psideg, irep);
7002 cmd.
Form(
"TPolyMarker3D::PaintH3((TH1 *)0x%zx,\"%s\");",(
size_t)
fH,
option);
7047 while (
auto obj = next()) {
7070 static const char *where =
"PaintInit";
7091 Error(where,
"cannot set X axis to log scale");
7098 TIter next(
gPad->GetListOfPrimitives());
7099 while ((obj = (
TObject *)next())) {
7110 Error(where,
"undefined user's coordinates. Cannot use option SAME");
7114 for (i=first; i<=last; i++) {
7126 Error(where,
"cannot set X axis to log scale");
7150 Int_t nonNullErrors = 0;
7152 for (i=first; i<=last;i++) {
7165 if (e1 > 0) nonNullErrors++;
7182 fval =
f1->
Eval(xv[0],0,0);
7194 if (!nonNullErrors) {
7213 Error(where,
"log scale requested with a negative argument (%f)", xm);
7226 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)",
ymax);
7234 }
else if (
ymin < 0) {
7254 if (allchan) factor /= allchan;
7255 if (factor == 0) factor = 1;
7273 Error(where,
"Cannot set Y axis to log scale");
7319 static const char *where =
"PaintInitH";
7344 Error(where,
"cannot set Y axis to log scale");
7366 for (i=first; i<=last;i++) {
7381 fval =
f1->
Eval(xv[0],0,0);
7403 Error(where,
"log scale requested with zero or negative argument (%f)", xm);
7411 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)",
xmax);
7419 }
else if (
xmin < 0) {
7433 if (allchan) factor /= allchan;
7434 if (factor == 0) factor = 1;
7445 Error(where,
"Cannot set Y axis to log scale");
7484 Double_t wxyz[8][3] = { {-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1},
7485 {-1,-1, 1}, {1,-1, 1}, {1,1, 1}, {-1,1, 1} };
7486 Int_t iface[6][4] = { {0,3,2,1}, {4,5,6,7},
7487 {0,1,5,4}, {1,2,6,5}, {2,3,7,6}, {3,0,4,7} };
7501 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
7506 Error(
"PaintH3",
"no TView in current pad");
7513 view->
SetView(phideg, thedeg, psideg, irep);
7519 fLego->InitMoveScreen(-1.1,1.1);
7531 Int_t incrx = (tnorm[ 8] < 0.) ? -1 : +1;
7532 Int_t incry = (tnorm[ 9] < 0.) ? -1 : +1;
7533 Int_t incrz = (tnorm[10] < 0.) ? -1 : +1;
7548 fH->TAttFill::Modify();
7549 fH->TAttLine::Modify();
7558 Double_t pmin[3], pmax[3], sxyz[8][3];
7559 for (
Int_t ix = ix1; ix !=ix2+incrx; ix += incrx) {
7562 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
7565 for (
Int_t iz = iz1; iz != iz2+incrz; iz += incrz) {
7575 if (
w <
wmin)
continue;
7578 if (scale == 0)
continue;
7579 for (
Int_t i=0; i<3; ++i) {
7582 for (
Int_t k=0; k<8; ++k) {
7583 sxyz[k][i] = wxyz[k][i]*
d +
c;
7586 for (
Int_t k=0; k<8; ++k) {
7587 view->
WCtoNDC(&sxyz[k][0],&sxyz[k][0]);
7590 for (
Int_t k=0; k<6; ++k) {
7591 for (
Int_t i=0; i<4; ++i) {
7592 Int_t iv = iface[k][i];
7596 x[4] =
x[0] ;
y[4] =
y[0];
7598 x[5] =
x[2] ;
y[5] =
y[2];
7599 x[6] =
x[3] ;
y[6] =
y[3];
7600 x[7] =
x[1] ;
y[7] =
y[1];
7606 if (z <= 0.)
continue;
7611 if (k == 3 || k == 5) {
7613 }
else if (k == 0 || k == 1) {
7619 fH->TAttFill::Modify();
7620 gPad->PaintFillArea(4,
x,
y);
7621 if (iopt != 3)
gPad->PaintPolyLine(
n,
x,
y);
7650 while (
auto obj = next()) {
7666 fH->TAttFill::Modify();
7676 {-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1},
7677 {-1,-1, 1}, {1,-1, 1}, {1,1, 1}, {-1,1, 1}
7679 Int_t iface[6][4] = {
7680 {0,3,2,1}, {4,5,6,7},
7681 {0,1,5,4}, {1,2,6,5}, {2,3,7,6}, {3,0,4,7}
7685 {0,-1,0}, {1,0,0}, {0,1,0}, {-1,0,0}
7700 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
7705 Error(
"PaintH3",
"no TView in current pad");
7712 view->
SetView(phideg, thedeg, psideg, irep);
7719 fLego->InitMoveScreen(-1.1,1.1);
7724 fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
7729 Int_t incrx = (tnorm[ 8] < 0.) ? +1 : -1;
7730 Int_t incry = (tnorm[ 9] < 0.) ? +1 : -1;
7731 Int_t incrz = (tnorm[10] < 0.) ? +1 : -1;
7740 fH->TAttLine::Modify();
7743 const Int_t NTMAX = 100;
7748 Double_t pmin[3], pmax[3], sxyz[8][3], pp[4][2];
7749 for (
Int_t ix = ix1; ix !=ix2+incrx; ix += incrx) {
7752 for (
Int_t iy = iy1; iy != iy2+incry; iy += incry) {
7755 for (
Int_t iz = iz1; iz != iz2+incrz; iz += incrz) {
7764 if (
w <
wmin)
continue;
7767 if (scale == 0)
continue;
7768 for (
Int_t i=0; i<3; ++i) {
7771 for (
Int_t k=0; k<8; ++k) {
7772 sxyz[k][i] = wxyz[k][i]*
d +
c;
7775 for (
Int_t k=0; k<8; ++k) {
7776 view->
WCtoNDC(&sxyz[k][0],&sxyz[k][0]);
7778 for (
Int_t k=0; k<6; ++k) {
7780 view->
FindNormal(normal[k][0], normal[k][1], normal[k][2], zn);
7781 if (zn <= 0)
continue;
7782 for (
Int_t i=0; i<4; ++i) {
7783 Int_t ip = iface[k][i];
7784 pp[i][0] = sxyz[ip][0];
7785 pp[i][1] = sxyz[ip][1];
7787 for (
Int_t i=0; i<4; ++i) {
7789 Int_t i2 = (i == 3) ? 0 : i + 1;
7791 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7792 Double_t xdel = pp[i2][0] - pp[i1][0];
7793 Double_t ydel = pp[i2][1] - pp[i1][1];
7795 for (
Int_t it = 0; it < nt; ++it) {
7796 x[0] = pp[i1][0] + xdel*
tt[it][0];
7797 y[0] = pp[i1][1] + ydel*
tt[it][0];
7798 x[1] = pp[i1][0] + xdel*
tt[it][1];
7799 y[1] = pp[i1][1] + ydel*
tt[it][1];
7800 gPad->PaintPolyLine(2,
x,
y);
7807 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7808 Double_t xdel = pp[i2][0] - pp[i1][0];
7809 Double_t ydel = pp[i2][1] - pp[i1][1];
7811 for (
Int_t it = 0; it < nt; ++it) {
7812 x[0] = pp[i1][0] + xdel*
tt[it][0];
7813 y[0] = pp[i1][1] + ydel*
tt[it][0];
7814 x[1] = pp[i1][0] + xdel*
tt[it][1];
7815 y[1] = pp[i1][1] + ydel*
tt[it][1];
7816 gPad->PaintPolyLine(2,
x,
y);
7820 fLego->FindVisibleLine(&pp[i1][0], &pp[i2][0], NTMAX, nt, &
tt[0][0]);
7821 xdel = pp[i2][0] - pp[i1][0];
7822 ydel = pp[i2][1] - pp[i1][1];
7823 for (
Int_t it = 0; it < nt; ++it) {
7824 x[0] = pp[i1][0] + xdel*
tt[it][0];
7825 y[0] = pp[i1][1] + ydel*
tt[it][0];
7826 x[1] = pp[i1][0] + xdel*
tt[it][1];
7827 y[1] = pp[i1][1] + ydel*
tt[it][1];
7828 gPad->PaintPolyLine(2,
x,
y);
7831 fLego->FillPolygonBorder(4, &pp[0][0]);
7856 while (
auto obj = next()) {
7887 Int_t ic2 = ic1+nbcol;
7888 Int_t ic3 = ic2+nbcol;
7898 std::vector<Double_t>
x(nx);
7899 std::vector<Double_t>
y(ny);
7900 std::vector<Double_t> z(nz);
7918 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
7922 Error(
"PaintH3Iso",
"no TView in current pad");
7928 view->
SetView(phideg, thedeg, psideg, irep);
7943 for (
Int_t col=0;col<nbcol;col++) {
7949 fLego->InitMoveScreen(-1.1,1.1);
7957 fLego->LightSource(0, ydiff, 0, 0, 0, irep);
7958 fLego->LightSource(1, yligh1, 1, 1, 1, irep);
7959 fLego->SurfaceProperty(qa, qd, qs, 1, irep);
7961 fmax = ydiff*qa + (yligh1+0.1)*(qd+qs);
7962 fLego->SetIsoSurfaceParameters(fmin, fmax, nbcol, ic1, ic2, ic3);
7964 fLego->IsoSurface(1, s, nx, ny, nz,
x.data(),
y.data(), z.data(),
"BF");
7967 fLego->InitMoveScreen(-1.1,1.1);
7969 fLego->FrontBox(90);
7981 while (
auto obj = next()) {
8014 if (deltaz == 0) deltaz = 1;
8061 TH1 * hid =
nullptr;
8062 Color_t colormain = -1, colordark = -1;
8073 drawShadowsInLego1 =
kFALSE;
8099 for (
Int_t id=0;
id<=nids;
id++) {
8102 if (colormain == 1) colormain = 17;
8104 else colordark = colormain;
8105 fLego->SetColorMain(colormain,
id);
8106 fLego->SetColorDark(colordark,
id);
8107 if (
id <= 1)
fLego->SetColorMain(colormain,-1);
8108 if (
id == nids)
fLego->SetColorMain(colormain,99);
8117 Error(
"PaintLego",
"no TView in current pad");
8124 view->
SetView(phideg, thedeg, psideg, irep);
8130 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
8131 fLego->SetFillColor(
gPad->GetFrameFillColor());
8132 fLego->TAttFill::Modify();
8140 fLego->TAttFill::Modify();
8144 if (raster)
fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
8145 else fLego->InitMoveScreen(-1.1,1.1);
8187 fLego->LegoCartesian(90,nx,ny,
"FB");}
8199 fLego->InitMoveScreen(-1.1,1.1);
8222 Int_t ndivx, ndivy, ndivz, i;
8224 static char chopax[8], chopay[8], chopaz[8];
8225 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
8230 Error(
"PaintLegoAxis",
"no TView in current pad");
8255 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
8256 for (i = 1; i <= 8; ++i) {
8257 r[i*3 - 3] = av[i*3 - 3] + av[i*3 - 2]*cosa;
8258 r[i*3 - 2] = av[i*3 - 2]*sina;
8259 r[i*3 - 1] = av[i*3 - 1];
8273 if (!rmin || !rmax)
return;
8276 if (
x1[0] >
x2[0]) strlcpy(chopax,
"SDH=+",8);
8277 else strlcpy(chopax,
"SDH=-",8);
8278 if (
y1[0] >
y2[0]) strlcpy(chopay,
"SDH=+",8);
8279 else strlcpy(chopay,
"SDH=-",8);
8280 if (z2[1] > z1[1]) strlcpy(chopaz,
"SDH=+",8);
8281 else strlcpy(chopaz,
"SDH=-",8);
8295 strlcat(chopax,
"N",8);
8299 strlcat(chopay,
"N",8);
8303 strlcat(chopaz,
"N",8);
8325 strlcat(chopax,
"t",8);
8343 strlcpy(chopay,
"V=+UN",8);
8358 strlcat(chopay,
"t",8);
8381 strlcat(chopaz,
"t",8);
8390 if (ztit.
Index(
";")>0) {
8394 axis->
PaintAxis(z1[0], z1[1], z2[0], z2[1], bmin, bmax, ndivz, chopaz);
8411 delete palette; palette =
nullptr;
8416 delete palette; palette =
nullptr;
8444 fH->TAttMarker::Modify();
8447 Double_t dz, z, xk,xstep, yk, ystep;
8452 if (zmin == 0 && zmax == 0)
return;
8463 if (zmin == 0 && zmax == 0)
return;
8466 if (ncells > 10000) scale /= 5;
8470 if (dz >=
kNMAX || zmax < 1) {
8471 scale = (
kNMAX-1)/dz;
8472 if (ncells > 10000) scale /= 5;
8479 if (zmin >= 0) zmin = 0;
8480 else zmin -= yMARGIN*(zmax-zmin);
8482 Double_t dzmin = yMARGIN*(zmax-zmin);
8483 if (zmin >= 0 && (zmin-dzmin <= 0)) zmin = 0;
8492 strlcpy(optscat,opt.
Data(),100);
8493 char *oscat = strstr(optscat,
"scat=");
8494 char *blank = strstr(oscat,
" ");
if (blank) *blank = 0;
8495 sscanf(oscat+5,
"%lg",&scale);
8509 if (!
IsInside(xk+0.5*xstep,yk+0.5*ystep))
continue;
8511 if (z < zmin) z = zmin;
8512 if (z > zmax) z = zmax;
8518 if (z <= 0)
continue;
8522 for (
Int_t loop=0; loop<k; loop++) {
8523 if (k+marker >=
kNMAX) {
8527 fXbuf[marker] = (random.
Rndm()*xstep) + xk;
8528 fYbuf[marker] = (random.
Rndm()*ystep) + yk;
8537 if (
fXbuf[marker] <
gPad->GetUxmin())
break;
8538 if (
fYbuf[marker] <
gPad->GetUymin())
break;
8539 if (
fXbuf[marker] >
gPad->GetUxmax())
break;
8540 if (
fYbuf[marker] >
gPad->GetUymax())
break;
8546 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
8601 while (
auto obj = next()) {
8608 if (stats && dostat) {
8614 if (!dofit) fit =
nullptr;
8615 if (dofit == 1) dofit = 111;
8616 if (dostat == 1) dostat = 1111;
8617 Int_t print_name = dostat%10;
8618 Int_t print_entries = (dostat/10)%10;
8619 Int_t print_mean = (dostat/100)%10;
8620 Int_t print_stddev = (dostat/1000)%10;
8621 Int_t print_under = (dostat/10000)%10;
8622 Int_t print_over = (dostat/100000)%10;
8623 Int_t print_integral= (dostat/1000000)%10;
8624 Int_t print_skew = (dostat/10000000)%10;
8625 Int_t print_kurt = (dostat/100000000)%10;
8626 Int_t nlines = print_name + print_entries + print_mean + print_stddev +
8627 print_under + print_over + print_integral +
8628 print_skew + print_kurt;
8629 Int_t print_fval = dofit%10;
8630 Int_t print_ferrors = (dofit/10)%10;
8631 Int_t print_fchi2 = (dofit/100)%10;
8632 Int_t print_fprob = (dofit/1000)%10;
8633 Int_t nlinesf = print_fval + print_fchi2 + print_fprob;
8635 if (print_fval < 2) nlinesf += fit->GetNumberFreeParameters();
8636 else nlinesf += fit->GetNpar();
8642 if (!dostat && !fit) {
8681 if (print_entries) {
8687 if (print_mean == 1) {
8697 if (print_mean == 1) {
8709 if (print_stddev == 1) {
8719 if (print_stddev == 1) {
8740 if (print_integral) {
8741 if (print_integral == 1) {
8751 if (print_skew == 1) {
8762 if (print_kurt == 1) {
8775 Int_t ndf = fit->GetNDF();
8777 tt.Form(tf.
Data(),fit->GetChisquare());
8778 if (print_fchi2) stats->
AddText(
tt.Data());
8784 if (print_fval || print_ferrors) {
8786 for (
Int_t ipar=0;ipar<fit->GetNpar();ipar++) {
8787 fit->GetParLimits(ipar,parmin,parmax);
8788 if (print_fval < 2 && parmin*parmax != 0 && parmin >= parmax)
continue;
8789 if (print_ferrors) {
8790 tf.
Form(
"%-8s = %s%s #pm %s ", fit->GetParName(ipar),
"%",stats->
GetFitFormat(),
8792 tt.Form(tf.
Data(),fit->GetParameter(ipar)
8793 ,fit->GetParError(ipar));
8796 tt.Form(tf.
Data(),fit->GetParameter(ipar));
8820 while (
auto obj = next()) {
8826 if (stats && dostat) {
8832 if (dostat == 1) dostat = 1111;
8833 Int_t print_name = dostat%10;
8834 Int_t print_entries = (dostat/10)%10;
8835 Int_t print_mean = (dostat/100)%10;
8836 Int_t print_stddev = (dostat/1000)%10;
8837 Int_t print_under = (dostat/10000)%10;
8838 Int_t print_over = (dostat/100000)%10;
8839 Int_t print_integral= (dostat/1000000)%10;
8840 Int_t print_skew = (dostat/10000000)%10;
8841 Int_t print_kurt = (dostat/100000000)%10;
8842 Int_t nlines = print_name + print_entries + 2*print_mean + 2*print_stddev + print_integral;
8843 if (print_under || print_over) nlines += 3;
8848 if (!dostat && !fit) {
8887 if (print_name) stats->
AddText(h2->GetName());
8888 if (print_entries) {
8894 if (print_mean == 1) {
8896 tt.Form(tf.
Data(),h2->GetMean(1));
8899 tt.Form(tf.
Data(),h2->GetMean(2));
8904 tt.Form(tf.
Data(),h2->GetMean(1),h2->GetMeanError(1));
8908 tt.Form(tf.
Data(),h2->GetMean(2),h2->GetMeanError(2));
8913 if (print_stddev == 1) {
8915 tt.Form(tf.
Data(),h2->GetStdDev(1));
8918 tt.Form(tf.
Data(),h2->GetStdDev(2));
8923 tt.Form(tf.
Data(),h2->GetStdDev(1),h2->GetStdDevError(1));
8927 tt.Form(tf.
Data(),h2->GetStdDev(2),h2->GetStdDevError(2));
8931 if (print_integral) {
8937 if (print_skew == 1) {
8939 tt.Form(tf.
Data(),h2->GetSkewness(1));
8942 tt.Form(tf.
Data(),h2->GetSkewness(2));
8947 tt.Form(tf.
Data(),h2->GetSkewness(1),h2->GetSkewness(11));
8951 tt.Form(tf.
Data(),h2->GetSkewness(2),h2->GetSkewness(12));
8956 if (print_kurt == 1) {
8958 tt.Form(tf.
Data(),h2->GetKurtosis(1));
8961 tt.Form(tf.
Data(),h2->GetKurtosis(2));
8966 tt.Form(tf.
Data(),h2->GetKurtosis(1),h2->GetKurtosis(11));
8970 tt.Form(tf.
Data(),h2->GetKurtosis(2),h2->GetKurtosis(12));
8974 if (print_under || print_over) {
8978 Int_t cellsX = h2->GetXaxis()->GetNbins() + 1;
8979 Int_t cellsY = h2->GetYaxis()->GetNbins() + 1;
8980 Int_t firstX = std::max(1, h2->GetXaxis()->GetFirst());
8981 Int_t firstY = std::max(1, h2->GetYaxis()->GetFirst());
8982 Int_t lastX = std::min(h2->GetXaxis()->GetLast(), h2->GetXaxis()->GetNbins());
8983 Int_t lastY = std::min(h2->GetYaxis()->GetLast(), h2->GetYaxis()->GetNbins());
8985 unov[0] = h2->Integral( 0, firstX-1, lastY+1, cellsY );
8986 unov[1] = h2->Integral(firstX , lastX , lastY+1, cellsY );
8987 unov[2] = h2->Integral(lastX+1, cellsX , lastY+1, cellsY );
8988 unov[3] = h2->Integral( 0, firstX-1, firstY , lastY );
8989 unov[4] = h2->Integral(firstX , lastX , firstY , lastY );
8990 unov[5] = h2->Integral(lastX+1, cellsX , firstY , lastY );
8991 unov[6] = h2->Integral( 0, firstX-1, 0, firstY-1);
8992 unov[7] = h2->Integral(firstX, lastX, 0, firstY-1);
8993 unov[8] = h2->Integral(lastX+1, cellsX , 0, firstY-1);
8995 tt.Form(
"%g|%g|%g\n", unov[0], unov[1], unov[2]);
8997 tt.Form(
"%g|%g|%g\n", unov[3], unov[4], unov[5]);
8999 tt.Form(
"%g|%g|%g\n", unov[6], unov[7], unov[8]);
9005 Int_t ndf = fit->GetNDF();
9006 tt.Form(
"#chi^{2} / ndf = %6.4g / %d",fit->GetChisquare(),ndf);
9008 for (
Int_t ipar=0;ipar<fit->GetNpar();ipar++) {
9009 tt.Form(
"%-8s = %5.4g #pm %5.4g ",fit->GetParName(ipar)
9010 ,fit->GetParameter(ipar)
9011 ,fit->GetParError(ipar));
9033 while (
auto obj = next()) {
9039 if (stats && dostat) {
9045 if (dostat == 1) dostat = 1111;
9046 Int_t print_name = dostat%10;
9047 Int_t print_entries = (dostat/10)%10;
9048 Int_t print_mean = (dostat/100)%10;
9049 Int_t print_stddev = (dostat/1000)%10;
9050 Int_t print_under = (dostat/10000)%10;
9051 Int_t print_over = (dostat/100000)%10;
9052 Int_t print_integral= (dostat/1000000)%10;
9053 Int_t print_skew = (dostat/10000000)%10;
9054 Int_t print_kurt = (dostat/100000000)%10;
9055 Int_t nlines = print_name + print_entries + 3*print_mean + 3*print_stddev + print_integral;
9056 if (print_under || print_over) nlines += 3;
9061 if (!dostat && !fit) {
9098 if (print_name) stats->
AddText(h3->GetName());
9099 if (print_entries) {
9105 if (print_mean == 1) {
9107 tt.Form(tf.
Data(),h3->GetMean(1));
9110 tt.Form(tf.
Data(),h3->GetMean(2));
9113 tt.Form(tf.
Data(),h3->GetMean(3));
9118 tt.Form(tf.
Data(),h3->GetMean(1),h3->GetMeanError(1));
9122 tt.Form(tf.
Data(),h3->GetMean(2),h3->GetMeanError(2));
9126 tt.Form(tf.
Data(),h3->GetMean(3),h3->GetMeanError(3));
9131 if (print_stddev == 1) {
9133 tt.Form(tf.
Data(),h3->GetStdDev(1));
9136 tt.Form(tf.
Data(),h3->GetStdDev(2));
9139 tt.Form(tf.
Data(),h3->GetStdDev(3));
9144 tt.Form(tf.
Data(),h3->GetStdDev(1),h3->GetStdDevError(1));
9148 tt.Form(tf.
Data(),h3->GetStdDev(2),h3->GetStdDevError(2));
9152 tt.Form(tf.
Data(),h3->GetStdDev(3),h3->GetStdDevError(3));
9156 if (print_integral) {
9161 if (print_skew == 1) {
9163 tt.Form(tf.
Data(),h3->GetSkewness(1));
9166 tt.Form(tf.
Data(),h3->GetSkewness(2));
9169 tt.Form(tf.
Data(),h3->GetSkewness(3));
9174 tt.Form(tf.
Data(),h3->GetSkewness(1),h3->GetSkewness(11));
9178 tt.Form(tf.
Data(),h3->GetSkewness(2),h3->GetSkewness(12));
9182 tt.Form(tf.
Data(),h3->GetSkewness(3),h3->GetSkewness(13));
9187 if (print_kurt == 1) {
9189 tt.Form(tf.
Data(),h3->GetKurtosis(1));
9192 tt.Form(tf.
Data(),h3->GetKurtosis(2));
9195 tt.Form(tf.
Data(),h3->GetKurtosis(3));
9200 tt.Form(tf.
Data(),h3->GetKurtosis(1),h3->GetKurtosis(11));
9204 tt.Form(tf.
Data(),h3->GetKurtosis(2),h3->GetKurtosis(12));
9208 tt.Form(tf.
Data(),h3->GetKurtosis(3),h3->GetKurtosis(13));
9212 if (print_under || print_over) {
9219 Int_t ndf = fit->GetNDF();
9220 tt.Form(
"#chi^{2} / ndf = %6.4g / %d",fit->GetChisquare(),ndf);
9222 for (
Int_t ipar=0;ipar<fit->GetNpar();ipar++) {
9223 tt.Form(
"%-8s = %5.4g #pm %5.4g ",fit->GetParName(ipar)
9224 ,fit->GetParameter(ipar)
9225 ,fit->GetParError(ipar));
9260 if (deltaz == 0) deltaz = 1;
9327 Error(
"PaintSurface",
"no TView in current pad");
9334 view->
SetView(phideg, thedeg, psideg, irep);
9338 fLego->SetFillStyle(0);
9339 fLego->SetFillColor(1);
9341 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
9342 fLego->SetFillColor(
gPad->GetFrameFillColor());
9344 fLego->TAttFill::Modify();
9352 fLego->TAttFill::Modify();
9372 if (raster)
fLego->InitRaster(-1.1,-1.1,1.1,1.1,1000,800);
9373 else fLego->InitMoveScreen(-1.1,1.1);
9386 fLego->LightSource(0, ydiff, 0,0,0,irep);
9387 fLego->LightSource(1, yligh1 ,1,1,1,irep);
9388 fLego->SurfaceProperty(qa, qd, qs, 1, irep);
9390 fmax = fmin + (yligh1+0.1)*(qd+qs);
9395 if (!colref)
return;
9400 for (
Int_t col=0;col<nbcol;col++) {
9405 fLego->Spectrum(nbcol, fmin, fmax, icol1, 1, irep);
9447 fLego->InitMoveScreen(-1.1,1.1);
9467 fLego->InitMoveScreen(-1.1,1.1);
9494 if (!dt && !dtOld)
return;
9498 fGraph2DPainter = dt ? std::make_unique<TGraph2DPainter>(dt) : std::make_unique<TGraph2DPainter>(dtOld);
9505 Error(
"PaintTriangles",
"no TView in current pad, do not use option SAME");
9510 if (!rmin || !rmax)
return;
9530 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
9533 Error(
"PaintTriangles",
"no TView in current pad");
9540 view->
SetView(phideg, thedeg, psideg, irep);
9543 fLego->SetFillStyle(
gPad->GetFrameFillStyle());
9544 fLego->SetFillColor(
gPad->GetFrameFillColor());
9545 fLego->TAttFill::Modify();
9551 fLego->TAttFill::Modify();
9555 fLego->InitMoveScreen(-1.1,1.1);
9566 fLego->InitMoveScreen(-1.1,1.1);
9568 fLego->FrontBox(90);
9592 Warning(
"PaintSurface",
"too many color levels, %d >= 100, reset to 99", ndivz);
9595 std::vector<Double_t> funlevel(ndivz+1);
9596 std::vector<Int_t> colorlevel(ndivz+1);
9599 for (i = 0; i < ndivz; ++i) {
9605 fLego->ColorFunction(ndivz, funlevel.data(), colorlevel.data(), irep);
9673 while (
auto obj = next()) {
9681 if (!
gPad->PadInSelectionMode() && !
gPad->PadInHighlightMode()) {
9701 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
return;
9718 while ((obj=next())) {
9720 z =
b->GetContent();
9722 poly =
b->GetPolygon();
9727 g->TAttLine::Modify();
9728 g->TAttMarker::Modify();
9729 g->TAttFill::Modify();
9737 g->SetFillStyle(
fs);
9739 if (fill)
g->Paint(
"F");
9740 if (mark)
g->Paint(
"P");
9750 while ((
g = (
TGraph*) nextg())) {
9751 g->TAttLine::Modify();
9752 g->TAttMarker::Modify();
9753 g->TAttFill::Modify();
9761 g->SetFillStyle(
fs);
9763 if (fill)
g->Paint(
"F");
9764 if (mark)
g->Paint(
"P");
9777 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
9780 Int_t ncolors, color, theColor;
9808 while (
auto obj = next()) {
9812 z =
b->GetContent();
9818 if (z < zmin)
continue;
9823 if (z < zc)
continue;
9825 for (
Int_t k=0; k<ndiv; k++) {
9834 color =
Int_t(0.01+(z-zmin)*scale);
9837 if (theColor > ncolors-1) theColor = ncolors-1;
9843 g->TAttFill::Modify();
9854 while ((
g = (
TGraph*) nextg())) {
9856 g->TAttFill::Modify();
9871 if (
gPad->PadInHighlightMode() &&
gPad->GetSelected() !=
fH)
9874 Int_t k, loop, marker=0;
9875 Double_t z, xk,xstep, yk, ystep, xp, yp;
9889 scale = (
kNMAX-1)/dz;
9903 while ((obj=next())) {
9906 if (
a>maxarea) maxarea =
a;
9911 while ((obj=next())) {
9913 poly =
b->GetPolygon();
9914 z =
b->GetContent();
9915 if (z < zmin) z = zmin;
9916 if (z > zmax) z = zmax;
9922 k =
Int_t((z*scale)*(
b->GetArea()/maxarea));
9925 xstep =
b->GetXMax()-xk;
9926 ystep =
b->GetYMax()-yk;
9931 if (k <= 0 || z <= 0)
continue;
9934 if (k+marker >=
kNMAX) {
9938 xp = (random.
Rndm()*xstep) + xk;
9939 yp = (random.
Rndm()*ystep) + yk;
9940 if (
g->IsInside(xp,yp)) {
9947 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
9955 if (k <= 0 || z <= 0)
continue;
9958 if (k+marker >=
kNMAX) {
9962 xp = (random.
Rndm()*xstep) + xk;
9963 yp = (random.
Rndm()*ystep) + yk;
9971 if (marker > 0)
gPad->PaintPolyMarker(marker,
fXbuf.data(),
fYbuf.data());
9994 text.SetTextAlign(22);
9997 text.TAttText::Modify();
10004 while ((obj=next())) {
10006 p =
b->GetPolygon();
10007 x = (
b->GetXMin()+
b->GetXMax())/2;
10012 y = (
b->GetYMin()+
b->GetYMax())/2;
10017 z =
b->GetContent();
10021 tf.
Form(
"#splitline{%s%s}{#pm %s%s}",
10058 getentries =
kTRUE;
10061 text.SetTextAlign(11);
10062 if (
angle == 90)
text.SetTextAlign(12);
10064 text.TAttText::Modify();
10078 if (yt == 0.)
continue;
10088 if (
y >=
gPad->GetY2())
continue;
10089 if (y <= gPad->GetY1())
continue;
10095 text.SetTextAlign(22);
10098 text.TAttText::Modify();
10117 tf.
Form(
"#splitline{%s%s}{#pm %s%s}",
10150 fLego = std::make_unique<TPainter3dAlgorithms>(
fXbuf.data(),
fYbuf.data());
10154 Error(
"PaintTF3",
"no TView in current pad");
10160 view->
SetView(phideg, thedeg, psideg, irep);
10162 fLego->InitMoveScreen(-1.1,1.1);
10167 fLego->BackBox(90);
10177 fLego->InitMoveScreen(-1.1,1.1);
10179 fLego->FrontBox(90);
10216 TIter next(
gPad->GetListOfPrimitives());
10217 while ((obj = next())) {
10220 if (strcmp(title->
GetName(),
"title")) {title =
nullptr;
continue;}
10224 if (title)
delete title;
10239 if (ht <= 0) ht = 0.05;
10260 if (talh < 1) talh = 1;
else if (talh > 3) talh = 3;
10262 if (talv < 1) talv = 1;
else if (talv > 3) talv = 3;
10285 ptitle->
Paint(
"blNDC");
10287 if(!
gPad->IsEditable())
delete ptitle;
10295 if (!strcmp(mess,
"SetF3")) {
10399 for (
int i = 0; i < 100; i++) {
10408 theta -= num / den;
10456 Double_t xmin_aid, ymin_aid, xmax_aid, ymax_aid;
10463 if (
xmin > xmin_aid)
xmin = xmin_aid;
10464 if (
ymin > ymin_aid)
ymin = ymin_aid;
10465 if (
xmax < xmax_aid)
xmax = xmax_aid;
10466 if (
ymax < ymax_aid)
ymax = ymax_aid;
10469 func(
Hparam.
xmin*xscale, 0, xmin_aid, ymin_aid);
10470 func(
Hparam.
xmax*xscale, 0, xmax_aid, ymin_aid);
10471 if (
xmin > xmin_aid)
xmin = xmin_aid;
10472 if (
xmax < xmax_aid)
xmax = xmax_aid;
10477 if (
ymin > ymin_aid)
ymin = ymin_aid;
10478 if (
ymax < ymax_aid)
ymax = ymax_aid;
10495 ymin - dyr*
gPad->GetBottomMargin(),
10496 xmax + dxr*
gPad->GetRightMargin(),
10507 if (
h ==
nullptr)
return;
10521 static const char *where =
"TableInit";
10549 Error(where,
"cannot set X axis to log scale");
10578 Error(where,
"cannot set Y axis to log scale");
10614 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)", zmax);
10620 if (zmin >= zmax) {
10622 if (zmax > 0) zmin = 0.001*zmax;
10624 if (!
Hoption.
Same)
Error(where,
"log scale is requested but maximum is less or equal 0 (%f)", zmax);
10634 if (allchan) factor /= allchan;
10635 if (factor == 0) factor = 1;
10637 zmax = factor*zmax;
10638 zmin = factor*zmin;
10664 zmax += yMARGIN*(zmax-zmin);
10672 if (zmin >= 0) zmin = 0;
10673 else zmin -= yMARGIN*(zmax-zmin);
10675 Double_t dzmin = yMARGIN*(zmax-zmin);
10676 if (zmin >= 0 && (zmin-dzmin <= 0)) zmin = 0;
10677 else zmin -= dzmin;
10703 tf.
Form(
"%s%s",
"%",
f);
10707 int ie = tv.
Index(
"e");
10708 int iE = tv.
Index(
"E");
10709 int id = tv.
Index(
".");
10713 if (ie >= 0 || iE >= 0) {
10714 if (tv.
Index(
"+") >= 0) {
10716 ef.
Form(
"%s.1f",
"%");
10719 ef.
Form(
"%s.%de",
"%",ie-
id-1);
10721 ef.
Form(
"%s.%dE",
"%",iE-
id-1);
10726 ef.
Form(
"%s.%de",
"%",ie-
id-1);
10728 ef.
Form(
"%s.%dE",
"%",iE-
id-1);
10733 }
else if (
id < 0) {
10734 ef.
Form(
"%s.1f",
"%");
10752 auto c2 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name2.Data()));
10758 auto c1 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name1.Data()));
10763 if (nbins <= 0)
return;
10767 Int_t projection = 0;
10768 if (opt.
Contains(
"x")) projection = 1;
10769 if (opt.
Contains(
"y")) projection = 2;
10770 if (opt.
Contains(
"z")) projection = 3;
10771 if (opt.
Contains(
"xy")) projection = 4;
10772 if (opt.
Contains(
"yx")) projection = 5;
10773 if (opt.
Contains(
"xz")) projection = 6;
10774 if (opt.
Contains(
"zx")) projection = 7;
10775 if (opt.
Contains(
"yz")) projection = 8;
10776 if (opt.
Contains(
"zy")) projection = 9;
10781 gROOT->MakeDefCanvas();
10790 auto c2 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name2.Data()));
10796 auto c1 =
static_cast<TVirtualPad *
>(
gROOT->GetListOfCanvases()->FindObject(name1.Data()));
10801 if ((nbinsX <= 0) || (nbinsY <= 0))
return;
10806 Int_t projection = 0;
10807 if (opt.
Contains(
"x")) projection = 1;
10808 if (opt.
Contains(
"y")) projection = 2;
10809 if (opt.
Contains(
"z")) projection = 3;
10810 if (opt.
Contains(
"xy")) projection = 4;
10811 if (opt.
Contains(
"yx")) projection = 5;
10812 if (opt.
Contains(
"xz")) projection = 6;
10813 if (opt.
Contains(
"zx")) projection = 7;
10814 if (opt.
Contains(
"yz")) projection = 8;
10815 if (opt.
Contains(
"zy")) projection = 9;
10820 gROOT->MakeDefCanvas();
10823 gROOT->MakeDefCanvas();
10836 gPad->SetDoubleBuffer(0);
10840 static int pyold1 = 0;
10841 static int pyold2 = 0;
10842 float uxmin =
gPad->GetUxmin();
10843 float uxmax =
gPad->GetUxmax();
10844 int pxmin =
gPad->XtoAbsPixel(uxmin);
10845 int pxmax =
gPad->XtoAbsPixel(uxmax);
10872 c->SetLogy(ctxt.
GetSaved()->GetLogz());
10873 c->SetLogx(ctxt.
GetSaved()->GetLogx());
10877 TH1D *hp = ((
TH2*)
fH)->ProjectionX(prjName, biny1, biny2);
10882 if (biny1 == biny2) {
10890 hp->
SetTitle(
TString::Format(
"ProjectionX of biny=%d [y=%.*lf..%.*lf]", biny1, valuePrecision, valueFrom, valuePrecision, valueTo));
10902 hp->
SetTitle(
TString::Format(
"ProjectionX of biny=[%d,%d] [y=%.*lf..%.*lf]", biny1, biny2, valuePrecision, valueFrom, valuePrecision, valueTo));
10921 gPad->SetDoubleBuffer(0);
10925 static int pxold1 = 0;
10926 static int pxold2 = 0;
10927 float uymin =
gPad->GetUymin();
10928 float uymax =
gPad->GetUymax();
10929 int pymin =
gPad->YtoAbsPixel(uymin);
10930 int pymax =
gPad->YtoAbsPixel(uymax);
10960 c->SetLogy(ctxt.
GetSaved()->GetLogz());
10961 c->SetLogx(ctxt.
GetSaved()->GetLogy());
10965 TH1D *hp = ((
TH2*)
fH)->ProjectionY(prjName, binx1, binx2);
10970 if (binx1 == binx2) {
10978 hp->
SetTitle(
TString::Format(
"ProjectionY of binx=%d [x=%.*lf..%.*lf]", binx1, valuePrecision, valueFrom, valuePrecision, valueTo));
10990 hp->
SetTitle(
TString::Format(
"ProjectionY of binx=[%d,%d] [x=%.*lf..%.*lf]", binx1, binx2, valuePrecision, valueFrom, valuePrecision, valueTo));
11026 gPad->SetDoubleBuffer(0);
11033 TAxis *xaxis = h3->GetXaxis();
11034 TAxis *yaxis = h3->GetYaxis();
11035 TAxis *zaxis = h3->GetZaxis();
11042 static TPoint endface1[5];
11043 static TPoint endface2[5];
11052 int pxmin =
gPad->XtoAbsPixel(uxmin);
11053 int pxmax =
gPad->XtoAbsPixel(uxmax);
11054 if (pxmin==pxmax)
return;
11055 int pymin =
gPad->YtoAbsPixel(uymin);
11056 int pymax =
gPad->YtoAbsPixel(uymax);
11057 if (pymin==pymax)
return;
11058 Double_t cx = (pxmax-pxmin)/(uxmax-uxmin);
11059 Double_t cy = (pymax-pymin)/(uymax-uymin);
11075 Int_t biny = firstY +
Int_t((lastY-firstY)*(px-pxmin)/(pxmax-pxmin));
11080 Int_t binz = firstZ +
Int_t((lastZ-firstZ)*(py-pymin)/(pymax-pymin));
11083 if (line1[0].GetX())
gVirtualX->DrawPolyLine(2,line1);
11084 if (nbins>1 && line1[0].GetX()) {
11095 line1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11096 line1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11099 line1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11100 line1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11107 line2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11108 line2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11111 line2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11112 line2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11118 line3[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11119 line3[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11122 line3[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11123 line3[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11129 line4[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11130 line4[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11133 line4[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11134 line4[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11136 endface1[0].
SetX(line1[0].GetX());
11137 endface1[0].
SetY(line1[0].GetY());
11138 endface1[1].
SetX(line2[0].GetX());
11139 endface1[1].
SetY(line2[0].GetY());
11140 endface1[2].
SetX(line3[0].GetX());
11141 endface1[2].
SetY(line3[0].GetY());
11142 endface1[3].
SetX(line4[0].GetX());
11143 endface1[3].
SetY(line4[0].GetY());
11144 endface1[4].
SetX(line1[0].GetX());
11145 endface1[4].
SetY(line1[0].GetY());
11147 endface2[0].
SetX(line1[1].GetX());
11148 endface2[0].
SetY(line1[1].GetY());
11149 endface2[1].
SetX(line2[1].GetX());
11150 endface2[1].
SetY(line2[1].GetY());
11151 endface2[2].
SetX(line3[1].GetX());
11152 endface2[2].
SetY(line3[1].GetY());
11153 endface2[3].
SetX(line4[1].GetX());
11154 endface2[3].
SetY(line4[1].GetY());
11155 endface2[4].
SetX(line1[1].GetX());
11156 endface2[4].
SetY(line1[1].GetY());
11166 TH1 *hp = h3->Project3D(
"x");
11190 Int_t binx = firstX +
Int_t((lastX-firstX)*(px-pxmin)/(pxmax-pxmin));
11195 Int_t binz = firstZ +
Int_t((lastZ-firstZ)*(py-pymin)/(pymax-pymin));
11198 if (line1[0].GetX())
gVirtualX->DrawPolyLine(2,line1);
11199 if (nbins>1 && line1[0].GetX()) {
11210 line1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11211 line1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11214 line1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11215 line1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11222 line2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11223 line2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11226 line2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11227 line2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11233 line3[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11234 line3[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11237 line3[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11238 line3[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11244 line4[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11245 line4[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11248 line4[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11249 line4[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11251 endface1[0].
SetX(line1[0].GetX());
11252 endface1[0].
SetY(line1[0].GetY());
11253 endface1[1].
SetX(line2[0].GetX());
11254 endface1[1].
SetY(line2[0].GetY());
11255 endface1[2].
SetX(line3[0].GetX());
11256 endface1[2].
SetY(line3[0].GetY());
11257 endface1[3].
SetX(line4[0].GetX());
11258 endface1[3].
SetY(line4[0].GetY());
11259 endface1[4].
SetX(line1[0].GetX());
11260 endface1[4].
SetY(line1[0].GetY());
11262 endface2[0].
SetX(line1[1].GetX());
11263 endface2[0].
SetY(line1[1].GetY());
11264 endface2[1].
SetX(line2[1].GetX());
11265 endface2[1].
SetY(line2[1].GetY());
11266 endface2[2].
SetX(line3[1].GetX());
11267 endface2[2].
SetY(line3[1].GetY());
11268 endface2[3].
SetX(line4[1].GetX());
11269 endface2[3].
SetY(line4[1].GetY());
11270 endface2[4].
SetX(line1[1].GetX());
11271 endface2[4].
SetY(line1[1].GetY());
11281 TH1 *hp = h3->Project3D(
"y");
11304 Int_t binx = firstX +
Int_t((lastX-firstX)*(px-pxmin)/(pxmax-pxmin));
11309 Int_t biny = firstY +
Int_t((lastY-firstY)*(py-pymin)/(pymax-pymin));
11312 if (line1[0].GetX())
gVirtualX->DrawPolyLine(2,line1);
11313 if (nbins>1 && line1[0].GetX()) {
11324 line1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11325 line1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11328 line1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11329 line1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11336 line2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11337 line2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11340 line2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11341 line2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11347 line3[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11348 line3[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11351 line3[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11352 line3[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11358 line4[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11359 line4[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11362 line4[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11363 line4[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11365 endface1[0].
SetX(line1[0].GetX());
11366 endface1[0].
SetY(line1[0].GetY());
11367 endface1[1].
SetX(line2[0].GetX());
11368 endface1[1].
SetY(line2[0].GetY());
11369 endface1[2].
SetX(line3[0].GetX());
11370 endface1[2].
SetY(line3[0].GetY());
11371 endface1[3].
SetX(line4[0].GetX());
11372 endface1[3].
SetY(line4[0].GetY());
11373 endface1[4].
SetX(line1[0].GetX());
11374 endface1[4].
SetY(line1[0].GetY());
11376 endface2[0].
SetX(line1[1].GetX());
11377 endface2[0].
SetY(line1[1].GetY());
11378 endface2[1].
SetX(line2[1].GetX());
11379 endface2[1].
SetY(line2[1].GetY());
11380 endface2[2].
SetX(line3[1].GetX());
11381 endface2[2].
SetY(line3[1].GetY());
11382 endface2[3].
SetX(line4[1].GetX());
11383 endface2[3].
SetY(line4[1].GetY());
11384 endface2[4].
SetX(line1[1].GetX());
11385 endface2[4].
SetY(line1[1].GetY());
11395 TH1 *hp = h3->Project3D(
"z");
11418 Int_t binz = first +
Int_t((last-first)*(py-pymin)/(pymax-pymin));
11421 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11422 if (nbins>1 && rect2[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11427 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11428 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11429 rect1[4].
SetX(rect1[0].GetX());
11430 rect1[4].
SetY(rect1[0].GetY());
11433 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11434 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11437 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11438 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11441 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11442 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11449 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11450 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11451 rect2[4].
SetX(rect2[0].GetX());
11452 rect2[4].
SetY(rect2[0].GetY());
11455 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11456 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11459 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11460 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11463 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11464 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11470 TH2 *hp = (
TH2*)h3->Project3D(
"xy");
11489 Int_t binz = first +
Int_t((last-first)*(py-pymin)/(pymax-pymin));
11492 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11493 if (nbins>1 && rect2[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11498 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11499 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11500 rect1[4].
SetX(rect1[0].GetX());
11501 rect1[4].
SetY(rect1[0].GetY());
11504 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11505 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11508 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11509 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11512 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11513 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11520 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11521 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11522 rect2[4].
SetX(rect2[0].GetX());
11523 rect2[4].
SetY(rect2[0].GetY());
11526 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11527 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11530 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11531 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11534 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11535 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11540 TH2 *hp = (
TH2*)h3->Project3D(
"yx");
11559 Int_t biny = first +
Int_t((last-first)*(py-pymin)/(pymax-pymin));
11562 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11563 if (nbins>1 && rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11568 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11569 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11570 rect1[4].
SetX(rect1[0].GetX());
11571 rect1[4].
SetY(rect1[0].GetY());
11574 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11575 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11578 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11579 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11582 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11583 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11590 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11591 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11592 rect2[4].
SetX(rect2[0].GetX());
11593 rect2[4].
SetY(rect2[0].GetY());
11596 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11597 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11600 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11601 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11604 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11605 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11610 TH2 *hp = (
TH2*)h3->Project3D(
"xz");
11629 Int_t biny = first +
Int_t((last-first)*(py-pymin)/(pymax-pymin));
11632 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11633 if (nbins>1 && rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11638 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11639 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11640 rect1[4].
SetX(rect1[0].GetX());
11641 rect1[4].
SetY(rect1[0].GetY());
11644 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11645 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11648 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11649 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11652 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11653 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11660 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11661 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11662 rect2[4].
SetX(rect2[0].GetX());
11663 rect2[4].
SetY(rect2[0].GetY());
11666 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11667 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11670 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11671 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11674 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11675 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11680 TH2 *hp = (
TH2*)h3->Project3D(
"zx");
11699 Int_t binx = first +
Int_t((last-first)*(px-pxmin)/(pxmax-pxmin));
11702 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11703 if (nbins>1 && rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11708 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11709 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11710 rect1[4].
SetX(rect1[0].GetX());
11711 rect1[4].
SetY(rect1[0].GetY());
11714 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11715 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11718 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11719 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11722 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11723 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11730 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11731 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11732 rect2[4].
SetX(rect2[0].GetX());
11733 rect2[4].
SetY(rect2[0].GetY());
11736 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11737 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11740 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11741 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11744 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11745 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11750 TH2 *hp = (
TH2*)h3->Project3D(
"yz");
11769 Int_t binx = first +
Int_t((last-first)*(px-pxmin)/(pxmax-pxmin));
11772 if (rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect1);
11773 if (nbins>1 && rect1[0].GetX())
gVirtualX->DrawPolyLine(5,rect2);
11778 rect1[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11779 rect1[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11780 rect1[4].
SetX(rect1[0].GetX());
11781 rect1[4].
SetY(rect1[0].GetY());
11784 rect1[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11785 rect1[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11788 rect1[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11789 rect1[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11792 rect1[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11793 rect1[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11800 rect2[0].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11801 rect2[0].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11802 rect2[4].
SetX(rect2[0].GetX());
11803 rect2[4].
SetY(rect2[0].GetY());
11806 rect2[1].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11807 rect2[1].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11810 rect2[2].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11811 rect2[2].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11814 rect2[3].
SetX(pxmin +
Int_t((u[0]-uxmin)*cx));
11815 rect2[3].
SetY(pymin +
Int_t((u[1]-uymin)*cy));
11820 TH2 *hp = (
TH2*)h3->Project3D(
"zy");
Handle_t Window_t
Window handle.
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 wid
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 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 void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
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.
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)
virtual void SetAlpha(Float_t a)
void Paint(Option_t *option="") override
Paint this crown with its current attributes.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual Double_t GetXmax() const
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 void SetMinimum(Double_t minimum=-1111)
Set the minimum value along Y for this function In case the function is already drawn,...
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
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.
A 3-Dim 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.
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.
void SetTitle(const char *title) override
Change/set the title.
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 void SetXTitle(const char *title)
virtual Int_t GetDimension() const
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
@ kNoTitle
Don't draw the histogram title.
@ kUserContour
User specified contour levels.
@ kNoStats
Don't draw stats box.
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.
virtual void SetZTitle(const char *title)
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 void SetYTitle(const char *title)
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 Double_t GetSumOfWeights() const
Return the sum of weights excluding under/overflows.
static Bool_t AddDirectoryStatus()
Static function: cannot be inlined on Windows/NT.
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.
The 3-D histogram classes derived from the 1-D histogram classes.
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
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 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)
virtual void PaintImage(Drawable_t, Int_t, Int_t, Int_t=0, Int_t=0, UInt_t=0, UInt_t=0, Option_t *="")
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
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
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 void Clear(Option_t *="")
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.
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 quidistributed 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
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
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void Close(Option_t *option="")=0
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 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.