22 #include "AliAODHandler.h" 23 #include "AliAnalysisManager.h" 24 #include "AliESDEvent.h" 25 #include "AliMultiplicity.h" 31 #include <TObjArray.h> 45 fClusterPerTracklet(0),
55 DGUARD(fDebug, 3,
"Named CTOR of AliCentralMultiplicityTask: %s", name);
57 "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.," 58 "SPDVertex.,PrimaryVertex.";
79 DGUARD(fDebug, 3,
"Default CTOR of AliCentralMultiplicityTask");
90 DGUARD(fDebug,1,
"Create user output in AliCentralMultiplicityTask");
97 ah->AddBranch(
"AliAODCentralMult", &obj);
114 TH2D* hCoverage =
new TH2D(
"coverage",
"#eta coverage per v_{z}",
115 eta.GetNbins(), eta.GetXmin(), eta.GetXmax(),
116 vertex.GetNbins(),vertex.GetXmin(),
118 hCoverage->SetDirectory(0);
119 hCoverage->SetXTitle(
"#eta");
120 hCoverage->SetYTitle(
"v_{z} [cm]");
121 hCoverage->SetZTitle(
"n_{bins}");
127 fVtxList->SetName(
"centMultVtxBins");
131 for (
Int_t v = 1; v <= nVz; v++) {
133 vertex.GetBinUpEdge(v));
137 fList->Add(hCoverage);
144 "Total number of cluster vs number of tracklets",
145 bins.GetSize()-1, bins.GetArray(),
146 bins.GetSize()-1, bins.GetArray());
156 "N_{free cluster}/N_{tracklet} vs. #eta",
157 nEta,-lEta,lEta, 101, -.05, 10.05);
206 DGUARD(fDebug,1,
"Process event in AliCentralMultiplicityTask");
215 ivz, ip, cent, nClusters);
230 const AliMultiplicity* spdmult = esd.GetMultiplicity();
235 if (!bin)
return false;
248 const AliMultiplicity* spdmult)
const 250 DGUARD(fDebug,1,
"Process the ESD in AliCentralMultiplicityTask");
255 for(
Int_t j = 0; j< spdmult->GetNumberOfTracklets();j++) {
258 aodHist.Fill(eta,spdmult->GetPhi(j));
262 for(
Int_t j = 0; j< spdmult->GetNumberOfSingleClusters();j++) {
263 Double_t eta = -TMath::Log(TMath::Tan(spdmult->GetThetaSingle(j)/2.));
265 aodHist.Fill(eta, spdmult->GetPhiSingle(j));
287 DGUARD(fDebug,1,
"Process merged output in AliCentralMultiplicityTask");
289 Double_t nTr = 0, nTrVtx = 0, nAcc = 0;
292 "\t# events w/trigger: %f\n" 293 "\t# events w/trigger+vertex: %f\n" 294 "\t# events accepted by cuts: %f",
309 TH1I* hEventsTrVtx = 0;
310 TH1I* hEventsAcc = 0;
317 AliError(Form(
"Didn't get histograms from event selector " 318 "(hEventsTr=%p,hEventsTrVtx=%p,hEventsAcc=%p,hTriggers=%p)",
319 hEventsTr, hEventsTrVtx, hEventsAcc, hTriggers));
323 nTr = hEventsTr->Integral();
324 nTrVtx = hEventsTrVtx->Integral();
325 nAcc = hEventsAcc->Integral();
327 TH2D* hData =
static_cast<TH2D*
>(input->FindObject(
"d2Ndetadphi"));
329 AliError(Form(
"Couldn't get our summed histogram from output " 330 "list %s (d2Ndetadphi=%p)", input->GetName(), hData));
335 Int_t nY = hData->GetNbinsY();
336 TH1D*
dNdeta = hData->ProjectionX(
"dNdeta", 1, nY,
"e");
337 TH1D* dNdeta_ = hData->ProjectionX(
"dNdeta_", 1, nY,
"e");
338 TH1D* norm = hData->ProjectionX(
"norm", 0, 0,
"");
339 TH1D* phi = hData->ProjectionX(
"phi", nY+1, nY+1,
"");
340 dNdeta->SetTitle(
"dN_{ch}/d#eta in the forward regions");
341 dNdeta->SetYTitle(
"#frac{1}{N}#frac{dN_{ch}}{d#eta}");
342 dNdeta->SetMarkerColor(kRed+1);
343 dNdeta->SetMarkerStyle(20);
344 dNdeta->SetDirectory(0);
346 dNdeta_->SetTitle(
"dN_{ch}/d#eta in the forward regions");
347 dNdeta_->SetYTitle(
"#frac{1}{N}#frac{dN_{ch}}{d#eta}");
348 dNdeta_->SetMarkerColor(kMagenta+1);
349 dNdeta_->SetMarkerStyle(21);
350 dNdeta_->SetDirectory(0);
352 norm->SetTitle(
"Normalization to #eta coverage");
353 norm->SetYTitle(
"#eta coverage");
354 norm->SetLineColor(kBlue+1);
355 norm->SetMarkerColor(kBlue+1);
356 norm->SetMarkerStyle(21);
357 norm->SetFillColor(kBlue+1);
358 norm->SetFillStyle(3005);
359 norm->SetDirectory(0);
361 phi->SetTitle(
"Normalization to #phi acceptance");
362 phi->SetYTitle(
"#phi acceptance");
363 phi->SetLineColor(kGreen+1);
364 phi->SetMarkerColor(kGreen+1);
365 phi->SetMarkerStyle(20);
366 phi->SetFillColor(kGreen+1);
367 phi->SetFillStyle(3004);
369 phi->SetDirectory(0);
374 dNdeta->Scale(vtxEff,
"width");
376 dNdeta_->Divide(norm);
377 dNdeta_->SetStats(0);
378 dNdeta_->Scale(vtxEff,
"width");
381 output->Add(dNdeta_);
388 #define PF(N,V,...) \ 389 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__) 390 #define PFB(N,FLAG) \ 392 AliForwardUtil::PrintName(N); \ 393 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \ 395 #define PFV(N,VALUE) \ 397 AliForwardUtil::PrintName(N); \ 398 std::cout << (VALUE) << std::endl; } while(false) 411 gROOT->IncreaseDirLevel();
422 std::cout <<
" Eta ranges:\n" 423 <<
" Vertex | Eta bins\n" 425 <<
" ----------------+-----------" << std::endl;
426 for (
Int_t v = 1; v <= vaxis.GetNbins(); v++) {
433 gROOT->DecreaseDirLevel();
467 if (&o ==
this)
return *
this;
484 return Form(
"%c%03d_%c%03d",
518 fSec =
static_cast<TH2*
>(sec->Clone());
519 fAcc =
static_cast<TH1*
>(acc->Clone());
520 fSec->SetDirectory(0);
521 fAcc->SetDirectory(0);
523 TH1D* proj =
fSec->ProjectionX(
"secondary");
524 proj->SetDirectory(0);
525 proj->Scale(1. /
fSec->GetNbinsY());
529 for (
Int_t e = 1; e <= proj->GetNbinsX(); e++) {
538 for (
Int_t e = proj->GetNbinsX(); e >= 1; e--) {
547 coverage->SetBinContent(nn,
fId,1);
557 proj->SetTitle(Form(
"Projection of secondary correction " 559 proj->SetYTitle(
"#LT 2^{nd} correction#GT");
560 proj->SetMarkerStyle(20);
561 proj->SetMarkerColor(kBlue+1);
565 TH2D* obg =
static_cast<TH2D*
>(
fSec->Clone(
"secondaryMapFiducial"));
566 obg->SetTitle(Form(
"%s - fiducial volume", obg->GetTitle()));
567 obg->GetYaxis()->SetTitle(
"#varphi");
568 obg->SetDirectory(0);
571 TH1D* after =
static_cast<TH1D*
>(proj->Clone(
"secondaryFiducial"));
572 after->SetDirectory(0);
573 after->GetYaxis()->SetTitle(
"#LT 2^{nd} correction#GT");
574 after->SetTitle(Form(
"%s - fiducial volume", after->GetTitle()));
575 after->SetMarkerColor(kRed+1);
583 fHits->SetDirectory(0);
584 fHits->SetTitle(Form(
"d^{2}N/d#eta d#phi for %+5.1f<v_{z}<%+5.1f",
586 fHits->GetYaxis()->SetTitle(
"#varphi");
587 fHits->GetZaxis()->SetTitle(
"d^{2}N/d#eta d#varphi");
588 fHits->SetMarkerColor(kBlack);
589 fHits->SetMarkerStyle(1);
593 TH1D* accClone =
static_cast<TH1D*
>(
fAcc->Clone(
"acceptance"));
594 accClone->SetTitle(Form(
"Acceptance for %+5.1f<v_{z}<%+5.1f",
596 accClone->SetDirectory(0);
601 after->SetBinContent(e, 0);
602 after->SetBinError(e, 0);
603 for(
Int_t nn =1; nn <=obg->GetNbinsY();nn++)
604 obg->SetBinContent(e,nn,0);
607 for (
Int_t e =
fEtaMax+1; e <= proj->GetNbinsX(); e++) {
608 after->SetBinContent(e, 0);
609 after->SetBinError(e, 0);
610 for(
Int_t nn =1; nn <=obg->GetNbinsY();nn++)
611 obg->SetBinContent(e,nn,0);
621 if (useSecondary &&
fSec) aodHist.Divide(
fSec);
623 Int_t nY = aodHist.GetNbinsY();
624 for(
Int_t ix = 1; ix <= aodHist.GetNbinsX(); ix++) {
626 if (ix < fEtaMin || ix >
fEtaMax) fiducial =
false;
629 Double_t eta = aodHist.GetXaxis()->GetBinCenter(ix);
630 Int_t iax =
fAcc->GetXaxis()->FindBin(eta);
636 for(
Int_t iy = 1; iy <= nY; iy++) {
639 aodHist.SetBinContent(ix, iy, 0);
640 aodHist.SetBinError(ix, iy, 0);
644 Float_t aodValue = aodHist.GetBinContent(ix,iy);
645 Float_t aodErr = aodHist.GetBinError(ix,iy);
648 if (aodValue < 0.000001) {
649 aodHist.SetBinContent(ix,iy, 0);
650 aodHist.SetBinError(ix,iy, 0);
653 if (!useAcceptance)
continue;
657 if (accTmp < 0.000001) accTmp = 1;
658 Float_t aodNew = aodValue / accTmp ;
659 aodHist.SetBinContent(ix,iy, aodNew);
660 aodHist.SetBinError(ix,iy,aodErr);
668 aodHist.SetBinContent(ix,0, 1.);
669 aodHist.SetBinContent(ix,nY+1, accCor);
680 << std::setw(2) <<
fId <<
" " 681 << std::setw(5) <<
fMinIpZ <<
"-" 682 << std::setw(5) <<
fMaxIpZ <<
" | " 683 << std::setw(3) <<
fEtaMin <<
"-" 684 << std::setw(3) <<
fEtaMax << std::endl;
const AliCentralCorrAcceptance * GetAcceptance() const
TH2D * fClusterPerTracklet
virtual void Print(Option_t *option="") const
virtual void ProcessESD(TH2D &hist, const AliMultiplicity *spdmult) const
virtual Bool_t IsInit() const
void SetupForData(TList *l, TH2 *coverage, Bool_t store=true)
virtual void Print(Option_t *option="") const
AliFMDEventInspector fInspector
virtual void MarkEventForStore() const
const char * GetName() const
void Correct(TH2D &aodHist, Bool_t useSecondary, Bool_t useAcceptance, Bool_t sum=true) const
virtual Bool_t Event(AliESDEvent &esd)
UInt_t Process(const AliESDEvent *event, UInt_t &triggers, Bool_t &lowFlux, UShort_t &ivz, TVector3 &ip, Double_t ¢, UShort_t &nClusters)
virtual Bool_t Finalize()
Various utilities used in PWGLF/FORWARD.
VtxBin(Int_t iVz=0, Double_t minIpZ=0, Double_t maxIpZ=0)
void Init(const TAxis &etaAxis)
TH1D * fNTracklet
Number of clusters.
TH2D * GetCorrection(Double_t v) const
Bool_t MakeSimpledNdeta(const TList *input, TList *output, Double_t &nTr, Double_t &nTrVtx, Double_t &nAcc)
#define DGUARD(L, N, F,...)
AliCentralMultiplicityTask()
static TObject * MakeParameter(const char *name, UShort_t value)
const AliCentralCorrSecondaryMap * GetSecondaryMap() const
const TH2D & GetHistogram() const
TH1D * GetCorrection(Double_t v) const
virtual Bool_t PreData(const TAxis &v, const TAxis &e)
virtual void CreateBranches(AliAODHandler *ah)
VtxBin & operator=(const VtxBin &o)
static void MakeLogScale(Int_t nBins, Int_t minOrder, Int_t maxOrder, TArrayD &bins)
const TAxis & GetVertexAxis() const
AliAODCentralMult fAODCentral
void Clear(Option_t *opt)
UInt_t fNeededCorrections
TObjArray * fVtxList
number of tracklets
Bool_t fStore
Array of vertex bins.
AliFMDEventInspector & GetEventInspector()
static AliCentralCorrectionManager & Instance()
void Print(Option_t *option="") const
virtual Bool_t PreEvent()