]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/AliAODPair.cxx
Moving from TEventList to TEntryList in the QueryTags methods
[u/mrichter/AliRoot.git] / ANALYSIS / AliAODPair.cxx
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://aliweb.cern.ch/people/skowron/analyzer/index.html
11 //
12 ////////////////////////////////////////////////////////////////////////////
13
14 #include "AliVAODParticle.h"
15 #include "AliTrackPoints.h"
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),
29  fQtLCMS(0.0),
30  fQtLCMSNotCalc(kTRUE),
31  fQt(0.0),
32  fQtNotCalc(kTRUE),
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),
41  fKStarOut(0.0),
42  fKStarSide(0.0),
43  fKStarLong(0.0),
44  fKStarCompNotCalc(kTRUE),
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),
90  fQtLCMS(0.0),
91  fQtLCMSNotCalc(kTRUE),
92  fQt(0.0),
93  fQtNotCalc(kTRUE),
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),
102  fKStarOut(0.0),
103  fKStarSide(0.0),
104  fKStarLong(0.0),
105  fKStarCompNotCalc(kTRUE),
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),
151  fQtLCMS(0.0),
152  fQtLCMSNotCalc(kTRUE),
153  fQt(0.0),
154  fQtNotCalc(kTRUE),
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),
163  fKStarOut(0.0),
164  fKStarSide(0.0),
165  fKStarLong(0.0),
166  fKStarCompNotCalc(kTRUE),
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
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 }
334 /************************************************************************/
335
336 Double_t AliAODPair::GetQt()
337 {
338  //returns Q transverse CMS longitudionally co-moving
339  if (fQtNotCalc)
340   {
341     CalculateSums();
342     CalculateDiffs();
343     
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);
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;
357     Double_t sinopenangle = TMath::Sqrt(1.0 - cosopenangle*cosopenangle);
358     
359     fQt = sinopenangle*qlen;
360     fQtNotCalc = kFALSE;
361   }
362  return fQt; 
363 }
364 /************************************************************************/
365
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 /************************************************************************/
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 /************************************************************************/
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
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
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 }
532 /************************************************************************/
533
534 Double_t AliAODPair::GetR() 
535 {
536 //Returns distance between particles vertexes in thir CMS
537
538   CalculateDiffs();
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;
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 }
623 /************************************************************************/
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());
631   Changed();
632 }
633 /************************************************************************/
634
635 void   AliAODPair::DeleteSecond()
636 {
637 //Deletes second particle
638   delete fPart2;
639   fPart2 = 0x0;
640 }
641
642 void   AliAODPair::Print() 
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 }