Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_p4pi_hists.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_p4pi_hists.cc
4 // Created: Mon Aug 29 16:20:57 EDT 2016
5 // Creator: aaustreg (on Linux halld01.jlab.org 2.6.32-642.3.1.el6.x86_64 x86_64)
6 //
7 
8 
10 
11 //------------------
12 // brun
13 //------------------
14 jerror_t DReaction_factory_p4pi_hists::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_p4pi_hists::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  /************************************************** p4pi_hists Reaction Definition *************************************************/
37 
38  locReaction = new DReaction("p4pi_hists");
39 
40 
41  //Required: DReactionSteps to specify the channel and decay chain you want to study
42  //Particles are of type Particle_t, an enum defined in sim-recon/src/libraries/include/particleType.h
43 
44  // g, p -> pi+, pi-, pi+, pi-, p
45  locReactionStep = new DReactionStep();
46  locReactionStep->Set_InitialParticleID(Gamma);
47  locReactionStep->Set_TargetParticleID(Proton);
48  locReactionStep->Add_FinalParticleID(PiPlus);
49  locReactionStep->Add_FinalParticleID(PiMinus);
50  locReactionStep->Add_FinalParticleID(PiPlus);
51  locReactionStep->Add_FinalParticleID(PiMinus);
52  locReactionStep->Add_FinalParticleID(Proton);
53  locReaction->Add_ReactionStep(locReactionStep);
54  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
55 
56 
57  /**************************************************** p4pi_hists Control Settings ****************************************************/
58 
59  // Highly Recommended: Set EventStore skim query (use with "eventstore" source)
60  // This will skip creating particle combos for events that aren't in the skims you list
61  // Query should be comma-separated list of skims to boolean-AND together
62  locReaction->Set_EventStoreSkims("3q+,2q-"); //boolean-AND of skims
63 
64  // Recommended: Type of kinematic fit to perform (default is d_NoFit)
65  //fit types are of type DKinFitType, an enum defined in sim-recon/src/libraries/ANALYSIS/DReaction.h
66  //Options: d_NoFit (default), d_P4Fit, d_VertexFit, d_P4AndVertexFit
67  //P4 fits automatically constrain decaying particle masses, unless they are manually disabled
68  locReaction->Set_KinFitType(d_P4AndVertexFit);
69 
70  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
71  locReaction->Set_NumPlusMinusRFBunches(0);
72 
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_p4pi_hists.root", false); //true/false: do/don't save unused hypotheses
81 
82  /**************************************************** p4pi_hists Analysis Actions ****************************************************/
83 
84 
85  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
86  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
87  //Pre-defined actions can be found in ANALYSIS/DHistogramActions_*.h and ANALYSIS/DCutActions.h
88  //If a histogram action is repeated, it should be created with a unique name (string) to distinguish them
89 
90  // HISTOGRAM PID
91  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
92 
93  // CUT PID
94  // SYS_TOF, SYS_BCAL, SYS_FCAL, ...: DetectorSystem_t: Defined in libraries/include/GlueX.h
95  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiPlus, SYS_TOF)); //false: measured data
96  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, PiPlus, SYS_BCAL)); //false: measured data
97  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiPlus, SYS_FCAL)); //false: measured data
98 
99  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, PiMinus, SYS_TOF)); //false: measured data
100  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, PiMinus, SYS_BCAL)); //false: measured data
101  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, PiMinus, SYS_FCAL)); //false: measured data
102 
103  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_TOF)); //false: measured data
104  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL)); //false: measured data
105  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Proton, SYS_FCAL)); //false: measured data
106 
107  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false, "PostPIDCuts"));
108 
109  // HISTOGRAM MASSES //false/true: measured/kinfit data
110  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 800, -0.04, 0.04));
111 
112  // Kinematics
113  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false));
114  locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction));
115 
116  // KINEMATIC FIT
117  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
118  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
119 
120  // Cut for the Invariant Mass Plots
121  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.005, 0.005));
122 
123  // PARTICLE COMBINATIONS
124  std::deque<Particle_t> Four, Two, Zp, Zm;
125  Four.push_back(PiPlus); Four.push_back(PiMinus); Four.push_back(PiPlus); Four.push_back(PiMinus);
126  Two.push_back(PiPlus); Two.push_back(PiMinus);
127  Zp.push_back(PiPlus); Zp.push_back(Proton);
128  Zm.push_back(PiMinus); Zm.push_back(Proton);
129  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, Four, false, 500, 0.5, 2.5, "FourPi"));
130  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, Two, false, 500, 0.0, 2.0, "TwoPi"));
131  locReaction->Add_AnalysisAction(new DHistogramAction_2DInvariantMass(locReaction, 0, Two, Two, false, 400, 0.2, 2.2, 400, 0.2, 2.2, "TwoPi_vs_TwoPi"));
132  locReaction->Add_AnalysisAction(new DHistogramAction_Dalitz(locReaction, 0, Two, Two, false, 600, 0, 3, 600, 0, 3, "Dalitz"));
133  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, Zp, false, 500, 1.0, 3.0, "ProtonPip"));
134  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, Zm, false, 500, 1.0, 3.0, "ProtonPim"));
135 
136  _data.push_back(locReaction); //Register the DReaction with the factory
137 
138  return NOERROR;
139 }
140 
141 //------------------
142 // fini
143 //------------------
145 {
146  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
147  delete dReactionStepPool[loc_i]; //cleanup memory
148  return NOERROR;
149 }
150 
void Add_ReactionStep(const DReactionStep *locReactionStep)
Definition: DReaction.h:48
void Set_MaxExtraGoodTracks(size_t locMaxExtraGoodTracks)
Definition: DReaction.h:59
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
deque< DReactionStep * > dReactionStepPool
Definition: GlueX.h:19
void Set_KinFitType(DKinFitType locKinFitType)
Definition: DReaction.h:53
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
void Set_EventStoreSkims(string locEventStoreSkims)
Definition: DReaction.h:72
Definition: GlueX.h:20
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
Definition: GlueX.h:22
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
void Set_InitialParticleID(Particle_t locPID, bool locIsMissingFlag=false)
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
void Set_TargetParticleID(Particle_t locPID)
Definition: DReactionStep.h:76