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