Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DKinFitConstraint_Spacetime.h
Go to the documentation of this file.
1 #ifndef _DKinFitConstraints_Spacetime_
2 #define _DKinFitConstraints_Spacetime_
3 
4 #include <set>
5 #include <algorithm>
6 
7 #include "TVector3.h"
8 #include "TLorentzVector.h"
9 
10 #include "DKinFitParticle.h"
11 #include "DKinFitConstraint.h"
12 
13 using namespace std;
14 
15 class DKinFitter;
16 class DKinFitUtils;
17 
19 {
20  friend class DKinFitter;
21  friend class DKinFitUtils;
22 
23  public:
26 
27  double Get_InitTimeGuess(void) const{return dInitTimeGuess;};
28  void Set_InitTimeGuess(double locInitTimeGuess){dInitTimeGuess = locInitTimeGuess;};
29 
30  TLorentzVector Get_CommonSpacetime(void) const;
31  double Get_CommonTime(void) const;
32 
33  char Get_CommonTParamIndex(void) const;
34 
35  set<shared_ptr<DKinFitParticle>> Get_OnlyConstrainTimeParticles(void) const{return dOnlyConstrainTimeParticles;}
36  set<shared_ptr<DKinFitParticle>> Get_AllConstrainingParticles(void) const;
37  set<shared_ptr<DKinFitParticle>> Get_AllParticles(void) const;
38 
39  void Print_ConstraintInfo(void) const;
40 
41  void Reset(void);
42  void Release(void);
43 
44  private:
45 
46  void Set_CommonTime(double locTime);
47  void Set_CommonVertex(const TVector3& locVertex);
48  void Set_CommonSpacetime(TLorentzVector& locSpacetime);
49 
50  void Set_CommonTParamIndex(char locCommonTParamIndex);
51  void Set_OnlyConstrainTimeParticles(const set<shared_ptr<DKinFitParticle>>& locOnlyConstrainTimeParticles){dOnlyConstrainTimeParticles = locOnlyConstrainTimeParticles;}
52 
53  set<shared_ptr<DKinFitParticle>> dOnlyConstrainTimeParticles; //neutral showers //not used to constrain vertex, but fit vertex is used for time constraint
54 
56 };
57 
59 {
60  Reset();
61 }
62 
64 {
66  dInitTimeGuess = 0.0;
67  dOnlyConstrainTimeParticles.clear();
68 }
69 
71 {
73  dOnlyConstrainTimeParticles.clear();
74 }
75 
76 inline set<shared_ptr<DKinFitParticle>> DKinFitConstraint_Spacetime::Get_AllParticles(void) const
77 {
78  set<shared_ptr<DKinFitParticle>> locAllParticles;
79  auto locBaseParticles = DKinFitConstraint_Vertex::Get_AllParticles();
80  set_union(locBaseParticles.begin(), locBaseParticles.end(), dOnlyConstrainTimeParticles.begin(), dOnlyConstrainTimeParticles.end(), inserter(locAllParticles, locAllParticles.begin()));
81  return locAllParticles;
82 }
83 
84 inline set<shared_ptr<DKinFitParticle>> DKinFitConstraint_Spacetime::Get_AllConstrainingParticles(void) const
85 {
86  set<shared_ptr<DKinFitParticle>> locAllConstrainedParticles;
87  set_union(dFullConstrainParticles.begin(), dFullConstrainParticles.end(), dOnlyConstrainTimeParticles.begin(), dOnlyConstrainTimeParticles.end(), inserter(locAllConstrainedParticles, locAllConstrainedParticles.begin()));
88  return locAllConstrainedParticles;
89 }
90 
91 inline TLorentzVector DKinFitConstraint_Spacetime::Get_CommonSpacetime(void) const
92 {
93  return TLorentzVector(Get_CommonVertex(), Get_CommonTime());
94 }
95 
97 {
98  if(dFullConstrainParticles.empty())
99  return -1;
100  return (*dFullConstrainParticles.begin())->Get_CommonVxParamIndex();
101 }
102 
104 {
105  for(auto& locParticle : dFullConstrainParticles)
106  locParticle->Set_CommonTime(locTime);
107  for(auto& locParticle : dNoConstrainParticles)
108  {
109  DKinFitParticleType locKinFitParticleType = locParticle->Get_KinFitParticleType();
110  if((locKinFitParticleType == d_MissingParticle) || (locKinFitParticleType == d_DecayingParticle) || (locKinFitParticleType == d_TargetParticle))
111  locParticle->Set_Time(locTime);
112  if(locKinFitParticleType != d_DecayingParticle)
113  locParticle->Set_CommonTime(locTime);
114  }
115  for(auto& locParticle : dOnlyConstrainTimeParticles)
116  locParticle->Set_CommonTime(locTime);
117 }
118 
119 inline void DKinFitConstraint_Spacetime::Set_CommonVertex(const TVector3& locVertex)
120 {
122  for(auto& locParticle : dOnlyConstrainTimeParticles)
123  locParticle->Set_CommonVertex(locVertex);
124 }
125 
126 inline void DKinFitConstraint_Spacetime::Set_CommonSpacetime(TLorentzVector& locSpacetime)
127 {
128  DKinFitConstraint_Vertex::Set_CommonVertex(locSpacetime.Vect());
129  Set_CommonTime(locSpacetime.T());
130 }
131 
132 inline void DKinFitConstraint_Spacetime::Set_CommonTParamIndex(char locCommonTParamIndex)
133 {
134  for(auto& locParticle : dFullConstrainParticles)
135  locParticle->Set_CommonTParamIndex(locCommonTParamIndex);
136  for(auto& locParticle : dOnlyConstrainTimeParticles)
137  locParticle->Set_CommonTParamIndex(locCommonTParamIndex);
138  for(auto& locParticle : dNoConstrainParticles)
139  {
140  DKinFitParticleType locKinFitParticleType = locParticle->Get_KinFitParticleType();
141  if((locKinFitParticleType == d_MissingParticle) || (locKinFitParticleType == d_DecayingParticle))
142  locParticle->Set_TParamIndex(locCommonTParamIndex); //not included in fit, but particle vertex is defined by the fit result
143  if(locKinFitParticleType != d_DecayingParticle)
144  locParticle->Set_CommonTParamIndex(locCommonTParamIndex);
145  }
146 }
147 
149 {
150  if(dFullConstrainParticles.empty())
151  return -1;
152  return (*dFullConstrainParticles.begin())->Get_CommonTParamIndex();
153 }
154 
156 {
158 
159  cout << "DKinFitConstraint_Spacetime: Only-time-constrained particle PID's, pointers: " << endl;
160  for(auto& locParticle : dOnlyConstrainTimeParticles)
161  cout << locParticle->Get_PID() << ", " << locParticle << endl;
162 }
163 
164 #endif // _DKinFitConstraint_Spacetime_
void Set_CommonSpacetime(TLorentzVector &locSpacetime)
void Set_CommonTParamIndex(char locCommonTParamIndex)
DKinFitParticleType
set< shared_ptr< DKinFitParticle > > dOnlyConstrainTimeParticles
TLorentzVector Get_CommonSpacetime(void) const
set< shared_ptr< DKinFitParticle > > Get_AllConstrainingParticles(void) const
set< shared_ptr< DKinFitParticle > > Get_OnlyConstrainTimeParticles(void) const
virtual void Set_CommonVertex(const TVector3 &locVertex)
void Set_InitTimeGuess(double locInitTimeGuess)
set< shared_ptr< DKinFitParticle > > Get_AllParticles(void) const
void Set_CommonVertex(const TVector3 &locVertex)
virtual set< shared_ptr< DKinFitParticle > > Get_AllParticles(void) const
void Set_OnlyConstrainTimeParticles(const set< shared_ptr< DKinFitParticle >> &locOnlyConstrainTimeParticles)