19 #include "TPaletteAxis.h" 24 #include "TDirectory.h" 32 using std::ostringstream;
50 Name myname =
"TPadManipulator::get: ";
52 TDirectory* pdir = tdir ==
nullptr ? gDirectory :
tdir;
53 if ( pdir ==
nullptr ) {
54 cout << myname <<
"ERROR: Root directory not found." <<
endl;
57 pdir->GetObject(onam.c_str(), ppad);
64 Name myname =
"TPadManipulator::read: ";
66 TFile* pfil = TFile::Open(fnam.c_str(),
"READ");
67 if ( pfil ==
nullptr || ! pfil->IsOpen() ) {
68 cout << myname <<
"Unable to open file " << fnam <<
endl;
70 ppad =
get(onam, pfil);
100 const string myname =
"TPadManipulator::ctor: ";
101 if (
dbg ) cout << myname <<
this <<
endl;
113 const string myname =
"TPadManipulator::ctor(pad): ";
114 cout << myname <<
"Not implemented--will copy objects from pad." <<
endl;
115 if (
dbg ) cout << myname <<
this <<
endl;
125 Index ny = nPadY > 0 ? nPadY : nx;
126 if ( nx )
split(nx, ny);
139 if (
this == &rhs )
return *
this;
140 bool saveAddDirectory = TH1::AddDirectoryStatus();
141 TH1::AddDirectory(
false);
142 if (
m_ppad !=
nullptr ) {
158 m_ph =
dynamic_cast<TH1*
>(rhs.
hist()->Clone());
159 }
else if ( rhs.
m_pg ) {
160 m_pg =
dynamic_cast<TGraph*
>(rhs.
m_pg->Clone());
164 for ( TObject* pobj : rhs.
m_objs ) {
165 m_objs.push_back(pobj !=
nullptr ? pobj->Clone() :
nullptr);
168 TH1::AddDirectory(saveAddDirectory);
234 if ( gROOT->GetListOfCanvases()->IndexOf(
m_ppad) >= 0 ) {
236 gSystem->ProcessEvents();
241 for ( TObject* pobj :
m_objs )
delete pobj;
254 double val =
pad()->GetUxmin();
255 return pad()->GetLogx() ?
pow(10,val) :
val;
266 double val =
pad()->GetUxmax();
267 return pad()->GetLogx() ?
pow(10,val) :
val;
278 double val =
pad()->GetUymin();
279 return pad()->GetLogy() ?
pow(10,val) :
val;
290 double val =
pad()->GetUymax();
291 return pad()->GetLogy() ?
pow(10,val) :
val;
318 return dynamic_cast<TCanvas*
>(
m_ppad);
326 return dynamic_cast<TCanvas*
>(
m_ppad);
332 Name myname =
"TPadManipulator::put: ";
333 TDirectory* pdir = tdir ==
nullptr ? gDirectory :
tdir;
334 if ( pdir ==
nullptr ) {
335 cout << myname <<
"ERROR: Root directory not found." <<
endl;
338 if ( ! pdir->IsWritable() ) {
339 cout << myname <<
"Root directory " << pdir->GetName() <<
" is not writable." <<
endl;
342 pdir->WriteObject(
this, onam.c_str());
349 Name myname =
"TPadManipulator::write: ";
350 TFile* pfil = TFile::Open(fnam.c_str(),
"UPDATE");
351 if ( pfil ==
nullptr || ! pfil->IsOpen() ) {
352 cout << myname <<
"Unable to open file " << fnam <<
endl;
355 int wstat =
put(onam, pfil);
364 Name::size_type idot = fname.rfind(
".");
365 if ( idot != Name::npos ) {
366 Name suf = fname.substr(idot + 1);
367 if ( suf ==
"root" || suf ==
"tpad" ) {
372 TCanvas* pcan =
canvas(
false);
377 bool setBackToNonBatch =
false;
378 if ( pcan ==
nullptr ) {
379 bool isBatch = gROOT->IsBatch();
381 gROOT->SetBatch(
true);
382 setBackToNonBatch =
true;
386 if ( pcan ==
nullptr ) {
387 if ( setBackToNonBatch ) gROOT->SetBatch(
false);
395 ErrorHandlerFunc_t pehSave =
nullptr;
396 ErrorHandlerFunc_t pehDefault = DefaultErrorHandler;
397 if ( GetErrorHandler() != pehDefault ) {
398 pehSave = SetErrorHandler(pehDefault);
400 pcan->Print(fname.c_str());
401 if ( pehSave !=
nullptr ) SetErrorHandler(pehSave);
403 if ( setBackToNonBatch ) gROOT->SetBatch(
false);
432 if (
npad() == 0 && ipad == 0 )
return this;
447 return dynamic_cast<TH1*
>(
objects()[iobj]);
454 if ( nobj )
return objects().back();
461 if (
hist() !=
nullptr &&
hist()->GetName() == hnam )
return hist();
462 for ( TObject* pobj :
objects() ) {
463 TH1* ph =
dynamic_cast<TH1*
>(pobj);
464 if ( ph ==
nullptr )
continue;
465 if ( ph->GetName() == hnam )
return ph;
488 double frac =
pad()->GetAbsWNDC();
496 double frac =
pad()->GetAbsHNDC();
503 return havePad() ?
pad()->GetFrame() :
nullptr;
521 if ( !
havePad() )
return nullptr;
522 return dynamic_cast<TH1*
>(
pad()->FindObject(
"hframe"));
528 for ( TLine* pline :
m_lines )
delete pline;
535 if ( x2 <= x1 )
return 1;
536 if ( y2 <= y1 )
return 2;
537 if ( x1 < 0.0 )
return 3;
538 if ( x2 > 1.0 )
return 4;
539 if ( y1 < 0.0 )
return 5;
540 if ( y2 > 1.0 )
return 6;
551 if ( nx < 1 )
return 1;
552 if ( ny < 1 ) ny = nx;
556 for (
Index iy=0; iy<ny; ++iy ) {
559 for (
Index ix=0; ix<nx; ++ix ) {
561 int rstat =
addPad(x1, y1, x2, y2);
562 if ( rstat )
return 100 + rstat;
573 return split(nx, nx);
582 sscom <<
"RootPalette::set(" << pal <<
")";
591 const string myname =
"TPadManipulator::add: ";
592 if (
dbg ) cout << myname <<
this <<
endl;
593 if ( pobj ==
nullptr )
return 101;
595 if ( pman ==
nullptr )
return 102;
596 TH1* ph =
dynamic_cast<TH1*
>(pobj);
597 TGraph* pg =
dynamic_cast<TGraph*
>(pobj);
598 bool isNotHistOrGraph = ph==
nullptr && pg==
nullptr;
602 TObject* pobjc = pobj->Clone();
603 TH1* phc =
dynamic_cast<TH1*
>(pobjc);
604 if ( phc !=
nullptr ) phc->SetDirectory(
nullptr);
610 if ( ph ==
nullptr && pg ==
nullptr )
return 103;
611 if ( pman->
hist() != nullptr ) {
612 if ( replace )
delete pman->
m_ph;
615 if ( pman->
graph() != nullptr ) {
616 if ( replace )
delete pman->
m_pg;
623 if ( ph !=
nullptr ) {
624 TH1* phc = (TH1*) ph->Clone();
625 phc->SetDirectory(
nullptr);
630 TGraph* pgc = (TGraph*) pg->Clone();
634 for (
Index ipos=0; ipos<sopt.size(); ++ipos ) {
635 char ch = sopt[ipos];
636 if ( ch ==
'a' || ch ==
'A' ) {
637 cout << myname <<
"WARNING: Dropping \"" << ch <<
"\" from drawing option string for graph " 638 << pgc->GetName() <<
"." <<
endl;
652 return add(0, pobj, sopt, replace);
658 TLegend
leg(x1, y1, x2, y2);
660 TLegend* pleg =
dynamic_cast<TLegend*
>(
objects().back());
662 pleg->SetBorderSize(0);
663 pleg->SetFillStyle(0);
670 m_title.SetTitle(sttl.c_str());
677 if ( tsiz <= 0.0 ) tsiz = 0.035;
681 double yttl = 1.0 - 0.70*tsiz;
682 m_title.SetText(xttl, yttl, sttl.c_str());
689 m_label.SetTitle(slab.c_str());
700 if (
pad() !=
nullptr &&
npad() == 0 )
pad()->Clear();
708 const string myname =
"TPadManipulator::update: ";
709 if (
dbg ) cout << myname <<
this <<
endl;
716 TVirtualPad* pPadSave = gPad;
721 if ( man.
m_ppad ==
nullptr ) {
723 cout << myname <<
"ERROR: Too few bounds." <<
endl;
728 ssnam <<
m_ppad->GetName() <<
"_sub" << isub;
729 string spnam = ssnam.str();
730 string spttl = spnam;
731 TPad* ppad =
new TPad(spnam.c_str(), spttl.c_str(), bnd.
x1, bnd.
y1, bnd.
x2, bnd.
y2);
736 int srstat = man.
update();
738 cout << myname <<
"WARNING: Error " << srstat <<
" updating pad " << isub <<
endl;
752 if (
m_pg->GetN() == 0 ) {
753 double xmin =
m_pg->GetXaxis()->GetXmin();
754 double ymin =
m_pg->GetYaxis()->GetXmin();
755 m_pg->SetPoint(0, xmin, ymin);
784 cout << myname <<
"Top-level pad does not have a histogram or graph or subpads!" <<
endl;
800 bool isTH2 =
dynamic_cast<TH2*
>(
hist()) !=
nullptr;
801 bool isTH1 = isTH && !isTH2;
805 double asp = wx > 0 ? wy/wx : 1.0;
806 double aspx = asp < 1.0 ? asp : 1.0;
807 double aspy = asp > 1.0 ? 1.0/asp : 1.0;
812 double xml = xm0 + 0.120*aspx;
813 double xmr = 0.05*aspx;
814 double xmb = 0.100*aspy;
815 double xmt = 0.070*aspy;
816 double xlb = -0.028 + 0.038*aspy;
817 double xlz = 0.005*aspx;
818 double xttl = 1.2*aspy;
819 double zttl = 1.5*aspx;
820 double yttl = 0.17 + 1.8*aspx;
836 TPaletteAxis* pax =
dynamic_cast<TPaletteAxis*
>(
hist()->GetListOfFunctions()->FindObject(
"palette"));
837 if ( pax !=
nullptr ) {
839 double xp1 = 1.0 - 1.00*xmr;
840 double xp2 = 1.0 - 0.65*xmr;
842 double yp2 = 1.0 - xmt;
843 double tlen = 0.25*(xp2 - xp1);
849 hist()->GetZaxis()->SetTickLength(tlen);
855 m_ppad->SetRightMargin(xmr);
856 m_ppad->SetLeftMargin(xml);
857 m_ppad->SetTopMargin(xmt);
858 m_ppad->SetBottomMargin(xmb);
863 if ( ticklenx < 0.0 ) ticklenx = 0.0;
864 if ( tickleny <= 0.0 ) {
870 ticklenx = (wx/wy)*tickleny;
872 tickleny = (wy/wx)*ticklenx;
876 int nbin = isTH1 ?
hist()->GetNbinsX() : 0;
877 int flowcol = kAzure - 9;
893 double binWidth =
hist()->GetBinWidth(1);
894 int binDisp1 =
hist()->FindBin(
xmin()+0.499*binWidth);
895 int binUnder2 = binDisp1 ? binDisp1 - 1 : 0;
896 double yunder =
hist()->Integral(0, binUnder2);
902 int binOver2 =
hist()->GetNbinsX() + 1;
903 double binWidth =
hist()->GetBinWidth(1);
904 int binOver1 =
hist()->FindBin(
xmax()+0.501*binWidth);
905 int binDisp2 = binOver1 - 1;
906 double yover =
hist()->Integral(binOver1, binOver2);
915 if ( doLogx && xa1 <= 0.0 ) {
916 cout << myname <<
"WARNING: Must have range above 0.0 for logarithmic x-axis." <<
endl;
917 cout << myname <<
"WARNING: Use setLogRangeX(x1, x2) to set range." <<
endl;
918 cout << myname <<
"WARNING: Plot is displayed with linear axis." <<
endl;
924 if ( doLogy && ya1 <= 0.0 ) {
925 cout << myname <<
"WARNING: Must have range above 0.0 for logarithmic y-axis." <<
endl;
926 cout << myname <<
"WARNING: Use setLogRangeY(y1, y2) to set range." <<
endl;
927 cout << myname <<
"WARNING: Plot is displayed with linear axis." <<
endl;
933 if ( doLogz && za1 <= 0.0 ) {
934 cout << myname <<
"WARNING: Must have range above 0.0 for logarithmic z-axis." <<
endl;
935 cout << myname <<
"WARNING: Use setLogRangeY(z1, z2) to set range." <<
endl;
936 cout << myname <<
"WARNING: Plot is displayed with linear axis." <<
endl;
955 m_ppad->DrawFrame(xa1, ya1, xa2, ya2, sattl.c_str());
957 if ( labSizeX > 0.0 ) {
963 if ( labSizeY > 0.0 ) {
976 getXaxis()->SetTickLength(ticklenx);
977 getYaxis()->SetTickLength(tickleny);
980 if ( pax ==
nullptr )
continue;
1006 TAxis* pah =
hist()->GetXaxis();
1007 getXaxis()->Set(pah->GetNbins(), pah->GetXmin(), pah->GetXmax());
1013 TAxis* pah =
hist()->GetYaxis();
1014 getYaxis()->Set(pah->GetNbins(), pah->GetXmin(), pah->GetXmax());
1025 TAxis* paz =
hist()->GetZaxis();
1026 if ( paz !=
nullptr && za2 > za1 ) {
1027 paz->SetRangeUser(za1, za2);
1028 paz->SetLabelOffset(xlz);
1031 hist()->Draw(dopt.c_str());
1037 for (
Index iobj=0; iobj<
m_objs.size(); ++iobj ) {
1038 TObject* pobj =
m_objs[iobj];
1039 string sopt =
m_opts[iobj];
1040 if ( pobj !=
nullptr ) pobj->Draw(sopt.c_str());
1045 bool doBot =
m_gflowOpt.find(
"B") != string::npos;
1046 bool doTop =
m_gflowOpt.find(
"T") != string::npos;
1047 bool doLef =
m_gflowOpt.find(
"L") != string::npos;
1048 bool doRig =
m_gflowOpt.find(
"R") != string::npos;
1049 TGraph* pgout =
new TGraph();
1052 std::vector<TGraph*> gras;
1054 for ( TObject* pobj :
m_objs ) {
1055 TGraph* pgra =
dynamic_cast<TGraph*
>(pobj);
1056 if ( pgra !=
nullptr ) gras.push_back(pgra);
1058 for ( TGraph* pgin : gras ) {
1059 for (
int ipt=0; ipt<pgin->GetN(); ++ipt ) {
1061 pgin->GetPoint(ipt, x, y);
1065 if ( doRig && x >
xmax() ) { doAdd =
true; xout =
xmax(); }
1066 if ( doLef && x <
xmin() ) { doAdd =
true; xout =
xmin(); }
1067 if ( doBot && y <
ymin() ) { doAdd =
true; yout =
ymin(); }
1068 if ( doTop && y >
ymax() ) { doAdd =
true; yout =
ymax(); }
1069 if ( doAdd ) pgout->SetPoint(pgout->GetN(), xout, yout);
1072 if ( pgout->GetN() == 0 ) {
1084 pad()->RedrawAxis();
1085 pad()->RedrawAxis(
"G");
1090 float marg =
m_ppad->GetTopMargin();
1091 float ttlY = 1.0 - 0.5*marg;
1093 float ttlSizeMax = 0.90*marg;
1095 if ( ttlSize > ttlSizeMax ) ttlSize = ttlSizeMax;
1107 if (
hist() !=
nullptr )
return hist()->GetXaxis();
1108 if (
m_pg !=
nullptr )
return m_pg->GetXaxis();
1116 if (
hist() !=
nullptr )
return hist()->GetYaxis();
1117 if (
m_pg !=
nullptr )
return m_pg->GetYaxis();
1125 if (
hist() !=
nullptr )
return hist()->GetZaxis();
1136 canvas()->SetWindowSize(wx, wy);
1398 if ( gStyle ==
nullptr )
return 2;
1399 m_ppad->SetFrameFillColor(gStyle->GetColorPalette(0));
1407 if (
m_ppad ==
nullptr ) {
1409 TCanvas* pcan =
new TCanvas;
1411 string snam = pcan->GetName();
1412 string sttl = pcan->GetTitle();
1427 if (
m_ppad ==
nullptr )
return 0;
1444 if ( !
m_top )
return 0;
1445 if (
m_ppad ==
nullptr )
return 1;
1446 TVirtualPad* pPadSave = gPad;
1448 double xminPad, yminPad, xmaxPad, ymaxPad;
1449 m_ppad->GetRangeAxis(xminPad, yminPad, xmaxPad, ymaxPad);
1450 string sopt =
"-US";
1453 if (
m_ppad->GetLogx() ) {
1454 xminPad =
pow(10.0, xminPad);
1455 xmaxPad =
pow(10.0, xmaxPad);
1460 if (
m_ppad->GetLogy() ) {
1461 yminPad =
pow(10.0, yminPad);
1462 ymaxPad =
pow(10.0, ymaxPad);
1465 if ( paxold == 0 )
return 2;
1466 double ticksize = paxold->GetTickLength();
1467 int ndiv = paxold->GetNdivisions();
1468 TGaxis* paxnew =
new TGaxis(xminPad, ymaxPad, xmaxPad, ymaxPad,
1469 x1, x2, ndiv, sopt.c_str());
1470 if ( ticksize > 0 ) paxnew->SetTickLength(ticksize);
1471 string name =
"TopAxis";
1472 paxnew->SetName(name.c_str());
1473 TList* pobjs =
m_ppad->GetListOfPrimitives();
1474 for (
int iobj=pobjs->GetEntries()-1; iobj>=0; --iobj ) {
1475 TGaxis* paxold =
dynamic_cast<TGaxis*
>(pobjs->At(iobj));
1476 if ( paxold ==
nullptr )
continue;
1477 if ( paxold->GetName() ==
name ) {
1478 pobjs->RemoveAt(iobj);
1498 if (
m_ppad ==
nullptr )
return 1;
1499 TVirtualPad* pPadSave = gPad;
1501 double xminPad, yminPad, xmaxPad, ymaxPad;
1502 m_ppad->GetRangeAxis(xminPad, yminPad, xmaxPad, ymaxPad);
1505 string sopt =
"+US";
1506 if (
m_ppad->GetLogx() ) {
1507 xminPad =
pow(10.0, xminPad);
1508 xmaxPad =
pow(10.0, xmaxPad);
1510 if (
m_ppad->GetLogy() ) {
1511 yminPad =
pow(10.0, yminPad);
1512 ymaxPad =
pow(10.0, ymaxPad);
1516 if ( paxold == 0 )
return 2;
1517 double ticksize = paxold->GetTickLength();
1518 int ndiv = paxold->GetNdivisions();
1519 TGaxis* paxnew =
new TGaxis(xmaxPad, yminPad, xmaxPad, ymaxPad,
1520 y1, y2, ndiv, sopt.c_str());
1521 if ( ticksize > 0 ) paxnew->SetTickLength(ticksize);
1522 string name =
"RightAxis";
1523 paxnew->SetName(name.c_str());
1524 TList* pobjs =
m_ppad->GetListOfPrimitives();
1525 for (
int iobj=pobjs->GetEntries()-1; iobj>=0; --iobj ) {
1526 TGaxis* paxold =
dynamic_cast<TGaxis*
>(pobjs->At(iobj));
1527 if ( paxold ==
nullptr )
continue;
1528 if ( paxold->GetName() ==
name ) {
1529 pobjs->RemoveAt(iobj);
1541 if (
m_ppad ==
nullptr )
return 1;
1542 const TList* pfuns =
nullptr;
1543 if (
haveHist() ) pfuns =
hist()->GetListOfFunctions();
1544 else if (
m_pg !=
nullptr ) pfuns =
m_pg->GetListOfFunctions();
1546 const TList& funs = *pfuns;
1547 unsigned int nfun = funs.GetEntries();
1548 TVirtualPad* pPadSave = gPad;
1551 if ( ifun >= nfun )
continue;
1552 TF1* pfun =
dynamic_cast<TF1*
>(funs.At(ifun));
1553 if ( pfun !=
nullptr ) pfun->Draw(
"same");
1562 if (
m_ppad ==
nullptr )
return 1;
1563 TVirtualPad* pPadSave = gPad;
1571 if ( xmod < 0.0 )
continue;
1574 while ( x >=
xmin() ) x -= xmod;
1575 while ( x <
xmin() ) x += xmod;
1578 while ( x <=
xmax() ) {
1579 TLine* pline =
new TLine(x,
ymin(), x, ytop);
1580 pline->SetLineStyle(isty);
1583 if ( xmod == 0.0 )
break;
1592 if ( ymod < 0.0 )
continue;
1595 while ( y >=
ymin() ) y -= ymod;
1596 while ( y <
ymin() ) y += ymod;
1599 while ( y <=
ymax() ) {
1600 TLine* pline =
new TLine(
xmin(), y, xtop, y);
1601 pline->SetLineStyle(isty);
1604 if ( ymod == 0.0 )
break;
1614 if ( wx < 0.0 || wy < 0.0 )
continue;
1615 double xlef =
xmin();
1616 double xrig =
xmax();
1617 double ybot =
ymin();
1618 double ytop =
ymax();
1619 double ylef = slop*xlef + yoff;
1620 double yrig = slop*xrig + yoff;
1621 double xbot = slop == 0.0 ?
xmin() - wx : (ybot - yoff)/slop;
1622 double xtop = slop == 0.0 ?
xmax() + wx : (ytop - yoff)/slop;
1625 if ( ylef > ybot && ylef < ytop ) {
1628 }
else if ( ylef <= ybot && slop > 0.0 && xbot < xrig ) {
1631 }
else if ( ylef >= ytop && slop < 0.0 && xtop < xrig ) {
1639 if ( slop > 0.0 && xtop < xrig ) {
1642 }
else if ( slop < 0.0 && xbot < xrig ) {
1649 TLine* pline =
new TLine(x1, y1, x2, y2);
1650 pline->SetLineStyle(isty);
1661 const string myname =
"TPadManipulator::Streamer: ";
1663 TClass* pclass = TClass::GetClass(
"TPadManipulator");
1664 if ( buf.IsReading() ) {
1665 if ( pclass ==
nullptr ) {
1666 cout << myname <<
"Dictionary not found for read." <<
endl;
1670 pclass->ReadBuffer(buf,
this);
1676 cout << myname <<
"Read pad with " << msg <<
" and " 1677 <<
objects().size() <<
" extra objects and " 1680 if ( pclass ==
nullptr ) {
1681 cout << myname <<
"Dictionary not found for write." <<
endl;
1687 cout << myname <<
"Writing pad with " << msg <<
" and " 1688 <<
objects().size() <<
" extra objects and " 1693 pclass->WriteBuffer(buf,
this);
std::vector< unsigned int > m_histFuns
std::vector< double > m_vmlXLength
TPadManipulator * progenitor()
std::vector< double > m_hmlXoff
const StringVector & patternSplit(std::string spat)
TPadManipulator * parent()
int setTimeOffset(double toff)
std::string m_timeFormatY
void msg(const char *fmt,...)
TPadManipulator * m_parent
TH1 * getHist(unsigned int iobj)
double getLabelSizeX() const
int add(unsigned int ipad, TObject *pobj, std::string sopt="", bool replace=false)
TLegend * addLegend(double x1, double y1, double x2, double y2)
int m_canvasWidth
==> Do not stream.
int addPad(double x1, double y1, double x2, double y2, int icol=-1)
std::string getLabel() const
int addSlopedLine(double slop, double yoff=0.0, int isty=1)
int setRangeZ(double y1, double y2)
std::vector< int > m_hmlXStyle
int setCanvasSize(int wx, int wy)
int canvasPixelsY() const
int split(Index nx, Index ny)
bool haveHistOrGraph() const
std::vector< double > m_vmlXmod
TVirtualPad * m_ppad
==> Do not stream
int setLabel(std::string slab)
bool haveFrameHist() const
std::string m_gflowOpt
==> Do not stream.
int setLogRangeZ(double y1, double y2)
int showOverflow(bool show=true)
double getTitleSize() const
int setTitle(std::string sttl, float height=-1.0)
int canvasPixelsX() const
int addHorizontalLine(double yoff=0.0, double lenfrac=1.0, int isty=1)
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
std::vector< double > m_slYoff
static TPadManipulator * get(Name onam="tpad", TDirectory *tdir=nullptr)
NameVector m_binLabelsX
==> Do not stream.
int printOnce(std::string fname)
int setBinLabelsX(const NameVector &labs)
double padPixelsX() const
int addAxisRight(bool flag=true)
static TPadManipulator * read(Name fnam, Name onam="tpad")
int showGraphOverflow(std::string sopt="BTLR", int imrk=38, int icol=1)
std::vector< Name > NameVector
std::vector< double > m_vmlXoff
int showUnderflow(bool show=true)
bool m_showUnderflow
==> Do not stream.
void Streamer(TBuffer &buf)
int addAxis(bool flag=true)
int setRangeXY(double x1, double x2, double y1, double y2)
unsigned int npad() const
int put(Name onam="tpad", TDirectory *tdir=nullptr) const
TPadManipulator * man(unsigned int ipad=0)
TObject * lastObject() const
std::vector< int > m_vmlXStyle
double padPixelsY() const
int addVerticalModLines(double xmod, double xoff=0.0, double lenfrac=1.0, int isty=3)
std::vector< double > m_hmlXLength
int addHistFun(unsigned int ifun=0)
std::vector< double > m_slSlop
std::vector< int > m_slStyl
int setLogRangeY(double y1, double y2)
int setRangeX(double x1, double x2)
int addVerticalLine(double xoff=0.0, double lenfrac=1.0, int isty=1)
std::vector< TPadManipulator > m_subMans
TPadManipulator & operator=(const TPadManipulator &rhs)
int setBinLabelsY(const NameVector &labs)
std::vector< std::string > m_opts
int setTimeFormatX(std::string sfmt)
void setParents(bool recurse)
TVirtualPad * pad() const
const TObjVector & objects() const
int addAxisTop(bool flag=true)
int addHorizontalModLines(double ymod, double yoff=0.0, double lenfrac=1.0, int isty=3)
int write(Name fnam, Name onam="tpad") const
void setPalette(int ipal)
int setRangeY(double y1, double y2)
int print(std::string fname, std::string spat="{,}")
double getLabelSizeY() const
std::vector< double > m_hmlXmod
QTextStream & endl(QTextStream &s)
int setTimeFormatY(std::string sfmt)
int setLogRangeX(double x1, double x2)
std::string m_timeFormatX