DaltaPt, DeltaPhi and DeltaTheta methods implemented
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPair.h
CommitLineData
1b446896 1#ifndef ALIHBTPAIR_H
2#define ALIHBTPAIR_H
58ee8590 3//_________________________________________________________________________
4///////////////////////////////////////////////////////////////////////////
5//
6// class AliHBTPair
7//
8// class implements pair of particles and taking care of caluclation (almost)
9// all of pair properties (Qinv, InvMass,...)
10// more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
11//
12////////////////////////////////////////////////////////////////////////////
1b446896 13
14#include <TObject.h>
1b446896 15#include "AliHBTParticle.h"
58ee8590 16
1b446896 17
18class AliHBTPair: public TObject
19{
20 public:
21 AliHBTPair(Bool_t rev = kFALSE); //contructor
ec6e4013 22 AliHBTPair(AliHBTParticle* part1, AliHBTParticle* part2, Bool_t rev = kFALSE); //contructor
d012b7d0 23 AliHBTPair(const AliHBTPair& in);
24
4ca0f301 25 virtual ~AliHBTPair(){}
d012b7d0 26
34914285 27 AliHBTPair& operator=(const AliHBTPair& in);
d012b7d0 28
29 void SetParticles(AliHBTParticle* p1,AliHBTParticle* p2); //sets particles in the pair
1b446896 30 AliHBTPair* GetSwapedPair() {return fSwapedPair;} //returns pair with swapped particles
31
32 AliHBTParticle* Particle1() const {return fPart1;} //returns pointer to first particle
33 AliHBTParticle* Particle2() const {return fPart2;} //returns pointer to decond particle
34
ec6e4013 35 void Changed();
1b446896 36 //Center Mass System - Longitudinally Comoving
37
951aadb9 38 virtual Double_t GetInvMass(); //returns invariant mass of the pair
39 virtual Double_t GetMt();
40 virtual Double_t GetQInv(); //returns Q invariant
41 virtual Double_t GetQSideCMSLC(); //returns Q Side CMS longitudionally co-moving
42 virtual Double_t GetQOutCMSLC(); //returns Q out CMS longitudionally co-moving
43 virtual Double_t GetQLongCMSLC(); //returns Q Long CMS longitudionally co-moving
1b446896 44
45
951aadb9 46 virtual Double_t GetKt(); //returns K transverse
47 virtual Double_t GetKStar();
1b446896 48
951aadb9 49 virtual Double_t GetDeltaP(); //return difference of momenta
e4eb7775 50 virtual Double_t GetDeltaPt();
951aadb9 51 virtual Double_t GetDeltaPx();
52 virtual Double_t GetDeltaPy();
53 virtual Double_t GetDeltaPz();
1b446896 54
e4eb7775 55 virtual Double_t GetDeltaTheta();
56 virtual Double_t GetDeltaPhi();
57
951aadb9 58 virtual Double_t GetGammaToCMSLC();
dd82cadc 59 Double_t GetWeight();
1b446896 60 protected:
61 AliHBTParticle* fPart1; //pointer to first particle
62 AliHBTParticle* fPart2; //pointer to second particle
63
64 AliHBTPair* fSwapedPair; //pointer to swapped pair
65
66/************************************************************/
67/************CMS (LC) Q's *********************************/
68/************************************************************/
69 //Center Mass System - Longitudinally Comoving
70
71 Double_t fQSideCMSLC; //value of Q side CMS longitudially co-moving
72 Bool_t fQSideCMSLCNotCalc; //flag indicating if fQSideCMSLC is already calculated for this pair
73
74 Double_t fQOutCMSLC; //value of Q out CMS longitudially co-moving
75 Bool_t fQOutCMSLCNotCalc;//flag indicating if fQOutCMSLC is already calculated for this pair
76
77 Double_t fQLongCMSLC; //value of Q long CMS longitudially co-moving
78 Bool_t fQLongCMSLCNotCalc;//flag indicating if fQLongCMSLC is already calculated for this pair
79/************************************************************/
80/************************************************************/
81 Double_t fQInv; //half of differnece of 4-momenta
82 Bool_t fQInvNotCalc;//flag indicating if fQInv is already calculated for this pair
83
84 Double_t fInvMass; //invariant mass
85 Bool_t fInvMassNotCalc;//flag indicating if fInvMass is already calculated for this pair
86
87 Double_t fKt; //K == sum vector of particle's momenta. Kt transverse component
88 Bool_t fKtNotCalc;//flag indicating if fKt is already calculated for this pair
89
d012b7d0 90 Double_t fKStar; // KStar
91 Bool_t fKStarNotCalc;// flag indicating if fKStar is calculated
1b446896 92
93 Double_t fPInv; //invariant momentum
951aadb9 94
1b446896 95 Double_t fQSide; //Q Side
96 Double_t fOut;//Q Out
97 Double_t fQLong;//Q Long
98
951aadb9 99 Double_t fMt;//Transverse coordinate of Inv. Mass
58ee8590 100 Bool_t fMtNotCalc;//flag indicating if Mt is calculated for current pair
951aadb9 101
1b446896 102 Double_t fInvMassSqr;//squre of invariant mass
d012b7d0 103 Bool_t fMassSqrNotCalc; //flag indicating if fInvMassSqr for this pair
1b446896 104 void CalculateInvMassSqr();
105
58ee8590 106 Double_t fQInvL; //Qinv in longitudional direction
107 Bool_t fQInvLNotCalc;//flag indicating if fQInvL is calculated for current pair
1b446896 108 void CalculateQInvL();
47d9a058 109
58ee8590 110 Double_t fWeight;//Value of the weight
111 Bool_t fWeightNotCalc;//flag indicating if fWeight is calculated for current pair
112
113 Double_t fPxSum;// Sum of Px momenta
114 Double_t fPySum;// Sum of Py momenta
115 Double_t fPzSum;// Sum of Pz momenta
116 Double_t fESum;// Sum of energies
117 Bool_t fSumsNotCalc;//flag indicating if fPxSum,fPxSum,fPxSum and fESum is calculated for current pair
1b446896 118 void CalculateSums();
119
58ee8590 120 Double_t fPxDiff;// Difference of Px momenta
121 Double_t fPyDiff;// Difference of Px momenta
122 Double_t fPzDiff;// Difference of Px momenta
123 Double_t fEDiff;// Difference of Px momenta
124 Bool_t fDiffsNotCalc;//flag indicating if fPxDiff,fPxDiff,fPxDiff and fEDiff is calculated for current pair
1b446896 125 void CalculateDiffs();
126
58ee8590 127 Double_t fGammaCMSLC;//gamma of boost in CMSLC
128 Bool_t fGammaCMSLCNotCalc;//flag indicating if fGammaCMSLC is calculated for current pair
1b446896 129 /***************************************************/
130 void CalculateBase();
58ee8590 131 Bool_t fChanged;//flag indicating if object has been changed
1b446896 132
133
134 private:
1b446896 135 ClassDef(AliHBTPair,1)
136};
137/****************************************************************/
138inline
139void AliHBTPair::SetParticles(AliHBTParticle* p1,AliHBTParticle* p2)
140{
141 //sets the particle to the pair
142
143 fPart1 = p1;
144 fPart2 = p2;
145 if (fSwapedPair) //if we have Swaped (so we are not)
146 fSwapedPair->SetParticles(p2,p1); //set particles for him too
ec6e4013 147 Changed();
148 //and do nothing until will be asked for
149}
150/****************************************************************/
1b446896 151
ec6e4013 152inline
153void AliHBTPair::Changed()
154{
155 // Resel all calculations (flags)
1b446896 156 fChanged = kTRUE;
157 fSumsNotCalc = kTRUE;
158 fDiffsNotCalc = kTRUE;
159 fMassSqrNotCalc = kTRUE;
160 fInvMassNotCalc = kTRUE;
161 fQInvNotCalc = kTRUE;
951aadb9 162 fMtNotCalc = kTRUE;
1b446896 163 fQSideCMSLCNotCalc = kTRUE;
164 fQOutCMSLCNotCalc = kTRUE;
165 fQLongCMSLCNotCalc = kTRUE;
166 fKtNotCalc = kTRUE;
167 fKStarNotCalc = kTRUE;
168 fQInvLNotCalc = kTRUE;
951aadb9 169 fGammaCMSLCNotCalc = kTRUE;
dd82cadc 170 fWeightNotCalc = kTRUE;
1b446896 171}
172/****************************************************************/
1b446896 173inline
174void AliHBTPair::CalculateInvMassSqr()
175 {
58ee8590 176 //calculates square of qinv
1b446896 177 if (fMassSqrNotCalc)
178 {
179 CalculateSums();
180
181 Double_t fPart12s= (fPxSum*fPxSum) + (fPySum*fPySum) + (fPzSum*fPzSum);
182
183 fInvMassSqr=fESum*fESum-fPart12s;
184
185 fMassSqrNotCalc = kFALSE;
186 }
187 }
188/****************************************************************/
189inline
190void AliHBTPair::CalculateQInvL()
191 {
7836ee94 192 //Calculates square root of Qinv
1b446896 193 if (fQInvLNotCalc)
194 {
195 CalculateDiffs();
196 fQInvL = fEDiff*fEDiff - ( fPxDiff*fPxDiff + fPyDiff*fPyDiff + fPzDiff*fPzDiff );
197 fQInvLNotCalc = kFALSE;
198 }
199 }
200/****************************************************************/
201inline
202void AliHBTPair::CalculateSums()
203 {
58ee8590 204 //calculates momenta and energy sums
1b446896 205 if(fSumsNotCalc)
206 {
207 fPxSum = fPart1->Px()+fPart2->Px();
208 fPySum = fPart1->Py()+fPart2->Py();
209 fPzSum = fPart1->Pz()+fPart2->Pz();
210 fESum = fPart1->Energy() + fPart2->Energy();
211 fSumsNotCalc = kFALSE;
212 }
213 }
214/****************************************************************/
215inline
216void AliHBTPair::CalculateDiffs()
217 {
58ee8590 218 //calculates momenta and energy differences
1b446896 219 if(fDiffsNotCalc)
220 {
221 fPxDiff = fPart1->Px()-fPart2->Px();
222 fPyDiff = fPart1->Py()-fPart2->Py();
223 fPzDiff = fPart1->Pz()-fPart2->Pz();
224 fEDiff = fPart1->Energy() - fPart2->Energy();
225 fDiffsNotCalc = kFALSE;
226 }
227 }
228
7836ee94 229/****************************************************************/
230inline
231Double_t AliHBTPair::GetDeltaP() //return difference of momenta
232{
e4eb7775 233 //returns difference of momenta (length of vector)
7836ee94 234 CalculateDiffs();
235 return TMath::Sqrt(fPxDiff*fPxDiff + fPyDiff*fPyDiff + fPzDiff*fPzDiff);
236}
237/****************************************************************/
e4eb7775 238
239inline
240Double_t AliHBTPair::GetDeltaPt()
241 {
242 //returns difference of Pz
243 return fPart1->Pt()-fPart2->Pt();
244 }
245/****************************************************************/
246
7836ee94 247inline
248Double_t AliHBTPair::GetDeltaPx()
249 {
58ee8590 250 //returns difference of Pz
7836ee94 251 CalculateDiffs();
252 return fPxDiff;
253 }
254/****************************************************************/
255inline
256Double_t AliHBTPair::GetDeltaPy()
257 {
58ee8590 258 //returns difference of Py
7836ee94 259 CalculateDiffs();
260 return fPyDiff;
261 }
262
263/****************************************************************/
264inline
265Double_t AliHBTPair::GetDeltaPz()
266 {
58ee8590 267 //returns difference of Pz
7836ee94 268 CalculateDiffs();
269 return fPzDiff;
270 }
e4eb7775 271/****************************************************************/
272
273inline
274Double_t AliHBTPair::GetDeltaPhi()
275 {
276 //returns difference of Pz
277 return fPart1->Phi()-fPart2->Phi();
278 }
279/****************************************************************/
280
281inline
282Double_t AliHBTPair::GetDeltaTheta()
283 {
284 //returns difference of Pz
285 return fPart1->Theta()-fPart2->Theta();
286 }
287/****************************************************************/
7836ee94 288
289
1b446896 290#endif