Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_B3pi_eff_missgamma.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_B3pi_eff_missgamma.cc
4 // Created: Fri Jun 30 00:38:22 EDT 2017
5 // Creator: jmhardin (on Linux ifarm1402.jlab.org 3.10.0-327.el7.x86_64 x86_64)
6 //
7 
8 
10 //#include "DCustomAction_dEdxCut.h"
11 
12 //------------------
13 // brun
14 //------------------
15 jerror_t DReaction_factory_B3pi_eff_missgamma::brun(JEventLoop* locEventLoop, int32_t locRunNumber)
16 {
17  vector<double> locBeamPeriodVector;
18  locEventLoop->GetCalib("PHOTON_BEAM/RF/beam_period", locBeamPeriodVector);
19  dBeamBunchPeriod = locBeamPeriodVector[0];
20 
21  return NOERROR;
22 }
23 
24 //------------------
25 // evnt
26 //------------------
27 jerror_t DReaction_factory_B3pi_eff_missgamma::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
28 {
29  // Make as many DReaction objects as desired
30  DReactionStep* locReactionStep = NULL;
31  DReaction* locReaction = NULL; //create with a unique name for each DReaction object. CANNOT (!) be "Thrown"
32 
33  // DOCUMENTATION:
34  // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software
35  // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction
36 
37  /************************************************** B3pi_eff_missgamma Reaction Definition *************************************************/
38 
39  locReaction = new DReaction("B3pi_eff_missgamma");
40  double pull_hist_confidence_level = 0.05;
41 
42  //DKinFitType locKinFitType = d_P4Fit;
43  //DKinFitType locKinFitType = d_VertexFit;
44  DKinFitType locKinFitType = d_P4AndVertexFit;
45  //Required: DReactionSteps to specify the channel and decay chain you want to study
46  //Particles are of type Particle_t, an enum defined in sim-recon/src/libraries/include/particleType.h
47 
48  std::deque<Particle_t> off_proton;
49  off_proton.push_back(Proton);
50 
51 /*
52  // g, p -> omega, p
53  locReactionStep = new DReactionStep();
54  locReactionStep->Set_InitialParticleID(Gamma);
55  locReactionStep->Set_TargetParticleID(Proton);
56  locReactionStep->Add_FinalParticleID(omega);
57  locReactionStep->Add_FinalParticleID(Proton);
58  locReaction->Add_ReactionStep(locReactionStep);
59  dReactionStepPool.push_back(locReactionStep);
60  //register so will be deleted later: prevent memory leak
61 
62  // omega -> pi+, pi-, pi0
63  locReactionStep = new DReactionStep();
64  locReactionStep->Set_InitialParticleID(omega);
65  locReactionStep->Set_KinFitConstrainInitMassFlag(false);
66  locReactionStep->Add_FinalParticleID(PiPlus);
67  locReactionStep->Add_FinalParticleID(PiMinus);
68  locReactionStep->Add_FinalParticleID(Pi0);
69  locReaction->Add_ReactionStep(locReactionStep);
70  dReactionStepPool.push_back(locReactionStep);
71  //register so will be deleted later: prevent memory leak
72  // pi0 -> g, g
73  locReactionStep = new DReactionStep();
74  locReactionStep->Set_InitialParticleID(Pi0);
75  locReactionStep->Set_KinFitConstrainInitMassFlag(true);
76  locReactionStep->Add_FinalParticleID(Gamma,true);
77  locReactionStep->Add_FinalParticleID(Gamma);
78  //locReactionStep->Set_KinFitConstrainInitMassFlag(false);
79  locReaction->Add_ReactionStep(locReactionStep);
80  dReactionStepPool.push_back(locReactionStep);
81 */
82  vector<Particle_t> step0_final;
83  step0_final.push_back(omega);
84  step0_final.push_back(Proton);
85  vector<Particle_t> step1_final;
86  step1_final.push_back(PiPlus);
87  step1_final.push_back(PiMinus);
88  step1_final.push_back(Pi0);
89  vector<Particle_t> step2_final;
90  step2_final.push_back(Gamma);
91 
92  locReactionStep = new DReactionStep(Gamma,Proton,step0_final);
93  locReaction->Add_ReactionStep(locReactionStep);
94  dReactionStepPool.push_back(locReactionStep);
95 
96  locReactionStep = new DReactionStep(omega,step1_final);
97  //locReactionStep = new DReactionStep(omega,step1_final);
98  locReaction->Add_ReactionStep(locReactionStep);
99  dReactionStepPool.push_back(locReactionStep);
100 
101  locReactionStep = new DReactionStep(Pi0,step2_final,Gamma);
102  locReaction->Add_ReactionStep(locReactionStep);
103  dReactionStepPool.push_back(locReactionStep);
104 
105 
106 
107  /**************************************************** pippimpi0_withmiss Control Settings ****************************************************/
108 
109  // Highly Recommended: Set EventStore skim query (use with "eventstore" source)
110  // This will skip creating particle combos for events that aren't in the skims you list
111  // Query should be comma-separated list of skims to boolean-AND together
112 
113  // Recommended: Type of kinematic fit to perform (default is d_NoFit)
114  //fit types are of type DKinFitType, an enum defined in sim-recon/src/libraries/ANALYSIS/DReaction.h
115  //Options: d_NoFit (default), d_P4Fit, d_VertexFit, d_P4AndVertexFit
116  //P4 fits automatically constrain decaying particle masses, unless they are manually disabled
117  //locReaction->Set_KinFitType(d_P4AndVertexFit);
118  locReaction->Set_KinFitType(locKinFitType);
119  locReaction->Set_EventStoreSkims("q+, q-"); //boolean-AND of skims
120 
121  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
122  //Dep locReaction->Set_MaxPhotonRFDeltaT(3.5*dBeamBunchPeriod); //should be minimum cut value
123  locReaction->Set_NumPlusMinusRFBunches(2); //should be minimum cut value
124 
125  // Highly Recommended: Cut on number of extra "good" tracks. "Good" tracks are ones that survive the "PreSelect" (or user custom) factory.
126  // Important: Keep cut large: Can have many ghost and accidental tracks that look "good"
127  locReaction->Set_MaxExtraGoodTracks(4);
128  // Highly Recommended: Enable ROOT TTree output for this DReaction
129  // string is file name (must end in ".root"!!): doen't need to be unique, feel free to change
130  locReaction->Enable_TTreeOutput("tree_pippimpi0_eff_missgamma.root", true); //true/false: do/don't save unused hypotheses
131 
132  /************************************************** pippimpi0_withmiss Pre-Combo Custom Cuts *************************************************/
133 
134  // Highly Recommended: Very loose invariant mass cuts, applied during DParticleComboBlueprint construction
135  // Example: pi0 -> g, g cut
136 
137 
138  /**************************************************** B3pi Analysis Actions ****************************************************/
139 
140 // locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.06, 0.06));
141 
142  //Dep locReaction->Add_ComboPreSelectionAction(new DCutAction_MissingMassSquared(locReaction, false, -0.06, 0.06));
143  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.06, 0.06));
144 
145  //Cris's PID
146  // HISTOGRAM PID
147  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction));
148 
149  //locReaction->Add_AnalysisAction(new DCutAction_BeamEnergy(locReaction,false,3.0,12.0));
150  locReaction->Add_AnalysisAction(new DCutAction_BeamEnergy(locReaction,false,8.4,9.05));
151 
152  // PID
153  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction));
154  //locReaction->Add_AnalysisAction(new DCustomAction_dEdxCut(locReaction, false)); //false: focus on keeping signal
155 
156  locReaction->Add_AnalysisAction(new DCutAction_dEdx(locReaction)); //false: measured data
157  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_TOF)); //false: measured data
158  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL)); //false: measured data
159  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_FCAL)); //false: measured data
160  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiPlus, SYS_TOF)); //false: measured data
161  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, PiPlus, SYS_BCAL)); //false: measured data
162  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, PiPlus, SYS_FCAL)); //false: measured data
163  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Gamma, SYS_BCAL)); //false: measured data
164  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Gamma, SYS_FCAL)); //false: measured data
165  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, "PostPIDCuts"));
166 
167  //KINEMATIC FIT
168  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, pull_hist_confidence_level, true));
169  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, -1.0)); //require kinematic fit to converge
170 
171  locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction));
172 
173  // Pi0
174  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, false, 600, 0.0, 0.3, "Pi0")); //false: measured data
175 
176  // Missing Mass Squared (Hist and Cut)
177  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 600, -0.06, 0.06));
178  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -1, 1, "FullRange"));
179 
180 
181 
182  // Omega Mass (Hist and Cut)
183 // locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, false, 1000, 0., 2.0, "Omega")); //false: measured data
184 // locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, omega, true, 1000, 0., 2.0, "Omega_Kinfit")); //true: kinfit
185 // locReaction->Add_AnalysisAction(new DHistogramAction_MissingMass(locReaction, omega, off_proton, false, 1000, 0., 2.0, "OffProt")); //true: kinfit
186 // locReaction->Add_AnalysisAction(new DHistogramAction_MissingMass(locReaction, omega, off_proton, true, 1000, 0., 2.0, "OffProt_Kinfit")); //true: kinfit
187  //locReaction->Add_AnalysisAction(new DCutAction_InvariantMass(locReaction, omega, true, 0.69, 0.88)); //~ +/- 3sigma-ish //true: kinfit
188  // Kinematics of final selection
189  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false, "Final"));
190  //false: fill histograms with measured particle data
191 
192  _data.push_back(locReaction); //Register the DReaction with the factory
193 
194 
195  return NOERROR;
196 }
197 
198 //------------------
199 // fini
200 //------------------
202 {
203  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
204  delete dReactionStepPool[loc_i]; //cleanup memory
205  return NOERROR;
206 }
207 
jerror_t fini(void)
Called after last event of last event source has been processed.
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
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
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
Definition: GlueX.h:22
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)