]>
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> | |
4649c75b | 45 | #include <AliCentrality.h> |
2a14a7b1 | 46 | #include <AliAODpidUtil.h> |
8df8e382 | 47 | #include <AliPID.h> |
ba15fdfb | 48 | #include <AliPIDResponse.h> |
6551594b | 49 | |
b2a297fa | 50 | #include "AliDielectronPair.h" |
8df8e382 | 51 | #include "AliDielectronMC.h" |
48609e3d | 52 | #include "AliDielectronPID.h" |
ba15fdfb | 53 | #include "AliDielectronHelper.h" |
b2a297fa | 54 | |
55 | class AliVEvent; | |
56 | ||
57 | //________________________________________________________________ | |
58 | class AliDielectronVarManager : public TNamed { | |
59 | ||
60 | public: | |
8df8e382 | 61 | |
b2a297fa | 62 | // Particle specific variables |
63 | enum ValueTypes { | |
64 | kPx = 0, // px | |
65 | kPy, // py | |
66 | kPz, // pz | |
67 | kPt, // transverse momentum | |
68 | kP, // momentum | |
69 | kXv, // vertex position in x | |
70 | kYv, // vertex position in y | |
71 | kZv, // vertex position in z | |
72 | kOneOverPt, // 1/pt | |
73 | kPhi, // phi angle | |
74 | kTheta, // theta angle | |
75 | kEta, // pseudo-rapidity | |
76 | kY, // rapidity | |
77 | kE, // energy | |
78 | kM, // mass | |
79 | kCharge, // charge | |
80 | kNclsITS, // number of clusters assigned in the ITS | |
81 | kNclsTPC, // number of clusters assigned in the TPC | |
554e40f8 | 82 | kNclsTPCiter1, // number of clusters assigned in the TPC after first iteration |
b2a297fa | 83 | kNFclsTPC, // number of findable clusters in the TPC |
45b2b1b8 | 84 | kNFclsTPCr, // number of findable clusters in the TPC with more robust definition |
fb7d2d99 | 85 | kNFclsTPCrFrac, // number of found/findable clusters in the TPC with more robust definition |
b2a297fa | 86 | kTPCsignalN, // number of points used for dEdx |
ba15fdfb | 87 | kTPCsignalNfrac, // fraction of points used for dEdx / cluster used for tracking |
61d106d3 | 88 | kTPCchi2Cl, // chi2/cl in TPC |
89 | kTrackStatus, // track status bits | |
8df8e382 | 90 | |
b2a297fa | 91 | kNclsTRD, // number of clusters assigned in the TRD |
92 | kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter | |
93 | kTRDpidQuality, // number of TRD tracklets used for PID | |
8df8e382 | 94 | kTRDprobEle, // TRD electron pid probability |
95 | kTRDprobPio, // TRD electron pid probability | |
96 | ||
b2a297fa | 97 | kImpactParXY, // Impact parameter in XY plane |
98 | kImpactParZ, // Impact parameter in Z | |
99 | kTrackLength, // Track length | |
100 | kPdgCode, // PDG code | |
8df8e382 | 101 | |
102 | kPdgCodeMother, // PDG code of the mother | |
ba15fdfb | 103 | kPdgCodeGrandMother, // PDG code of the mother |
104 | ||
8df8e382 | 105 | kNumberOfDaughters, // number of daughters |
106 | kHaveSameMother, // check that particles have the same mother (MC) | |
fb7d2d99 | 107 | kIsJpsiPrimary, // check if the particle is primary (MC) |
8df8e382 | 108 | kITSsignal, // ITS dE/dx signal |
109 | kITSsignalSSD1, // SSD1 dE/dx signal | |
110 | kITSsignalSSD2, // SSD2 dE/dx signal | |
111 | kITSsignalSDD1, // SDD1 dE/dx signal | |
112 | kITSsignalSDD2, // SDD2 dE/dx signal | |
3505bfad | 113 | kITSclusterMap, // ITS cluster map |
9143d69f | 114 | kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS |
115 | kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS | |
116 | kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS | |
117 | kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS | |
118 | kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS | |
8df8e382 | 119 | |
b2a297fa | 120 | kPIn, // momentum at inner wall of TPC (if available), used for PID |
121 | kTPCsignal, // TPC dE/dx signal | |
ba15fdfb | 122 | |
123 | kTOFsignal, // TOF signal | |
124 | kTOFbeta, // TOF beta | |
125 | ||
6551594b | 126 | kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC |
572b0139 | 127 | kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC |
128 | kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC | |
129 | kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC | |
130 | kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC | |
131 | ||
ba15fdfb | 132 | kTOFnSigmaEle, // number of sigmas to the pion line in the TOF |
572b0139 | 133 | kTOFnSigmaPio, // number of sigmas to the pion line in the TOF |
134 | kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF | |
135 | kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF | |
136 | kTOFnSigmaPro, // number of sigmas to the proton line in the TOF | |
8df8e382 | 137 | |
ffbede40 | 138 | kKinkIndex0, // kink index 0 |
139 | ||
b2a297fa | 140 | kParticleMax, // |
141 | // TODO: kRNClusters ?? | |
142 | // AliDielectronPair specific variables | |
143 | kChi2NDF = kParticleMax, // Chi^2/NDF | |
144 | kDecayLength, // decay length | |
145 | kR, // distance to the origin | |
146 | kOpeningAngle, // opening angle | |
8df8e382 | 147 | // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector |
148 | kThetaHE, // theta in mother's rest frame in the helicity picture | |
149 | kPhiHE, // phi in mother's rest frame in the helicity picture | |
150 | // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between | |
151 | // the 3-mom vectors of target and projectile beams | |
152 | kThetaCS, // theta in mother's rest frame in Collins-Soper picture | |
153 | kPhiCS, // phi in mother's rest frame in Collins-Soper picture | |
572b0139 | 154 | kLegDist, // distance of the legs |
155 | kLegDistXY, // distance of the legs in XY | |
61d106d3 | 156 | kDeltaEta, // Absolute value of Delta Eta for the legs |
157 | kDeltaPhi, // Absolute value of Delta Phi for the legs | |
b2a297fa | 158 | kMerr, // error of mass calculation |
159 | kDCA, // distance of closest approach TODO: not implemented yet | |
160 | kPairType, // type of the pair, like like sign ++ unlikesign ... | |
ba15fdfb | 161 | kPseudoProperTime, // pseudo proper time |
b2a297fa | 162 | kPairMax, // |
163 | // Event specific variables | |
6551594b | 164 | kXvPrim=kPairMax, // prim vertex |
165 | kYvPrim, // prim vertex | |
166 | kZvPrim, // prim vertex | |
167 | kXRes, // primary vertex x-resolution | |
168 | kYRes, // primary vertex y-resolution | |
169 | kZRes, // primary vertex z-resolution | |
ba15fdfb | 170 | kNTrk, // number of tracks (or tracklets) TODO: ambiguous |
171 | kTracks, // ESD tracks TODO: ambiguous | |
172 | kNacc, // Number of accepted tracks | |
173 | kNaccTrcklts, // Number of accepted tracklets (MUON definition) | |
174 | kNch, // Number of charged MC tracks | |
ffbede40 | 175 | kCentrality, // event centrality fraction |
6551594b | 176 | kNevents, // event counter |
b2a297fa | 177 | kNMaxValues // |
178 | // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag?? | |
179 | }; | |
180 | ||
181 | ||
182 | AliDielectronVarManager(); | |
183 | AliDielectronVarManager(const char* name, const char* title); | |
184 | virtual ~AliDielectronVarManager(); | |
185 | static void Fill(const TObject* particle, Double_t * const values); | |
ba15fdfb | 186 | static void FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values); |
b2a297fa | 187 | |
6551594b | 188 | static void InitESDpid(Int_t type=0); |
2a14a7b1 | 189 | static void InitAODpidUtil(Int_t type=0); |
ba15fdfb | 190 | static void SetESDpid(AliESDpid * const pid) {fgPIDResponse=pid;} |
191 | static AliESDpid* GetESDpid() {return (AliESDpid*)fgPIDResponse;} | |
192 | static AliAODpidUtil* GetAODpidUtil() {return (AliAODpidUtil*)fgPIDResponse;} | |
193 | static void SetPIDResponse(AliPIDResponse *pidResponse) {fgPIDResponse=pidResponse;} | |
572b0139 | 194 | static void SetEvent(AliVEvent * const ev); |
2a14a7b1 | 195 | static Bool_t GetDCA(const AliAODTrack *track, Double_t d0z0[2]); |
ba15fdfb | 196 | |
197 | static const AliKFVertex* GetKFVertex() {return fgKFVertex;} | |
198 | ||
b2a297fa | 199 | static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; } |
ba15fdfb | 200 | |
201 | static const Double_t* GetData() {return fgData;} | |
202 | ||
203 | static Double_t GetValue(ValueTypes val) {return fgData[val];} | |
b2a297fa | 204 | private: |
205 | ||
206 | static const char* fgkParticleNames[kNMaxValues]; //variable names | |
207 | ||
208 | static void FillVarVParticle(const AliVParticle *particle, Double_t * const values); | |
209 | static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values); | |
210 | static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values); | |
8df8e382 | 211 | static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values); |
b2a297fa | 212 | static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values); |
213 | static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values); | |
1201a1a9 | 214 | static void FillVarKFParticle(const AliKFParticle *pair, Double_t * const values); |
215 | ||
6551594b | 216 | static void FillVarVEvent(const AliVEvent *event, Double_t * const values); |
217 | static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values); | |
218 | static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values); | |
219 | static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values); | |
8df8e382 | 220 | |
ba15fdfb | 221 | static AliPIDResponse *fgPIDResponse; // PID response object |
222 | static AliVEvent *fgEvent; // current event pointer | |
223 | static AliKFVertex *fgKFVertex; // kf vertex | |
224 | ||
225 | static Double_t fgData[kNMaxValues]; //! data | |
572b0139 | 226 | |
b2a297fa | 227 | AliDielectronVarManager(const AliDielectronVarManager &c); |
228 | AliDielectronVarManager &operator=(const AliDielectronVarManager &c); | |
229 | ||
230 | ClassDef(AliDielectronVarManager,1); | |
231 | }; | |
232 | ||
233 | ||
234 | //Inline functions | |
6551594b | 235 | inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values) |
b2a297fa | 236 | { |
237 | // | |
238 | // Main function to fill all available variables according to the type of particle | |
239 | // | |
6551594b | 240 | if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values); |
241 | else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values); | |
242 | else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values); | |
243 | else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values); | |
244 | else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values); | |
1201a1a9 | 245 | else if (object->IsA() == AliKFParticle::Class()) FillVarKFParticle(static_cast<const AliKFParticle*>(object),values); |
6551594b | 246 | // Main function to fill all available variables according to the type of event |
247 | ||
248 | else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values); | |
249 | else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values); | |
250 | else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values); | |
251 | else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values); | |
1201a1a9 | 252 | // else printf(Form("AliDielectronVarManager::Fill: Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed |
b2a297fa | 253 | } |
254 | ||
255 | inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values) | |
256 | { | |
257 | // | |
258 | // Fill track information available in AliVParticle into an array | |
259 | // | |
260 | values[AliDielectronVarManager::kPx] = particle->Px(); | |
261 | values[AliDielectronVarManager::kPy] = particle->Py(); | |
262 | values[AliDielectronVarManager::kPz] = particle->Pz(); | |
263 | values[AliDielectronVarManager::kPt] = particle->Pt(); | |
264 | values[AliDielectronVarManager::kP] = particle->P(); | |
265 | ||
266 | values[AliDielectronVarManager::kXv] = particle->Xv(); | |
267 | values[AliDielectronVarManager::kYv] = particle->Yv(); | |
268 | values[AliDielectronVarManager::kZv] = particle->Zv(); | |
269 | ||
ba15fdfb | 270 | values[AliDielectronVarManager::kOneOverPt] = (particle->Pt()>1.0e-3 ? particle->OneOverPt() : 0.0); |
b2a297fa | 271 | values[AliDielectronVarManager::kPhi] = particle->Phi(); |
272 | values[AliDielectronVarManager::kTheta] = particle->Theta(); | |
273 | values[AliDielectronVarManager::kEta] = particle->Eta(); | |
274 | values[AliDielectronVarManager::kY] = particle->Y(); | |
8df8e382 | 275 | |
b2a297fa | 276 | values[AliDielectronVarManager::kE] = particle->E(); |
277 | values[AliDielectronVarManager::kM] = particle->M(); | |
278 | values[AliDielectronVarManager::kCharge] = particle->Charge(); | |
2a14a7b1 | 279 | |
280 | values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); | |
281 | ||
ba15fdfb | 282 | // if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values); |
283 | for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues; ++i) | |
284 | values[i]=fgData[i]; | |
b2a297fa | 285 | } |
286 | ||
287 | inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values) | |
288 | { | |
289 | // | |
290 | // Fill track information available for histogramming into an array | |
291 | // | |
292 | ||
293 | // Fill common AliVParticle interface information | |
294 | FillVarVParticle(particle, values); | |
295 | ||
8df8e382 | 296 | Double_t pidProbs[AliPID::kSPECIES]; |
b2a297fa | 297 | // Fill AliESDtrack interface specific information |
164bfb53 | 298 | Double_t tpcNcls=particle->GetTPCNcls(); |
ba15fdfb | 299 | Double_t tpcSignalN=particle->GetTPCsignalN(); |
b2a297fa | 300 | values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers |
61d106d3 | 301 | values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers |
ffbede40 | 302 | values[AliDielectronVarManager::kNclsTPCiter1] = particle->GetTPCNclsIter1(); // TODO: get rid of the plain numbers |
b2a297fa | 303 | values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF(); |
45b2b1b8 | 304 | values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1); |
fb7d2d99 | 305 | values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2); |
ba15fdfb | 306 | values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN; |
307 | values[AliDielectronVarManager::kTPCsignalNfrac]= tpcNcls>0?tpcSignalN/tpcNcls:0; | |
b2a297fa | 308 | values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers |
309 | values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets? | |
310 | values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality(); | |
61d106d3 | 311 | values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus(); |
312 | ||
313 | ||
314 | values[AliDielectronVarManager::kTPCchi2Cl] = -1; | |
315 | if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls; | |
8df8e382 | 316 | //TRD pidProbs |
317 | particle->GetTRDpid(pidProbs); | |
318 | values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron]; | |
319 | values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion]; | |
ffbede40 | 320 | |
321 | values[AliDielectronVarManager::kKinkIndex0] = particle->GetKinkIndex(0); | |
8df8e382 | 322 | |
b2a297fa | 323 | Float_t impactParXY, impactParZ; |
324 | particle->GetImpactParameters(impactParXY, impactParZ); | |
325 | values[AliDielectronVarManager::kImpactParXY] = impactParXY; | |
326 | values[AliDielectronVarManager::kImpactParZ] = impactParZ; | |
327 | ||
8df8e382 | 328 | |
ba15fdfb | 329 | values[AliDielectronVarManager::kPdgCode]=-1; |
330 | values[AliDielectronVarManager::kPdgCodeMother]=-1; | |
331 | values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; | |
332 | ||
8df8e382 | 333 | values[AliDielectronVarManager::kNumberOfDaughters]=-999; |
334 | ||
335 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
336 | ||
337 | if (mc->HasMC()){ | |
338 | if (mc->GetMCTrack(particle)) | |
ba15fdfb | 339 | values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode(); |
8df8e382 | 340 | |
ba15fdfb | 341 | AliMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother |
342 | if (motherMC){ | |
343 | values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); | |
344 | ||
345 | motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC | |
346 | if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; | |
347 | } | |
348 | ||
8df8e382 | 349 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); |
350 | } //if(mc->HasMC()) | |
351 | ||
352 | ||
353 | ||
354 | values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal(); | |
355 | ||
356 | Double_t itsdEdx[4]; | |
357 | particle->GetITSdEdxSamples(itsdEdx); | |
358 | ||
359 | values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0]; | |
360 | values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1]; | |
361 | values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2]; | |
362 | values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3]; | |
3505bfad | 363 | values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap(); |
364 | ||
b2a297fa | 365 | values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength(); |
b2a297fa | 366 | //dEdx information |
367 | Double_t mom = particle->GetP(); | |
368 | const AliExternalTrackParam *in=particle->GetInnerParam(); | |
369 | if (in) mom = in->GetP(); | |
370 | values[AliDielectronVarManager::kPIn]=mom; | |
371 | values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal(); | |
ba15fdfb | 372 | |
373 | values[AliDielectronVarManager::kTOFsignal]=particle->GetTOFsignal(); | |
374 | ||
375 | Double_t l = particle->GetIntegratedLength(); // cm | |
376 | Double_t t = particle->GetTOFsignal(); | |
377 | Double_t t0 = fgPIDResponse->GetTOFResponse().GetTimeZero(); // ps | |
378 | ||
379 | if( (l < 360. || l > 800.) || (t <= 0.) || (t0 >999990.0) ) { | |
380 | values[AliDielectronVarManager::kTOFbeta]=0.0; | |
381 | } | |
382 | else { | |
383 | t -= t0; // subtract the T0 | |
384 | l *= 0.01; // cm ->m | |
385 | t *= 1e-12; //ps -> s | |
386 | ||
387 | Double_t v = l / t; | |
388 | Float_t beta = v / TMath::C(); | |
389 | values[AliDielectronVarManager::kTOFbeta]=beta; | |
390 | } | |
391 | ||
6551594b | 392 | // nsigma to Electron band |
393 | // TODO: for the moment we set the bethe bloch parameters manually | |
394 | // this should be changed in future! | |
48609e3d | 395 | |
ba15fdfb | 396 | values[AliDielectronVarManager::kTPCnSigmaEle]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron)-AliDielectronPID::GetCorrVal(); |
397 | values[AliDielectronVarManager::kTPCnSigmaPio]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion); | |
398 | values[AliDielectronVarManager::kTPCnSigmaMuo]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon); | |
399 | values[AliDielectronVarManager::kTPCnSigmaKao]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon); | |
400 | values[AliDielectronVarManager::kTPCnSigmaPro]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kProton); | |
401 | ||
402 | values[AliDielectronVarManager::kITSnSigmaEle]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kElectron); | |
403 | values[AliDielectronVarManager::kITSnSigmaPio]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kPion); | |
404 | values[AliDielectronVarManager::kITSnSigmaMuo]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kMuon); | |
405 | values[AliDielectronVarManager::kITSnSigmaKao]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kKaon); | |
406 | values[AliDielectronVarManager::kITSnSigmaPro]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kProton); | |
407 | ||
408 | values[AliDielectronVarManager::kTOFnSigmaEle]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kElectron); | |
409 | values[AliDielectronVarManager::kTOFnSigmaPio]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kPion); | |
410 | values[AliDielectronVarManager::kTOFnSigmaMuo]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kMuon); | |
411 | values[AliDielectronVarManager::kTOFnSigmaKao]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kKaon); | |
412 | values[AliDielectronVarManager::kTOFnSigmaPro]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kProton); | |
b2a297fa | 413 | } |
414 | ||
415 | inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values) | |
416 | { | |
417 | // | |
418 | // Fill track information available for histogramming into an array | |
419 | // | |
420 | ||
421 | // Fill common AliVParticle interface information | |
422 | FillVarVParticle(particle, values); | |
ba15fdfb | 423 | |
424 | Double_t tpcNcls=particle->GetTPCNcls(); | |
572b0139 | 425 | // Reset AliESDtrack interface specific information |
426 | values[AliDielectronVarManager::kNclsITS] = 0; | |
ba15fdfb | 427 | values[AliDielectronVarManager::kNclsTPC] = tpcNcls; |
428 | values[AliDielectronVarManager::kNclsTPCiter1] = tpcNcls; // not really available in AOD | |
572b0139 | 429 | values[AliDielectronVarManager::kNFclsTPC] = 0; |
fb7d2d99 | 430 | values[AliDielectronVarManager::kNFclsTPCr] = 0; |
431 | values[AliDielectronVarManager::kNFclsTPCrFrac] = 0; | |
572b0139 | 432 | values[AliDielectronVarManager::kNclsTRD] = 0; |
433 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
434 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
61d106d3 | 435 | |
436 | values[AliDielectronVarManager::kTPCchi2Cl] = -1; | |
437 | values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus(); | |
438 | ||
8df8e382 | 439 | //TRD pidProbs |
440 | //TODO: set correctly | |
441 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
442 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
443 | ||
2a14a7b1 | 444 | values[AliDielectronVarManager::kTPCsignalN] = 0; |
ba15fdfb | 445 | values[AliDielectronVarManager::kTPCsignalNfrac]= 0; |
572b0139 | 446 | |
2a14a7b1 | 447 | // Fill AliAODTrack interface information |
448 | // | |
449 | Double_t d0z0[2]; | |
450 | GetDCA(particle, d0z0); | |
451 | values[AliDielectronVarManager::kImpactParXY] = d0z0[0]; | |
452 | values[AliDielectronVarManager::kImpactParZ] = d0z0[1]; | |
572b0139 | 453 | |
454 | values[AliDielectronVarManager::kPIn]=0; | |
455 | values[AliDielectronVarManager::kTPCsignal]=0; | |
ba15fdfb | 456 | |
457 | values[AliDielectronVarManager::kTOFsignal]=0; | |
458 | values[AliDielectronVarManager::kTOFbeta]=0; | |
572b0139 | 459 | |
460 | values[AliDielectronVarManager::kTPCnSigmaEle]=0; | |
461 | values[AliDielectronVarManager::kTPCnSigmaPio]=0; | |
462 | values[AliDielectronVarManager::kTPCnSigmaMuo]=0; | |
463 | values[AliDielectronVarManager::kTPCnSigmaKao]=0; | |
464 | values[AliDielectronVarManager::kTPCnSigmaPro]=0; | |
b2a297fa | 465 | |
3505bfad | 466 | values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap(); |
572b0139 | 467 | |
468 | AliAODPid *pid=particle->GetDetPid(); | |
469 | if (pid){ | |
470 | Double_t mom =pid->GetTPCmomentum(); | |
ba15fdfb | 471 | Double_t tpcSignalN=pid->GetTPCsignalN(); |
472 | values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN; | |
473 | values[AliDielectronVarManager::kTPCsignalN] = tpcNcls>0?tpcSignalN/tpcNcls:0; | |
474 | Double_t tpcNsigmaEle=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron); | |
475 | Double_t tpcNsigmaPio=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion); | |
476 | Double_t tpcNsigmaMuo=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon); | |
477 | Double_t tpcNsigmaKao=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon); | |
478 | Double_t tpcNsigmaPro=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kProton); | |
572b0139 | 479 | |
164bfb53 | 480 | values[AliDielectronVarManager::kPIn]=mom; |
572b0139 | 481 | values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal(); |
482 | ||
483 | values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle; | |
484 | values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio; | |
485 | values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo; | |
486 | values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao; | |
487 | values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro; | |
488 | ||
489 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
490 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
491 | ||
492 | } | |
ba15fdfb | 493 | |
494 | values[AliDielectronVarManager::kPdgCode]=-1; | |
495 | values[AliDielectronVarManager::kPdgCodeMother]=-1; | |
496 | values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; | |
497 | ||
498 | values[AliDielectronVarManager::kNumberOfDaughters]=-999; | |
499 | ||
500 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
501 | ||
502 | if (mc->HasMC()){ | |
503 | if (mc->GetMCTrack(particle)) | |
504 | values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode(); | |
505 | ||
506 | AliAODMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother | |
507 | if (motherMC){ | |
508 | values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); | |
509 | ||
510 | motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC | |
511 | if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; | |
512 | } | |
513 | ||
514 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); | |
515 | } //if(mc->HasMC()) | |
516 | ||
b2a297fa | 517 | } |
518 | ||
519 | inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values) | |
520 | { | |
521 | // | |
522 | // Fill track information available for histogramming into an array | |
523 | // | |
524 | ||
554e40f8 | 525 | values[AliDielectronVarManager::kNclsITS] = 0; |
526 | values[AliDielectronVarManager::kNclsTPC] = 0; | |
527 | values[AliDielectronVarManager::kNclsTPCiter1] = 0; | |
528 | values[AliDielectronVarManager::kNFclsTPC] = 0; | |
fb7d2d99 | 529 | values[AliDielectronVarManager::kNFclsTPCr] = 0; |
530 | values[AliDielectronVarManager::kNFclsTPCrFrac] = 0; | |
554e40f8 | 531 | values[AliDielectronVarManager::kNclsTRD] = 0; |
532 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
533 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
534 | values[AliDielectronVarManager::kTPCchi2Cl] = 0; | |
535 | values[AliDielectronVarManager::kTrackStatus] = 0; | |
536 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
537 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
538 | values[AliDielectronVarManager::kTPCsignalN] = 0; | |
ba15fdfb | 539 | values[AliDielectronVarManager::kTPCsignalNfrac] = 0; |
554e40f8 | 540 | values[AliDielectronVarManager::kImpactParXY] = 0; |
541 | values[AliDielectronVarManager::kImpactParZ] = 0; | |
542 | values[AliDielectronVarManager::kPIn] = 0; | |
543 | values[AliDielectronVarManager::kTPCsignal] = 0; | |
ba15fdfb | 544 | values[AliDielectronVarManager::kTOFsignal] = 0; |
545 | values[AliDielectronVarManager::kTOFbeta] = 0; | |
554e40f8 | 546 | values[AliDielectronVarManager::kTPCnSigmaEle] = 0; |
547 | values[AliDielectronVarManager::kTPCnSigmaPio] = 0; | |
548 | values[AliDielectronVarManager::kTPCnSigmaMuo] = 0; | |
549 | values[AliDielectronVarManager::kTPCnSigmaKao] = 0; | |
550 | values[AliDielectronVarManager::kTPCnSigmaPro] = 0; | |
551 | values[AliDielectronVarManager::kITSclusterMap] = 0; | |
552 | ||
ba15fdfb | 553 | values[AliDielectronVarManager::kPdgCode] = -1; |
554 | values[AliDielectronVarManager::kPdgCodeMother] = -1; | |
555 | values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; | |
554e40f8 | 556 | |
b2a297fa | 557 | // Fill common AliVParticle interface information |
558 | FillVarVParticle(particle, values); | |
8df8e382 | 559 | |
560 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
561 | ||
b2a297fa | 562 | // Fill AliMCParticle interface specific information |
563 | values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); | |
8df8e382 | 564 | |
ba15fdfb | 565 | AliMCParticle *motherMC = mc->GetMCTrackMother(particle); |
566 | if (motherMC){ | |
567 | values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); | |
568 | motherMC=mc->GetMCTrackMother(motherMC); //grand mother | |
569 | if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; | |
570 | } | |
571 | ||
fb7d2d99 | 572 | values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle); |
8df8e382 | 573 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); |
b2a297fa | 574 | } |
575 | ||
ba15fdfb | 576 | |
577 | inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values) { | |
578 | // | |
579 | // fill 2 track information starting from MC legs | |
580 | // | |
581 | ||
582 | values[AliDielectronVarManager::kNclsITS] = 0; | |
583 | values[AliDielectronVarManager::kNclsTPC] = 0; | |
584 | values[AliDielectronVarManager::kNclsTPCiter1] = 0; | |
585 | values[AliDielectronVarManager::kNFclsTPC] = 0; | |
586 | values[AliDielectronVarManager::kNFclsTPCr] = 0; | |
587 | values[AliDielectronVarManager::kNFclsTPCrFrac] = 0; | |
588 | values[AliDielectronVarManager::kNclsTRD] = 0; | |
589 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
590 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
591 | values[AliDielectronVarManager::kTPCchi2Cl] = 0; | |
592 | values[AliDielectronVarManager::kTrackStatus] = 0; | |
593 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
594 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
595 | values[AliDielectronVarManager::kTPCsignalN] = 0; | |
596 | values[AliDielectronVarManager::kTPCsignalNfrac] = 0; | |
597 | values[AliDielectronVarManager::kImpactParXY] = 0; | |
598 | values[AliDielectronVarManager::kImpactParZ] = 0; | |
599 | values[AliDielectronVarManager::kPIn] = 0; | |
600 | values[AliDielectronVarManager::kTPCsignal] = 0; | |
601 | values[AliDielectronVarManager::kTPCnSigmaEle] = 0; | |
602 | values[AliDielectronVarManager::kTPCnSigmaPio] = 0; | |
603 | values[AliDielectronVarManager::kTPCnSigmaMuo] = 0; | |
604 | values[AliDielectronVarManager::kTPCnSigmaKao] = 0; | |
605 | values[AliDielectronVarManager::kTPCnSigmaPro] = 0; | |
606 | values[AliDielectronVarManager::kITSclusterMap] = 0; | |
607 | ||
608 | values[AliDielectronVarManager::kPdgCode] = 0; | |
609 | values[AliDielectronVarManager::kPdgCodeMother] = 0; | |
610 | ||
611 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
612 | AliVParticle* mother=0x0; | |
613 | Int_t mLabel1 = mc->GetMothersLabel(p1->GetLabel()); | |
614 | Int_t mLabel2 = mc->GetMothersLabel(p2->GetLabel()); | |
615 | if(mLabel1==mLabel2) | |
616 | mother = mc->GetMCTrackFromMCEvent(mLabel1); | |
617 | if(mother) // same mother | |
618 | FillVarVParticle(mother, values); | |
619 | else { // the 2 particles come from different mothers so 2-particles quantities are calculated here | |
620 | // AliVParticle part | |
621 | values[AliDielectronVarManager::kPx] = p1->Px()+p2->Px(); | |
622 | values[AliDielectronVarManager::kPy] = p1->Py()+p2->Py(); | |
623 | values[AliDielectronVarManager::kPz] = p1->Pz()+p2->Pz(); | |
624 | values[AliDielectronVarManager::kPt] = TMath::Sqrt(values[AliDielectronVarManager::kPx]* | |
625 | values[AliDielectronVarManager::kPx]+ | |
626 | values[AliDielectronVarManager::kPy]* | |
627 | values[AliDielectronVarManager::kPy]); | |
628 | values[AliDielectronVarManager::kP] = TMath::Sqrt(values[AliDielectronVarManager::kPt]* | |
629 | values[AliDielectronVarManager::kPt]+ | |
630 | values[AliDielectronVarManager::kPz]* | |
631 | values[AliDielectronVarManager::kPz]); | |
632 | ||
633 | values[AliDielectronVarManager::kXv] = 0; | |
634 | values[AliDielectronVarManager::kYv] = 0; | |
635 | values[AliDielectronVarManager::kZv] = 0; | |
636 | ||
637 | values[AliDielectronVarManager::kOneOverPt] = (values[AliDielectronVarManager::kPt]>1.0e-6 ? 1.0/values[AliDielectronVarManager::kPt] : 0.0); | |
638 | values[AliDielectronVarManager::kPhi] = TMath::ATan2(values[AliDielectronVarManager::kPy],values[AliDielectronVarManager::kPx]); | |
639 | values[AliDielectronVarManager::kTheta] = TMath::ATan2(values[AliDielectronVarManager::kPt],values[AliDielectronVarManager::kPz]); | |
640 | values[AliDielectronVarManager::kEta] = ((values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])) : -9999.); | |
641 | values[AliDielectronVarManager::kE] = p1->E()+p2->E(); | |
642 | values[AliDielectronVarManager::kY] = ((values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])) : -9999.); | |
643 | values[AliDielectronVarManager::kCharge] = p1->Charge()+p2->Charge(); | |
644 | ||
645 | values[AliDielectronVarManager::kM] = p1->M()*p1->M()+p2->M()*p2->M()+ | |
646 | 2.0*(p1->E()*p2->E()-p1->Px()*p2->Px()-p1->Py()*p2->Py()-p1->Pz()*p2->Pz()); | |
647 | ||
648 | if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values); | |
649 | } | |
650 | } | |
651 | ||
652 | ||
b2a297fa | 653 | inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values) |
654 | { | |
655 | // | |
656 | // Fill track information available for histogramming into an array | |
657 | // | |
658 | ||
554e40f8 | 659 | values[AliDielectronVarManager::kNclsITS] = 0; |
660 | values[AliDielectronVarManager::kNclsTPC] = 0; | |
661 | values[AliDielectronVarManager::kNclsTPCiter1] = 0; | |
662 | values[AliDielectronVarManager::kNFclsTPC] = 0; | |
663 | values[AliDielectronVarManager::kNclsTRD] = 0; | |
664 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
665 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
666 | values[AliDielectronVarManager::kTPCchi2Cl] = 0; | |
667 | values[AliDielectronVarManager::kTrackStatus] = 0; | |
668 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
669 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
670 | values[AliDielectronVarManager::kTPCsignalN] = 0; | |
ba15fdfb | 671 | values[AliDielectronVarManager::kTPCsignalNfrac]= 0; |
554e40f8 | 672 | values[AliDielectronVarManager::kImpactParXY] = 0; |
673 | values[AliDielectronVarManager::kImpactParZ] = 0; | |
674 | values[AliDielectronVarManager::kPIn] = 0; | |
675 | values[AliDielectronVarManager::kTPCsignal] = 0; | |
676 | values[AliDielectronVarManager::kTPCnSigmaEle] = 0; | |
677 | values[AliDielectronVarManager::kTPCnSigmaPio] = 0; | |
678 | values[AliDielectronVarManager::kTPCnSigmaMuo] = 0; | |
679 | values[AliDielectronVarManager::kTPCnSigmaKao] = 0; | |
680 | values[AliDielectronVarManager::kTPCnSigmaPro] = 0; | |
681 | values[AliDielectronVarManager::kITSclusterMap] = 0; | |
682 | ||
ba15fdfb | 683 | values[AliDielectronVarManager::kPdgCode] = -1; |
684 | values[AliDielectronVarManager::kPdgCodeMother] = -1; | |
685 | values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; | |
554e40f8 | 686 | |
b2a297fa | 687 | // Fill common AliVParticle interface information |
688 | FillVarVParticle(particle, values); | |
554e40f8 | 689 | |
8df8e382 | 690 | AliDielectronMC *mc=AliDielectronMC::Instance(); |
691 | ||
692 | ||
b2a297fa | 693 | // Fill AliAODMCParticle interface specific information |
8df8e382 | 694 | values[AliDielectronVarManager::kPdgCode] = particle->PdgCode(); |
695 | ||
ba15fdfb | 696 | AliAODMCParticle *motherMC = mc->GetMCTrackMother(particle); |
697 | if (motherMC){ | |
698 | values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode(); | |
699 | motherMC=mc->GetMCTrackMother(motherMC); //grand mother | |
700 | if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();; | |
701 | } | |
702 | ||
703 | ||
fb7d2d99 | 704 | values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle); |
8df8e382 | 705 | |
706 | values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle); | |
b2a297fa | 707 | } |
708 | ||
709 | inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values) | |
710 | { | |
711 | // | |
712 | // Fill pair information available for histogramming into an array | |
713 | // | |
2a14a7b1 | 714 | |
ba15fdfb | 715 | values[AliDielectronVarManager::kPdgCode]=-1; |
716 | values[AliDielectronVarManager::kPdgCodeMother]=-1; | |
717 | values[AliDielectronVarManager::kPdgCodeGrandMother]=-1; | |
2a14a7b1 | 718 | |
b2a297fa | 719 | // Fill common AliVParticle interface information |
720 | FillVarVParticle(pair, values); | |
721 | ||
722 | // Fill AliDielectronPair specific information | |
723 | const AliKFParticle &kfPair = pair->GetKFParticle(); | |
61d106d3 | 724 | |
725 | Double_t thetaHE=0; | |
726 | Double_t phiHE=0; | |
727 | Double_t thetaCS=0; | |
728 | Double_t phiCS=0; | |
729 | ||
730 | pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS); | |
731 | ||
b2a297fa | 732 | values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF(); |
733 | values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength(); | |
734 | values[AliDielectronVarManager::kR] = kfPair.GetR(); | |
735 | values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle(); | |
61d106d3 | 736 | values[AliDielectronVarManager::kThetaHE] = thetaHE; |
737 | values[AliDielectronVarManager::kPhiHE] = phiHE; | |
738 | values[AliDielectronVarManager::kThetaCS] = thetaCS; | |
739 | values[AliDielectronVarManager::kPhiCS] = phiCS; | |
572b0139 | 740 | values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters(); |
741 | values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY(); | |
61d106d3 | 742 | values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta(); |
743 | values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi(); | |
8df8e382 | 744 | values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000; |
b2a297fa | 745 | values[AliDielectronVarManager::kPairType] = pair->GetType(); |
ba15fdfb | 746 | values[AliDielectronVarManager::kPseudoProperTime] = pair->GetPseudoProperTime(fgEvent->GetPrimaryVertex()); |
8df8e382 | 747 | |
748 | ||
749 | AliDielectronMC *mc=AliDielectronMC::Instance(); | |
750 | ||
751 | if (mc->HasMC()){ | |
ba15fdfb | 752 | Bool_t samemother = mc->HaveSameMother(pair); |
753 | values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(pair); | |
754 | values[AliDielectronVarManager::kHaveSameMother] = samemother ; | |
755 | ||
8df8e382 | 756 | }//if (mc->HasMC()) |
757 | ||
758 | ||
b2a297fa | 759 | } |
760 | ||
1201a1a9 | 761 | inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *particle, Double_t * const values) |
762 | { | |
763 | // | |
764 | // Fill track information available in AliVParticle into an array | |
765 | // | |
766 | values[AliDielectronVarManager::kPx] = particle->GetPx(); | |
767 | values[AliDielectronVarManager::kPy] = particle->GetPy(); | |
768 | values[AliDielectronVarManager::kPz] = particle->GetPz(); | |
769 | values[AliDielectronVarManager::kPt] = particle->GetPt(); | |
770 | values[AliDielectronVarManager::kP] = particle->GetP(); | |
771 | ||
772 | values[AliDielectronVarManager::kXv] = particle->GetX(); | |
773 | values[AliDielectronVarManager::kYv] = particle->GetY(); | |
774 | values[AliDielectronVarManager::kZv] = particle->GetZ(); | |
775 | ||
776 | values[AliDielectronVarManager::kOneOverPt] = 0; | |
777 | values[AliDielectronVarManager::kPhi] = particle->GetPhi(); | |
778 | values[AliDielectronVarManager::kTheta] = 0.; | |
779 | values[AliDielectronVarManager::kEta] = particle->GetEta(); | |
780 | values[AliDielectronVarManager::kY] = ((particle->GetE()*particle->GetE()-particle->GetPx()*particle->GetPx()-particle->GetPy()*particle->GetPy()-particle->GetPz()*particle->GetPz())>0.) ? TLorentzVector(particle->GetPx(),particle->GetPy(),particle->GetPz(),particle->GetE()).Rapidity() : -1111.; | |
781 | ||
782 | values[AliDielectronVarManager::kE] = particle->GetE(); | |
783 | values[AliDielectronVarManager::kM] = particle->GetMass(); | |
784 | values[AliDielectronVarManager::kCharge] = particle->GetQ(); | |
785 | ||
786 | values[AliDielectronVarManager::kNclsITS] = 0; | |
787 | values[AliDielectronVarManager::kNclsTPC] = 0; | |
788 | values[AliDielectronVarManager::kNclsTPCiter1] = 0; | |
789 | values[AliDielectronVarManager::kNFclsTPC] = 0; | |
790 | values[AliDielectronVarManager::kNclsTRD] = 0; | |
791 | values[AliDielectronVarManager::kTRDntracklets] = 0; | |
792 | values[AliDielectronVarManager::kTRDpidQuality] = 0; | |
793 | values[AliDielectronVarManager::kTPCchi2Cl] = 0; | |
794 | values[AliDielectronVarManager::kTrackStatus] = 0; | |
795 | values[AliDielectronVarManager::kTRDprobEle] = 0; | |
796 | values[AliDielectronVarManager::kTRDprobPio] = 0; | |
797 | values[AliDielectronVarManager::kTPCsignalN] = 0; | |
ba15fdfb | 798 | values[AliDielectronVarManager::kTPCsignalNfrac]= 0; |
1201a1a9 | 799 | values[AliDielectronVarManager::kImpactParXY] = 0; |
800 | values[AliDielectronVarManager::kImpactParZ] = 0; | |
801 | values[AliDielectronVarManager::kPIn] = 0; | |
802 | values[AliDielectronVarManager::kTPCsignal] = 0; | |
ba15fdfb | 803 | values[AliDielectronVarManager::kTOFsignal] = 0; |
804 | values[AliDielectronVarManager::kTOFbeta] = 0; | |
1201a1a9 | 805 | values[AliDielectronVarManager::kTPCnSigmaEle] = 0; |
806 | values[AliDielectronVarManager::kTPCnSigmaPio] = 0; | |
807 | values[AliDielectronVarManager::kTPCnSigmaMuo] = 0; | |
808 | values[AliDielectronVarManager::kTPCnSigmaKao] = 0; | |
809 | values[AliDielectronVarManager::kTPCnSigmaPro] = 0; | |
810 | values[AliDielectronVarManager::kITSclusterMap] = 0; | |
811 | ||
ba15fdfb | 812 | values[AliDielectronVarManager::kPdgCode] = -1; |
813 | values[AliDielectronVarManager::kPdgCodeMother] = -1; | |
814 | values[AliDielectronVarManager::kPdgCodeGrandMother] = -1; | |
1201a1a9 | 815 | |
816 | ||
817 | if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values); | |
818 | } | |
6551594b | 819 | |
820 | inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values) | |
821 | { | |
822 | // | |
823 | // Fill event information available for histogramming into an array | |
824 | // | |
825 | const AliVVertex *primVtx = event->GetPrimaryVertex(); | |
8df8e382 | 826 | |
827 | values[AliDielectronVarManager::kXvPrim] = 0; | |
828 | values[AliDielectronVarManager::kYvPrim] = 0; | |
829 | values[AliDielectronVarManager::kZvPrim] = 0; | |
ba15fdfb | 830 | // values[AliDielectronVarManager::kChi2NDF] = 0; //This is the pair value!!! |
8df8e382 | 831 | |
832 | values[AliDielectronVarManager::kNTrk] = 0; | |
ba15fdfb | 833 | values[AliDielectronVarManager::kNacc] = 0; |
834 | values[AliDielectronVarManager::kNaccTrcklts] = 0; | |
8df8e382 | 835 | values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0; |
836 | ||
837 | if (!primVtx) return; | |
838 | ||
6551594b | 839 | values[AliDielectronVarManager::kXvPrim] = primVtx->GetX(); |
840 | values[AliDielectronVarManager::kYvPrim] = primVtx->GetY(); | |
841 | values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ(); | |
ba15fdfb | 842 | // values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value |
6551594b | 843 | |
844 | values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks(); | |
ba15fdfb | 845 | values[AliDielectronVarManager::kNacc] = AliDielectronHelper::GetNacc(event); |
846 | values[AliDielectronVarManager::kNaccTrcklts] = AliDielectronHelper::GetNaccTrcklts(event); | |
6551594b | 847 | } |
848 | ||
849 | inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values) | |
850 | { | |
851 | // | |
852 | // Fill event information available for histogramming into an array | |
853 | // | |
854 | ||
855 | // Fill common AliVEvent interface information | |
856 | FillVarVEvent(event, values); | |
ffbede40 | 857 | |
858 | Double_t centralityF=-1; | |
4649c75b | 859 | AliCentrality *esdCentrality = const_cast<AliESDEvent*>(event)->GetCentrality(); |
ffbede40 | 860 | if (esdCentrality) centralityF = esdCentrality->GetCentralityPercentile("V0M"); |
861 | ||
6551594b | 862 | // Fill AliESDEvent interface specific information |
863 | const AliESDVertex *primVtx = event->GetPrimaryVertex(); | |
864 | values[AliDielectronVarManager::kXRes] = primVtx->GetXRes(); | |
865 | values[AliDielectronVarManager::kYRes] = primVtx->GetYRes(); | |
866 | values[AliDielectronVarManager::kZRes] = primVtx->GetZRes(); | |
ffbede40 | 867 | values[AliDielectronVarManager::kCentrality] = centralityF; |
6551594b | 868 | } |
869 | ||
870 | inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values) | |
871 | { | |
872 | // | |
873 | // Fill event information available for histogramming into an array | |
874 | // | |
875 | ||
876 | // Fill common AliVEvent interface information | |
877 | FillVarVEvent(event, values); | |
878 | ||
879 | // Fill AliAODEvent interface specific information | |
880 | } | |
881 | ||
882 | inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values) | |
883 | { | |
884 | // | |
885 | // Fill event information available for histogramming into an array | |
886 | // | |
887 | ||
888 | // Fill common AliVEvent interface information | |
889 | FillVarVEvent(event, values); | |
890 | ||
891 | // Fill AliMCEvent interface specific information | |
ba15fdfb | 892 | values[AliDielectronVarManager::kNch] = AliDielectronHelper::GetNch(event, 1.6); |
6551594b | 893 | } |
894 | ||
895 | inline void AliDielectronVarManager::InitESDpid(Int_t type) | |
896 | { | |
897 | // | |
898 | // initialize PID parameters | |
899 | // type=0 is simulation | |
900 | // type=1 is data | |
901 | ||
ba15fdfb | 902 | if (!fgPIDResponse) fgPIDResponse=new AliESDpid((Bool_t)(type==0)); |
6551594b | 903 | Double_t alephParameters[5]; |
904 | // simulation | |
905 | alephParameters[0] = 2.15898e+00/50.; | |
906 | alephParameters[1] = 1.75295e+01; | |
907 | alephParameters[2] = 3.40030e-09; | |
908 | alephParameters[3] = 1.96178e+00; | |
909 | alephParameters[4] = 3.91720e+00; | |
ba15fdfb | 910 | fgPIDResponse->GetTOFResponse().SetTimeResolution(80.); |
6551594b | 911 | |
912 | // data | |
83e37742 | 913 | if (type==1){ |
914 | alephParameters[0] = 0.0283086/0.97; | |
6551594b | 915 | alephParameters[1] = 2.63394e+01; |
916 | alephParameters[2] = 5.04114e-11; | |
917 | alephParameters[3] = 2.12543e+00; | |
918 | alephParameters[4] = 4.88663e+00; | |
ba15fdfb | 919 | fgPIDResponse->GetTOFResponse().SetTimeResolution(130.); |
920 | fgPIDResponse->GetTPCResponse().SetMip(50.); | |
6551594b | 921 | } |
922 | ||
ba15fdfb | 923 | fgPIDResponse->GetTPCResponse().SetBetheBlochParameters( |
6551594b | 924 | alephParameters[0],alephParameters[1],alephParameters[2], |
925 | alephParameters[3],alephParameters[4]); | |
926 | ||
ba15fdfb | 927 | fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04); |
6551594b | 928 | } |
929 | ||
2a14a7b1 | 930 | inline void AliDielectronVarManager::InitAODpidUtil(Int_t type) |
931 | { | |
ba15fdfb | 932 | if (!fgPIDResponse) fgPIDResponse=new AliAODpidUtil; |
2a14a7b1 | 933 | Double_t alephParameters[5]; |
934 | // simulation | |
935 | alephParameters[0] = 2.15898e+00/50.; | |
936 | alephParameters[1] = 1.75295e+01; | |
937 | alephParameters[2] = 3.40030e-09; | |
938 | alephParameters[3] = 1.96178e+00; | |
939 | alephParameters[4] = 3.91720e+00; | |
ba15fdfb | 940 | fgPIDResponse->GetTOFResponse().SetTimeResolution(80.); |
2a14a7b1 | 941 | |
942 | // data | |
943 | if (type==1){ | |
944 | alephParameters[0] = 0.0283086/0.97; | |
945 | alephParameters[1] = 2.63394e+01; | |
946 | alephParameters[2] = 5.04114e-11; | |
947 | alephParameters[3] = 2.12543e+00; | |
948 | alephParameters[4] = 4.88663e+00; | |
ba15fdfb | 949 | fgPIDResponse->GetTOFResponse().SetTimeResolution(130.); |
950 | fgPIDResponse->GetTPCResponse().SetMip(50.); | |
2a14a7b1 | 951 | } |
952 | ||
ba15fdfb | 953 | fgPIDResponse->GetTPCResponse().SetBetheBlochParameters( |
2a14a7b1 | 954 | alephParameters[0],alephParameters[1],alephParameters[2], |
955 | alephParameters[3],alephParameters[4]); | |
956 | ||
ba15fdfb | 957 | fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04); |
2a14a7b1 | 958 | } |
959 | ||
572b0139 | 960 | |
961 | inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev) | |
962 | { | |
963 | ||
964 | fgEvent = ev; | |
965 | if (fgKFVertex) delete fgKFVertex; | |
966 | fgKFVertex=0x0; | |
8df8e382 | 967 | if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex()); |
ba15fdfb | 968 | |
969 | for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i) fgData[i]=0.; | |
970 | AliDielectronVarManager::Fill(fgEvent, fgData); | |
572b0139 | 971 | } |
2a14a7b1 | 972 | |
973 | ||
974 | inline Bool_t AliDielectronVarManager::GetDCA(const AliAODTrack *track, Double_t d0z0[2]) | |
975 | { | |
976 | if(track->TestBit(AliAODTrack::kIsDCA)){ | |
977 | d0z0[0]=track->DCA(); | |
978 | d0z0[1]=track->ZAtDCA(); | |
979 | return kTRUE; | |
980 | } | |
981 | ||
982 | Double_t covd0z0[3]; | |
983 | AliAODTrack copy(*track); | |
984 | AliAODVertex *vtx =(AliAODVertex*)(fgEvent->GetPrimaryVertex()); | |
985 | Double_t fBzkG = fgEvent->GetMagneticField(); // z componenent of field in kG | |
986 | Bool_t ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0); | |
987 | if(!ok){ | |
988 | d0z0[0]=-999.; | |
989 | d0z0[1]=-999.; | |
990 | } | |
991 | return ok; | |
992 | } | |
993 | ||
b2a297fa | 994 | /* |
995 | inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values) | |
996 | { | |
997 | // | |
998 | // Fill track information available for histogramming into an array | |
999 | // | |
1000 | ||
1001 | // Fill TParticle interface information | |
1002 | values[AliDielectronVarManager::kPx] = particle->Px(); | |
1003 | values[AliDielectronVarManager::kPy] = particle->Py(); | |
1004 | values[AliDielectronVarManager::kPz] = particle->Pz(); | |
1005 | values[AliDielectronVarManager::kPt] = particle->Pt(); | |
1006 | values[AliDielectronVarManager::kP] = particle->P(); | |
1007 | ||
1008 | values[AliDielectronVarManager::kXv] = particle->Vx(); | |
1009 | values[AliDielectronVarManager::kYv] = particle->Vy(); | |
1010 | values[AliDielectronVarManager::kZv] = particle->Vz(); | |
1011 | ||
1012 | values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt(); | |
1013 | values[AliDielectronVarManager::kPhi] = particle->Phi(); | |
1014 | values[AliDielectronVarManager::kTheta] = | |
1015 | values[AliDielectronVarManager::kEta] = particle->Eta(); | |
1016 | values[AliDielectronVarManager::kY] = | |
1017 | ||
1018 | values[AliDielectronVarManager::kE] = particle->Energy(); | |
1019 | values[AliDielectronVarManager::kM] = particle->GetMass(); | |
1020 | ||
1021 | values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly | |
1022 | ||
1023 | }*/ | |
1024 | ||
1025 | #endif | |
fb7d2d99 | 1026 |