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
79 kTPCchi2Cl, // chi2/cl in TPC
80 kTrackStatus, // track status bits
82 kNclsTRD, // number of clusters assigned in the TRD
83 kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter
84 kTRDpidQuality, // number of TRD tracklets used for PID
85 kTRDprobEle, // TRD electron pid probability
86 kTRDprobPio, // TRD electron pid probability
88 kImpactParXY, // Impact parameter in XY plane
89 kImpactParZ, // Impact parameter in Z
90 kTrackLength, // Track length
93 kPdgCodeMother, // PDG code of the mother
95 kNumberOfDaughters, // number of daughters
96 kHaveSameMother, // check that particles have the same mother (MC)
97 kITSsignal, // ITS dE/dx signal
98 kITSsignalSSD1, // SSD1 dE/dx signal
99 kITSsignalSSD2, // SSD2 dE/dx signal
100 kITSsignalSDD1, // SDD1 dE/dx signal
101 kITSsignalSDD2, // SDD2 dE/dx signal
102 kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS
103 kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS
104 kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS
105 kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS
106 kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS
108 kPIn, // momentum at inner wall of TPC (if available), used for PID
109 kTPCsignal, // TPC dE/dx signal
111 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
112 kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC
113 kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC
114 kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC
115 kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC
117 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
118 kTOFnSigmaPio, // number of sigmas to the pion line in the TOF
119 kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF
120 kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF
121 kTOFnSigmaPro, // number of sigmas to the proton line in the TOF
124 // TODO: kRNClusters ??
125 // AliDielectronPair specific variables
126 kChi2NDF = kParticleMax, // Chi^2/NDF
127 kDecayLength, // decay length
128 kR, // distance to the origin
129 kOpeningAngle, // opening angle
130 // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector
131 kThetaHE, // theta in mother's rest frame in the helicity picture
132 kPhiHE, // phi in mother's rest frame in the helicity picture
133 // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between
134 // the 3-mom vectors of target and projectile beams
135 kThetaCS, // theta in mother's rest frame in Collins-Soper picture
136 kPhiCS, // phi in mother's rest frame in Collins-Soper picture
137 kLegDist, // distance of the legs
138 kLegDistXY, // distance of the legs in XY
139 kDeltaEta, // Absolute value of Delta Eta for the legs
140 kDeltaPhi, // Absolute value of Delta Phi for the legs
141 kMerr, // error of mass calculation
142 kDCA, // distance of closest approach TODO: not implemented yet
143 kPairType, // type of the pair, like like sign ++ unlikesign ...
145 // Event specific variables
146 kXvPrim=kPairMax, // prim vertex
147 kYvPrim, // prim vertex
148 kZvPrim, // prim vertex
149 kXRes, // primary vertex x-resolution
150 kYRes, // primary vertex y-resolution
151 kZRes, // primary vertex z-resolution
152 kNTrk, // number of tracks (or tracklets)
153 kTracks, // ESD tracks
154 kNevents, // event counter
156 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
160 AliDielectronVarManager();
161 AliDielectronVarManager(const char* name, const char* title);
162 virtual ~AliDielectronVarManager();
163 static void Fill(const TObject* particle, Double_t * const values);
165 static void InitESDpid(Int_t type=0);
166 static void SetESDpid(AliESDpid * const pid) {fgESDpid=pid;}
167 static AliESDpid* GetESDpid() {return fgESDpid;}
168 static void SetEvent(AliVEvent * const ev);
170 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
173 static const char* fgkParticleNames[kNMaxValues]; //variable names
175 static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
176 static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values);
177 static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values);
178 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
179 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
180 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
181 static void FillVarVEvent(const AliVEvent *event, Double_t * const values);
182 static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values);
183 static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values);
184 static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values);
186 static AliESDpid* fgESDpid; // ESD pid object
187 static AliVEvent* fgEvent; // current event pointer
188 static AliKFVertex *fgKFVertex; // kf vertex
190 AliDielectronVarManager(const AliDielectronVarManager &c);
191 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
193 ClassDef(AliDielectronVarManager,1);
198 inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
201 // Main function to fill all available variables according to the type of particle
204 if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values);
205 else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values);
206 else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values);
207 else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values);
208 else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values);
210 // Main function to fill all available variables according to the type of event
212 else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values);
213 else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values);
214 else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values);
215 else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values);
216 // else Error("Fill",Form("Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed
219 inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
222 // Fill track information available in AliVParticle into an array
224 values[AliDielectronVarManager::kPx] = particle->Px();
225 values[AliDielectronVarManager::kPy] = particle->Py();
226 values[AliDielectronVarManager::kPz] = particle->Pz();
227 values[AliDielectronVarManager::kPt] = particle->Pt();
228 values[AliDielectronVarManager::kP] = particle->P();
230 values[AliDielectronVarManager::kXv] = particle->Xv();
231 values[AliDielectronVarManager::kYv] = particle->Yv();
232 values[AliDielectronVarManager::kZv] = particle->Zv();
234 values[AliDielectronVarManager::kOneOverPt] = particle->OneOverPt();
235 values[AliDielectronVarManager::kPhi] = particle->Phi();
236 values[AliDielectronVarManager::kTheta] = particle->Theta();
237 values[AliDielectronVarManager::kEta] = particle->Eta();
238 values[AliDielectronVarManager::kY] = particle->Y();
240 values[AliDielectronVarManager::kE] = particle->E();
241 values[AliDielectronVarManager::kM] = particle->M();
242 values[AliDielectronVarManager::kCharge] = particle->Charge();
244 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
247 inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
250 // Fill track information available for histogramming into an array
253 // Fill common AliVParticle interface information
254 FillVarVParticle(particle, values);
256 Double_t pidProbs[AliPID::kSPECIES];
257 // Fill AliESDtrack interface specific information
258 Double_t tpcNcls=particle->GetNcls(1);
259 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
260 values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
261 values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
262 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCsignalN();
263 values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers
264 values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
265 values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality();
266 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
269 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
270 if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
272 particle->GetTRDpid(pidProbs);
273 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
274 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
276 Float_t impactParXY, impactParZ;
277 particle->GetImpactParameters(impactParXY, impactParZ);
278 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
279 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
282 values[AliDielectronVarManager::kPdgCode]=0;
283 values[AliDielectronVarManager::kPdgCodeMother]=0;
285 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
287 AliDielectronMC *mc=AliDielectronMC::Instance();
290 if (mc->GetMCTrack(particle))
291 values[AliDielectronVarManager::kPdgCode]=
292 mc->GetMCTrack(particle)->PdgCode();
294 Int_t pdgMother=mc->GetMotherPDG(particle);
296 values[AliDielectronVarManager::kPdgCodeMother]=pdgMother;
298 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
303 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
306 particle->GetITSdEdxSamples(itsdEdx);
308 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
309 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
310 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
311 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
313 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
315 Double_t mom = particle->GetP();
316 const AliExternalTrackParam *in=particle->GetInnerParam();
317 if (in) mom = in->GetP();
318 values[AliDielectronVarManager::kPIn]=mom;
319 values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal();
320 // nsigma to Electron band
321 // TODO: for the moment we set the bethe bloch parameters manually
322 // this should be changed in future!
323 values[AliDielectronVarManager::kTPCnSigmaEle]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kElectron);
324 values[AliDielectronVarManager::kTPCnSigmaPio]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kPion);
325 values[AliDielectronVarManager::kTPCnSigmaMuo]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kMuon);
326 values[AliDielectronVarManager::kTPCnSigmaKao]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kKaon);
327 values[AliDielectronVarManager::kTPCnSigmaPro]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kProton);
329 values[AliDielectronVarManager::kITSnSigmaEle]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kElectron);
330 values[AliDielectronVarManager::kITSnSigmaPio]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kPion);
331 values[AliDielectronVarManager::kITSnSigmaMuo]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kMuon);
332 values[AliDielectronVarManager::kITSnSigmaKao]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kKaon);
333 values[AliDielectronVarManager::kITSnSigmaPro]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kProton);
335 Double_t t0=fgESDpid->GetTOFResponse().GetTimeZero();
336 values[AliDielectronVarManager::kTOFnSigmaEle]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kElectron,t0);
337 values[AliDielectronVarManager::kTOFnSigmaPio]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kPion,t0);
338 values[AliDielectronVarManager::kTOFnSigmaMuo]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kMuon,t0);
339 values[AliDielectronVarManager::kTOFnSigmaKao]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kKaon,t0);
340 values[AliDielectronVarManager::kTOFnSigmaPro]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kProton,t0);
343 inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
346 // Fill track information available for histogramming into an array
349 // Fill common AliVParticle interface information
350 FillVarVParticle(particle, values);
352 // Reset AliESDtrack interface specific information
353 values[AliDielectronVarManager::kNclsITS] = 0;
354 values[AliDielectronVarManager::kNclsTPC] = 0;
355 values[AliDielectronVarManager::kNFclsTPC] = 0;
356 values[AliDielectronVarManager::kNclsTRD] = 0;
357 values[AliDielectronVarManager::kTRDntracklets] = 0;
358 values[AliDielectronVarManager::kTRDpidQuality] = 0;
360 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
361 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
364 //TODO: set correctly
365 values[AliDielectronVarManager::kTRDprobEle] = 0;
366 values[AliDielectronVarManager::kTRDprobPio] = 0;
368 //TODO: This is only an approximation!!!
369 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCClusterMap().CountBits();
371 // Fill AliAODTrack interface information
373 values[AliDielectronVarManager::kImpactParXY] = particle->DCA();
374 values[AliDielectronVarManager::kImpactParZ] = particle->ZAtDCA();
376 values[AliDielectronVarManager::kPIn]=0;
377 values[AliDielectronVarManager::kTPCsignal]=0;
379 values[AliDielectronVarManager::kTPCnSigmaEle]=0;
380 values[AliDielectronVarManager::kTPCnSigmaPio]=0;
381 values[AliDielectronVarManager::kTPCnSigmaMuo]=0;
382 values[AliDielectronVarManager::kTPCnSigmaKao]=0;
383 values[AliDielectronVarManager::kTPCnSigmaPro]=0;
386 AliAODPid *pid=particle->GetDetPid();
388 Double_t mom =pid->GetTPCmomentum();
389 //TODO: kTPCsignalN is only an approximation (see above)!!
391 Double_t tpcNsigmaEle=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
392 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]) ,AliPID::kElectron);
393 Double_t tpcNsigmaPio=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
394 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kPion);
395 Double_t tpcNsigmaMuo=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
396 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kMuon);
397 Double_t tpcNsigmaKao=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
398 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kKaon);
399 Double_t tpcNsigmaPro=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
400 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kProton);
402 values[AliDielectronVarManager::kPIn]=pid->GetTPCmomentum();
403 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
405 values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle;
406 values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio;
407 values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo;
408 values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao;
409 values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
411 values[AliDielectronVarManager::kTRDntracklets] = 0;
412 values[AliDielectronVarManager::kTRDpidQuality] = 0;
417 inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
420 // Fill track information available for histogramming into an array
423 // Fill common AliVParticle interface information
424 FillVarVParticle(particle, values);
427 values[AliDielectronVarManager::kPdgCode]=0;
428 values[AliDielectronVarManager::kPdgCodeMother]=0;
430 AliDielectronMC *mc=AliDielectronMC::Instance();
432 // Fill AliMCParticle interface specific information
433 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
435 AliMCParticle *mother = mc->GetMCTrackMother(particle);
436 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
439 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
442 inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
445 // Fill track information available for histogramming into an array
448 // Fill common AliVParticle interface information
449 FillVarVParticle(particle, values);
452 values[AliDielectronVarManager::kPdgCode]=0;
453 values[AliDielectronVarManager::kPdgCodeMother]=0;
455 AliDielectronMC *mc=AliDielectronMC::Instance();
458 // Fill AliAODMCParticle interface specific information
459 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
461 AliVParticle *mother = mc->GetMCTrackMother(particle);
462 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
464 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
467 inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
470 // Fill pair information available for histogramming into an array
473 // Fill common AliVParticle interface information
474 FillVarVParticle(pair, values);
476 // Fill AliDielectronPair specific information
477 const AliKFParticle &kfPair = pair->GetKFParticle();
484 pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS);
486 values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF();
487 values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength();
488 values[AliDielectronVarManager::kR] = kfPair.GetR();
489 values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle();
490 values[AliDielectronVarManager::kThetaHE] = thetaHE;
491 values[AliDielectronVarManager::kPhiHE] = phiHE;
492 values[AliDielectronVarManager::kThetaCS] = thetaCS;
493 values[AliDielectronVarManager::kPhiCS] = phiCS;
494 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
495 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
496 values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
497 values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
498 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
499 values[AliDielectronVarManager::kPairType] = pair->GetType();
503 AliDielectronMC *mc=AliDielectronMC::Instance();
506 Bool_t samemother = mc->HaveSameMother(pair);
507 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
514 inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
517 // Fill event information available for histogramming into an array
519 const AliVVertex *primVtx = event->GetPrimaryVertex();
521 values[AliDielectronVarManager::kXvPrim] = 0;
522 values[AliDielectronVarManager::kYvPrim] = 0;
523 values[AliDielectronVarManager::kZvPrim] = 0;
524 values[AliDielectronVarManager::kChi2NDF] = 0;
526 values[AliDielectronVarManager::kNTrk] = 0;
527 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
529 if (!primVtx) return;
531 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
532 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
533 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
534 values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF();
536 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
539 inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
542 // Fill event information available for histogramming into an array
545 // Fill common AliVEvent interface information
546 FillVarVEvent(event, values);
548 // Fill AliESDEvent interface specific information
549 const AliESDVertex *primVtx = event->GetPrimaryVertex();
550 values[AliDielectronVarManager::kXRes] = primVtx->GetXRes();
551 values[AliDielectronVarManager::kYRes] = primVtx->GetYRes();
552 values[AliDielectronVarManager::kZRes] = primVtx->GetZRes();
555 inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
558 // Fill event information available for histogramming into an array
561 // Fill common AliVEvent interface information
562 FillVarVEvent(event, values);
564 // Fill AliAODEvent interface specific information
567 inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
570 // Fill event information available for histogramming into an array
573 // Fill common AliVEvent interface information
574 FillVarVEvent(event, values);
576 // Fill AliMCEvent interface specific information
579 inline void AliDielectronVarManager::InitESDpid(Int_t type)
582 // initialize PID parameters
583 // type=0 is simulation
586 if (!fgESDpid) fgESDpid=new AliESDpid;
587 Double_t alephParameters[5];
589 alephParameters[0] = 2.15898e+00/50.;
590 alephParameters[1] = 1.75295e+01;
591 alephParameters[2] = 3.40030e-09;
592 alephParameters[3] = 1.96178e+00;
593 alephParameters[4] = 3.91720e+00;
594 fgESDpid->GetTOFResponse().SetTimeResolution(80.);
598 alephParameters[0] = 0.0283086/0.97;
599 alephParameters[1] = 2.63394e+01;
600 alephParameters[2] = 5.04114e-11;
601 alephParameters[3] = 2.12543e+00;
602 alephParameters[4] = 4.88663e+00;
603 fgESDpid->GetTOFResponse().SetTimeResolution(130.);
604 fgESDpid->GetTPCResponse().SetMip(50.);
607 fgESDpid->GetTPCResponse().SetBetheBlochParameters(
608 alephParameters[0],alephParameters[1],alephParameters[2],
609 alephParameters[3],alephParameters[4]);
611 fgESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
615 inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
619 if (fgKFVertex) delete fgKFVertex;
621 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
624 inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
627 // Fill track information available for histogramming into an array
630 // Fill TParticle interface information
631 values[AliDielectronVarManager::kPx] = particle->Px();
632 values[AliDielectronVarManager::kPy] = particle->Py();
633 values[AliDielectronVarManager::kPz] = particle->Pz();
634 values[AliDielectronVarManager::kPt] = particle->Pt();
635 values[AliDielectronVarManager::kP] = particle->P();
637 values[AliDielectronVarManager::kXv] = particle->Vx();
638 values[AliDielectronVarManager::kYv] = particle->Vy();
639 values[AliDielectronVarManager::kZv] = particle->Vz();
641 values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt();
642 values[AliDielectronVarManager::kPhi] = particle->Phi();
643 values[AliDielectronVarManager::kTheta] =
644 values[AliDielectronVarManager::kEta] = particle->Eta();
645 values[AliDielectronVarManager::kY] =
647 values[AliDielectronVarManager::kE] = particle->Energy();
648 values[AliDielectronVarManager::kM] = particle->GetMass();
650 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly