Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_ReactionFilter.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_ReactionFilter.h
4 // Created: Mon Nov 21 17:54:40 EST 2016
5 // Creator: pmatt (on Darwin Pauls-MacBook-Pro-2.local 13.4.0 i386)
6 //
7 
8 #ifndef _DReaction_factory_ReactionFilter_
9 #define _DReaction_factory_ReactionFilter_
10 
11 #include <iostream>
12 #include <iomanip>
13 #include <sstream>
14 
15 #include "JANA/JFactory.h"
16 #include "ANALYSIS/DReaction.h"
18 #include "ANALYSIS/DCutActions.h"
21 
22 using namespace std;
23 using namespace jana;
24 
25 class DReaction_factory_ReactionFilter : public jana::JFactory<DReaction>
26 {
27  //return tuple: initial pid, target/2nd-beam pid, detected final pids, missing final pid (if any), missing particle index
28  using DReactionStepTuple = tuple<Particle_t, Particle_t, vector<Particle_t>, Particle_t, int>;
29 
30  public:
32  {
33  // This is so that the created DReaction objects persist throughout the life of the program instead of being cleared each event.
34  SetFactoryFlag(PERSISTANT);
35  }
36  const char* Tag(void){return "ReactionFilter";}
37 
38  private:
39  bool dDebugFlag = false;
40 
41  jerror_t evnt(JEventLoop* locEventLoop, uint64_t locEventNumber);
42 
43  //UTILITY FUNCTIONS
44  map<size_t, tuple<string, string, string, vector<string>>> Parse_Input(void);
45  bool Convert_StringToPID(string locString, Particle_t& locPID, bool& locIsMissingFlag);
46  bool Parse_StepPIDString(string locStepString, DReactionStepTuple& locStepTuple);
47  string Create_StepNameString(const DReactionStepTuple& locStepTuple, bool locFirstStepFlag);
48 
49  //CUSTOMIZATION FUNCTIONS
50  void Set_Flags(DReaction* locReaction, string locRemainingFlagString);
51  DReactionStep* Create_DefaultDecayStep(Particle_t locPID);
52 
53  //CREATION FUNCTIONS
54  void Create_Steps(DReaction* locReaction, DReactionStep* locCurrentStep, vector<DReactionStepTuple>& locDecayStepTuples);
55  vector<DReaction*> Create_Reactions(const map<size_t, tuple<string, string, string, vector<string>>>& locInputStrings);
56  DReactionStep* Create_ReactionStep(const DReactionStepTuple& locStepTuple);
57 
58  //ACTIONS
59  void Add_MassHistograms(DReaction* locReaction, bool locUseKinFitResultsFlag, string locBaseUniqueName = "");
60  void Create_InvariantMassHistogram(DReaction* locReaction, Particle_t locPID, bool locUseKinFitResultsFlag, string locBaseUniqueName);
61  void Create_MissingMassSquaredHistogram(DReaction* locReaction, Particle_t locPID, bool locUseKinFitResultsFlag, string locBaseUniqueName, int locMissingMassOffOfStepIndex, const deque<Particle_t>& locMissingMassOffOfPIDs);
62  void Add_PostKinfitTimingCuts(DReaction* locReaction);
63 
64  DSourceComboP4Handler* dSourceComboP4Handler = nullptr;
65  DSourceComboTimeHandler* dSourceComboTimeHandler = nullptr;
66  deque<DReactionStep*> dReactionStepPool; //to prevent memory leaks
67 };
68 
69 #endif // _DReaction_factory_ReactionFilter_
70 
tuple< Particle_t, Particle_t, vector< Particle_t >, Particle_t, int > DReactionStepTuple
Particle_t
Definition: particleType.h:12