Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_p2pi_trees.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_p2pi_trees.cc
4 // Created: Wed Mar 29 16:34:58 EDT 2017
5 // Creator: elton (on Linux ifarm1401.jlab.org 3.10.0-327.el7.x86_64 x86_64)
6 //
7 
8 
13 
14 //------------------
15 // brun
16 //------------------
17 jerror_t DReaction_factory_p2pi_trees::brun(JEventLoop* locEventLoop, int32_t locRunNumber)
18 {
19  vector<double> locBeamPeriodVector;
20  locEventLoop->GetCalib("PHOTON_BEAM/RF/beam_period", locBeamPeriodVector);
21  dBeamBunchPeriod = locBeamPeriodVector[0];
22 
23  return NOERROR;
24 }
25 
26 //------------------
27 // evnt
28 //------------------
29 jerror_t DReaction_factory_p2pi_trees::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
30  {
31  // DOCUMENTATION:
32  // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software
33  // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction
34 
35  /************************************************** p2pi_trees Reaction Definition *************************************************/
36 
37  // Make as many DReaction objects as desired
38  DReactionStep* locReactionStep = NULL;
39  DReaction* locReaction = new DReaction("p2pi_pmiss"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
40 
41  bool unused = false;
42  locReaction = new DReaction("p2pi_trees"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
43 
44  // g, p -> pi+, pi- ,p
45  locReactionStep = new DReactionStep();
46  locReactionStep->Set_InitialParticleID(Gamma);
47  locReactionStep->Set_TargetParticleID(Proton);
48  locReactionStep->Add_FinalParticleID(Proton);
49  locReactionStep->Add_FinalParticleID(PiPlus);
50  locReactionStep->Add_FinalParticleID(PiMinus);
51  locReaction->Add_ReactionStep(locReactionStep);
52  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
53 
54 
55  /**************************************************** p2pi_trees Control Settings ****************************************************/
56 
57  // Event Store
58  locReaction->Set_EventStoreSkims("2q+,q-"); // boolean-AND of skims
59 
60  // Kinematic Fit
61  //locReaction->Set_KinFitType(d_NoFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
62  // locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
63  locReaction->Set_KinFitType(d_P4Fit); //simultaneously constrain apply four-momentum conservation, invariant masses, NO vertex
64 
65  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
66  locReaction->Set_NumPlusMinusRFBunches(0);
67 
68  // Highly Recommended: Cut on number of extra "good" tracks. "Good" tracks are ones that survive the "PreSelect" (or user custom) factory.
69  // Important: Keep cut large: Can have many ghost and accidental tracks that look "good"
70  locReaction->Set_MaxExtraGoodTracks(4);
71 
72  // Highly Recommended: Enable ROOT TTree output for this DReaction
73  // string is file name (must end in ".root"!!): doen't need to be unique, feel free to change
74  locReaction->Enable_TTreeOutput("tree_p2pi_trees.root", false); //true/false: do/don't save unused hypotheses
75 
76  /************************************************** p2pi_trees Pre-Combo Custom Cuts *************************************************/
77 
78  // Highly Recommended: Very loose DAnalysisAction cuts, applied just after creating the combination (before saving it)
79  // Example: Missing mass of proton
80  locReaction->Add_ComboPreSelectionAction(new DCutAction_MissingMassSquared(locReaction, false, -0.1, 0.1));
81 
82  /**************************************************** p2pi_trees Analysis Actions ****************************************************/
83 
84  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
85  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
86  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
87 
88  // PID
89  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
90  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, Proton, SYS_TOF));
91  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL));
92  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Proton, SYS_FCAL));
93  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiPlus, SYS_TOF));
94  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, PiPlus, SYS_BCAL));
95  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiPlus, SYS_FCAL));
96  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiMinus, SYS_TOF));
97  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, PiMinus, SYS_BCAL));
98  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiMinus, SYS_FCAL));
99  locReaction->Add_AnalysisAction(new DCutAction_dEdx(locReaction));
100  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false, "PostPIDCuts"));
101 
102  // Custom histograms for p2pi
103  locReaction->Add_AnalysisAction(new DCustomAction_p2pi_hists(locReaction, false, "TimingCut_Measured"));
104 
105  //MISSING MASS
106  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PreKinFit"));
107  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.1,0.1, "PreKinFit"));
108 
109  // Require KinFit converges
110  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.0)); //require kinematic fit converges
111 
112  if(unused) {
113  // Custom cuts (can be applied in TSelector)
114  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.006, 0.004));
115  locReaction->Add_AnalysisAction(new DCustomAction_p2pi_cuts(locReaction, false));
116 
117  // Diagnostics for unused tracks and showers with final selection (only useful when analyzing EVIO data)
118  // locReaction->Add_AnalysisAction(new DCustomAction_p2pi_unusedHists(locReaction, false, "KinCut_Measured"));
119  }
120 
121 
122  // Custom histograms (after kinematic cuts)
123  locReaction->Add_AnalysisAction(new DCustomAction_p2pi_hists(locReaction, false, "KinCut_Measured"));
124 
125  // RHO
126  deque<Particle_t> locRhoPIDs; locRhoPIDs.push_back(PiPlus); locRhoPIDs.push_back(PiMinus);
127  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locRhoPIDs, false, 900, 0.3, 1.2, "Rho"));
128 
129  if(unused)
130  {
131  // Custom cuts (can be applied in TSelector)
132  locReaction->Add_AnalysisAction(new DCustomAction_p2pi_cuts(locReaction, false));
133 
134  // Diagnostics for unused tracks and showers with final selection (only useful when analyzing EVIO data)
135  locReaction->Add_AnalysisAction(new DCustomAction_p2pi_unusedHists(locReaction, false, "Unused"));
136  }
137 
138  // Kinematics of final selection
139  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
140 
141  _data.push_back(locReaction); //Register the DReaction with the factory
142 
143  return NOERROR;
144 }
145 
146 //------------------
147 // fini
148 //------------------
150 {
151  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
152  delete dReactionStepPool[loc_i]; //cleanup memory
153  return NOERROR;
154 }
155 
void Add_ReactionStep(const DReactionStep *locReactionStep)
Definition: DReaction.h:48
void Set_MaxExtraGoodTracks(size_t locMaxExtraGoodTracks)
Definition: DReaction.h:59
void Enable_TTreeOutput(string locTTreeOutputFileName, bool locSaveUnusedFlag=false)
Definition: DReaction.h:163
void Add_ComboPreSelectionAction(DAnalysisAction *locAction)
Definition: DReaction.cc:79
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
Definition: DReaction.h:57
Definition: GlueX.h:19
void Set_KinFitType(DKinFitType locKinFitType)
Definition: DReaction.h:53
void Set_EventStoreSkims(string locEventStoreSkims)
Definition: DReaction.h:72
Definition: GlueX.h:20
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
Definition: GlueX.h:22
jerror_t fini(void)
Called after last event of last event source has been processed.
void Set_InitialParticleID(Particle_t locPID, bool locIsMissingFlag=false)
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
deque< DReactionStep * > dReactionStepPool
void Set_TargetParticleID(Particle_t locPID)
Definition: DReactionStep.h:76