14 #include "TMatrixDSym.h"
15 #include "TMatrixFSym.h"
16 #include "TLorentzVector.h"
18 #include "TDecompLU.h"
50 void Reset_NewEvent(
void);
51 void Reset_NewFit(
void);
54 void Add_Constraint(
const shared_ptr<DKinFitConstraint>& locKinFitConstraint){dKinFitConstraints.insert(locKinFitConstraint);}
55 void Add_Constraints(
const set<shared_ptr<DKinFitConstraint>>& locKinFitConstraints);
58 bool Fit_Reaction(
void);
61 void Recycle_LastFitMemory(
void);
72 void Set_DebugLevel(
int locDebugLevel);
90 unsigned int Get_NDF(
void)
const{
return dNDF;}
91 void Get_Pulls(map<shared_ptr<DKinFitParticle>, map<DKinFitPullType, double> >& locPulls)
const{locPulls = dPulls;}
94 const TMatrixDSym&
Get_VEta(
void) {
return dVEta;}
95 const TMatrixDSym&
Get_VXi(
void) {
return dVXi;}
96 const TMatrixDSym&
Get_V(
void) {
return dV;}
111 template <
typename DType> set<shared_ptr<DType>> Get_Constraints(
void)
const;
112 template <
typename DType> set<shared_ptr<DType>> Get_Constraints(
const set<shared_ptr<DKinFitConstraint>>& locConstraints)
const;
116 template <
typename DType> set<shared_ptr<DType>> Get_Constraints(
const shared_ptr<DKinFitParticle>& locKinFitParticle,
bool locOnlyDirectFlag =
false)
const;
117 template <
typename DType>
bool Get_IsInConstraint(
const shared_ptr<DKinFitParticle>& locKinFitParticle,
bool locOnlyDirectFlag =
false)
const;
118 template <
typename DType>
bool Get_IsIndirectlyInConstraint(
const shared_ptr<DKinFitParticle>& locKinFitParticle)
const;
120 bool Get_IsConstrainingVertex(
const shared_ptr<DKinFitParticle>& locKinFitParticle)
const;
121 bool Get_IsTimeConstrained(
const shared_ptr<DKinFitParticle>& locKinFitParticle)
const;
125 void Prepare_ConstraintsAndParticles(
void);
126 void Set_MatrixSizes(
void);
127 void Resize_Matrices(
void);
128 void Zero_Matrices(
void);
129 void Fill_InputMatrices(
void);
137 void Calc_dVdEta(
void);
141 void Calc_dF_P4(
int locFIndex,
const DKinFitParticle* locKinFitParticle,
double locStateSignMultiplier);
142 void Calc_dF_MassDerivs(
size_t locFIndex,
const DKinFitParticle* locKinFitParticle, TLorentzVector locXP4,
double locStateSignMultiplier,
bool locIsConstrainedParticle);
144 void Calc_dF_Vertex(
size_t locFIndex,
const DKinFitParticle* locKinFitParticle,
const DKinFitParticle* locKinFitParticle_DecayingSource,
double locStateSignMultiplier);
145 void Calc_dF_Vertex_NotDecaying(
size_t locFIndex,
const DKinFitParticle* locKinFitParticle);
146 void Calc_dF_Vertex_Decaying_Accel(
size_t locFIndex,
const DKinFitParticle* locKinFitParticle,
const DKinFitParticle* locKinFitParticle_DecayingSource,
double locStateSignMultiplier);
147 void Calc_dF_Vertex_Decaying_NonAccel(
size_t locFIndex,
const DKinFitParticle* locKinFitParticle,
const DKinFitParticle* locKinFitParticle_DecayingSource,
double locStateSignMultiplier);
148 void Calc_Vertex_Params(
const DKinFitParticle* locKinFitParticle,
double& locJ, TVector3& locQ, TVector3& locM, TVector3& locD);
149 TVector3 Calc_VertexParams_P4DerivedAtCommonVertex(
const DKinFitParticle* locKinFitParticle);
153 void Update_ParticleParams(
void);
154 void Calc_Pulls(
void);
155 void Set_FinalTrackInfo(
void);
156 void Update_CovarianceMatrices(
bool locDecayingParticlesOnlyFlag);
215 map<shared_ptr<DKinFitParticle>, map<DKinFitPullType, double> >
dPulls;
220 dKinFitConstraints.insert(locKinFitConstraints.begin(), locKinFitConstraints.end());
226 return Get_Constraints<DType>(dKinFitConstraints);
229 template <
typename DType>
inline set<shared_ptr<DType>>
DKinFitter::Get_Constraints(
const set<shared_ptr<DKinFitConstraint>>& locConstraints)
const
232 set<shared_ptr<DType>> locTypeConstraints;
233 auto locConstraintIterator = locConstraints.begin();
234 for(; locConstraintIterator != locConstraints.end(); ++locConstraintIterator)
236 auto locConstraint = std::dynamic_pointer_cast<DType>(*locConstraintIterator);
237 if(locConstraint != NULL)
238 locTypeConstraints.insert(locConstraint);
240 return locTypeConstraints;
246 return !Get_Constraints<DType>(locKinFitParticle, locOnlyDirectFlag).empty();
252 return (Get_IsInConstraint<DType>(locKinFitParticle,
false) && !Get_IsInConstraint<DType>(locKinFitParticle,
true));
255 template <
typename DType>
inline set<shared_ptr<DType>>
DKinFitter::Get_Constraints(
const shared_ptr<DKinFitParticle>& locKinFitParticle,
bool locOnlyDirectFlag)
const
259 auto& locConstraintMap = locOnlyDirectFlag ? dParticleConstraintMap_Direct : dParticleConstraintMap;
260 auto locMapIterator = locConstraintMap.find(locKinFitParticle);
261 if(locMapIterator == locConstraintMap.end())
262 return set<shared_ptr<DType>>();
264 auto& locParticleConstraints = locMapIterator->second;
265 return Get_Constraints<DType>(locParticleConstraints);
268 #endif // _DKinFitter_
map< shared_ptr< DKinFitParticle >, set< shared_ptr< DKinFitConstraint > > > dParticleConstraintMap
unsigned int dMaxNumIterations
double dConvergenceChiSqDiff_LastResort
double dConvergenceChiSqDiff
void Add_Constraint(const shared_ptr< DKinFitConstraint > &locKinFitConstraint)
void Set_ConvergenceChiSqDiff_LastResort(double locConvergenceChiSqDiff)
const TMatrixDSym & Get_V(void)
bool Get_IsIndirectlyInConstraint(const shared_ptr< DKinFitParticle > &locKinFitParticle) const
unsigned int Get_NumMeasurables(void) const
unsigned int Get_NumConstraintEquations(void) const
bool Get_IsInConstraint(const shared_ptr< DKinFitParticle > &locKinFitParticle, bool locOnlyDirectFlag=false) const
map< shared_ptr< DKinFitParticle >, map< DKinFitPullType, double > > dPulls
void Set_MaxNumIterations(unsigned int locMaxNumIterations)
const TMatrixDSym & Get_VEta(void)
set< shared_ptr< DKinFitConstraint > > Get_KinFitConstraints(void) const
unsigned int Get_NDF(void) const
double Get_ChiSq(void) const
DKinFitUtils * dKinFitUtils
void Add_Constraints(const set< shared_ptr< DKinFitConstraint >> &locKinFitConstraints)
void Get_Pulls(map< shared_ptr< DKinFitParticle >, map< DKinFitPullType, double > > &locPulls) const
const TMatrixDSym & Get_VXi(void)
double Get_ConvergenceChiSqDiff_LastResort(void) const
set< shared_ptr< DKinFitParticle > > Get_KinFitParticles(void) const
double Get_ConfidenceLevel(void) const
DKinFitStatus Get_KinFitStatus(void) const
int Get_DebugLevel(void) const
void Set_ConvergenceChiSqDiff(double locConvergenceChiSqDiff)
set< shared_ptr< DKinFitConstraint > > dKinFitConstraints
unsigned int Get_MaxNumIterations(void) const
unsigned int Get_NumUnknowns(void) const
set< shared_ptr< DKinFitParticle > > dKinFitParticles
DKinFitStatus dKinFitStatus
set< shared_ptr< DType > > Get_Constraints(void) const
map< shared_ptr< DKinFitParticle >, set< shared_ptr< DKinFitConstraint > > > dParticleConstraintMap_Direct
double Get_ConvergenceChiSqDiff(void) const