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