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