Cut on TrackPair not on PartPair
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPair.cxx
CommitLineData
1b446896 1#include "AliHBTPair.h"
2#include "AliHBTParticle.h"
47d9a058 3#include "AliHBTLLWeights.h"
1b446896 4
5ClassImp(AliHBTPair)
6
1b446896 7/************************************************************************/
ec6e4013 8AliHBTPair::AliHBTPair(Bool_t rev):
9 fPart1(0x0),
7261986f 10 fPart2(0x0),
11 fSwapedPair(0x0),
12 fQSideCMSLC(0.0),
13 fQSideCMSLCNotCalc(kTRUE),
14 fQOutCMSLC(0.0),
15 fQOutCMSLCNotCalc(kTRUE),
16 fQLongCMSLC(0.0),
17 fQLongCMSLCNotCalc(kTRUE),
18 fQInv(0.0),
19 fQInvNotCalc(kTRUE),
20 fInvMass(0.0),
21 fInvMassNotCalc(kTRUE),
22 fKt(0.0),
23 fKtNotCalc(kTRUE),
24 fKStar(0.0),
25 fKStarNotCalc(kTRUE),
26 fPInv(0.0),
27 fQSide(0.0),
28 fOut(0.0),
29 fQLong(0.0),
30 fMt(0.0),
31 fMtNotCalc(kTRUE),
32 fInvMassSqr(0.0),
33 fMassSqrNotCalc(kTRUE),
34 fQInvL(0.0),
35 fQInvLNotCalc(kTRUE),
47d9a058 36 fLLWeight(0.0),
37 ffLLWeightNotCalc(kTRUE),
7261986f 38 fPxSum(0.0),
39 fPySum(0.0),
40 fPzSum(0.0),
41 fESum(0.0),
42 fSumsNotCalc(kTRUE),
43 fPxDiff(0.0),
44 fPyDiff(0.0),
45 fPzDiff(0.0),
46 fEDiff(0.0),
47 fDiffsNotCalc(kTRUE),
48 fGammaCMSLC(0.0),
49 fGammaCMSLCNotCalc(kTRUE),
50 fChanged(kTRUE)
1b446896 51 {
52//value of rev defines if it is Swaped
53//if you pass kTRUE swpaped pair will NOT be created
54//though you wont be able to get the swaped pair from this pair
55
56 if(!rev) fSwapedPair = new AliHBTPair(kTRUE); //if false create swaped pair
1b446896 57
58 }
59/************************************************************************/
ec6e4013 60
61AliHBTPair::AliHBTPair(AliHBTParticle* part1, AliHBTParticle* part2, Bool_t rev):
62 fPart1(part1),
7261986f 63 fPart2(part2),
64 fSwapedPair(0x0),
65 fQSideCMSLC(0.0),
66 fQSideCMSLCNotCalc(kTRUE),
67 fQOutCMSLC(0.0),
68 fQOutCMSLCNotCalc(kTRUE),
69 fQLongCMSLC(0.0),
70 fQLongCMSLCNotCalc(kTRUE),
71 fQInv(0.0),
72 fQInvNotCalc(kTRUE),
73 fInvMass(0.0),
74 fInvMassNotCalc(kTRUE),
75 fKt(0.0),
76 fKtNotCalc(kTRUE),
77 fKStar(0.0),
78 fKStarNotCalc(kTRUE),
79 fPInv(0.0),
80 fQSide(0.0),
81 fOut(0.0),
82 fQLong(0.0),
83 fMt(0.0),
84 fMtNotCalc(kTRUE),
85 fInvMassSqr(0.0),
86 fMassSqrNotCalc(kTRUE),
87 fQInvL(0.0),
88 fQInvLNotCalc(kTRUE),
47d9a058 89 fLLWeight(0.0),
90 ffLLWeightNotCalc(kTRUE),
7261986f 91 fPxSum(0.0),
92 fPySum(0.0),
93 fPzSum(0.0),
94 fESum(0.0),
95 fSumsNotCalc(kTRUE),
96 fPxDiff(0.0),
97 fPyDiff(0.0),
98 fPzDiff(0.0),
99 fEDiff(0.0),
100 fDiffsNotCalc(kTRUE),
101 fGammaCMSLC(0.0),
102 fGammaCMSLCNotCalc(kTRUE),
103 fChanged(kTRUE)
ec6e4013 104 {
105//value of rev defines if it is Swaped
106//if you pass kTRUE swpaped pair will NOT be created
107//though you wont be able to get the swaped pair from this pair
108
109 if(!rev) fSwapedPair = new AliHBTPair(part2,part1,kTRUE); //if false create swaped pair
ec6e4013 110
111 }
112/************************************************************************/
113
1b446896 114Double_t AliHBTPair::GetInvMass()
115{
b928db6c 116//Returns qinv value for a pair
1b446896 117 if(fInvMassNotCalc)
118 {
119 CalculateInvMassSqr(); //method is inline so we not waste th time for jumping into method
120
121 if(fInvMassSqr<0) fInvMass = TMath::Sqrt(-fInvMassSqr);
122 else fInvMass = TMath::Sqrt(fInvMassSqr);
123
124 fInvMassNotCalc = kFALSE;
125 }
126 return fInvMass;
127}
128/************************************************************************/
129Double_t AliHBTPair::GetQSideCMSLC()
130{
131 //return Q Side in Central Of Mass System in Longitudialy Comoving Frame
132
133 if (fQSideCMSLCNotCalc)
134 {
135 fQSideCMSLC = (fPart1->Px()*fPart2->Py()-fPart2->Px()*fPart1->Py())/GetKt();
136 fQSideCMSLCNotCalc = kFALSE;
137 }
138 return fQSideCMSLC;
139}
140/************************************************************************/
141Double_t AliHBTPair::GetQOutCMSLC()
142{
143 if(fQOutCMSLCNotCalc)
144 {
145 CalculateSums();
146 CalculateDiffs();
951aadb9 147
148 if (fPart1->GetMass() != fPart2->GetMass())
149 {
150/*
151 //STAR algorithm
152 Double_t beta = fPzSum/fESum;
153 Double_t gamma = GetGammaToCMSLC();
154 Double_t el = gamma * (fPart1->Energy() - beta * fPart1->Pz());
155 Double_t x = ( fPart1->Px()*fPxSum + fPart1->Py()*fPySum) / ( 2.0*GetKt() );
156 beta = 2.0*GetKt()/GetMt();
157 gamma = GetMt()/GetQInv();
158 fQOutCMSLC = gamma * (x - beta * el);
159*/
160
161 //beta=fPzSum/fESum; // Longit. V == beta
162 Double_t beta=fPzSum/fESum;
163 Double_t gamma = GetGammaToCMSLC();
164
165 Double_t cosphi=fPxSum/(2.0*GetKt()); // cos(phi)
166 Double_t sinphi=fPySum/(2.0*GetKt()); // sin(phi)
167
168// ROTATE(part1Px,part1Py,SPHI,CPHI,part1Px,part1Py);//ROT8
169// ROTATE(part2Px,part2Py,SPHI,CPHI,part2Px,part2Py);//ROT8
170 Double_t tmp;
171 tmp = fPart1->Px()*cosphi + fPart1->Py()*sinphi;
172 Double_t part1Py = fPart1->Py()*cosphi - fPart1->Px()*sinphi;
173 Double_t part1Px = tmp;
174
175 tmp = fPart2->Px()*cosphi + fPart2->Py()*sinphi;
176 Double_t part2Py = fPart2->Py()*cosphi - fPart2->Px()*sinphi;
177 Double_t part2Px = tmp;
178
179
180// LTR(part1Pz,E1,beta,GetGammaToCMSLC(),part1Pz,E1a);
181// LTR(part2Pz,E2,beta,GetGammaToCMSLC(),part2Pz,E2a);
182 Double_t part1Pz=gamma*(fPart1->Pz()-beta*fPart1->Energy());
183 Double_t part2Pz=gamma*(fPart2->Pz()-beta*fPart2->Energy());
184
185 Double_t part1P2=part1Px*part1Px+part1Py*part1Py+part1Pz*part1Pz;
186 Double_t part2P2=part2Px*part2Px+part2Py*part2Py+part2Pz*part2Pz;
187 Double_t part1E=TMath::Sqrt(fPart1->GetMass()*fPart1->GetMass()+part1P2);
188 Double_t part2E=TMath::Sqrt(fPart2->GetMass()*fPart2->GetMass()+part2P2);
189 Double_t sumE=part1E+part2E;
190 Double_t sumPx=part1Px+part2Px;
191 Double_t sumPy=part1Py+part2Py;
192 Double_t sumPZ=part1Pz+part2Pz;
193 Double_t sumP2=sumPx*sumPx+sumPy*sumPy+sumPZ*sumPZ;
194
195 Double_t relmass=TMath::Sqrt(sumE*sumE-sumP2);
196 Double_t hf = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/(relmass*relmass);
197 fQOutCMSLC=(part1Px-part2Px);//== id
198 fQOutCMSLC=fQOutCMSLC-sumPx*hf; //sumPx == fPxSum ale po rotacji i transf
199 }
200 else
201 {
202 Double_t k2 = fPxSum*fPxDiff+fPySum*fPyDiff;
203 fQOutCMSLC = 0.5*k2/GetKt();
204 // if (non-id) fQOutCMSLC=fQOutCMSLC - sumPx*HF;
205 }
206
207
1b446896 208 fQOutCMSLCNotCalc = kFALSE;
209 }
210 return fQOutCMSLC;
211}
212/************************************************************************/
213Double_t AliHBTPair::GetQLongCMSLC()
214{
215 if (fQLongCMSLCNotCalc)
216 {
217 CalculateSums();
218 CalculateDiffs();
219 Double_t beta = fPzSum/fESum;
951aadb9 220 fQLongCMSLC = GetGammaToCMSLC() * ( fPzDiff - beta*fEDiff );
1b446896 221 fQLongCMSLCNotCalc = kFALSE;
222 }
223 return fQLongCMSLC;
224}
225/************************************************************************/
226Double_t AliHBTPair::GetKt()
227{
228 if(fKtNotCalc)
229 {
230 CalculateSums();
231 fKt = 0.5*TMath::Hypot(fPxSum,fPySum);
232 fKtNotCalc = kFALSE;
233 }
234 return fKt;
235}
236/************************************************************************/
237
238Double_t AliHBTPair::GetKStar()
239{
240 if (fKStarNotCalc)
241 {
1b446896 242 CalculateSums();
243
244 Double_t Ptrans = fPxSum*fPxSum + fPySum*fPySum;
245 Double_t Mtrans = fESum*fESum - fPzSum*fPzSum;
246 Double_t Pinv = TMath::Sqrt(Mtrans - Ptrans);
247
951aadb9 248 Double_t Q = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/Pinv;
1b446896 249
250 CalculateQInvL();
251
252 Q = TMath::Sqrt( Q*Q - fQInvL);
7836ee94 253 fKStar = Q/2.;
1b446896 254 fKStarNotCalc = kFALSE;
255 }
256 return fKStar;
257}
258/************************************************************************/
259
260Double_t AliHBTPair::GetQInv()
261{
951aadb9 262//returns Qinv
263//warning for non-id particles you want to use 2*KStar
1b446896 264 if(fQInvNotCalc)
265 {
266 CalculateQInvL();
30025bb4 267 fQInv = TMath::Sqrt(TMath::Abs(fQInvL));
1b446896 268 fQInvNotCalc = kFALSE;
269 }
1b446896 270 return fQInv;
271}
30025bb4 272/************************************************************************/
951aadb9 273
274Double_t AliHBTPair::GetGammaToCMSLC()
275{
276 if(fGammaCMSLCNotCalc)
277 {
278 CalculateSums();
279 Double_t beta = fPzSum/fESum;
280 fGammaCMSLC = 1.0/TMath::Sqrt(1.0 - beta*beta);
281 fGammaCMSLCNotCalc = kFALSE;
282 }
283 return fGammaCMSLC;
284}
30025bb4 285/************************************************************************/
286
951aadb9 287Double_t AliHBTPair::GetMt()
288{
289 if (fMtNotCalc)
290 {
291 CalculateSums();
292 fMt = TMath::Sqrt(fESum*fESum - fPzSum*fPzSum);
293 fMtNotCalc = kFALSE;
294 }
295 return fMt;
296}
30025bb4 297/************************************************************************/
1b446896 298
47d9a058 299Double_t AliHBTPair::GetLLWeight()
300{
301 if (ffLLWeightNotCalc)
302 {
303 fLLWeight = AliHBTLLWeights::Instance()->GetWeight(this);
304 }
305 return fLLWeight;
306}