]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FORWARD/analysis2/AliForwarddNdetaTask.cxx
mods in AliReconstruction and AliReconstructor for the upgrade (Annalisa)
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliForwarddNdetaTask.cxx
CommitLineData
b2e7f2d6 1//====================================================================
2#include "AliForwarddNdetaTask.h"
3#include <TMath.h>
4#include <TH2D.h>
5#include <TH1D.h>
6#include <THStack.h>
7#include <TList.h>
8#include <AliAnalysisManager.h>
9#include <AliAODEvent.h>
10#include <AliAODHandler.h>
11#include <AliAODInputHandler.h>
12#include "AliForwardUtil.h"
01caf91f 13#include "AliAODForwardMult.h"
b2e7f2d6 14
15//____________________________________________________________________
16AliForwarddNdetaTask::AliForwarddNdetaTask()
e1f47419 17 : AliBasedNdetaTask()
fb3430ac 18{
19 //
20 // Constructor
21 //
22}
b2e7f2d6 23
24//____________________________________________________________________
25AliForwarddNdetaTask::AliForwarddNdetaTask(const char* /* name */)
e1f47419 26 : AliBasedNdetaTask("Forward")
b2e7f2d6 27{
fb3430ac 28 //
29 // Constructor
30 //
31 // Paramters
32 // name Name of task
b2e7f2d6 33}
34
35//____________________________________________________________________
36AliForwarddNdetaTask::AliForwarddNdetaTask(const AliForwarddNdetaTask& o)
e1f47419 37 : AliBasedNdetaTask(o)
fb3430ac 38{
39 //
40 // Copy constructor
41 //
42}
b2e7f2d6 43
e1f47419 44//____________________________________________________________________
45AliBasedNdetaTask::CentralityBin*
46AliForwarddNdetaTask::MakeCentralityBin(const char* name, Short_t l, Short_t h)
47 const
48{
49 //
50 // Make a new centrality bin
51 //
52 // Parameters:
53 // name Histogram names
54 // l Lower cut
55 // h Upper cut
56 //
57 // Return:
58 // Newly allocated object (of our type)
59 //
60 return new AliForwarddNdetaTask::CentralityBin(name, l, h);
61}
62
63//____________________________________________________________________
64void
65AliForwarddNdetaTask::UserExec(Option_t* option)
66{
67 //
68 // Called at each event
69 //
70 // This is called once in the master
71 //
72 // Parameters:
73 // option Not used
74 //
75 AliBasedNdetaTask::UserExec(option);
76
77 AliAODEvent* aod = dynamic_cast<AliAODEvent*>(InputEvent());
78 if (!aod) {
79 AliError("Cannot get the AOD event");
80 return;
81 }
82
83 TObject* obj = aod->FindListObject("Forward");
84 if (!obj) {
85 AliWarning("No forward object found");
86 return;
87 }
88 AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
89
90 TObject* oPrimary = aod->FindListObject("primary");
91 if (!oPrimary) return;
92
93 TH2D* primary = static_cast<TH2D*>(oPrimary);
94
95 // Loop over centrality bins
96 TIter next(fListOfCentralities);
97 CentralityBin* bin = 0;
98 while ((bin = static_cast<CentralityBin*>(next())))
99 bin->ProcessPrimary(forward, fTriggerMask, fVtxMin, fVtxMax, primary);
100}
101
102
b2e7f2d6 103//____________________________________________________________________
104TH2D*
fb3430ac 105AliForwarddNdetaTask::GetHistogram(const AliAODEvent* aod, Bool_t mc)
b2e7f2d6 106{
fb3430ac 107 //
108 // Retrieve the histogram
109 //
110 // Parameters:
111 // aod AOD event
112 // mc Whether to get the MC histogram or not
113 //
114 // Return:
115 // Retrieved histogram or null
116 //
fe52e455 117 TObject* obj = 0;
118 if (mc) obj = aod->FindListObject("ForwardMC");
119 else obj = aod->FindListObject("Forward");
b2e7f2d6 120
121 // We should have a forward object at least
fe52e455 122 if (!obj) {
123 if (!mc) AliWarning("No Forward object found AOD");
124 return 0;
125 }
126 AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
e1f47419 127 return &(forward->GetHistogram());
128}
fe52e455 129
e1f47419 130//========================================================================
131void
132AliForwarddNdetaTask::CentralityBin::ProcessPrimary(const AliAODForwardMult*
133 forward,
134 Int_t triggerMask,
135 Double_t vzMin,
136 Double_t vzMax,
137 const TH2D* primary)
138{
139 // Check the centrality class unless this is the 'all' bin
140 if (!IsAllBin()) {
141 Double_t centrality = forward->GetCentrality();
142 if (centrality < fLow || centrality >= fHigh) return;
b2e7f2d6 143 }
e1f47419 144 // Check if we have an event of interest.
145 if (!forward->IsTriggerBits(triggerMask)) return;
e58000b7 146
e1f47419 147 //Check for pileup
148 if (forward->IsTriggerBits(AliAODForwardMult::kPileUp)) return;
fe52e455 149
e1f47419 150 // Check that we have a valid vertex
151 if (!forward->HasIpZ()) return;
152
153 // Check that vertex is within cuts
154 if (!forward->InRange(vzMin, vzMax)) return;
155
156 if (!fSumPrimary) {
157 fSumPrimary = static_cast<TH2D*>(primary->Clone("truth"));
158 fSumPrimary->SetDirectory(0);
159 fSumPrimary->Reset();
160 fSums->Add(fSumPrimary);
b2e7f2d6 161 }
162
e1f47419 163 if (triggerMask == AliAODForwardMult::kInel ||
164 (triggerMask == AliAODForwardMult::kNSD &&
165 forward->IsTriggerBits(AliAODForwardMult::kMCNSD)))
166 fSumPrimary->Add(primary);
b2e7f2d6 167}
168
b2e7f2d6 169//________________________________________________________________________
e1f47419 170void
171AliForwarddNdetaTask::CentralityBin::End(TList* sums,
172 TList* results,
ffca499d 173 UShort_t scheme,
e1f47419 174 const TH1* shapeCorr,
175 Double_t trigEff,
176 Bool_t symmetrice,
177 Int_t rebin,
178 Bool_t corrEmpty,
179 Bool_t cutEdges,
180 Double_t vzMin,
181 Double_t vzMax,
ffca499d 182 Int_t triggerMask,
183 Int_t color,
184 Int_t marker)
b2e7f2d6 185{
ffca499d 186 AliBasedNdetaTask::CentralityBin::End(sums, results, scheme,
187 shapeCorr, trigEff,
e1f47419 188 symmetrice, rebin, corrEmpty, cutEdges,
ffca499d 189 vzMin, vzMax, triggerMask,
190 color, marker);
b2e7f2d6 191
fe52e455 192 fSumPrimary = static_cast<TH2D*>(fSums->FindObject("truth"));
b2e7f2d6 193
e1f47419 194 if (!fSumPrimary) return;
ffca499d 195 Int_t n = (triggerMask == AliAODForwardMult::kNSD ?
196 Int_t(fTriggers->GetBinContent(AliAODForwardMult::kBinMCNSD)) :
197 Int_t(fTriggers->GetBinContent(AliAODForwardMult::kBinAll)));
7646e35f 198
e58000b7 199
e1f47419 200 TH1D* dndetaTruth = fSumPrimary->ProjectionX("dndetaTruth",1,
201 fSumPrimary->GetNbinsY(),"e");
202 dndetaTruth->Scale(1./n, "width");
e58000b7 203
ffca499d 204 SetHistogramAttributes(dndetaTruth, color-2, marker+4, "Monte-Carlo truth");
e58000b7 205
e1f47419 206 fOutput->Add(dndetaTruth);
207 fOutput->Add(Rebin(dndetaTruth, rebin, cutEdges));
b2e7f2d6 208}
209
210//________________________________________________________________________
fe52e455 211//
212// EOF
213//