ROOT logo
#ifndef ALIUNICORPAIR_H
#define ALIUNICORPAIR_H

/* Copyright(c) 1998-2048, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
/* $Id$ */

// Author: Dariusz Miskowiec <mailto:d.miskowiec@gsi.de> 2002

//=============================================================================
// particle (track) pair
//=============================================================================

#include <cmath>
#include <TObject.h>
#include <TLorentzVector.h>

//=============================================================================
class AliUnicorPair : public TObject {
   
 public:
   AliUnicorPair() : fP0(), fP1(), fP(), fQ(), fBeta(), fBetat(), fBetaz(), fUbeta(), 
     fUbetat(), fUbetaz(), fCMp(), fCMq(), fBuf() {} // constructor
   virtual ~AliUnicorPair() {}                               // destructor
   void Set0(double m,double p,double theta,double phi)  {fP0.SetXYZM(0,0,p,m); fP0.SetTheta(theta); fP0.SetPhi(phi);}
   void Set1(double m,double p,double theta,double phi)  {fP1.SetXYZM(0,0,p,m); fP1.SetTheta(theta); fP1.SetPhi(phi);}
   void SetMXYZ0(double m,double px,double py,double pz) {fP0.SetXYZM(px,py,pz,m);}
   void SetMXYZ1(double m,double px,double py,double pz) {fP1.SetXYZM(px,py,pz,m);}
   void CalcLAB()                 {fCMp=fP=fP0+fP1; fCMq=fQ=fP1-fP0; fBeta=fP.BoostVector(); 
                                   fBetaz.SetXYZ(0,0,fBeta.Z()); fBetat=fBeta; fBetat.SetZ(0); 
                                   fUbeta=fBeta.Unit(); fUbetat=fBetat.Unit(); fUbetaz=fBetaz.Unit();}
   double Rapidity()        const {return fP.Rapidity();}
   double Pt()              const {return fP.Pt();}
   double Phi()             const {return fP.Phi();}
   double DTheta()          const {return fP1.Theta()-fP0.Theta();}
   double DPhi()            const {return TVector2::Phi_mpi_pi(fP1.Phi()-fP0.Phi());}
   void CalcPairCM()              {fCMp.Boost(-fBeta);  fCMq.Boost(-fBeta);}
   void CalcLcmsCM()              {fCMp.Boost(-fBetaz); fCMq.Boost(-fBetaz);}
   void Swap()                    {fBuf=fP0; fP0=fP1; fP1=fBuf; fQ=-fQ; fCMq=-fCMq;}
   double Minv()            const {return fP.M();}
   double Qinv2()           const {return -fQ.M2();}
   double QCM()             const {return fCMq.Vect().Mag();}
   double QCMpar()          const {return fCMq.Vect()*fUbeta;}
   double QCMper()          const {return sqrt(fabs(QCM()*QCM()-QCMpar()*QCMpar()));}
   double QCMout()          const {return +fCMq.Vect().X()*fUbetat.X()+fCMq.Vect().Y()*fUbetat.Y();}
   double QCMside()         const {return -fCMq.Vect().X()*fUbetat.Y()+fCMq.Vect().Y()*fUbetat.X();}
   double QCMlong()         const {return fCMq.Vect().Z();}
   double QCMTheta()        const {return fCMq.Theta();}
   double QCMPhi()          const {return fCMq.Phi();}
   double QCMPhiOut()       const {return atan2(QCMside(),QCMout());} // phi w.r.t. out

 protected:
   TLorentzVector fP0;            // LAB four-momentum of track 0
   TLorentzVector fP1;            // LAB four-momentum of track 1
   TLorentzVector fP;             // LAB total four-momentum
   TLorentzVector fQ;             // LAB four-momentum difference
   TVector3 fBeta;                // LAB pair velocity
   TVector3 fBetat;               // LAB pair velocity transverse
   TVector3 fBetaz;               // LAB pair velocity along z
   TVector3 fUbeta;               // LAB pair velocity direction
   TVector3 fUbetat;              // LAB pair velocity transverse direction
   TVector3 fUbetaz;              // LAB pair velocity along z direction (hm)
   TLorentzVector fCMp;           // CM total four-momentum
   TLorentzVector fCMq;           // CM four-momentum difference
   TLorentzVector fBuf;           // dummy buffer for swapping

   ClassDef(AliUnicorPair,1)
};
//=============================================================================
#endif
 AliUnicorPair.h:1
 AliUnicorPair.h:2
 AliUnicorPair.h:3
 AliUnicorPair.h:4
 AliUnicorPair.h:5
 AliUnicorPair.h:6
 AliUnicorPair.h:7
 AliUnicorPair.h:8
 AliUnicorPair.h:9
 AliUnicorPair.h:10
 AliUnicorPair.h:11
 AliUnicorPair.h:12
 AliUnicorPair.h:13
 AliUnicorPair.h:14
 AliUnicorPair.h:15
 AliUnicorPair.h:16
 AliUnicorPair.h:17
 AliUnicorPair.h:18
 AliUnicorPair.h:19
 AliUnicorPair.h:20
 AliUnicorPair.h:21
 AliUnicorPair.h:22
 AliUnicorPair.h:23
 AliUnicorPair.h:24
 AliUnicorPair.h:25
 AliUnicorPair.h:26
 AliUnicorPair.h:27
 AliUnicorPair.h:28
 AliUnicorPair.h:29
 AliUnicorPair.h:30
 AliUnicorPair.h:31
 AliUnicorPair.h:32
 AliUnicorPair.h:33
 AliUnicorPair.h:34
 AliUnicorPair.h:35
 AliUnicorPair.h:36
 AliUnicorPair.h:37
 AliUnicorPair.h:38
 AliUnicorPair.h:39
 AliUnicorPair.h:40
 AliUnicorPair.h:41
 AliUnicorPair.h:42
 AliUnicorPair.h:43
 AliUnicorPair.h:44
 AliUnicorPair.h:45
 AliUnicorPair.h:46
 AliUnicorPair.h:47
 AliUnicorPair.h:48
 AliUnicorPair.h:49
 AliUnicorPair.h:50
 AliUnicorPair.h:51
 AliUnicorPair.h:52
 AliUnicorPair.h:53
 AliUnicorPair.h:54
 AliUnicorPair.h:55
 AliUnicorPair.h:56
 AliUnicorPair.h:57
 AliUnicorPair.h:58
 AliUnicorPair.h:59
 AliUnicorPair.h:60
 AliUnicorPair.h:61
 AliUnicorPair.h:62
 AliUnicorPair.h:63
 AliUnicorPair.h:64
 AliUnicorPair.h:65
 AliUnicorPair.h:66
 AliUnicorPair.h:67
 AliUnicorPair.h:68
 AliUnicorPair.h:69
 AliUnicorPair.h:70