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>
45 #include <AliCentrality.h>
46 #include <AliAODpidUtil.h>
48 #include <AliPIDResponse.h>
50 #include "AliDielectronPair.h"
51 #include "AliDielectronMC.h"
52 #include "AliDielectronPID.h"
53 #include "AliDielectronHelper.h"
57 //________________________________________________________________
58 class AliDielectronVarManager : public TNamed {
62 // Particle specific variables
67 kPt, // transverse momentum
69 kXv, // vertex position in x
70 kYv, // vertex position in y
71 kZv, // vertex position in z
74 kTheta, // theta angle
75 kEta, // pseudo-rapidity
80 kNclsITS, // number of clusters assigned in the ITS
81 kNclsTPC, // number of clusters assigned in the TPC
82 kNclsTPCiter1, // number of clusters assigned in the TPC after first iteration
83 kNFclsTPC, // number of findable clusters in the TPC
84 kNFclsTPCr, // number of findable clusters in the TPC with more robust definition
85 kNFclsTPCrFrac, // number of found/findable clusters in the TPC with more robust definition
86 kTPCsignalN, // number of points used for dEdx
87 kTPCsignalNfrac, // fraction of points used for dEdx / cluster used for tracking
88 kTPCchi2Cl, // chi2/cl in TPC
89 kTrackStatus, // track status bits
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
94 kTRDprobEle, // TRD electron pid probability
95 kTRDprobPio, // TRD electron pid probability
97 kImpactParXY, // Impact parameter in XY plane
98 kImpactParZ, // Impact parameter in Z
99 kTrackLength, // Track length
100 kPdgCode, // PDG code
102 kPdgCodeMother, // PDG code of the mother
103 kPdgCodeGrandMother, // PDG code of the mother
105 kNumberOfDaughters, // number of daughters
106 kHaveSameMother, // check that particles have the same mother (MC)
107 kIsJpsiPrimary, // check if the particle is primary (MC)
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
113 kITSclusterMap, // ITS cluster map
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
120 kPIn, // momentum at inner wall of TPC (if available), used for PID
121 kTPCsignal, // TPC dE/dx signal
123 kTOFsignal, // TOF signal
124 kTOFbeta, // TOF beta
126 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
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
132 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
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
138 kKinkIndex0, // kink index 0
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
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
154 kLegDist, // distance of the legs
155 kLegDistXY, // distance of the legs in XY
156 kDeltaEta, // Absolute value of Delta Eta for the legs
157 kDeltaPhi, // Absolute value of Delta Phi for the legs
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 ...
161 kPseudoProperTime, // pseudo proper time
163 // Event specific variables
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
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
175 kCentrality, // event centrality fraction
176 kNevents, // event counter
178 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
182 AliDielectronVarManager();
183 AliDielectronVarManager(const char* name, const char* title);
184 virtual ~AliDielectronVarManager();
185 static void Fill(const TObject* particle, Double_t * const values);
186 static void FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values);
188 static void InitESDpid(Int_t type=0);
189 static void InitAODpidUtil(Int_t type=0);
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;}
194 static void SetEvent(AliVEvent * const ev);
195 static Bool_t GetDCA(const AliAODTrack *track, Double_t d0z0[2]);
197 static const AliKFVertex* GetKFVertex() {return fgKFVertex;}
199 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
201 static const Double_t* GetData() {return fgData;}
203 static Double_t GetValue(ValueTypes val) {return fgData[val];}
206 static const char* fgkParticleNames[kNMaxValues]; //variable names
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);
211 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
212 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
213 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
214 static void FillVarKFParticle(const AliKFParticle *pair, Double_t * const values);
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);
221 static AliPIDResponse *fgPIDResponse; // PID response object
222 static AliVEvent *fgEvent; // current event pointer
223 static AliKFVertex *fgKFVertex; // kf vertex
225 static Double_t fgData[kNMaxValues]; //! data
227 AliDielectronVarManager(const AliDielectronVarManager &c);
228 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
230 ClassDef(AliDielectronVarManager,1);
235 inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
238 // Main function to fill all available variables according to the type of particle
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);
245 else if (object->IsA() == AliKFParticle::Class()) FillVarKFParticle(static_cast<const AliKFParticle*>(object),values);
246 // Main function to fill all available variables according to the type of event
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);
252 // else printf(Form("AliDielectronVarManager::Fill: Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed
255 inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
258 // Fill track information available in AliVParticle into an array
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();
266 values[AliDielectronVarManager::kXv] = particle->Xv();
267 values[AliDielectronVarManager::kYv] = particle->Yv();
268 values[AliDielectronVarManager::kZv] = particle->Zv();
270 values[AliDielectronVarManager::kOneOverPt] = (particle->Pt()>1.0e-3 ? particle->OneOverPt() : 0.0);
271 values[AliDielectronVarManager::kPhi] = particle->Phi();
272 values[AliDielectronVarManager::kTheta] = particle->Theta();
273 values[AliDielectronVarManager::kEta] = particle->Eta();
274 values[AliDielectronVarManager::kY] = particle->Y();
276 values[AliDielectronVarManager::kE] = particle->E();
277 values[AliDielectronVarManager::kM] = particle->M();
278 values[AliDielectronVarManager::kCharge] = particle->Charge();
280 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
282 // if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
283 for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues; ++i)
287 inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
290 // Fill track information available for histogramming into an array
293 // Fill common AliVParticle interface information
294 FillVarVParticle(particle, values);
296 Double_t pidProbs[AliPID::kSPECIES];
297 // Fill AliESDtrack interface specific information
298 Double_t tpcNcls=particle->GetTPCNcls();
299 Double_t tpcSignalN=particle->GetTPCsignalN();
300 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
301 values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
302 values[AliDielectronVarManager::kNclsTPCiter1] = particle->GetTPCNclsIter1(); // TODO: get rid of the plain numbers
303 values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
304 values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1);
305 values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2);
306 values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
307 values[AliDielectronVarManager::kTPCsignalNfrac]= tpcNcls>0?tpcSignalN/tpcNcls:0;
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();
311 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
314 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
315 if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
317 particle->GetTRDpid(pidProbs);
318 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
319 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
321 values[AliDielectronVarManager::kKinkIndex0] = particle->GetKinkIndex(0);
323 Float_t impactParXY, impactParZ;
324 particle->GetImpactParameters(impactParXY, impactParZ);
325 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
326 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
329 values[AliDielectronVarManager::kPdgCode]=-1;
330 values[AliDielectronVarManager::kPdgCodeMother]=-1;
331 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
333 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
335 AliDielectronMC *mc=AliDielectronMC::Instance();
338 if (mc->GetMCTrack(particle))
339 values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
341 AliMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
343 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
345 motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
346 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
349 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
354 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
357 particle->GetITSdEdxSamples(itsdEdx);
359 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
360 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
361 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
362 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
363 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
365 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
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();
373 values[AliDielectronVarManager::kTOFsignal]=particle->GetTOFsignal();
375 Double_t l = particle->GetIntegratedLength(); // cm
376 Double_t t = particle->GetTOFsignal();
377 Double_t t0 = fgPIDResponse->GetTOFResponse().GetTimeZero(); // ps
379 if( (l < 360. || l > 800.) || (t <= 0.) || (t0 >999990.0) ) {
380 values[AliDielectronVarManager::kTOFbeta]=0.0;
383 t -= t0; // subtract the T0
385 t *= 1e-12; //ps -> s
388 Float_t beta = v / TMath::C();
389 values[AliDielectronVarManager::kTOFbeta]=beta;
392 // nsigma to Electron band
393 // TODO: for the moment we set the bethe bloch parameters manually
394 // this should be changed in future!
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);
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);
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);
415 inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
418 // Fill track information available for histogramming into an array
421 // Fill common AliVParticle interface information
422 FillVarVParticle(particle, values);
424 Double_t tpcNcls=particle->GetTPCNcls();
425 // Reset AliESDtrack interface specific information
426 values[AliDielectronVarManager::kNclsITS] = 0;
427 values[AliDielectronVarManager::kNclsTPC] = tpcNcls;
428 values[AliDielectronVarManager::kNclsTPCiter1] = tpcNcls; // not really available in AOD
429 values[AliDielectronVarManager::kNFclsTPC] = 0;
430 values[AliDielectronVarManager::kNFclsTPCr] = 0;
431 values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
432 values[AliDielectronVarManager::kNclsTRD] = 0;
433 values[AliDielectronVarManager::kTRDntracklets] = 0;
434 values[AliDielectronVarManager::kTRDpidQuality] = 0;
436 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
437 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
440 //TODO: set correctly
441 values[AliDielectronVarManager::kTRDprobEle] = 0;
442 values[AliDielectronVarManager::kTRDprobPio] = 0;
444 values[AliDielectronVarManager::kTPCsignalN] = 0;
445 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
447 // Fill AliAODTrack interface information
450 GetDCA(particle, d0z0);
451 values[AliDielectronVarManager::kImpactParXY] = d0z0[0];
452 values[AliDielectronVarManager::kImpactParZ] = d0z0[1];
454 values[AliDielectronVarManager::kPIn]=0;
455 values[AliDielectronVarManager::kTPCsignal]=0;
457 values[AliDielectronVarManager::kTOFsignal]=0;
458 values[AliDielectronVarManager::kTOFbeta]=0;
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;
466 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
468 AliAODPid *pid=particle->GetDetPid();
470 Double_t mom =pid->GetTPCmomentum();
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);
480 values[AliDielectronVarManager::kPIn]=mom;
481 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
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;
489 values[AliDielectronVarManager::kTRDntracklets] = 0;
490 values[AliDielectronVarManager::kTRDpidQuality] = 0;
494 values[AliDielectronVarManager::kPdgCode]=-1;
495 values[AliDielectronVarManager::kPdgCodeMother]=-1;
496 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
498 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
500 AliDielectronMC *mc=AliDielectronMC::Instance();
503 if (mc->GetMCTrack(particle))
504 values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
506 AliAODMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
508 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
510 motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
511 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
514 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
519 inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
522 // Fill track information available for histogramming into an array
525 values[AliDielectronVarManager::kNclsITS] = 0;
526 values[AliDielectronVarManager::kNclsTPC] = 0;
527 values[AliDielectronVarManager::kNclsTPCiter1] = 0;
528 values[AliDielectronVarManager::kNFclsTPC] = 0;
529 values[AliDielectronVarManager::kNFclsTPCr] = 0;
530 values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
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;
539 values[AliDielectronVarManager::kTPCsignalNfrac] = 0;
540 values[AliDielectronVarManager::kImpactParXY] = 0;
541 values[AliDielectronVarManager::kImpactParZ] = 0;
542 values[AliDielectronVarManager::kPIn] = 0;
543 values[AliDielectronVarManager::kTPCsignal] = 0;
544 values[AliDielectronVarManager::kTOFsignal] = 0;
545 values[AliDielectronVarManager::kTOFbeta] = 0;
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;
553 values[AliDielectronVarManager::kPdgCode] = -1;
554 values[AliDielectronVarManager::kPdgCodeMother] = -1;
555 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
557 // Fill common AliVParticle interface information
558 FillVarVParticle(particle, values);
560 AliDielectronMC *mc=AliDielectronMC::Instance();
562 // Fill AliMCParticle interface specific information
563 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
565 AliMCParticle *motherMC = mc->GetMCTrackMother(particle);
567 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
568 motherMC=mc->GetMCTrackMother(motherMC); //grand mother
569 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
572 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle);
573 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
577 inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values) {
579 // fill 2 track information starting from MC legs
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;
608 values[AliDielectronVarManager::kPdgCode] = 0;
609 values[AliDielectronVarManager::kPdgCodeMother] = 0;
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());
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
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]);
633 values[AliDielectronVarManager::kXv] = 0;
634 values[AliDielectronVarManager::kYv] = 0;
635 values[AliDielectronVarManager::kZv] = 0;
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();
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());
648 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
653 inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
656 // Fill track information available for histogramming into an array
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;
671 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
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;
683 values[AliDielectronVarManager::kPdgCode] = -1;
684 values[AliDielectronVarManager::kPdgCodeMother] = -1;
685 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
687 // Fill common AliVParticle interface information
688 FillVarVParticle(particle, values);
690 AliDielectronMC *mc=AliDielectronMC::Instance();
693 // Fill AliAODMCParticle interface specific information
694 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
696 AliAODMCParticle *motherMC = mc->GetMCTrackMother(particle);
698 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
699 motherMC=mc->GetMCTrackMother(motherMC); //grand mother
700 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
704 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle);
706 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
709 inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
712 // Fill pair information available for histogramming into an array
715 values[AliDielectronVarManager::kPdgCode]=-1;
716 values[AliDielectronVarManager::kPdgCodeMother]=-1;
717 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
719 // Fill common AliVParticle interface information
720 FillVarVParticle(pair, values);
722 // Fill AliDielectronPair specific information
723 const AliKFParticle &kfPair = pair->GetKFParticle();
730 pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS);
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();
736 values[AliDielectronVarManager::kThetaHE] = thetaHE;
737 values[AliDielectronVarManager::kPhiHE] = phiHE;
738 values[AliDielectronVarManager::kThetaCS] = thetaCS;
739 values[AliDielectronVarManager::kPhiCS] = phiCS;
740 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
741 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
742 values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
743 values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
744 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
745 values[AliDielectronVarManager::kPairType] = pair->GetType();
746 values[AliDielectronVarManager::kPseudoProperTime] = pair->GetPseudoProperTime(fgEvent->GetPrimaryVertex());
749 AliDielectronMC *mc=AliDielectronMC::Instance();
752 Bool_t samemother = mc->HaveSameMother(pair);
753 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(pair);
754 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
761 inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *particle, Double_t * const values)
764 // Fill track information available in AliVParticle into an array
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();
772 values[AliDielectronVarManager::kXv] = particle->GetX();
773 values[AliDielectronVarManager::kYv] = particle->GetY();
774 values[AliDielectronVarManager::kZv] = particle->GetZ();
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.;
782 values[AliDielectronVarManager::kE] = particle->GetE();
783 values[AliDielectronVarManager::kM] = particle->GetMass();
784 values[AliDielectronVarManager::kCharge] = particle->GetQ();
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;
798 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
799 values[AliDielectronVarManager::kImpactParXY] = 0;
800 values[AliDielectronVarManager::kImpactParZ] = 0;
801 values[AliDielectronVarManager::kPIn] = 0;
802 values[AliDielectronVarManager::kTPCsignal] = 0;
803 values[AliDielectronVarManager::kTOFsignal] = 0;
804 values[AliDielectronVarManager::kTOFbeta] = 0;
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;
812 values[AliDielectronVarManager::kPdgCode] = -1;
813 values[AliDielectronVarManager::kPdgCodeMother] = -1;
814 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
817 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
820 inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
823 // Fill event information available for histogramming into an array
825 const AliVVertex *primVtx = event->GetPrimaryVertex();
827 values[AliDielectronVarManager::kXvPrim] = 0;
828 values[AliDielectronVarManager::kYvPrim] = 0;
829 values[AliDielectronVarManager::kZvPrim] = 0;
830 // values[AliDielectronVarManager::kChi2NDF] = 0; //This is the pair value!!!
832 values[AliDielectronVarManager::kNTrk] = 0;
833 values[AliDielectronVarManager::kNacc] = 0;
834 values[AliDielectronVarManager::kNaccTrcklts] = 0;
835 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
837 if (!primVtx) return;
839 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
840 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
841 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
842 // values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value
844 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
845 values[AliDielectronVarManager::kNacc] = AliDielectronHelper::GetNacc(event);
846 values[AliDielectronVarManager::kNaccTrcklts] = AliDielectronHelper::GetNaccTrcklts(event);
849 inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
852 // Fill event information available for histogramming into an array
855 // Fill common AliVEvent interface information
856 FillVarVEvent(event, values);
858 Double_t centralityF=-1;
859 AliCentrality *esdCentrality = const_cast<AliESDEvent*>(event)->GetCentrality();
860 if (esdCentrality) centralityF = esdCentrality->GetCentralityPercentile("V0M");
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();
867 values[AliDielectronVarManager::kCentrality] = centralityF;
870 inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
873 // Fill event information available for histogramming into an array
876 // Fill common AliVEvent interface information
877 FillVarVEvent(event, values);
879 // Fill AliAODEvent interface specific information
882 inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
885 // Fill event information available for histogramming into an array
888 // Fill common AliVEvent interface information
889 FillVarVEvent(event, values);
891 // Fill AliMCEvent interface specific information
892 values[AliDielectronVarManager::kNch] = AliDielectronHelper::GetNch(event, 1.6);
895 inline void AliDielectronVarManager::InitESDpid(Int_t type)
898 // initialize PID parameters
899 // type=0 is simulation
902 if (!fgPIDResponse) fgPIDResponse=new AliESDpid((Bool_t)(type==0));
903 Double_t alephParameters[5];
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;
910 fgPIDResponse->GetTOFResponse().SetTimeResolution(80.);
914 alephParameters[0] = 0.0283086/0.97;
915 alephParameters[1] = 2.63394e+01;
916 alephParameters[2] = 5.04114e-11;
917 alephParameters[3] = 2.12543e+00;
918 alephParameters[4] = 4.88663e+00;
919 fgPIDResponse->GetTOFResponse().SetTimeResolution(130.);
920 fgPIDResponse->GetTPCResponse().SetMip(50.);
923 fgPIDResponse->GetTPCResponse().SetBetheBlochParameters(
924 alephParameters[0],alephParameters[1],alephParameters[2],
925 alephParameters[3],alephParameters[4]);
927 fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
930 inline void AliDielectronVarManager::InitAODpidUtil(Int_t type)
932 if (!fgPIDResponse) fgPIDResponse=new AliAODpidUtil;
933 Double_t alephParameters[5];
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;
940 fgPIDResponse->GetTOFResponse().SetTimeResolution(80.);
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;
949 fgPIDResponse->GetTOFResponse().SetTimeResolution(130.);
950 fgPIDResponse->GetTPCResponse().SetMip(50.);
953 fgPIDResponse->GetTPCResponse().SetBetheBlochParameters(
954 alephParameters[0],alephParameters[1],alephParameters[2],
955 alephParameters[3],alephParameters[4]);
957 fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
961 inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
965 if (fgKFVertex) delete fgKFVertex;
967 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
969 for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i) fgData[i]=0.;
970 AliDielectronVarManager::Fill(fgEvent, fgData);
974 inline Bool_t AliDielectronVarManager::GetDCA(const AliAODTrack *track, Double_t d0z0[2])
976 if(track->TestBit(AliAODTrack::kIsDCA)){
977 d0z0[0]=track->DCA();
978 d0z0[1]=track->ZAtDCA();
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);
995 inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
998 // Fill track information available for histogramming into an array
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();
1008 values[AliDielectronVarManager::kXv] = particle->Vx();
1009 values[AliDielectronVarManager::kYv] = particle->Vy();
1010 values[AliDielectronVarManager::kZv] = particle->Vz();
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] =
1018 values[AliDielectronVarManager::kE] = particle->Energy();
1019 values[AliDielectronVarManager::kM] = particle->GetMass();
1021 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly