Просмотр исходного кода

Added pT-Y selection criteria for pions, kaons and (anti)protons

ParfenovPeter лет назад: 2
Родитель
Сommit
15d70d33d5
4 измененных файлов с 364 добавлено и 31 удалено
  1. 33 22
      bin/main.cpp
  2. 28 4
      qa.cfg
  3. 274 4
      utility/Utility.cxx
  4. 29 1
      utility/Utility.h

+ 33 - 22
bin/main.cpp

@@ -151,6 +151,18 @@ int main(int argc, char **argv)
       std::cout << "Cut_v1_Particle_etamax = " << qaUtility::GetInstance()->Cut_v1_Particle_etamax << std::endl;
       std::cout << "Cut_v1_Particle_ymin = " << qaUtility::GetInstance()->Cut_v1_Particle_ymin << std::endl;
       std::cout << "Cut_v1_Particle_ymax = " << qaUtility::GetInstance()->Cut_v1_Particle_ymax << std::endl;
+      std::cout << "Cut_v1_Particle_ptmin_pi = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmin_pi << std::endl;
+      std::cout << "Cut_v1_Particle_ptmax_pi = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmax_pi << std::endl;
+      std::cout << "Cut_v1_Particle_ymin_pi = " << qaUtility::GetInstance()->Cut_v1_Particle_ymin_pi << std::endl;
+      std::cout << "Cut_v1_Particle_ymax_pi = " << qaUtility::GetInstance()->Cut_v1_Particle_ymax_pi << std::endl;
+      std::cout << "Cut_v1_Particle_ptmin_ka = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmin_ka << std::endl;
+      std::cout << "Cut_v1_Particle_ptmax_ka = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmax_ka << std::endl;
+      std::cout << "Cut_v1_Particle_ymin_ka = " << qaUtility::GetInstance()->Cut_v1_Particle_ymin_ka << std::endl;
+      std::cout << "Cut_v1_Particle_ymax_ka = " << qaUtility::GetInstance()->Cut_v1_Particle_ymax_ka << std::endl;
+      std::cout << "Cut_v1_Particle_ptmin_pr = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmin_pr << std::endl;
+      std::cout << "Cut_v1_Particle_ptmax_pr = " << qaUtility::GetInstance()->Cut_v1_Particle_ptmax_pr << std::endl;
+      std::cout << "Cut_v1_Particle_ymin_pr = " << qaUtility::GetInstance()->Cut_v1_Particle_ymin_pr << std::endl;
+      std::cout << "Cut_v1_Particle_ymax_pr = " << qaUtility::GetInstance()->Cut_v1_Particle_ymax_pr << std::endl;
     }
     if (qaUtility::GetInstance()->Is_v2)
     {
@@ -170,6 +182,18 @@ int main(int argc, char **argv)
       std::cout << "Cut_v2_Particle_etamax = " << qaUtility::GetInstance()->Cut_v2_Particle_etamax << std::endl;
       std::cout << "Cut_v2_Particle_ymin = " << qaUtility::GetInstance()->Cut_v2_Particle_ymin << std::endl;
       std::cout << "Cut_v2_Particle_ymax = " << qaUtility::GetInstance()->Cut_v2_Particle_ymax << std::endl;
+      std::cout << "Cut_v2_Particle_ptmin_pi = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmin_pi << std::endl;
+      std::cout << "Cut_v2_Particle_ptmax_pi = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmax_pi << std::endl;
+      std::cout << "Cut_v2_Particle_ymin_pi = " << qaUtility::GetInstance()->Cut_v2_Particle_ymin_pi << std::endl;
+      std::cout << "Cut_v2_Particle_ymax_pi = " << qaUtility::GetInstance()->Cut_v2_Particle_ymax_pi << std::endl;
+      std::cout << "Cut_v2_Particle_ptmin_ka = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmin_ka << std::endl;
+      std::cout << "Cut_v2_Particle_ptmax_ka = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmax_ka << std::endl;
+      std::cout << "Cut_v2_Particle_ymin_ka = " << qaUtility::GetInstance()->Cut_v2_Particle_ymin_ka << std::endl;
+      std::cout << "Cut_v2_Particle_ymax_ka = " << qaUtility::GetInstance()->Cut_v2_Particle_ymax_ka << std::endl;
+      std::cout << "Cut_v2_Particle_ptmin_pr = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmin_pr << std::endl;
+      std::cout << "Cut_v2_Particle_ptmax_pr = " << qaUtility::GetInstance()->Cut_v2_Particle_ptmax_pr << std::endl;
+      std::cout << "Cut_v2_Particle_ymin_pr = " << qaUtility::GetInstance()->Cut_v2_Particle_ymin_pr << std::endl;
+      std::cout << "Cut_v2_Particle_ymax_pr = " << qaUtility::GetInstance()->Cut_v2_Particle_ymax_pr << std::endl;
     }
     std::cout << std::endl;
   }
@@ -468,22 +492,15 @@ int main(int argc, char **argv)
         y = 0.5*TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
         centBin = qaUtility::GetInstance()->GetCentralityBin(event->GetB(), qaUtility::GetInstance()->Cut_v1_Event_bCent);
 
-        if (qaUtility::GetInstance()->GetCharge(particle->GetPdg()) > 0)
-        {
-          ipid = 0;
-        }
-        if (qaUtility::GetInstance()->GetCharge(particle->GetPdg()) < 0)
-        {
-          ipid = 4;
-        }
         ipid = qaUtility::GetInstance()->GetPdgId(particle->GetPdg());
-        if (ipid != -1 && ipid != 0 && ipid != 4 && centBin != -1)
+
+        if (ipid != -1)
         {
-          if (qaUtility::GetInstance()->Cut_Particle_v1_pt(particle))
+          if (qaUtility::GetInstance()->Cut_Particle_v1_PID_pt(particle,ipid) && centBin != -1)
           {
             p_v1_PID_pt[centBin][ipid]->Fill(particle->GetPt(),v1*eta_w);
           }
-          if (qaUtility::GetInstance()->Cut_Particle_v1_y(particle))
+          if (qaUtility::GetInstance()->Cut_Particle_v1_PID_y(particle,ipid) && centBin != -1)
           {
             p_v1_PID_y[centBin][ipid]->Fill(y,v1);
           }
@@ -497,22 +514,15 @@ int main(int argc, char **argv)
         y = 0.5*TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
         centBin = qaUtility::GetInstance()->GetCentralityBin(event->GetB(), qaUtility::GetInstance()->Cut_v2_Event_bCent);
 
-        if (qaUtility::GetInstance()->GetCharge(particle->GetPdg()) > 0)
-        {
-          ipid = 0;
-        }
-        if (qaUtility::GetInstance()->GetCharge(particle->GetPdg()) < 0)
-        {
-          ipid = 4;
-        }
         ipid = qaUtility::GetInstance()->GetPdgId(particle->GetPdg());
-        if (ipid != -1 && ipid != 0 && ipid != 4 && centBin != -1)
+
+        if (ipid != -1)
         {
-          if (qaUtility::GetInstance()->Cut_Particle_v2_pt(particle))
+          if (qaUtility::GetInstance()->Cut_Particle_v2_PID_pt(particle,ipid) && centBin != -1)
           {
             p_v2_PID_pt[centBin][ipid]->Fill(particle->GetPt(),v2);
           }
-          if (qaUtility::GetInstance()->Cut_Particle_v2_y(particle))
+          if (qaUtility::GetInstance()->Cut_Particle_v2_PID_y(particle,ipid) && centBin != -1)
           {
             p_v2_PID_y[centBin][ipid]->Fill(y,v2);
           }
@@ -585,6 +595,7 @@ int main(int argc, char **argv)
     {
       h_minbias_Particle_PID_pt[i] ->Write(); 
       h_minbias_Particle_PID_eta[i]->Write(); 
+      h_minbias_Particle_PID_Y[i]->Write(); 
       h_minbias_Particle_PID_E[i]  ->Write(); 
       h_minbias_Particle_PID_px[i] ->Write(); 
       h_minbias_Particle_PID_py[i] ->Write(); 

+ 28 - 4
qa.cfg

@@ -20,19 +20,43 @@ Is_v1                                 1
 Cut_v1_Event_bmin:                    0.
 Cut_v1_Event_bmax:                    16.
 Cut_v1_Event_bCent:                   6.6 8.1
-Cut_v1_Particle_ptmin:                1.0
-Cut_v1_Particle_ptmax:                1.5
+Cut_v1_Particle_ptmin:                0.0
+Cut_v1_Particle_ptmax:                3.0
 Cut_v1_Particle_etamin:               -100.
 Cut_v1_Particle_etamax:               100.
 Cut_v1_Particle_ymin:                 -0.25
 Cut_v1_Particle_ymax:                 -0.15
+Cut_v1_Particle_ptmin_pi:             0.0
+Cut_v1_Particle_ptmax_pi:             0.5
+Cut_v1_Particle_ymin_pi:              -0.25
+Cut_v1_Particle_ymax_pi:              -0.15
+Cut_v1_Particle_ptmin_ka:             0.2
+Cut_v1_Particle_ptmax_ka:             0.9
+Cut_v1_Particle_ymin_ka:              -0.25
+Cut_v1_Particle_ymax_ka:              -0.15
+Cut_v1_Particle_ptmin_pr:             1.0
+Cut_v1_Particle_ptmax_pr:             1.5
+Cut_v1_Particle_ymin_pr:              -0.25
+Cut_v1_Particle_ymax_pr:              -0.15
 Is_v2                                 1
 Cut_v2_Event_bmin:                    0.
 Cut_v2_Event_bmax:                    16.
 Cut_v2_Event_bCent:                   6.6 8.1
-Cut_v2_Particle_ptmin:                1.0
-Cut_v2_Particle_ptmax:                1.5
+Cut_v2_Particle_ptmin:                0.0
+Cut_v2_Particle_ptmax:                3.0
 Cut_v2_Particle_etamin:               -100.
 Cut_v2_Particle_etamax:               100.
 Cut_v2_Particle_ymin:                 -0.05
 Cut_v2_Particle_ymax:                 0.05
+Cut_v2_Particle_ptmin_pi:             0.0
+Cut_v2_Particle_ptmax_pi:             0.5
+Cut_v2_Particle_ymin_pi:              -0.05
+Cut_v2_Particle_ymax_pi:              0.05
+Cut_v2_Particle_ptmin_ka:             0.2
+Cut_v2_Particle_ptmax_ka:             0.9
+Cut_v2_Particle_ymin_ka:              -0.05
+Cut_v2_Particle_ymax_ka:              0.05
+Cut_v2_Particle_ptmin_pr:             1.0
+Cut_v2_Particle_ptmax_pr:             1.5
+Cut_v2_Particle_ymin_pr:              -0.05
+Cut_v2_Particle_ymax_pr:              0.05

+ 274 - 4
utility/Utility.cxx

@@ -38,6 +38,18 @@ qaUtility::qaUtility() : Nevents(-1),
                          Cut_v1_Particle_etamax(100.),
                          Cut_v1_Particle_ymin(-0.25),
                          Cut_v1_Particle_ymax(-0.15),
+                         Cut_v1_Particle_ptmin_pi(0.0),
+                         Cut_v1_Particle_ptmax_pi(0.5),
+                         Cut_v1_Particle_ymin_pi(-0.25),
+                         Cut_v1_Particle_ymax_pi(-0.15),
+                         Cut_v1_Particle_ptmin_ka(0.2),
+                         Cut_v1_Particle_ptmax_ka(0.9),
+                         Cut_v1_Particle_ymin_ka(-0.25),
+                         Cut_v1_Particle_ymax_ka(-0.15),
+                         Cut_v1_Particle_ptmin_pr(1.0),
+                         Cut_v1_Particle_ptmax_pr(1.5),
+                         Cut_v1_Particle_ymin_pr(-0.25),
+                         Cut_v1_Particle_ymax_pr(-0.15),
                          Cut_v2_Event_bmin(0.),
                          Cut_v2_Event_bmax(16.),
                          sCut_v2_Event_bCent(""),
@@ -47,7 +59,19 @@ qaUtility::qaUtility() : Nevents(-1),
                          Cut_v2_Particle_etamin(-100.),
                          Cut_v2_Particle_etamax(100.),
                          Cut_v2_Particle_ymin(-0.05),
-                         Cut_v2_Particle_ymax(0.05)
+                         Cut_v2_Particle_ymax(0.05),
+                         Cut_v2_Particle_ptmin_pi(0.0),
+                         Cut_v2_Particle_ptmax_pi(0.5),
+                         Cut_v2_Particle_ymin_pi(-0.05),
+                         Cut_v2_Particle_ymax_pi(0.05),
+                         Cut_v2_Particle_ptmin_ka(0.2),
+                         Cut_v2_Particle_ptmax_ka(0.9),
+                         Cut_v2_Particle_ymin_ka(-0.05),
+                         Cut_v2_Particle_ymax_ka(0.05),
+                         Cut_v2_Particle_ptmin_pr(1.0),
+                         Cut_v2_Particle_ptmax_pr(1.5),
+                         Cut_v2_Particle_ymin_pr(-0.05),
+                         Cut_v2_Particle_ymax_pr(0.05)
 {
 }
 
@@ -107,6 +131,18 @@ Bool_t qaUtility::ReadConfig(const TString &configFileName)
   Cut_v1_Particle_etamax = env.GetValue("Cut_v1_Particle_etamax", 0.);
   Cut_v1_Particle_ymin = env.GetValue("Cut_v1_Particle_ymin", 0.);
   Cut_v1_Particle_ymax = env.GetValue("Cut_v1_Particle_ymax", 0.);
+  Cut_v1_Particle_ptmin_pi = env.GetValue("Cut_v1_Particle_ptmin_pi", 0.);
+  Cut_v1_Particle_ptmax_pi = env.GetValue("Cut_v1_Particle_ptmax_pi", 0.);
+  Cut_v1_Particle_ymin_pi = env.GetValue("Cut_v1_Particle_ymin_pi", 0.);
+  Cut_v1_Particle_ymax_pi = env.GetValue("Cut_v1_Particle_ymax_pi", 0.);
+  Cut_v1_Particle_ptmin_ka = env.GetValue("Cut_v1_Particle_ptmin_ka", 0.);
+  Cut_v1_Particle_ptmax_ka = env.GetValue("Cut_v1_Particle_ptmax_ka", 0.);
+  Cut_v1_Particle_ymin_ka = env.GetValue("Cut_v1_Particle_ymin_ka", 0.);
+  Cut_v1_Particle_ymax_ka = env.GetValue("Cut_v1_Particle_ymax_ka", 0.);
+  Cut_v1_Particle_ptmin_pr = env.GetValue("Cut_v1_Particle_ptmin_pr", 0.);
+  Cut_v1_Particle_ptmax_pr = env.GetValue("Cut_v1_Particle_ptmax_pr", 0.);
+  Cut_v1_Particle_ymin_pr = env.GetValue("Cut_v1_Particle_ymin_pr", 0.);
+  Cut_v1_Particle_ymax_pr = env.GetValue("Cut_v1_Particle_ymax_pr", 0.);
 
   Is_v2 = env.GetValue("Is_v2", 0);
   Cut_v2_Event_bmin = env.GetValue("Cut_v2_Event_bmin", 0.);
@@ -119,6 +155,18 @@ Bool_t qaUtility::ReadConfig(const TString &configFileName)
   Cut_v2_Particle_etamax = env.GetValue("Cut_v2_Particle_etamax", 0.);
   Cut_v2_Particle_ymin = env.GetValue("Cut_v2_Particle_ymin", 0.);
   Cut_v2_Particle_ymax = env.GetValue("Cut_v2_Particle_ymax", 0.);
+  Cut_v2_Particle_ptmin_pi = env.GetValue("Cut_v2_Particle_ptmin_pi", 0.);
+  Cut_v2_Particle_ptmax_pi = env.GetValue("Cut_v2_Particle_ptmax_pi", 0.);
+  Cut_v2_Particle_ymin_pi = env.GetValue("Cut_v2_Particle_ymin_pi", 0.);
+  Cut_v2_Particle_ymax_pi = env.GetValue("Cut_v2_Particle_ymax_pi", 0.);
+  Cut_v2_Particle_ptmin_ka = env.GetValue("Cut_v2_Particle_ptmin_ka", 0.);
+  Cut_v2_Particle_ptmax_ka = env.GetValue("Cut_v2_Particle_ptmax_ka", 0.);
+  Cut_v2_Particle_ymin_ka = env.GetValue("Cut_v2_Particle_ymin_ka", 0.);
+  Cut_v2_Particle_ymax_ka = env.GetValue("Cut_v2_Particle_ymax_ka", 0.);
+  Cut_v2_Particle_ptmin_pr = env.GetValue("Cut_v2_Particle_ptmin_pr", 0.);
+  Cut_v2_Particle_ptmax_pr = env.GetValue("Cut_v2_Particle_ptmax_pr", 0.);
+  Cut_v2_Particle_ymin_pr = env.GetValue("Cut_v2_Particle_ymin_pr", 0.);
+  Cut_v2_Particle_ymax_pr = env.GetValue("Cut_v2_Particle_ymax_pr", 0.);
 
   if (!initCentrality()) return false;
 
@@ -138,7 +186,7 @@ TChain *qaUtility::initChain(const TString &inputFileName, const char *chainName
   return chain;
 }
 
-std::vector<Float_t> qaUtility::ReadBvector(std::string _input)
+std::vector<Float_t> qaUtility::ParseVector(std::string _input)
 {
   std::vector<Float_t> vB;
 
@@ -153,8 +201,8 @@ std::vector<Float_t> qaUtility::ReadBvector(std::string _input)
 
 Bool_t qaUtility::initCentrality()
 {
-  Cut_v1_Event_bCent = ReadBvector(sCut_v1_Event_bCent);
-  Cut_v2_Event_bCent = ReadBvector(sCut_v2_Event_bCent);
+  Cut_v1_Event_bCent = ParseVector(sCut_v1_Event_bCent);
+  Cut_v2_Event_bCent = ParseVector(sCut_v2_Event_bCent);
 
   if (Cut_v1_Event_bCent.size() == 0 || 
     Cut_v2_Event_bCent.size() == 0)
@@ -241,6 +289,11 @@ Bool_t qaUtility::Cut_Particle_refmult(qaParticle *const &particle)
 
 Bool_t qaUtility::Cut_Particle_v1_pt(qaParticle *const &particle)
 {
+  if (particle->GetEta() < Cut_v1_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v1_Particle_etamax)
+    return false;
+
   double y = 0.5 * TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
   if (y < Cut_v1_Particle_ymin)
     return false;
@@ -256,8 +309,64 @@ Bool_t qaUtility::Cut_Particle_v1_pt(qaParticle *const &particle)
   return true;
 }
 
+Bool_t qaUtility::Cut_Particle_v1_PID_pt(qaParticle *const &particle, Int_t _pid)
+{
+  if (particle->GetPdg() != vpdg.at(_pid) && _pid != 0 && _pid != 4)
+    return false;
+
+  if (particle->GetEta() < Cut_v1_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v1_Particle_etamax)
+    return false;
+  
+  // PID related kinematics cut
+  Double_t y = 0.5 * TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
+  if (_pid == 1 && y < Cut_v1_Particle_ymin_pi)
+    return false;
+  if (_pid == 1 && y > Cut_v1_Particle_ymax_pi)
+    return false;
+  if (_pid == 2 && y < Cut_v1_Particle_ymin_ka)
+    return false;
+  if (_pid == 2 && y > Cut_v1_Particle_ymax_ka)
+    return false;
+  if (_pid == 3 && y < Cut_v1_Particle_ymin_pr)
+    return false;
+  if (_pid == 3 && y > Cut_v1_Particle_ymax_pr)
+    return false;
+  if (_pid == 5 && y < Cut_v1_Particle_ymin_pi)
+    return false;
+  if (_pid == 5 && y > Cut_v1_Particle_ymax_pi)
+    return false;
+  if (_pid == 6 && y < Cut_v1_Particle_ymin_ka)
+    return false;
+  if (_pid == 6 && y > Cut_v1_Particle_ymax_ka)
+    return false;
+  if (_pid == 7 && y < Cut_v1_Particle_ymin_pr)
+    return false;
+  if (_pid == 7 && y > Cut_v1_Particle_ymax_pr)
+    return false;
+
+  Double_t charge = GetCharge(particle->GetPdg());
+  if (charge == error_code)
+    return false;
+  if (charge == 0)
+    return false;
+
+  if (_pid == 0 && charge < 0)
+    return false;
+  if (_pid == 4 && charge > 0)
+    return false;
+
+  return true;
+}
+
 Bool_t qaUtility::Cut_Particle_v1_y(qaParticle *const &particle)
 {
+  if (particle->GetEta() < Cut_v1_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v1_Particle_etamax)
+    return false;
+
   if (particle->GetPt() < Cut_v1_Particle_ptmin)
     return false;
   if (particle->GetPt() > Cut_v1_Particle_ptmax)
@@ -272,8 +381,63 @@ Bool_t qaUtility::Cut_Particle_v1_y(qaParticle *const &particle)
   return true;
 }
 
+Bool_t qaUtility::Cut_Particle_v1_PID_y(qaParticle *const &particle, Int_t _pid)
+{
+  if (particle->GetPdg() != vpdg.at(_pid) && _pid != 0 && _pid != 4)
+    return false;
+
+  if (particle->GetEta() < Cut_v1_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v1_Particle_etamax)
+    return false;
+  
+  // PID related kinematics cut
+  if (_pid == 1 && particle->GetPt() < Cut_v1_Particle_ptmin_pi)
+    return false;
+  if (_pid == 1 && particle->GetPt() > Cut_v1_Particle_ptmax_pi)
+    return false;
+  if (_pid == 2 && particle->GetPt() < Cut_v1_Particle_ptmin_ka)
+    return false;
+  if (_pid == 2 && particle->GetPt() > Cut_v1_Particle_ptmax_ka)
+    return false;
+  if (_pid == 3 && particle->GetPt() < Cut_v1_Particle_ptmin_pr)
+    return false;
+  if (_pid == 3 && particle->GetPt() > Cut_v1_Particle_ptmax_pr)
+    return false;
+  if (_pid == 5 && particle->GetPt() < Cut_v1_Particle_ptmin_pi)
+    return false;
+  if (_pid == 5 && particle->GetPt() > Cut_v1_Particle_ptmax_pi)
+    return false;
+  if (_pid == 6 && particle->GetPt() < Cut_v1_Particle_ptmin_ka)
+    return false;
+  if (_pid == 6 && particle->GetPt() > Cut_v1_Particle_ptmax_ka)
+    return false;
+  if (_pid == 7 && particle->GetPt() < Cut_v1_Particle_ptmin_pr)
+    return false;
+  if (_pid == 7 && particle->GetPt() > Cut_v1_Particle_ptmax_pr)
+    return false;
+
+  Double_t charge = GetCharge(particle->GetPdg());
+  if (charge == error_code)
+    return false;
+  if (charge == 0)
+    return false;
+
+  if (_pid == 0 && charge < 0)
+    return false;
+  if (_pid == 4 && charge > 0)
+    return false;
+
+  return true;
+}
+
 Bool_t qaUtility::Cut_Particle_v2_pt(qaParticle *const &particle)
 {
+  if (particle->GetEta() < Cut_v2_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v2_Particle_etamax)
+    return false;
+  
   double y = 0.5 * TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
   if (y < Cut_v2_Particle_ymin)
     return false;
@@ -289,8 +453,64 @@ Bool_t qaUtility::Cut_Particle_v2_pt(qaParticle *const &particle)
   return true;
 }
 
+Bool_t qaUtility::Cut_Particle_v2_PID_pt(qaParticle *const &particle, Int_t _pid)
+{
+  if (particle->GetPdg() != vpdg.at(_pid) && _pid != 0 && _pid != 4)
+    return false;
+
+  if (particle->GetEta() < Cut_v2_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v2_Particle_etamax)
+    return false;
+  
+  // PID related kinematics cut
+  Double_t y = 0.5 * TMath::Log( (particle->GetEnergy() + particle->GetPz())/(particle->GetEnergy() - particle->GetPz()) );
+  if (_pid == 1 && y < Cut_v2_Particle_ymin_pi)
+    return false;
+  if (_pid == 1 && y > Cut_v2_Particle_ymax_pi)
+    return false;
+  if (_pid == 2 && y < Cut_v2_Particle_ymin_ka)
+    return false;
+  if (_pid == 2 && y > Cut_v2_Particle_ymax_ka)
+    return false;
+  if (_pid == 3 && y < Cut_v2_Particle_ymin_pr)
+    return false;
+  if (_pid == 3 && y > Cut_v2_Particle_ymax_pr)
+    return false;
+  if (_pid == 5 && y < Cut_v2_Particle_ymin_pi)
+    return false;
+  if (_pid == 5 && y > Cut_v2_Particle_ymax_pi)
+    return false;
+  if (_pid == 6 && y < Cut_v2_Particle_ymin_ka)
+    return false;
+  if (_pid == 6 && y > Cut_v2_Particle_ymax_ka)
+    return false;
+  if (_pid == 7 && y < Cut_v2_Particle_ymin_pr)
+    return false;
+  if (_pid == 7 && y > Cut_v2_Particle_ymax_pr)
+    return false;
+
+  Double_t charge = GetCharge(particle->GetPdg());
+  if (charge == error_code)
+    return false;
+  if (charge == 0)
+    return false;
+
+  if (_pid == 0 && charge < 0)
+    return false;
+  if (_pid == 4 && charge > 0)
+    return false;
+
+  return true;
+}
+
 Bool_t qaUtility::Cut_Particle_v2_y(qaParticle *const &particle)
 {
+  if (particle->GetEta() < Cut_v2_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v2_Particle_etamax)
+    return false;
+
   if (particle->GetPt() < Cut_v2_Particle_ptmin)
     return false;
   if (particle->GetPt() > Cut_v2_Particle_ptmax)
@@ -305,6 +525,56 @@ Bool_t qaUtility::Cut_Particle_v2_y(qaParticle *const &particle)
   return true;
 }
 
+Bool_t qaUtility::Cut_Particle_v2_PID_y(qaParticle *const &particle, Int_t _pid)
+{
+  if (particle->GetPdg() != vpdg.at(_pid) && _pid != 0 && _pid != 4)
+    return false;
+
+  if (particle->GetEta() < Cut_v2_Particle_etamin)
+    return false;
+  if (particle->GetEta() > Cut_v2_Particle_etamax)
+    return false;
+  
+  // PID related kinematics cut
+  if (_pid == 1 && particle->GetPt() < Cut_v2_Particle_ptmin_pi)
+    return false;
+  if (_pid == 1 && particle->GetPt() > Cut_v2_Particle_ptmax_pi)
+    return false;
+  if (_pid == 2 && particle->GetPt() < Cut_v2_Particle_ptmin_ka)
+    return false;
+  if (_pid == 2 && particle->GetPt() > Cut_v2_Particle_ptmax_ka)
+    return false;
+  if (_pid == 3 && particle->GetPt() < Cut_v2_Particle_ptmin_pr)
+    return false;
+  if (_pid == 3 && particle->GetPt() > Cut_v2_Particle_ptmax_pr)
+    return false;
+  if (_pid == 5 && particle->GetPt() < Cut_v2_Particle_ptmin_pi)
+    return false;
+  if (_pid == 5 && particle->GetPt() > Cut_v2_Particle_ptmax_pi)
+    return false;
+  if (_pid == 6 && particle->GetPt() < Cut_v2_Particle_ptmin_ka)
+    return false;
+  if (_pid == 6 && particle->GetPt() > Cut_v2_Particle_ptmax_ka)
+    return false;
+  if (_pid == 7 && particle->GetPt() < Cut_v2_Particle_ptmin_pr)
+    return false;
+  if (_pid == 7 && particle->GetPt() > Cut_v2_Particle_ptmax_pr)
+    return false;
+
+  Double_t charge = GetCharge(particle->GetPdg());
+  if (charge == error_code)
+    return false;
+  if (charge == 0)
+    return false;
+
+  if (_pid == 0 && charge < 0)
+    return false;
+  if (_pid == 4 && charge > 0)
+    return false;
+
+  return true;
+}
+
 Double_t qaUtility::GetCharge(Int_t pdg)
 {
   auto particle = (TParticlePDG *)TDatabasePDG::Instance()->GetParticle(pdg);

+ 29 - 1
utility/Utility.h

@@ -72,6 +72,18 @@ public:
   Double_t Cut_v1_Particle_etamax;
   Double_t Cut_v1_Particle_ymin;
   Double_t Cut_v1_Particle_ymax;
+  Double_t Cut_v1_Particle_ptmin_pi;
+  Double_t Cut_v1_Particle_ptmax_pi;
+  Double_t Cut_v1_Particle_ymin_pi;
+  Double_t Cut_v1_Particle_ymax_pi;
+  Double_t Cut_v1_Particle_ptmin_ka;
+  Double_t Cut_v1_Particle_ptmax_ka;
+  Double_t Cut_v1_Particle_ymin_ka;
+  Double_t Cut_v1_Particle_ymax_ka;
+  Double_t Cut_v1_Particle_ptmin_pr;
+  Double_t Cut_v1_Particle_ptmax_pr;
+  Double_t Cut_v1_Particle_ymin_pr;
+  Double_t Cut_v1_Particle_ymax_pr;
 
   Double_t Cut_v2_Event_bmin;
   Double_t Cut_v2_Event_bmax;
@@ -83,11 +95,23 @@ public:
   Double_t Cut_v2_Particle_etamax;
   Double_t Cut_v2_Particle_ymin;
   Double_t Cut_v2_Particle_ymax;
+  Double_t Cut_v2_Particle_ptmin_pi;
+  Double_t Cut_v2_Particle_ptmax_pi;
+  Double_t Cut_v2_Particle_ymin_pi;
+  Double_t Cut_v2_Particle_ymax_pi;
+  Double_t Cut_v2_Particle_ptmin_ka;
+  Double_t Cut_v2_Particle_ptmax_ka;
+  Double_t Cut_v2_Particle_ymin_ka;
+  Double_t Cut_v2_Particle_ymax_ka;
+  Double_t Cut_v2_Particle_ptmin_pr;
+  Double_t Cut_v2_Particle_ptmax_pr;
+  Double_t Cut_v2_Particle_ymin_pr;
+  Double_t Cut_v2_Particle_ymax_pr;
 
   Bool_t ReadConfig(const TString &configFileName);
   TChain *initChain(const TString &inputFileName, const char *chainName);
 
-  std::vector<Float_t> ReadBvector(std::string _input);
+  std::vector<Float_t> ParseVector(std::string _input);
   Bool_t initCentrality();
 
   Bool_t Cut_Event_minbias(qaEvent *const &event);
@@ -100,6 +124,10 @@ public:
   Bool_t Cut_Particle_v1_y(qaParticle *const &particle);
   Bool_t Cut_Particle_v2_pt(qaParticle *const &particle);
   Bool_t Cut_Particle_v2_y(qaParticle *const &particle);
+  Bool_t Cut_Particle_v1_PID_pt(qaParticle *const &particle, Int_t _pid);
+  Bool_t Cut_Particle_v1_PID_y(qaParticle *const &particle, Int_t _pid);
+  Bool_t Cut_Particle_v2_PID_pt(qaParticle *const &particle, Int_t _pid);
+  Bool_t Cut_Particle_v2_PID_y(qaParticle *const &particle, Int_t _pid);
 
   Double_t GetCharge(Int_t pdg);
   Int_t GetPdgId(Int_t pdg);