]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectronPair.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronPair.h
CommitLineData
b2a297fa 1#ifndef ALIDIELECTRONPAIR_H
2#define ALIDIELECTRONPAIR_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//# AliDielectronPair #
9//# Class to store pair information #
10//# #
11//# #
12//# Authors: #
13//# Anton Andronic, GSI / A.Andronic@gsi.de #
14//# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
15//# Julian Book, Uni Ffm / Julian.Book@cern.ch #
16//# Frederick Kramer, Uni Ffm, / Frederick.Kramer@cern.ch #
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#include <TMath.h>
24#include <TRef.h>
25#include <TLorentzVector.h>
26
27#include <AliKFParticle.h>
28#include <AliVParticle.h>
1750c463 29#include <AliVEvent.h>
b2a297fa 30
ba15fdfb 31class AliVVertex;
b2a297fa 32class AliVTrack;
33
34//TODO
35//TODO: Should we inherit from AliVTrack in order to built another AliDielectronPair of KF with it?
36//TODO
37class AliDielectronPair : public AliVParticle {
38public:
39 AliDielectronPair();
40 virtual ~AliDielectronPair();
41
42 AliDielectronPair(AliVTrack * const particle1, Int_t pid1,
43 AliVTrack * const particle2, Int_t pid2, Char_t type);
44
1201a1a9 45 AliDielectronPair(const AliKFParticle * const particle1,
46 const AliKFParticle * const particle2,
47 AliVTrack * const refParticle1,
48 AliVTrack * const refParticle2,
49 Char_t type);
50
51//TODO: copy constructor + assignment operator
b2a297fa 52
53 void SetTracks(AliVTrack * const particle1, Int_t pid1,
54 AliVTrack * const particle2, Int_t pid2);
55
4fae8ef9 56 void SetGammaTracks(AliVTrack * const particle1, Int_t pid1,
57 AliVTrack * const particle2, Int_t pid2);
58
59
1201a1a9 60 void SetTracks(const AliKFParticle * const particle1,
61 const AliKFParticle * const particle2,
62 AliVTrack * const refParticle1,
63 AliVTrack * const refParticle2);
64
b2a297fa 65 //AliVParticle interface
66 // kinematics
67 virtual Double_t Px() const { return fPair.GetPx(); }
68 virtual Double_t Py() const { return fPair.GetPy(); }
69 virtual Double_t Pz() const { return fPair.GetPz(); }
70 virtual Double_t Pt() const { return fPair.GetPt(); }
71 virtual Double_t P() const { return fPair.GetP(); }
72 virtual Bool_t PxPyPz(Double_t p[3]) const { p[0]=Px(); p[1]=Py(); p[2]=Pz(); return kTRUE; }
73
74 virtual Double_t Xv() const { return fPair.GetX(); }
75 virtual Double_t Yv() const { return fPair.GetY(); }
76 virtual Double_t Zv() const { return fPair.GetZ(); }
61d106d3 77 virtual Bool_t XvYvZv(Double_t x[3]) const { x[0]=Xv(); x[1]=Yv(); x[2]=Zv(); return kTRUE; }
b2a297fa 78
79 virtual Double_t OneOverPt() const { return Pt()>0.?1./Pt():0.; } //TODO: check
80 virtual Double_t Phi() const { return fPair.GetPhi();}
81 virtual Double_t Theta() const { return Pz()!=0?TMath::ATan(Pt()/Pz()):0.; } //TODO: check
82
83
84 virtual Double_t E() const { return fPair.GetE(); }
85 virtual Double_t M() const { return fPair.GetMass(); }
86
87 virtual Double_t Eta() const { return fPair.GetEta();}
8df8e382 88 virtual Double_t Y() const {
89 if((E()*E()-Px()*Px()-Py()*Py()-Pz()*Pz())>0.) return TLorentzVector(Px(),Py(),Pz(),E()).Rapidity();
90 else return -1111.;
91 }
b2a297fa 92
93 virtual Short_t Charge() const { return fPair.GetQ();}
a655b716 94 virtual Int_t GetLabel() const { return fLabel; }
b2a297fa 95 // PID
96 virtual const Double_t *PID() const { return 0;} //TODO: check
e4339752 97
ba15fdfb 98 //
5720c765 99 // Double_t GetLXY(const AliVVertex * const vtx) const;
100 // Double_t GetPseudoProperTime(const AliVVertex * const vtx) const;
572b0139 101
b2a297fa 102
103 UChar_t GetType() const { return fType; }
104 void SetType(Char_t type) { fType=type; }
1750c463 105 static void SetBeamEnergy(AliVEvent *ev, Double_t beamEbyHand=-1.);
a655b716 106
e4339752 107 // MC information
a655b716 108 void SetLabel(Int_t label) {fLabel=label;}
e4339752 109 void SetPdgCode(Int_t pdgCode) { fPdgCode=pdgCode; }
110 Int_t PdgCode() const {return fPdgCode;}
ba15fdfb 111
112 void SetProductionVertex(const AliKFParticle &Vtx) { fPair.SetProductionVertex(Vtx); }
572b0139 113
114 //inter leg information
5720c765 115 Double_t GetKFChi2() const { return fPair.GetChi2(); }
116 Int_t GetKFNdf() const { return fPair.GetNDF(); }
61d106d3 117 Double_t OpeningAngle() const { return fD1.GetAngle(fD2); }
118 Double_t DistanceDaughters() const { return fD1.GetDistanceFromParticle(fD2); }
119 Double_t DistanceDaughtersXY() const { return fD1.GetDistanceFromParticleXY(fD2); }
120 Double_t DeviationDaughters() const { return fD1.GetDeviationFromParticle(fD2); }
121 Double_t DeviationDaughtersXY() const { return fD1.GetDeviationFromParticleXY(fD2); }
122 Double_t DeltaEta() const { return TMath::Abs(fD1.GetEta()-fD2.GetEta()); }
d4619886 123// Double_t DeltaPhi() const { Double_t dphi=TMath::Abs(fD1.GetPhi()-fD2.GetPhi());
124// return (dphi>TMath::Pi())?dphi-TMath::Pi():dphi; }
125 Double_t DeltaPhi() const { return fD1.GetAngleXY(fD2); }
2e02dba4 126
8df8e382 127 // calculate cos(theta*) and phi* in HE and CS pictures
61d106d3 128 void GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double_t &thetaCS, Double_t &phiCS) const;
129
151ddcbc 130
8df8e382 131 Double_t ThetaPhiCM(Bool_t isHE, Bool_t isTheta) const;
132 static Double_t ThetaPhiCM(const AliVParticle* d1, const AliVParticle* d2,
fce8a399 133 Bool_t isHE, Bool_t isTheta);
236e1bda 134
135 Double_t PsiPair(Double_t MagField)const; //Angle cut w.r.t. to magnetic field
805bd069 136 Double_t PhivPair(Double_t MagField)const; //Angle of ee plane w.r.t. to magnetic field
1598d580
JB
137
138 //Calculate the angle between ee decay plane and variables
fce8a399 139 Double_t GetPairPlaneAngle(Double_t kv0CrpH2, Int_t VariNum) const;
151ddcbc 140
2e02dba4 141 Double_t GetCosPointingAngle(const AliVVertex *primVtx) const;
99345a64 142 Double_t GetArmAlpha() const;
143 Double_t GetArmPt() const;
1598d580 144 void GetDCA(const AliVVertex *primVtx, Double_t d0z0[2]) const;
99345a64 145
36a1e727
JW
146 // Calculate inner product of strong magnetic field and ee plane
147 Double_t PairPlaneMagInnerProduct(Double_t ZDCrpH1) const;
148
149
b2a297fa 150 // internal KF particle
572b0139 151 const AliKFParticle& GetKFParticle() const { return fPair; }
152 const AliKFParticle& GetKFFirstDaughter() const { return fD1; }
153 const AliKFParticle& GetKFSecondDaughter() const { return fD2; }
154
b2a297fa 155 // daughter references
8df8e382 156 void SetRefFirstDaughter(AliVParticle * const track) {fRefD1 = track;}
157 void SetRefSecondDaughter(AliVParticle * const track) {fRefD2 = track;}
158
54ce9dc4 159 AliVParticle* GetFirstDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); }
160 AliVParticle* GetSecondDaughterP() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); }
a655b716 161
08b801a6 162 void SetKFUsage(Bool_t KFUsage) {fKFUsage = KFUsage;}
163 Bool_t GetKFUsage() const {return fKFUsage;}
164
165
b2a297fa 166
167private:
a655b716 168 Char_t fType; // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron
169 Int_t fLabel; // MC label
e4339752 170 Int_t fPdgCode; // pdg code in case it is a MC particle
1750c463 171 static Double_t fBeamEnergy; //!beam energy
a655b716 172
b2a297fa 173 AliKFParticle fPair; // KF particle internally used for pair calculation
572b0139 174 AliKFParticle fD1; // KF particle first daughter
175 AliKFParticle fD2; // KF particle1 second daughter
176
b2a297fa 177 TRef fRefD1; // Reference to first daughter
178 TRef fRefD2; // Reference to second daughter
08b801a6 179
88204efa 180 Bool_t fKFUsage; // Use KF for vertexing
b2a297fa 181
1750c463 182 ClassDef(AliDielectronPair,5)
b2a297fa 183};
184
185#endif
151ddcbc 186