Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DKinFitChainStep.h
Go to the documentation of this file.
1 #ifndef _DKinFitChainStep_
2 #define _DKinFitChainStep_
3 
4 #include <vector>
5 
6 #include "DKinFitParticle.h"
7 #include "DResettable.h"
8 
9 //This class is not necessary to use the kinematic fitter, but it is necessary to use some of the setup help functions in DKinFitUtils
10  //Is mostly useful when coding for the generic situation of ANY possible decay chain (rather than handling a specific one)
11 
12 using namespace std;
13 
15 {
16  public:
17 
18  void Reset(void);
19  void Release(void);
20 
21  //GET PARTICLES
22  vector<shared_ptr<DKinFitParticle>> Get_InitialParticles(void) const{return dInitialParticles;}
23  vector<shared_ptr<DKinFitParticle>> Get_FinalParticles(void) const{return dFinalParticles;}
24  vector<shared_ptr<DKinFitParticle>> Get_AllParticles(void) const;
25  shared_ptr<DKinFitParticle> Get_InitialParticle(size_t locIndex) const{return dInitialParticles[locIndex];}
26  shared_ptr<DKinFitParticle> Get_FinalParticle(size_t locIndex) const{return dFinalParticles[locIndex];}
27 
28  //GET CONTROL INFO
29  signed char Get_InitialParticleDecayFromStepIndex(void) const{return dInitialParticleDecayFromStepIndex;}
30  bool Get_ConstrainDecayingMassFlag(void) const{return dConstrainDecayingMassFlag;}
31 
32  //ADD PARTICLES
33  void Add_InitialParticle(const shared_ptr<DKinFitParticle>& locInitialParticle){dInitialParticles.push_back(locInitialParticle);}
34  void Add_FinalParticle(const shared_ptr<DKinFitParticle>& locFinalParticle){dFinalParticles.push_back(locFinalParticle);}
35  void Set_InitialParticle(const shared_ptr<DKinFitParticle>& locInitialParticle, size_t locIndex){dInitialParticles[locIndex] = locInitialParticle;}
36  void Set_FinalParticle(const shared_ptr<DKinFitParticle>& locFinalParticle, size_t locIndex){dFinalParticles[locIndex] = locFinalParticle;}
37 
38  //SET CONTROL INFO
39  void Set_InitialParticleDecayFromStepIndex(int locDecayFromStepIndex){dInitialParticleDecayFromStepIndex = locDecayFromStepIndex;}
40  void Set_ConstrainDecayingMassFlag(bool locConstrainDecayingMassFlag){dConstrainDecayingMassFlag = locConstrainDecayingMassFlag;}
41 
42  //PRINT INFO
43  void Print_InfoToScreen(void) const;
44 
45  private:
46 
47  //refers to the decaying particle in dInitialParticles //-1 if none, else index points to step index it is produced at
48  signed char dInitialParticleDecayFromStepIndex = -1;
49  bool dConstrainDecayingMassFlag = false; //true to constrain mass of the initial state particle
50 
51  vector<shared_ptr<DKinFitParticle>> dInitialParticles;
52  vector<shared_ptr<DKinFitParticle>> dFinalParticles;
53 };
54 
55 inline void DKinFitChainStep::Reset(void)
56 {
57  dInitialParticleDecayFromStepIndex = -1;
58  dConstrainDecayingMassFlag = false;
59  dInitialParticles.clear();
60  dFinalParticles.clear();
61 }
62 
63 inline void DKinFitChainStep::Release(void)
64 {
65  dInitialParticles.clear();
66  dFinalParticles.clear();
67 }
68 
69 inline vector<shared_ptr<DKinFitParticle>> DKinFitChainStep::Get_AllParticles(void) const
70 {
71  auto locAllParticles = dInitialParticles;
72  locAllParticles.insert(locAllParticles.end(), dFinalParticles.begin(), dFinalParticles.end());
73  locAllParticles.erase(std::remove(locAllParticles.begin(), locAllParticles.end(), nullptr), locAllParticles.end());
74  return locAllParticles;
75 }
76 
77 inline void DKinFitChainStep::Print_InfoToScreen(void) const
78 {
79  cout << "DKinFitChainStep decay from, constrain mass flags = " << int(dInitialParticleDecayFromStepIndex) << ", " << dConstrainDecayingMassFlag << endl;
80 
81  cout << "DKinFitChainStep init particles: PIDs, pointers:" << endl;
82  for(auto& locParticle : dInitialParticles)
83  {
84  if(locParticle == nullptr)
85  cout << "X, nullptr" << endl;
86  else
87  cout << locParticle->Get_PID() << ", " << locParticle << endl;
88  }
89 
90  cout << "DKinFitChainStep final particles: PIDs, pointers:" << endl;
91  for(auto& locParticle : dFinalParticles)
92  {
93  if(locParticle == nullptr)
94  cout << "X, nullptr" << endl;
95  else
96  cout << locParticle->Get_PID() << ", " << locParticle << endl;
97  }
98 }
99 
100 #endif // _DKinFitChainStep_
vector< shared_ptr< DKinFitParticle > > dInitialParticles
vector< shared_ptr< DKinFitParticle > > dFinalParticles
shared_ptr< DKinFitParticle > Get_InitialParticle(size_t locIndex) const
void Set_InitialParticleDecayFromStepIndex(int locDecayFromStepIndex)
signed char Get_InitialParticleDecayFromStepIndex(void) const
bool Get_ConstrainDecayingMassFlag(void) const
void Add_InitialParticle(const shared_ptr< DKinFitParticle > &locInitialParticle)
vector< shared_ptr< DKinFitParticle > > Get_FinalParticles(void) const
void Set_FinalParticle(const shared_ptr< DKinFitParticle > &locFinalParticle, size_t locIndex)
vector< shared_ptr< DKinFitParticle > > Get_InitialParticles(void) const
void Set_ConstrainDecayingMassFlag(bool locConstrainDecayingMassFlag)
void Set_InitialParticle(const shared_ptr< DKinFitParticle > &locInitialParticle, size_t locIndex)
void Print_InfoToScreen(void) const
void Add_FinalParticle(const shared_ptr< DKinFitParticle > &locFinalParticle)
vector< shared_ptr< DKinFitParticle > > Get_AllParticles(void) const
shared_ptr< DKinFitParticle > Get_FinalParticle(size_t locIndex) const