Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Analysis/p2gamma_hists/DCustomAction_p2gamma_cuts.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DCustomAction_p2gamma_cuts.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_p2gamma_cuts::Initialize(JEventLoop* locEventLoop)
11 {
12 
13 }
14 
15 bool DCustomAction_p2gamma_cuts::Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo)
16 {
17  const DParticleComboStep* locParticleComboStep = locParticleCombo->Get_ParticleComboStep(0);
18 
19  // get beam photon energy and final state particles
20  auto locBeamPhoton = Get_UseKinFitResultsFlag() ? locParticleComboStep->Get_InitialParticle() : locParticleComboStep->Get_InitialParticle_Measured();
21  auto locParticles = Get_UseKinFitResultsFlag() ? locParticleComboStep->Get_FinalParticles() : locParticleComboStep->Get_FinalParticles_Measured();
22 
23  // calculate missing mass
24  DLorentzVector locMissingP4;
25  DLorentzVector locProtonP4Init(0,0,0,0.938);
26  locMissingP4 += locProtonP4Init;
27  locMissingP4 += locBeamPhoton->lorentzMomentum();
28  DLorentzVector locSumInitP4 = locMissingP4;
29 
30  DLorentzVector locProtonP4;
31 
32  // calculate missing mass
33  DLorentzVector loc2g_P4;
34  for(size_t loc_i = 0; loc_i < 3; ++loc_i) {
35  locMissingP4 -= locParticles[loc_i]->lorentzMomentum();
36 
37  if(locParticles[loc_i]->PID() == Gamma)
38  loc2g_P4 += locParticles[loc_i]->lorentzMomentum();
39  else
40  locProtonP4 += locParticles[loc_i]->lorentzMomentum();
41  }
42 
43  double locDeltaPhi = (locProtonP4.Phi() - loc2g_P4.Phi())*180./TMath::Pi();
44  if(locDeltaPhi > 360.) locDeltaPhi -= 360.;
45  if(locDeltaPhi < 0.) locDeltaPhi += 360.;
46 
47  // require proton and pi0 are back-to-back
48  if(locDeltaPhi < 175. || locDeltaPhi > 185.)
49  return false;
50 
51  // for pi0 candidates require recoil proton
52  if(loc2g_P4.M() < 0.10 || loc2g_P4.M() > 0.16 || fabs(locMissingP4.M2()) > 0.05 || fabs(locMissingP4.E()) > 0.5)
53  return false;
54 
55  return true; //return false if you want to use this action to apply a cut (and it fails the cut!)
56 }
vector< const DKinematicData * > Get_FinalParticles_Measured(void) const
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
const DKinematicData * Get_InitialParticle_Measured(void) const
TLorentzVector DLorentzVector
bool Get_UseKinFitResultsFlag(void) const
vector< const DKinematicData * > Get_FinalParticles(void) const
const DKinematicData * Get_InitialParticle(void) const
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const