]>
Commit | Line | Data |
---|---|---|
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 | 31 | class AliVVertex; |
b2a297fa | 32 | class AliVTrack; |
33 | ||
34 | //TODO | |
35 | //TODO: Should we inherit from AliVTrack in order to built another AliDielectronPair of KF with it? | |
36 | //TODO | |
37 | class AliDielectronPair : public AliVParticle { | |
38 | public: | |
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()); } | |
123 | Double_t DeltaPhi() const { Double_t dphi=TMath::Abs(fD1.GetPhi()-fD2.GetPhi()); | |
124 | return (dphi>TMath::Pi())?dphi-TMath::Pi():dphi; } | |
2e02dba4 | 125 | |
8df8e382 | 126 | // calculate cos(theta*) and phi* in HE and CS pictures |
61d106d3 | 127 | void GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double_t &thetaCS, Double_t &phiCS) const; |
128 | ||
151ddcbc | 129 | |
8df8e382 | 130 | Double_t ThetaPhiCM(Bool_t isHE, Bool_t isTheta) const; |
131 | static Double_t ThetaPhiCM(const AliVParticle* d1, const AliVParticle* d2, | |
61d106d3 | 132 | const Bool_t isHE, const Bool_t isTheta); |
236e1bda | 133 | |
134 | Double_t PsiPair(Double_t MagField)const; //Angle cut w.r.t. to magnetic field | |
805bd069 | 135 | Double_t PhivPair(Double_t MagField)const; //Angle of ee plane w.r.t. to magnetic field |
07bc5543 | 136 | // Double_t PairPlanev0rpH2Angle(Double_t kv0CrpH2)const; |
137 | // Double_t PairPlaneMagAngle(Double_t kv0CrpH2)const; | |
f3f5888a | 138 | Double_t PairPlaneAngle()const;\r |
151ddcbc | 139 | |
2e02dba4 | 140 | Double_t GetCosPointingAngle(const AliVVertex *primVtx) const; |
99345a64 | 141 | Double_t GetArmAlpha() const; |
142 | Double_t GetArmPt() const; | |
143 | ||
07bc5543 | 144 | // calculate rotation of p1 p2 |
151ddcbc | 145 | void GetRotPair(Double_t &RotPairx, Double_t &RotPairy, Double_t &RotPairz) const; |
146 | ||
147 | ||
b2a297fa | 148 | // internal KF particle |
572b0139 | 149 | const AliKFParticle& GetKFParticle() const { return fPair; } |
150 | const AliKFParticle& GetKFFirstDaughter() const { return fD1; } | |
151 | const AliKFParticle& GetKFSecondDaughter() const { return fD2; } | |
152 | ||
b2a297fa | 153 | // daughter references |
8df8e382 | 154 | void SetRefFirstDaughter(AliVParticle * const track) {fRefD1 = track;} |
155 | void SetRefSecondDaughter(AliVParticle * const track) {fRefD2 = track;} | |
156 | ||
b2a297fa | 157 | AliVParticle* GetFirstDaughter() const { return dynamic_cast<AliVParticle*>(fRefD1.GetObject()); } |
158 | AliVParticle* GetSecondDaughter() const { return dynamic_cast<AliVParticle*>(fRefD2.GetObject()); } | |
a655b716 | 159 | |
08b801a6 | 160 | void SetKFUsage(Bool_t KFUsage) {fKFUsage = KFUsage;} |
161 | Bool_t GetKFUsage() const {return fKFUsage;} | |
162 | ||
163 | ||
b2a297fa | 164 | |
165 | private: | |
a655b716 | 166 | Char_t fType; // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron |
167 | Int_t fLabel; // MC label | |
e4339752 | 168 | Int_t fPdgCode; // pdg code in case it is a MC particle |
1750c463 | 169 | static Double_t fBeamEnergy; //!beam energy |
a655b716 | 170 | |
b2a297fa | 171 | AliKFParticle fPair; // KF particle internally used for pair calculation |
572b0139 | 172 | AliKFParticle fD1; // KF particle first daughter |
173 | AliKFParticle fD2; // KF particle1 second daughter | |
174 | ||
b2a297fa | 175 | TRef fRefD1; // Reference to first daughter |
176 | TRef fRefD2; // Reference to second daughter | |
08b801a6 | 177 | |
88204efa | 178 | Bool_t fKFUsage; // Use KF for vertexing |
b2a297fa | 179 | |
1750c463 | 180 | ClassDef(AliDielectronPair,5) |
b2a297fa | 181 | }; |
182 | ||
183 | #endif | |
151ddcbc | 184 |