]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HBTAN/AliHBTPair.h
Bug corrected in DeltaPhi
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPair.h
index b416788e8561c6549a2e2e3c6c0e8b2a996557de..48564eaa800f391d7bbad0a6da4bf701ce5e3a1c 100644 (file)
@@ -1,43 +1,65 @@
 #ifndef ALIHBTPAIR_H
 #define ALIHBTPAIR_H
+//_________________________________________________________________________
+///////////////////////////////////////////////////////////////////////////
+//
+// class AliHBTPair
+//
+// class implements pair of particles and taking care of caluclation (almost)
+// all of pair properties (Qinv, InvMass,...)
+// more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
+//
+////////////////////////////////////////////////////////////////////////////
 
 #include <TObject.h>
-
-
 #include "AliHBTParticle.h"
-//class implements pair of particles and taking care of caluclation (almost)
-//all of pair properties (Qinv, InvMass,...)
-//more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
+
 
 class AliHBTPair: public TObject
 {
  public:
    AliHBTPair(Bool_t rev = kFALSE); //contructor
-   ~AliHBTPair(){}
-   void SetParticles(AliHBTParticle*,AliHBTParticle*); //sets particles in the pair
+   AliHBTPair(AliHBTParticle* part1, AliHBTParticle* part2, Bool_t rev = kFALSE); //contructor
+   AliHBTPair(const AliHBTPair& in);
+   
+   virtual ~AliHBTPair(){}
+   
+   AliHBTPair& operator=(const AliHBTPair& in);
+   
+   void SetParticles(AliHBTParticle* p1,AliHBTParticle* p2); //sets particles in the pair
    AliHBTPair* GetSwapedPair() {return fSwapedPair;} //returns pair with swapped particles
    
    AliHBTParticle* Particle1() const {return fPart1;} //returns pointer to first particle
    AliHBTParticle* Particle2() const {return fPart2;} //returns pointer to decond particle
    
+   void Changed();
    //Center Mass System - Longitudinally Comoving
    
-   Double_t GetInvMass(); //returns invariant mass of the pair
+   virtual Double_t GetInvMass(); //returns invariant mass of the pair
+   virtual Double_t GetMt();
+   virtual Double_t GetQInv(); //returns Q invariant
+   virtual Double_t GetQSideCMSLC(); //returns Q Side CMS longitudionally co-moving
+   virtual Double_t GetQOutCMSLC(); //returns Q out CMS longitudionally co-moving
+   virtual Double_t GetQLongCMSLC(); //returns Q Long CMS longitudionally co-moving
    
-
-   Double_t GetQInv(); //returns Q invariant
-   Double_t GetQSideCMSLC(); //returns Q Side CMS longitudionally co-moving
-   Double_t GetQOutCMSLC(); //returns Q out CMS longitudionally co-moving
-   Double_t GetQLongCMSLC(); //returns Q Long CMS longitudionally co-moving
    
+   virtual Double_t GetKt();  //returns K transverse
+   virtual Double_t GetKStar();
+   
+   virtual Double_t GetAvarageDistance();//returns avarage distnace between two tracks
+   
+   virtual Double_t GetDeltaP(); //return difference of momenta
+   virtual Double_t GetDeltaPt();
+   virtual Double_t GetDeltaPx();
+   virtual Double_t GetDeltaPy();
+   virtual Double_t GetDeltaPz();
    
-   Double_t GetKt();  //returns K transverse
-   Double_t GetKStar();
+   virtual Double_t GetDeltaTheta();
+   virtual Double_t GetDeltaPhi();
    
-   Double_t GetDeltaP(); //return difference of momenta
-   Double_t GetDeltaPx();
-   Double_t GetDeltaPy();
-   Double_t GetDeltaPz();
+   virtual Double_t GetGammaToCMSLC();
+   virtual Double_t GetWeight();
+   virtual Double_t GetPIDProb() const {return fPart1->GetPidProb()*fPart2->GetPidProb();}
    
  protected:
    AliHBTParticle* fPart1;  //pointer to first particle
@@ -69,45 +91,56 @@ class AliHBTPair: public TObject
    Double_t fKt; //K == sum vector of particle's momenta. Kt transverse component
    Bool_t   fKtNotCalc;//flag indicating if fKt is already calculated for this pair
    
-   Double_t fKStar; //
-   Bool_t   fKStarNotCalc;
+   Double_t fKStar; // KStar
+   Bool_t   fKStarNotCalc;// flag indicating if fKStar is calculated
    
    Double_t fPInv;  //invariant momentum
+   
    Double_t fQSide; //Q Side
    Double_t fOut;//Q Out
    Double_t fQLong;//Q Long
 
-   
+   Double_t fMt;//Transverse coordinate of Inv. Mass
+   Bool_t   fMtNotCalc;//flag indicating if Mt is calculated for current pair
+      
    Double_t fInvMassSqr;//squre of invariant mass
-   Bool_t   fMassSqrNotCalc; //
+   Bool_t   fMassSqrNotCalc; //flag indicating if fInvMassSqr for this pair
    void     CalculateInvMassSqr();
    
-   Double_t fQInvL;
-   Bool_t   fQInvLNotCalc;
+   Double_t fQInvL; //Qinv in longitudional direction
+   Bool_t   fQInvLNotCalc;//flag indicating if fQInvL is calculated for current pair
    void     CalculateQInvL();
+
+   Double_t fWeight;//Value of the weight
+   Bool_t   fWeightNotCalc;//flag indicating if fWeight is calculated for current pair
    
-   Double_t fPxSum;
-   Double_t fPySum;
-   Double_t fPzSum;
-   Double_t fESum;
-   Bool_t   fSumsNotCalc;
+   Double_t fAvarageDistance;//value of the avarage distance calculated out of track points
+   Bool_t   fAvarageDistanceNotCalc;//flag indicating if the avarage distance is calculated
+   
+   Double_t fPxSum;// Sum of Px momenta
+   Double_t fPySum;// Sum of Py momenta
+   Double_t fPzSum;// Sum of Pz momenta
+   Double_t fESum;// Sum of energies
+   Bool_t   fSumsNotCalc;//flag indicating if fPxSum,fPxSum,fPxSum and fESum is calculated for current pair
    void     CalculateSums();
    
-   Double_t fPxDiff;
-   Double_t fPyDiff;
-   Double_t fPzDiff;
-   Double_t fEDiff;
-   Bool_t   fDiffsNotCalc;
+   Double_t fPxDiff;// Difference of Px momenta
+   Double_t fPyDiff;// Difference of Px momenta
+   Double_t fPzDiff;// Difference of Px momenta
+   Double_t fEDiff;// Difference of Px momenta
+   Bool_t   fDiffsNotCalc;//flag indicating if fPxDiff,fPxDiff,fPxDiff and fEDiff is calculated for current pair
    void     CalculateDiffs();
    
-   
+   Double_t fGammaCMSLC;//gamma of boost in CMSLC
+   Bool_t   fGammaCMSLCNotCalc;//flag indicating if fGammaCMSLC is calculated for current pair
    /***************************************************/
-   void CalculateBase();
-   Bool_t fChanged;
+   Bool_t   fChanged;//flag indicating if object has been changed
+
+   void     CalculateBase();
+   Double_t AvDistance();
    
    
  private:
- public:
   ClassDef(AliHBTPair,1)
 };
 /****************************************************************/
@@ -120,29 +153,37 @@ void AliHBTPair::SetParticles(AliHBTParticle* p1,AliHBTParticle* p2)
  fPart2 = p2;
  if (fSwapedPair) //if we have Swaped (so we are not)
    fSwapedPair->SetParticles(p2,p1); //set particles for him too
- // Resel all calculations (flags)
+ Changed();
+ //and do nothing until will be asked for
+} 
+/****************************************************************/
 
+inline
+void AliHBTPair::Changed()
+{
+ // Resel all calculations (flags)
  fChanged           = kTRUE;
  fSumsNotCalc       = kTRUE;
  fDiffsNotCalc      = kTRUE;
  fMassSqrNotCalc    = kTRUE;
  fInvMassNotCalc    = kTRUE;
  fQInvNotCalc       = kTRUE;
+ fMtNotCalc         = kTRUE;
  fQSideCMSLCNotCalc = kTRUE;
  fQOutCMSLCNotCalc  = kTRUE;
  fQLongCMSLCNotCalc = kTRUE;
  fKtNotCalc         = kTRUE;
  fKStarNotCalc      = kTRUE;
  fQInvLNotCalc      = kTRUE;
- //and do nothing until will be asked for
+ fGammaCMSLCNotCalc = kTRUE;
+ fWeightNotCalc = kTRUE;
+ fAvarageDistanceNotCalc = kTRUE;
 }
 /****************************************************************/
-/****************************************************************/
 inline 
 void AliHBTPair::CalculateInvMassSqr()
  {
+  //calculates square of qinv
   if (fMassSqrNotCalc)
    {
      CalculateSums();
@@ -170,6 +211,7 @@ void AliHBTPair::CalculateQInvL()
 inline 
 void AliHBTPair::CalculateSums()
  {
+   //calculates momenta and energy sums
    if(fSumsNotCalc)
     {
      fPxSum = fPart1->Px()+fPart2->Px();
@@ -183,6 +225,7 @@ void AliHBTPair::CalculateSums()
 inline 
 void AliHBTPair::CalculateDiffs()
  {
+   //calculates momenta and energy differences 
    if(fDiffsNotCalc)
     {
      fPxDiff = fPart1->Px()-fPart2->Px();
@@ -197,13 +240,24 @@ void AliHBTPair::CalculateDiffs()
 inline 
 Double_t AliHBTPair::GetDeltaP() //return difference of momenta
 {
+ //returns difference of momenta (length of vector)
  CalculateDiffs();
  return TMath::Sqrt(fPxDiff*fPxDiff + fPyDiff*fPyDiff + fPzDiff*fPzDiff);
 }
 /****************************************************************/
+
+inline 
+Double_t AliHBTPair::GetDeltaPt()
+ {
+   //returns difference of Pz
+   return fPart1->Pt()-fPart2->Pt();
+ }
+/****************************************************************/
+
 inline 
 Double_t AliHBTPair::GetDeltaPx()
  {
+   //returns difference of Pz
    CalculateDiffs();
    return fPxDiff;
  }
@@ -211,6 +265,7 @@ Double_t AliHBTPair::GetDeltaPx()
 inline 
 Double_t AliHBTPair::GetDeltaPy()
  {
+   //returns difference of Py
    CalculateDiffs();
    return fPyDiff;
  }
@@ -219,9 +274,42 @@ Double_t AliHBTPair::GetDeltaPy()
 inline 
 Double_t AliHBTPair::GetDeltaPz()
  {
+   //returns difference of Pz
    CalculateDiffs();
    return fPzDiff;
  }
+/****************************************************************/
+
+inline 
+Double_t AliHBTPair::GetDeltaPhi()
+ {
+   //returns difference of Phi
+   Double_t phi1 = fPart1->Phi();
+   Double_t phi2 = fPart2->Phi();
+   Double_t diff = phi1-phi2;
+   if (TMath::Abs(diff) > TMath::Pi())
+    {
+      if (phi1 > TMath::Pi())
+       {
+         phi1-=TMath::TwoPi();
+       }
+      else
+       {
+         phi2-=TMath::TwoPi();
+       }
+      diff = phi1-phi2; 
+    }
+   return diff;
+ }
+/****************************************************************/
+
+inline 
+Double_t AliHBTPair::GetDeltaTheta()
+ {
+   //returns difference of Theta
+   return fPart1->Theta()-fPart2->Theta();
+ }
+/****************************************************************/
 
 
 #endif