16 #include "AliAODEvent.h" 17 #include "AliAODMCHeader.h" 18 #include "AliAODMCParticle.h" 59 Double_t limits[] = { 3.4, 3.0, 2.5, 2.4, 2.0, 1.5, 1.4, 1.0, 0.5, 0. };
61 while ((*limit) > 0.1) {
62 AddBin(-(*limit), +(*limit));
83 while ((bin = static_cast<Bin*>(next()))) {
109 if (!aodForward)
return false;
113 if (!aodCentral)
return false;
124 TH1D* dndetaForward = forward.ProjectionX(
"dndetaForward",1,
125 forward.GetNbinsY(),
"");
126 TH1D* dndetaCentral = central.ProjectionX(
"dndetaCentral",1,
127 central.GetNbinsY(),
"");
128 TH1D* dndetaMC = (primHist ?
129 primHist->ProjectionX(
"dndetaMC",1,
130 primHist->GetNbinsY(),
"") :
135 TH1D* normForward = forward.ProjectionX(
"dndetaForwardNorm",0,0,
"");
136 TH1D* normCentral = central.ProjectionX(
"dndetaCentralNorm",0,0,
"");
153 if (dndetaForward)
delete dndetaForward;
154 if (dndetaCentral)
delete dndetaCentral;
155 if (dndetaMC)
delete dndetaMC;
176 while ((bin = static_cast<Bin*>(next()))) {
237 out->SetName(GetName());
241 fHist =
new TH1D(
"mult", GetTitle(), max, -0.5, max-.5);
242 fHistMC =
new TH1D(
"multTruth", GetTitle(), max, -0.5, max-.5);
244 "VtxZ vs dataAcceptance/etaRange;" 245 "z-vtz;dataAcceptance/etaRange",
246 20, -10,10, 130,0,1.3);
248 200,-4, 6 , 20,-10,10);
271 Int_t first = dndetaForward->GetXaxis()->FindBin(
fEtaLow);
272 Int_t last = dndetaForward->GetXaxis()->FindBin(
fEtaHigh-.0001);
276 for(
Int_t n= first;n<=last;n++){
277 if(normForward->GetBinContent(n)>0||normCentral->GetBinContent(n)>0){
281 if(normForward->GetBinContent(n)>0||normCentral->GetBinContent(n)>0)
298 for (
Int_t i = first; i <= last; i++){
303 Bool_t aForward = normForward->GetBinContent(i) > 0;
304 Bool_t aCentral = normCentral->GetBinContent(i) > 0;
306 cForward = dndetaForward->GetBinContent(i);
307 e2Forward = TMath::Power(dndetaForward->GetBinError(i),2);
308 tForward += cForward;
311 cCentral = dndetaCentral->GetBinContent(i);
312 e2Central = TMath::Power(dndetaCentral->GetBinError(i),2);
313 tCentral += cCentral;
317 if (aCentral && aForward) {
318 cc = 0.5 * (cForward + cCentral);
319 ee2 = 0.5 * (e2Forward + e2Central);
329 cPrimary += (mc ? mc->GetBinContent(i) : 0);
330 e2Primary += (mc ? TMath::Power(mc->GetBinError(i),2) : 0);
336 if (tCentral < 1e-4) {
337 Printf(
"Total forward: %f total central: %f -> Argh!",
348 for(
Int_t i = first;i<=last;i++){
349 if(normForward->GetBinContent(i)>0&&normCentral->GetBinContent(i)<1)
351 if(normForward->GetBinContent(i)>0&&normCentral->GetBinContent(i)>0)
353 if(normCentral->GetBinContent(i)>0&&normForward->GetBinContent(i)<1)
364 total= fmd + spd + overlap;
368 sysErrorSquared= (fmd*TMath::Power(fmdSysError,2)+
369 spd*TMath::Power(spdSysError,2)+
370 0.5*overlap*TMath::Power(fmdSysError,2)+
371 0.5*overlap*TMath::Power(spdSysError,2))/total;
375 statErr = TMath::Sqrt(e2);
376 sysErr = TMath::Sqrt(sysErrorSquared);
377 mcMult = mc ? cPrimary : -1;
378 mcErr = mc ? TMath::Sqrt(e2Primary) : -1;
403 if (!selectedTrigger)
return;
404 if (ipZ < minIPz || ipZ > maxIPz)
return;
406 Double_t mcMult, mcErr, statErr, sysErr;
427 TString sLow(TString::Format(
"%+03d",
int(10*etaLow)));
428 TString sHigh(TString::Format(
"%+03d",
int(10*etaHigh)));
429 sLow.ReplaceAll(
"+",
"plus");
430 sLow.ReplaceAll(
"-",
"minus");
431 sHigh.ReplaceAll(
"+",
"plus");
432 sHigh.ReplaceAll(
"-",
"minus");
434 tmp = TString::Format(
"%s_%s", sLow.Data(), sHigh.Data());
virtual Bool_t CheckEvent(const AliAODForwardMult &forward)
virtual void Process(TH1D *dndetaForward, TH1D *dndetaCentral, TH1D *normForward, TH1D *normCentral, TH1D *mc, Double_t ipZ, Bool_t pileup, Bool_t selectedTrigger, Bool_t isMCClass, Bool_t isESDClass, const AliAODEvent &aodevent)
virtual Bool_t IsMCClass(AliAODForwardMult *m) const
Base task for multiplicity distribution tasks.
virtual Bool_t Event(AliAODEvent &aod)
static Bool_t IsTriggerBits(UInt_t bits, UInt_t trg)
virtual void CreateOutputObjects(TList *cont, Int_t max)
virtual Bool_t IsESDClass(AliAODForwardMult *m) const
static const Char_t * FormBinName(Double_t etaLow, Double_t etaHigh)
virtual void DefaultBins()
const TH2D & GetHistogram() const
void AddBin(Double_t etaLow, Double_t etaHigh)
virtual Double_t CalcMult(TH1D *dndetaForward, TH1D *dndetaCentral, TH1D *normForward, TH1D *normCentral, TH1D *mc, Double_t ipZ, Double_t &statErr, Double_t &sysErr, Double_t &mcMult, Double_t &mcErr)
virtual void Process(TH1D *dndetaForward, TH1D *dndetaCentral, TH1D *normForward, TH1D *normCentral, TH1D *mc, Double_t ipZ, Bool_t pileup, Bool_t selectedTrigger, Bool_t isMCClass, Bool_t isESDClass, const AliAODEvent &aodevent, Double_t minIPz, Double_t maxIPz)
AliAODForwardMult * GetForward(const AliAODEvent &aod, Bool_t mc=false, Bool_t verb=true)
TH2D * GetPrimary(const AliAODEvent &aod)
AliAODCentralMult * GetCentral(const AliAODEvent &aod, Bool_t mc=false, Bool_t verb=true)
virtual Bool_t CheckEvent(const AliAODForwardMult &fwd)
const TH2D & GetHistogram() const