38 AliInfo(Form(
"Scaled merging for list %s is %sactivated.", hlist->GetName(),(
fUseScaling) ?
"" :
"not "));
40 return TList::Merge(hlist);
44 TH1* xsection =
static_cast<TH1*
>(FindObject(
"fHistXsection"));
45 TH1* ntrials =
static_cast<TH1*
>(FindObject(
"fHistTrials"));
48 if(!(xsection && ntrials))
49 AliFatal(
"Scaled merging is active but AliEmcalList does not contain fHistXsection or fHistTrials. Do not activate scaling for those lists or include these histograms.");
58 AliInfo(Form(
"===== LAST LEVEL OF MERGING ====="));
65 TIter listIterator(hlist);
66 while (
AliEmcalList* tmpList = static_cast<AliEmcalList*>(listIterator()))
68 xsection =
static_cast<TH1*
>(tmpList->FindObject(
"fHistXsection"));
69 ntrials =
static_cast<TH1*
>(tmpList->FindObject(
"fHistTrials"));
75 AliInfo(
"Merge() done.");
78 return hlist->GetEntries() + 1;
85 TIter listIterator(hlist);
86 while (TObject* listObject = listIterator())
89 TCollection* sublist =
dynamic_cast<TCollection*
>(listObject);
97 TH1* histogram =
dynamic_cast<TH1*
>(listObject);
102 TString histogram_class (histogram->ClassName());
103 if (!strcmp(histogram->GetName(),
"fHistXsection") || !strcmp(histogram->GetName(),
"fHistTrials"))
105 AliInfo(Form(
"Histogram %s will not be scaled, because a scaling histogram", histogram->GetName()));
108 if (histogram_class.Contains(
"TProfile"))
110 AliInfo(Form(
"Histogram %s will not be scaled, because it is a TProfile", histogram->GetName()));
115 histogram->Scale(scalingFactor);
116 AliInfo(Form(
"Histogram %s (%s) was scaled...", histogram->GetName(), histogram_class.Data()));
128 AliInfo(
"List already scaled or scaling invalid. Scaling factor = 1.");
132 Double_t valNTRIALS = ntrials->GetBinContent(binNumber);
133 Double_t valXSEC = xsection->GetBinContent(binNumber);
134 Double_t scalingFactor = 0;
136 scalingFactor = valXSEC/valNTRIALS;
138 AliInfo(Form(
"## Bin %i: trials=%f, xsec=%f -> scaling=%f", binNumber, valNTRIALS, valXSEC, scalingFactor));
139 return scalingFactor;
148 TH1* xsection =
static_cast<TH1*
>(FindObject(
"fHistXsection"));
151 TIter listIterator(collection);
152 while (
AliEmcalList* tmpList = static_cast<AliEmcalList*>(listIterator()))
155 xsection =
static_cast<TH1*
>(tmpList->FindObject(
"fHistXsection"));
168 AliInfo(Form(
"%s: nbinsX=%i", hist->GetName(), hist->GetNbinsX()));
171 for(Int_t i=1; i<=hist->GetNbinsX(); i++)
173 AliInfo(Form(
"%s: bin=%i, val=%f", hist->GetName(), i, hist->GetBinContent(i)));
174 if(hist->GetBinContent(i))
186 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.
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC