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