Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
p2pi_hists/DCustomAction_p2pi_cuts.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DCustomAction_p2pi_hists.cc
4 // Created: Wed Jan 21 16:53:41 EST 2015
5 // Creator: jrsteven (on Linux ifarm1401 2.6.32-431.el6.x86_64 x86_64)
6 //
7 
9 
10 void DCustomAction_p2pi_cuts::Initialize(JEventLoop* locEventLoop)
11 {
12  // check if a particle is missing
13  auto locMissingPIDs = Get_Reaction()->Get_MissingPIDs();
14  dMissingPID = (locMissingPIDs.size() == 1) ? locMissingPIDs[0] : Unknown;
15 }
16 
17 bool DCustomAction_p2pi_cuts::Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo)
18 {
19  // should only have one reaction step
20  const DParticleComboStep* locParticleComboStep = locParticleCombo->Get_ParticleComboStep(0);
21 
22  // get beam photon energy and final state particles
23  auto locParticles = Get_UseKinFitResultsFlag() ? locParticleComboStep->Get_FinalParticles() : locParticleComboStep->Get_FinalParticles_Measured();
24 
25  // calculate 2pi P4
26  DLorentzVector locP4_2pi;
27  for(size_t loc_i = 0; loc_i < 3; ++loc_i) {
28  if(locParticles[loc_i] == NULL) continue; // missing proton
29  if(locParticles[loc_i]->PID() == PiPlus || locParticles[loc_i]->PID() == PiMinus)
30  locP4_2pi += locParticles[loc_i]->lorentzMomentum();
31  }
32 
33  // calculate missing P4
35 
36  if(dMissingPID != Proton) {
37 
38  if(locMissingP4.E() < -0.15 || locMissingP4.E() > 0.1)
39  return false;
40 
41  if(locP4_2pi.M() < 0.6 || locP4_2pi.M() > 0.9)
42  return false;
43  }
44 
45  return true; //return false if you want to use this action to apply a cut (and it fails the cut!)
46 }
vector< const DKinematicData * > Get_FinalParticles_Measured(void) const
const DReaction * Get_Reaction(void) const
TLorentzVector DLorentzVector
bool Get_UseKinFitResultsFlag(void) const
DLorentzVector Calc_MissingP4(const DReaction *locReaction, const DParticleCombo *locParticleCombo, bool locUseKinFitDataFlag) const
void Initialize(JEventLoop *locEventLoop)
vector< const DKinematicData * > Get_FinalParticles(void) const
vector< Particle_t > Get_MissingPIDs(int locStepIndex=-1, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
Definition: DReaction.cc:46
const DAnalysisUtilities * dAnalysisUtilities
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)