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