Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Utilities/exclusivepi0skim/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  const DKinematicData* locBeamPhoton = NULL;
21  auto locParticles = Get_UseKinFitResultsFlag() ? locParticleCombo->Get_FinalParticles(Get_Reaction(), false, false) : locParticleCombo->Get_FinalParticles_Measured(Get_Reaction());
22  if(!Get_UseKinFitResultsFlag()) { //measured
23  locBeamPhoton = locParticleComboStep->Get_InitialParticle_Measured();
24  }
25  else {
26  locBeamPhoton = locParticleComboStep->Get_InitialParticle();
27  }
28 
29  // calculate missing mass
30  DLorentzVector locMissingP4;
31  DLorentzVector locProtonP4Init(0,0,0,0.938);
32  locMissingP4 += locProtonP4Init;
33  locMissingP4 += locBeamPhoton->lorentzMomentum();
34  DLorentzVector locSumInitP4 = locMissingP4;
35 
36  DLorentzVector locProtonP4;
37  DLorentzVector locPiPlusP4;
38  DLorentzVector locPiMinusP4;
39  DLorentzVector locCandidateP4;
40 
41  // calculate missing mass
42  DLorentzVector loc2g_P4;
43  for(size_t loc_i = 0; loc_i < 5; ++loc_i) {
44  locMissingP4 -= locParticles[loc_i]->lorentzMomentum();
45 
46  if(locParticles[loc_i]->PID() == Gamma)
47  loc2g_P4 += locParticles[loc_i]->lorentzMomentum();
48  else if(locParticles[loc_i]->PID() == PiPlus)
49  locPiPlusP4 += locParticles[loc_i]->lorentzMomentum();
50  else if(locParticles[loc_i]->PID() == PiMinus)
51  locPiMinusP4 += locParticles[loc_i]->lorentzMomentum();
52  else
53  locProtonP4 += locParticles[loc_i]->lorentzMomentum();
54  }
55 
56  locCandidateP4 = loc2g_P4 + locPiPlusP4 + locPiMinusP4;
57 
58  double locDeltaPhi = (locProtonP4.Phi() - locCandidateP4.Phi())*180./TMath::Pi();
59  if(locDeltaPhi > 360.) locDeltaPhi -= 360.;
60  if(locDeltaPhi < 0.) locDeltaPhi += 360.;
61 
62  // require proton and pi0 are back-to-back
63  if(locDeltaPhi < 160. || locDeltaPhi > 200.)
64  return false;
65  // exclusive kinematics cuts
66  if(fabs(locMissingP4.M2()) > 0.1 || fabs(locMissingP4.E()) > 1.0)
67  return false;
68 
69  return true; //return false if you want to use this action to apply a cut (and it fails the cut!)
70 }
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
const DReaction * Get_Reaction(void) const
const DKinematicData * Get_InitialParticle_Measured(void) const
TLorentzVector DLorentzVector
bool Get_UseKinFitResultsFlag(void) const
vector< const DKinematicData * > Get_FinalParticles(const DReaction *locReaction, bool locIncludeMissingFlag=true, bool locIncludeDecayingFlag=true, Charge_t locCharge=d_AllCharges) const
vector< const DKinematicData * > Get_FinalParticles_Measured(const DReaction *locReaction, Charge_t locCharge=d_AllCharges) const
DLorentzVector lorentzMomentum(void) const
const DKinematicData * Get_InitialParticle(void) const
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const