//
// file: AliHBTPIDPurityFctns.cxx AliHBTPIDPurityFctns.h
//
-// Caution: On 2D plots on X axis in simulated values
-// That is contrary to two-particle resolutions where it is reconstructed one
+// Classes for calculating PID purity, efficiency and other things connected with PID
+// xxx
+// xxx
//
// added by Piotr.Skowronski@cern.ch
-//
//
//////////////////////////////////////////////////////////////////////////////////
+/******************************************************************/
/******************************************************************/
/******************************************************************/
}
/******************************************************************/
+AliHBTMonPIDPurityVsPtFctn::AliHBTMonPIDPurityVsPtFctn(const AliHBTMonPIDPurityVsPtFctn& /*in*/):
+ AliHBTMonTwoParticleFctn1D(),
+ AliHBTCorrelFunction(),
+ fGood(0x0),
+ fAll(0x0)
+{
+ //cpy constructor
+ Error("AliHBTMonPIDPurityVsPtFctn(const AliHBTMonPIDPurityVsPtFctn&",
+ "Functions can not be copied because of histogram names clashes");
+}
+
+/******************************************************************/
+
AliHBTMonPIDPurityVsPtFctn::~AliHBTMonPIDPurityVsPtFctn()
{
//dtor
delete fAll;
}
/******************************************************************/
+
+AliHBTMonPIDPurityVsPtFctn& AliHBTMonPIDPurityVsPtFctn::operator=
+ (const AliHBTMonPIDPurityVsPtFctn& /*in*/)
+{
+//assigment operator
+ Error("operator=","Functions can not be copied because of histogram names clashes");
+ return *this;
+}
+/******************************************************************/
+
void AliHBTMonPIDPurityVsPtFctn::Write()
{
+//Writes a fucntion results
AliHBTMonitorFunction::Write();
fGood->Write();
fAll->Write();
void AliHBTMonPIDPurityVsPtFctn::Init()
{
//Initializes fuction
- if (AliHBTParticle::GetDebug()>0) Info("Init","%s",GetName());
+ if (AliVAODParticle::GetDebug()>0) Info("Init","%s",GetName());
if (fResult == 0x0)
{
fAll->SetDirectory(0x0);
fAll->Sumw2();
- if (AliHBTParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
+ if (AliVAODParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
}
/******************************************************************/
fResult->SetName(numstr);
fResult->SetTitle(numstr);
}
+
if (fGood)
{
TString numstr = fName + " Good";
}
/******************************************************************/
-void AliHBTMonPIDPurityVsPtFctn::Process(AliHBTParticle * track,AliHBTParticle * part)
+void AliHBTMonPIDPurityVsPtFctn::Process(AliVAODParticle * track,AliVAODParticle * part)
{
//process the particle/track
Double_t pt = part->Pt();
}
/******************************************************************/
+AliHBTMonPIDContaminationVsPtFctn::AliHBTMonPIDContaminationVsPtFctn
+ (const AliHBTMonPIDContaminationVsPtFctn& /*in*/):
+ AliHBTMonTwoParticleFctn1D(),
+ AliHBTCorrelFunction(),
+ fWrong(0x0),
+ fAll(0x0)
+{
+ //cpy constructor
+ Error("AliHBTMonPIDContaminationVsPtFctn(const AliHBTMonPIDContaminationVsPtFctn&",
+ "Functions can not be copied because of histogram names clashes");
+}
+
+/******************************************************************/
+
AliHBTMonPIDContaminationVsPtFctn::~AliHBTMonPIDContaminationVsPtFctn()
{
//dtor
}
/******************************************************************/
+AliHBTMonPIDContaminationVsPtFctn& AliHBTMonPIDContaminationVsPtFctn::operator=
+ (const AliHBTMonPIDContaminationVsPtFctn& /*in*/)
+{
+//assigment operator
+ Error("operator=","Functions can not be copied because of histogram names clashes");
+ return *this;
+}
+/******************************************************************/
+
void AliHBTMonPIDContaminationVsPtFctn::Write()
{
//Writes the function results
void AliHBTMonPIDContaminationVsPtFctn::Init()
{
//Initializes fuction
- if (AliHBTParticle::GetDebug()>0) Info("Init","%s",GetName());
+ if (AliVAODParticle::GetDebug()>0) Info("Init","%s",GetName());
if (fResult == 0x0)
{
fAll->SetDirectory(0x0);
fAll->Sumw2();
- if (AliHBTParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
+ if (AliVAODParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
}
/******************************************************************/
}
/******************************************************************/
-void AliHBTMonPIDContaminationVsPtFctn::Process(AliHBTParticle * track, AliHBTParticle * part)
+void AliHBTMonPIDContaminationVsPtFctn::Process(AliVAODParticle * track, AliVAODParticle * part)
{
//process the particle/track
Double_t pt = part->Pt();
}
/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+ClassImp(AliHBTQInvCorrelFctnPerfectPID)
+
+AliHBTQInvCorrelFctnPerfectPID::AliHBTQInvCorrelFctnPerfectPID(Int_t nbins, Double_t maxXval, Double_t minXval):
+ AliHBTTwoPairFctn1D(nbins,maxXval,minXval)
+{
+//ctor
+ fWriteNumAndDen = kTRUE;//change default behaviour
+ Rename("qinvcfprfctpid","Q_{inv} Correlation Function Perfect PID");
+}
+/*************************************************************/
+
+void AliHBTQInvCorrelFctnPerfectPID::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ fNumerator->Fill(trackpair->GetQInv());
+}
+
+/*************************************************************/
+void AliHBTQInvCorrelFctnPerfectPID::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ fDenominator->Fill(trackpair->GetQInv());
+}
+/*************************************************************/
+
+TH1* AliHBTQInvCorrelFctnPerfectPID::GetResult()
+{
+ //returns the scaled ratio
+
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ return fRatio;
+}
+/*************************************************************/
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+ClassImp(AliHBTWeightQInvCorrelFctnPerfectPID)
+
+AliHBTWeightQInvCorrelFctnPerfectPID::AliHBTWeightQInvCorrelFctnPerfectPID(Int_t nbins, Double_t maxXval, Double_t minXval):
+ AliHBTTwoPairFctn1D(nbins,maxXval,minXval)
+{
+//ctor
+ fWriteNumAndDen = kTRUE;//change default behaviour
+ Rename("wqinvcfprfctpid","Q_{inv} Weight Correlation Function Perfect PID");
+}
+/*************************************************************/
+
+void AliHBTWeightQInvCorrelFctnPerfectPID::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ fNumerator->Fill(trackpair->GetQInv(),partpair->GetWeight());
+}
+
+/*************************************************************/
+void AliHBTWeightQInvCorrelFctnPerfectPID::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ fDenominator->Fill(trackpair->GetQInv());
+}
+/*************************************************************/
+
+TH1* AliHBTWeightQInvCorrelFctnPerfectPID::GetResult()
+{
+ //returns the scaled ratio
+
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ return fRatio;
+}
+
+
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+ClassImp(AliHBTWeightQOutSQideQLongFctnPerfectPID)
+
+AliHBTWeightQOutSQideQLongFctnPerfectPID::AliHBTWeightQOutSQideQLongFctnPerfectPID
+ (Int_t nXbins, Double_t maxXval, Double_t minXval,
+ Int_t nYbins, Double_t maxYval, Double_t minYval,
+ Int_t nZbins, Double_t maxZval, Double_t minZval):
+ AliHBTTwoPairFctn3D(nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval)
+{
+ //ctor
+ fWriteNumAndDen = kTRUE;//change default behaviour
+ Rename("wqoslprfctpid","Q_{out}-Q_{side}-Q_{long} Weight Fctn with perfect PID");
+}
+/*************************************************************/
+
+void AliHBTWeightQOutSQideQLongFctnPerfectPID::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t weight = partpair->GetWeight();
+ Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
+ Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
+ fNumerator->Fill(out,side,lon,weight);
+}
+/*************************************************************/
+
+void AliHBTWeightQOutSQideQLongFctnPerfectPID::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
+ Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
+ fDenominator->Fill(out,side,lon);
+}
+/******************************************************************/
+
+TH1* AliHBTWeightQOutSQideQLongFctnPerfectPID::GetResult()
+{
+ //returns the scaled ratio
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ return fRatio;
+}
+
+
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+ClassImp(AliHBTQOutSQideQLongFctnPerfectPID)
+
+AliHBTQOutSQideQLongFctnPerfectPID::AliHBTQOutSQideQLongFctnPerfectPID
+ (Int_t nXbins, Double_t maxXval, Double_t minXval,
+ Int_t nYbins, Double_t maxYval, Double_t minYval,
+ Int_t nZbins, Double_t maxZval, Double_t minZval):
+ AliHBTTwoPairFctn3D(nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval)
+{
+ //ctor
+ fWriteNumAndDen = kTRUE;//change default behaviour
+ Rename("qoslprfctpid","Q_{out}-Q_{side}-Q_{long} Fctn with perfect PID");
+}
+/*************************************************************/
+
+void AliHBTQOutSQideQLongFctnPerfectPID::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
+ Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
+ fNumerator->Fill(out,side,lon);
+}
+/*************************************************************/
+
+void AliHBTQOutSQideQLongFctnPerfectPID::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t out = TMath::Abs(trackpair->GetQOutLCMS());
+ Double_t side = TMath::Abs(trackpair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(trackpair->GetQLongLCMS());
+ fDenominator->Fill(out,side,lon);
+}
+/******************************************************************/
+
+TH1* AliHBTQOutSQideQLongFctnPerfectPID::GetResult()
+{
+ //returns the scaled ratio
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ return fRatio;
+}
+
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+
+
ClassImp(AliHBTPairPIDProbVsQInvFctn)
AliHBTPairPIDProbVsQInvFctn::AliHBTPairPIDProbVsQInvFctn(Int_t nbins, Double_t maxXval, Double_t minXval):
if(pair) fDenominator->Fill(pair->GetQInv(),pair->GetPIDProb());
}
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
ClassImp(AliHBTPairPIDProbVsQOutSQideQLongFctn)
pair = CheckPair(pair);
if (pair == 0x0) return;
Double_t weight = pair->GetPIDProb();
- Double_t out = TMath::Abs(pair->GetQOutCMSLC());
- Double_t side = TMath::Abs(pair->GetQSideCMSLC());
- Double_t lon = TMath::Abs(pair->GetQLongCMSLC());
+ Double_t out = TMath::Abs(pair->GetQOutLCMS());
+ Double_t side = TMath::Abs(pair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(pair->GetQLongLCMS());
fNumerator->Fill(out,side,lon,weight);
}
/*************************************************************/
pair = CheckPair(pair);
if (pair == 0x0) return;
Double_t weight = pair->GetPIDProb();
- Double_t out = TMath::Abs(pair->GetQOutCMSLC());
- Double_t side = TMath::Abs(pair->GetQSideCMSLC());
- Double_t lon = TMath::Abs(pair->GetQLongCMSLC());
+ Double_t out = TMath::Abs(pair->GetQOutLCMS());
+ Double_t side = TMath::Abs(pair->GetQSideLCMS());
+ Double_t lon = TMath::Abs(pair->GetQLongLCMS());
fDenominator->Fill(out,side,lon,weight);
}
/*************************************************************/
TH1* AliHBTPairPIDProbVsQOutSQideQLongFctn::GetResult()
{
//returns the scaled ratio
+
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ return fRatio;
+}
+
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+ClassImp(AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID)
+
+AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID::AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID(Int_t nXbins, Double_t maxXval, Double_t minXval,
+ Int_t nYbins, Double_t maxYval, Double_t minYval,
+ Int_t nZbins, Double_t maxZval, Double_t minZval):
+ AliHBTTwoPairFctn3D(nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval)
+{
+//ctor
+//Set Axis Title
+ fWriteNumAndDen = kTRUE;
+ Rename("tteffptthetaphipfctPID","P_{t} \\theta \\phi Two Track Efficiency Function");
+ if(fNumerator)
+ {
+ fNumerator->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fNumerator->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fNumerator->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
+
+ if(fDenominator)
+ {
+ fDenominator->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fDenominator->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fDenominator->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
+}
+/******************************************************************/
+
+void AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t x = TMath::Abs(trackpair->GetDeltaPt());
+ Double_t y = TMath::Abs(trackpair->GetDeltaTheta());
+ Double_t z = TMath::Abs(trackpair->GetDeltaPhi());
+ fNumerator->Fill(x,y,z);
+}
+/******************************************************************/
+
+void AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+//Fills numerator
+ if (trackpair->Particle1()->GetPdgCode() != partpair->Particle1()->GetPdgCode()) return;
+ if (trackpair->Particle2()->GetPdgCode() != partpair->Particle2()->GetPdgCode()) return;
+
+ trackpair = CheckPair(trackpair);
+ if (trackpair == 0x0) return;
+// partpair = CheckPair(partpair);
+ if (partpair == 0x0) return;
+
+ Double_t x = TMath::Abs(trackpair->GetDeltaPt());
+ Double_t y = TMath::Abs(trackpair->GetDeltaTheta());
+ Double_t z = TMath::Abs(trackpair->GetDeltaPhi());
+ fDenominator->Fill(x,y,z);
+}
+/******************************************************************/
+
+TH1* AliHBTTwoTrackEffFctnPtThetaPhiPerfectPID::GetResult()
+{
+//returns ratio of numerator and denominator
+ delete fRatio;
+ fRatio = GetRatio(Scale());
+ if(fRatio)
+ {
+ fRatio->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fRatio->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fRatio->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
+ return fRatio;
+}
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+
+ClassImp(AliHBTPairPIDProbVsPtThetaPhiFctn)
+
+AliHBTPairPIDProbVsPtThetaPhiFctn::AliHBTPairPIDProbVsPtThetaPhiFctn(Int_t nXbins, Double_t maxXval, Double_t minXval,
+ Int_t nYbins, Double_t maxYval, Double_t minYval,
+ Int_t nZbins, Double_t maxZval, Double_t minZval):
+ AliHBTOnePairFctn3D(nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval)
+{
+ //ctor
+ fWriteNumAndDen = kTRUE;//change default behaviour
+ Rename("ptthetaphipidpur","Pair PID Probablilty .vs. \\Delta P_{t}-\\Delta \\theta-\\Delta \\phi Fctn");
+ if(fNumerator)
+ {
+ fNumerator->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fNumerator->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fNumerator->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
+
+ if(fDenominator)
+ {
+ fDenominator->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fDenominator->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fDenominator->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
+
+}
+/*************************************************************/
+
+void AliHBTPairPIDProbVsPtThetaPhiFctn::ProcessSameEventParticles(AliHBTPair* pair)
+{
+//Fills numerator
+ pair = CheckPair(pair);
+ if (pair == 0x0) return;
+ Double_t weight = pair->GetPIDProb();
+ Double_t pt = TMath::Abs(pair->GetDeltaPt());
+ Double_t theta = TMath::Abs(pair->GetDeltaTheta());
+ Double_t phi = TMath::Abs(pair->GetDeltaPhi());
+ fNumerator->Fill(pt,theta,phi,weight);
+}
+/*************************************************************/
+
+void AliHBTPairPIDProbVsPtThetaPhiFctn::ProcessDiffEventParticles(AliHBTPair* pair)
+{
+//Fills numerator
+ pair = CheckPair(pair);
+ if (pair == 0x0) return;
+ Double_t weight = pair->GetPIDProb();
+ Double_t pt = TMath::Abs(pair->GetDeltaPt());
+ Double_t phi = TMath::Abs(pair->GetDeltaTheta());
+ Double_t theta = TMath::Abs(pair->GetDeltaPhi());
+ fDenominator->Fill(pt,theta,phi,weight);
+}
+/*************************************************************/
+
+TH1* AliHBTPairPIDProbVsPtThetaPhiFctn::GetResult()
+{
+ //returns the scaled ratio
+
delete fRatio;
fRatio = GetRatio(Scale());
+ if(fRatio)
+ {
+ fRatio->GetXaxis()->SetTitle("\\Delta P_{t} [GeV]");
+ fRatio->GetYaxis()->SetTitle("\\Delta \\theta [rad]");
+ fRatio->GetZaxis()->SetTitle("\\Delta \\phi [rad]");
+ }
return fRatio;
}
+