]>
Commit | Line | Data |
---|---|---|
b2a297fa | 1 | #ifndef ALIDIELECTRONVARMANAGER_H |
2 | #define ALIDIELECTRONVARMANAGER_H | |
3 | /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | //############################################################# | |
7 | //# # | |
8 | //# Class AliDielectronVarManager # | |
9 | //# Class for management of available variables # | |
10 | //# # | |
11 | //# Authors: # | |
12 | //# Anton Andronic, GSI / A.Andronic@gsi.de # | |
13 | //# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de # | |
14 | //# Julian Book, Uni Ffm / Julian.Book@cern.ch # | |
572b0139 | 15 | //# Markus Köhler, GSI / M.Koehler@gsi.de # |
6551594b | 16 | //# Frederick Kramer, Uni Ffm / Frederick.Kramer@cern.ch # |
b2a297fa | 17 | //# Magnus Mager, CERN / Magnus.Mager@cern.ch # |
18 | //# WooJin J. Park, GSI / W.J.Park@gsi.de # | |
19 | //# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch # | |
20 | //# # | |
21 | //############################################################# | |
22 | ||
23 | ||
24 | #include <TNamed.h> | |
25 | ||
26 | #include <AliVEvent.h> | |
27 | #include <AliESDEvent.h> | |
6551594b | 28 | #include <AliAODEvent.h> |
29 | #include <AliMCEvent.h> | |
30 | #include <AliVVertex.h> | |
31 | #include <AliESDVertex.h> | |
b2a297fa | 32 | |
33 | #include <AliVParticle.h> | |
b2a297fa | 34 | #include <AliESDtrack.h> |
35 | #include <AliAODTrack.h> | |
572b0139 | 36 | #include <AliAODPid.h> |
b2a297fa | 37 | #include <AliKFParticle.h> |
572b0139 | 38 | #include <AliKFVertex.h> |
b2a297fa | 39 | #include <AliMCParticle.h> |
40 | #include <AliAODMCParticle.h> | |
41 | #include <AliVTrack.h> // ? | |
42 | ||
6551594b | 43 | #include <AliExternalTrackParam.h> |
44 | #include <AliESDpid.h> | |
8df8e382 | 45 | #include <AliPID.h> |
6551594b | 46 | |
b2a297fa | 47 | #include "AliDielectronPair.h" |
8df8e382 | 48 | #include "AliDielectronMC.h" |
48609e3d | 49 | #include "AliDielectronPID.h" |
b2a297fa | 50 | |
51 | class AliVEvent; | |
52 | ||
53 | //________________________________________________________________ | |
54 | class AliDielectronVarManager : public TNamed { | |
55 | ||
56 | public: | |
8df8e382 | 57 | |
b2a297fa | 58 | // Particle specific variables |
59 | enum ValueTypes { | |
60 | kPx = 0, // px | |
61 | kPy, // py | |
62 | kPz, // pz | |
63 | kPt, // transverse momentum | |
64 | kP, // momentum | |
65 | kXv, // vertex position in x | |
66 | kYv, // vertex position in y | |
67 | kZv, // vertex position in z | |
68 | kOneOverPt, // 1/pt | |
69 | kPhi, // phi angle | |
70 | kTheta, // theta angle | |
71 | kEta, // pseudo-rapidity | |
72 | kY, // rapidity | |
73 | kE, // energy | |
74 | kM, // mass | |
75 | kCharge, // charge | |
76 | kNclsITS, // number of clusters assigned in the ITS | |
77 | kNclsTPC, // number of clusters assigned in the TPC | |
78 | kNFclsTPC, // number of findable clusters in the TPC | |
79 | kTPCsignalN, // number of points used for dEdx | |
61d106d3 | 80 | kTPCchi2Cl, // chi2/cl in TPC |
81 | kTrackStatus, // track status bits | |
8df8e382 | 82 | |
b2a297fa | 83 | kNclsTRD, // number of clusters assigned in the TRD |
84 | kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter | |
85 | kTRDpidQuality, // number of TRD tracklets used for PID | |
8df8e382 | 86 | kTRDprobEle, // TRD electron pid probability |
87 | kTRDprobPio, // TRD electron pid probability | |
88 | ||
b2a297fa | 89 | kImpactParXY, // Impact parameter in XY plane |
90 | kImpactParZ, // Impact parameter in Z | |
91 | kTrackLength, // Track length | |
92 | kPdgCode, // PDG code | |
8df8e382 | 93 | |
94 | kPdgCodeMother, // PDG code of the mother | |
95 | ||
96 | kNumberOfDaughters, // number of daughters | |
97 | kHaveSameMother, // check that particles have the same mother (MC) | |
98 | kITSsignal, // ITS dE/dx signal | |
99 | kITSsignalSSD1, // SSD1 dE/dx signal | |
100 | kITSsignalSSD2, // SSD2 dE/dx signal | |
101 | kITSsignalSDD1, // SDD1 dE/dx signal | |
102 | kITSsignalSDD2, // SDD2 dE/dx signal | |
3505bfad | 103 | kITSclusterMap, // ITS cluster map |
9143d69f | 104 | kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS |
105 | kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS | |
106 | kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS | |
107 | kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS | |
108 | kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS | |
8df8e382 | 109 | |
b2a297fa | 110 | kPIn, // momentum at inner wall of TPC (if available), used for PID |
111 | kTPCsignal, // TPC dE/dx signal | |
572b0139 | 112 | |
6551594b | 113 | kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC |
572b0139 | 114 | kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC |
115 | kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC | |
116 | kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC | |
117 | kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC | |
118 | ||
8df8e382 | 119 | kTOFnSigmaEle, // number of sigmas to the pion line in the TOF |
572b0139 | 120 | kTOFnSigmaPio, // number of sigmas to the pion line in the TOF |
121 | kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF | |
122 | kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF | |
123 | kTOFnSigmaPro, // number of sigmas to the proton line in the TOF | |
8df8e382 | 124 | |
b2a297fa | 125 | kParticleMax, // |
126 | // TODO: kRNClusters ?? | |
127 | // AliDielectronPair specific variables | |
128 | kChi2NDF = kParticleMax, // Chi^2/NDF | |
129 | kDecayLength, // decay length | |
130 | kR, // distance to the origin | |
131 | kOpeningAngle, // opening angle | |
8df8e382 | 132 | // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector |
133 | kThetaHE, // theta in mother's rest frame in the helicity picture | |
134 | kPhiHE, // phi in mother's rest frame in the helicity picture | |
135 | // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between | |
136 | // the 3-mom vectors of target and projectile beams | |
137 | kThetaCS, // theta in mother's rest frame in Collins-Soper picture | |
138 | kPhiCS, // phi in mother's rest frame in Collins-Soper picture | |
572b0139 | 139 | kLegDist, // distance of the legs |
140 | kLegDistXY, // distance of the legs in XY | |
61d106d3 | 141 | kDeltaEta, // Absolute value of Delta Eta for the legs |
142 | kDeltaPhi, // Absolute value of Delta Phi for the legs | |
b2a297fa | 143 | kMerr, // error of mass calculation |
144 | kDCA, // distance of closest approach TODO: not implemented yet | |
145 | kPairType, // type of the pair, like like sign ++ unlikesign ... | |
146 | kPairMax, // | |
147 | // Event specific variables | |
6551594b | 148 | kXvPrim=kPairMax, // prim vertex |
149 | kYvPrim, // prim vertex | |
150 | kZvPrim, // prim vertex | |
151 | kXRes, // primary vertex x-resolution | |
152 | kYRes, // primary vertex y-resolution | |
153 | kZRes, // primary vertex z-resolution | |
b2a297fa | 154 | kNTrk, // number of tracks (or tracklets) |
6551594b | 155 | kTracks, // ESD tracks |
156 | kNevents, // event counter | |
b2a297fa | 157 | kNMaxValues // |
158 | // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag?? | |
159 | }; | |
160 | ||
161 | ||
162 | AliDielectronVarManager(); | |
163 | AliDielectronVarManager(const char* name, const char* title); | |
164 | virtual ~AliDielectronVarManager(); | |
165 | static void Fill(const TObject* particle, Double_t * const values); | |
166 | ||
6551594b | 167 | static void InitESDpid(Int_t type=0); |
572b0139 | 168 | static void SetESDpid(AliESDpid * const pid) {fgESDpid=pid;} |
169 | static AliESDpid* GetESDpid() {return fgESDpid;} | |
170 | static void SetEvent(AliVEvent * const ev); | |
6551594b | 171 | |
b2a297fa | 172 | static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; } |
173 | private: | |
174 | ||
175 | static const char* fgkParticleNames[kNMaxValues]; //variable names | |
176 | ||
177 | static void FillVarVParticle(const AliVParticle *particle, Double_t * const values); | |
178 | static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values); | |
179 | static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values); | |
8df8e382 | 180 | static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values); |
b2a297fa | 181 | static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values); |
182 | static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values); | |
6551594b | 183 | static void FillVarVEvent(const AliVEvent *event, Double_t * const values); |
184 | static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values); | |
185 | static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values); | |
186 | static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values); | |
8df8e382 | 187 | |
6551594b | 188 | static AliESDpid* fgESDpid; // ESD pid object |
189 | static AliVEvent* fgEvent; // current event pointer | |
572b0139 | 190 | static AliKFVertex *fgKFVertex; // kf vertex |
191 | ||
b2a297fa | 192 | AliDielectronVarManager(const AliDielectronVarManager &c); |
193 | AliDielectronVarManager &operator=(const AliDielectronVarManager &c); | |
194 | ||
195 | ClassDef(AliDielectronVarManager,1); | |
196 | }; | |
197 | ||
198 | ||
199 | //Inline functions | |
6551594b | 200 | inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values) |
b2a297fa | 201 | { |
202 | // | |
203 | // Main function to fill all available variables according to the type of particle | |
204 | // | |
205 | ||
6551594b | 206 | if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values); |
207 | else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values); | |
208 | else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values); | |
209 | else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values); | |
210 | else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values); | |
211 | ||
212 | // Main function to fill all available variables according to the type of event | |
213 | ||
214 | else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values); | |
215 | else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values); | |
216 | else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values); | |
217 | else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values); | |
218 | // else Error("Fill",Form("Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed | |
b2a297fa | 219 | } |
220 | ||
221 | inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values) | |
222 | { | |
223 | // | |
224 | // Fill track information available in AliVParticle into an array | |
225 | // | |
226 | values[AliDielectronVarManager::kPx] = particle->Px(); | |
227 | values[AliDielectronVarManager::kPy] = particle->Py(); | |
228 | values[AliDielectronVarManager::kPz] = particle->Pz(); | |
229 | values[AliDielectronVarManager::kPt] = particle->Pt(); | |
230 | values[AliDielectronVarManager::kP] = particle->P(); | |
231 | ||
232 | values[AliDielectronVarManager::kXv] = particle->Xv(); | |
233 | values[AliDielectronVarManager::kYv] = particle->Yv(); | |
234 | values[AliDielectronVarManager::kZv] = particle->Zv(); | |
235 | ||
236 | values[AliDielectronVarManager::kOneOverPt] = particle->OneOverPt(); | |
237 | values[AliDielectronVarManager::kPhi] = particle->Phi(); | |
238 | values[AliDielectronVarManager::kTheta] = particle->Theta(); | |
239 | values[AliDielectronVarManager::kEta] = particle->Eta(); | |
240 | values[AliDielectronVarManager::kY] = particle->Y(); | |
8df8e382 | 241 | |
b2a297fa | 242 | values[AliDielectronVarManager::kE] = particle->E(); |
243 | values[AliDielectronVarManager::kM] = particle->M(); | |
244 | values[AliDielectronVarManager::kCharge] = particle->Charge(); | |
6551594b | 245 | |
246 | if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values); | |
b2a297fa | 247 | } |
248 | ||
249 | inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values) | |
250 | { | |
251 | // | |
252 | // Fill track information available for histogramming into an array | |
253 | // | |
254 | ||
255 | // Fill common AliVParticle interface information | |
256 | FillVarVParticle(particle, values); | |
257 | ||
8df8e382 | 258 | Double_t pidProbs[AliPID::kSPECIES]; |
b2a297fa | 259 | // Fill AliESDtrack interface specific information |
164bfb53 | 260 | Double_t tpcNcls=particle->GetTPCNcls(); |
b2a297fa | 261 | values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers |
61d106d3 | 262 | values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers |
b2a297fa | 263 | values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF(); |
264 | values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCsignalN(); | |
265 | values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers | |
266 | values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets? | |
267 | values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality(); | |
61d106d3 | 268 | values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus(); |
269 | ||
270 | ||
271 | values[AliDielectronVarManager::kTPCchi2Cl] = -1; | |
272 | if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls; | |
8df8e382 | 273 | //TRD pidProbs |
274 | particle->GetTRDpid(pidProbs); | |
275 | values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron]; | |
276 | values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion]; | |
277 | ||
b2a297fa | 278 | Float_t impactParXY, impactParZ; |
279 | particle->GetImpactParameters(impactParXY, impactParZ); | |
280 | values[AliDielectronVarManager::kImpactParXY] = impactParXY; | |
281 | values[AliDielectronVarManager::kImpactParZ] = impactParZ; | |
282 | ||
8df8e382 | 283 | |
284 | values[AliDielectronVarManager::kPdgCode]=0; | |
285 | values[AliDielectronVarManager::kPdgCodeMother]=0; | |
286 | ||
287 | values[AliDielectronVarManager::kNumberOfDaughters]=-999; | |
288 | ||
289 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
290 | ||
291 | if (mc->HasMC()){ | |
292 | if (mc->GetMCTrack(particle)) | |
293 | values[AliDielectronVarManager::kPdgCode]= | |
294 | mc->GetMCTrack(particle)->PdgCode(); | |
295 | ||
296 | Int_t pdgMother=mc->GetMotherPDG(particle); | |
297 | if (pdgMother!=-999) | |
298 | values[AliDielectronVarManager::kPdgCodeMother]=pdgMother; | |
299 | ||
300 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); | |
301 | } //if(mc->HasMC()) | |
302 | ||
303 | ||
304 | ||
305 | values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal(); | |
306 | ||
307 | Double_t itsdEdx[4]; | |
308 | particle->GetITSdEdxSamples(itsdEdx); | |
309 | ||
310 | values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0]; | |
311 | values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1]; | |
312 | values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2]; | |
313 | values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3]; | |
3505bfad | 314 | values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap(); |
315 | ||
b2a297fa | 316 | values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength(); |
b2a297fa | 317 | //dEdx information |
318 | Double_t mom = particle->GetP(); | |
319 | const AliExternalTrackParam *in=particle->GetInnerParam(); | |
320 | if (in) mom = in->GetP(); | |
321 | values[AliDielectronVarManager::kPIn]=mom; | |
322 | values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal(); | |
6551594b | 323 | // nsigma to Electron band |
324 | // TODO: for the moment we set the bethe bloch parameters manually | |
325 | // this should be changed in future! | |
48609e3d | 326 | |
6551594b | 327 | values[AliDielectronVarManager::kTPCnSigmaEle]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kElectron); |
48609e3d | 328 | //-AliDielectronPID::GetCorrVal(); |
572b0139 | 329 | values[AliDielectronVarManager::kTPCnSigmaPio]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kPion); |
330 | values[AliDielectronVarManager::kTPCnSigmaMuo]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kMuon); | |
331 | values[AliDielectronVarManager::kTPCnSigmaKao]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kKaon); | |
332 | values[AliDielectronVarManager::kTPCnSigmaPro]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kProton); | |
333 | ||
9143d69f | 334 | values[AliDielectronVarManager::kITSnSigmaEle]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kElectron); |
335 | values[AliDielectronVarManager::kITSnSigmaPio]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kPion); | |
336 | values[AliDielectronVarManager::kITSnSigmaMuo]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kMuon); | |
337 | values[AliDielectronVarManager::kITSnSigmaKao]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kKaon); | |
338 | values[AliDielectronVarManager::kITSnSigmaPro]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kProton); | |
339 | ||
572b0139 | 340 | Double_t t0=fgESDpid->GetTOFResponse().GetTimeZero(); |
8df8e382 | 341 | values[AliDielectronVarManager::kTOFnSigmaEle]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kElectron,t0); |
572b0139 | 342 | values[AliDielectronVarManager::kTOFnSigmaPio]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kPion,t0); |
343 | values[AliDielectronVarManager::kTOFnSigmaMuo]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kMuon,t0); | |
344 | values[AliDielectronVarManager::kTOFnSigmaKao]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kKaon,t0); | |
345 | values[AliDielectronVarManager::kTOFnSigmaPro]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kProton,t0); | |
b2a297fa | 346 | } |
347 | ||
348 | inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values) | |
349 | { | |
350 | // | |
351 | // Fill track information available for histogramming into an array | |
352 | // | |
353 | ||
354 | // Fill common AliVParticle interface information | |
355 | FillVarVParticle(particle, values); | |
572b0139 | 356 | |
357 | // Reset AliESDtrack interface specific information | |
358 | values[AliDielectronVarManager::kNclsITS] = 0; | |
164bfb53 | 359 | values[AliDielectronVarManager::kNclsTPC] = particle->GetTPCNcls(); |
572b0139 | 360 | values[AliDielectronVarManager::kNFclsTPC] = 0; |
361 | values[AliDielectronVarManager::kNclsTRD] = 0; | |
362 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
363 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
61d106d3 | 364 | |
365 | values[AliDielectronVarManager::kTPCchi2Cl] = -1; | |
366 | values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus(); | |
367 | ||
8df8e382 | 368 | //TRD pidProbs |
369 | //TODO: set correctly | |
370 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
371 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
372 | ||
572b0139 | 373 | //TODO: This is only an approximation!!! |
164bfb53 | 374 | values[AliDielectronVarManager::kTPCsignalN] = values[AliDielectronVarManager::kNclsTPC]; |
572b0139 | 375 | |
376 | // Fill AliAODTrack interface information | |
b2a297fa | 377 | // ... |
572b0139 | 378 | values[AliDielectronVarManager::kImpactParXY] = particle->DCA(); |
379 | values[AliDielectronVarManager::kImpactParZ] = particle->ZAtDCA(); | |
380 | ||
381 | values[AliDielectronVarManager::kPIn]=0; | |
382 | values[AliDielectronVarManager::kTPCsignal]=0; | |
383 | ||
384 | values[AliDielectronVarManager::kTPCnSigmaEle]=0; | |
385 | values[AliDielectronVarManager::kTPCnSigmaPio]=0; | |
386 | values[AliDielectronVarManager::kTPCnSigmaMuo]=0; | |
387 | values[AliDielectronVarManager::kTPCnSigmaKao]=0; | |
388 | values[AliDielectronVarManager::kTPCnSigmaPro]=0; | |
b2a297fa | 389 | |
3505bfad | 390 | values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap(); |
572b0139 | 391 | |
392 | AliAODPid *pid=particle->GetDetPid(); | |
393 | if (pid){ | |
394 | Double_t mom =pid->GetTPCmomentum(); | |
395 | //TODO: kTPCsignalN is only an approximation (see above)!! | |
396 | ||
397 | Double_t tpcNsigmaEle=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(), | |
398 | TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]) ,AliPID::kElectron); | |
572b0139 | 399 | Double_t tpcNsigmaPio=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(), |
400 | TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kPion); | |
572b0139 | 401 | Double_t tpcNsigmaMuo=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(), |
402 | TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kMuon); | |
572b0139 | 403 | Double_t tpcNsigmaKao=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(), |
404 | TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kKaon); | |
572b0139 | 405 | Double_t tpcNsigmaPro=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(), |
406 | TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kProton); | |
407 | ||
164bfb53 | 408 | values[AliDielectronVarManager::kPIn]=mom; |
572b0139 | 409 | values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal(); |
410 | ||
411 | values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle; | |
412 | values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio; | |
413 | values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo; | |
414 | values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao; | |
415 | values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro; | |
416 | ||
417 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
418 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
419 | ||
420 | } | |
b2a297fa | 421 | } |
422 | ||
423 | inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values) | |
424 | { | |
425 | // | |
426 | // Fill track information available for histogramming into an array | |
427 | // | |
428 | ||
429 | // Fill common AliVParticle interface information | |
430 | FillVarVParticle(particle, values); | |
431 | ||
8df8e382 | 432 | |
433 | values[AliDielectronVarManager::kPdgCode]=0; | |
434 | values[AliDielectronVarManager::kPdgCodeMother]=0; | |
435 | ||
436 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
437 | ||
b2a297fa | 438 | // Fill AliMCParticle interface specific information |
439 | values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); | |
8df8e382 | 440 | |
441 | AliMCParticle *mother = mc->GetMCTrackMother(particle); | |
442 | if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode(); | |
443 | ||
444 | ||
445 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); | |
b2a297fa | 446 | } |
447 | ||
448 | inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values) | |
449 | { | |
450 | // | |
451 | // Fill track information available for histogramming into an array | |
452 | // | |
453 | ||
454 | // Fill common AliVParticle interface information | |
455 | FillVarVParticle(particle, values); | |
456 | ||
8df8e382 | 457 | |
458 | values[AliDielectronVarManager::kPdgCode]=0; | |
459 | values[AliDielectronVarManager::kPdgCodeMother]=0; | |
460 | ||
461 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
462 | ||
463 | ||
b2a297fa | 464 | // Fill AliAODMCParticle interface specific information |
8df8e382 | 465 | values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); |
466 | ||
467 | AliVParticle *mother = mc->GetMCTrackMother(particle); | |
468 | if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode(); | |
469 | ||
470 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); | |
b2a297fa | 471 | } |
472 | ||
473 | inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values) | |
474 | { | |
475 | // | |
476 | // Fill pair information available for histogramming into an array | |
477 | // | |
478 | ||
479 | // Fill common AliVParticle interface information | |
480 | FillVarVParticle(pair, values); | |
481 | ||
482 | // Fill AliDielectronPair specific information | |
483 | const AliKFParticle &kfPair = pair->GetKFParticle(); | |
61d106d3 | 484 | |
485 | Double_t thetaHE=0; | |
486 | Double_t phiHE=0; | |
487 | Double_t thetaCS=0; | |
488 | Double_t phiCS=0; | |
489 | ||
490 | pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS); | |
491 | ||
b2a297fa | 492 | values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF(); |
493 | values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength(); | |
494 | values[AliDielectronVarManager::kR] = kfPair.GetR(); | |
495 | values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle(); | |
61d106d3 | 496 | values[AliDielectronVarManager::kThetaHE] = thetaHE; |
497 | values[AliDielectronVarManager::kPhiHE] = phiHE; | |
498 | values[AliDielectronVarManager::kThetaCS] = thetaCS; | |
499 | values[AliDielectronVarManager::kPhiCS] = phiCS; | |
572b0139 | 500 | values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters(); |
501 | values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY(); | |
61d106d3 | 502 | values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta(); |
503 | values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi(); | |
8df8e382 | 504 | values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000; |
b2a297fa | 505 | values[AliDielectronVarManager::kPairType] = pair->GetType(); |
8df8e382 | 506 | |
507 | ||
508 | ||
509 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
510 | ||
511 | if (mc->HasMC()){ | |
512 | Bool_t samemother = mc->HaveSameMother(pair); | |
513 | values[AliDielectronVarManager::kHaveSameMother] = samemother ; | |
514 | }//if (mc->HasMC()) | |
515 | ||
516 | ||
b2a297fa | 517 | } |
518 | ||
6551594b | 519 | |
520 | inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values) | |
521 | { | |
522 | // | |
523 | // Fill event information available for histogramming into an array | |
524 | // | |
525 | const AliVVertex *primVtx = event->GetPrimaryVertex(); | |
8df8e382 | 526 | |
527 | values[AliDielectronVarManager::kXvPrim] = 0; | |
528 | values[AliDielectronVarManager::kYvPrim] = 0; | |
529 | values[AliDielectronVarManager::kZvPrim] = 0; | |
530 | values[AliDielectronVarManager::kChi2NDF] = 0; | |
531 | ||
532 | values[AliDielectronVarManager::kNTrk] = 0; | |
533 | values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0; | |
534 | ||
535 | if (!primVtx) return; | |
536 | ||
6551594b | 537 | values[AliDielectronVarManager::kXvPrim] = primVtx->GetX(); |
538 | values[AliDielectronVarManager::kYvPrim] = primVtx->GetY(); | |
539 | values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ(); | |
540 | values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); | |
541 | ||
542 | values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks(); | |
6551594b | 543 | } |
544 | ||
545 | inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values) | |
546 | { | |
547 | // | |
548 | // Fill event information available for histogramming into an array | |
549 | // | |
550 | ||
551 | // Fill common AliVEvent interface information | |
552 | FillVarVEvent(event, values); | |
553 | ||
554 | // Fill AliESDEvent interface specific information | |
555 | const AliESDVertex *primVtx = event->GetPrimaryVertex(); | |
556 | values[AliDielectronVarManager::kXRes] = primVtx->GetXRes(); | |
557 | values[AliDielectronVarManager::kYRes] = primVtx->GetYRes(); | |
558 | values[AliDielectronVarManager::kZRes] = primVtx->GetZRes(); | |
559 | } | |
560 | ||
561 | inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values) | |
562 | { | |
563 | // | |
564 | // Fill event information available for histogramming into an array | |
565 | // | |
566 | ||
567 | // Fill common AliVEvent interface information | |
568 | FillVarVEvent(event, values); | |
569 | ||
570 | // Fill AliAODEvent interface specific information | |
571 | } | |
572 | ||
573 | inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values) | |
574 | { | |
575 | // | |
576 | // Fill event information available for histogramming into an array | |
577 | // | |
578 | ||
579 | // Fill common AliVEvent interface information | |
580 | FillVarVEvent(event, values); | |
581 | ||
582 | // Fill AliMCEvent interface specific information | |
583 | } | |
584 | ||
585 | inline void AliDielectronVarManager::InitESDpid(Int_t type) | |
586 | { | |
587 | // | |
588 | // initialize PID parameters | |
589 | // type=0 is simulation | |
590 | // type=1 is data | |
591 | ||
572b0139 | 592 | if (!fgESDpid) fgESDpid=new AliESDpid; |
6551594b | 593 | Double_t alephParameters[5]; |
594 | // simulation | |
595 | alephParameters[0] = 2.15898e+00/50.; | |
596 | alephParameters[1] = 1.75295e+01; | |
597 | alephParameters[2] = 3.40030e-09; | |
598 | alephParameters[3] = 1.96178e+00; | |
599 | alephParameters[4] = 3.91720e+00; | |
8df8e382 | 600 | fgESDpid->GetTOFResponse().SetTimeResolution(80.); |
6551594b | 601 | |
602 | // data | |
83e37742 | 603 | if (type==1){ |
604 | alephParameters[0] = 0.0283086/0.97; | |
6551594b | 605 | alephParameters[1] = 2.63394e+01; |
606 | alephParameters[2] = 5.04114e-11; | |
607 | alephParameters[3] = 2.12543e+00; | |
608 | alephParameters[4] = 4.88663e+00; | |
8df8e382 | 609 | fgESDpid->GetTOFResponse().SetTimeResolution(130.); |
83e37742 | 610 | fgESDpid->GetTPCResponse().SetMip(50.); |
6551594b | 611 | } |
612 | ||
613 | fgESDpid->GetTPCResponse().SetBetheBlochParameters( | |
614 | alephParameters[0],alephParameters[1],alephParameters[2], | |
615 | alephParameters[3],alephParameters[4]); | |
616 | ||
8df8e382 | 617 | fgESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04); |
6551594b | 618 | } |
619 | ||
572b0139 | 620 | |
621 | inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev) | |
622 | { | |
623 | ||
624 | fgEvent = ev; | |
625 | if (fgKFVertex) delete fgKFVertex; | |
626 | fgKFVertex=0x0; | |
8df8e382 | 627 | if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex()); |
572b0139 | 628 | } |
b2a297fa | 629 | /* |
630 | inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values) | |
631 | { | |
632 | // | |
633 | // Fill track information available for histogramming into an array | |
634 | // | |
635 | ||
636 | // Fill TParticle interface information | |
637 | values[AliDielectronVarManager::kPx] = particle->Px(); | |
638 | values[AliDielectronVarManager::kPy] = particle->Py(); | |
639 | values[AliDielectronVarManager::kPz] = particle->Pz(); | |
640 | values[AliDielectronVarManager::kPt] = particle->Pt(); | |
641 | values[AliDielectronVarManager::kP] = particle->P(); | |
642 | ||
643 | values[AliDielectronVarManager::kXv] = particle->Vx(); | |
644 | values[AliDielectronVarManager::kYv] = particle->Vy(); | |
645 | values[AliDielectronVarManager::kZv] = particle->Vz(); | |
646 | ||
647 | values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt(); | |
648 | values[AliDielectronVarManager::kPhi] = particle->Phi(); | |
649 | values[AliDielectronVarManager::kTheta] = | |
650 | values[AliDielectronVarManager::kEta] = particle->Eta(); | |
651 | values[AliDielectronVarManager::kY] = | |
652 | ||
653 | values[AliDielectronVarManager::kE] = particle->Energy(); | |
654 | values[AliDielectronVarManager::kM] = particle->GetMass(); | |
655 | ||
656 | values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly | |
657 | ||
658 | }*/ | |
659 | ||
660 | #endif |