]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HBTAN/AliHBTPIDPurityFctns.cxx
Cuts in 2 pair functions only on reconstructed pair
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPIDPurityFctns.cxx
index 89166db84469a64605eea74f232913694fe3cf58..2e8f2e470589cc1d2cf1505d155f1fa32dacb8cb 100644 (file)
@@ -7,15 +7,16 @@
 //
 // 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
-// 
 //
 //////////////////////////////////////////////////////////////////////////////////
 
 
+/******************************************************************/
 /******************************************************************/
 /******************************************************************/
 
@@ -32,6 +33,19 @@ AliHBTMonPIDPurityVsPtFctn::AliHBTMonPIDPurityVsPtFctn(Int_t nbins, Double_t max
 }
 /******************************************************************/
 
+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
@@ -39,8 +53,19 @@ AliHBTMonPIDPurityVsPtFctn::~AliHBTMonPIDPurityVsPtFctn()
   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();
@@ -50,7 +75,7 @@ void AliHBTMonPIDPurityVsPtFctn::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)
    {   
@@ -84,7 +109,7 @@ void AliHBTMonPIDPurityVsPtFctn::Init()
   fAll->SetDirectory(0x0);
   fAll->Sumw2();
 
-  if (AliHBTParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
+  if (AliVAODParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
 }
 
 /******************************************************************/
@@ -101,6 +126,7 @@ void AliHBTMonPIDPurityVsPtFctn::Rename(const Char_t * name)
      fResult->SetName(numstr);
      fResult->SetTitle(numstr);
    }
+   
   if (fGood)
    {
      TString numstr = fName + " Good";
@@ -160,7 +186,7 @@ TH1* AliHBTMonPIDPurityVsPtFctn::GetResult()
 }
 /******************************************************************/
 
-void AliHBTMonPIDPurityVsPtFctn::Process(AliHBTParticle * track,AliHBTParticle * part)
+void AliHBTMonPIDPurityVsPtFctn::Process(AliVAODParticle * track,AliVAODParticle * part)
 {
  //process the particle/track
  Double_t pt = part->Pt();
@@ -191,6 +217,20 @@ AliHBTMonPIDContaminationVsPtFctn::AliHBTMonPIDContaminationVsPtFctn(Int_t nbins
 }
 /******************************************************************/
 
+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
@@ -199,6 +239,15 @@ AliHBTMonPIDContaminationVsPtFctn::~AliHBTMonPIDContaminationVsPtFctn()
 }
 /******************************************************************/
 
+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
@@ -211,7 +260,7 @@ void AliHBTMonPIDContaminationVsPtFctn::Write()
 void AliHBTMonPIDContaminationVsPtFctn::Init()
 {
 //Initializes fuction
-  if (AliHBTParticle::GetDebug()>0) Info("Init","%s",GetName());
+  if (AliVAODParticle::GetDebug()>0) Info("Init","%s",GetName());
 
   if (fResult == 0x0)
    {   
@@ -244,7 +293,7 @@ void AliHBTMonPIDContaminationVsPtFctn::Init()
   fAll->SetDirectory(0x0);
   fAll->Sumw2();
   
-  if (AliHBTParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
+  if (AliVAODParticle::GetDebug()>0) Info("Init","%s Done.",GetName());
 }
 
 /******************************************************************/
@@ -320,7 +369,7 @@ TH1* AliHBTMonPIDContaminationVsPtFctn::GetResult()
 }
 /******************************************************************/
 
-void AliHBTMonPIDContaminationVsPtFctn::Process(AliHBTParticle * track, AliHBTParticle * part)
+void AliHBTMonPIDContaminationVsPtFctn::Process(AliVAODParticle * track, AliVAODParticle * part)
 {
  //process the particle/track
  Double_t pt = part->Pt();
@@ -335,6 +384,245 @@ void AliHBTMonPIDContaminationVsPtFctn::Process(AliHBTParticle * track, AliHBTPa
 }
 
 /******************************************************************/
+/******************************************************************/
+/******************************************************************/
+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):
@@ -369,6 +657,9 @@ void AliHBTPairPIDProbVsQInvFctn::ProcessDiffEventParticles(AliHBTPair* pair)
    if(pair) fDenominator->Fill(pair->GetQInv(),pair->GetPIDProb());
   }
 
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
 
 ClassImp(AliHBTPairPIDProbVsQOutSQideQLongFctn)
 
@@ -389,9 +680,9 @@ void AliHBTPairPIDProbVsQOutSQideQLongFctn::ProcessSameEventParticles(AliHBTPair
   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);
 }
 /*************************************************************/
@@ -402,9 +693,9 @@ void AliHBTPairPIDProbVsQOutSQideQLongFctn::ProcessDiffEventParticles(AliHBTPair
   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);
 }
 /*************************************************************/
@@ -412,7 +703,161 @@ void AliHBTPairPIDProbVsQOutSQideQLongFctn::ProcessDiffEventParticles(AliHBTPair
 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;
 }
+