Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_p2k_hists.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_p2k_hists.cc
4 // Created: Wed Mar 11 20:34:14 EDT 2015
5 // Creator: jrsteven (on Linux halldw1.jlab.org 2.6.32-504.8.1.el6.x86_64 x86_64)
6 //
7 
9 
10 //------------------
11 // brun
12 //------------------
13 jerror_t DReaction_factory_p2k_hists::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_p2k_hists::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
26 {
27  // Make as many DReaction objects as desired
28  DReactionStep* locReactionStep = NULL;
29  DReaction* locReaction = NULL;
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  /**************************************************** p2k_preco Reaction Steps ****************************************************/
36 
37  locReaction = new DReaction("p2k_preco"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
38 
39  // g, p -> k+, k- ,p
40  locReactionStep = new DReactionStep();
41  locReactionStep->Set_InitialParticleID(Gamma);
42  locReactionStep->Set_TargetParticleID(Proton);
43  locReactionStep->Add_FinalParticleID(KPlus);
44  locReactionStep->Add_FinalParticleID(KMinus);
45  locReactionStep->Add_FinalParticleID(Proton);
46  locReaction->Add_ReactionStep(locReactionStep);
47  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
48 
49  /**************************************************** p2k_preco Control Settings ****************************************************/
50 
51  // Event Store
52  locReaction->Set_EventStoreSkims("2q+,q-"); // boolean-AND of skims
53 
54  locReaction->Set_NumPlusMinusRFBunches(0);
55  locReaction->Set_MaxExtraGoodTracks(4);
56 
57  /**************************************************** p2k_preco Analysis Actions ****************************************************/
58 
59  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
60  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
61  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
62 
63  // PID
64  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
65  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 0.75, KPlus, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
66  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, KPlus, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
67  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, KPlus, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
68  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 0.75, KMinus, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
69  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, KMinus, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
70  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, KMinus, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
71  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, Proton, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
72  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
73  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Proton, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
74  locReaction->Add_AnalysisAction(new DCutAction_NoPIDHit(locReaction, KPlus));
75  locReaction->Add_AnalysisAction(new DCutAction_NoPIDHit(locReaction, KMinus));
76  locReaction->Add_AnalysisAction(new DCutAction_dEdx(locReaction));
77  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false, "PostPIDCuts"));
78 
79  // Custom histograms for p2k (no KinFit cut)
80  locReaction->Add_AnalysisAction(new DCustomAction_p2k_hists(locReaction, false, "NoKinFit_Measured"));
81 
82  //MISSING MASS
83  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
84  locReaction->Add_AnalysisAction(new DCutAction_MissingMassSquared(locReaction, false, -0.01, 0.005));
85 
86  // PHI
87  deque<Particle_t> locPhiPIDs; locPhiPIDs.push_back(KPlus); locPhiPIDs.push_back(KMinus);
88  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, false, 900, 0.9, 1.2, "Phi"));
89 
90  // Kinematics of final selection
91  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
92 
93  _data.push_back(locReaction); //Register the DReaction with the factory
94 
95 
96 
97  /**************************************************** p2k_preco_kinfit Reaction Steps ****************************************************/
98 
99  locReaction = new DReaction("p2k_preco_kinfit"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
100 
101  // g, p -> k+, k- ,p
102  locReaction->Add_ReactionStep(locReactionStep);
103 
104  /**************************************************** p2k_preco_kinfit Control Settings ****************************************************/
105 
106  // Event Store
107  locReaction->Set_EventStoreSkims("2q+,q-"); // boolean-AND of skims
108 
109  // KINFIT
110  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
111 
112  locReaction->Set_NumPlusMinusRFBunches(0);
113  locReaction->Set_MaxExtraGoodTracks(4);
114 
115  /**************************************************** p2k_preco_kinfit Analysis Actions ****************************************************/
116 
117  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
118  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
119  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
120 
121  // PID
122  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
123  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 0.75, KPlus, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
124  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, KPlus, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
125  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, KPlus, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
126  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 0.75, KMinus, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
127  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 1.5, KMinus, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
128  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, KMinus, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
129  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.0, Proton, SYS_TOF)); //cut at delta-t +/- 1.0 //false: measured data
130  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 2.5, Proton, SYS_BCAL)); //cut at delta-t +/- 1.0 //false: measured data
131  locReaction->Add_AnalysisAction(new DCutAction_PIDDeltaT(locReaction, false, 3.0, Proton, SYS_FCAL)); //cut at delta-t +/- 1.0 //false: measured data
132  locReaction->Add_AnalysisAction(new DCutAction_NoPIDHit(locReaction, KPlus));
133  locReaction->Add_AnalysisAction(new DCutAction_NoPIDHit(locReaction, KMinus));
134  locReaction->Add_AnalysisAction(new DCutAction_dEdx(locReaction));
135  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false, "PostPIDCuts"));
136 
137  //MASSES
138  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
139  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, false, 900, 0.9, 1.2, "Phi"));
140  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, true, 900, 0.9, 1.2, "Phi_KinFit"));
141 
142  // Kinematic Fit Results
143  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
144  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
145 
146  // MASSES, POST-KINFIT
147  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
148  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, false, 900, 0.9, 1.2, "Phi_PostKinFitCut"));
149  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, true, 900, 0.9, 1.2, "Phi_KinFit_PostKinFitCut"));
150 
151  // Kinematics of final selection
152  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
153 
154  _data.push_back(locReaction); //Register the DReaction with the factory
155 
156  return NOERROR;
157 }
158 
159 //------------------
160 // fini
161 //------------------
163 {
164  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
165  delete dReactionStepPool[loc_i]; //cleanup memory
166  return NOERROR;
167 }
168 
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)
void Add_ReactionStep(const DReactionStep *locReactionStep)
Definition: DReaction.h:48
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
void Set_MaxExtraGoodTracks(size_t locMaxExtraGoodTracks)
Definition: DReaction.h:59
deque< DReactionStep * > dReactionStepPool
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
Definition: DReaction.h:57
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
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
Definition: GlueX.h:22
void Set_InitialParticleID(Particle_t locPID, bool locIsMissingFlag=false)
jerror_t fini(void)
Called after last event of last event source has been processed.
void Add_AnalysisAction(DAnalysisAction *locAnalysisAction)
Definition: DReaction.h:50
void Set_TargetParticleID(Particle_t locPID)
Definition: DReactionStep.h:76