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