]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/dielectron/AliDielectronVarManager.h
Major update of the framework
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliDielectronVarManager.h
CommitLineData
b2a297fa 1#ifndef ALIDIELECTRONVARMANAGER_H
2#define ALIDIELECTRONVARMANAGER_H
3/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6//#############################################################
7//# #
8//# Class AliDielectronVarManager #
9//# Class for management of available variables #
10//# #
11//# Authors: #
12//# Anton Andronic, GSI / A.Andronic@gsi.de #
13//# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
14//# Julian Book, Uni Ffm / Julian.Book@cern.ch #
572b0139 15//# Markus Köhler, GSI / M.Koehler@gsi.de #
6551594b 16//# Frederick Kramer, Uni Ffm / Frederick.Kramer@cern.ch #
b2a297fa 17//# Magnus Mager, CERN / Magnus.Mager@cern.ch #
18//# WooJin J. Park, GSI / W.J.Park@gsi.de #
19//# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
20//# #
21//#############################################################
22
23
24#include <TNamed.h>
25
26#include <AliVEvent.h>
27#include <AliESDEvent.h>
6551594b 28#include <AliAODEvent.h>
29#include <AliMCEvent.h>
30#include <AliVVertex.h>
31#include <AliESDVertex.h>
b2a297fa 32
33#include <AliVParticle.h>
b2a297fa 34#include <AliESDtrack.h>
35#include <AliAODTrack.h>
572b0139 36#include <AliAODPid.h>
b2a297fa 37#include <AliKFParticle.h>
572b0139 38#include <AliKFVertex.h>
b2a297fa 39#include <AliMCParticle.h>
40#include <AliAODMCParticle.h>
41#include <AliVTrack.h> // ?
42
6551594b 43#include <AliExternalTrackParam.h>
44#include <AliESDpid.h>
8df8e382 45#include <AliPID.h>
6551594b 46
b2a297fa 47#include "AliDielectronPair.h"
8df8e382 48#include "AliDielectronMC.h"
b2a297fa 49
50class AliVEvent;
51
52//________________________________________________________________
53class AliDielectronVarManager : public TNamed {
54
55public:
8df8e382 56
b2a297fa 57 // Particle specific variables
58 enum ValueTypes {
59 kPx = 0, // px
60 kPy, // py
61 kPz, // pz
62 kPt, // transverse momentum
63 kP, // momentum
64 kXv, // vertex position in x
65 kYv, // vertex position in y
66 kZv, // vertex position in z
67 kOneOverPt, // 1/pt
68 kPhi, // phi angle
69 kTheta, // theta angle
70 kEta, // pseudo-rapidity
71 kY, // rapidity
72 kE, // energy
73 kM, // mass
74 kCharge, // charge
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
61d106d3 79 kTPCchi2Cl, // chi2/cl in TPC
80 kTrackStatus, // track status bits
8df8e382 81
b2a297fa 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
8df8e382 85 kTRDprobEle, // TRD electron pid probability
86 kTRDprobPio, // TRD electron pid probability
87
b2a297fa 88 kImpactParXY, // Impact parameter in XY plane
89 kImpactParZ, // Impact parameter in Z
90 kTrackLength, // Track length
91 kPdgCode, // PDG code
8df8e382 92
93 kPdgCodeMother, // PDG code of the mother
94
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
9143d69f 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
8df8e382 107
b2a297fa 108 kPIn, // momentum at inner wall of TPC (if available), used for PID
109 kTPCsignal, // TPC dE/dx signal
572b0139 110
6551594b 111 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
572b0139 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
116
8df8e382 117 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
572b0139 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
8df8e382 122
b2a297fa 123 kParticleMax, //
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
8df8e382 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
572b0139 137 kLegDist, // distance of the legs
138 kLegDistXY, // distance of the legs in XY
61d106d3 139 kDeltaEta, // Absolute value of Delta Eta for the legs
140 kDeltaPhi, // Absolute value of Delta Phi for the legs
b2a297fa 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 ...
144 kPairMax, //
145 // Event specific variables
6551594b 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
b2a297fa 152 kNTrk, // number of tracks (or tracklets)
6551594b 153 kTracks, // ESD tracks
154 kNevents, // event counter
b2a297fa 155 kNMaxValues //
156 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
157 };
158
159
160 AliDielectronVarManager();
161 AliDielectronVarManager(const char* name, const char* title);
162 virtual ~AliDielectronVarManager();
163 static void Fill(const TObject* particle, Double_t * const values);
164
6551594b 165 static void InitESDpid(Int_t type=0);
572b0139 166 static void SetESDpid(AliESDpid * const pid) {fgESDpid=pid;}
167 static AliESDpid* GetESDpid() {return fgESDpid;}
168 static void SetEvent(AliVEvent * const ev);
6551594b 169
b2a297fa 170 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
171private:
172
173 static const char* fgkParticleNames[kNMaxValues]; //variable names
174
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);
8df8e382 178 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
b2a297fa 179 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
180 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
6551594b 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);
8df8e382 185
6551594b 186 static AliESDpid* fgESDpid; // ESD pid object
187 static AliVEvent* fgEvent; // current event pointer
572b0139 188 static AliKFVertex *fgKFVertex; // kf vertex
189
b2a297fa 190 AliDielectronVarManager(const AliDielectronVarManager &c);
191 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
192
193 ClassDef(AliDielectronVarManager,1);
194};
195
196
197//Inline functions
6551594b 198inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
b2a297fa 199{
200 //
201 // Main function to fill all available variables according to the type of particle
202 //
203
6551594b 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);
209
210 // Main function to fill all available variables according to the type of event
211
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
b2a297fa 217}
218
219inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
220{
221 //
222 // Fill track information available in AliVParticle into an array
223 //
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();
229
230 values[AliDielectronVarManager::kXv] = particle->Xv();
231 values[AliDielectronVarManager::kYv] = particle->Yv();
232 values[AliDielectronVarManager::kZv] = particle->Zv();
233
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();
8df8e382 239
b2a297fa 240 values[AliDielectronVarManager::kE] = particle->E();
241 values[AliDielectronVarManager::kM] = particle->M();
242 values[AliDielectronVarManager::kCharge] = particle->Charge();
6551594b 243
244 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
b2a297fa 245}
246
247inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
248{
249 //
250 // Fill track information available for histogramming into an array
251 //
252
253 // Fill common AliVParticle interface information
254 FillVarVParticle(particle, values);
255
8df8e382 256 Double_t pidProbs[AliPID::kSPECIES];
b2a297fa 257 // Fill AliESDtrack interface specific information
61d106d3 258 Double_t tpcNcls=particle->GetNcls(1);
b2a297fa 259 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
61d106d3 260 values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
b2a297fa 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();
61d106d3 266 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
267
268
269 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
270 if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
8df8e382 271 //TRD pidProbs
272 particle->GetTRDpid(pidProbs);
273 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
274 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
275
b2a297fa 276 Float_t impactParXY, impactParZ;
277 particle->GetImpactParameters(impactParXY, impactParZ);
278 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
279 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
280
8df8e382 281
282 values[AliDielectronVarManager::kPdgCode]=0;
283 values[AliDielectronVarManager::kPdgCodeMother]=0;
284
285 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
286
287 AliDielectronMC *mc=AliDielectronMC::Instance();
288
289 if (mc->HasMC()){
290 if (mc->GetMCTrack(particle))
291 values[AliDielectronVarManager::kPdgCode]=
292 mc->GetMCTrack(particle)->PdgCode();
293
294 Int_t pdgMother=mc->GetMotherPDG(particle);
295 if (pdgMother!=-999)
296 values[AliDielectronVarManager::kPdgCodeMother]=pdgMother;
297
298 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
299 } //if(mc->HasMC())
300
301
302
303 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
304
305 Double_t itsdEdx[4];
306 particle->GetITSdEdxSamples(itsdEdx);
307
308 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
309 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
310 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
311 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
312
b2a297fa 313 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
b2a297fa 314 //dEdx information
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();
6551594b 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);
572b0139 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);
328
9143d69f 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);
334
572b0139 335 Double_t t0=fgESDpid->GetTOFResponse().GetTimeZero();
8df8e382 336 values[AliDielectronVarManager::kTOFnSigmaEle]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kElectron,t0);
572b0139 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);
b2a297fa 341}
342
343inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
344{
345 //
346 // Fill track information available for histogramming into an array
347 //
348
349 // Fill common AliVParticle interface information
350 FillVarVParticle(particle, values);
572b0139 351
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;
61d106d3 359
360 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
361 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
362
8df8e382 363 //TRD pidProbs
364 //TODO: set correctly
365 values[AliDielectronVarManager::kTRDprobEle] = 0;
366 values[AliDielectronVarManager::kTRDprobPio] = 0;
367
572b0139 368 //TODO: This is only an approximation!!!
369 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCClusterMap().CountBits();
370
371// Fill AliAODTrack interface information
b2a297fa 372 // ...
572b0139 373 values[AliDielectronVarManager::kImpactParXY] = particle->DCA();
374 values[AliDielectronVarManager::kImpactParZ] = particle->ZAtDCA();
375
376 values[AliDielectronVarManager::kPIn]=0;
377 values[AliDielectronVarManager::kTPCsignal]=0;
378
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;
b2a297fa 384
572b0139 385
386 AliAODPid *pid=particle->GetDetPid();
387 if (pid){
388 Double_t mom =pid->GetTPCmomentum();
389 //TODO: kTPCsignalN is only an approximation (see above)!!
390
391 Double_t tpcNsigmaEle=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
392 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]) ,AliPID::kElectron);
572b0139 393 Double_t tpcNsigmaPio=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
394 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kPion);
572b0139 395 Double_t tpcNsigmaMuo=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
396 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kMuon);
572b0139 397 Double_t tpcNsigmaKao=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
398 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kKaon);
572b0139 399 Double_t tpcNsigmaPro=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
400 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kProton);
401
402 values[AliDielectronVarManager::kPIn]=pid->GetTPCmomentum();
403 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
404
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;
410
411 values[AliDielectronVarManager::kTRDntracklets] = 0;
412 values[AliDielectronVarManager::kTRDpidQuality] = 0;
413
414 }
b2a297fa 415}
416
417inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
418{
419 //
420 // Fill track information available for histogramming into an array
421 //
422
423 // Fill common AliVParticle interface information
424 FillVarVParticle(particle, values);
425
8df8e382 426
427 values[AliDielectronVarManager::kPdgCode]=0;
428 values[AliDielectronVarManager::kPdgCodeMother]=0;
429
430 AliDielectronMC *mc=AliDielectronMC::Instance();
431
b2a297fa 432 // Fill AliMCParticle interface specific information
433 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
8df8e382 434
435 AliMCParticle *mother = mc->GetMCTrackMother(particle);
436 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
437
438
439 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 440}
441
442inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
443{
444 //
445 // Fill track information available for histogramming into an array
446 //
447
448 // Fill common AliVParticle interface information
449 FillVarVParticle(particle, values);
450
8df8e382 451
452 values[AliDielectronVarManager::kPdgCode]=0;
453 values[AliDielectronVarManager::kPdgCodeMother]=0;
454
455 AliDielectronMC *mc=AliDielectronMC::Instance();
456
457
b2a297fa 458 // Fill AliAODMCParticle interface specific information
8df8e382 459 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
460
461 AliVParticle *mother = mc->GetMCTrackMother(particle);
462 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
463
464 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 465}
466
467inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
468{
469 //
470 // Fill pair information available for histogramming into an array
471 //
472
473 // Fill common AliVParticle interface information
474 FillVarVParticle(pair, values);
475
476 // Fill AliDielectronPair specific information
477 const AliKFParticle &kfPair = pair->GetKFParticle();
61d106d3 478
479 Double_t thetaHE=0;
480 Double_t phiHE=0;
481 Double_t thetaCS=0;
482 Double_t phiCS=0;
483
484 pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS);
485
b2a297fa 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();
61d106d3 490 values[AliDielectronVarManager::kThetaHE] = thetaHE;
491 values[AliDielectronVarManager::kPhiHE] = phiHE;
492 values[AliDielectronVarManager::kThetaCS] = thetaCS;
493 values[AliDielectronVarManager::kPhiCS] = phiCS;
572b0139 494 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
495 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
61d106d3 496 values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
497 values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
8df8e382 498 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
b2a297fa 499 values[AliDielectronVarManager::kPairType] = pair->GetType();
8df8e382 500
501
502
503 AliDielectronMC *mc=AliDielectronMC::Instance();
504
505 if (mc->HasMC()){
506 Bool_t samemother = mc->HaveSameMother(pair);
507 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
508 }//if (mc->HasMC())
509
510
b2a297fa 511}
512
6551594b 513
514inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
515{
516 //
517 // Fill event information available for histogramming into an array
518 //
519 const AliVVertex *primVtx = event->GetPrimaryVertex();
8df8e382 520
521 values[AliDielectronVarManager::kXvPrim] = 0;
522 values[AliDielectronVarManager::kYvPrim] = 0;
523 values[AliDielectronVarManager::kZvPrim] = 0;
524 values[AliDielectronVarManager::kChi2NDF] = 0;
525
526 values[AliDielectronVarManager::kNTrk] = 0;
527 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
528
529 if (!primVtx) return;
530
6551594b 531 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
532 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
533 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
534 values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF();
535
536 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
6551594b 537}
538
539inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
540{
541 //
542 // Fill event information available for histogramming into an array
543 //
544
545 // Fill common AliVEvent interface information
546 FillVarVEvent(event, values);
547
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();
553}
554
555inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
556{
557 //
558 // Fill event information available for histogramming into an array
559 //
560
561 // Fill common AliVEvent interface information
562 FillVarVEvent(event, values);
563
564 // Fill AliAODEvent interface specific information
565}
566
567inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
568{
569 //
570 // Fill event information available for histogramming into an array
571 //
572
573 // Fill common AliVEvent interface information
574 FillVarVEvent(event, values);
575
576 // Fill AliMCEvent interface specific information
577}
578
579inline void AliDielectronVarManager::InitESDpid(Int_t type)
580{
581 //
582 // initialize PID parameters
583 // type=0 is simulation
584 // type=1 is data
585
572b0139 586 if (!fgESDpid) fgESDpid=new AliESDpid;
6551594b 587 Double_t alephParameters[5];
588 // simulation
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;
8df8e382 594 fgESDpid->GetTOFResponse().SetTimeResolution(80.);
6551594b 595
596 // data
83e37742 597 if (type==1){
598 alephParameters[0] = 0.0283086/0.97;
6551594b 599 alephParameters[1] = 2.63394e+01;
600 alephParameters[2] = 5.04114e-11;
601 alephParameters[3] = 2.12543e+00;
602 alephParameters[4] = 4.88663e+00;
8df8e382 603 fgESDpid->GetTOFResponse().SetTimeResolution(130.);
83e37742 604 fgESDpid->GetTPCResponse().SetMip(50.);
6551594b 605 }
606
607 fgESDpid->GetTPCResponse().SetBetheBlochParameters(
608 alephParameters[0],alephParameters[1],alephParameters[2],
609 alephParameters[3],alephParameters[4]);
610
8df8e382 611 fgESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
6551594b 612}
613
572b0139 614
615inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
616{
617
618 fgEvent = ev;
619 if (fgKFVertex) delete fgKFVertex;
620 fgKFVertex=0x0;
8df8e382 621 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
572b0139 622}
b2a297fa 623/*
624inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
625{
626 //
627 // Fill track information available for histogramming into an array
628 //
629
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();
636
637 values[AliDielectronVarManager::kXv] = particle->Vx();
638 values[AliDielectronVarManager::kYv] = particle->Vy();
639 values[AliDielectronVarManager::kZv] = particle->Vz();
640
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] =
646
647 values[AliDielectronVarManager::kE] = particle->Energy();
648 values[AliDielectronVarManager::kM] = particle->GetMass();
649
650 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly
651
652}*/
653
654#endif