]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/dielectron/AliDielectronVarManager.h
Removing the unnecessary const
[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"
48609e3d 49#include "AliDielectronPID.h"
b2a297fa 50
51class AliVEvent;
52
53//________________________________________________________________
54class AliDielectronVarManager : public TNamed {
55
56public:
8df8e382 57
b2a297fa 58 // Particle specific variables
59 enum ValueTypes {
60 kPx = 0, // px
61 kPy, // py
62 kPz, // pz
63 kPt, // transverse momentum
64 kP, // momentum
65 kXv, // vertex position in x
66 kYv, // vertex position in y
67 kZv, // vertex position in z
68 kOneOverPt, // 1/pt
69 kPhi, // phi angle
70 kTheta, // theta angle
71 kEta, // pseudo-rapidity
72 kY, // rapidity
73 kE, // energy
74 kM, // mass
75 kCharge, // charge
76 kNclsITS, // number of clusters assigned in the ITS
77 kNclsTPC, // number of clusters assigned in the TPC
78 kNFclsTPC, // number of findable clusters in the TPC
79 kTPCsignalN, // number of points used for dEdx
61d106d3 80 kTPCchi2Cl, // chi2/cl in TPC
81 kTrackStatus, // track status bits
8df8e382 82
b2a297fa 83 kNclsTRD, // number of clusters assigned in the TRD
84 kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter
85 kTRDpidQuality, // number of TRD tracklets used for PID
8df8e382 86 kTRDprobEle, // TRD electron pid probability
87 kTRDprobPio, // TRD electron pid probability
88
b2a297fa 89 kImpactParXY, // Impact parameter in XY plane
90 kImpactParZ, // Impact parameter in Z
91 kTrackLength, // Track length
92 kPdgCode, // PDG code
8df8e382 93
94 kPdgCodeMother, // PDG code of the mother
95
96 kNumberOfDaughters, // number of daughters
97 kHaveSameMother, // check that particles have the same mother (MC)
98 kITSsignal, // ITS dE/dx signal
99 kITSsignalSSD1, // SSD1 dE/dx signal
100 kITSsignalSSD2, // SSD2 dE/dx signal
101 kITSsignalSDD1, // SDD1 dE/dx signal
102 kITSsignalSDD2, // SDD2 dE/dx signal
3505bfad 103 kITSclusterMap, // ITS cluster map
9143d69f 104 kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS
105 kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS
106 kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS
107 kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS
108 kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS
8df8e382 109
b2a297fa 110 kPIn, // momentum at inner wall of TPC (if available), used for PID
111 kTPCsignal, // TPC dE/dx signal
572b0139 112
6551594b 113 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
572b0139 114 kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC
115 kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC
116 kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC
117 kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC
118
8df8e382 119 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
572b0139 120 kTOFnSigmaPio, // number of sigmas to the pion line in the TOF
121 kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF
122 kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF
123 kTOFnSigmaPro, // number of sigmas to the proton line in the TOF
8df8e382 124
b2a297fa 125 kParticleMax, //
126 // TODO: kRNClusters ??
127 // AliDielectronPair specific variables
128 kChi2NDF = kParticleMax, // Chi^2/NDF
129 kDecayLength, // decay length
130 kR, // distance to the origin
131 kOpeningAngle, // opening angle
8df8e382 132 // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector
133 kThetaHE, // theta in mother's rest frame in the helicity picture
134 kPhiHE, // phi in mother's rest frame in the helicity picture
135 // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between
136 // the 3-mom vectors of target and projectile beams
137 kThetaCS, // theta in mother's rest frame in Collins-Soper picture
138 kPhiCS, // phi in mother's rest frame in Collins-Soper picture
572b0139 139 kLegDist, // distance of the legs
140 kLegDistXY, // distance of the legs in XY
61d106d3 141 kDeltaEta, // Absolute value of Delta Eta for the legs
142 kDeltaPhi, // Absolute value of Delta Phi for the legs
b2a297fa 143 kMerr, // error of mass calculation
144 kDCA, // distance of closest approach TODO: not implemented yet
145 kPairType, // type of the pair, like like sign ++ unlikesign ...
146 kPairMax, //
147 // Event specific variables
6551594b 148 kXvPrim=kPairMax, // prim vertex
149 kYvPrim, // prim vertex
150 kZvPrim, // prim vertex
151 kXRes, // primary vertex x-resolution
152 kYRes, // primary vertex y-resolution
153 kZRes, // primary vertex z-resolution
b2a297fa 154 kNTrk, // number of tracks (or tracklets)
6551594b 155 kTracks, // ESD tracks
156 kNevents, // event counter
b2a297fa 157 kNMaxValues //
158 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
159 };
160
161
162 AliDielectronVarManager();
163 AliDielectronVarManager(const char* name, const char* title);
164 virtual ~AliDielectronVarManager();
165 static void Fill(const TObject* particle, Double_t * const values);
166
6551594b 167 static void InitESDpid(Int_t type=0);
572b0139 168 static void SetESDpid(AliESDpid * const pid) {fgESDpid=pid;}
169 static AliESDpid* GetESDpid() {return fgESDpid;}
170 static void SetEvent(AliVEvent * const ev);
6551594b 171
b2a297fa 172 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
173private:
174
175 static const char* fgkParticleNames[kNMaxValues]; //variable names
176
177 static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
178 static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values);
179 static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values);
8df8e382 180 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
b2a297fa 181 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
182 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
6551594b 183 static void FillVarVEvent(const AliVEvent *event, Double_t * const values);
184 static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values);
185 static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values);
186 static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values);
8df8e382 187
6551594b 188 static AliESDpid* fgESDpid; // ESD pid object
189 static AliVEvent* fgEvent; // current event pointer
572b0139 190 static AliKFVertex *fgKFVertex; // kf vertex
191
b2a297fa 192 AliDielectronVarManager(const AliDielectronVarManager &c);
193 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
194
195 ClassDef(AliDielectronVarManager,1);
196};
197
198
199//Inline functions
6551594b 200inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
b2a297fa 201{
202 //
203 // Main function to fill all available variables according to the type of particle
204 //
205
6551594b 206 if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values);
207 else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values);
208 else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values);
209 else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values);
210 else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values);
211
212 // Main function to fill all available variables according to the type of event
213
214 else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values);
215 else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values);
216 else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values);
217 else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values);
218// else Error("Fill",Form("Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed
b2a297fa 219}
220
221inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
222{
223 //
224 // Fill track information available in AliVParticle into an array
225 //
226 values[AliDielectronVarManager::kPx] = particle->Px();
227 values[AliDielectronVarManager::kPy] = particle->Py();
228 values[AliDielectronVarManager::kPz] = particle->Pz();
229 values[AliDielectronVarManager::kPt] = particle->Pt();
230 values[AliDielectronVarManager::kP] = particle->P();
231
232 values[AliDielectronVarManager::kXv] = particle->Xv();
233 values[AliDielectronVarManager::kYv] = particle->Yv();
234 values[AliDielectronVarManager::kZv] = particle->Zv();
235
236 values[AliDielectronVarManager::kOneOverPt] = particle->OneOverPt();
237 values[AliDielectronVarManager::kPhi] = particle->Phi();
238 values[AliDielectronVarManager::kTheta] = particle->Theta();
239 values[AliDielectronVarManager::kEta] = particle->Eta();
240 values[AliDielectronVarManager::kY] = particle->Y();
8df8e382 241
b2a297fa 242 values[AliDielectronVarManager::kE] = particle->E();
243 values[AliDielectronVarManager::kM] = particle->M();
244 values[AliDielectronVarManager::kCharge] = particle->Charge();
6551594b 245
246 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
b2a297fa 247}
248
249inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
250{
251 //
252 // Fill track information available for histogramming into an array
253 //
254
255 // Fill common AliVParticle interface information
256 FillVarVParticle(particle, values);
257
8df8e382 258 Double_t pidProbs[AliPID::kSPECIES];
b2a297fa 259 // Fill AliESDtrack interface specific information
164bfb53 260 Double_t tpcNcls=particle->GetTPCNcls();
b2a297fa 261 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
61d106d3 262 values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
b2a297fa 263 values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
264 values[AliDielectronVarManager::kTPCsignalN] = particle->GetTPCsignalN();
265 values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers
266 values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
267 values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality();
61d106d3 268 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
269
270
271 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
272 if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
8df8e382 273 //TRD pidProbs
274 particle->GetTRDpid(pidProbs);
275 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
276 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
277
b2a297fa 278 Float_t impactParXY, impactParZ;
279 particle->GetImpactParameters(impactParXY, impactParZ);
280 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
281 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
282
8df8e382 283
284 values[AliDielectronVarManager::kPdgCode]=0;
285 values[AliDielectronVarManager::kPdgCodeMother]=0;
286
287 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
288
289 AliDielectronMC *mc=AliDielectronMC::Instance();
290
291 if (mc->HasMC()){
292 if (mc->GetMCTrack(particle))
293 values[AliDielectronVarManager::kPdgCode]=
294 mc->GetMCTrack(particle)->PdgCode();
295
296 Int_t pdgMother=mc->GetMotherPDG(particle);
297 if (pdgMother!=-999)
298 values[AliDielectronVarManager::kPdgCodeMother]=pdgMother;
299
300 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
301 } //if(mc->HasMC())
302
303
304
305 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
306
307 Double_t itsdEdx[4];
308 particle->GetITSdEdxSamples(itsdEdx);
309
310 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
311 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
312 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
313 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
3505bfad 314 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
315
b2a297fa 316 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
b2a297fa 317 //dEdx information
318 Double_t mom = particle->GetP();
319 const AliExternalTrackParam *in=particle->GetInnerParam();
320 if (in) mom = in->GetP();
321 values[AliDielectronVarManager::kPIn]=mom;
322 values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal();
6551594b 323 // nsigma to Electron band
324 // TODO: for the moment we set the bethe bloch parameters manually
325 // this should be changed in future!
48609e3d 326
6551594b 327 values[AliDielectronVarManager::kTPCnSigmaEle]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kElectron);
48609e3d 328 //-AliDielectronPID::GetCorrVal();
572b0139 329 values[AliDielectronVarManager::kTPCnSigmaPio]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kPion);
330 values[AliDielectronVarManager::kTPCnSigmaMuo]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kMuon);
331 values[AliDielectronVarManager::kTPCnSigmaKao]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kKaon);
332 values[AliDielectronVarManager::kTPCnSigmaPro]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kProton);
333
9143d69f 334 values[AliDielectronVarManager::kITSnSigmaEle]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kElectron);
335 values[AliDielectronVarManager::kITSnSigmaPio]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kPion);
336 values[AliDielectronVarManager::kITSnSigmaMuo]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kMuon);
337 values[AliDielectronVarManager::kITSnSigmaKao]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kKaon);
338 values[AliDielectronVarManager::kITSnSigmaPro]=fgESDpid->NumberOfSigmasITS(particle,AliPID::kProton);
339
572b0139 340 Double_t t0=fgESDpid->GetTOFResponse().GetTimeZero();
8df8e382 341 values[AliDielectronVarManager::kTOFnSigmaEle]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kElectron,t0);
572b0139 342 values[AliDielectronVarManager::kTOFnSigmaPio]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kPion,t0);
343 values[AliDielectronVarManager::kTOFnSigmaMuo]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kMuon,t0);
344 values[AliDielectronVarManager::kTOFnSigmaKao]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kKaon,t0);
345 values[AliDielectronVarManager::kTOFnSigmaPro]=fgESDpid->NumberOfSigmasTOF(particle,AliPID::kProton,t0);
b2a297fa 346}
347
348inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
349{
350 //
351 // Fill track information available for histogramming into an array
352 //
353
354 // Fill common AliVParticle interface information
355 FillVarVParticle(particle, values);
572b0139 356
357 // Reset AliESDtrack interface specific information
358 values[AliDielectronVarManager::kNclsITS] = 0;
164bfb53 359 values[AliDielectronVarManager::kNclsTPC] = particle->GetTPCNcls();
572b0139 360 values[AliDielectronVarManager::kNFclsTPC] = 0;
361 values[AliDielectronVarManager::kNclsTRD] = 0;
362 values[AliDielectronVarManager::kTRDntracklets] = 0;
363 values[AliDielectronVarManager::kTRDpidQuality] = 0;
61d106d3 364
365 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
366 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
367
8df8e382 368 //TRD pidProbs
369 //TODO: set correctly
370 values[AliDielectronVarManager::kTRDprobEle] = 0;
371 values[AliDielectronVarManager::kTRDprobPio] = 0;
372
572b0139 373 //TODO: This is only an approximation!!!
164bfb53 374 values[AliDielectronVarManager::kTPCsignalN] = values[AliDielectronVarManager::kNclsTPC];
572b0139 375
376// Fill AliAODTrack interface information
b2a297fa 377 // ...
572b0139 378 values[AliDielectronVarManager::kImpactParXY] = particle->DCA();
379 values[AliDielectronVarManager::kImpactParZ] = particle->ZAtDCA();
380
381 values[AliDielectronVarManager::kPIn]=0;
382 values[AliDielectronVarManager::kTPCsignal]=0;
383
384 values[AliDielectronVarManager::kTPCnSigmaEle]=0;
385 values[AliDielectronVarManager::kTPCnSigmaPio]=0;
386 values[AliDielectronVarManager::kTPCnSigmaMuo]=0;
387 values[AliDielectronVarManager::kTPCnSigmaKao]=0;
388 values[AliDielectronVarManager::kTPCnSigmaPro]=0;
b2a297fa 389
3505bfad 390 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
572b0139 391
392 AliAODPid *pid=particle->GetDetPid();
393 if (pid){
394 Double_t mom =pid->GetTPCmomentum();
395 //TODO: kTPCsignalN is only an approximation (see above)!!
396
397 Double_t tpcNsigmaEle=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
398 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]) ,AliPID::kElectron);
572b0139 399 Double_t tpcNsigmaPio=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
400 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kPion);
572b0139 401 Double_t tpcNsigmaMuo=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
402 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kMuon);
572b0139 403 Double_t tpcNsigmaKao=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
404 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kKaon);
572b0139 405 Double_t tpcNsigmaPro=fgESDpid->GetTPCResponse().GetNumberOfSigmas(mom,pid->GetTPCsignal(),
406 TMath::Nint(values[AliDielectronVarManager::kTPCsignalN]),AliPID::kProton);
407
164bfb53 408 values[AliDielectronVarManager::kPIn]=mom;
572b0139 409 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
410
411 values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle;
412 values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio;
413 values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo;
414 values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao;
415 values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
416
417 values[AliDielectronVarManager::kTRDntracklets] = 0;
418 values[AliDielectronVarManager::kTRDpidQuality] = 0;
419
420 }
b2a297fa 421}
422
423inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
424{
425 //
426 // Fill track information available for histogramming into an array
427 //
428
429 // Fill common AliVParticle interface information
430 FillVarVParticle(particle, values);
431
8df8e382 432
433 values[AliDielectronVarManager::kPdgCode]=0;
434 values[AliDielectronVarManager::kPdgCodeMother]=0;
435
436 AliDielectronMC *mc=AliDielectronMC::Instance();
437
b2a297fa 438 // Fill AliMCParticle interface specific information
439 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
8df8e382 440
441 AliMCParticle *mother = mc->GetMCTrackMother(particle);
442 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
443
444
445 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 446}
447
448inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
449{
450 //
451 // Fill track information available for histogramming into an array
452 //
453
454 // Fill common AliVParticle interface information
455 FillVarVParticle(particle, values);
456
8df8e382 457
458 values[AliDielectronVarManager::kPdgCode]=0;
459 values[AliDielectronVarManager::kPdgCodeMother]=0;
460
461 AliDielectronMC *mc=AliDielectronMC::Instance();
462
463
b2a297fa 464 // Fill AliAODMCParticle interface specific information
8df8e382 465 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
466
467 AliVParticle *mother = mc->GetMCTrackMother(particle);
468 if (mother) values[AliDielectronVarManager::kPdgCodeMother] = mother->PdgCode();
469
470 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 471}
472
473inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
474{
475 //
476 // Fill pair information available for histogramming into an array
477 //
478
479 // Fill common AliVParticle interface information
480 FillVarVParticle(pair, values);
481
482 // Fill AliDielectronPair specific information
483 const AliKFParticle &kfPair = pair->GetKFParticle();
61d106d3 484
485 Double_t thetaHE=0;
486 Double_t phiHE=0;
487 Double_t thetaCS=0;
488 Double_t phiCS=0;
489
490 pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS);
491
b2a297fa 492 values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF();
493 values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength();
494 values[AliDielectronVarManager::kR] = kfPair.GetR();
495 values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle();
61d106d3 496 values[AliDielectronVarManager::kThetaHE] = thetaHE;
497 values[AliDielectronVarManager::kPhiHE] = phiHE;
498 values[AliDielectronVarManager::kThetaCS] = thetaCS;
499 values[AliDielectronVarManager::kPhiCS] = phiCS;
572b0139 500 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
501 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
61d106d3 502 values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
503 values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
8df8e382 504 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
b2a297fa 505 values[AliDielectronVarManager::kPairType] = pair->GetType();
8df8e382 506
507
508
509 AliDielectronMC *mc=AliDielectronMC::Instance();
510
511 if (mc->HasMC()){
512 Bool_t samemother = mc->HaveSameMother(pair);
513 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
514 }//if (mc->HasMC())
515
516
b2a297fa 517}
518
6551594b 519
520inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
521{
522 //
523 // Fill event information available for histogramming into an array
524 //
525 const AliVVertex *primVtx = event->GetPrimaryVertex();
8df8e382 526
527 values[AliDielectronVarManager::kXvPrim] = 0;
528 values[AliDielectronVarManager::kYvPrim] = 0;
529 values[AliDielectronVarManager::kZvPrim] = 0;
530 values[AliDielectronVarManager::kChi2NDF] = 0;
531
532 values[AliDielectronVarManager::kNTrk] = 0;
533 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
534
535 if (!primVtx) return;
536
6551594b 537 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
538 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
539 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
540 values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF();
541
542 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
6551594b 543}
544
545inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
546{
547 //
548 // Fill event information available for histogramming into an array
549 //
550
551 // Fill common AliVEvent interface information
552 FillVarVEvent(event, values);
553
554 // Fill AliESDEvent interface specific information
555 const AliESDVertex *primVtx = event->GetPrimaryVertex();
556 values[AliDielectronVarManager::kXRes] = primVtx->GetXRes();
557 values[AliDielectronVarManager::kYRes] = primVtx->GetYRes();
558 values[AliDielectronVarManager::kZRes] = primVtx->GetZRes();
559}
560
561inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
562{
563 //
564 // Fill event information available for histogramming into an array
565 //
566
567 // Fill common AliVEvent interface information
568 FillVarVEvent(event, values);
569
570 // Fill AliAODEvent interface specific information
571}
572
573inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
574{
575 //
576 // Fill event information available for histogramming into an array
577 //
578
579 // Fill common AliVEvent interface information
580 FillVarVEvent(event, values);
581
582 // Fill AliMCEvent interface specific information
583}
584
585inline void AliDielectronVarManager::InitESDpid(Int_t type)
586{
587 //
588 // initialize PID parameters
589 // type=0 is simulation
590 // type=1 is data
591
572b0139 592 if (!fgESDpid) fgESDpid=new AliESDpid;
6551594b 593 Double_t alephParameters[5];
594 // simulation
595 alephParameters[0] = 2.15898e+00/50.;
596 alephParameters[1] = 1.75295e+01;
597 alephParameters[2] = 3.40030e-09;
598 alephParameters[3] = 1.96178e+00;
599 alephParameters[4] = 3.91720e+00;
8df8e382 600 fgESDpid->GetTOFResponse().SetTimeResolution(80.);
6551594b 601
602 // data
83e37742 603 if (type==1){
604 alephParameters[0] = 0.0283086/0.97;
6551594b 605 alephParameters[1] = 2.63394e+01;
606 alephParameters[2] = 5.04114e-11;
607 alephParameters[3] = 2.12543e+00;
608 alephParameters[4] = 4.88663e+00;
8df8e382 609 fgESDpid->GetTOFResponse().SetTimeResolution(130.);
83e37742 610 fgESDpid->GetTPCResponse().SetMip(50.);
6551594b 611 }
612
613 fgESDpid->GetTPCResponse().SetBetheBlochParameters(
614 alephParameters[0],alephParameters[1],alephParameters[2],
615 alephParameters[3],alephParameters[4]);
616
8df8e382 617 fgESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
6551594b 618}
619
572b0139 620
621inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
622{
623
624 fgEvent = ev;
625 if (fgKFVertex) delete fgKFVertex;
626 fgKFVertex=0x0;
8df8e382 627 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
572b0139 628}
b2a297fa 629/*
630inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
631{
632 //
633 // Fill track information available for histogramming into an array
634 //
635
636 // Fill TParticle interface information
637 values[AliDielectronVarManager::kPx] = particle->Px();
638 values[AliDielectronVarManager::kPy] = particle->Py();
639 values[AliDielectronVarManager::kPz] = particle->Pz();
640 values[AliDielectronVarManager::kPt] = particle->Pt();
641 values[AliDielectronVarManager::kP] = particle->P();
642
643 values[AliDielectronVarManager::kXv] = particle->Vx();
644 values[AliDielectronVarManager::kYv] = particle->Vy();
645 values[AliDielectronVarManager::kZv] = particle->Vz();
646
647 values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt();
648 values[AliDielectronVarManager::kPhi] = particle->Phi();
649 values[AliDielectronVarManager::kTheta] =
650 values[AliDielectronVarManager::kEta] = particle->Eta();
651 values[AliDielectronVarManager::kY] =
652
653 values[AliDielectronVarManager::kE] = particle->Energy();
654 values[AliDielectronVarManager::kM] = particle->GetMass();
655
656 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly
657
658}*/
659
660#endif