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