Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DReaction_factory_dirc_reactions.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DReaction_factory_dirc_reactions.cc
4 //
5 
7 
8 //------------------
9 // brun
10 //------------------
11 jerror_t DReaction_factory_dirc_reactions::brun(JEventLoop* locEventLoop, int32_t locRunNumber)
12 {
13  return NOERROR;
14 }
15 
16 //------------------
17 // init
18 //------------------
19 jerror_t DReaction_factory_dirc_reactions::evnt(JEventLoop* locEventLoop, uint64_t locEventNumber)
20 {
21  // Make as many DReaction objects as desired
22  DReactionStep* locReactionStep = NULL;
23 
24  // DOCUMENTATION:
25  // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software
26  // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction
27 
28  /**************************************************** p2pi_dirc Reaction Steps ****************************************************/
29 
30  DReaction* locReaction = new DReaction("p2pi_dirc"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
31 
32  // g, p -> pi+, pi- ,p
33  locReactionStep = new DReactionStep();
34  locReactionStep->Set_InitialParticleID(Gamma);
35  locReactionStep->Set_TargetParticleID(Proton);
36  locReactionStep->Add_FinalParticleID(Proton);
37  locReactionStep->Add_FinalParticleID(PiPlus);
38  locReactionStep->Add_FinalParticleID(PiMinus);
39  locReaction->Add_ReactionStep(locReactionStep);
40  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
41 
42  /**************************************************** p2pi_dirc Control Settings ****************************************************/
43 
44  // Kinematic Fit
45  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
46 
47  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
48  locReaction->Set_NumPlusMinusRFBunches(0);
49 
50  locReaction->Enable_TTreeOutput("tree_p2pi_dirc.root");
51 
52  /**************************************************** p2pi_dirc Analysis Actions ****************************************************/
53 
54  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
55  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
56  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
57 
58  // PID
59  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
60 
61  //MASSES
62  deque<Particle_t> locRhoPIDs; locRhoPIDs.push_back(PiPlus); locRhoPIDs.push_back(PiMinus);
63  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
64  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locRhoPIDs, false, 900, 0.3, 1.2, "Rho"));
65  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locRhoPIDs, true, 900, 0.3, 1.2, "Rho_KinFit"));
66 
67  // Kinematic Fit Results
68  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
69  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
70 
71  // MASSES, POST-KINFIT
72  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
73  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locRhoPIDs, false, 900, 0.3, 1.2, "Rho_PostKinFitCut"));
74  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locRhoPIDs, true, 900, 0.3, 1.2, "Rho_KinFit_PostKinFitCut"));
75 
76  // Custom histograms for DIRC
77  //locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, false, PiPlus, 0, 1, "PiPlus_DIRC"));
78  locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, true, PiPlus, 0, 1, "PiPlus_DIRC_KinFit"));
79  //locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, false, PiMinus, 0, 2, "PiMinus_DIRC"));
80  locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, true, PiMinus, 0, 2, "PiMinus_DIRC_KinFit"));
81 
82  // Kinematics of final selection
83  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
84 
85  _data.push_back(locReaction); //Register the DReaction with the factory
86 
87 
88  /**************************************************** p2pi_dirc Reaction Steps ****************************************************/
89 
90  locReaction = new DReaction("p2k_dirc"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown"
91 
92  // g, p -> K+, K- ,p
93  locReactionStep = new DReactionStep();
94  locReactionStep->Set_InitialParticleID(Gamma);
95  locReactionStep->Set_TargetParticleID(Proton);
96  locReactionStep->Add_FinalParticleID(Proton);
97  locReactionStep->Add_FinalParticleID(KPlus);
98  locReactionStep->Add_FinalParticleID(KMinus);
99  locReaction->Add_ReactionStep(locReactionStep);
100  dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak
101 
102  /**************************************************** p2pi_dirc Control Settings ****************************************************/
103 
104  // Kinematic Fit
105  locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints
106 
107  // Highly Recommended: When generating particle combinations, reject all beam photons that match to a different RF bunch
108  locReaction->Set_NumPlusMinusRFBunches(0);
109 
110  locReaction->Enable_TTreeOutput("tree_p2k_dirc.root");
111 
112  /**************************************************** p2pi_dirc Analysis Actions ****************************************************/
113 
114  // Recommended: Analysis actions automatically performed by the DAnalysisResults factories to histogram useful quantities.
115  //These actions are executed sequentially, and are executed on each surviving (non-cut) particle combination
116  //Pre-defined actions can be found in ANALYSIS/DHistogramActions.h and ANALYSIS/DCutActions.h
117 
118  // PID
119  locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction, false));
120 
121  //MASSES
122  deque<Particle_t> locPhiPIDs; locPhiPIDs.push_back(KPlus); locPhiPIDs.push_back(KMinus);
123  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1));
124  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, false, 500, 0.9, 1.4, "Phi"));
125  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, true, 500, 0.9, 1.4, "Phi_KinFit"));
126 
127  // Kinematic Fit Results
128  locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05, true)); //5% confidence level cut on pull histograms only
129  locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 5.73303E-7)); // confidence level cut //+/- 5 sigma
130 
131  // MASSES, POST-KINFIT
132  locReaction->Add_AnalysisAction(new DHistogramAction_MissingMassSquared(locReaction, false, 1000, -0.1, 0.1, "PostKinFitCut"));
133  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, false, 500, 0.9, 1.4, "Phi_PostKinFitCut"));
134  locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, 0, locPhiPIDs, true, 500, 0.9, 1.4, "Phi_KinFit_PostKinFitCut"));
135 
136  // Custom histograms for DIRC
137  //locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, false, KPlus, 0, 1, "KPlus_DIRC"));
138  locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, true, KPlus, 0, 1, "KPlus_DIRC_KinFit"));
139  //locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, false, KMinus, 0, 2, "KMinus_DIRC"));
140  locReaction->Add_AnalysisAction(new DCustomAction_dirc_reactions(locReaction, true, KMinus, 0, 2, "KMinus_DIRC_KinFit"));
141 
142  // Kinematics of final selection
143  locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data
144 
145  _data.push_back(locReaction); //Register the DReaction with the factory
146 
147  return NOERROR;
148 }
149 
150 //------------------
151 // fini
152 //------------------
154 {
155  for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i)
156  delete dReactionStepPool[loc_i]; //cleanup memory
157  return NOERROR;
158 }
159 
void Add_ReactionStep(const DReactionStep *locReactionStep)
Definition: DReaction.h:48
void Enable_TTreeOutput(string locTTreeOutputFileName, bool locSaveUnusedFlag=false)
Definition: DReaction.h:163
void Set_NumPlusMinusRFBunches(size_t locNumPlusMinusRFBunches)
Definition: DReaction.h:57
void Set_KinFitType(DKinFitType locKinFitType)
Definition: DReaction.h:53
void Add_FinalParticleID(Particle_t locPID, bool locIsMissingFlag=false)
jerror_t evnt(JEventLoop *locEventLoop, uint64_t locEventNumber)
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
jerror_t brun(JEventLoop *locEventLoop, int32_t locRunNumber)