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