Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DKinFitConstraint_Vertex.h
Go to the documentation of this file.
1 #ifndef _DKinFitConstraints_Vertex_
2 #define _DKinFitConstraints_Vertex_
3 
4 #include <set>
5 #include <algorithm>
6 
7 #include "TVector3.h"
8 
9 #include "DKinFitParticle.h"
10 #include "DKinFitConstraint.h"
11 
12 using namespace std;
13 
14 class DKinFitter;
15 class DKinFitUtils;
16 
18 {
19  friend class DKinFitter;
20  friend class DKinFitUtils;
21 
22  public:
23 
25  virtual ~DKinFitConstraint_Vertex(void){}
26 
27  TVector3 Get_InitVertexGuess(void) const{return dInitVertexGuess;};
28  void Set_InitVertexGuess(const TVector3& locInitVertexGuess){dInitVertexGuess = locInitVertexGuess;};
29 
30  TVector3 Get_CommonVertex(void) const;
31  char Get_CommonVxParamIndex(void) const;
32  char Get_FIndex(const shared_ptr<DKinFitParticle>& locKinFitParticle) const;
33 
34  virtual set<shared_ptr<DKinFitParticle>> Get_AllConstrainingParticles(void) const{return dFullConstrainParticles;}
35  set<shared_ptr<DKinFitParticle>> Get_FullConstrainParticles(void) const{return dFullConstrainParticles;}
36  set<shared_ptr<DKinFitParticle>> Get_NoConstrainParticles(void) const{return dNoConstrainParticles;}
37  virtual set<shared_ptr<DKinFitParticle>> Get_AllParticles(void) const;
38 
39  void Print_ConstraintInfo(void) const;
40 
41  virtual void Reset(void);
42  virtual void Release(void);
43 
44  protected:
45 
46  void Set_FIndex(const shared_ptr<DKinFitParticle>& locKinFitParticle, char locFIndex){dConstraintEquationParticleMap[locKinFitParticle] = locFIndex;}
47  void Set_CommonVxParamIndex(char locCommonVxParamIndex);
48  virtual void Set_CommonVertex(const TVector3& locVertex);
49 
50  void Set_FullConstrainParticles(const set<shared_ptr<DKinFitParticle>>& locFullConstrainParticles){dFullConstrainParticles = locFullConstrainParticles;}
51  void Set_NoConstrainParticles(const set<shared_ptr<DKinFitParticle>>& locNoConstrainParticles){dNoConstrainParticles = locNoConstrainParticles;}
52 
53  set<shared_ptr<DKinFitParticle>> dFullConstrainParticles; //charged particles, decaying particles, beam particles (not neutral showers!)
54  set<shared_ptr<DKinFitParticle>> dNoConstrainParticles; //missing particles, decaying particles, & neutral showers //fit vertex is set for these
55 
56  //key is particle, value is the constraint equation index
57  map<shared_ptr<DKinFitParticle>, char> dConstraintEquationParticleMap;
58 
59  TVector3 dInitVertexGuess;
60 };
61 
63 {
64  Reset();
65 }
66 
68 {
69  dInitVertexGuess = TVector3(0.0, 0.0, 0.0);
70  dFullConstrainParticles.clear();
71  dNoConstrainParticles.clear();
72  dConstraintEquationParticleMap.clear();
73 }
74 
76 {
77  dFullConstrainParticles.clear();
78  dNoConstrainParticles.clear();
79  dConstraintEquationParticleMap.clear();
80 }
81 
82 inline char DKinFitConstraint_Vertex::Get_FIndex(const shared_ptr<DKinFitParticle>& locKinFitParticle) const
83 {
84  auto locIterator = dConstraintEquationParticleMap.find(locKinFitParticle);
85  if(locIterator == dConstraintEquationParticleMap.end())
86  return -1;
87  return locIterator->second;
88 }
89 
90 inline set<shared_ptr<DKinFitParticle>> DKinFitConstraint_Vertex::Get_AllParticles(void) const
91 {
92  set<shared_ptr<DKinFitParticle>> locAllParticles;
93  set_union(dFullConstrainParticles.begin(), dFullConstrainParticles.end(), dNoConstrainParticles.begin(), dNoConstrainParticles.end(), inserter(locAllParticles, locAllParticles.begin()));
94  return locAllParticles;
95 }
96 
97 inline TVector3 DKinFitConstraint_Vertex::Get_CommonVertex(void) const
98 {
99  if(dFullConstrainParticles.empty())
100  return TVector3();
101  return (*dFullConstrainParticles.begin())->Get_CommonVertex();
102 }
103 
104 inline void DKinFitConstraint_Vertex::Set_CommonVertex(const TVector3& locVertex)
105 {
106  for(auto& locParticle : dFullConstrainParticles)
107  locParticle->Set_CommonVertex(locVertex);
108  for(auto& locParticle : dNoConstrainParticles)
109  {
110  auto locKinFitParticleType = locParticle->Get_KinFitParticleType();
111  if((locKinFitParticleType == d_MissingParticle) || (locKinFitParticleType == d_DecayingParticle) || (locKinFitParticleType == d_TargetParticle))
112  locParticle->Set_Position(locVertex);
113  if(locKinFitParticleType != d_DecayingParticle)
114  locParticle->Set_CommonVertex(locVertex);
115  }
116 }
117 
119 {
120  if(dFullConstrainParticles.empty())
121  return -1;
122  return (*dFullConstrainParticles.begin())->Get_CommonVxParamIndex();
123 }
124 
125 inline void DKinFitConstraint_Vertex::Set_CommonVxParamIndex(char locCommonVxParamIndex)
126 {
127  for(auto& locParticle : dFullConstrainParticles)
128  locParticle->Set_CommonVxParamIndex(locCommonVxParamIndex);
129  for(auto& locParticle : dNoConstrainParticles)
130  {
131  DKinFitParticleType locKinFitParticleType = locParticle->Get_KinFitParticleType();
132  if((locKinFitParticleType == d_MissingParticle) || (locKinFitParticleType == d_DecayingParticle))
133  locParticle->Set_VxParamIndex(locCommonVxParamIndex);
134  if(locKinFitParticleType != d_DecayingParticle)
135  locParticle->Set_CommonVxParamIndex(locCommonVxParamIndex);
136  }
137 }
138 
140 {
141  cout << "DKinFitConstraint_Vertex: Full-constrained particle PID's, pointers: " << endl;
142  for(auto& locParticle : dFullConstrainParticles)
143  cout << locParticle->Get_PID() << ", " << locParticle << endl;
144 
145  cout << "DKinFitConstraint_Vertex: No-constrain particle PID's, pointers: " << endl;
146  for(auto& locParticle : dNoConstrainParticles)
147  cout << locParticle->Get_PID() << ", " << locParticle << endl;
148 }
149 
150 #endif // _DKinFitConstraint_Vertex_
151 
set< shared_ptr< DKinFitParticle > > dFullConstrainParticles
void Set_NoConstrainParticles(const set< shared_ptr< DKinFitParticle >> &locNoConstrainParticles)
TVector3 Get_CommonVertex(void) const
void Set_CommonVxParamIndex(char locCommonVxParamIndex)
set< shared_ptr< DKinFitParticle > > Get_NoConstrainParticles(void) const
map< shared_ptr< DKinFitParticle >, char > dConstraintEquationParticleMap
DKinFitParticleType
char Get_FIndex(const shared_ptr< DKinFitParticle > &locKinFitParticle) const
void Set_InitVertexGuess(const TVector3 &locInitVertexGuess)
void Set_FIndex(const shared_ptr< DKinFitParticle > &locKinFitParticle, char locFIndex)
virtual void Set_CommonVertex(const TVector3 &locVertex)
virtual set< shared_ptr< DKinFitParticle > > Get_AllConstrainingParticles(void) const
char Get_CommonVxParamIndex(void) const
set< shared_ptr< DKinFitParticle > > dNoConstrainParticles
set< shared_ptr< DKinFitParticle > > Get_FullConstrainParticles(void) const
virtual set< shared_ptr< DKinFitParticle > > Get_AllParticles(void) const
void Set_FullConstrainParticles(const set< shared_ptr< DKinFitParticle >> &locFullConstrainParticles)
TVector3 Get_InitVertexGuess(void) const