1 #include "AliHBTPair.h"
2 //_________________________________________________________________________
3 ///////////////////////////////////////////////////////////////////////////
7 // class implements pair of particles and taking care of caluclation (almost)
8 // all of pair properties (Qinv, InvMass,...)
10 // more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
12 ////////////////////////////////////////////////////////////////////////////
14 #include "AliHBTParticle.h"
15 #include "AliHBTWeights.h"
19 /************************************************************************/
20 AliHBTPair::AliHBTPair(Bool_t rev):
25 fQSideCMSLCNotCalc(kTRUE),
27 fQOutCMSLCNotCalc(kTRUE),
29 fQLongCMSLCNotCalc(kTRUE),
33 fInvMassNotCalc(kTRUE),
45 fMassSqrNotCalc(kTRUE),
49 fWeightNotCalc(kTRUE),
61 fGammaCMSLCNotCalc(kTRUE),
64 //value of rev defines if it is Swaped
65 //if you pass kTRUE swpaped pair will NOT be created
66 //though you wont be able to get the swaped pair from this pair
68 if(!rev) fSwapedPair = new AliHBTPair(kTRUE); //if false create swaped pair
71 /************************************************************************/
73 AliHBTPair::AliHBTPair(AliHBTParticle* part1, AliHBTParticle* part2, Bool_t rev):
78 fQSideCMSLCNotCalc(kTRUE),
80 fQOutCMSLCNotCalc(kTRUE),
82 fQLongCMSLCNotCalc(kTRUE),
86 fInvMassNotCalc(kTRUE),
98 fMassSqrNotCalc(kTRUE),
100 fQInvLNotCalc(kTRUE),
102 fWeightNotCalc(kTRUE),
112 fDiffsNotCalc(kTRUE),
114 fGammaCMSLCNotCalc(kTRUE),
117 //value of rev defines if it is Swaped
118 //if you pass kTRUE swpaped pair will NOT be created
119 //though you wont be able to get the swaped pair from this pair
121 if(!rev) fSwapedPair = new AliHBTPair(part2,part1,kTRUE); //if false create swaped pair
124 /************************************************************************/
125 AliHBTPair::AliHBTPair(const AliHBTPair& in):
131 fQSideCMSLCNotCalc(kTRUE),
133 fQOutCMSLCNotCalc(kTRUE),
135 fQLongCMSLCNotCalc(kTRUE),
139 fInvMassNotCalc(kTRUE),
143 fKStarNotCalc(kTRUE),
151 fMassSqrNotCalc(kTRUE),
153 fQInvLNotCalc(kTRUE),
155 fWeightNotCalc(kTRUE),
165 fDiffsNotCalc(kTRUE),
167 fGammaCMSLCNotCalc(kTRUE),
173 /************************************************************************/
175 const AliHBTPair& AliHBTPair::operator=(const AliHBTPair& in)
182 Double_t AliHBTPair::GetInvMass()
184 //Returns qinv value for a pair
187 CalculateInvMassSqr(); //method is inline so we not waste th time for jumping into method
189 if(fInvMassSqr<0) fInvMass = TMath::Sqrt(-fInvMassSqr);
190 else fInvMass = TMath::Sqrt(fInvMassSqr);
192 fInvMassNotCalc = kFALSE;
196 /************************************************************************/
197 Double_t AliHBTPair::GetQSideCMSLC()
199 //return Q Side in Central Of Mass System in Longitudialy Comoving Frame
201 if (fQSideCMSLCNotCalc)
203 fQSideCMSLC = (fPart1->Px()*fPart2->Py()-fPart2->Px()*fPart1->Py())/GetKt();
204 fQSideCMSLCNotCalc = kFALSE;
208 /************************************************************************/
209 Double_t AliHBTPair::GetQOutCMSLC()
211 //caculates Qout in Center Of Mass Longitudionally Co-Moving
212 if(fQOutCMSLCNotCalc)
217 if (fPart1->GetMass() != fPart2->GetMass())
221 Double_t beta = fPzSum/fESum;
222 Double_t gamma = GetGammaToCMSLC();
223 Double_t el = gamma * (fPart1->Energy() - beta * fPart1->Pz());
224 Double_t x = ( fPart1->Px()*fPxSum + fPart1->Py()*fPySum) / ( 2.0*GetKt() );
225 beta = 2.0*GetKt()/GetMt();
226 gamma = GetMt()/GetQInv();
227 fQOutCMSLC = gamma * (x - beta * el);
230 //beta=fPzSum/fESum; // Longit. V == beta
231 Double_t beta=fPzSum/fESum;
232 Double_t gamma = GetGammaToCMSLC();
234 Double_t cosphi=fPxSum/(2.0*GetKt()); // cos(phi)
235 Double_t sinphi=fPySum/(2.0*GetKt()); // sin(phi)
237 // ROTATE(part1Px,part1Py,SPHI,CPHI,part1Px,part1Py);//ROT8
238 // ROTATE(part2Px,part2Py,SPHI,CPHI,part2Px,part2Py);//ROT8
240 tmp = fPart1->Px()*cosphi + fPart1->Py()*sinphi;
241 Double_t part1Py = fPart1->Py()*cosphi - fPart1->Px()*sinphi;
242 Double_t part1Px = tmp;
244 tmp = fPart2->Px()*cosphi + fPart2->Py()*sinphi;
245 Double_t part2Py = fPart2->Py()*cosphi - fPart2->Px()*sinphi;
246 Double_t part2Px = tmp;
249 // LTR(part1Pz,E1,beta,GetGammaToCMSLC(),part1Pz,E1a);
250 // LTR(part2Pz,E2,beta,GetGammaToCMSLC(),part2Pz,E2a);
251 Double_t part1Pz=gamma*(fPart1->Pz()-beta*fPart1->Energy());
252 Double_t part2Pz=gamma*(fPart2->Pz()-beta*fPart2->Energy());
254 Double_t part1P2=part1Px*part1Px+part1Py*part1Py+part1Pz*part1Pz;
255 Double_t part2P2=part2Px*part2Px+part2Py*part2Py+part2Pz*part2Pz;
256 Double_t part1E=TMath::Sqrt(fPart1->GetMass()*fPart1->GetMass()+part1P2);
257 Double_t part2E=TMath::Sqrt(fPart2->GetMass()*fPart2->GetMass()+part2P2);
258 Double_t sumE=part1E+part2E;
259 Double_t sumPx=part1Px+part2Px;
260 Double_t sumPy=part1Py+part2Py;
261 Double_t sumPZ=part1Pz+part2Pz;
262 Double_t sumP2=sumPx*sumPx+sumPy*sumPy+sumPZ*sumPZ;
264 Double_t relmass=TMath::Sqrt(sumE*sumE-sumP2);
265 Double_t hf = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/(relmass*relmass);
266 fQOutCMSLC=(part1Px-part2Px);//== id
267 fQOutCMSLC=fQOutCMSLC-sumPx*hf; //sumPx == fPxSum ale po rotacji i transf
271 Double_t k2 = fPxSum*fPxDiff+fPySum*fPyDiff;
272 fQOutCMSLC = 0.5*k2/GetKt();
273 // if (non-id) fQOutCMSLC=fQOutCMSLC - sumPx*HF;
277 fQOutCMSLCNotCalc = kFALSE;
281 /************************************************************************/
282 Double_t AliHBTPair::GetQLongCMSLC()
284 //return Q Long in Central Of Mass System in Longitudialy Comoving Frame
285 if (fQLongCMSLCNotCalc)
289 Double_t beta = fPzSum/fESum;
290 fQLongCMSLC = GetGammaToCMSLC() * ( fPzDiff - beta*fEDiff );
291 fQLongCMSLCNotCalc = kFALSE;
295 /************************************************************************/
296 Double_t AliHBTPair::GetKt()
298 //calculates the evarage momentum of the pair
302 fKt = 0.5*TMath::Hypot(fPxSum,fPySum);
307 /************************************************************************/
309 Double_t AliHBTPair::GetKStar()
311 //calculates invariant velocity difference
316 Double_t ptrans = fPxSum*fPxSum + fPySum*fPySum;
317 Double_t mtrans = fESum*fESum - fPzSum*fPzSum;
318 Double_t pinv = TMath::Sqrt(mtrans - ptrans);
320 Double_t q = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/pinv;
327 Info("GetKStar","q = %f",q);
335 fKStarNotCalc = kFALSE;
339 /************************************************************************/
341 Double_t AliHBTPair::GetQInv()
344 //warning for non-id particles you want to use 2*KStar
348 fQInv = TMath::Sqrt(TMath::Abs(fQInvL));
349 fQInvNotCalc = kFALSE;
353 /************************************************************************/
355 Double_t AliHBTPair::GetGammaToCMSLC()
357 //calculates gamma factor of the boost to CMSLC
358 if(fGammaCMSLCNotCalc)
361 Double_t beta = fPzSum/fESum;
362 fGammaCMSLC = 1.0/TMath::Sqrt(1.0 - beta*beta);
363 fGammaCMSLCNotCalc = kFALSE;
367 /************************************************************************/
369 Double_t AliHBTPair::GetMt()
371 //Calculates transverse mass of the pair
375 fMt = TMath::Sqrt(fESum*fESum - fPzSum*fPzSum);
380 /************************************************************************/
382 Double_t AliHBTPair::GetWeight()
384 //returns and buffers weight for this pair
387 fWeight = AliHBTWeights::Weight(this);
388 fWeightNotCalc = kFALSE;