7 #include <AliAnalysisManager.h> 10 #include <AliInputEventHandler.h> 11 #include <AliAODInputHandler.h> 12 #include <AliAODHandler.h> 13 #include <AliAODEvent.h> 14 #include <AliESDEvent.h> 15 #include <AliAnalysisTaskSE.h> 16 #include <AliPhysicsSelection.h> 17 #include <AliTriggerAnalysis.h> 18 #include <AliMultiplicity.h> 19 #include "AliMultEstimator.h" 20 #include "AliMultVariable.h" 21 #include "AliMultInput.h" 22 #include "AliMultSelection.h" 23 #include "AliMultSelectionCuts.h" 24 #include <TParameter.h> 28 #include <TFitResult.h> 33 #define FIT_OPTIONS "RNS" 38 #ifdef ALIROOT_SVN_REVISION 40 #elif defined(ALIROOT_REVISION) 42 if (ret != 0)
return ret;
45 TString rev(ALIROOT_REVISION, 8);
46 for (
ULong_t i = 0; i < 8; i++) {
49 case '0': p = 0;
break;
50 case '1': p = 1;
break;
51 case '2': p = 2;
break;
52 case '3': p = 3;
break;
53 case '4': p = 4;
break;
54 case '5': p = 5;
break;
55 case '6': p = 6;
break;
56 case '7': p = 7;
break;
57 case '8': p = 8;
break;
58 case '9': p = 9;
break;
59 case 'a':
case 'A': p = 10;
break;
60 case 'b':
case 'B': p = 11;
break;
61 case 'c':
case 'C': p = 12;
break;
62 case 'd':
case 'D': p = 13;
break;
63 case 'e':
case 'E': p = 14;
break;
64 case 'f':
case 'F': p = 15;
break;
66 ret |= (p << (32-4*(i+1)));
77 #if !defined(ALIROOT_SVN_BRANCH) && !defined(ALIROOT_BRANCH) 81 if (ret != 0)
return ret;
84 #ifdef ALIROOT_SVN_BRANCH 85 str = ALIROOT_SVN_BRANCH;
87 #elif defined(ALIROOT_BRANCH) 91 if (str.IsNull())
return 0xFFFFFFFF;
92 if (str[0] ==
'v') str.Remove(0,1);
93 if (str.EqualTo(top))
return ret = 0xFFFFFFFF;
96 TObjString* pMajor = tokens->GetEntries()>0 ?
97 (
static_cast<TObjString*
>(tokens->At(0))) : 0;
98 TObjString* pMinor = tokens->GetEntries()>1 ?
99 (
static_cast<TObjString*
>(tokens->At(1))) : 0;
100 TObjString* pRelea = tokens->GetEntries() > 2 ?
101 static_cast<TObjString*
>(tokens->At(2)) : 0;
102 TObjString* pAn = tokens->GetEntries() > 3 ?
103 static_cast<TObjString*
>(tokens->At(3)) : 0;
105 if (pMajor) sMajor = pMajor->String().Strip(TString::kLeading,
'0');
106 if (pMinor) sMinor = pMinor->String().Strip(TString::kLeading,
'0');
107 if (pRelea) sRelea = pRelea->String().Strip(TString::kLeading,
'0');
109 ret = (((sMajor.Atoi() & 0xFF) << 12) |
110 ((sMinor.Atoi() & 0xFF) << 8) |
111 ((sRelea.Atoi() & 0xFF) << 4) |
155 if (b1a == 129 && b1z == 54 && b2a == 129 && b2z == 54)
157 if (b1a == 208 && b1z == 82 && b2a == 208 && b2z == 82)
159 if (b1a == 208 && b1z == 82 && b2a == 1 && b2z == 1)
161 if (b1a == 1 && b1z == 1 && b2a == 208 && b2z == 82)
163 if (b1a == 1 && b1z == 1 && b2a == 1 && b2z == 1)
199 const Double_t pMass = 9.38271999999999995e-01;
200 const Double_t nMass = 9.39564999999999984e-01;
202 Double_t beamM = z * pMass + (a - z) * nMass;
203 Double_t beamP = TMath::Sqrt(beamE * beamE - beamM * beamM);
204 Double_t beamY = .5* TMath::Log((beamE+beamP) / (beamE-beamP));
219 return TMath::Sqrt(
Float_t(z1*z2)/a1/a2) * beam;
232 if (z2 == z1 && a2 == a1)
return 0;
233 return .5 * TMath::Log(
Float_t(z1*a2)/z2/a1);
239 if (TMath::Abs(energy - 900.) < 10)
return 900;
240 if (TMath::Abs(energy - 2400.) < 10)
return 2400;
241 if (TMath::Abs(energy - 2760.) < 20)
return 2760;
242 if (TMath::Abs(energy - 4400.) < 10)
return 4400;
243 if (TMath::Abs(energy - 5000.) < 10)
return 5000;
244 if (TMath::Abs(energy - 5022.) < 10)
return 5023;
245 if (TMath::Abs(energy - 5125.) < 30)
return 5100;
246 if (TMath::Abs(energy - 5200.) < 50)
return 5200;
247 if (TMath::Abs(energy - 5440.) < 20)
return 5440;
248 if (TMath::Abs(energy - 5500.) < 40)
return 5500;
249 if (TMath::Abs(energy - 7000.) < 10)
return 7000;
250 if (TMath::Abs(energy - 8000.) < 10)
return 8000;
251 if (TMath::Abs(energy - 10000.) < 10)
return 10000;
252 if (TMath::Abs(energy - 13000.) < 10)
return 13000;
253 if (TMath::Abs(energy - 14000.) < 10)
return 14000;
286 if (ret > 1)
return ret;
290 ret = CheckSNN(beam);
307 return Form(
"%04dGeV", cms);
322 if (TMath::Abs(v - 5.) < 1 )
return +5;
323 if (TMath::Abs(v - 2.5) < 1 )
return +2;
324 if (TMath::Abs(v - 2.5) < 1 )
return -2;
325 if (TMath::Abs(v + 5.) < 1 )
return -5;
326 if (TMath::Abs(v) < 1)
return 0;
327 ::Warning(
"ParseMagneticfield",
"Magnetic field value: %f not known", v);
343 return Form(
"%01dkG", f);
349 if (!task) ::Fatal(
"GetAODEvent",
"Null task given, cannot do that");
355 ret =
dynamic_cast<AliAODEvent*
>(task->InputEvent());
356 if (!ret) ::Warning(
"GetAODEvent",
"No AOD event found");
364 if (dynamic_cast<AliAODInputHandler*>(am->GetInputEventHandler())) {
368 if (dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler())) {
373 ::Warning(
"CheckForAOD",
374 "Neither and input nor output AOD handler is specified");
384 ::Warning(
"CheckForTask",
"Task %s not found in manager", clsOrName);
387 ::Info(
"CheckForTask",
"Found task %s", clsOrName);
390 TClass* dep = gROOT->GetClass(clsOrName);
392 ::Warning(
"CheckForTask",
"Unknown class %s for needed task", clsOrName);
395 TIter next(am->GetTasks());
397 while ((o = next())) {
398 if (o->IsA()->InheritsFrom(dep)) {
399 ::Info(
"CheckForTask",
"Found task of class %s: %s",
400 clsOrName, o->GetName());
404 ::Warning(
"CheckForTask",
"No task of class %s was found", clsOrName);
412 ret->SetMergeMode(
'f');
413 ret->SetUniqueID(value);
420 ret->SetMergeMode(
'f');
421 ret->SetUniqueID(value);
428 ret->SetMergeMode(
'f');
429 ret->SetUniqueID(value);
438 ret->SetMergeMode(
'f');
446 ret->SetMergeMode(
'f');
447 ret->SetUniqueID(value);
456 if (p->TestBit(BIT(19)))
459 value = o->GetUniqueID();
466 if (p->TestBit(BIT(19)))
469 value = o->GetUniqueID();
476 if (p->TestBit(BIT(19)))
479 value = o->GetUniqueID();
486 if (p->TestBit(BIT(19)))
489 UInt_t i = o->GetUniqueID();
499 if (p->TestBit(BIT(19)))
502 value = o->GetUniqueID();
511 const Double_t minR[] = { 4.5213, 15.4 };
512 const Double_t maxR[] = { 17.2, 28.0 };
513 const Int_t nStr[] = { 512, 256 };
515 Int_t q = (ring ==
'I' || ring ==
'i') ? 0 : 1;
518 Double_t r = minR[q] + segment*strip;
526 Int_t hybrid = sec / 2;
527 Int_t q = (ring ==
'I' || ring ==
'i') ? 0 : 1;
528 Int_t r = q == 0 ? 1 : 0;
530 { 83.666, 74.966+.5 },
531 { -63.066+.5, -74.966 } };
533 ::Warning(
"GetSectorZ",
"Unknown sub-detector FMD%d%c", det, ring);
539 case 1:
if ((hybrid % 2) == 1) z -= .5;
break;
540 case 2:
if ((hybrid % 2) == r) z -= .5;
break;
541 case 3:
if ((hybrid % 2) == q) z -= .5;
break;
550 UShort_t nSec = (ring ==
'I' || ring ==
'i') ? 20 : 40;
551 Double_t base = float(sec+.5) / nSec * TMath::TwoPi();
553 case 1: base += TMath::Pi()/2;
break;
555 case 3: base = TMath::Pi() - base;
break;
557 ::Warning(
"GetSectorPhi",
"Unknown detector %d", d);
560 if (base < 0) base += TMath::TwoPi();
561 if (base > TMath::TwoPi()) base -= TMath::TwoPi();
578 Double_t theta = TMath::ATan2(r,z-zvtx);
579 Double_t eta = -1*TMath::Log(TMath::Tan(0.5*theta));
599 Double_t iX = ip.X();
if (iX > 100) iX = 0;
600 Double_t iY = ip.Y();
if (iY > 100) iY = 0;
604 pos.SetXYZ(dX, dY, dZ);
614 if (!
GetXYZ(det, ring, sec, strip, ip, pos)) {
615 ::Warning(
"GetEtaPhi",
"Invalid position for FMD%d%c[%2d,%3d]=(%f,%f,%f)",
616 det, ring, sec, strip, pos.X(), pos.Y(), pos.Z());
621 Double_t r = TMath::Sqrt(TMath::Power(pos.X(),2)+
622 TMath::Power(pos.Y(),2));
623 Double_t theta = TMath::ATan2(r, pos.Z());
624 Double_t tant = TMath::Tan(theta/2);
625 if (TMath::Abs(theta) < 1e-9) {
626 ::Warning(
"GetEtaPhi",
"tan(theta/2)=%f very small", tant);
631 phi = TMath::ATan2(pos.Y(), pos.X());
632 eta = -TMath::Log(tant);
633 if (phi < 0) phi += TMath::TwoPi();
634 if (phi > TMath::TwoPi()) phi -= TMath::TwoPi();
650 Double_t rv = TMath::Sqrt(TMath::Power(dx,2) + TMath::Power(dy,2));
651 Double_t the = 2*TMath::ATan(TMath::Exp(-eta));
653 if (TMath::Abs(tth) < 1e-9) {
654 ::Warning(
"GetEtaPhiFromStrip",
655 "eta=%f -> theta=%f tan(theta)=%f invalid (no change)",
663 eta = -TMath::Log(TMath::Tan(TMath::ATan2(rv,z)/2));
664 phi = TMath::ATan2(dy,dx);
665 if (phi < 0) phi += TMath::TwoPi();
680 if (yvtx > 999 || xvtx > 999)
return phi;
684 Double_t amp = TMath::Sqrt(xvtx*xvtx+yvtx*yvtx) / r;
685 Double_t pha = (TMath::Abs(yvtx) < 1e-12 ? 0 : TMath::ATan2(xvtx, yvtx));
686 Double_t cha = amp * TMath::Cos(phi+pha);
688 if (phi < 0) phi += TMath::TwoPi();
689 if (phi > TMath::TwoPi()) phi -= TMath::TwoPi();
698 TAxis* a =
new TAxis(bins.GetSize()-1,bins.GetArray());
713 if (nCenter % 2 == 1)
717 const Int_t nSat = 10;
718 const Int_t nBins = 2*nSat + nCenter;
719 const Int_t mBin = nBins / 2;
720 Double_t dCenter = 2*mCenter / nCenter;
723 for (
Int_t i = 1; i <= nCenter/2; i++) {
730 for (
Int_t i = 1; i <= nSat; i++) {
732 Int_t o = nCenter/2+i;
747 for (
Int_t i = 0; i <= nBins; i++) bins[i] = TMath::Power(10, i * dO+minOrder);
754 Int_t ind = gROOT->GetDirLevel();
757 std::cout << std::setfill(
' ') << std::setw(ind) <<
" " << std::flush;
759 TString t = TString::Format(
"%s %s", o.GetName(), o.ClassName());
760 const Int_t maxN = 75;
761 std::cout <<
"--- " << t <<
" " << std::setfill(
'-')
762 << std::setw(maxN-ind-5-t.Length()) <<
"-" << std::endl;
768 Int_t ind = gROOT->GetDirLevel();
771 std::cout << std::setfill(
' ') << std::setw(ind) <<
" " << std::flush;
774 const Int_t maxN = 29;
775 Int_t width = maxN - ind;
777 if (n.Length() > width-1) {
783 std::cout << std::setfill(
' ') << std::left << std::setw(width)
784 << n << std::right << std::flush;
795 static char buf[512];
796 vsnprintf(buf, 511, value, ap);
800 std::cout << buf << std::endl;
812 if (qual < 0xFFF)
return cent;
823 TObject* o =
event.FindListObject(
"MultSelection");
826 ::Warning(
"AliForwardUtil::GetCentralityMult",
827 "No MultSelection object found in event");
830 AliMultSelection* sel =
static_cast<AliMultSelection*
>(o);
831 if (!sel->GetEstimatorList() ||
832 sel->GetEstimatorList()->GetEntries() <= 0){
834 ::Warning(
"AliForwardUtil::GetCentralityMult",
835 "No list of estimators, falling back to compat");
840 AliMultEstimator* est = sel->GetEstimator(method);
844 ::Warning(
"AliForwardUtil::GetCentralityMult",
845 "Unknown estimator: %s", method.Data());
846 sel->GetEstimatorList()->Print();
858 Float_t cent = est->GetPercentile();
859 qual = sel->GetEvSelCode();
860 if (qual == AliMultSelectionCuts::kNoCalib) cent = -1;
862 ::Info(
"AliForwardUtil::GetCentralityMult",
863 "Got centrality %5.1f%% (%d)",
875 if (event.IsA()->InheritsFrom(AliESDEvent::Class()))
878 if (event.IsA()->InheritsFrom(AliAODEvent::Class()))
892 ::Warning(
"AliForwardUtil::GetCentralityCompat",
893 "No centrality object found in ESD");
896 Float_t cent = centObj->GetCentralityPercentileUnchecked(method);
897 qual = centObj->GetQuality();
899 ::Info(
"AliForwardUtil::GetCentralityCompat<ESD>",
900 "Got centrality %5.1f%% (%d)", cent, qual);
902 qual = AliMultSelectionCuts::kRejVzCut;
904 qual = AliMultSelectionCuts::kRejTrackletsVsClusters;
906 qual = AliMultSelectionCuts::kRejConsistencySPDandTrackVertices;
908 qual = AliMultSelectionCuts::kRejTrackletsVsClusters;
917 AliAODHeader* hdr =
dynamic_cast<AliAODHeader*
>(
event.GetHeader());
920 ::Warning(
"AliForwardUtil::GetCentralityCompat",
"Not a standard AOD");
923 AliCentrality* cP = hdr->GetCentralityP();
926 ::Warning(
"AliForwardUtil::GetCentralityCompat",
927 "No centrality found in AOD");
930 Float_t cent = cP->GetCentralityPercentile(method);
931 qual = cP->GetQuality();
932 if (qual & 0x1) qual = AliMultSelectionCuts::kRejVzCut;
933 if (qual & 0x2) qual = AliMultSelectionCuts::kRejTrackletsVsClusters;
934 if (qual & 0x4) qual = AliMultSelectionCuts::kRejConsistencySPDandTrackVertices;
935 if (qual & 0x8) qual = AliMultSelectionCuts::kRejTrackletsVsClusters;
938 ::Info(
"AliForwardUtil::GetCentralityCompat<AOD>",
939 "Got centrality %5.1f%% (%d)", cent, qual);
954 if (fFMD1i)
delete fFMD1i;
955 if (fFMD2i)
delete fFMD2i;
956 if (fFMD2o)
delete fFMD2o;
957 if (fFMD3i)
delete fFMD3i;
958 if (fFMD3o)
delete fFMD3o;
964 TObject::Delete(opt);
982 Int_t ns = (r ==
'I' || r ==
'i') ? 20 : 40;
984 if (etaAxis.GetXbins() && etaAxis.GetXbins()->GetArray())
985 hist =
new TH2D(Form(
"FMD%d%c_cache", d, r),
986 Form(
"FMD%d%c cache", d, r),
987 etaAxis.GetNbins(), etaAxis.GetXbins()->GetArray(),
988 ns, 0, TMath::TwoPi());
990 hist =
new TH2D(Form(
"FMD%d%c_cache", d, r),
991 Form(
"FMD%d%c cache", d, r),
992 etaAxis.GetNbins(), etaAxis.GetXmin(),
993 etaAxis.GetXmax(), ns, 0, TMath::TwoPi());
994 hist->SetXTitle(
"#eta");
995 hist->SetYTitle(
"#phi [radians]");
996 hist->SetZTitle(
"d^{2}N_{ch}/d#etad#phi");
998 hist->SetDirectory(0);
1006 TAxis* xAxis = hist->GetXaxis();
1007 if (etaAxis.GetXbins() && etaAxis.GetXbins()->GetArray())
1008 xAxis->Set(etaAxis.GetNbins(), etaAxis.GetXbins()->GetArray());
1010 xAxis->Set(etaAxis.GetNbins(), etaAxis.GetXmin(), etaAxis.GetXmax());
1025 fFMD1i =
Make(1,
'I', etaAxis);
1026 fFMD2i =
Make(2,
'I', etaAxis);
1027 fFMD2o =
Make(2,
'O', etaAxis);
1028 fFMD3i =
Make(3,
'I', etaAxis);
1029 fFMD3o =
Make(3,
'O', etaAxis);
1041 if (!fFMD1i) fFMD1i =
Make(1,
'i', etaAxis);
else RebinEta(fFMD1i, etaAxis);
1042 if (!fFMD2i) fFMD2i =
Make(2,
'i', etaAxis);
else RebinEta(fFMD2i, etaAxis);
1043 if (!fFMD2o) fFMD2o =
Make(2,
'o', etaAxis);
else RebinEta(fFMD2o, etaAxis);
1044 if (!fFMD3i) fFMD3i =
Make(3,
'i', etaAxis);
else RebinEta(fFMD3i, etaAxis);
1045 if (!fFMD3o) fFMD3o =
Make(3,
'o', etaAxis);
else RebinEta(fFMD3o, etaAxis);
1058 if (fFMD1i) { fFMD1i->Reset(option); fFMD1i->ResetBit(
kSkipRing); }
1059 if (fFMD2i) { fFMD2i->Reset(option); fFMD2i->ResetBit(
kSkipRing); }
1060 if (fFMD2o) { fFMD2o->Reset(option); fFMD2o->ResetBit(
kSkipRing); }
1061 if (fFMD3i) { fFMD3i->Reset(option); fFMD3i->ResetBit(
kSkipRing); }
1062 if (fFMD3o) { fFMD3o->Reset(option); fFMD3o->ResetBit(
kSkipRing); }
1080 case 1:
return fFMD1i;
1081 case 2:
return (r ==
'I' || r ==
'i' ? fFMD2i : fFMD2o);
1082 case 3:
return (r ==
'I' || r ==
'i' ? fFMD3i : fFMD3o);
1102 list->SetName(fName.Data());
1120 TList* list =
static_cast<TList*
>(d->FindObject(fName.Data()));
1138 return static_cast<TH1*
>(d->FindObject(name));
1147 if (lvl < msgLvl)
return;
1149 va_start(ap, format);
1157 if (
fMsg.IsNull())
return;
1165 if (lvl < msgLvl)
return;
1168 va_start(ap, format);
1178 static char buf[512];
1179 Int_t n = gROOT->GetDirLevel() + 2;
1180 for (
Int_t i = 0; i < n; i++) buf[i] =
' ';
1181 vsnprintf(&(buf[n]), 511-n, format, ap);
1189 msg[0] = (in > 0 ?
'>' : in < 0 ?
'<' :
'=');
1190 AliLog::Message(AliLog::kInfo, msg, 0, 0,
"PWGLF/forward", 0, 0);
1191 if (in > 0) gROOT->IncreaseDirLevel();
1192 else if (in < 0) gROOT->DecreaseDirLevel();
1196 : save(gErrorIgnoreLevel)
1198 gErrorIgnoreLevel = lvl;
1199 AliLog::SetModuleDebugLevel(
"ROOT", lvl);
1200 AliLog::SetGlobalDebugLevel(lvl);
1205 gErrorIgnoreLevel =
save;
1206 AliLog::SetModuleDebugLevel(
"ROOT",
save);
1207 AliLog::SetGlobalDebugLevel(
save);
static Short_t ParseMagneticField(Float_t field)
void Clear(Option_t *option="")
static TAxis * MakeFullIpZAxis(Int_t nCenter=20)
static const char * CenterOfMassEnergyString(UShort_t cms)
static void Message(Int_t lvl, Int_t msgLvl, const char *format,...)
static Double_t GetPhiFromStrip(Char_t ring, UShort_t strip, Double_t phi, Double_t xvtx, Double_t yvtx)
static UShort_t ParseCenterOfMassEnergy(UShort_t sys, Float_t cms)
void ReInit(const TAxis &etaAxis)
TString format
file names tag, basically the trigger and calorimeter combination
static Bool_t GetEtaPhi(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, const TVector3 &ip, Double_t &eta, Double_t &phi)
static Double_t GetSectorZ(UShort_t det, Char_t ring, UShort_t sec)
static void Format(TString &out, const char *format, va_list ap)
static Bool_t GetXYZ(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, const TVector3 &ip, TVector3 &pos)
static Bool_t GetEtaPhiFromStrip(Char_t r, UShort_t strip, Double_t &eta, Double_t &phi, Double_t ipX, Double_t ipY)
static AliAODEvent * GetAODEvent(AliAnalysisTaskSE *task)
#define ALIROOT_SVN_REVISION
static void PrintName(const char *name)
static const char * MagneticFieldString(Short_t field)
static TH2D * Make(UShort_t d, Char_t r, const TAxis &etaAxis)
static Double_t GetSectorPhi(UShort_t det, Char_t ring, UShort_t sec)
SuppressGuard(Int_t lvl=2000)
static Float_t GetCentralityCompat(const AliVEvent &event, const TString &method, Int_t &qual, Bool_t verbose)
Various utilities used in PWGLF/FORWARD.
static Double_t GetEtaFromStrip(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, Double_t zvtx)
static void Output(int in, TString &msg)
static void GetParameter(TObject *o, UShort_t &value)
static void PrintTask(const TObject &o)
TH2D * Get(UShort_t d, Char_t r) const
static TObject * MakeParameter(const char *name, UShort_t value)
TH1 * Make(UShort_t d, Char_t r)
static Float_t BeamRapidity(Float_t beam, UShort_t z, UShort_t a)
static UShort_t ParseCollisionSystem(const char *sys)
TH1 * GetOutputHist(const TList *d, const char *name) const
static Double_t GetStripR(Char_t ring, UShort_t strip)
static UShort_t CheckForAOD()
static Float_t GetCentrality(const AliVEvent &event, const TString &method, Int_t &qual, Bool_t verbose=false)
void Init(const TAxis &etaAxis)
static ULong_t AliROOTBranch()
static void MakeLogScale(Int_t nBins, Int_t minOrder, Int_t maxOrder, TArrayD &bins)
static void PrintField(const char *name, const char *value,...)
TList * DefineOutputList(TList *d) const
void Delete(Option_t *opt="")
static Float_t CenterOfMassEnergy(Float_t beam, UShort_t z1, UShort_t a1, Short_t z2=-1, Short_t a2=-1)
static Float_t CenterOfMassRapidity(UShort_t z1, UShort_t a1, Short_t z2=-1, Short_t a2=-1)
static const char * CollisionSystemString(UShort_t sys)
static Bool_t CheckForTask(const char *clsOrName, Bool_t cls=true)
DebugGuard(Int_t lvl, Int_t msgLvl, const char *format,...)
static ULong_t AliROOTRevision()
static Float_t GetCentralityMult(const AliVEvent &event, const TString &method, Int_t &qual, Bool_t verbose=false)
static void RebinEta(TH2D *hist, const TAxis &etaAxis)
TList * GetOutputList(const TList *d) const