Belle II Software  release-05-01-25
KFitBase.h
1 /**************************************************************************
2  * Copyright(C) 1997 - J. Tanaka *
3  * *
4  * Author: J. Tanaka *
5  * Contributor: J. Tanaka and *
6  * conversion to Belle II structure by T. Higuchi *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <vector>
14 
15 #include <CLHEP/Matrix/Matrix.h>
16 #include <CLHEP/Matrix/SymMatrix.h>
17 #include <CLHEP/Vector/LorentzVector.h>
18 #include <CLHEP/Geometry/Point3D.h>
19 
20 #include <analysis/dataobjects/Particle.h>
21 #include <analysis/VertexFitting/KFit/KFitConst.h>
22 #include <analysis/VertexFitting/KFit/KFitError.h>
23 #include <analysis/VertexFitting/KFit/KFitTrack.h>
24 
25 #ifndef ENABLE_BACKWARDS_COMPATIBILITY
27 #endif
28 
29 namespace Belle2 {
34  namespace analysis {
38  class KFitBase {
39  public:
41  KFitBase(void);
43  virtual ~KFitBase(void);
44 
45 
46  public:
51  enum KFitError::ECode addTrack(const KFitTrack& kp);
60  enum KFitError::ECode addTrack(const CLHEP::HepLorentzVector& p, const HepPoint3D& x, const CLHEP::HepSymMatrix& e,
61  const double q);
68  enum KFitError::ECode addParticle(const Particle* particle);
73  virtual enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix& c);
77  virtual enum KFitError::ECode setZeroCorrelation(void);
82  enum KFitError::ECode setMagneticField(const double mf);
83 
84 
88  enum KFitError::ECode getErrorCode(void) const;
92  int getTrackCount(void) const;
96  virtual int getNDF(void) const;
100  virtual double getCHIsq(void) const;
104  double getMagneticField(void) const;
109  virtual double getTrackCHIsq(const int id) const;
114  const CLHEP::HepLorentzVector getTrackMomentum(const int id) const;
119  const HepPoint3D getTrackPosition(const int id) const;
124  const CLHEP::HepSymMatrix getTrackError(const int id) const;
129  const KFitTrack getTrack(const int id) const;
136  virtual const CLHEP::HepMatrix getCorrelation(const int id1, const int id2,
137  const int flag = KFitConst::kAfterFit) const;
138 
139 
140  public:
144  bool isFitted(void) const;
145 
146 
147  protected:
153  const CLHEP::HepSymMatrix makeError1(const CLHEP::HepLorentzVector& p, const CLHEP::HepMatrix& e) const;
160  const CLHEP::HepMatrix makeError1(const CLHEP::HepLorentzVector& p1, const CLHEP::HepLorentzVector& p2,
161  const CLHEP::HepMatrix& e) const;
167  const CLHEP::HepMatrix makeError2(const CLHEP::HepLorentzVector& p, const CLHEP::HepMatrix& e) const;
174  const CLHEP::HepSymMatrix makeError3(const CLHEP::HepLorentzVector& p, const CLHEP::HepMatrix& e, const bool is_fix_mass) const;
182  const CLHEP::HepMatrix makeError3(const CLHEP::HepLorentzVector& p1, const CLHEP::HepLorentzVector& p2,
183  const CLHEP::HepMatrix& e, const bool is_fix_mass1, const bool is_fix_mass2) const;
189  const CLHEP::HepMatrix makeError4(const CLHEP::HepLorentzVector& p, const CLHEP::HepMatrix& e) const;
190 
191 
195  virtual enum KFitError::ECode prepareInputMatrix(void) = 0;
199  virtual enum KFitError::ECode prepareInputSubMatrix(void) = 0;
203  virtual enum KFitError::ECode prepareCorrelation(void);
207  virtual enum KFitError::ECode prepareOutputMatrix(void) = 0;
211  virtual enum KFitError::ECode makeCoreMatrix(void) = 0;
215  virtual enum KFitError::ECode calculateNDF(void) = 0;
216 
217 
218  protected:
222  enum KFitError::ECode doFit1(void);
226  enum KFitError::ECode doFit2(void);
227 
228 
229  protected:
234  bool isTrackIDInRange(const int id) const;
239  bool isNonZeroEnergy(const CLHEP::HepLorentzVector& p) const;
240 
241 
246 
247 
249  std::vector<KFitTrack> m_Tracks;
251  std::vector<CLHEP::HepMatrix> m_BeforeCorrelation;
252 
253 
255  CLHEP::HepSymMatrix m_V_al_0;
257  CLHEP::HepMatrix m_al_0;
259  CLHEP::HepMatrix m_al_1;
261  CLHEP::HepMatrix m_al_a;
263  CLHEP::HepMatrix m_property;
264 
266  CLHEP::HepMatrix m_D;
268  CLHEP::HepMatrix m_d;
269 
271  CLHEP::HepMatrix m_V_D;
272 
274  CLHEP::HepMatrix m_V_al_1;
276  CLHEP::HepMatrix m_lam;
277 
279  CLHEP::HepMatrix m_E;
281  CLHEP::HepMatrix m_V_E;
283  CLHEP::HepMatrix m_lam0;
285  CLHEP::HepMatrix m_v;
287  CLHEP::HepMatrix m_v_a;
289  CLHEP::HepMatrix m_V_Dt;
291  CLHEP::HepMatrix m_Cov_v_al_1;
292 
293 
295  int m_NDF;
297  double m_CHIsq;
298 
299 
304 
309 
312  };
313 
314  } // namespace analysis
315 
317 } // namespace Belle2
318 
319 
Belle2::analysis::KFitBase::m_MagneticField
double m_MagneticField
Magnetic field.
Definition: KFitBase.h:311
Belle2::analysis::KFitBase::prepareInputSubMatrix
virtual enum KFitError::ECode prepareInputSubMatrix(void)=0
Build sub-matrices for minimum search from input-track properties.
Belle2::analysis::KFitBase::m_v
CLHEP::HepMatrix m_v
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:285
Belle2::analysis::KFitBase::isNonZeroEnergy
bool isNonZeroEnergy(const CLHEP::HepLorentzVector &p) const
Check if the energy is non-zero.
Definition: KFitBase.cc:750
Belle2::analysis::KFitBase::makeError3
const CLHEP::HepSymMatrix makeError3(const CLHEP::HepLorentzVector &p, const CLHEP::HepMatrix &e, const bool is_fix_mass) const
Rebuild an error matrix from a Lorentz vector and an error matrix.
Belle2::analysis::KFitBase::m_CHIsq
double m_CHIsq
chi-square of the fit.
Definition: KFitBase.h:297
Belle2::analysis::KFitBase::m_NDF
int m_NDF
NDF of the fit.
Definition: KFitBase.h:295
Belle2::analysis::KFitBase::m_ErrorCode
enum KFitError::ECode m_ErrorCode
Error code.
Definition: KFitBase.h:243
Belle2::analysis::KFitBase::m_FlagCorrelation
bool m_FlagCorrelation
Flag whether a correlation among tracks exists.
Definition: KFitBase.h:306
Belle2::analysis::KFitBase::m_D
CLHEP::HepMatrix m_D
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:266
Belle2::analysis::KFitBase::getCorrelation
virtual const CLHEP::HepMatrix getCorrelation(const int id1, const int id2, const int flag=KFitConst::kAfterFit) const
Get a correlation matrix between two tracks.
Definition: KFitBase.cc:184
Belle2::analysis::KFitBase
KFitBase is a base class for kinematical fitters.
Definition: KFitBase.h:38
Belle2::analysis::KFitBase::isFitted
bool isFitted(void) const
Return false if fit is not performed yet or performed fit is failed; otherwise true.
Definition: KFitBase.cc:728
Belle2::analysis::KFitBase::doFit2
enum KFitError::ECode doFit2(void)
Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).
Definition: KFitBase.cc:578
Belle2::analysis::KFitBase::m_NecessaryTrackCount
int m_NecessaryTrackCount
Number needed tracks to perform fit.
Definition: KFitBase.h:303
Belle2::analysis::KFitBase::getTrackError
const CLHEP::HepSymMatrix getTrackError(const int id) const
Get an error matrix of the track.
Definition: KFitBase.cc:169
Belle2::analysis::KFitBase::~KFitBase
virtual ~KFitBase(void)
Destruct the object.
Belle2::analysis::KFitBase::m_lam0
CLHEP::HepMatrix m_lam0
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:283
Belle2::analysis::KFitBase::m_Cov_v_al_1
CLHEP::HepMatrix m_Cov_v_al_1
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:291
Belle2::analysis::KFitBase::m_Tracks
std::vector< KFitTrack > m_Tracks
Container of input tracks.
Definition: KFitBase.h:249
Belle2::analysis::KFitBase::calculateNDF
virtual enum KFitError::ECode calculateNDF(void)=0
Calculate an NDF of the fit.
Belle2::analysis::KFitBase::m_property
CLHEP::HepMatrix m_property
Container of charges and masses.
Definition: KFitBase.h:263
Belle2::analysis::KFitBase::prepareCorrelation
virtual enum KFitError::ECode prepareCorrelation(void)
Build a grand correlation matrix from input-track properties.
Definition: KFitBase.cc:459
Belle2::analysis::KFitBase::prepareOutputMatrix
virtual enum KFitError::ECode prepareOutputMatrix(void)=0
Build an output error matrix.
Belle2::analysis::KFitBase::makeError1
const CLHEP::HepSymMatrix makeError1(const CLHEP::HepLorentzVector &p, const CLHEP::HepMatrix &e) const
Rebuild an error matrix from a Lorentz vector and an error matrix.
Belle2::analysis::KFitBase::m_lam
CLHEP::HepMatrix m_lam
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:276
Belle2::analysis::KFitBase::m_V_D
CLHEP::HepMatrix m_V_D
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:271
Belle2::analysis::KFitBase::m_al_1
CLHEP::HepMatrix m_al_1
See J.Tanaka Ph.D (2001) p136 for definition.
Definition: KFitBase.h:259
Belle2::analysis::KFitBase::addTrack
enum KFitError::ECode addTrack(const KFitTrack &kp)
Add a track to the fitter object.
Definition: KFitBase.cc:39
Belle2::analysis::KFitBase::m_E
CLHEP::HepMatrix m_E
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:279
Belle2::analysis::KFitBase::setZeroCorrelation
virtual enum KFitError::ECode setZeroCorrelation(void)
Indicate no correlation between tracks.
Definition: KFitBase.cc:86
Belle2::analysis::KFitBase::m_FlagFitted
bool m_FlagFitted
Flag to indicate if the fit is performed and succeeded.
Definition: KFitBase.h:245
Belle2::analysis::KFitBase::doFit1
enum KFitError::ECode doFit1(void)
Perform a fit (used in MassFitKFit::doFit()).
Definition: KFitBase.cc:502
Belle2::analysis::KFitBase::KFitBase
KFitBase(void)
Construct an object with no argument.
Definition: KFitBase.cc:21
Belle2::analysis::KFitBase::getTrackCount
int getTrackCount(void) const
Get the number of added tracks.
Definition: KFitBase.cc:108
Belle2::analysis::KFitConst::kAfterFit
static const int kAfterFit
Input parameter to specify after-fit when setting/getting a track attribute.
Definition: KFitConst.h:45
Belle2::analysis::KFitBase::m_v_a
CLHEP::HepMatrix m_v_a
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:287
Belle2::analysis::KFitBase::prepareInputMatrix
virtual enum KFitError::ECode prepareInputMatrix(void)=0
Build grand matrices for minimum search from input-track properties.
Belle2::analysis::KFitBase::setMagneticField
enum KFitError::ECode setMagneticField(const double mf)
Change a magnetic field from the default value KFitConst::kDefaultMagneticField.
Definition: KFitBase.cc:94
Belle2::analysis::KFitBase::m_V_al_1
CLHEP::HepMatrix m_V_al_1
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:274
Belle2::analysis::KFitBase::getMagneticField
double getMagneticField(void) const
Get a magnetic field.
Definition: KFitBase.cc:129
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::analysis::KFitBase::addParticle
enum KFitError::ECode addParticle(const Particle *particle)
Add a particle to the fitter.
Definition: KFitBase.cc:60
Belle2::analysis::KFitBase::getNDF
virtual int getNDF(void) const
Get an NDF of the fit.
Definition: KFitBase.cc:115
Belle2::analysis::KFitBase::setCorrelation
virtual enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &c)
Set a correlation matrix.
Definition: KFitBase.cc:71
Belle2::analysis::KFitBase::getErrorCode
enum KFitError::ECode getErrorCode(void) const
Get a code of the last error.
Definition: KFitBase.cc:102
Belle2::analysis::KFitTrack
KFitTrack is a container of the track information (Lorentz vector, position, and error matrix),...
Definition: KFitTrack.h:39
Belle2::analysis::KFitBase::m_TrackCount
int m_TrackCount
Number of tracks.
Definition: KFitBase.h:301
Belle2::analysis::KFitBase::m_al_0
CLHEP::HepMatrix m_al_0
See J.Tanaka Ph.D (2001) p136 for definition.
Definition: KFitBase.h:257
Belle2::analysis::KFitBase::getTrack
const KFitTrack getTrack(const int id) const
Get a specified track object.
Definition: KFitBase.cc:176
Belle2::analysis::KFitBase::m_d
CLHEP::HepMatrix m_d
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:268
Belle2::analysis::KFitBase::getCHIsq
virtual double getCHIsq(void) const
Get a chi-square of the fit.
Definition: KFitBase.cc:122
Belle2::Particle
Class to store reconstructed particles.
Definition: Particle.h:77
Belle2::analysis::KFitBase::m_V_Dt
CLHEP::HepMatrix m_V_Dt
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:289
Belle2::analysis::KFitBase::makeError2
const CLHEP::HepMatrix makeError2(const CLHEP::HepLorentzVector &p, const CLHEP::HepMatrix &e) const
Rebuild an error matrix from a Lorentz vector and an error matrix.
Definition: KFitBase.cc:297
Belle2::analysis::KFitBase::isTrackIDInRange
bool isTrackIDInRange(const int id) const
Check if the id is in the range.
Definition: KFitBase.cc:739
Belle2::analysis::KFitBase::getTrackPosition
const HepPoint3D getTrackPosition(const int id) const
Get a position of the track.
Definition: KFitBase.cc:162
Belle2::analysis::KFitError::ECode
ECode
ECode is a error code enumerate.
Definition: KFitError.h:43
Belle2::analysis::KFitBase::makeCoreMatrix
virtual enum KFitError::ECode makeCoreMatrix(void)=0
Build matrices using the kinematical constraint.
HepGeom::Point3D< double >
Belle2::analysis::KFitBase::makeError4
const CLHEP::HepMatrix makeError4(const CLHEP::HepLorentzVector &p, const CLHEP::HepMatrix &e) const
Rebuild an error matrix from a Lorentz vector and an error matrix.
Definition: KFitBase.cc:439
Belle2::analysis::KFitBase::m_V_E
CLHEP::HepMatrix m_V_E
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:281
Belle2::analysis::KFitBase::m_V_al_0
CLHEP::HepSymMatrix m_V_al_0
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:255
Belle2::analysis::KFitBase::m_FlagOverIteration
bool m_FlagOverIteration
Flag whether the iteration count exceeds the limit.
Definition: KFitBase.h:308
Belle2::analysis::KFitBase::m_BeforeCorrelation
std::vector< CLHEP::HepMatrix > m_BeforeCorrelation
Container of input correlation matrices.
Definition: KFitBase.h:251
Belle2::analysis::KFitBase::m_al_a
CLHEP::HepMatrix m_al_a
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:261
Belle2::analysis::KFitBase::getTrackCHIsq
virtual double getTrackCHIsq(const int id) const
Get a chi-square of the track.
Definition: KFitBase.cc:136
Belle2::analysis::KFitBase::getTrackMomentum
const CLHEP::HepLorentzVector getTrackMomentum(const int id) const
Get a Lorentz vector of the track.
Definition: KFitBase.cc:155