Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DParticleCombo.h
Go to the documentation of this file.
1 #ifndef _DParticleCombo_
2 #define _DParticleCombo_
3 
4 #include <iostream>
5 #include <vector>
6 
7 #include "particleType.h"
8 #include "DResettable.h"
9 #include "PID/DKinematicData.h"
10 #include "PID/DEventRFBunch.h"
13 #include "ANALYSIS/DReaction.h"
14 
15 using namespace std;
16 using namespace DAnalysis;
17 
18 namespace DAnalysis
19 {
20 
22 {
23  public:
24  void Reset(void);
25  void Release(void){Reset();};
26 
27  // SET STEPS
28  void Add_ParticleComboStep(const DParticleComboStep* locParticleComboStep){dParticleComboSteps.push_back(locParticleComboStep);}
29  void Set_ParticleComboStep(const DParticleComboStep* locParticleComboStep, size_t locStepIndex);
30 
31  // SET OBJECT DATA:
32  void Set_KinFitResults(const DKinFitResults* locKinFitResults){dKinFitResults = locKinFitResults;}
33  void Set_EventRFBunch(const DEventRFBunch* locEventRFBunch){dEventRFBunch = locEventRFBunch;}
34 
35  // GET OBJECT DATA:
36  const DKinFitResults* Get_KinFitResults(void) const{return dKinFitResults;}
37  const DEventRFBunch* Get_EventRFBunch(void) const{return dEventRFBunch;}
38 
39  // GET PARTCILE COMBO STEPS:
40  size_t Get_NumParticleComboSteps(void) const{return dParticleComboSteps.size();}
41  const DParticleComboStep* Get_ParticleComboStep(size_t locStepIndex) const;
42  vector<const DParticleComboStep*> Get_ParticleComboSteps(void) const{return dParticleComboSteps;}
43 
44  // GET PARTICLES
45  vector<const DKinematicData*> Get_MissingParticles(const DReaction* locReaction) const;
46  vector<const DKinematicData*> Get_FinalParticles(const DReaction* locReaction, bool locIncludeMissingFlag = true, bool locIncludeDecayingFlag = true, Charge_t locCharge = d_AllCharges) const;
47  vector<const DKinematicData*> Get_FinalParticles_Measured(const DReaction* locReaction, Charge_t locCharge = d_AllCharges) const;
48  vector<const JObject*> Get_FinalParticle_SourceObjects(Charge_t locCharge = d_AllCharges) const;
49 
50  // GET FINAL PARTICLES - BY DECAY CHAIN:
51  //get all of the measured particles included in the decaychain starting at locStepIndex
52  vector<const DKinematicData*> Get_DecayChainParticles_Measured(const DReaction* locReaction, int locStepIndex) const;
53 
54  // OTHER:
55  DLorentzVector Get_EventVertex(void) const;
56 
57  private:
58 
61  vector<const DParticleComboStep*> dParticleComboSteps;
62 };
63 
64 inline void DParticleCombo::Reset(void)
65 {
66  dKinFitResults = NULL;
67  dEventRFBunch = NULL;
68  dParticleComboSteps.clear();
69 }
70 
71 inline const DParticleComboStep* DParticleCombo::Get_ParticleComboStep(size_t locStepIndex) const
72 {
73  if(locStepIndex >= dParticleComboSteps.size())
74  return NULL;
75  return dParticleComboSteps[locStepIndex];
76 }
77 
78 inline void DParticleCombo::Set_ParticleComboStep(const DParticleComboStep* locParticleComboStep, size_t locStepIndex)
79 {
80  if(locStepIndex >= Get_NumParticleComboSteps())
81  return;
82  dParticleComboSteps[locStepIndex] = locParticleComboStep;
83 }
84 
85 inline DLorentzVector DParticleCombo::Get_EventVertex(void) const
86 {
87  if(dParticleComboSteps.empty())
88  return DLorentzVector();
89  return dParticleComboSteps[0]->Get_SpacetimeVertex();
90 }
91 
92 inline vector<const DKinematicData*> DParticleCombo::Get_FinalParticles(const DReaction* locReaction, bool locIncludeMissingFlag, bool locIncludeDecayingFlag, Charge_t locCharge) const
93 {
94  vector<const DKinematicData*> locParticles;
95  for(size_t loc_i = 0; loc_i < locReaction->Get_NumReactionSteps(); ++loc_i)
96  {
97  auto locStepParticles = dParticleComboSteps[loc_i]->Get_FinalParticles(locReaction->Get_ReactionStep(loc_i), locIncludeMissingFlag, locIncludeDecayingFlag, locCharge);
98  locParticles.insert(locParticles.end(), locStepParticles.begin(), locStepParticles.end());
99  }
100  return locParticles;
101 }
102 
103 inline vector<const DKinematicData*> DParticleCombo::Get_FinalParticles_Measured(const DReaction* locReaction, Charge_t locCharge) const
104 {
105  vector<const DKinematicData*> locParticles;
106  for(size_t loc_i = 0; loc_i < locReaction->Get_NumReactionSteps(); ++loc_i)
107  {
108  auto locStepParticles = dParticleComboSteps[loc_i]->Get_FinalParticles_Measured(locReaction->Get_ReactionStep(loc_i), locCharge);
109  locParticles.insert(locParticles.end(), locStepParticles.begin(), locStepParticles.end());
110  }
111  return locParticles;
112 }
113 
114 inline vector<const JObject*> DParticleCombo::Get_FinalParticle_SourceObjects(Charge_t locCharge) const
115 {
116  vector<const JObject*> locSourceObjects;
117  for(size_t loc_i = 0; loc_i < Get_NumParticleComboSteps(); ++loc_i)
118  {
119  auto locStepSourceObjects = dParticleComboSteps[loc_i]->Get_FinalParticle_SourceObjects(locCharge);
120  locSourceObjects.insert(locSourceObjects.end(), locStepSourceObjects.begin(), locStepSourceObjects.end());
121  }
122  return locSourceObjects;
123 }
124 
125 inline vector<const DKinematicData*> DParticleCombo::Get_MissingParticles(const DReaction* locReaction) const
126 {
127  vector<const DKinematicData*> locParticles;
128  for(size_t loc_i = 0; loc_i < locReaction->Get_NumReactionSteps(); ++loc_i)
129  {
130  auto locMissingParticle = dParticleComboSteps[loc_i]->Get_MissingParticle(locReaction->Get_ReactionStep(loc_i));
131  if(locMissingParticle != nullptr)
132  locParticles.push_back(locMissingParticle);
133  }
134  return locParticles;
135 }
136 
137 inline vector<const DKinematicData*> DParticleCombo::Get_DecayChainParticles_Measured(const DReaction* locReaction, int locStepIndex) const
138 {
139  if((locStepIndex < 0) || (locStepIndex >= int(dParticleComboSteps.size())))
140  return {};
141 
142  auto locParticleComboStep = dParticleComboSteps[locStepIndex];
143  auto locReactionStep = locReaction->Get_ReactionStep(locStepIndex);
144  auto locMissingIndex = locReactionStep->Get_MissingParticleIndex();
145 
146  vector<const DKinematicData*> locMeasuredParticles;
147  if(locParticleComboStep->Get_InitialParticle_Measured() != NULL)
148  locMeasuredParticles.push_back(locParticleComboStep->Get_InitialParticle_Measured());
149  for(size_t loc_i = 0; loc_i < locReactionStep->Get_NumFinalPIDs(); ++loc_i)
150  {
151  if(int(loc_i) == locMissingIndex)
152  continue;
153 
154  auto locMeasuredParticle = locParticleComboStep->Get_FinalParticle_Measured(loc_i);
155  if(locMeasuredParticle == nullptr) //decaying!
156  {
157  auto locStepParticles = Get_DecayChainParticles_Measured(locReaction, DAnalysis::Get_DecayStepIndex(locReaction, locStepIndex, loc_i));
158  locMeasuredParticles.insert(locMeasuredParticles.end(), locStepParticles.begin(), locStepParticles.end());
159  }
160  else
161  locMeasuredParticles.push_back(locMeasuredParticle);
162  }
163  return locMeasuredParticles;
164 }
165 
166 inline void Print(const DParticleCombo* locCombo)
167 {
168  for(auto locStep : locCombo->Get_ParticleComboSteps())
169  DAnalysis::Print(locStep);
170 }
171 
172 } // end namespace
173 
174 #endif // _DParticleCombo_
void Set_EventRFBunch(const DEventRFBunch *locEventRFBunch)
size_t Get_NumParticleComboSteps(void) const
void Print(const DParticleCombo *locCombo)
locHist_ADCmulti Print()
vector< const DParticleComboStep * > dParticleComboSteps
void Add_ParticleComboStep(const DParticleComboStep *locParticleComboStep)
TLorentzVector DLorentzVector
const DEventRFBunch * Get_EventRFBunch(void) const
Charge_t
vector< const DParticleComboStep * > Get_ParticleComboSteps(void) const
const DEventRFBunch * dEventRFBunch
const DKinFitResults * dKinFitResults
int Get_MissingParticleIndex(void) const
Definition: DReactionStep.h:93
const DReactionStep * Get_ReactionStep(size_t locStepIndex) const
Definition: DReaction.h:84
int Get_DecayStepIndex(const DReaction *locReaction, size_t locStepIndex, size_t locParticleIndex)
Definition: DReaction.cc:135
const DKinFitResults * Get_KinFitResults(void) const
void Set_KinFitResults(const DKinFitResults *locKinFitResults)
size_t Get_NumReactionSteps(void) const
Definition: DReaction.h:83