Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DKinFitConstraint_P4.h
Go to the documentation of this file.
1 #ifndef _DKinFitConstraints_P4_
2 #define _DKinFitConstraints_P4_
3 
4 #include <set>
5 #include <algorithm>
6 
7 #include "DKinFitParticle.h"
8 #include "DKinFitConstraint.h"
9 
10 using namespace std;
11 
12 class DKinFitter;
13 class DKinFitUtils;
14 
16 {
17  friend class DKinFitter;
18  friend class DKinFitUtils;
19 
20  public:
21 
24 
25  TVector3 Get_InitP3Guess(void) const{return dInitP3Guess;};
26  void Set_InitP3Guess(const TVector3& locInitP3Guess){dInitP3Guess = locInitP3Guess;};
27 
28  char Get_FIndex(void) const{return dFIndex;}
29  set<shared_ptr<DKinFitParticle>> Get_InitialParticles(void) const{return dInitialParticles;};
30  set<shared_ptr<DKinFitParticle>> Get_FinalParticles(void) const{return dFinalParticles;};
31 
32  shared_ptr<DKinFitParticle> Get_MissingParticle(void) const; //NULL if none
33  shared_ptr<DKinFitParticle> Get_OpenEndedDecayingParticle(void) const; //NULL if none
34  shared_ptr<DKinFitParticle> Get_DefinedParticle(void) const; //missing or open-ended decaying particle
35  bool Get_IsDefinedParticleInFinalState(void) const; //false if initial state or no defined particle
36 
37  set<shared_ptr<DKinFitParticle>> Get_AllParticles(void) const;
38  void Print_ConstraintInfo(void) const;
39 
40  void Reset(void);
41  void Release(void);
42 
43  private:
44 
45  void Set_FIndex(char locFIndex){dFIndex = locFIndex;}
46 
47  void Set_InitialParticles(const set<shared_ptr<DKinFitParticle>>& locInitialParticles){dInitialParticles = locInitialParticles;}
48  void Set_FinalParticles(const set<shared_ptr<DKinFitParticle>>& locFinalParticles){dFinalParticles = locFinalParticles;}
49 
50  char dFIndex; //starting row index of the equation(s) corresponding to these constraints in the dF matrix term
51  set<shared_ptr<DKinFitParticle>> dInitialParticles;
52  set<shared_ptr<DKinFitParticle>> dFinalParticles;
53 
54  TVector3 dInitP3Guess; //initial guess for missing or open-ended-decaying particle. ignored if not present
55 };
56 
58 {
59  Reset();
60 }
61 
62 inline void DKinFitConstraint_P4::Reset(void)
63 {
64  dFIndex = 0;
65  dInitP3Guess = TVector3(0.0, 0.0, 0.0);
66  dInitialParticles.clear();
67  dFinalParticles.clear();
68 }
69 
71 {
72  dInitialParticles.clear();
73  dFinalParticles.clear();
74 }
75 
76 inline set<shared_ptr<DKinFitParticle>> DKinFitConstraint_P4::Get_AllParticles(void) const
77 {
78  set<shared_ptr<DKinFitParticle>> locAllParticles;
79  set_union(dInitialParticles.begin(), dInitialParticles.end(), dFinalParticles.begin(), dFinalParticles.end(), inserter(locAllParticles, locAllParticles.begin()));
80  return locAllParticles;
81 }
82 
83 inline shared_ptr<DKinFitParticle> DKinFitConstraint_P4::Get_MissingParticle(void) const
84 {
85  auto locAllParticles = Get_AllParticles();
86  for(auto& locParticle : locAllParticles)
87  {
88  if(locParticle->Get_KinFitParticleType() == d_MissingParticle)
89  return locParticle;
90  }
91  return NULL;
92 }
93 
94 inline shared_ptr<DKinFitParticle> DKinFitConstraint_P4::Get_OpenEndedDecayingParticle(void) const
95 {
96  //look for decaying particles
97  auto locAllParticles = Get_AllParticles();
98  for(auto& locParticle : locAllParticles)
99  {
100  if(locParticle->Get_KinFitParticleType() != d_DecayingParticle)
101  continue;
102 
103  //see if any of the defined-from particles match those in the constraint
104  auto locFromFinalState = locParticle->Get_FromFinalState();
105  set<shared_ptr<DKinFitParticle>> locMatchingParticles;
106  set_intersection(locFromFinalState.begin(), locFromFinalState.end(), locAllParticles.begin(), locAllParticles.end(), inserter(locMatchingParticles, locMatchingParticles.begin()));
107  if(!locMatchingParticles.empty())
108  return locParticle; //open-ended decaying particle
109  }
110  return NULL;
111 }
112 
113 inline shared_ptr<DKinFitParticle> DKinFitConstraint_P4::Get_DefinedParticle(void) const
114 {
115  auto locKinFitParticle = Get_MissingParticle();
116  if(locKinFitParticle != NULL)
117  return locKinFitParticle;
118  return Get_OpenEndedDecayingParticle();
119 }
120 
122 {
123  //false if initial state or no defined particle
124  auto locDefinedParticle = Get_DefinedParticle();
125  if(locDefinedParticle == NULL)
126  return false;
127 
128  return (dFinalParticles.find(locDefinedParticle) != dFinalParticles.end());
129 }
130 
132 {
133  cout << "DKinFitConstraint_P4: Initial-state particle PID's, pointers: " << endl;
134  for(auto& locParticle : dInitialParticles)
135  cout << locParticle->Get_PID() << ", " << locParticle << endl;
136 
137  cout << "DKinFitConstraint_P4: Final-state particle PID's, pointers: " << endl;
138  for(auto& locParticle : dFinalParticles)
139  cout << locParticle->Get_PID() << ", " << locParticle << endl;
140 }
141 
142 #endif // _DKinFitConstraint_P4_
143 
shared_ptr< DKinFitParticle > Get_MissingParticle(void) const
void Set_InitP3Guess(const TVector3 &locInitP3Guess)
set< shared_ptr< DKinFitParticle > > dFinalParticles
char Get_FIndex(void) const
shared_ptr< DKinFitParticle > Get_DefinedParticle(void) const
set< shared_ptr< DKinFitParticle > > dInitialParticles
set< shared_ptr< DKinFitParticle > > Get_FinalParticles(void) const
shared_ptr< DKinFitParticle > Get_OpenEndedDecayingParticle(void) const
void Set_FinalParticles(const set< shared_ptr< DKinFitParticle >> &locFinalParticles)
TVector3 Get_InitP3Guess(void) const
void Set_FIndex(char locFIndex)
void Print_ConstraintInfo(void) const
bool Get_IsDefinedParticleInFinalState(void) const
set< shared_ptr< DKinFitParticle > > Get_AllParticles(void) const
void Set_InitialParticles(const set< shared_ptr< DKinFitParticle >> &locInitialParticles)
set< shared_ptr< DKinFitParticle > > Get_InitialParticles(void) const