10 #ifndef SUMMARYDRAWER_C
11 # define SUMMARYDRAWER_C
17 # include <TParameter.h>
24 # include <TLegendEntry.h>
29 # include <TProfile.h>
113 static const Char_t* lN[]={
"FMD1i",
"FMD2i",
"FMD2o",
"FMD3o",
"FMD3i", 0};
114 static const Char_t* uN[]={
"FMD1I",
"FMD2I",
"FMD2O",
"FMD3O",
"FMD3I", 0};
115 return (lower ? lN : uN);
128 return ((d == 1 ? kRed : (d == 2 ? kGreen : kBlue))
129 + ((r ==
'I' || r ==
'i') ? 2 : -3));
138 Char_t r = (i/2 == 1) ?
'o' :
'i';
139 TLegendEntry* e = l->AddEntry(
"dummy", Form(
"FMD%d%c", d, r),
"f");
141 e->SetFillStyle(1001);
142 e->SetLineColor(kBlack);
153 case 1: str =
"pp";
break;
154 case 2: str =
"PbPb";
break;
155 case 3: str =
"pPb";
break;
156 case 4: str =
"Pbp";
break;
163 if (sNN < 1000) str = Form(
"%dGeV", sNN);
164 else if (sNN < 3000) str = Form(
"%4.2fTeV", 0.001*sNN);
165 else str = Form(
"%dTeV", sNN/1000);
176 if (!trg.IsNull()) trg.Append(
" & ");
210 kNClusterGt0 = 0x1000,
216 if ((trigger & kInel) != 0x0)
AppendAnd(str,
"INEL");
217 if ((trigger & kInelGt0) != 0x0)
AppendAnd(str,
"INEL>0");
218 if ((trigger & kNSD) != 0x0)
AppendAnd(str,
"NSD");
219 if ((trigger & kV0AND) != 0x0)
AppendAnd(str,
"V0AND");
220 if ((trigger & kA) != 0x0)
AppendAnd(str,
"A");
221 if ((trigger & kB) != 0x0)
AppendAnd(str,
"B");
222 if ((trigger & kC) != 0x0)
AppendAnd(str,
"C");
223 if ((trigger & kE) != 0x0)
AppendAnd(str,
"E");
224 if ((trigger & kMCNSD) != 0x0)
AppendAnd(str,
"MCNSD");
225 if ((trigger & kNClusterGt0) != 0x0)
AppendAnd(str,
"NCluster>0");
226 if ((trigger & kSatellite) != 0x0)
AppendAnd(str,
"Satellite");
244 if (verb) Warning(
"GetObject",
"No parent given");
248 if (verb) Warning(
"GetObject",
"No name specified");
252 if (parent->IsA()->InheritsFrom(TCollection::Class())) {
254 o = p->FindObject(name);
256 else if (parent->IsA()->InheritsFrom(TDirectory::Class())) {
257 const TDirectory* d =
static_cast<const TDirectory*
>(parent);
258 o =
const_cast<TDirectory*
>(d)->Get(name);
261 Warning(
"GetObject",
"Do not know how to find an object (%s) in "
262 "%s (of class %s)", name.Data(),
263 parent ? parent->GetName() :
"?",
264 parent ? parent->ClassName() :
"?");
266 if (verb) Warning(
"GetObject",
"Object \"%s\" not found in parent \"%s\"",
267 name.Data(), parent->GetName());
286 if (!o->IsA()->InheritsFrom(cl)) {
287 Warning(
"CheckType",
"Object \"%s\" retrieved from \"%s\" is not a "
288 "%s but a %s", o->GetName(), src.Data(), cl->GetName(),
303 template <
typename T>
307 if (!
CheckType(o, T::Class(), p->GetName()))
return 0;
308 return static_cast<T*
>(o);
320 template <
typename T>
324 if (!r)
return false;
328 if (!r->TestBit(BIT(19))) {
332 int cnt = pc->GetVal();
336 value = r->GetUniqueID();
458 return DoGetObject<TCollection>(
GetObject(parent, name, verb), parent);
474 return DoGetObject<TH1>(
GetObject(parent, name, verb), parent);
490 return DoGetObject<TH2>(
GetObject(parent, name, verb), parent);
508 return DoGetObject<TH3>(
GetObject(parent, name, verb), parent);
526 THStack*
stack = DoGetObject<THStack>(
GetObject(parent,name,verb),parent);
527 if (!stack)
return 0;
528 if (sub == 0)
return stack;
530 if (stack->GetHists()->GetEntries() <= 0 ||stack->GetMaximum() < 1) {
532 stack->GetHists()->Delete();
536 if (!sc) { ptr++;
continue; }
544 if (obj->IsA()->InheritsFrom(TH2::Class())) {
545 TH2* h =
static_cast<TH2*
>(obj);
546 TH1* p = h->ProjectionX(*ptr, 1, h->GetNbinsY(),
"e");
547 p->Scale(1.,
"width");
552 else if (obj->IsA()->InheritsFrom(TH1::Class())) {
553 TH1* hh =
static_cast<TH1*
>(obj);
573 fTop->SetFillColor(kBlue-5);
574 fTop->SetBorderSize(0);
575 fTop->SetBorderMode(0);
580 fBody->SetFillColor(0);
581 fBody->SetFillStyle(0);
582 fBody->SetBorderSize(0);
583 fBody->SetBorderMode(0);
584 fBody->SetTopMargin(0.01);
585 fBody->SetLeftMargin(0.10);
586 fBody->SetRightMargin(0.01);
587 fBody->SetBottomMargin(0.10);
618 Int_t width = height / TMath::Sqrt(2);
624 fCanvas =
new TCanvas(
"c", pname.Data(), width, height);
629 fCanvas->Print(Form(
"%s[", pname.Data()),
630 Form(
"pdf %s",
fLandscape ?
"Landscape" :
""));
636 gStyle->SetOptStat(0);
637 gStyle->SetTitleColor(0);
638 gStyle->SetTitleStyle(0);
639 gStyle->SetTitleBorderSize(0);
640 gStyle->SetTitleX(.5);
641 gStyle->SetTitleY(1);
642 gStyle->SetTitleW(.8);
643 gStyle->SetTitleH(.09);
644 gStyle->SetFrameFillColor(kWhite);
645 gStyle->SetFrameBorderSize(1);
646 gStyle->SetFrameBorderMode(1);
647 gStyle->SetPalette(1);
651 fTop =
new TPad(
"top",
"Top", 0, 1-dy, 1, 1, 0, 0);
653 fTop->SetFillColor(kBlue-5);
654 fTop->SetBorderSize(0);
655 fTop->SetBorderMode(0);
660 fBody =
new TPad(
"body",
"Body", 0, 0, 1, 1-dy, 0, 0);
662 fBody->SetFillColor(0);
663 fBody->SetFillStyle(0);
664 fBody->SetBorderSize(0);
665 fBody->SetBorderMode(0);
669 fHeader =
new TLatex(.5, .5,
"Title");
686 fParVal =
new TLatex(x2, y,
"");
707 Form(
"pdf %s Title:%s",
728 fHeader->DrawLatex(.5,.5,title);
737 tit.Form(
"pdf %s Title:%s",
fLandscape ?
"Landscape" :
"",
741 Info(
"PrintCanvas",
"Printing to %s (%s)",
742 fCanvas->GetTitle(), tit.Data());
744 gSystem->RedirectOutput(
"/dev/null");
766 TLatex* ltx =
new TLatex(.5, .5, title);
768 ltx->SetTextAlign(22);
791 const char*
title=
"")
793 TVirtualPad* p = c->GetPad(padNo);
795 Warning(
"DrawInPad",
"Pad # %d not found in %s", padNo, c->GetName());
812 if (o->IsA()->InheritsFrom(TH1::Class()))
814 else if (o->IsA()->InheritsFrom(THStack::Class()))
816 else if (o->IsA()->InheritsFrom(TGraph::Class()))
817 return o->DrawClone(options);
836 if (title && title[0] !=
'\0') o->GetHistogram()->SetTitle(title);
837 TAxis* xAxis = o->GetXaxis();
839 Warning(
"DrawObjClone",
"No X-axis for drawn stack %s", o->GetName());
843 Int_t nBins = xAxis->GetNbins();
846 TIter next(o->GetHists());
847 while ((h = static_cast<TH1*>(next()))) {
848 TAxis* a = h->GetXaxis();
849 nBins = TMath::Max(nBins, a->GetNbins());
850 xMin = TMath::Min(xMin, a->GetXmin());
851 xMax = TMath::Max(xMax, a->GetXmax());
853 if (nBins != xAxis->GetNbins() ||
854 xMin != xAxis->GetXmin() ||
855 xMax != xAxis->GetXmax()) {
856 xAxis->Set(nBins, xMin, xMax);
857 o->GetHistogram()->Rebuild();
859 o->GetHistogram()->SetYTitle(title);
873 TH1* tmp = o->DrawCopy(options);
874 if (title && title[0] !=
'\0') tmp->SetTitle(title);
882 UInt_t horiz = (flags & 0xF0000);
883 UInt_t verti = (flags & 0xF000);
887 Double_t yB = p->GetBottomMargin()+eps;
888 Double_t yT = 1-p->GetTopMargin()-eps;
889 Double_t xL = p->GetLeftMargin()+eps;
890 Double_t xR = 1-p->GetRightMargin()-eps;
892 case kNorth: y1 = yT-dY;
break;
893 case kSouth: y1 = yB;
break;
894 case kMiddle: y1 = (yB+yT-dY)/2;
break;
896 y2 = TMath::Min(y1 + dY, yT);
899 case kEast: x1 = xL;
break;
900 case kWest: x1 = xR-dX;
break;
901 case kCenter: x1 = (xL+xR-dX)/2;
break;
903 x2 = TMath::Min(x1 + dX, xR);
926 if (autoFill) l = p->BuildLegend(x1, y1, x2, y2);
927 else l =
new TLegend(x1, y1, x2, y2);
950 const char*
title=
"")
953 Warning(
"DrawInPad",
"No pad specified");
959 if (flags &
kLogx) p->SetLogx();
960 if (flags &
kLogy) p->SetLogy();
961 if (flags &
kLogz) p->SetLogz();
962 if (flags &
kGridx) p->SetGridx();
963 if (flags &
kGridy) p->SetGridy();
967 if (o.Contains(
"colz", TString::kIgnoreCase))
968 p->SetRightMargin(0.15);
971 Warning(
"DrawInPad",
"Nothing to draw in pad # %s", p->GetName());
974 if (o.Contains(
"text", TString::kIgnoreCase)) {
975 TH1* hh =
static_cast<TH1*
>(h);
976 hh->SetMaximum(1.1*hh->GetMaximum());
977 hh->SetMarkerSize(2);
1005 TVirtualPad* p = c->cd(padNo);
1007 Warning(
"DrawInPad",
"Pad # %d not found in %s", padNo, c->GetName());
1010 if (flags &
kLogx) p->SetLogx();
1011 if (flags &
kLogy) p->SetLogy();
1012 if (flags &
kLogz) p->SetLogz();
1013 if (flags &
kGridx) p->SetGridx();
1014 if (flags &
kGridy) p->SetGridy();
1021 Bool_t e3 = o.Contains(
"e3");
1023 fopts.ReplaceAll(
"e3",
" same");
1026 h1->GetYaxis()->SetLabelSize(0);
1027 h1->GetYaxis()->SetTicks(
"");
1028 h1->GetYaxis()->SetNdivisions(0);
1030 if (e3) h1->DrawCopy(fopts);
1033 Double_t m1 = 1.05 * h1->GetMaximum();
1035 TGaxis* a1 =
new TGaxis(p->GetUxmin(), p->GetUymin(),
1036 p->GetUxmin(), p->GetUymax(),
1038 a1->SetLineColor(h1->GetLineColor());
1043 Double_t m2 = 1.1 * h2->GetMaximum();
1044 Double_t scale = m2 > 0 ? m1 / m2 : 1;
1047 if (e3) h2->DrawCopy(fopts);
1050 TGaxis* a2 =
new TGaxis(p->GetUxmax(), p->GetUymin(),
1051 p->GetUxmax(), p->GetUymax(),
1053 a2->SetLineColor(h2->GetLineColor());
1080 if (name.IsNull() && value.IsNull())
return;
1087 if (!value.IsNull())
1090 y -= 1.2 *
fParName->GetTextSize();
1091 else if (!value.IsNull())
1092 y -= 1.2 *
fParVal->GetTextSize();
1097 template <
typename T>
1104 std::stringstream s;
1105 s << std::boolalpha << value;
1125 fNCol(landscape ? nRow : nCol),
1126 fNRow(landscape ? nCol : nRow)
1129 fSubs =
new TVirtualPad*[nPad];
1132 if ((!commonX && !commonY) || (commonX && commonY)) {
1139 else if (commonX && !commonY) {
1143 for (
Int_t iCol = 1; iCol <=
fNCol; iCol++) {
1144 TVirtualPad* q =
fParent->GetPad(iCol);
1151 q->Divide(1,
fNRow,0,0);
1156 else if (!commonX && commonY) {
1160 for (
Int_t iRow = 1; iRow <=
fNRow; iRow++) {
1161 TVirtualPad* q =
fParent->GetPad(iRow);
1168 q->Divide(
fNCol,1,0,0);
1184 ::Warning(
"GetPad",
"No sub-pads");
1188 ::Warning(
"GetPad",
"Inded %d out of bounds [%d,%d]",
1189 idx, 0,
fNRow*fNCol);
1196 return (iRow-1) *
fNCol + iCol;
1207 if (iRow < 0 || iRow >
fNRow)
return 0;
1208 if (iCol < 0 || iRow >
fNCol)
return 0;
1220 if ((!commonX && !commonY) ||
1221 (commonX && commonY)) {
1239 commonX ? 0 : 0.01, commonY ? 0 : 0.01);
1247 else if (commonX && !commonY) {
1266 TVirtualPad* left =
fBody->cd(1);
1268 TVirtualPad* middle =
fBody->cd(2);
1271 Info(
"left",
"%p",left); left->ls();
1272 Info(
"middle",
"%p",middle); middle->ls();
1283 TVirtualPad* right =
fBody->cd(3);
1314 TVirtualPad* top =
fBody->cd(1);
1316 TVirtualPad* middle =
fBody->cd(2);
1321 TVirtualPad* bottom =
fBody->cd(2);
1350 case 0: idx = 5;
break;
1351 case 1: idx = 0;
break;
1352 case 2: idx = 1 + ((r ==
'I' || r ==
'i') ? 0 : 1);
break;
1353 case 3: idx = 3 + ((r ==
'I' || r ==
'i') ? 0 : 1);
break;
1363 Int_t idx = n.Index(
"FMD");
1364 if (n == kNPOS)
return 0;
1366 Int_t det = n.Atoi();
1387 const char*
title=
"")
1389 TVirtualPad* p =
RingPad(d, r);
1391 Warning(
"DrawInRingPad",
"No pad found for FMD%d%c", d, r);
1409 const char*
title=
"")
1411 TVirtualPad* p =
RingPad(name);
1413 Warning(
"DrawInRingPad",
"No pad found for \"%s\"", name);
1431 const char*
title=
"")
1434 TVirtualPad* p =
RingPad(h->GetName());
1438 Warning(
"DrawInRingPad",
"No pad found for %s/%s",
1439 h->GetName(), h->GetTitle());
1464 if (!check.IsNull() && gROOT->GetClass(check))
return;
1467 TString macPath(gROOT->GetMacroPath());
1469 if (!macPath.Contains(fwd)) macPath.Append(Form(
":%s", fwd.Data()));
1470 if (!incPath.Contains(fwd))
gSystem->AddIncludePath(Form(
"-I%s",
1472 if (!sub.IsNull()) {
1476 while ((pSub = iSub())) {
1478 if (!macPath.Contains(subDir))
1479 macPath.Append(Form(
":%s", subDir.Data()));
1480 if (!incPath.Contains(subDir))
1481 gSystem->AddIncludePath(Form(
"-I%s", subDir.Data()));
1484 gROOT->SetMacroPath(macPath);
1485 gROOT->LoadMacro(Form(
"%s%s", name.Data(), (force ?
"++g" :
"+")));
1490 Info(
"DrawEventInspector",
"Drawing event inspector");
1497 Int_t lowFlux=0, nPileUp=0, ipMethod=0;
1528 case 0: sIpMeth =
"Normal";
break;
1529 case 1: sIpMeth =
"pA in 2012";
break;
1530 case 2: sIpMeth =
"pA in 2013";
break;
1531 case 3: sIpMeth =
"PWG-UD";
break;
1532 case 4: sIpMeth =
"Satellite";
break;
1535 DrawParameter(y,
"Use V0AND for NSD", (v0and ?
"yes" :
"no"));
1536 DrawParameter(y,
"Least # of pile-up vertex", Form(
"%d", nPileUp));
1538 Form(
"%fcm", dPileUp));
1542 TH1* triggers =
GetH1(c,
"triggers");
1543 TH1* vertex =
GetH1(c,
"vertex",
false);
1544 Bool_t mc = (vertex != 0);
1546 Int_t nInelMC = vertex->GetEntries();
1547 Int_t nInel = triggers->GetBinContent(1);
1548 Int_t nNSDMC = triggers->GetBinContent(11);
1549 Int_t nNSD = triggers->GetBinContent(4);
1551 Form(
"#varepsilon_{INEL} = #bf{%d/%d}", nInel, nInelMC),
1552 Form(
"%5.3f",
float(nInel)/nInelMC));
1554 Form(
"#varepsilon_{NSD} = #bf{%d/%d}", nNSD, nNSDMC),
1555 Form(
"%5.3f",
float(nNSD)/nNSDMC));
1563 else fBody->Divide(2,4);
1565 TH1* nEventsTr =
GetH1(c,
"nEventsTr");
1566 TH1* nEventsTrVtx =
GetH1(c,
"nEventsTrVtx");
1567 TH1* nEventsAcc =
GetH1(c,
"nEventsAccepted");
1568 if (nEventsTr) nEventsTr->Rebin(2);
1569 if (nEventsTrVtx) nEventsTrVtx->Rebin(2);
1572 vertex->SetFillColor(kMagenta+2);
1575 "Events w/trigger, trigger+vertex, accepted");
1583 if (
GetH1(c,
"trgStatus"))
1588 if (
GetH1(c,
"vtxStatus"))
1595 cent->Scale(1,
"width");
1599 TH1* pileupStatus =
GetH1(c,
"pileupStatus",
false);
1600 if (pileupStatus)
DrawInPad(
fBody, 8, pileupStatus,
"hist text30");
1602 TH2* centQual =
GetH2(c,
"centVsQuality");
1604 centQual->Scale(1,
"width");
1615 TH2* bVsNpart =
GetH2(c,
"bVsParticipants");
1616 TH2* bVsNbin =
GetH2(c,
"bVsBinary");
1617 TH2* bVsCent =
GetH2(c,
"bVsCentrality");
1618 TH2* vzComparison =
GetH2(c,
"vzComparison");
1619 TH2* centVsNpart =
GetH2(c,
"centralityVsParticipans");
1620 TH2* centVsNbin =
GetH2(c,
"centralityVsBinary");
1628 TProfile* nPartB = bVsNpart->ProfileX(
"nPartB",1,-1,
"s");
1629 TProfile* nBinB = bVsNbin->ProfileX(
"nBinB",1,-1,
"s");
1630 nPartB->SetMarkerColor(kBlue+2);
1631 nPartB->SetMarkerStyle(20);
1632 nPartB->SetLineColor(kBlue+2);
1633 nPartB->SetFillColor(kBlue-10);
1634 nPartB->SetFillStyle(1001);
1635 nPartB->SetMarkerSize(0.7);
1636 nBinB->SetMarkerColor(kRed+2);
1637 nBinB->SetMarkerStyle(21);
1638 nBinB->SetLineColor(kRed+2);
1639 nBinB->SetFillColor(kRed-10);
1640 nBinB->SetMarkerSize(0.7);
1641 nBinB->SetFillStyle(1001);
1647 TProfile* nPartC = centVsNpart->ProfileY(
"nPartC",1,-1,
"s");
1648 TProfile* nBinC = centVsNbin->ProfileY(
"nBinC",1,-1,
"s");
1649 nPartC->SetMarkerColor(kBlue+2);
1650 nPartC->SetMarkerStyle(20);
1651 nPartC->SetLineColor(kBlue+2);
1652 nPartC->SetFillColor(kBlue-10);
1653 nPartC->SetFillStyle(1001);
1654 nPartC->SetMarkerSize(0.7);
1655 nBinC->SetMarkerColor(kRed+2);
1656 nBinC->SetMarkerStyle(21);
1657 nBinC->SetLineColor(kRed+2);
1658 nBinC->SetFillColor(kRed-10);
1659 nBinC->SetMarkerSize(0.7);
1660 nBinC->SetFillStyle(1001);
1669 Info(
"DrawESDFixer",
"Drawing ESD fixer");
1673 Int_t recoFactor = 0;
1674 Bool_t recalcEta =
false;
1675 Bool_t invalidIsEmpty =
false;
1689 Form(
"%d (assumed)", recoFactor));
1692 Form(
"%s", (recalcEta ?
"yes" :
"no")));
1695 Form(
"%s", (invalidIsEmpty ?
"yes" :
"no")));
1700 Form(
"%d", xd->GetEntries()));
1712 const char* folderName=
"mcTrackDensity")
1714 Info(
"DrawTrackDensity",
"Drawing track density");
1749 SummaryDrawer::DoGetParameter<Double_t>(
TObject* o,
const TObject* p,
1753 UInt_t i = o->GetUniqueID();
TObject * DrawInPad(TVirtualPad *p, TObject *h, Option_t *opts="", UInt_t flags=0x0, const char *title="")
static Bool_t GetParameter(const TObject *c, const TString &name, Int_t &value, Bool_t verb=true)
TVirtualPad * RingPad(const char *name) const
static TH1 * GetH1(const TObject *parent, const TString &name, Bool_t verb=true)
static TH2 * GetH2(const TObject *parent, const TString &name, Bool_t verb=true)
void DrawInRingPad(UShort_t d, Char_t r, TObject *h, Option_t *opts="", UShort_t flags=0x0, const char *title="")
void DrawInRingPad(const char *name, TObject *h, Option_t *opts="", UShort_t flags=0x0, const char *title="")
void Divide(Bool_t commonX, Bool_t commonY)
void DrawTrackDensity(TCollection *parent, const char *folderName="mcTrackDensity")
static Bool_t DoGetParameter(TObject *o, const TObject *p, T &value)
TList * list
TDirectory file where lists per trigger are stored in train ouput.
TLegend * DrawRingLegend(TVirtualPad *p, UInt_t flags)
static void TriggerString(ULong_t trigger, TString &str)
static Bool_t CheckType(const TObject *o, const TClass *cl, const TString &src)
UShort_t T(UShort_t m, UShort_t t)
static Bool_t GetParameter(const TObject *c, const TString &name, Bool_t &value, Bool_t verb=true)
void MakeChapter(const TString &title)
static void SysString(UShort_t sys, TString &str)
static TH3 * GetH3(const TCollection *parent, const TString &name, Bool_t verb=true)
static void GetLegendPosition(UInt_t flags, TVirtualPad *p, Double_t &x1, Double_t &y1, Double_t &x2, Double_t &y2)
static Bool_t GetParameter(const TObject *c, const TString &name, Short_t &value, Bool_t verb=true)
static Bool_t GetParameter(const TObject *c, const TString &name, ULong_t &value, Bool_t verb=true)
TVirtualPad * GetPad(Int_t idx)
TVirtualPad * GetPad(Int_t iCol, Int_t iRow)
static TObject * GetObject(const TObject *parent, const TString &name, Bool_t verb=true)
void CreateCanvas(const TString &pname, Bool_t landscape=false, Bool_t pdf=true, Bool_t useTop=true)
TLegend * MakeLegend(TVirtualPad *p, UInt_t flags, Bool_t autoFill)
void DrawParameter(Double_t &y, const TString &name, const TString &value, Double_t size=0)
virtual TObject * DrawObjClone(THStack *o, Option_t *options, const char *title)
static const Char_t ** GetRingNames(Bool_t lower=false)
void PrintCanvas(const TString &title, Float_t size=.7)
Int_t GetIdx(Int_t iCol, Int_t iRow) const
static void AppendAnd(TString &trg, const TString &what)
static void SNNString(UShort_t sNN, TString &str)
virtual void DrawEventInspector(TCollection *parent)
void DivideForRings(Bool_t commonX, Bool_t commonY)
static void CompileScript(const TString &name, const TString &sub, const TString &check, Bool_t force)
static Bool_t GetParameter(const TObject *c, const TString &name, UShort_t &value, Bool_t verb=true)
DividedPad(TVirtualPad *p, Bool_t landscape, Int_t nCol, Int_t nRow)
void DrawTParameter(Double_t &y, TList *list, const TString &name)
virtual TObject * DrawObjClone(TObject *o, Option_t *options, const char *title)
void DrawTwoInPad(TVirtualPad *c, Int_t padNo, TH1 *h1, TH1 *h2, Option_t *opts="", UShort_t flags=0x0)
TObject * DrawInPad(TVirtualPad *c, Int_t padNo, TObject *h, Option_t *opts="", UInt_t flags=0x0, const char *title="")
void DrawInRingPad(TObject *h, Option_t *opts="", UShort_t flags=0x0, const char *title="")
virtual void DrawESDFixer(TCollection *parent)
virtual TObject * DrawObjClone(TH1 *o, Option_t *options, const char *title)
TVirtualPad * RingPad(UShort_t d, Char_t r) const
static T * DoGetObject(TObject *o, const TObject *p)
static TCollection * GetCollection(const TObject *parent, const TString &name, Bool_t verb=true)
static Color_t RingColor(UShort_t d, Char_t r)
static THStack * GetStack(const TObject *parent, const TString &name, const char *sub=0, Bool_t verb=true)