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 TString histogram_name (listObject->GetName());
104 if (histogram_name.Contains(
"fHistXsection") || histogram_name.Contains(
"fHistTrials") || histogram_name.Contains(
"fHistEvents"))
106 AliInfo(Form(
"Histogram %s will not be scaled, because a scaling histogram", listObject->GetName()));
109 if (histogram_class.Contains(
"TProfile"))
111 AliInfo(Form(
"Histogram %s will not be scaled, because it is a TProfile", listObject->GetName()));
115 TH1 *histogram =
dynamic_cast<TH1 *
>(listObject);
119 histogram->Scale(scalingFactor);
122 THnBase *histogramND =
dynamic_cast<THnBase *
>(listObject);
123 histogramND->Sumw2();
124 histogramND->Scale(scalingFactor);
126 AliInfo(Form(
"Histogram %s (%s) was scaled...", listObject->GetName(), histogram_class.Data()));
138 AliInfo(
"List already scaled or scaling invalid. Scaling factor = 1.");
142 Double_t valNTRIALS = ntrials->GetBinContent(binNumber);
143 Double_t valXSEC = xsection->GetBinContent(binNumber);
146 scalingFactor = valXSEC/valNTRIALS;
148 AliInfo(Form(
"## Bin %i: trials=%f, xsec=%f -> scaling=%f", binNumber, valNTRIALS, valXSEC, scalingFactor));
149 return scalingFactor;
161 TIter listIterator(collection);
162 while (
AliEmcalList* tmpList = static_cast<AliEmcalList*>(listIterator()))
165 xsection =
static_cast<TH1*
>(tmpList->FindObject(
"fHistXsection"));
178 AliInfo(Form(
"%s: nbinsX=%i", hist->GetName(), hist->GetNbinsX()));
181 for(
Int_t i=1; i<=hist->GetNbinsX(); i++)
183 AliInfo(Form(
"%s: bin=%i, val=%f", hist->GetName(), i, hist->GetBinContent(i)));
184 if(hist->GetBinContent(i))
196 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.