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 */
6 //#############################################################
8 //# Class AliDielectronVarManager #
9 //# Class for management of available variables #
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 #
15 //# Markus Köhler, GSI / M.Koehler@gsi.de #
16 //# Frederick Kramer, Uni Ffm / Frederick.Kramer@cern.ch #
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 #
21 //#############################################################
26 #include <AliVEvent.h>
27 #include <AliESDEvent.h>
28 #include <AliAODEvent.h>
29 #include <AliMCEvent.h>
30 #include <AliVVertex.h>
31 #include <AliESDVertex.h>
33 #include <AliVParticle.h>
34 #include <AliESDtrack.h>
35 #include <AliAODTrack.h>
36 #include <AliAODPid.h>
37 #include <AliKFParticle.h>
38 #include <AliKFVertex.h>
39 #include <AliMCParticle.h>
40 #include <AliAODMCParticle.h>
41 #include <AliVTrack.h> // ?
43 #include <AliExternalTrackParam.h>
44 #include <AliESDpid.h>
47 #include "AliDielectronPair.h"
48 #include "AliDielectronMC.h"
52 //________________________________________________________________
53 class AliDielectronVarManager : public TNamed {
57 // Particle specific variables
62 kPt, // transverse momentum
64 kXv, // vertex position in x
65 kYv, // vertex position in y
66 kZv, // vertex position in z
69 kTheta, // theta angle
70 kEta, // pseudo-rapidity
75 kNclsITS, // number of clusters assigned in the ITS
76 kNclsTPC, // number of clusters assigned in the TPC
77 kNFclsTPC, // number of findable clusters in the TPC
78 kTPCsignalN, // number of points used for dEdx
80 kNclsTRD, // number of clusters assigned in the TRD
81 kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter
82 kTRDpidQuality, // number of TRD tracklets used for PID
83 kTRDprobEle, // TRD electron pid probability
84 kTRDprobPio, // TRD electron pid probability
86 kImpactParXY, // Impact parameter in XY plane
87 kImpactParZ, // Impact parameter in Z
88 kTrackLength, // Track length
91 kPdgCodeMother, // PDG code of the mother
93 kNumberOfDaughters, // number of daughters
94 kHaveSameMother, // check that particles have the same mother (MC)
95 kITSsignal, // ITS dE/dx signal
96 kITSsignalSSD1, // SSD1 dE/dx signal
97 kITSsignalSSD2, // SSD2 dE/dx signal
98 kITSsignalSDD1, // SDD1 dE/dx signal
99 kITSsignalSDD2, // SDD2 dE/dx signal
100 kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS
101 kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS
102 kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS
103 kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS
104 kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS
106 kPIn, // momentum at inner wall of TPC (if available), used for PID
107 kTPCsignal, // TPC dE/dx signal
109 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
110 kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC
111 kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC
112 kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC
113 kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC
115 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
116 kTOFnSigmaPio, // number of sigmas to the pion line in the TOF
117 kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF
118 kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF
119 kTOFnSigmaPro, // number of sigmas to the proton line in the TOF
122 // TODO: kRNClusters ??
123 // AliDielectronPair specific variables
124 kChi2NDF = kParticleMax, // Chi^2/NDF
125 kDecayLength, // decay length
126 kR, // distance to the origin
127 kOpeningAngle, // opening angle
128 // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector
129 kThetaHE, // theta in mother's rest frame in the helicity picture
130 kPhiHE, // phi in mother's rest frame in the helicity picture
131 // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between
132 // the 3-mom vectors of target and projectile beams
133 kThetaCS, // theta in mother's rest frame in Collins-Soper picture
134 kPhiCS, // phi in mother's rest frame in Collins-Soper picture
135 kLegDist, // distance of the legs
136 kLegDistXY, // distance of the legs in XY
137 kMerr, // error of mass calculation
138 kDCA, // distance of closest approach TODO: not implemented yet
139 kPairType, // type of the pair, like like sign ++ unlikesign ...
141 // Event specific variables
142 kXvPrim=kPairMax, // prim vertex
143 kYvPrim, // prim vertex
144 kZvPrim, // prim vertex
145 kXRes, // primary vertex x-resolution
146 kYRes, // primary vertex y-resolution
147 kZRes, // primary vertex z-resolution
148 kNTrk, // number of tracks (or tracklets)
149 kTracks, // ESD tracks
150 kNevents, // event counter
152 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
156 AliDielectronVarManager();
157 AliDielectronVarManager(const char* name, const char* title);
158 virtual ~AliDielectronVarManager();
159 static void Fill(const TObject* particle, Double_t * const values);
161 static void InitESDpid(Int_t type=0);
162 static void SetESDpid(AliESDpid * const pid) {fgESDpid=pid;}
163 static AliESDpid* GetESDpid() {return fgESDpid;}
164 static void SetEvent(AliVEvent * const ev);
166 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
169 static const char* fgkParticleNames[kNMaxValues]; //variable names
171 static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
172 static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values);
173 static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values);
174 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
175 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
176 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
177 static void FillVarVEvent(const AliVEvent *event, Double_t * const values);
178 static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values);
179 static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values);
180 static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values);
182 static AliESDpid* fgESDpid; // ESD pid object
183 static AliVEvent* fgEvent; // current event pointer
184 static AliKFVertex *fgKFVertex; // kf vertex
186 AliDielectronVarManager(const AliDielectronVarManager &c);
187 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
189 ClassDef(AliDielectronVarManager,1);
194 inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
197 // Main function to fill all available variables according to the type of particle
200 if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values);
201 else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values);
202 else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values);
203 else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values);
204 else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values);
206 // Main function to fill all available variables according to the type of event
208 else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values);
209 else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values);
210 else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values);
211 else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values);
212 // else Error("Fill",Form("Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed
215 inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
218 // Fill track information available in AliVParticle into an array
220 values[AliDielectronVarManager::kPx] = particle->Px();
221 values[AliDielectronVarManager::kPy] = particle->Py();
222 values[AliDielectronVarManager::kPz] = particle->Pz();
223 values[AliDielectronVarManager::kPt] = particle->Pt();
224 values[AliDielectronVarManager::kP] = particle->P();
226 values[AliDielectronVarManager::kXv] = particle->Xv();
227 values[AliDielectronVarManager::kYv] = particle->Yv();
228 values[AliDielectronVarManager::kZv] = particle->Zv();
230 values[AliDielectronVarManager::kOneOverPt] = particle->OneOverPt();
231 values[AliDielectronVarManager::kPhi] = particle->Phi();
232 values[AliDielectronVarManager::kTheta] = particle->Theta();
233 values[AliDielectronVarManager::kEta] = particle->Eta();
234 values[AliDielectronVarManager::kY] = particle->Y();
236 values[AliDielectronVarManager::kE] = particle->E();
237 values[AliDielectronVarManager::kM] = particle->M();
238 values[AliDielectronVarManager::kCharge] = particle->Charge();
240 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
243 inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
246 // Fill track information available for histogramming into an array
249 // Fill common AliVParticle interface information
250 FillVarVParticle(particle, values);
252 Double_t pidProbs[AliPID::kSPECIES];
253 // Fill AliESDtrack interface specific information
254 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
255 values[AliDielectronVarManager::kNclsTPC] = particle->GetNcls(1); // TODO: get rid of the plain numbers
256 values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
257 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCsignalN();
258 values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers
259 values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
260 values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality();
263 particle->GetTRDpid(pidProbs);
264 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
265 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
267 Float_t impactParXY, impactParZ;
268 particle->GetImpactParameters(impactParXY, impactParZ);
269 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
270 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
273 values[AliDielectronVarManager::kPdgCode]=0;
274 values[AliDielectronVarManager::kPdgCodeMother]=0;
276 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
278 AliDielectronMC *mc=AliDielectronMC::Instance();
281 if (mc->GetMCTrack(particle))
282 values[AliDielectronVarManager::kPdgCode]=
283 mc->GetMCTrack(particle)->PdgCode();
285 Int_t pdgMother=mc->GetMotherPDG(particle);
287 values[AliDielectronVarManager::kPdgCodeMother]=pdgMother;
289 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
294 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
297 particle->GetITSdEdxSamples(itsdEdx);
299 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
300 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
301 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
302 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
304 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
306 Double_t mom = particle->GetP();
307 const AliExternalTrackParam *in=particle->GetInnerParam();
308 if (in) mom = in->GetP();
309 values[AliDielectronVarManager::kPIn]=mom;
310 values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal();
311 // nsigma to Electron band
312 // TODO: for the moment we set the bethe bloch parameters manually
313 // this should be changed in future!
314 values[AliDielectronVarManager::kTPCnSigmaEle]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kElectron);
315 values[AliDielectronVarManager::kTPCnSigmaPio]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kPion);
316 values[AliDielectronVarManager::kTPCnSigmaMuo]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kMuon);
317 values[AliDielectronVarManager::kTPCnSigmaKao]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kKaon);
318 values[AliDielectronVarManager::kTPCnSigmaPro]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kProton);
320 values[AliDielectronVarManager::kITSnSigmaEle]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kElectron);
321 values[AliDielectronVarManager::kITSnSigmaPio]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kPion);
322 values[AliDielectronVarManager::kITSnSigmaMuo]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kMuon);
323 values[AliDielectronVarManager::kITSnSigmaKao]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kKaon);
324 values[AliDielectronVarManager::kITSnSigmaPro]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kProton);
326 Double_t t0=fgESDpid->GetTOFResponse().GetTimeZero();
327 values[AliDielectronVarManager::kTOFnSigmaEle]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kElectron,t0);
328 values[AliDielectronVarManager::kTOFnSigmaPio]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kPion,t0);
329 values[AliDielectronVarManager::kTOFnSigmaMuo]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kMuon,t0);
330 values[AliDielectronVarManager::kTOFnSigmaKao]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kKaon,t0);
331 values[AliDielectronVarManager::kTOFnSigmaPro]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kProton,t0);
334 inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
337 // Fill track information available for histogramming into an array
340 // Fill common AliVParticle interface information
341 FillVarVParticle(particle, values);
343 // Reset AliESDtrack interface specific information
344 values[AliDielectronVarManager::kNclsITS] = 0;
345 values[AliDielectronVarManager::kNclsTPC] = 0;
346 values[AliDielectronVarManager::kNFclsTPC] = 0;
347 values[AliDielectronVarManager::kNclsTRD] = 0;
348 values[AliDielectronVarManager::kTRDntracklets] = 0;
349 values[AliDielectronVarManager::kTRDpidQuality] = 0;
352 //TODO: set correctly
353 values[AliDielectronVarManager::kTRDprobEle] = 0;
354 values[AliDielectronVarManager::kTRDprobPio] = 0;
356 //TODO: This is only an approximation!!!
357 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCClusterMap().CountBits();
359 // Fill AliAODTrack interface information
361 values[AliDielectronVarManager::kImpactParXY] = particle->DCA();
362 values[AliDielectronVarManager::kImpactParZ] = particle->ZAtDCA();
364 values[AliDielectronVarManager::kPIn]=0;
365 values[AliDielectronVarManager::kTPCsignal]=0;
367 values[AliDielectronVarManager::kTPCnSigmaEle]=0;
368 values[AliDielectronVarManager::kTPCnSigmaPio]=0;
369 values[AliDielectronVarManager::kTPCnSigmaMuo]=0;
370 values[AliDielectronVarManager::kTPCnSigmaKao]=0;
371 values[AliDielectronVarManager::kTPCnSigmaPro]=0;
374 AliAODPid *pid=particle->GetDetPid();
376 Double_t mom =pid->GetTPCmomentum();
377 //TODO: kTPCsignalN is only an approximation (see above)!!
379 Double_t tpcNsigmaEle=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
380 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]) ,AliPID::kElectron);
381 Double_t tpcNsigmaPio=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
382 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kPion);
383 Double_t tpcNsigmaMuo=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
384 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kMuon);
385 Double_t tpcNsigmaKao=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
386 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kKaon);
387 Double_t tpcNsigmaPro=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
388 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kProton);
390 values[AliDielectronVarManager::kPIn]=pid->GetTPCmomentum();
391 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
393 values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle;
394 values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio;
395 values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo;
396 values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao;
397 values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
399 values[AliDielectronVarManager::kTRDntracklets] = 0;
400 values[AliDielectronVarManager::kTRDpidQuality] = 0;
405 inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
408 // Fill track information available for histogramming into an array
411 // Fill common AliVParticle interface information
412 FillVarVParticle(particle, values);
415 values[AliDielectronVarManager::kPdgCode]=0;
416 values[AliDielectronVarManager::kPdgCodeMother]=0;
418 AliDielectronMC *mc=AliDielectronMC::Instance();
420 // Fill AliMCParticle interface specific information
421 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
423 AliMCParticle *mother = mc->GetMCTrackMother(particle);
424 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
427 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
430 inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
433 // Fill track information available for histogramming into an array
436 // Fill common AliVParticle interface information
437 FillVarVParticle(particle, values);
440 values[AliDielectronVarManager::kPdgCode]=0;
441 values[AliDielectronVarManager::kPdgCodeMother]=0;
443 AliDielectronMC *mc=AliDielectronMC::Instance();
446 // Fill AliAODMCParticle interface specific information
447 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
449 AliVParticle *mother = mc->GetMCTrackMother(particle);
450 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
452 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
455 inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
458 // Fill pair information available for histogramming into an array
461 // Fill common AliVParticle interface information
462 FillVarVParticle(pair, values);
464 // Fill AliDielectronPair specific information
465 const AliKFParticle &kfPair = pair->GetKFParticle();
467 values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF();
468 values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength();
469 values[AliDielectronVarManager::kR] = kfPair.GetR();
470 values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle();
471 values[AliDielectronVarManager::kThetaHE] = pair->ThetaPhiCM(kTRUE, kTRUE);
472 values[AliDielectronVarManager::kPhiHE] = pair->ThetaPhiCM(kTRUE, kFALSE);
473 values[AliDielectronVarManager::kThetaCS] = pair->ThetaPhiCM(kFALSE, kTRUE);
474 values[AliDielectronVarManager::kPhiCS] = pair->ThetaPhiCM(kFALSE, kFALSE);
475 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
476 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
477 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
478 values[AliDielectronVarManager::kPairType] = pair->GetType();
482 AliDielectronMC *mc=AliDielectronMC::Instance();
485 Bool_t samemother = mc->HaveSameMother(pair);
486 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
493 inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
496 // Fill event information available for histogramming into an array
498 const AliVVertex *primVtx = event->GetPrimaryVertex();
500 values[AliDielectronVarManager::kXvPrim] = 0;
501 values[AliDielectronVarManager::kYvPrim] = 0;
502 values[AliDielectronVarManager::kZvPrim] = 0;
503 values[AliDielectronVarManager::kChi2NDF] = 0;
505 values[AliDielectronVarManager::kNTrk] = 0;
506 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
508 if (!primVtx) return;
510 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
511 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
512 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
513 values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF();
515 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
518 inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
521 // Fill event information available for histogramming into an array
524 // Fill common AliVEvent interface information
525 FillVarVEvent(event, values);
527 // Fill AliESDEvent interface specific information
528 const AliESDVertex *primVtx = event->GetPrimaryVertex();
529 values[AliDielectronVarManager::kXRes] = primVtx->GetXRes();
530 values[AliDielectronVarManager::kYRes] = primVtx->GetYRes();
531 values[AliDielectronVarManager::kZRes] = primVtx->GetZRes();
534 inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
537 // Fill event information available for histogramming into an array
540 // Fill common AliVEvent interface information
541 FillVarVEvent(event, values);
543 // Fill AliAODEvent interface specific information
546 inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
549 // Fill event information available for histogramming into an array
552 // Fill common AliVEvent interface information
553 FillVarVEvent(event, values);
555 // Fill AliMCEvent interface specific information
558 inline void AliDielectronVarManager::InitESDpid(Int_t type)
561 // initialize PID parameters
562 // type=0 is simulation
565 if (!fgESDpid) fgESDpid=new AliESDpid;
566 Double_t alephParameters[5];
568 alephParameters[0] = 2.15898e+00/50.;
569 alephParameters[1] = 1.75295e+01;
570 alephParameters[2] = 3.40030e-09;
571 alephParameters[3] = 1.96178e+00;
572 alephParameters[4] = 3.91720e+00;
573 fgESDpid->GetTOFResponse().SetTimeResolution(80.);
577 alephParameters[0] = 0.0283086/0.97;
578 alephParameters[1] = 2.63394e+01;
579 alephParameters[2] = 5.04114e-11;
580 alephParameters[3] = 2.12543e+00;
581 alephParameters[4] = 4.88663e+00;
582 fgESDpid->GetTOFResponse().SetTimeResolution(130.);
583 fgESDpid->GetTPCResponse().SetMip(50.);
586 fgESDpid->GetTPCResponse().SetBetheBlochParameters(
587 alephParameters[0],alephParameters[1],alephParameters[2],
588 alephParameters[3],alephParameters[4]);
590 fgESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
594 inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
598 if (fgKFVertex) delete fgKFVertex;
600 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
603 inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
606 // Fill track information available for histogramming into an array
609 // Fill TParticle interface information
610 values[AliDielectronVarManager::kPx] = particle->Px();
611 values[AliDielectronVarManager::kPy] = particle->Py();
612 values[AliDielectronVarManager::kPz] = particle->Pz();
613 values[AliDielectronVarManager::kPt] = particle->Pt();
614 values[AliDielectronVarManager::kP] = particle->P();
616 values[AliDielectronVarManager::kXv] = particle->Vx();
617 values[AliDielectronVarManager::kYv] = particle->Vy();
618 values[AliDielectronVarManager::kZv] = particle->Vz();
620 values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt();
621 values[AliDielectronVarManager::kPhi] = particle->Phi();
622 values[AliDielectronVarManager::kTheta] =
623 values[AliDielectronVarManager::kEta] = particle->Eta();
624 values[AliDielectronVarManager::kY] =
626 values[AliDielectronVarManager::kE] = particle->Energy();
627 values[AliDielectronVarManager::kM] = particle->GetMass();
629 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly