39 AliInfo(Form(
"Scaled merging for list %s is %sactivated.", hlist->GetName(),(
fUseScaling) ?
"" :
"not "));
49 if(!(xsection && ntrials))
50 AliFatal(
"Scaled merging is active but AliEmcalList does not contain fHistXsection or fHistTrials. Do not activate scaling for those lists or include these histograms.");
59 AliInfo(Form(
"===== LAST LEVEL OF MERGING ====="));
66 TIter listIterator(hlist);
67 while (
AliEmcalList* tmpList = static_cast<AliEmcalList*>(listIterator()))
69 xsection =
static_cast<TH1*
>(tmpList->FindObject(
"fHistXsection"));
70 ntrials =
static_cast<TH1*
>(tmpList->FindObject(
"fHistTrials"));
76 AliInfo(
"Merge() done.");
79 return hlist->GetEntries() + 1;
86 TIter listIterator(hlist);
87 while (
TObject* listObject = listIterator())
98 if (!(listObject->InheritsFrom(TH1::Class()) || listObject->InheritsFrom(THnBase::Class())))
102 TString histogram_class (listObject->ClassName());
103 if (!strcmp(listObject->GetName(),
"fHistXsection") || !strcmp(listObject->GetName(),
"fHistTrials"))
105 AliInfo(Form(
"Histogram %s will not be scaled, because a scaling histogram", listObject->GetName()));
108 if (histogram_class.Contains(
"TProfile"))
110 AliInfo(Form(
"Histogram %s will not be scaled, because it is a TProfile", listObject->GetName()));
114 TH1 *histogram =
dynamic_cast<TH1 *
>(listObject);
118 histogram->Scale(scalingFactor);
121 THnBase *histogramND =
dynamic_cast<THnBase *
>(listObject);
122 histogramND->Sumw2();
123 histogramND->Scale(scalingFactor);
125 AliInfo(Form(
"Histogram %s (%s) was scaled...", listObject->GetName(), histogram_class.Data()));
137 AliInfo(
"List already scaled or scaling invalid. Scaling factor = 1.");
141 Double_t valNTRIALS = ntrials->GetBinContent(binNumber);
142 Double_t valXSEC = xsection->GetBinContent(binNumber);
145 scalingFactor = valXSEC/valNTRIALS;
147 AliInfo(Form(
"## Bin %i: trials=%f, xsec=%f -> scaling=%f", binNumber, valNTRIALS, valXSEC, scalingFactor));
148 return scalingFactor;
160 TIter listIterator(collection);
161 while (
AliEmcalList* tmpList = static_cast<AliEmcalList*>(listIterator()))
164 xsection =
static_cast<TH1*
>(tmpList->FindObject(
"fHistXsection"));
177 AliInfo(Form(
"%s: nbinsX=%i", hist->GetName(), hist->GetNbinsX()));
180 for(
Int_t i=1; i<=hist->GetNbinsX(); i++)
182 AliInfo(Form(
"%s: bin=%i, val=%f", hist->GetName(), i, hist->GetBinContent(i)));
183 if(hist->GetBinContent(i))
195 AliError(
"No bin filled in scaling histogram.");
Bool_t fUseScaling
if true, scaling will be done. if false AliEmcalList simplifies to TList
Int_t GetFilledBinNumber(TH1 *hist)
void ScaleAllHistograms(TCollection *hlist, Double_t scalingFactor)
Function that does the scaling of all histograms in hlist recursively.
Bool_t IsLastMergeLevel(TCollection *collection)
Double_t GetScalingFactor(TH1 *xsection, TH1 *ntrials)
Helper function scaling factor.
Long64_t Merge(TCollection *hlist)
Overridden Merge function.
TH1 * Merge(const TH1 *cen, const TH1 *fwd, Double_t &xlow, Double_t &xhigh)
TObject * FindObject(int bin, const char *nameH, const TList *lst, Bool_t normPerEvent=kTRUE)
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC