]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/dielectron/AliDielectronVarManager.h
Fixes for coverity defects (Jens, Ionut).
[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>
4649c75b 45#include <AliCentrality.h>
2a14a7b1 46#include <AliAODpidUtil.h>
8df8e382 47#include <AliPID.h>
ba15fdfb 48#include <AliPIDResponse.h>
6551594b 49
b2a297fa 50#include "AliDielectronPair.h"
8df8e382 51#include "AliDielectronMC.h"
48609e3d 52#include "AliDielectronPID.h"
ba15fdfb 53#include "AliDielectronHelper.h"
b2a297fa 54
55class AliVEvent;
56
57//________________________________________________________________
58class AliDielectronVarManager : public TNamed {
59
60public:
8df8e382 61
b2a297fa 62 // Particle specific variables
63 enum ValueTypes {
64 kPx = 0, // px
65 kPy, // py
66 kPz, // pz
67 kPt, // transverse momentum
68 kP, // momentum
69 kXv, // vertex position in x
70 kYv, // vertex position in y
71 kZv, // vertex position in z
72 kOneOverPt, // 1/pt
73 kPhi, // phi angle
74 kTheta, // theta angle
75 kEta, // pseudo-rapidity
76 kY, // rapidity
77 kE, // energy
78 kM, // mass
79 kCharge, // charge
80 kNclsITS, // number of clusters assigned in the ITS
81 kNclsTPC, // number of clusters assigned in the TPC
554e40f8 82 kNclsTPCiter1, // number of clusters assigned in the TPC after first iteration
b2a297fa 83 kNFclsTPC, // number of findable clusters in the TPC
45b2b1b8 84 kNFclsTPCr, // number of findable clusters in the TPC with more robust definition
fb7d2d99 85 kNFclsTPCrFrac, // number of found/findable clusters in the TPC with more robust definition
b2a297fa 86 kTPCsignalN, // number of points used for dEdx
ba15fdfb 87 kTPCsignalNfrac, // fraction of points used for dEdx / cluster used for tracking
61d106d3 88 kTPCchi2Cl, // chi2/cl in TPC
89 kTrackStatus, // track status bits
8df8e382 90
b2a297fa 91 kNclsTRD, // number of clusters assigned in the TRD
92 kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter
93 kTRDpidQuality, // number of TRD tracklets used for PID
8df8e382 94 kTRDprobEle, // TRD electron pid probability
95 kTRDprobPio, // TRD electron pid probability
96
b2a297fa 97 kImpactParXY, // Impact parameter in XY plane
98 kImpactParZ, // Impact parameter in Z
99 kTrackLength, // Track length
100 kPdgCode, // PDG code
8df8e382 101
102 kPdgCodeMother, // PDG code of the mother
ba15fdfb 103 kPdgCodeGrandMother, // PDG code of the mother
104
8df8e382 105 kNumberOfDaughters, // number of daughters
106 kHaveSameMother, // check that particles have the same mother (MC)
fb7d2d99 107 kIsJpsiPrimary, // check if the particle is primary (MC)
8df8e382 108 kITSsignal, // ITS dE/dx signal
109 kITSsignalSSD1, // SSD1 dE/dx signal
110 kITSsignalSSD2, // SSD2 dE/dx signal
111 kITSsignalSDD1, // SDD1 dE/dx signal
112 kITSsignalSDD2, // SDD2 dE/dx signal
3505bfad 113 kITSclusterMap, // ITS cluster map
9143d69f 114 kITSnSigmaEle, // number of sigmas to the dE/dx electron line in the ITS
115 kITSnSigmaPio, // number of sigmas to the dE/dx pion line in the ITS
116 kITSnSigmaMuo, // number of sigmas to the dE/dx muon line in the ITS
117 kITSnSigmaKao, // number of sigmas to the dE/dx kaon line in the ITS
118 kITSnSigmaPro, // number of sigmas to the dE/dx proton line in the ITS
8df8e382 119
b2a297fa 120 kPIn, // momentum at inner wall of TPC (if available), used for PID
121 kTPCsignal, // TPC dE/dx signal
ba15fdfb 122
123 kTOFsignal, // TOF signal
124 kTOFbeta, // TOF beta
125
6551594b 126 kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
572b0139 127 kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC
128 kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC
129 kTPCnSigmaKao, // number of sigmas to the dE/dx kaon line in the TPC
130 kTPCnSigmaPro, // number of sigmas to the dE/dx proton line in the TPC
131
ba15fdfb 132 kTOFnSigmaEle, // number of sigmas to the pion line in the TOF
572b0139 133 kTOFnSigmaPio, // number of sigmas to the pion line in the TOF
134 kTOFnSigmaMuo, // number of sigmas to the muon line in the TOF
135 kTOFnSigmaKao, // number of sigmas to the kaon line in the TOF
136 kTOFnSigmaPro, // number of sigmas to the proton line in the TOF
8df8e382 137
ffbede40 138 kKinkIndex0, // kink index 0
139
b2a297fa 140 kParticleMax, //
141 // TODO: kRNClusters ??
142 // AliDielectronPair specific variables
143 kChi2NDF = kParticleMax, // Chi^2/NDF
144 kDecayLength, // decay length
145 kR, // distance to the origin
146 kOpeningAngle, // opening angle
8df8e382 147 // helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector
148 kThetaHE, // theta in mother's rest frame in the helicity picture
149 kPhiHE, // phi in mother's rest frame in the helicity picture
150 // Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between
151 // the 3-mom vectors of target and projectile beams
152 kThetaCS, // theta in mother's rest frame in Collins-Soper picture
153 kPhiCS, // phi in mother's rest frame in Collins-Soper picture
572b0139 154 kLegDist, // distance of the legs
155 kLegDistXY, // distance of the legs in XY
61d106d3 156 kDeltaEta, // Absolute value of Delta Eta for the legs
157 kDeltaPhi, // Absolute value of Delta Phi for the legs
b2a297fa 158 kMerr, // error of mass calculation
159 kDCA, // distance of closest approach TODO: not implemented yet
160 kPairType, // type of the pair, like like sign ++ unlikesign ...
ba15fdfb 161 kPseudoProperTime, // pseudo proper time
b2a297fa 162 kPairMax, //
163 // Event specific variables
6551594b 164 kXvPrim=kPairMax, // prim vertex
165 kYvPrim, // prim vertex
166 kZvPrim, // prim vertex
167 kXRes, // primary vertex x-resolution
168 kYRes, // primary vertex y-resolution
169 kZRes, // primary vertex z-resolution
ba15fdfb 170 kNTrk, // number of tracks (or tracklets) TODO: ambiguous
171 kTracks, // ESD tracks TODO: ambiguous
172 kNacc, // Number of accepted tracks
173 kNaccTrcklts, // Number of accepted tracklets (MUON definition)
174 kNch, // Number of charged MC tracks
ffbede40 175 kCentrality, // event centrality fraction
6551594b 176 kNevents, // event counter
b2a297fa 177 kNMaxValues //
178 // TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
179 };
180
181
182 AliDielectronVarManager();
183 AliDielectronVarManager(const char* name, const char* title);
184 virtual ~AliDielectronVarManager();
185 static void Fill(const TObject* particle, Double_t * const values);
ba15fdfb 186 static void FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values);
b2a297fa 187
6551594b 188 static void InitESDpid(Int_t type=0);
2a14a7b1 189 static void InitAODpidUtil(Int_t type=0);
ba15fdfb 190 static void SetESDpid(AliESDpid * const pid) {fgPIDResponse=pid;}
191 static AliESDpid* GetESDpid() {return (AliESDpid*)fgPIDResponse;}
192 static AliAODpidUtil* GetAODpidUtil() {return (AliAODpidUtil*)fgPIDResponse;}
193 static void SetPIDResponse(AliPIDResponse *pidResponse) {fgPIDResponse=pidResponse;}
572b0139 194 static void SetEvent(AliVEvent * const ev);
2a14a7b1 195 static Bool_t GetDCA(const AliAODTrack *track, Double_t d0z0[2]);
ba15fdfb 196
197 static const AliKFVertex* GetKFVertex() {return fgKFVertex;}
198
b2a297fa 199 static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
ba15fdfb 200
201 static const Double_t* GetData() {return fgData;}
202
203 static Double_t GetValue(ValueTypes val) {return fgData[val];}
b2a297fa 204private:
205
206 static const char* fgkParticleNames[kNMaxValues]; //variable names
207
208 static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
209 static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values);
210 static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values);
8df8e382 211 static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
b2a297fa 212 static void FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values);
213 static void FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values);
1201a1a9 214 static void FillVarKFParticle(const AliKFParticle *pair, Double_t * const values);
215
6551594b 216 static void FillVarVEvent(const AliVEvent *event, Double_t * const values);
217 static void FillVarESDEvent(const AliESDEvent *event, Double_t * const values);
218 static void FillVarAODEvent(const AliAODEvent *event, Double_t * const values);
219 static void FillVarMCEvent(const AliMCEvent *event, Double_t * const values);
8df8e382 220
ba15fdfb 221 static AliPIDResponse *fgPIDResponse; // PID response object
222 static AliVEvent *fgEvent; // current event pointer
223 static AliKFVertex *fgKFVertex; // kf vertex
224
225 static Double_t fgData[kNMaxValues]; //! data
572b0139 226
b2a297fa 227 AliDielectronVarManager(const AliDielectronVarManager &c);
228 AliDielectronVarManager &operator=(const AliDielectronVarManager &c);
229
230 ClassDef(AliDielectronVarManager,1);
231};
232
233
234//Inline functions
6551594b 235inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * const values)
b2a297fa 236{
237 //
238 // Main function to fill all available variables according to the type of particle
239 //
6551594b 240 if (object->IsA() == AliESDtrack::Class()) FillVarESDtrack(static_cast<const AliESDtrack*>(object), values);
241 else if (object->IsA() == AliAODTrack::Class()) FillVarAODTrack(static_cast<const AliAODTrack*>(object), values);
242 else if (object->IsA() == AliMCParticle::Class()) FillVarMCParticle(static_cast<const AliMCParticle*>(object), values);
243 else if (object->IsA() == AliAODMCParticle::Class()) FillVarAODMCParticle(static_cast<const AliAODMCParticle*>(object), values);
244 else if (object->IsA() == AliDielectronPair::Class()) FillVarDielectronPair(static_cast<const AliDielectronPair*>(object), values);
1201a1a9 245 else if (object->IsA() == AliKFParticle::Class()) FillVarKFParticle(static_cast<const AliKFParticle*>(object),values);
6551594b 246 // Main function to fill all available variables according to the type of event
247
248 else if (object->IsA() == AliVEvent::Class()) FillVarVEvent(static_cast<const AliVEvent*>(object), values);
249 else if (object->IsA() == AliESDEvent::Class()) FillVarESDEvent(static_cast<const AliESDEvent*>(object), values);
250 else if (object->IsA() == AliAODEvent::Class()) FillVarAODEvent(static_cast<const AliAODEvent*>(object), values);
251 else if (object->IsA() == AliMCEvent::Class()) FillVarMCEvent(static_cast<const AliMCEvent*>(object), values);
1201a1a9 252// else printf(Form("AliDielectronVarManager::Fill: Type %s is not supported by AliDielectronVarManager!", object->ClassName())); //TODO: implement without object needed
b2a297fa 253}
254
255inline void AliDielectronVarManager::FillVarVParticle(const AliVParticle *particle, Double_t * const values)
256{
257 //
258 // Fill track information available in AliVParticle into an array
259 //
260 values[AliDielectronVarManager::kPx] = particle->Px();
261 values[AliDielectronVarManager::kPy] = particle->Py();
262 values[AliDielectronVarManager::kPz] = particle->Pz();
263 values[AliDielectronVarManager::kPt] = particle->Pt();
264 values[AliDielectronVarManager::kP] = particle->P();
265
266 values[AliDielectronVarManager::kXv] = particle->Xv();
267 values[AliDielectronVarManager::kYv] = particle->Yv();
268 values[AliDielectronVarManager::kZv] = particle->Zv();
269
ba15fdfb 270 values[AliDielectronVarManager::kOneOverPt] = (particle->Pt()>1.0e-3 ? particle->OneOverPt() : 0.0);
b2a297fa 271 values[AliDielectronVarManager::kPhi] = particle->Phi();
272 values[AliDielectronVarManager::kTheta] = particle->Theta();
273 values[AliDielectronVarManager::kEta] = particle->Eta();
274 values[AliDielectronVarManager::kY] = particle->Y();
8df8e382 275
b2a297fa 276 values[AliDielectronVarManager::kE] = particle->E();
277 values[AliDielectronVarManager::kM] = particle->M();
278 values[AliDielectronVarManager::kCharge] = particle->Charge();
2a14a7b1 279
280 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
281
ba15fdfb 282// if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
283 for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues; ++i)
284 values[i]=fgData[i];
b2a297fa 285}
286
287inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle, Double_t * const values)
288{
289 //
290 // Fill track information available for histogramming into an array
291 //
292
293 // Fill common AliVParticle interface information
294 FillVarVParticle(particle, values);
295
8df8e382 296 Double_t pidProbs[AliPID::kSPECIES];
b2a297fa 297 // Fill AliESDtrack interface specific information
164bfb53 298 Double_t tpcNcls=particle->GetTPCNcls();
ba15fdfb 299 Double_t tpcSignalN=particle->GetTPCsignalN();
b2a297fa 300 values[AliDielectronVarManager::kNclsITS] = particle->GetNcls(0); // TODO: get rid of the plain numbers
61d106d3 301 values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
ffbede40 302 values[AliDielectronVarManager::kNclsTPCiter1] = particle->GetTPCNclsIter1(); // TODO: get rid of the plain numbers
b2a297fa 303 values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
45b2b1b8 304 values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1);
fb7d2d99 305 values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2);
ba15fdfb 306 values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
307 values[AliDielectronVarManager::kTPCsignalNfrac]= tpcNcls>0?tpcSignalN/tpcNcls:0;
b2a297fa 308 values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers
309 values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
310 values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDpidQuality();
61d106d3 311 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
312
313
314 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
315 if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
8df8e382 316 //TRD pidProbs
317 particle->GetTRDpid(pidProbs);
318 values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
319 values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
ffbede40 320
321 values[AliDielectronVarManager::kKinkIndex0] = particle->GetKinkIndex(0);
8df8e382 322
b2a297fa 323 Float_t impactParXY, impactParZ;
324 particle->GetImpactParameters(impactParXY, impactParZ);
325 values[AliDielectronVarManager::kImpactParXY] = impactParXY;
326 values[AliDielectronVarManager::kImpactParZ] = impactParZ;
327
8df8e382 328
ba15fdfb 329 values[AliDielectronVarManager::kPdgCode]=-1;
330 values[AliDielectronVarManager::kPdgCodeMother]=-1;
331 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
332
8df8e382 333 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
334
335 AliDielectronMC *mc=AliDielectronMC::Instance();
336
337 if (mc->HasMC()){
338 if (mc->GetMCTrack(particle))
ba15fdfb 339 values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
8df8e382 340
ba15fdfb 341 AliMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
342 if (motherMC){
343 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
344
345 motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
346 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
347 }
348
8df8e382 349 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
350 } //if(mc->HasMC())
351
352
353
354 values[AliDielectronVarManager::kITSsignal] = particle->GetITSsignal();
355
356 Double_t itsdEdx[4];
357 particle->GetITSdEdxSamples(itsdEdx);
358
359 values[AliDielectronVarManager::kITSsignalSSD1] = itsdEdx[0];
360 values[AliDielectronVarManager::kITSsignalSSD2] = itsdEdx[1];
361 values[AliDielectronVarManager::kITSsignalSDD1] = itsdEdx[2];
362 values[AliDielectronVarManager::kITSsignalSDD2] = itsdEdx[3];
3505bfad 363 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
364
b2a297fa 365 values[AliDielectronVarManager::kTrackLength] = particle->GetIntegratedLength();
b2a297fa 366 //dEdx information
367 Double_t mom = particle->GetP();
368 const AliExternalTrackParam *in=particle->GetInnerParam();
369 if (in) mom = in->GetP();
370 values[AliDielectronVarManager::kPIn]=mom;
371 values[AliDielectronVarManager::kTPCsignal]=particle->GetTPCsignal();
ba15fdfb 372
373 values[AliDielectronVarManager::kTOFsignal]=particle->GetTOFsignal();
374
375 Double_t l = particle->GetIntegratedLength(); // cm
376 Double_t t = particle->GetTOFsignal();
377 Double_t t0 = fgPIDResponse->GetTOFResponse().GetTimeZero(); // ps
378
379 if( (l < 360. || l > 800.) || (t <= 0.) || (t0 >999990.0) ) {
380 values[AliDielectronVarManager::kTOFbeta]=0.0;
381 }
382 else {
383 t -= t0; // subtract the T0
384 l *= 0.01; // cm ->m
385 t *= 1e-12; //ps -> s
386
387 Double_t v = l / t;
388 Float_t beta = v / TMath::C();
389 values[AliDielectronVarManager::kTOFbeta]=beta;
390 }
391
6551594b 392 // nsigma to Electron band
393 // TODO: for the moment we set the bethe bloch parameters manually
394 // this should be changed in future!
48609e3d 395
ba15fdfb 396 values[AliDielectronVarManager::kTPCnSigmaEle]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron)-AliDielectronPID::GetCorrVal();
397 values[AliDielectronVarManager::kTPCnSigmaPio]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion);
398 values[AliDielectronVarManager::kTPCnSigmaMuo]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon);
399 values[AliDielectronVarManager::kTPCnSigmaKao]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon);
400 values[AliDielectronVarManager::kTPCnSigmaPro]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kProton);
401
402 values[AliDielectronVarManager::kITSnSigmaEle]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kElectron);
403 values[AliDielectronVarManager::kITSnSigmaPio]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kPion);
404 values[AliDielectronVarManager::kITSnSigmaMuo]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kMuon);
405 values[AliDielectronVarManager::kITSnSigmaKao]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kKaon);
406 values[AliDielectronVarManager::kITSnSigmaPro]=fgPIDResponse->NumberOfSigmasITS(particle,AliPID::kProton);
407
408 values[AliDielectronVarManager::kTOFnSigmaEle]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kElectron);
409 values[AliDielectronVarManager::kTOFnSigmaPio]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kPion);
410 values[AliDielectronVarManager::kTOFnSigmaMuo]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kMuon);
411 values[AliDielectronVarManager::kTOFnSigmaKao]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kKaon);
412 values[AliDielectronVarManager::kTOFnSigmaPro]=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kProton);
b2a297fa 413}
414
415inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle, Double_t * const values)
416{
417 //
418 // Fill track information available for histogramming into an array
419 //
420
421 // Fill common AliVParticle interface information
422 FillVarVParticle(particle, values);
ba15fdfb 423
424 Double_t tpcNcls=particle->GetTPCNcls();
572b0139 425 // Reset AliESDtrack interface specific information
426 values[AliDielectronVarManager::kNclsITS] = 0;
ba15fdfb 427 values[AliDielectronVarManager::kNclsTPC] = tpcNcls;
428 values[AliDielectronVarManager::kNclsTPCiter1] = tpcNcls; // not really available in AOD
572b0139 429 values[AliDielectronVarManager::kNFclsTPC] = 0;
fb7d2d99 430 values[AliDielectronVarManager::kNFclsTPCr] = 0;
431 values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
572b0139 432 values[AliDielectronVarManager::kNclsTRD] = 0;
433 values[AliDielectronVarManager::kTRDntracklets] = 0;
434 values[AliDielectronVarManager::kTRDpidQuality] = 0;
61d106d3 435
436 values[AliDielectronVarManager::kTPCchi2Cl] = -1;
437 values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
438
8df8e382 439 //TRD pidProbs
440 //TODO: set correctly
441 values[AliDielectronVarManager::kTRDprobEle] = 0;
442 values[AliDielectronVarManager::kTRDprobPio] = 0;
443
2a14a7b1 444 values[AliDielectronVarManager::kTPCsignalN] = 0;
ba15fdfb 445 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
572b0139 446
2a14a7b1 447 // Fill AliAODTrack interface information
448 //
449 Double_t d0z0[2];
450 GetDCA(particle, d0z0);
451 values[AliDielectronVarManager::kImpactParXY] = d0z0[0];
452 values[AliDielectronVarManager::kImpactParZ] = d0z0[1];
572b0139 453
454 values[AliDielectronVarManager::kPIn]=0;
455 values[AliDielectronVarManager::kTPCsignal]=0;
ba15fdfb 456
457 values[AliDielectronVarManager::kTOFsignal]=0;
458 values[AliDielectronVarManager::kTOFbeta]=0;
572b0139 459
460 values[AliDielectronVarManager::kTPCnSigmaEle]=0;
461 values[AliDielectronVarManager::kTPCnSigmaPio]=0;
462 values[AliDielectronVarManager::kTPCnSigmaMuo]=0;
463 values[AliDielectronVarManager::kTPCnSigmaKao]=0;
464 values[AliDielectronVarManager::kTPCnSigmaPro]=0;
b2a297fa 465
3505bfad 466 values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
572b0139 467
468 AliAODPid *pid=particle->GetDetPid();
469 if (pid){
470 Double_t mom =pid->GetTPCmomentum();
ba15fdfb 471 Double_t tpcSignalN=pid->GetTPCsignalN();
472 values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
473 values[AliDielectronVarManager::kTPCsignalN] = tpcNcls>0?tpcSignalN/tpcNcls:0;
474 Double_t tpcNsigmaEle=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron);
475 Double_t tpcNsigmaPio=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion);
476 Double_t tpcNsigmaMuo=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon);
477 Double_t tpcNsigmaKao=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon);
478 Double_t tpcNsigmaPro=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kProton);
572b0139 479
164bfb53 480 values[AliDielectronVarManager::kPIn]=mom;
572b0139 481 values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
482
483 values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle;
484 values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio;
485 values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo;
486 values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao;
487 values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
488
489 values[AliDielectronVarManager::kTRDntracklets] = 0;
490 values[AliDielectronVarManager::kTRDpidQuality] = 0;
491
492 }
ba15fdfb 493
494 values[AliDielectronVarManager::kPdgCode]=-1;
495 values[AliDielectronVarManager::kPdgCodeMother]=-1;
496 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
497
498 values[AliDielectronVarManager::kNumberOfDaughters]=-999;
499
500 AliDielectronMC *mc=AliDielectronMC::Instance();
501
502 if (mc->HasMC()){
503 if (mc->GetMCTrack(particle))
504 values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
505
506 AliAODMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
507 if (motherMC){
508 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
509
510 motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
511 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
512 }
513
514 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
515 } //if(mc->HasMC())
516
b2a297fa 517}
518
519inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
520{
521 //
522 // Fill track information available for histogramming into an array
523 //
524
554e40f8 525 values[AliDielectronVarManager::kNclsITS] = 0;
526 values[AliDielectronVarManager::kNclsTPC] = 0;
527 values[AliDielectronVarManager::kNclsTPCiter1] = 0;
528 values[AliDielectronVarManager::kNFclsTPC] = 0;
fb7d2d99 529 values[AliDielectronVarManager::kNFclsTPCr] = 0;
530 values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
554e40f8 531 values[AliDielectronVarManager::kNclsTRD] = 0;
532 values[AliDielectronVarManager::kTRDntracklets] = 0;
533 values[AliDielectronVarManager::kTRDpidQuality] = 0;
534 values[AliDielectronVarManager::kTPCchi2Cl] = 0;
535 values[AliDielectronVarManager::kTrackStatus] = 0;
536 values[AliDielectronVarManager::kTRDprobEle] = 0;
537 values[AliDielectronVarManager::kTRDprobPio] = 0;
538 values[AliDielectronVarManager::kTPCsignalN] = 0;
ba15fdfb 539 values[AliDielectronVarManager::kTPCsignalNfrac] = 0;
554e40f8 540 values[AliDielectronVarManager::kImpactParXY] = 0;
541 values[AliDielectronVarManager::kImpactParZ] = 0;
542 values[AliDielectronVarManager::kPIn] = 0;
543 values[AliDielectronVarManager::kTPCsignal] = 0;
ba15fdfb 544 values[AliDielectronVarManager::kTOFsignal] = 0;
545 values[AliDielectronVarManager::kTOFbeta] = 0;
554e40f8 546 values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
547 values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
548 values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
549 values[AliDielectronVarManager::kTPCnSigmaKao] = 0;
550 values[AliDielectronVarManager::kTPCnSigmaPro] = 0;
551 values[AliDielectronVarManager::kITSclusterMap] = 0;
552
ba15fdfb 553 values[AliDielectronVarManager::kPdgCode] = -1;
554 values[AliDielectronVarManager::kPdgCodeMother] = -1;
555 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
554e40f8 556
b2a297fa 557 // Fill common AliVParticle interface information
558 FillVarVParticle(particle, values);
8df8e382 559
560 AliDielectronMC *mc=AliDielectronMC::Instance();
561
b2a297fa 562 // Fill AliMCParticle interface specific information
563 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
8df8e382 564
ba15fdfb 565 AliMCParticle *motherMC = mc->GetMCTrackMother(particle);
566 if (motherMC){
567 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
568 motherMC=mc->GetMCTrackMother(motherMC); //grand mother
569 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
570 }
571
fb7d2d99 572 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle);
8df8e382 573 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 574}
575
ba15fdfb 576
577inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values) {
578 //
579 // fill 2 track information starting from MC legs
580 //
581
582 values[AliDielectronVarManager::kNclsITS] = 0;
583 values[AliDielectronVarManager::kNclsTPC] = 0;
584 values[AliDielectronVarManager::kNclsTPCiter1] = 0;
585 values[AliDielectronVarManager::kNFclsTPC] = 0;
586 values[AliDielectronVarManager::kNFclsTPCr] = 0;
587 values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
588 values[AliDielectronVarManager::kNclsTRD] = 0;
589 values[AliDielectronVarManager::kTRDntracklets] = 0;
590 values[AliDielectronVarManager::kTRDpidQuality] = 0;
591 values[AliDielectronVarManager::kTPCchi2Cl] = 0;
592 values[AliDielectronVarManager::kTrackStatus] = 0;
593 values[AliDielectronVarManager::kTRDprobEle] = 0;
594 values[AliDielectronVarManager::kTRDprobPio] = 0;
595 values[AliDielectronVarManager::kTPCsignalN] = 0;
596 values[AliDielectronVarManager::kTPCsignalNfrac] = 0;
597 values[AliDielectronVarManager::kImpactParXY] = 0;
598 values[AliDielectronVarManager::kImpactParZ] = 0;
599 values[AliDielectronVarManager::kPIn] = 0;
600 values[AliDielectronVarManager::kTPCsignal] = 0;
601 values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
602 values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
603 values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
604 values[AliDielectronVarManager::kTPCnSigmaKao] = 0;
605 values[AliDielectronVarManager::kTPCnSigmaPro] = 0;
606 values[AliDielectronVarManager::kITSclusterMap] = 0;
607
608 values[AliDielectronVarManager::kPdgCode] = 0;
609 values[AliDielectronVarManager::kPdgCodeMother] = 0;
610
611 AliDielectronMC *mc=AliDielectronMC::Instance();
612 AliVParticle* mother=0x0;
613 Int_t mLabel1 = mc->GetMothersLabel(p1->GetLabel());
614 Int_t mLabel2 = mc->GetMothersLabel(p2->GetLabel());
615 if(mLabel1==mLabel2)
616 mother = mc->GetMCTrackFromMCEvent(mLabel1);
617 if(mother) // same mother
618 FillVarVParticle(mother, values);
619 else { // the 2 particles come from different mothers so 2-particles quantities are calculated here
620 // AliVParticle part
621 values[AliDielectronVarManager::kPx] = p1->Px()+p2->Px();
622 values[AliDielectronVarManager::kPy] = p1->Py()+p2->Py();
623 values[AliDielectronVarManager::kPz] = p1->Pz()+p2->Pz();
624 values[AliDielectronVarManager::kPt] = TMath::Sqrt(values[AliDielectronVarManager::kPx]*
625 values[AliDielectronVarManager::kPx]+
626 values[AliDielectronVarManager::kPy]*
627 values[AliDielectronVarManager::kPy]);
628 values[AliDielectronVarManager::kP] = TMath::Sqrt(values[AliDielectronVarManager::kPt]*
629 values[AliDielectronVarManager::kPt]+
630 values[AliDielectronVarManager::kPz]*
631 values[AliDielectronVarManager::kPz]);
632
633 values[AliDielectronVarManager::kXv] = 0;
634 values[AliDielectronVarManager::kYv] = 0;
635 values[AliDielectronVarManager::kZv] = 0;
636
637 values[AliDielectronVarManager::kOneOverPt] = (values[AliDielectronVarManager::kPt]>1.0e-6 ? 1.0/values[AliDielectronVarManager::kPt] : 0.0);
638 values[AliDielectronVarManager::kPhi] = TMath::ATan2(values[AliDielectronVarManager::kPy],values[AliDielectronVarManager::kPx]);
639 values[AliDielectronVarManager::kTheta] = TMath::ATan2(values[AliDielectronVarManager::kPt],values[AliDielectronVarManager::kPz]);
640 values[AliDielectronVarManager::kEta] = ((values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])) : -9999.);
641 values[AliDielectronVarManager::kE] = p1->E()+p2->E();
642 values[AliDielectronVarManager::kY] = ((values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])) : -9999.);
643 values[AliDielectronVarManager::kCharge] = p1->Charge()+p2->Charge();
644
645 values[AliDielectronVarManager::kM] = p1->M()*p1->M()+p2->M()*p2->M()+
646 2.0*(p1->E()*p2->E()-p1->Px()*p2->Px()-p1->Py()*p2->Py()-p1->Pz()*p2->Pz());
647
648 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
649 }
650}
651
652
b2a297fa 653inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle *particle, Double_t * const values)
654{
655 //
656 // Fill track information available for histogramming into an array
657 //
658
554e40f8 659 values[AliDielectronVarManager::kNclsITS] = 0;
660 values[AliDielectronVarManager::kNclsTPC] = 0;
661 values[AliDielectronVarManager::kNclsTPCiter1] = 0;
662 values[AliDielectronVarManager::kNFclsTPC] = 0;
663 values[AliDielectronVarManager::kNclsTRD] = 0;
664 values[AliDielectronVarManager::kTRDntracklets] = 0;
665 values[AliDielectronVarManager::kTRDpidQuality] = 0;
666 values[AliDielectronVarManager::kTPCchi2Cl] = 0;
667 values[AliDielectronVarManager::kTrackStatus] = 0;
668 values[AliDielectronVarManager::kTRDprobEle] = 0;
669 values[AliDielectronVarManager::kTRDprobPio] = 0;
670 values[AliDielectronVarManager::kTPCsignalN] = 0;
ba15fdfb 671 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
554e40f8 672 values[AliDielectronVarManager::kImpactParXY] = 0;
673 values[AliDielectronVarManager::kImpactParZ] = 0;
674 values[AliDielectronVarManager::kPIn] = 0;
675 values[AliDielectronVarManager::kTPCsignal] = 0;
676 values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
677 values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
678 values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
679 values[AliDielectronVarManager::kTPCnSigmaKao] = 0;
680 values[AliDielectronVarManager::kTPCnSigmaPro] = 0;
681 values[AliDielectronVarManager::kITSclusterMap] = 0;
682
ba15fdfb 683 values[AliDielectronVarManager::kPdgCode] = -1;
684 values[AliDielectronVarManager::kPdgCodeMother] = -1;
685 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
554e40f8 686
b2a297fa 687 // Fill common AliVParticle interface information
688 FillVarVParticle(particle, values);
554e40f8 689
8df8e382 690 AliDielectronMC *mc=AliDielectronMC::Instance();
691
692
b2a297fa 693 // Fill AliAODMCParticle interface specific information
8df8e382 694 values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
695
ba15fdfb 696 AliAODMCParticle *motherMC = mc->GetMCTrackMother(particle);
697 if (motherMC){
698 values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
699 motherMC=mc->GetMCTrackMother(motherMC); //grand mother
700 if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
701 }
702
703
fb7d2d99 704 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(particle);
8df8e382 705
706 values[AliDielectronVarManager::kNumberOfDaughters]=mc->NumberOfDaughters(particle);
b2a297fa 707}
708
709inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPair *pair, Double_t * const values)
710{
711 //
712 // Fill pair information available for histogramming into an array
713 //
2a14a7b1 714
ba15fdfb 715 values[AliDielectronVarManager::kPdgCode]=-1;
716 values[AliDielectronVarManager::kPdgCodeMother]=-1;
717 values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
2a14a7b1 718
b2a297fa 719 // Fill common AliVParticle interface information
720 FillVarVParticle(pair, values);
721
722 // Fill AliDielectronPair specific information
723 const AliKFParticle &kfPair = pair->GetKFParticle();
61d106d3 724
725 Double_t thetaHE=0;
726 Double_t phiHE=0;
727 Double_t thetaCS=0;
728 Double_t phiCS=0;
729
730 pair->GetThetaPhiCM(thetaHE,phiHE,thetaCS,phiCS);
731
b2a297fa 732 values[AliDielectronVarManager::kChi2NDF] = kfPair.GetChi2()/kfPair.GetNDF();
733 values[AliDielectronVarManager::kDecayLength] = kfPair.GetDecayLength();
734 values[AliDielectronVarManager::kR] = kfPair.GetR();
735 values[AliDielectronVarManager::kOpeningAngle] = pair->OpeningAngle();
61d106d3 736 values[AliDielectronVarManager::kThetaHE] = thetaHE;
737 values[AliDielectronVarManager::kPhiHE] = phiHE;
738 values[AliDielectronVarManager::kThetaCS] = thetaCS;
739 values[AliDielectronVarManager::kPhiCS] = phiCS;
572b0139 740 values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
741 values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
61d106d3 742 values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
743 values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
8df8e382 744 values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
b2a297fa 745 values[AliDielectronVarManager::kPairType] = pair->GetType();
ba15fdfb 746 values[AliDielectronVarManager::kPseudoProperTime] = pair->GetPseudoProperTime(fgEvent->GetPrimaryVertex());
8df8e382 747
748
749 AliDielectronMC *mc=AliDielectronMC::Instance();
750
751 if (mc->HasMC()){
ba15fdfb 752 Bool_t samemother = mc->HaveSameMother(pair);
753 values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(pair);
754 values[AliDielectronVarManager::kHaveSameMother] = samemother ;
755
8df8e382 756 }//if (mc->HasMC())
757
758
b2a297fa 759}
760
1201a1a9 761inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *particle, Double_t * const values)
762{
763 //
764 // Fill track information available in AliVParticle into an array
765 //
766 values[AliDielectronVarManager::kPx] = particle->GetPx();
767 values[AliDielectronVarManager::kPy] = particle->GetPy();
768 values[AliDielectronVarManager::kPz] = particle->GetPz();
769 values[AliDielectronVarManager::kPt] = particle->GetPt();
770 values[AliDielectronVarManager::kP] = particle->GetP();
771
772 values[AliDielectronVarManager::kXv] = particle->GetX();
773 values[AliDielectronVarManager::kYv] = particle->GetY();
774 values[AliDielectronVarManager::kZv] = particle->GetZ();
775
776 values[AliDielectronVarManager::kOneOverPt] = 0;
777 values[AliDielectronVarManager::kPhi] = particle->GetPhi();
778 values[AliDielectronVarManager::kTheta] = 0.;
779 values[AliDielectronVarManager::kEta] = particle->GetEta();
780 values[AliDielectronVarManager::kY] = ((particle->GetE()*particle->GetE()-particle->GetPx()*particle->GetPx()-particle->GetPy()*particle->GetPy()-particle->GetPz()*particle->GetPz())>0.) ? TLorentzVector(particle->GetPx(),particle->GetPy(),particle->GetPz(),particle->GetE()).Rapidity() : -1111.;
781
782 values[AliDielectronVarManager::kE] = particle->GetE();
783 values[AliDielectronVarManager::kM] = particle->GetMass();
784 values[AliDielectronVarManager::kCharge] = particle->GetQ();
785
786 values[AliDielectronVarManager::kNclsITS] = 0;
787 values[AliDielectronVarManager::kNclsTPC] = 0;
788 values[AliDielectronVarManager::kNclsTPCiter1] = 0;
789 values[AliDielectronVarManager::kNFclsTPC] = 0;
790 values[AliDielectronVarManager::kNclsTRD] = 0;
791 values[AliDielectronVarManager::kTRDntracklets] = 0;
792 values[AliDielectronVarManager::kTRDpidQuality] = 0;
793 values[AliDielectronVarManager::kTPCchi2Cl] = 0;
794 values[AliDielectronVarManager::kTrackStatus] = 0;
795 values[AliDielectronVarManager::kTRDprobEle] = 0;
796 values[AliDielectronVarManager::kTRDprobPio] = 0;
797 values[AliDielectronVarManager::kTPCsignalN] = 0;
ba15fdfb 798 values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
1201a1a9 799 values[AliDielectronVarManager::kImpactParXY] = 0;
800 values[AliDielectronVarManager::kImpactParZ] = 0;
801 values[AliDielectronVarManager::kPIn] = 0;
802 values[AliDielectronVarManager::kTPCsignal] = 0;
ba15fdfb 803 values[AliDielectronVarManager::kTOFsignal] = 0;
804 values[AliDielectronVarManager::kTOFbeta] = 0;
1201a1a9 805 values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
806 values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
807 values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
808 values[AliDielectronVarManager::kTPCnSigmaKao] = 0;
809 values[AliDielectronVarManager::kTPCnSigmaPro] = 0;
810 values[AliDielectronVarManager::kITSclusterMap] = 0;
811
ba15fdfb 812 values[AliDielectronVarManager::kPdgCode] = -1;
813 values[AliDielectronVarManager::kPdgCodeMother] = -1;
814 values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
1201a1a9 815
816
817 if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
818}
6551594b 819
820inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Double_t * const values)
821{
822 //
823 // Fill event information available for histogramming into an array
824 //
825 const AliVVertex *primVtx = event->GetPrimaryVertex();
8df8e382 826
827 values[AliDielectronVarManager::kXvPrim] = 0;
828 values[AliDielectronVarManager::kYvPrim] = 0;
829 values[AliDielectronVarManager::kZvPrim] = 0;
ba15fdfb 830// values[AliDielectronVarManager::kChi2NDF] = 0; //This is the pair value!!!
8df8e382 831
832 values[AliDielectronVarManager::kNTrk] = 0;
ba15fdfb 833 values[AliDielectronVarManager::kNacc] = 0;
834 values[AliDielectronVarManager::kNaccTrcklts] = 0;
8df8e382 835 values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
836
837 if (!primVtx) return;
838
6551594b 839 values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
840 values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
841 values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
ba15fdfb 842// values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value
6551594b 843
844 values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
ba15fdfb 845 values[AliDielectronVarManager::kNacc] = AliDielectronHelper::GetNacc(event);
846 values[AliDielectronVarManager::kNaccTrcklts] = AliDielectronHelper::GetNaccTrcklts(event);
6551594b 847}
848
849inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
850{
851 //
852 // Fill event information available for histogramming into an array
853 //
854
855 // Fill common AliVEvent interface information
856 FillVarVEvent(event, values);
ffbede40 857
858 Double_t centralityF=-1;
4649c75b 859 AliCentrality *esdCentrality = const_cast<AliESDEvent*>(event)->GetCentrality();
ffbede40 860 if (esdCentrality) centralityF = esdCentrality->GetCentralityPercentile("V0M");
861
6551594b 862 // Fill AliESDEvent interface specific information
863 const AliESDVertex *primVtx = event->GetPrimaryVertex();
864 values[AliDielectronVarManager::kXRes] = primVtx->GetXRes();
865 values[AliDielectronVarManager::kYRes] = primVtx->GetYRes();
866 values[AliDielectronVarManager::kZRes] = primVtx->GetZRes();
ffbede40 867 values[AliDielectronVarManager::kCentrality] = centralityF;
6551594b 868}
869
870inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
871{
872 //
873 // Fill event information available for histogramming into an array
874 //
875
876 // Fill common AliVEvent interface information
877 FillVarVEvent(event, values);
878
879 // Fill AliAODEvent interface specific information
880}
881
882inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
883{
884 //
885 // Fill event information available for histogramming into an array
886 //
887
888 // Fill common AliVEvent interface information
889 FillVarVEvent(event, values);
890
891 // Fill AliMCEvent interface specific information
ba15fdfb 892 values[AliDielectronVarManager::kNch] = AliDielectronHelper::GetNch(event, 1.6);
6551594b 893}
894
895inline void AliDielectronVarManager::InitESDpid(Int_t type)
896{
897 //
898 // initialize PID parameters
899 // type=0 is simulation
900 // type=1 is data
901
ba15fdfb 902 if (!fgPIDResponse) fgPIDResponse=new AliESDpid((Bool_t)(type==0));
6551594b 903 Double_t alephParameters[5];
904 // simulation
905 alephParameters[0] = 2.15898e+00/50.;
906 alephParameters[1] = 1.75295e+01;
907 alephParameters[2] = 3.40030e-09;
908 alephParameters[3] = 1.96178e+00;
909 alephParameters[4] = 3.91720e+00;
ba15fdfb 910 fgPIDResponse->GetTOFResponse().SetTimeResolution(80.);
6551594b 911
912 // data
83e37742 913 if (type==1){
914 alephParameters[0] = 0.0283086/0.97;
6551594b 915 alephParameters[1] = 2.63394e+01;
916 alephParameters[2] = 5.04114e-11;
917 alephParameters[3] = 2.12543e+00;
918 alephParameters[4] = 4.88663e+00;
ba15fdfb 919 fgPIDResponse->GetTOFResponse().SetTimeResolution(130.);
920 fgPIDResponse->GetTPCResponse().SetMip(50.);
6551594b 921 }
922
ba15fdfb 923 fgPIDResponse->GetTPCResponse().SetBetheBlochParameters(
6551594b 924 alephParameters[0],alephParameters[1],alephParameters[2],
925 alephParameters[3],alephParameters[4]);
926
ba15fdfb 927 fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
6551594b 928}
929
2a14a7b1 930inline void AliDielectronVarManager::InitAODpidUtil(Int_t type)
931{
ba15fdfb 932 if (!fgPIDResponse) fgPIDResponse=new AliAODpidUtil;
2a14a7b1 933 Double_t alephParameters[5];
934 // simulation
935 alephParameters[0] = 2.15898e+00/50.;
936 alephParameters[1] = 1.75295e+01;
937 alephParameters[2] = 3.40030e-09;
938 alephParameters[3] = 1.96178e+00;
939 alephParameters[4] = 3.91720e+00;
ba15fdfb 940 fgPIDResponse->GetTOFResponse().SetTimeResolution(80.);
2a14a7b1 941
942 // data
943 if (type==1){
944 alephParameters[0] = 0.0283086/0.97;
945 alephParameters[1] = 2.63394e+01;
946 alephParameters[2] = 5.04114e-11;
947 alephParameters[3] = 2.12543e+00;
948 alephParameters[4] = 4.88663e+00;
ba15fdfb 949 fgPIDResponse->GetTOFResponse().SetTimeResolution(130.);
950 fgPIDResponse->GetTPCResponse().SetMip(50.);
2a14a7b1 951 }
952
ba15fdfb 953 fgPIDResponse->GetTPCResponse().SetBetheBlochParameters(
2a14a7b1 954 alephParameters[0],alephParameters[1],alephParameters[2],
955 alephParameters[3],alephParameters[4]);
956
ba15fdfb 957 fgPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
2a14a7b1 958}
959
572b0139 960
961inline void AliDielectronVarManager::SetEvent(AliVEvent * const ev)
962{
963
964 fgEvent = ev;
965 if (fgKFVertex) delete fgKFVertex;
966 fgKFVertex=0x0;
8df8e382 967 if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
ba15fdfb 968
969 for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i) fgData[i]=0.;
970 AliDielectronVarManager::Fill(fgEvent, fgData);
572b0139 971}
2a14a7b1 972
973
974inline Bool_t AliDielectronVarManager::GetDCA(const AliAODTrack *track, Double_t d0z0[2])
975{
976 if(track->TestBit(AliAODTrack::kIsDCA)){
977 d0z0[0]=track->DCA();
978 d0z0[1]=track->ZAtDCA();
979 return kTRUE;
980 }
981
982 Double_t covd0z0[3];
983 AliAODTrack copy(*track);
984 AliAODVertex *vtx =(AliAODVertex*)(fgEvent->GetPrimaryVertex());
985 Double_t fBzkG = fgEvent->GetMagneticField(); // z componenent of field in kG
986 Bool_t ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
987 if(!ok){
988 d0z0[0]=-999.;
989 d0z0[1]=-999.;
990 }
991 return ok;
992}
993
b2a297fa 994/*
995inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)
996{
997 //
998 // Fill track information available for histogramming into an array
999 //
1000
1001 // Fill TParticle interface information
1002 values[AliDielectronVarManager::kPx] = particle->Px();
1003 values[AliDielectronVarManager::kPy] = particle->Py();
1004 values[AliDielectronVarManager::kPz] = particle->Pz();
1005 values[AliDielectronVarManager::kPt] = particle->Pt();
1006 values[AliDielectronVarManager::kP] = particle->P();
1007
1008 values[AliDielectronVarManager::kXv] = particle->Vx();
1009 values[AliDielectronVarManager::kYv] = particle->Vy();
1010 values[AliDielectronVarManager::kZv] = particle->Vz();
1011
1012 values[AliDielectronVarManager::kOneOverPt] = 1./particle->Pt();
1013 values[AliDielectronVarManager::kPhi] = particle->Phi();
1014 values[AliDielectronVarManager::kTheta] =
1015 values[AliDielectronVarManager::kEta] = particle->Eta();
1016 values[AliDielectronVarManager::kY] =
1017
1018 values[AliDielectronVarManager::kE] = particle->Energy();
1019 values[AliDielectronVarManager::kM] = particle->GetMass();
1020
1021 values[AliDielectronVarManager::kCharge] = particle->GetPDG()->Charge()/3; // uggly
1022
1023}*/
1024
1025#endif
fb7d2d99 1026