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