Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_p3pi_hists.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_p3pi_hists.cc
4 // Created: Wed Mar 11 20:34:22 EDT 2015
5 // Creator: jrsteven (on Linux halldw1.jlab.org 2.6.32-504.8.1.el6.x86_64 x86_64)
6 //
7 
12 
13 //------------------
14 // brun
15 //------------------
16 jerror_t DReaction_factory_p3pi_hists::brun(JEventLoop* locEventLoop, int32_t locRunNumber)
17 {
18  vector<double> locBeamPeriodVector;
19  locEventLoop->GetCalib("PHOTON_BEAM/RF/beam_period", locBeamPeriodVector);
20  dBeamBunchPeriod = locBeamPeriodVector[0];
21 
22  return NOERROR;
23 }
24 
25 //------------------
26 // init
27 //------------------
28 jerror_t DReaction_factory_p3pi_hists::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
29 {
30  // Make as many DReaction objects as desired
31  DReactionStep* locReactionStep = NULL;
32  DReaction* locReaction;
33 
34  double minPi0FCAL_BCAL = 0.11;
35  double maxPi0FCAL_BCAL = 0.16;
36 
37  // DOCUMENTATION:
38  // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software
39  // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction
40 
41  /**************************************************** p3pi_preco_2FCAL Reaction Steps ****************************************************/
42 
43  locReaction = new DReaction("p3pi_preco_2FCAL"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
44 
45  // g, p -> omega, p
46  locReactionStep = new DReactionStep();
47  locReactionStep->Set_InitialParticleID(Gamma);
48  locReactionStep->Set_TargetParticleID(Proton);
49  locReactionStep->Add_FinalParticleID(omega);
50  locReactionStep->Add_FinalParticleID(Proton);
51  locReaction->Add_ReactionStep(locReactionStep);
52  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
53 
54  // omega -> pi+, pi-, pi0
55  locReactionStep = new DReactionStep();
56  locReactionStep->Set_InitialParticleID(omega);
57  locReactionStep->Add_FinalParticleID(PiPlus);
58  locReactionStep->Add_FinalParticleID(PiMinus);
59  locReactionStep->Add_FinalParticleID(Pi0);
60  locReaction->Add_ReactionStep(locReactionStep);
61  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
62 
63  // pi0 -> g, g
64  locReactionStep = new DReactionStep();
65  locReactionStep->Set_InitialParticleID(Pi0);
66  locReactionStep->Add_FinalParticleID(Gamma);
67  locReactionStep->Add_FinalParticleID(Gamma);
68  locReaction->Add_ReactionStep(locReactionStep);
69  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
70 
71  /**************************************************** p3pi_preco_2FCAL Control Settings ****************************************************/
72 
73  // Event Store
74  locReaction->Set_EventStoreSkims("2q+,q-,pi0"); // boolean-AND of skims
75 
76  // KINFIT
77  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
78 
79  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
80  locReaction->Set_NumPlusMinusRFBunches(0);
81 
82  /**************************************************** p3pi_preco_2FCAL Analysis Actions ****************************************************/
83 
84  // Require 2 photons in FCAL
85  locReaction->Add_AnalysisAction(new DCustomAction_p3pi_Pi0Cuts(locReaction, false, 2));
86 
87  // PID
88  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
89 
90  // MASSES
91  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0"));
92  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
93  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega"));
94  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit"));
95 
96  // Kinematic Fit Results
97  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
98  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
99 
100  // MASSES, POST-KINFIT
101  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0_PostKinFitCut"));
102  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
103  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega_PostKinFitCut"));
104  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit_PostKinFitCut"));
105 
106  // Kinematics of final selection
107  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final")); //false: fill histograms with measured particle data
108 
109  _data.push_back(locReaction); //Register the DReaction with the factory
110 
111 
112 
113  /**************************************************** p3pi_preco_FCAL-BCAL Reaction Steps ****************************************************/
114 
115  locReaction = new DReaction("p3pi_preco_FCAL-BCAL"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
116  locReaction->Add_ReactionStep(dReactionStepPool[0]);
117  locReaction->Add_ReactionStep(dReactionStepPool[1]);
118  locReaction->Add_ReactionStep(dReactionStepPool[2]);
119 
120  /**************************************************** p3pi_preco_FCAL-BCAL Control Settings ****************************************************/
121 
122  // Event Store
123  locReaction->Set_EventStoreSkims("2q+,q-,pi0"); // boolean-AND of skims
124 
125  // KINFIT
126  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
127 
128  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
129  locReaction->Set_NumPlusMinusRFBunches(0);
130 
131  /**************************************************** p3pi_preco FCAL-BCAL Analysis Actions ****************************************************/
132 
133  // Require 1 photon in FCAL and 1 photon in BCAL
134  locReaction->Add_AnalysisAction(new DCustomAction_p3pi_Pi0Cuts(locReaction, false, 1));
135 
136  // PID
137  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
138 
139  // MASSES
140  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0"));
141  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
142  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega"));
143  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit"));
144 
145  // Kinematic Fit Results
146  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
147  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
148 
149  // MASSES, POST-KINFIT
150  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0_PostKinFitCut"));
151  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
152  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega_PostKinFitCut"));
153  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit_PostKinFitCut"));
154 
155  // Kinematics of final selection
156  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final")); //false: fill histograms with measured particle data
157 
158  _data.push_back(locReaction); //Register the DReaction with the factory
159 
160 
161 
162  /**************************************************** p3pi_preco_2BCAL Reaction Steps ****************************************************/
163 
164  locReaction = new DReaction("p3pi_preco_2BCAL"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
165  locReaction->Add_ReactionStep(dReactionStepPool[0]);
166  locReaction->Add_ReactionStep(dReactionStepPool[1]);
167  locReaction->Add_ReactionStep(dReactionStepPool[2]);
168 
169  /**************************************************** p3pi_preco_2BCAL Control Settings ****************************************************/
170 
171  // Event Store
172  locReaction->Set_EventStoreSkims("2q+,q-,pi0"); // boolean-AND of skims
173 
174  // KINFIT
175  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
176 
177  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
178  locReaction->Set_NumPlusMinusRFBunches(0);
179 
180  /**************************************************** p3pi_preco_2BCAL Analysis Actions ****************************************************/
181 
182  // Require 1 photon in FCAL and 1 photon in BCAL
183  locReaction->Add_AnalysisAction(new DCustomAction_p3pi_Pi0Cuts(locReaction, false, 0));
184 
185  // PID
186  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
187 
188  // MASSES
189  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0"));
190  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
191  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega"));
192  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit"));
193 
194  // Kinematic Fit Results
195  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
196  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
197 
198  // MASSES, POST-KINFIT
199  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0_PostKinFitCut"));
200  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
201  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega_PostKinFitCut"));
202  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit_PostKinFitCut"));
203 
204  // Kinematics of final selection
205  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final")); //false: fill histograms with measured particle data
206 
207  _data.push_back(locReaction); //Register the DReaction with the factory
208 
209 
210 
211  /**************************************************** p3pi_preco_any Reaction Steps ****************************************************/
212 
213  locReaction = new DReaction("p3pi_preco_any"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
214  locReaction->Add_ReactionStep(dReactionStepPool[0]);
215  locReaction->Add_ReactionStep(dReactionStepPool[1]);
216  locReaction->Add_ReactionStep(dReactionStepPool[2]);
217 
218  /**************************************************** p3pi_preco_any Control Settings ****************************************************/
219 
220  // Event Store
221  locReaction->Set_EventStoreSkims("2q+,q-,pi0"); // boolean-AND of skims
222 
223  // KINFIT
224  //locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
225 
226  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
227  locReaction->Set_NumPlusMinusRFBunches(0);
228 
229  /**************************************************** p3pi_preco_any Analysis Actions ****************************************************/
230 
231  // PID
232  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
233 
234  // Pi0
235  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0"));
236  locReaction->Add_AnalysisAction(new DCutAction_InvariantMass(locReaction, Pi0, false, minPi0FCAL_BCAL, maxPi0FCAL_BCAL));
237 
238  // Custom histograms for p3pi
239  locReaction->Add_AnalysisAction(new DCustomAction_p3pi_hists(locReaction, false));
240 
241  // MISSING MASS
242  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
243  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.01, 0.005));
244 
245  // OMEGA
246  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega"));
247 
248  // Kinematics of final selection
249  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final")); //false: fill histograms with measured particle data
250 
251  _data.push_back(locReaction); //Register the DReaction with the factory
252 
253 
254 
255  /**************************************************** p3pi_preco_any_kinfit Reaction Steps ****************************************************/
256 
257  locReaction = new DReaction("p3pi_preco_any_kinfit"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
258  locReaction->Add_ReactionStep(dReactionStepPool[0]);
259  locReaction->Add_ReactionStep(dReactionStepPool[1]);
260  locReaction->Add_ReactionStep(dReactionStepPool[2]);
261 
262  /**************************************************** p3pi_preco_any_kinfit Control Settings ****************************************************/
263 
264  // Event Store
265  locReaction->Set_EventStoreSkims("2q+,q-,pi0"); // boolean-AND of skims
266 
267  // KINFIT
268  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
269 
270  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
271  locReaction->Set_NumPlusMinusRFBunches(0);
272 
273  /**************************************************** p3pi_preco_any_kinfit Analysis Actions ****************************************************/
274 
275  // PID
276  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
277 
278  // MASSES
279  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0"));
280  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
281  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega"));
282  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit"));
283 
284  // Kinematic Fit Results
285  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
286  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
287 
288  // MASSES, POST-KINFIT
289  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 850, 0.05, 0.22, "Pi0_PostKinFitCut"));
290  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
291  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 600, 0.5, 1.1, "Omega_PostKinFitCut"));
292  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 600, 0.5, 1.1, "Omega_KinFit_PostKinFitCut"));
293 
294  // Kinematics of final selection
295  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final")); //false: fill histograms with measured particle data
296 
297  _data.push_back(locReaction); //Register the DReaction with the factory
298 
299  return NOERROR;
300 }
301 
302 //------------------
303 // fini
304 //------------------
306 {
307  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
308  delete dReactionStepPool[loc_i]; //cleanup memory
309  return NOERROR;
310 }
void Add_ReactionStep(const DReactionStep *locReactionStep)
Definition: DReaction.h:48
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
Definition: DReaction.h:57
void Set_KinFitType(DKinFitType locKinFitType)
Definition: DReaction.h:53
void Set_EventStoreSkims(string locEventStoreSkims)
Definition: DReaction.h:72
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
void Set_InitialParticleID(Particle_t locPID, bool locIsMissingFlag=false)
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
void Set_TargetParticleID(Particle_t locPID)
Definition: DReactionStep.h:76
deque< DReactionStep * > dReactionStepPool
jerror_t fini(void)
Called after last event of last event source has been processed.