#include "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 "AliHBTParticle.h"
-#include "AliHBTLLWeights.h"
+#include "AliHBTWeights.h"
+#include "AliHBTTrackPoints.h"
ClassImp(AliHBTPair)
fMassSqrNotCalc(kTRUE),
fQInvL(0.0),
fQInvLNotCalc(kTRUE),
- fLLWeight(0.0),
- ffLLWeightNotCalc(kTRUE),
+ fWeight(0.0),
+ fWeightNotCalc(kTRUE),
+ fAvarageDistance(0.0),
+ fAvarageDistanceNotCalc(kTRUE),
fPxSum(0.0),
fPySum(0.0),
fPzSum(0.0),
fMassSqrNotCalc(kTRUE),
fQInvL(0.0),
fQInvLNotCalc(kTRUE),
- fLLWeight(0.0),
- ffLLWeightNotCalc(kTRUE),
+ fWeight(0.0),
+ fWeightNotCalc(kTRUE),
+ fAvarageDistance(0.0),
+ fAvarageDistanceNotCalc(kTRUE),
fPxSum(0.0),
fPySum(0.0),
fPzSum(0.0),
}
/************************************************************************/
+AliHBTPair::AliHBTPair(const AliHBTPair& in):
+ TObject(in),
+ fPart1(0x0),
+ fPart2(0x0),
+ fSwapedPair(0x0),
+ fQSideCMSLC(0.0),
+ fQSideCMSLCNotCalc(kTRUE),
+ fQOutCMSLC(0.0),
+ fQOutCMSLCNotCalc(kTRUE),
+ fQLongCMSLC(0.0),
+ fQLongCMSLCNotCalc(kTRUE),
+ fQInv(0.0),
+ fQInvNotCalc(kTRUE),
+ fInvMass(0.0),
+ fInvMassNotCalc(kTRUE),
+ fKt(0.0),
+ fKtNotCalc(kTRUE),
+ fKStar(0.0),
+ fKStarNotCalc(kTRUE),
+ fPInv(0.0),
+ fQSide(0.0),
+ fOut(0.0),
+ fQLong(0.0),
+ fMt(0.0),
+ fMtNotCalc(kTRUE),
+ fInvMassSqr(0.0),
+ fMassSqrNotCalc(kTRUE),
+ fQInvL(0.0),
+ fQInvLNotCalc(kTRUE),
+ fWeight(0.0),
+ fWeightNotCalc(kTRUE),
+ fAvarageDistance(0.0),
+ fAvarageDistanceNotCalc(kTRUE),
+ fPxSum(0.0),
+ fPySum(0.0),
+ fPzSum(0.0),
+ fESum(0.0),
+ fSumsNotCalc(kTRUE),
+ fPxDiff(0.0),
+ fPyDiff(0.0),
+ fPzDiff(0.0),
+ fEDiff(0.0),
+ fDiffsNotCalc(kTRUE),
+ fGammaCMSLC(0.0),
+ fGammaCMSLCNotCalc(kTRUE),
+ fChanged(kTRUE)
+{
+ //cpy constructor
+ in.Copy(*this);
+}
+/************************************************************************/
+
+AliHBTPair& AliHBTPair::operator=(const AliHBTPair& in)
+{
+ //Assigment operator
+ in.Copy(*this);
+ return *this;
+}
+/************************************************************************/
Double_t AliHBTPair::GetInvMass()
{
return fInvMass;
}
/************************************************************************/
+
Double_t AliHBTPair::GetQSideCMSLC()
{
- //return Q Side in Central Of Mass System in Longitudialy Comoving Frame
+//return Q Side in Central Of Mass System in Longitudialy Comoving Frame
if (fQSideCMSLCNotCalc)
{
return fQSideCMSLC;
}
/************************************************************************/
+
Double_t AliHBTPair::GetQOutCMSLC()
{
+ //caculates Qout in Center Of Mass Longitudionally Co-Moving
if(fQOutCMSLCNotCalc)
{
CalculateSums();
return fQOutCMSLC;
}
/************************************************************************/
+
Double_t AliHBTPair::GetQLongCMSLC()
{
+ //return Q Long in Central Of Mass System in Longitudialy Comoving Frame
if (fQLongCMSLCNotCalc)
{
CalculateSums();
return fQLongCMSLC;
}
/************************************************************************/
+
Double_t AliHBTPair::GetKt()
{
+ //calculates the evarage momentum of the pair
if(fKtNotCalc)
{
CalculateSums();
Double_t AliHBTPair::GetKStar()
{
+ //calculates invariant velocity difference
if (fKStarNotCalc)
{
CalculateSums();
- Double_t Ptrans = fPxSum*fPxSum + fPySum*fPySum;
- Double_t Mtrans = fESum*fESum - fPzSum*fPzSum;
- Double_t Pinv = TMath::Sqrt(Mtrans - Ptrans);
+ Double_t ptrans = fPxSum*fPxSum + fPySum*fPySum;
+ Double_t mtrans = fESum*fESum - fPzSum*fPzSum;
+ Double_t pinv = TMath::Sqrt(mtrans - ptrans);
- Double_t Q = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/Pinv;
+ Double_t q = (fPart1->GetMass()*fPart1->GetMass() - fPart2->GetMass()*fPart2->GetMass())/pinv;
CalculateQInvL();
- Q = TMath::Sqrt( Q*Q - fQInvL);
- fKStar = Q/2.;
+ q = q*q - fQInvL;
+ if ( q < 0)
+ {
+ Info("GetKStar","q = %f",q);
+ fPart1->Print();
+ fPart2->Print();
+ q = TMath::Abs(q);
+ }
+
+ q = TMath::Sqrt(q);
+ fKStar = q/2.;
fKStarNotCalc = kFALSE;
}
return fKStar;
Double_t AliHBTPair::GetGammaToCMSLC()
{
+ //calculates gamma factor of the boost to CMSLC
if(fGammaCMSLCNotCalc)
{
CalculateSums();
Double_t AliHBTPair::GetMt()
{
+ //Calculates transverse mass of the pair
if (fMtNotCalc)
{
CalculateSums();
}
/************************************************************************/
-Double_t AliHBTPair::GetLLWeight()
+Double_t AliHBTPair::GetWeight()
{
- if (ffLLWeightNotCalc)
+ //returns and buffers weight for this pair
+ if (fWeightNotCalc)
{
- fLLWeight = AliHBTLLWeights::Instance()->GetWeight(this);
+ fWeight = AliHBTWeights::Weight(this);
+ fWeightNotCalc = kFALSE;
}
- return fLLWeight;
+ return fWeight;
+}
+/************************************************************************/
+
+Double_t AliHBTPair::GetAvarageDistance()
+{
+//returns and buffers avarage distance between two tracks calculated
+// out of track points (see AliHBTTrackPoints class)
+
+ if (fAvarageDistanceNotCalc)
+ {
+ fAvarageDistance = AvDistance();
+ fAvarageDistanceNotCalc = kFALSE;
+ }
+ return fAvarageDistance;
+}
+/************************************************************************/
+
+Double_t AliHBTPair::AvDistance()
+{
+ //returns avarage distance between two tracks in range
+ //as defined in Track-Points of AliHBTParticle
+ //returns negative value if error uccured f.g. tracks do not have track-points
+ AliHBTTrackPoints* tpts1 = fPart1->GetTrackPoints();
+ if ( tpts1 == 0x0)
+ {//it could be simulated pair
+// Warning("GetValue","Track 1 does not have Track Points. Pair NOT Passed.");
+ return -1.0;
+ }
+
+ AliHBTTrackPoints* tpts2 = fPart2->GetTrackPoints();
+ if ( tpts2 == 0x0)
+ {
+// Warning("GetValue","Track 2 does not have Track Points. Pair NOT Passed.");
+ return -1.0;
+ }
+
+ return tpts1->AvarageDistance(*tpts2);
}