Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_Z2pi_trees.cc
Go to the documentation of this file.
1 // $Id$
2 // DReaction_factory_Z2pi_trees, modeled after DReaction_factory_p2pi_trees
3 //
4 // File: DReaction_factory_p2pi_trees.cc
5 // Created: Wed Mar 29 16:34:58 EDT 2017
6 // Creator: elton (on Linux ifarm1401.jlab.org 3.10.0-327.el7.x86_64 x86_64)
7 // This DReation is geared toward gamma Z -> pi+ pi- Z, i.e. we do not expect to see the recoil nucleus.
8 //
9 
10 
11 // #include "DCustomAction_dEdxCut_Z2pi.h"
12 // #include "DCustomAction_Z2pi_trees.h"
13 // #include "DCustomAction_Z2pi_cuts.h"
14 // #include "DCustomAction_Z2pi_unusedHists.h"
16 
17 //------------------
18 // brun
19 //------------------
20 jerror_t DReaction_factory_Z2pi_trees::brun(JEventLoop* locEventLoop, int32_t locRunNumber)
21 {
22  vector<double> locBeamPeriodVector;
23  locEventLoop->GetCalib("PHOTON_BEAM/RF/beam_period", locBeamPeriodVector);
24  dBeamBunchPeriod = locBeamPeriodVector[0];
25 
26  return NOERROR;
27 }
28 
29 //------------------
30 // evnt
31 //------------------
32 jerror_t DReaction_factory_Z2pi_trees::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
33  {
34  // DOCUMENTATION:
35  // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software
36  // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction
37 
38  /************************************************** Z2pi_trees Reaction Definition *************************************************/
39 
40  // Make as many DReaction objects as desired
41  DReactionStep* locReactionStep = NULL;
42  DReaction* locReaction = NULL; //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
43 
44  bool unused = false;
45  locReaction = new DReaction("Z2pi_trees"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
46 
47  //Required: DReactionSteps to specify the channel and decay chain you want to study
48  //Particles are of type Particle_t, an enum defined in sim-recon/src/libraries/include/particleType.h
49  // g, Z -> pi+, pi- ,Z - assume lead for now
50  locReactionStep = new DReactionStep();
51  locReactionStep->Set_InitialParticleID(Gamma);
52  locReactionStep->Set_TargetParticleID(Pb208);
53  locReactionStep->Add_FinalParticleID(Pb208,true); // recoil missing
54  locReactionStep->Add_FinalParticleID(PiPlus);
55  locReactionStep->Add_FinalParticleID(PiMinus);
56  locReaction->Add_ReactionStep(locReactionStep);
57  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
58 
59 
60  /**************************************************** Z2pi_trees Control Settings ****************************************************/
61 
62  // Event Store
63  // locReaction->Set_EventStoreSkims("q+,q-"); // boolean-AND of skims
64 
65  // Kinematic Fit
66  //locReaction->Set_KinFitType(d_NoFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
67  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
68  // locReaction->Set_KinFitType(d_P4Fit); //simultaneously constrain apply four-momentum conservation, invariant masses, NO vertex
69 
70  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
71  // Outdated version for RF selection locReaction->Set_MaxPhotonRFDeltaT(1.5*dBeamBunchPeriod); //should be minimum cut value
72  locReaction->Set_NumPlusMinusRFBunches(0);
73 
74  // Highly Recommended: Cut on number of extra "good" tracks. "Good" tracks are ones that survive the "PreSelect" (or user custom) factory.
75  // Important: Keep cut large: Can have many ghost and accidental tracks that look "good"
76  locReaction->Set_MaxExtraGoodTracks(4);
77 
78  // Highly Recommended: Enable ROOT TTree output for this DReaction
79  // string is file name (must end in ".root"!!): doen't need to be unique, feel free to change
80  locReaction->Enable_TTreeOutput("tree_Z2pi_trees.root", false); //true/false: do/don't save unused hypotheses
81 
82  /************************************************** Z2pi_trees Pre-Combo Custom Cuts *************************************************/
83 
84  // Highly Recommended: Very loose DAnalysisAction cuts, applied just after creating the combination (before saving it)
85  // Example: Missing mass of proton
86  locReaction->Add_ComboPreSelectionAction(new DCutAction_MissingMassSquared(locReaction, false, 20000, 60000));
87 
88  /**************************************************** Z2pi_trees Analysis Actions ****************************************************/
89 
90  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
91  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
92  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
93 
94  // PID
95  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
96  /*locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, Proton, SYS_TOF));
97  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL));
98  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Proton, SYS_FCAL));*/
99  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiPlus, SYS_TOF));
100  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, PiPlus, SYS_BCAL));
101  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiPlus, SYS_FCAL));
102  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiMinus, SYS_TOF));
103  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, PiMinus, SYS_BCAL));
104  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiMinus, SYS_FCAL));
105  // locReaction->Add_AnalysisAction(new DCustomAction_dEdxCut_Z2pi(locReaction, false)); //false: focus on keeping signal
106  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false, "PostPIDCuts"));
107 
108  // Custom histograms for Z2pi // omit for now since reaction is on heavy target
109  // locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_hists(locReaction, false, "TimingCut_Measured"));
110 
111  //MISSING MASS
112  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, 30000, 50000, "PreKinFit"));
113  // locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.01, 0.005, "PreKinFit"));
114  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, 30000,50000, "PreKinFit"));
115 
116  // Require KinFit converges
117  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.0)); //require kinematic fit converges
118 
119  if(unused) {
120  // Custom cuts (can be applied in TSelector)
121  // locReaction->Add_AnalysisAction(new DCutAction_ProtonPiPlusdEdx(locReaction, 2.2, true)); //select p/pi+ above/below 2.2, //true/false: cut all/no proton candidates above p = 1 GeV/c
122  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, 30000,50000));
123  // locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_cuts(locReaction, false));
124 
125  // Diagnostics for unused tracks and showers with final selection (only useful when analyzing EVIO data)
126  //comment locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_unusedHists(locReaction, false, "KinCut_Measured"));
127  }
128 
129 
130  // Custom histograms (after kinematic cuts)
131  // locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_trees(locReaction, false, "KinCut_Measured"));
132 
133  // 2PI
134  deque<Particle_t> loc2piPIDs; loc2piPIDs.push_back(PiPlus); loc2piPIDs.push_back(PiMinus);
135  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, loc2piPIDs, false, 400, 0.2, 0.6, "2pi Mass"));
136 
137  if(unused)
138  {
139  // Custom cuts (can be applied in TSelector)
140  // locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_cuts(locReaction, false));
141 
142  // Diagnostics for unused tracks and showers with final selection (only useful when analyzing EVIO data)
143  //comment locReaction->Add_AnalysisAction(new DCustomAction_Z2pi_unusedHists(locReaction, false, "Unused"));
144  }
145 
146  // Kinematics of final selection
147  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
148 
149  _data.push_back(locReaction); //Register the DReaction with the factory
150 
151  return NOERROR;
152 }
153 
154 //------------------
155 // fini
156 //------------------
158 {
159  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
160  delete dReactionStepPool[loc_i]; //cleanup memory
161  return NOERROR;
162 }
163 
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 Add_ComboPreSelectionAction(DAnalysisAction *locAction)
Definition: DReaction.cc:79
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
Definition: DReaction.h:57
deque< DReactionStep * > dReactionStepPool
Definition: GlueX.h:19
void Set_KinFitType(DKinFitType locKinFitType)
Definition: DReaction.h:53
Definition: GlueX.h:20
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
Definition: GlueX.h:22
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
jerror_t fini(void)
Called after last event of last event source has been processed.
void Set_InitialParticleID(Particle_t locPID, bool locIsMissingFlag=false)
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
void Set_TargetParticleID(Particle_t locPID)
Definition: DReactionStep.h:76