]>
Commit | Line | Data |
---|---|---|
78d7c6d3 | 1 | #include "AliAODPair.h" |
2 | //_________________________________________________________________________ | |
3 | /////////////////////////////////////////////////////////////////////////// | |
4 | // | |
5 | // class AliAODPair | |
6 | // | |
7 | // class implements pair of particles and taking care of caluclation (almost) | |
8 | // all of pair properties (Qinv, InvMass,...) | |
9 | // | |
c7ffd78f | 10 | // more info: http://aliweb.cern.ch/people/skowron/analyzer/index.html |
78d7c6d3 | 11 | // |
12 | //////////////////////////////////////////////////////////////////////////// | |
13 | ||
14 | #include "AliVAODParticle.h" | |
15 | #include "AliTrackPoints.h" | |
78d7c6d3 | 16 | ClassImp(AliAODPair) |
17 | ||
18 | /************************************************************************/ | |
19 | AliAODPair::AliAODPair(Bool_t rev): | |
20 | fPart1(0x0), | |
21 | fPart2(0x0), | |
22 | fSwappedPair(0x0), | |
23 | fQSideLCMS(0.0), | |
24 | fQSideLCMSNotCalc(kTRUE), | |
25 | fQOutLCMS(0.0), | |
26 | fQOutLCMSNotCalc(kTRUE), | |
27 | fQLongLCMS(0.0), | |
28 | fQLongLCMSNotCalc(kTRUE), | |
f422a7da | 29 | fQtLCMS(0.0), |
30 | fQtLCMSNotCalc(kTRUE), | |
fb629e2d | 31 | fQt(0.0), |
32 | fQtNotCalc(kTRUE), | |
78d7c6d3 | 33 | fQInv(0.0), |
34 | fQInvNotCalc(kTRUE), | |
35 | fInvMass(0.0), | |
36 | fInvMassNotCalc(kTRUE), | |
37 | fKt(0.0), | |
38 | fKtNotCalc(kTRUE), | |
39 | fKStar(0.0), | |
40 | fKStarNotCalc(kTRUE), | |
a40c0433 | 41 | fKStarOut(0.0), |
42 | fKStarSide(0.0), | |
43 | fKStarLong(0.0), | |
44 | fKStarCompNotCalc(kTRUE), | |
78d7c6d3 | 45 | fPInv(0.0), |
46 | fQSide(0.0), | |
47 | fOut(0.0), | |
48 | fQLong(0.0), | |
49 | fMt(0.0), | |
50 | fMtNotCalc(kTRUE), | |
51 | fInvMassSqr(0.0), | |
52 | fMassSqrNotCalc(kTRUE), | |
53 | fQInvL(0.0), | |
54 | fQInvLNotCalc(kTRUE), | |
55 | fAvarageDistance(0.0), | |
56 | fAvarageDistanceNotCalc(kTRUE), | |
57 | fPxSum(0.0), | |
58 | fPySum(0.0), | |
59 | fPzSum(0.0), | |
60 | fESum(0.0), | |
61 | fSumsNotCalc(kTRUE), | |
62 | fPxDiff(0.0), | |
63 | fPyDiff(0.0), | |
64 | fPzDiff(0.0), | |
65 | fEDiff(0.0), | |
66 | fDiffsNotCalc(kTRUE), | |
67 | fGammaLCMS(0.0), | |
68 | fGammaLCMSNotCalc(kTRUE), | |
69 | fChanged(kTRUE) | |
70 | { | |
71 | //value of rev defines if it is Swapped | |
72 | //if you pass kTRUE swpaped pair will NOT be created | |
73 | //though you wont be able to get the swaped pair from this pair | |
74 | ||
75 | if(!rev) fSwappedPair = new AliAODPair(kTRUE); //if false create swaped pair | |
76 | ||
77 | } | |
78 | /************************************************************************/ | |
79 | ||
80 | AliAODPair::AliAODPair(AliVAODParticle* part1, AliVAODParticle* part2, Bool_t rev): | |
81 | fPart1(part1), | |
82 | fPart2(part2), | |
83 | fSwappedPair(0x0), | |
84 | fQSideLCMS(0.0), | |
85 | fQSideLCMSNotCalc(kTRUE), | |
86 | fQOutLCMS(0.0), | |
87 | fQOutLCMSNotCalc(kTRUE), | |
88 | fQLongLCMS(0.0), | |
89 | fQLongLCMSNotCalc(kTRUE), | |
f422a7da | 90 | fQtLCMS(0.0), |
91 | fQtLCMSNotCalc(kTRUE), | |
af250cbf | 92 | fQt(0.0), |
93 | fQtNotCalc(kTRUE), | |
78d7c6d3 | 94 | fQInv(0.0), |
95 | fQInvNotCalc(kTRUE), | |
96 | fInvMass(0.0), | |
97 | fInvMassNotCalc(kTRUE), | |
98 | fKt(0.0), | |
99 | fKtNotCalc(kTRUE), | |
100 | fKStar(0.0), | |
101 | fKStarNotCalc(kTRUE), | |
a40c0433 | 102 | fKStarOut(0.0), |
103 | fKStarSide(0.0), | |
104 | fKStarLong(0.0), | |
105 | fKStarCompNotCalc(kTRUE), | |
78d7c6d3 | 106 | fPInv(0.0), |
107 | fQSide(0.0), | |
108 | fOut(0.0), | |
109 | fQLong(0.0), | |
110 | fMt(0.0), | |
111 | fMtNotCalc(kTRUE), | |
112 | fInvMassSqr(0.0), | |
113 | fMassSqrNotCalc(kTRUE), | |
114 | fQInvL(0.0), | |
115 | fQInvLNotCalc(kTRUE), | |
116 | fAvarageDistance(0.0), | |
117 | fAvarageDistanceNotCalc(kTRUE), | |
118 | fPxSum(0.0), | |
119 | fPySum(0.0), | |
120 | fPzSum(0.0), | |
121 | fESum(0.0), | |
122 | fSumsNotCalc(kTRUE), | |
123 | fPxDiff(0.0), | |
124 | fPyDiff(0.0), | |
125 | fPzDiff(0.0), | |
126 | fEDiff(0.0), | |
127 | fDiffsNotCalc(kTRUE), | |
128 | fGammaLCMS(0.0), | |
129 | fGammaLCMSNotCalc(kTRUE), | |
130 | fChanged(kTRUE) | |
131 | { | |
132 | //value of rev defines if it is Swapped | |
133 | //if you pass kTRUE swpaped pair will NOT be created | |
134 | //though you wont be able to get the swaped pair from this pair | |
135 | ||
136 | if(!rev) fSwappedPair = new AliAODPair(part2,part1,kTRUE); //if false create swaped pair | |
137 | ||
138 | } | |
139 | /************************************************************************/ | |
140 | AliAODPair::AliAODPair(const AliAODPair& in): | |
141 | TObject(in), | |
142 | fPart1(0x0), | |
143 | fPart2(0x0), | |
144 | fSwappedPair(0x0), | |
145 | fQSideLCMS(0.0), | |
146 | fQSideLCMSNotCalc(kTRUE), | |
147 | fQOutLCMS(0.0), | |
148 | fQOutLCMSNotCalc(kTRUE), | |
149 | fQLongLCMS(0.0), | |
150 | fQLongLCMSNotCalc(kTRUE), | |
f422a7da | 151 | fQtLCMS(0.0), |
152 | fQtLCMSNotCalc(kTRUE), | |
af250cbf | 153 | fQt(0.0), |
154 | fQtNotCalc(kTRUE), | |
78d7c6d3 | 155 | fQInv(0.0), |
156 | fQInvNotCalc(kTRUE), | |
157 | fInvMass(0.0), | |
158 | fInvMassNotCalc(kTRUE), | |
159 | fKt(0.0), | |
160 | fKtNotCalc(kTRUE), | |
161 | fKStar(0.0), | |
162 | fKStarNotCalc(kTRUE), | |
a40c0433 | 163 | fKStarOut(0.0), |
164 | fKStarSide(0.0), | |
165 | fKStarLong(0.0), | |
166 | fKStarCompNotCalc(kTRUE), | |
78d7c6d3 | 167 | fPInv(0.0), |
168 | fQSide(0.0), | |
169 | fOut(0.0), | |
170 | fQLong(0.0), | |
171 | fMt(0.0), | |
172 | fMtNotCalc(kTRUE), | |
173 | fInvMassSqr(0.0), | |
174 | fMassSqrNotCalc(kTRUE), | |
175 | fQInvL(0.0), | |
176 | fQInvLNotCalc(kTRUE), | |
177 | fAvarageDistance(0.0), | |
178 | fAvarageDistanceNotCalc(kTRUE), | |
179 | fPxSum(0.0), | |
180 | fPySum(0.0), | |
181 | fPzSum(0.0), | |
182 | fESum(0.0), | |
183 | fSumsNotCalc(kTRUE), | |
184 | fPxDiff(0.0), | |
185 | fPyDiff(0.0), | |
186 | fPzDiff(0.0), | |
187 | fEDiff(0.0), | |
188 | fDiffsNotCalc(kTRUE), | |
189 | fGammaLCMS(0.0), | |
190 | fGammaLCMSNotCalc(kTRUE), | |
191 | fChanged(kTRUE) | |
192 | { | |
193 | //cpy constructor | |
194 | in.Copy(*this); | |
195 | } | |
196 | /************************************************************************/ | |
197 | ||
198 | AliAODPair& AliAODPair::operator=(const AliAODPair& in) | |
199 | { | |
200 | //Assigment operator | |
201 | in.Copy(*this); | |
202 | return *this; | |
203 | } | |
204 | /************************************************************************/ | |
205 | ||
206 | Double_t AliAODPair::GetInvMass() | |
207 | { | |
208 | //Returns qinv value for a pair | |
209 | if(fInvMassNotCalc) | |
210 | { | |
211 | CalculateInvMassSqr(); //method is inline so we not waste th time for jumping into method | |
212 | ||
213 | if(fInvMassSqr<0) fInvMass = TMath::Sqrt(-fInvMassSqr); | |
214 | else fInvMass = TMath::Sqrt(fInvMassSqr); | |
215 | ||
216 | fInvMassNotCalc = kFALSE; | |
217 | } | |
218 | return fInvMass; | |
219 | } | |
220 | /************************************************************************/ | |
221 | ||
222 | Double_t AliAODPair::GetQSideLCMS() | |
223 | { | |
224 | //return Q Side in Central Of Mass System in Longitudialy Comoving Frame | |
225 | ||
226 | if (fQSideLCMSNotCalc) | |
227 | { | |
228 | fQSideLCMS = (fPart1->Px()*fPart2->Py()-fPart2->Px()*fPart1->Py())/GetKt(); | |
229 | fQSideLCMSNotCalc = kFALSE; | |
230 | } | |
231 | return fQSideLCMS; | |
232 | } | |
233 | /************************************************************************/ | |
234 | ||
235 | Double_t AliAODPair::GetQOutLCMS() | |
236 | { | |
237 | //caculates Qout in Center Of Mass Longitudionally Co-Moving | |
238 | if(fQOutLCMSNotCalc) | |
239 | { | |
240 | CalculateSums(); | |
241 | CalculateDiffs(); | |
242 | ||
243 | if (fPart1->Mass() != fPart2->Mass()) | |
244 | { | |
245 | /* | |
246 | //STAR algorithm | |
247 | Double_t beta = fPzSum/fESum; | |
248 | Double_t gamma = GetGammaToLCMS(); | |
249 | Double_t el = gamma * (fPart1->E() - beta * fPart1->Pz()); | |
250 | Double_t x = ( fPart1->Px()*fPxSum + fPart1->Py()*fPySum) / ( 2.0*GetKt() ); | |
251 | beta = 2.0*GetKt()/GetMt(); | |
252 | gamma = GetMt()/GetQInv(); | |
253 | fQOutLCMS = gamma * (x - beta * el); | |
254 | */ | |
255 | ||
256 | //beta=fPzSum/fESum; // Longit. V == beta | |
257 | Double_t beta=fPzSum/fESum; | |
258 | Double_t gamma = GetGammaToLCMS(); | |
259 | ||
260 | Double_t cosphi=fPxSum/(2.0*GetKt()); // cos(phi) | |
261 | Double_t sinphi=fPySum/(2.0*GetKt()); // sin(phi) | |
262 | ||
263 | // ROTATE(part1Px,part1Py,SPHI,CPHI,part1Px,part1Py);//ROT8 | |
264 | // ROTATE(part2Px,part2Py,SPHI,CPHI,part2Px,part2Py);//ROT8 | |
265 | Double_t tmp; | |
266 | tmp = fPart1->Px()*cosphi + fPart1->Py()*sinphi; | |
267 | Double_t part1Py = fPart1->Py()*cosphi - fPart1->Px()*sinphi; | |
268 | Double_t part1Px = tmp; | |
269 | ||
270 | tmp = fPart2->Px()*cosphi + fPart2->Py()*sinphi; | |
271 | Double_t part2Py = fPart2->Py()*cosphi - fPart2->Px()*sinphi; | |
272 | Double_t part2Px = tmp; | |
273 | ||
274 | ||
275 | // LTR(part1Pz,E1,beta,GetGammaToLCMS(),part1Pz,E1a); | |
276 | // LTR(part2Pz,E2,beta,GetGammaToLCMS(),part2Pz,E2a); | |
277 | Double_t part1Pz=gamma*(fPart1->Pz()-beta*fPart1->E()); | |
278 | Double_t part2Pz=gamma*(fPart2->Pz()-beta*fPart2->E()); | |
279 | ||
280 | Double_t part1P2=part1Px*part1Px+part1Py*part1Py+part1Pz*part1Pz; | |
281 | Double_t part2P2=part2Px*part2Px+part2Py*part2Py+part2Pz*part2Pz; | |
282 | Double_t part1E=TMath::Sqrt(fPart1->Mass()*fPart1->Mass()+part1P2); | |
283 | Double_t part2E=TMath::Sqrt(fPart2->Mass()*fPart2->Mass()+part2P2); | |
284 | Double_t sumE=part1E+part2E; | |
285 | Double_t sumPx=part1Px+part2Px; | |
286 | Double_t sumPy=part1Py+part2Py; | |
287 | Double_t sumPZ=part1Pz+part2Pz; | |
288 | Double_t sumP2=sumPx*sumPx+sumPy*sumPy+sumPZ*sumPZ; | |
289 | ||
290 | Double_t relmass=TMath::Sqrt(sumE*sumE-sumP2); | |
291 | Double_t hf = (fPart1->Mass()*fPart1->Mass() - fPart2->Mass()*fPart2->Mass())/(relmass*relmass); | |
292 | fQOutLCMS=(part1Px-part2Px);//== id | |
293 | fQOutLCMS=fQOutLCMS-sumPx*hf; //sumPx == fPxSum ale po rotacji i transf | |
294 | } | |
295 | else | |
296 | { | |
297 | Double_t k2 = fPxSum*fPxDiff+fPySum*fPyDiff; | |
298 | fQOutLCMS = 0.5*k2/GetKt(); | |
299 | // if (non-id) fQOutLCMS=fQOutLCMS - sumPx*HF; | |
300 | } | |
301 | ||
302 | ||
303 | fQOutLCMSNotCalc = kFALSE; | |
304 | } | |
305 | return fQOutLCMS; | |
306 | } | |
307 | /************************************************************************/ | |
308 | ||
309 | Double_t AliAODPair::GetQLongLCMS() | |
310 | { | |
311 | //return Q Long in Central Of Mass System in Longitudialy Comoving Frame | |
312 | if (fQLongLCMSNotCalc) | |
313 | { | |
314 | CalculateSums(); | |
315 | CalculateDiffs(); | |
316 | Double_t beta = fPzSum/fESum; | |
317 | fQLongLCMS = GetGammaToLCMS() * ( fPzDiff - beta*fEDiff ); | |
318 | fQLongLCMSNotCalc = kFALSE; | |
319 | } | |
320 | return fQLongLCMS; | |
321 | } | |
322 | /************************************************************************/ | |
323 | ||
f422a7da | 324 | Double_t AliAODPair::GetQtLCMS() |
325 | { | |
326 | //returns Q transverse CMS longitudionally co-moving | |
327 | if (fQtLCMSNotCalc) | |
328 | { | |
329 | fQtLCMS = TMath::Hypot(GetQOutLCMS(),GetQSideLCMS()); | |
330 | fQtLCMSNotCalc = kFALSE; | |
331 | } | |
332 | return fQtLCMS; | |
333 | } | |
fb629e2d | 334 | /************************************************************************/ |
335 | ||
336 | Double_t AliAODPair::GetQt() | |
337 | { | |
338 | //returns Q transverse CMS longitudionally co-moving | |
339 | if (fQtNotCalc) | |
340 | { | |
05eb9603 | 341 | CalculateSums(); |
342 | CalculateDiffs(); | |
343 | ||
fb629e2d | 344 | Double_t dotprod = fPxSum*fPxDiff + fPySum*fPyDiff + fPzSum*fPzDiff; |
345 | Double_t klen = fPxSum*fPxSum + fPySum*fPySum + fPzSum*fPzSum; | |
346 | klen = TMath::Sqrt(klen); | |
347 | Double_t qlen = fPxDiff*fPxDiff + fPyDiff*fPyDiff + fPzDiff*fPzDiff; | |
348 | qlen = TMath::Sqrt(qlen); | |
05eb9603 | 349 | Double_t tmp = klen*qlen; |
350 | if (tmp == 0.0) | |
351 | { | |
352 | fQt = 10e5; | |
353 | fQtNotCalc = kFALSE; | |
354 | return fQt; | |
355 | } | |
356 | Double_t cosopenangle = dotprod/tmp; | |
fb629e2d | 357 | Double_t sinopenangle = TMath::Sqrt(1.0 - cosopenangle*cosopenangle); |
358 | ||
359 | fQt = sinopenangle*qlen; | |
360 | fQtNotCalc = kFALSE; | |
361 | } | |
362 | return fQt; | |
363 | } | |
364 | /************************************************************************/ | |
f422a7da | 365 | |
78d7c6d3 | 366 | Double_t AliAODPair::GetKt() |
367 | { | |
368 | //calculates the evarage momentum of the pair | |
369 | if(fKtNotCalc) | |
370 | { | |
371 | CalculateSums(); | |
372 | fKt = 0.5*TMath::Hypot(fPxSum,fPySum); | |
373 | fKtNotCalc = kFALSE; | |
374 | } | |
375 | return fKt; | |
376 | } | |
377 | /************************************************************************/ | |
378 | ||
379 | Double_t AliAODPair::GetKStar() | |
380 | { | |
381 | //calculates invariant velocity difference | |
382 | if (fKStarNotCalc) | |
383 | { | |
384 | CalculateSums(); | |
385 | ||
386 | Double_t ptrans = fPxSum*fPxSum + fPySum*fPySum; | |
387 | Double_t mtrans = fESum*fESum - fPzSum*fPzSum; | |
388 | if (ptrans > mtrans) | |
389 | { | |
390 | Error("GetKStar","Tranverse momentum bigger than transverse mass. Not normal for on-shell particles"); | |
391 | Error("GetKStar","Particle1:"); | |
392 | fPart1->Print(); | |
393 | Error("GetKStar","Particle2:"); | |
394 | fPart2->Print(); | |
395 | Error("GetKStar",""); | |
396 | ||
397 | fKStar = 10e5; | |
398 | fKStarNotCalc = kFALSE; | |
399 | return fKStar; | |
400 | } | |
401 | Double_t pinv = TMath::Sqrt(mtrans - ptrans); | |
402 | ||
403 | Double_t q = (fPart1->Mass()*fPart1->Mass() - fPart2->Mass()*fPart2->Mass())/pinv; | |
404 | ||
405 | CalculateQInvL(); | |
406 | ||
407 | q = q*q - fQInvL; | |
408 | if ( q < 0) | |
409 | { | |
410 | Info("GetKStar","Sqrt of negative number q = %f",q); | |
411 | Error("GetKStar","Particle1:"); | |
412 | fPart1->Print(); | |
413 | Error("GetKStar","Particle2:"); | |
414 | fPart2->Print(); | |
415 | fKStar = 10e5; | |
416 | fKStarNotCalc = kFALSE; | |
417 | return fKStar; | |
418 | } | |
419 | ||
420 | q = TMath::Sqrt(q); | |
421 | fKStar = q/2.; | |
422 | fKStarNotCalc = kFALSE; | |
423 | } | |
424 | return fKStar; | |
425 | } | |
426 | /************************************************************************/ | |
a40c0433 | 427 | Double_t AliAODPair::GetKStarOut() |
428 | { | |
429 | CalculateKStarComp(); | |
430 | return fKStarOut; | |
431 | } | |
432 | /************************************************************************/ | |
433 | Double_t AliAODPair::GetKStarSide() | |
434 | { | |
435 | CalculateKStarComp(); | |
436 | return fKStarSide; | |
437 | } | |
438 | /************************************************************************/ | |
439 | Double_t AliAODPair::GetKStarLong() | |
440 | { | |
441 | CalculateKStarComp(); | |
442 | return fKStarLong; | |
443 | } | |
444 | /************************************************************************/ | |
78d7c6d3 | 445 | |
446 | Double_t AliAODPair::GetQInv() | |
447 | { | |
448 | //returns Qinv | |
449 | //warning for non-id particles you want to use 2*KStar | |
450 | if(fQInvNotCalc) | |
451 | { | |
452 | CalculateQInvL(); | |
453 | fQInv = TMath::Sqrt(TMath::Abs(fQInvL)); | |
454 | fQInvNotCalc = kFALSE; | |
455 | } | |
456 | return fQInv; | |
457 | } | |
458 | /************************************************************************/ | |
459 | ||
460 | Double_t AliAODPair::GetGammaToLCMS() | |
461 | { | |
462 | //calculates gamma factor of the boost to LCMS | |
463 | if(fGammaLCMSNotCalc) | |
464 | { | |
465 | CalculateSums(); | |
466 | Double_t beta = fPzSum/fESum; | |
467 | fGammaLCMS = 1.0/TMath::Sqrt(1.0 - beta*beta); | |
468 | fGammaLCMSNotCalc = kFALSE; | |
469 | } | |
470 | return fGammaLCMS; | |
471 | } | |
472 | /************************************************************************/ | |
473 | ||
fe3f2f54 | 474 | Double_t AliAODPair::GetGammaToTransverse() |
475 | { | |
476 | //calculates gamma factor of the boost to LCMS | |
477 | Double_t beta = 2.0*GetKt() / GetMt(); | |
478 | Double_t gamma = 1.0/TMath::Sqrt(1.0 - beta*beta); | |
479 | ||
480 | return gamma; | |
481 | } | |
482 | /************************************************************************/ | |
483 | ||
78d7c6d3 | 484 | Double_t AliAODPair::GetMt() |
485 | { | |
486 | //Calculates transverse mass of the pair | |
487 | if (fMtNotCalc) | |
488 | { | |
489 | CalculateSums(); | |
490 | fMt = TMath::Sqrt(fESum*fESum - fPzSum*fPzSum); | |
491 | fMtNotCalc = kFALSE; | |
492 | } | |
493 | return fMt; | |
494 | } | |
495 | /************************************************************************/ | |
496 | ||
497 | Double_t AliAODPair::GetAvarageDistance() | |
498 | { | |
499 | //returns and buffers avarage distance between two tracks calculated | |
500 | // out of track points (see AliAODTrackPoints class) | |
501 | ||
502 | if (fAvarageDistanceNotCalc) | |
503 | { | |
504 | fAvarageDistance = AvDistance(); | |
505 | fAvarageDistanceNotCalc = kFALSE; | |
506 | } | |
507 | return fAvarageDistance; | |
508 | } | |
509 | /************************************************************************/ | |
510 | ||
511 | Double_t AliAODPair::AvDistance() | |
512 | { | |
513 | //returns avarage distance between two tracks in range | |
514 | //as defined in Track-Points of AliVAODParticle | |
515 | //returns negative value if error uccured f.g. tracks do not have track-points | |
516 | AliTrackPoints* tpts1 = fPart1->GetTPCTrackPoints(); | |
517 | if ( tpts1 == 0x0) | |
518 | {//it could be simulated pair | |
519 | // Warning("GetValue","Track 1 does not have Track Points. Pair NOT Passed."); | |
520 | return -1.0; | |
521 | } | |
522 | ||
523 | AliTrackPoints* tpts2 = fPart2->GetTPCTrackPoints(); | |
524 | if ( tpts2 == 0x0) | |
525 | { | |
526 | // Warning("GetValue","Track 2 does not have Track Points. Pair NOT Passed."); | |
527 | return -1.0; | |
528 | } | |
529 | ||
530 | return tpts1->AvarageDistance(*tpts2); | |
531 | } | |
8ea30edc | 532 | /************************************************************************/ |
533 | ||
534 | Double_t AliAODPair::GetR() | |
535 | { | |
536 | //Returns distance between particles vertexes in thir CMS | |
537 | ||
538 | CalculateDiffs(); | |
5c03edbe | 539 | |
540 | Double_t vxDiff = fPart1->Vx() - fPart2->Vx(); | |
541 | Double_t vyDiff = fPart1->Vy() - fPart2->Vy(); | |
542 | Double_t vzDiff = fPart1->Vz() - fPart2->Vz(); | |
543 | ||
544 | Double_t r = TMath::Sqrt( vxDiff*vxDiff + vyDiff*vyDiff + vzDiff*vzDiff ); | |
545 | return r; | |
8ea30edc | 546 | |
547 | } | |
548 | /************************************************************************/ | |
549 | ||
550 | Double_t AliAODPair::GetRStar() | |
551 | { | |
552 | //Returns distance between particles vertexes in thir CMS | |
553 | ||
554 | ||
555 | CalculateSums(); | |
556 | ||
557 | Double_t klen = fPxSum*fPxSum + fPySum*fPySum + fPzSum*fPzSum; | |
558 | klen = TMath::Sqrt(klen); | |
559 | ||
560 | Double_t aBeta = klen/fESum; | |
561 | Double_t aGamma = 1.0/TMath::Sqrt(1.0 - aBeta*aBeta); | |
562 | ||
563 | ||
564 | Double_t alpha = -TMath::ATan2(fPySum,fPzSum); | |
565 | Double_t beta = TMath::ATan2(fPxSum,TMath::Hypot(fPySum,fPzSum)); | |
566 | ||
567 | Double_t sinalpha = TMath::Sin(alpha); | |
568 | Double_t cosalpha = TMath::Cos(alpha); | |
569 | Double_t sinbeta = TMath::Sin(beta); | |
570 | Double_t cosbeta = TMath::Cos(beta); | |
571 | ||
572 | Double_t v1xP = fPart1->Vx(); | |
573 | Double_t v2xP = fPart2->Vx(); | |
574 | Double_t v1yP = fPart1->Vy()*cosalpha + fPart1->Vz()*sinalpha; | |
575 | Double_t v2yP = fPart2->Vy()*cosalpha + fPart2->Vz()*sinalpha; | |
576 | Double_t v1zP =-fPart1->Vy()*sinalpha + fPart1->Vz()*cosalpha; | |
577 | Double_t v2zP =-fPart2->Vy()*sinalpha + fPart2->Vz()*cosalpha; | |
578 | ||
579 | ||
580 | /////////////////////////////////////////////////// | |
581 | ||
582 | // Double_t p1yP = fPart1->Py()*cosalpha + fPart1->Pz()*sinalpha; | |
583 | // Double_t p2yP = fPart2->Py()*cosalpha + fPart2->Pz()*sinalpha; | |
584 | // | |
585 | // Double_t p1zP =-fPart1->Py()*sinalpha + fPart1->Pz()*cosalpha; | |
586 | // Double_t p2zP =-fPart2->Py()*sinalpha + fPart2->Pz()*cosalpha; | |
587 | // | |
588 | // | |
589 | // Double_t p1x = fPart1->Px()*cosbeta - p1zP*sinbeta; | |
590 | // Double_t p2x = fPart2->Px()*cosbeta - p2zP*sinbeta; | |
591 | // Double_t p1z = fPart1->Px()*sinbeta + p1zP*cosbeta; | |
592 | // Double_t p2z = fPart2->Px()*sinbeta + p2zP*cosbeta; | |
593 | ||
594 | // Info("","%f %f %f",p1yP,p2yP,p1yP+p2yP); | |
595 | // Info("","%f %f %f",p1x,p2x,p1x+p2x); | |
596 | ||
597 | // Info("","%f %f ",p1x+p2x,p1yP+p2yP); | |
598 | ||
599 | /////////////////////////////////////////////////// | |
600 | ||
601 | ||
602 | Double_t v1x = v1xP*cosbeta - v1zP*sinbeta; | |
603 | Double_t v2x = v2xP*cosbeta - v2zP*sinbeta; | |
604 | Double_t v1y = v1yP; | |
605 | Double_t v2y = v2yP; | |
606 | Double_t v1z = v1xP*sinbeta + v1zP*cosbeta; | |
607 | Double_t v2z = v2xP*sinbeta + v2zP*cosbeta; | |
608 | ||
609 | ||
610 | Double_t v1zB=aGamma*(v1z-aBeta*fPart1->T()); | |
611 | Double_t v2zB=aGamma*(v2z-aBeta*fPart2->T()); | |
612 | ||
613 | ||
614 | ||
615 | Double_t dx = v1x - v2x; | |
616 | Double_t dy = v1y - v2y; | |
617 | Double_t dz = v1zB - v2zB; | |
618 | ||
619 | Double_t rstar = TMath::Sqrt( dx*dx + dy*dy + dz*dz); | |
620 | ||
621 | return rstar; | |
622 | } | |
6808c13f | 623 | /************************************************************************/ |
af2872da | 624 | |
625 | void AliAODPair::MirrorSecond() | |
626 | { | |
627 | //makes local copy of the second particle and mirrors their momenta | |
628 | //for its deletion is responsible who calls this method | |
629 | fPart2 = (AliVAODParticle*)fPart2->Clone(); | |
630 | fPart2->SetMomentum(-fPart2->Px(),-fPart2->Py(),-fPart2->Pz(),fPart2->E()); | |
6808c13f | 631 | Changed(); |
af2872da | 632 | } |
6808c13f | 633 | /************************************************************************/ |
af2872da | 634 | |
635 | void AliAODPair::DeleteSecond() | |
636 | { | |
637 | //Deletes second particle | |
638 | delete fPart2; | |
639 | fPart2 = 0x0; | |
640 | } | |
fe3f2f54 | 641 | |
201c7e13 | 642 | void AliAODPair::Print() |
fe3f2f54 | 643 | { |
644 | if (fPart1) fPart1->Print(); | |
645 | if (fPart2) fPart2->Print(); | |
646 | ||
647 | Info("Print","GetKStar() %f",GetKStar()); | |
648 | Info("Print","GetKt() %f",GetKt() ); | |
649 | Info("Print","QInv %f", GetQInv() ); | |
650 | Info("Print","GetQOutLCMS() %f",GetQOutLCMS() ); | |
651 | Info("Print","GetQSideLCMS %f",GetQSideLCMS() ); | |
652 | Info("Print","GetQLongLCMS() %f", GetQLongLCMS()); | |
653 | Info("Print","GetDeltaTheta() %f", GetDeltaTheta()); | |
654 | Info("Print","GetDeltaPhi() %f", GetDeltaPhi()); | |
655 | ||
656 | ||
657 | } |