Belle II Software development
VertexFitKFit Class Reference

VertexFitKFit is a derived class from KFitBase to perform vertex-constraint kinematical fit. More...

#include <VertexFitKFit.h>

Inheritance diagram for VertexFitKFit:
KFitBase

Public Member Functions

 VertexFitKFit (void)
 Construct an object with no argument.
 
 ~VertexFitKFit (void)
 Destruct the object.
 
enum KFitError::ECode setInitialVertex (const HepPoint3D &v)
 Set an initial vertex point for the vertex-vertex constraint fit.
 
enum KFitError::ECode setInitialVertex (const ROOT::Math::XYZVector &v)
 Set an initial vertex point for the mass-vertex constraint fit.
 
enum KFitError::ECode setIpProfile (const HepPoint3D &ip, const CLHEP::HepSymMatrix &ipe)
 Set an IP-ellipsoid shape for the vertex constraint fit.
 
enum KFitError::ECode setIpTubeProfile (const CLHEP::HepLorentzVector &p, const HepPoint3D &x, const CLHEP::HepSymMatrix &e, const double q)
 Set a virtual IP-tube track for the vertex constraint fit.
 
enum KFitError::ECode setKnownVertex (const bool flag=true)
 Tell the object to perform a fit with vertex position fixed.
 
enum KFitError::ECode setCorrelationMode (const bool m)
 Tell the object to perform a fit with track correlations.
 
const HepPoint3D getVertex (const int flag=KFitConst::kAfterFit) const
 Get a vertex position.
 
const CLHEP::HepSymMatrix getVertexError (void) const
 Get a fitted vertex error matrix.
 
double getCHIsq (void) const override
 Get a chi-square of the fit.
 
double getCHIsqVertex (void) const
 Get a chi-square of the fit excluding IP-constraint part.
 
const CLHEP::HepMatrix getTrackVertexError (const int id) const
 Get a vertex error matrix of the track.
 
double getTrackCHIsq (const int id) const override
 Get a chi-square of the track.
 
double getTrackPartCHIsq (void) const
 Get a sum of the chi-square associated to the input tracks.
 
int getTrackPartNDF (void) const
 Get an NDF relevant to the getTrackPartCHIsq().
 
enum KFitError::ECode doFit (void)
 Perform a vertex-constraint fit.
 
enum KFitError::ECode updateMother (Particle *mother)
 Update mother particle.
 
enum KFitError::ECode addTrack (const KFitTrack &kp)
 Add a track to the fitter object.
 
enum KFitError::ECode addTrack (const CLHEP::HepLorentzVector &p, const HepPoint3D &x, const CLHEP::HepSymMatrix &e, const double q)
 Add a track to the fitter object with specifying its momentum, position, error matrix, and charge.
 
enum KFitError::ECode addParticle (const Particle *particle)
 Add a particle to the fitter.
 
virtual enum KFitError::ECode setCorrelation (const CLHEP::HepMatrix &c)
 Set a correlation matrix.
 
virtual enum KFitError::ECode setZeroCorrelation (void)
 Indicate no correlation between tracks.
 
enum KFitError::ECode setMagneticField (const double mf)
 Change a magnetic field from the default value KFitConst::kDefaultMagneticField.
 
enum KFitError::ECode getErrorCode (void) const
 Get a code of the last error.
 
int getTrackCount (void) const
 Get the number of added tracks.
 
virtual int getNDF (void) const
 Get an NDF of the fit.
 
double getMagneticField (void) const
 Get a magnetic field.
 
const CLHEP::HepLorentzVector getTrackMomentum (const int id) const
 Get a Lorentz vector of the track.
 
const HepPoint3D getTrackPosition (const int id) const
 Get a position of the track.
 
const CLHEP::HepSymMatrix getTrackError (const int id) const
 Get an error matrix of the track.
 
const KFitTrack getTrack (const int id) const
 Get a specified track object.
 
virtual const CLHEP::HepMatrix getCorrelation (const int id1, const int id2, const int flag=KFitConst::kAfterFit) const
 Get a correlation matrix between two tracks.
 
bool isFitted (void) const
 Return false if fit is not performed yet or performed fit is failed; otherwise true.
 

Protected Member Functions

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.
 
const CLHEP::HepMatrix makeError1 (const CLHEP::HepLorentzVector &p1, const CLHEP::HepLorentzVector &p2, const CLHEP::HepMatrix &e) const
 Rebuild an error matrix from a pair of Lorentz vectors and an error matrix.
 
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.
 
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.
 
const CLHEP::HepMatrix makeError3 (const CLHEP::HepLorentzVector &p1, const CLHEP::HepLorentzVector &p2, const CLHEP::HepMatrix &e, const bool is_fix_mass1, const bool is_fix_mass2) const
 Rebuild an error matrix from a pair of Lorentz vectors and an error matrix.
 
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.
 
virtual enum KFitError::ECode prepareCorrelation (void)
 Build a grand correlation matrix from input-track properties.
 
enum KFitError::ECode doFit1 (void)
 Perform a fit (used in MassFitKFit::doFit()).
 
enum KFitError::ECode doFit2 (void)
 Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).
 
bool isTrackIDInRange (const int id) const
 Check if the id is in the range.
 
bool isNonZeroEnergy (const CLHEP::HepLorentzVector &p) const
 Check if the energy is non-zero.
 

Protected Attributes

enum KFitError::ECode m_ErrorCode
 Error code.
 
bool m_FlagFitted
 Flag to indicate if the fit is performed and succeeded.
 
std::vector< KFitTrackm_Tracks
 Container of input tracks.
 
std::vector< CLHEP::HepMatrix > m_BeforeCorrelation
 Container of input correlation matrices.
 
CLHEP::HepSymMatrix m_V_al_0
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_al_0
 See J.Tanaka Ph.D (2001) p136 for definition.
 
CLHEP::HepMatrix m_al_1
 See J.Tanaka Ph.D (2001) p136 for definition.
 
CLHEP::HepMatrix m_al_a
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_property
 Container of charges and masses.
 
CLHEP::HepMatrix m_D
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_d
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_V_D
 See J.Tanaka Ph.D (2001) p138 for definition.
 
CLHEP::HepMatrix m_V_al_1
 See J.Tanaka Ph.D (2001) p138 for definition.
 
CLHEP::HepMatrix m_lam
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_E
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_V_E
 See J.Tanaka Ph.D (2001) p138 for definition.
 
CLHEP::HepMatrix m_lam0
 See J.Tanaka Ph.D (2001) p138 for definition.
 
CLHEP::HepMatrix m_v
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_v_a
 See J.Tanaka Ph.D (2001) p137 for definition.
 
CLHEP::HepMatrix m_V_Dt
 See J.Tanaka Ph.D (2001) p138 for definition.
 
CLHEP::HepMatrix m_Cov_v_al_1
 See J.Tanaka Ph.D (2001) p137 for definition.
 
int m_NDF
 NDF of the fit.
 
double m_CHIsq
 chi-square of the fit.
 
int m_TrackCount
 Number of tracks.
 
int m_NecessaryTrackCount
 Number needed tracks to perform fit.
 
bool m_FlagCorrelation
 Flag whether a correlation among tracks exists.
 
bool m_FlagOverIteration
 Flag whether the iteration count exceeds the limit.
 
double m_MagneticField
 Magnetic field.
 

Private Member Functions

enum KFitError::ECode doFit3 (void)
 Perform a standard vertex-constraint fit including IP-tube constraint.
 
enum KFitError::ECode doFit4 (void)
 Perform a IP-ellipsoid and vertex-constraint fit.
 
enum KFitError::ECode doFit5 (void)
 Perform a fixed-vertex-position fit mainly for slow pion.
 
enum KFitError::ECode prepareInputMatrix (void) override
 Build grand matrices for minimum search from input-track properties.
 
enum KFitError::ECode prepareInputSubMatrix (void) override
 Build sub-matrices for minimum search from input-track properties.
 
enum KFitError::ECode prepareOutputMatrix (void) override
 Build an output error matrix.
 
enum KFitError::ECode makeCoreMatrix (void) override
 Build matrices using the kinematical constraint.
 
enum KFitError::ECode calculateNDF (void) override
 Calculate an NDF of the fit.
 
enum KFitError::ECode appendTube (void)
 Add the virtual tube track to m_Tracks just before the internal minimization call.
 
enum KFitError::ECode deleteTube (void)
 Delete the virtual tube track to m_Tracks just after the internal minimization call.
 

Private Attributes

bool m_CorrelationMode
 Flag controlled by setCorrelationMode().
 
double m_EachCHIsq [KFitConst::kMaxTrackCount2]
 Container of chi-square's of the input tracks.
 
double m_CHIsqVertex
 chi-square of the fit excluding IP-constraint part.
 
HepPoint3D m_BeforeVertex
 Vertex position before the fit.
 
HepPoint3D m_AfterVertex
 Vertex position after the fit.
 
CLHEP::HepSymMatrix m_AfterVertexError
 Vertex error matrix after the fit.
 
std::vector< CLHEP::HepMatrix > m_AfterTrackVertexError
 Array of vertex error matrices after the fit.
 
bool m_FlagBeam
 Flag if to perform IP-ellipsoid constraint fit.
 
CLHEP::HepSymMatrix m_BeamError
 Error matrix modeling the IP ellipsoid.
 
bool m_FlagKnownVertex
 Flag controlled by setKnownVertex().
 
bool m_FlagTube
 Flag if to perform IP-tube constraint fit.
 
int m_iTrackTube
 ID of the virtual tube track in the m_Tracks.
 
KFitTrack m_TubeTrack
 Entity of the virtual IP-tube track.
 

Detailed Description

VertexFitKFit is a derived class from KFitBase to perform vertex-constraint kinematical fit.

Definition at line 34 of file VertexFitKFit.h.

Constructor & Destructor Documentation

◆ VertexFitKFit()

VertexFitKFit ( void  )

Construct an object with no argument.

Definition at line 28 of file VertexFitKFit.cc.

28 :
29 m_BeforeVertex(HepPoint3D(0, 0, 0)),
30 m_AfterVertexError(HepSymMatrix(3, 0)),
31 m_BeamError(HepSymMatrix(3, 0))
32{
33 m_CorrelationMode = false;
34 m_FlagFitted = false;
35 m_FlagKnownVertex = false;
36 m_FlagBeam = false;
37 m_FlagTube = false;
38 m_iTrackTube = -1;
39 m_CHIsqVertex = 0;
41 m_V_E = HepMatrix(3, 3, 0);
42 m_v = HepMatrix(3, 1, 0);
43 m_v_a = HepMatrix(3, 1, 0);
44
46}
int m_NecessaryTrackCount
Number needed tracks to perform fit.
Definition: KFitBase.h:303
CLHEP::HepMatrix m_v_a
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:287
CLHEP::HepMatrix m_V_E
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:281
bool m_FlagFitted
Flag to indicate if the fit is performed and succeeded.
Definition: KFitBase.h:245
CLHEP::HepMatrix m_v
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:285
bool m_FlagTube
Flag if to perform IP-tube constraint fit.
bool m_FlagKnownVertex
Flag controlled by setKnownVertex().
CLHEP::HepSymMatrix m_BeamError
Error matrix modeling the IP ellipsoid.
double m_EachCHIsq[KFitConst::kMaxTrackCount2]
Container of chi-square's of the input tracks.
bool m_FlagBeam
Flag if to perform IP-ellipsoid constraint fit.
int m_iTrackTube
ID of the virtual tube track in the m_Tracks.
double m_CHIsqVertex
chi-square of the fit excluding IP-constraint part.
CLHEP::HepSymMatrix m_AfterVertexError
Vertex error matrix after the fit.
bool m_CorrelationMode
Flag controlled by setCorrelationMode().
HepPoint3D m_BeforeVertex
Vertex position before the fit.
static const int kMaxTrackCount2
Maximum track size (internal use)
Definition: KFitConst.h:42

Member Function Documentation

◆ addParticle()

enum KFitError::ECode addParticle ( const Particle particle)
inherited

Add a particle to the fitter.

The function gets track parameters from the Particle dataobject and calls addTrack().

Parameters
[in]particleParticle.
Returns
error code (zero if success)

Definition at line 59 of file KFitBase.cc.

60{
61 return addTrack(
62 ROOTToCLHEP::getHepLorentzVector(particle->get4Vector()),
63 ROOTToCLHEP::getPoint3D(particle->getVertex()),
64 ROOTToCLHEP::getHepSymMatrix(particle->getMomentumVertexErrorMatrix()),
65 particle->getCharge());
66}
enum KFitError::ECode addTrack(const KFitTrack &kp)
Add a track to the fitter object.
Definition: KFitBase.cc:38

◆ addTrack() [1/2]

enum KFitError::ECode addTrack ( const CLHEP::HepLorentzVector &  p,
const HepPoint3D x,
const CLHEP::HepSymMatrix &  e,
const double  q 
)
inherited

Add a track to the fitter object with specifying its momentum, position, error matrix, and charge.

This function internally calls addTrack(const KFitTrack &kp).

Parameters
pLorentz vector of the track
xposition of the track
e(7x7) error matrix of the track
qcharge of the track
Returns
error code (zero if success)

Definition at line 47 of file KFitBase.cc.

47 {
48 if (e.num_row() != KFitConst::kNumber7)
49 {
51 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
52 return m_ErrorCode;
53 }
54
55 return this->addTrack(KFitTrack(p, x, e, q));
56}
enum KFitError::ECode m_ErrorCode
Error code.
Definition: KFitBase.h:243
static void displayError(const char *file, const int line, const char *func, const enum ECode code)
Display a description of error and its location.
Definition: KFitError.h:72
@ kBadMatrixSize
Wrong correlation matrix size.
Definition: KFitError.h:49
KFitTrack is a container of the track information (Lorentz vector, position, and error matrix),...
Definition: KFitTrack.h:38
static const int kNumber7
Constant 7 to check matrix size (internal use)
Definition: KFitConst.h:32

◆ addTrack() [2/2]

enum KFitError::ECode addTrack ( const KFitTrack kp)
inherited

Add a track to the fitter object.

Parameters
kpobject of the track
Returns
error code (zero if success)

Definition at line 38 of file KFitBase.cc.

38 {
39 m_Tracks.push_back(p);
40 m_TrackCount = m_Tracks.size();
41
43}
std::vector< KFitTrack > m_Tracks
Container of input tracks.
Definition: KFitBase.h:249
int m_TrackCount
Number of tracks.
Definition: KFitBase.h:301

◆ appendTube()

enum KFitError::ECode appendTube ( void  )
private

Add the virtual tube track to m_Tracks just before the internal minimization call.

Returns
error code (zero if success)

Definition at line 869 of file VertexFitKFit.cc.

869 {
871
872 if (m_iTrackTube != -1)
873 {
874 char buf[1024];
875 sprintf(buf, "%s:%s(): internal error; duplicated appendTube() call?", __FILE__, __func__);
876 B2FATAL(buf);
877 }
878
879 m_Tracks.push_back(m_TubeTrack);
880 m_TrackCount = m_Tracks.size();
882
884}
KFitTrack m_TubeTrack
Entity of the virtual IP-tube track.

◆ calculateNDF()

enum KFitError::ECode calculateNDF ( void  )
overrideprivatevirtual

Calculate an NDF of the fit.

Returns
error code (zero if success)

Implements KFitBase.

Definition at line 858 of file VertexFitKFit.cc.

858 {
859 if (m_FlagBeam) m_NDF = 2 * m_TrackCount;
860 else if (m_FlagTube) m_NDF = 2 * (m_TrackCount - 1) - 1;
861 else if (m_FlagKnownVertex) m_NDF = 2 * m_TrackCount;
862 else m_NDF = 2 * m_TrackCount - 3;
863
865}
int m_NDF
NDF of the fit.
Definition: KFitBase.h:295

◆ deleteTube()

enum KFitError::ECode deleteTube ( void  )
private

Delete the virtual tube track to m_Tracks just after the internal minimization call.

Returns
error code (zero if success)

Definition at line 888 of file VertexFitKFit.cc.

888 {
890
891 if (m_iTrackTube == -1)
892 {
893 char buf[1024];
894 sprintf(buf, "%s:%s(): internal error; duplicated deleteTube() call?", __FILE__, __func__);
895 B2FATAL(buf);
896 }
897
898 m_Tracks.pop_back();
899 m_TrackCount = m_Tracks.size();
900 m_iTrackTube = -1;
901
903}

◆ doFit()

enum KFitError::ECode doFit ( void  )

Perform a vertex-constraint fit.

Returns
error code (zero if success)

Definition at line 217 of file VertexFitKFit.cc.

217 {
218 if (m_FlagTube) this->appendTube();
219
220 if (m_FlagBeam) m_ErrorCode = this->doFit4();
221 else if (m_FlagKnownVertex) m_ErrorCode = this->doFit5();
222 else if (m_CorrelationMode) m_ErrorCode = this->doFit2();
223 else
224 m_ErrorCode = this->doFit3();
225
226 const enum KFitError::ECode tmp_ErrorCode = m_ErrorCode;
227
228 if (m_FlagTube) this->deleteTube();
229
230 if (tmp_ErrorCode == KFitError::kNoError) m_FlagFitted = true;
231
232 return m_ErrorCode = tmp_ErrorCode;
233}
enum KFitError::ECode doFit2(void)
Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).
Definition: KFitBase.cc:578
ECode
ECode is a error code enumerate.
Definition: KFitError.h:34
enum KFitError::ECode doFit5(void)
Perform a fixed-vertex-position fit mainly for slow pion.
enum KFitError::ECode doFit4(void)
Perform a IP-ellipsoid and vertex-constraint fit.
enum KFitError::ECode deleteTube(void)
Delete the virtual tube track to m_Tracks just after the internal minimization call.
enum KFitError::ECode doFit3(void)
Perform a standard vertex-constraint fit including IP-tube constraint.
enum KFitError::ECode appendTube(void)
Add the virtual tube track to m_Tracks just before the internal minimization call.

◆ doFit1()

enum KFitError::ECode doFit1 ( void  )
protectedinherited

Perform a fit (used in MassFitKFit::doFit()).

Returns
error code (zero if success)

Definition at line 502 of file KFitBase.cc.

502 {
504
506 {
508 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
509 return m_ErrorCode;
510 }
511
514
515
516 double chisq = 0;
517 double tmp_chisq = KFitConst::kInitialCHIsq;
518 int err_inverse = 0;
519
520 HepMatrix tmp_al_1(m_al_1);
521 HepMatrix tmp_V_al_1(m_V_al_1);
522
523 m_al_a = m_al_0;
524 HepMatrix tmp_al_a(m_al_a);
525
526
527 for (int i = 0; i < KFitConst::kMaxIterationCount; i++)
528 {
530
531 m_V_D = (m_V_al_0.similarity(m_D)).inverse(err_inverse);
532 if (err_inverse != 0) {
534 return m_ErrorCode;
535 }
536
537 m_lam = m_V_D * (m_D * (m_al_0 - m_al_1) + m_d);
538 chisq = ((m_lam.T()) * (m_D * (m_al_0 - m_al_1) + m_d))(1, 1);
539 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
540 m_V_al_1 = m_V_al_0 - m_V_al_0 * (m_D.T()) * m_V_D * m_D * m_V_al_0;
541
542 if (tmp_chisq <= chisq) {
543 if (i == 0) {
545 return m_ErrorCode;
546 } else {
547 chisq = tmp_chisq;
548 m_al_1 = tmp_al_1;
549 m_al_a = tmp_al_a;
550 m_V_al_1 = tmp_V_al_1;
551 break;
552 }
553 } else {
554 tmp_chisq = chisq;
555 tmp_al_a = tmp_al_1;
556 tmp_al_1 = m_al_1;
557 tmp_V_al_1 = m_V_al_1;
558 if (i == KFitConst::kMaxIterationCount - 1) {
559 m_al_a = tmp_al_1;
560 m_FlagOverIteration = true;
561 }
562 }
563 }
564
566
568
569 m_CHIsq = chisq;
570
571 m_FlagFitted = true;
572
574}
virtual enum KFitError::ECode prepareInputMatrix(void)=0
Build grand matrices for minimum search from input-track properties.
virtual enum KFitError::ECode prepareOutputMatrix(void)=0
Build an output error matrix.
CLHEP::HepMatrix m_al_1
See J.Tanaka Ph.D (2001) p136 for definition.
Definition: KFitBase.h:259
CLHEP::HepMatrix m_lam
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:276
bool m_FlagOverIteration
Flag whether the iteration count exceeds the limit.
Definition: KFitBase.h:308
CLHEP::HepMatrix m_V_al_1
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:274
CLHEP::HepMatrix m_d
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:268
CLHEP::HepMatrix m_al_a
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:261
CLHEP::HepMatrix m_D
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:266
CLHEP::HepMatrix m_V_D
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:271
CLHEP::HepSymMatrix m_V_al_0
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:255
virtual enum KFitError::ECode makeCoreMatrix(void)=0
Build matrices using the kinematical constraint.
double m_CHIsq
chi-square of the fit.
Definition: KFitBase.h:297
virtual enum KFitError::ECode calculateNDF(void)=0
Calculate an NDF of the fit.
CLHEP::HepMatrix m_al_0
See J.Tanaka Ph.D (2001) p136 for definition.
Definition: KFitBase.h:257
@ kCannotGetMatrixInverse
Cannot calculate matrix inverse (bad track property or internal error)
Definition: KFitError.h:58
@ kBadInitialCHIsq
Bad initial chi-square (internal error)
Definition: KFitError.h:53
@ kBadTrackSize
Track count too small to perform fit.
Definition: KFitError.h:47
static constexpr double kInitialCHIsq
Initial chi-square value (internal use)
Definition: KFitConst.h:48
static const int kMaxIterationCount
Maximum iteration step (internal use)
Definition: KFitConst.h:45

◆ doFit2()

enum KFitError::ECode doFit2 ( void  )
protectedinherited

Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).

Returns
error code (zero if success)

Definition at line 578 of file KFitBase.cc.

578 {
580
582 {
584 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
585 return m_ErrorCode;
586 }
587
590
591
592 double chisq = 0;
593 double tmp2_chisq = KFitConst::kInitialCHIsq;
594 int err_inverse = 0;
595
596 m_al_a = m_al_0;
597 HepMatrix tmp_al_a(m_al_a);
598
599 HepMatrix tmp_D(m_D), tmp_E(m_E);
600 HepMatrix tmp_V_D(m_V_D), tmp_V_E(m_V_E);
601 HepMatrix tmp_lam0(m_lam0), tmp_v_a(m_v_a);
602
603 HepMatrix tmp2_D(m_D), tmp2_E(m_E);
604 HepMatrix tmp2_V_D(m_V_D), tmp2_V_E(m_V_E);
605 HepMatrix tmp2_lam0(m_lam0), tmp2_v_a(m_v_a), tmp2_v(m_v_a);
606
607
608 for (int j = 0; j < KFitConst::kMaxIterationCount; j++) // j'th loop start
609 {
610
611 double tmp_chisq = KFitConst::kInitialCHIsq;
612
613 for (int i = 0; i < KFitConst::kMaxIterationCount; i++) { // i'th loop start
614
617
618 m_V_D = (m_V_al_0.similarity(m_D)).inverse(err_inverse);
619 if (err_inverse) {
621 return m_ErrorCode;
622 }
623
624 m_V_E = ((m_E.T()) * m_V_D * m_E).inverse(err_inverse);
625 if (err_inverse) {
627 return m_ErrorCode;
628 }
629 m_lam0 = m_V_D * (m_D * (m_al_0 - m_al_1) + m_d);
630 chisq = ((m_lam0.T()) * (m_D * (m_al_0 - m_al_1) + m_E * (m_v - m_v_a) + m_d))(1, 1);
631 m_v_a = m_v_a - m_V_E * (m_E.T()) * m_lam0;
632
633 if (tmp_chisq <= chisq) {
634 if (i == 0) {
636 return m_ErrorCode;
637 } else {
638 chisq = tmp_chisq;
639 m_v_a = tmp_v_a;
640 m_V_E = tmp_V_E;
641 m_V_D = tmp_V_D;
642 m_lam0 = tmp_lam0;
643 m_E = tmp_E;
644 m_D = tmp_D;
645 break;
646 }
647 } else {
648 tmp_chisq = chisq;
649 tmp_v_a = m_v_a;
650 tmp_V_E = m_V_E;
651 tmp_V_D = m_V_D;
652 tmp_lam0 = m_lam0;
653 tmp_E = m_E;
654 tmp_D = m_D;
655 if (i == KFitConst::kMaxIterationCount - 1) {
656 m_FlagOverIteration = true;
657 }
658 }
659 } // i'th loop over
660
661
662 m_al_a = m_al_1;
663 m_lam = m_lam0 - m_V_D * m_E * m_V_E * (m_E.T()) * m_lam0;
664 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
665
666 if (j == 0) {
667
668 tmp2_chisq = chisq;
669 tmp2_v_a = m_v_a;
670 tmp2_v = m_v;
671 tmp2_V_E = m_V_E;
672 tmp2_V_D = m_V_D;
673 tmp2_lam0 = m_lam0;
674 tmp2_E = m_E;
675 tmp2_D = m_D;
676 tmp_al_a = m_al_a;
677
678 } else {
679
680 if (tmp2_chisq <= chisq) {
681 chisq = tmp2_chisq;
682 m_v_a = tmp2_v_a;
683 m_v = tmp2_v;
684 m_V_E = tmp2_V_E;
685 m_V_D = tmp2_V_D;
686 m_lam0 = tmp2_lam0;
687 m_E = tmp2_E;
688 m_D = tmp2_D;
689 m_al_a = tmp_al_a;
690 break;
691 } else {
692 tmp2_chisq = chisq;
693 tmp2_v_a = m_v_a;
694 tmp2_v = m_v;
695 tmp2_V_E = m_V_E;
696 tmp2_V_D = m_V_D;
697 tmp2_lam0 = m_lam0;
698 tmp2_E = m_E;
699 tmp2_D = m_D;
700 tmp_al_a = m_al_a;
701 if (j == KFitConst::kMaxIterationCount - 1) {
702 m_FlagOverIteration = true;
703 }
704 }
705 }
706 } // j'th loop over
707
708
710
711 m_lam = m_lam0 - m_V_D * m_E * m_V_E * (m_E.T()) * m_lam0;
712 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
713 m_V_Dt = m_V_D - m_V_D * m_E * m_V_E * (m_E.T()) * m_V_D;
714 m_V_al_1 = m_V_al_0 - m_V_al_0 * (m_D.T()) * m_V_Dt * m_D * m_V_al_0;
715 m_Cov_v_al_1 = -m_V_E * (m_E.T()) * m_V_D * m_D * m_V_al_0;
716
718
719 m_CHIsq = chisq;
720
721 m_FlagFitted = true;
722
724}
CLHEP::HepMatrix m_V_Dt
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:289
CLHEP::HepMatrix m_E
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:279
virtual enum KFitError::ECode prepareInputSubMatrix(void)=0
Build sub-matrices for minimum search from input-track properties.
CLHEP::HepMatrix m_lam0
See J.Tanaka Ph.D (2001) p138 for definition.
Definition: KFitBase.h:283
CLHEP::HepMatrix m_Cov_v_al_1
See J.Tanaka Ph.D (2001) p137 for definition.
Definition: KFitBase.h:291

◆ doFit3()

enum KFitError::ECode doFit3 ( void  )
private

Perform a standard vertex-constraint fit including IP-tube constraint.

Returns
error code (zero if success)

Definition at line 237 of file VertexFitKFit.cc.

237 {
238 // use small Matrix --> No Correlation
240
242 {
244 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
245 return m_ErrorCode;
246 }
247
250
251
252 double chisq = 0;
253 double tmp2_chisq = KFitConst::kInitialCHIsq;
254 int err_inverse = 0;
255
256 m_al_a = m_al_0;
257 HepMatrix tmp_al_a(m_al_a);
258
259 HepMatrix tmp_D(m_D), tmp_E(m_E);
260 HepMatrix tmp_V_D(m_V_D), tmp_V_E(m_V_E);
261 HepMatrix tmp_lam0(m_lam0), tmp_v_a(m_v_a);
262
263 HepMatrix tmp2_D(m_D), tmp2_E(m_E);
264 HepMatrix tmp2_V_D(m_V_D), tmp2_V_E(m_V_E);
265 HepMatrix tmp2_lam0(m_lam0), tmp2_v_a(m_v_a);
266
267 std::vector<double> tmp_each_chisq(m_TrackCount);
268 std::vector<double> tmp2_each_chisq(m_TrackCount);
269
270 for (int j = 0; j < KFitConst::kMaxIterationCount; j++) // j'th loop start
271 {
272
273 double tmp_chisq = KFitConst::kInitialCHIsq;
274
275 for (int i = 0; i < KFitConst::kMaxIterationCount; i++) { // i'th loop start
276
279
280 HepMatrix tV_Ein(3, 3, 0);
281 chisq = 0;
282
283 for (int k = 0; k < m_TrackCount; k++) { // k'th loop start
284
285 HepMatrix tD = m_D.sub(2 * k + 1, 2 * (k + 1), KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1)); // 2x6
286 HepMatrix tV_D = ((m_V_al_0.sub(KFitConst::kNumber6 * k + 1,
287 (int)(KFitConst::kNumber6 * (k + 1)))).similarity(tD)).inverse(err_inverse); // 2x2
288 if (err_inverse) {
290 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
291 return m_ErrorCode;
292 }
293
294 m_V_D.sub(2 * k + 1, 2 * k + 1, tV_D);
295 HepMatrix tE = m_E.sub(2 * k + 1, 2 * (k + 1), 1, 3); // 2x3
296 tV_Ein += (tE.T()) * tV_D * tE; // 3x3
297 HepMatrix tDeltaAl = (m_al_0 - m_al_1).sub(KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1), 1, 1); // 6x1
298 HepMatrix td = m_d.sub(2 * k + 1, 2 * (k + 1), 1, 1); // 2x1
299 HepMatrix tlam0 = tV_D * (tD * tDeltaAl + td); // 2x2x(2x6x6x1+2x1) = 2x1
300 m_lam0.sub(2 * k + 1, 1, tlam0);
301 m_EachCHIsq[k] = ((tlam0.T()) * (tD * tDeltaAl + tE * (m_v - m_v_a) + td))(1, 1); // 1x2x(2x6x6x1+2x3x3x1+2x1)
302 chisq += m_EachCHIsq[k];
303 } // k'th loop over
304
305 m_V_E = tV_Ein.inverse(err_inverse);
306 if (err_inverse) {
308 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
309 return m_ErrorCode;
310 }
311
312 m_v_a = m_v_a - m_V_E * (m_E.T()) * m_lam0;
313
314 if (tmp_chisq <= chisq) {
315 if (i == 0) {
317 } else {
318 for (int k = 0; k < m_TrackCount; k++) m_EachCHIsq[k] = tmp_each_chisq[k];
319 chisq = tmp_chisq;
320 m_v_a = tmp_v_a;
321 m_V_E = tmp_V_E;
322 m_V_D = tmp_V_D;
323 m_lam0 = tmp_lam0;
324 m_E = tmp_E;
325 m_D = tmp_D;
326 }
327 break;
328 } else {
329 for (int k = 0; k < m_TrackCount; k++) tmp_each_chisq[k] = m_EachCHIsq[k];
330 tmp_chisq = chisq;
331 tmp_v_a = m_v_a;
332 tmp_V_E = m_V_E;
333 tmp_V_D = m_V_D;
334 tmp_lam0 = m_lam0;
335 tmp_E = m_E;
336 tmp_D = m_D;
337 if (i == KFitConst::kMaxIterationCount - 1) {
338 m_FlagOverIteration = true;
339 }
340 }
341 } // i'th loop over
342
343 m_al_a = m_al_1;
344 m_lam = m_lam0 - m_V_D * m_E * m_V_E * (m_E.T()) * m_lam0;
345 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
346
347 if (j == 0) {
348
349 for (int k = 0; k < m_TrackCount; k++) tmp2_each_chisq[k] = m_EachCHIsq[k];
350 tmp2_chisq = chisq;
351 tmp2_v_a = m_v_a;
352 tmp2_V_E = m_V_E;
353 tmp2_V_D = m_V_D;
354 tmp2_lam0 = m_lam0;
355 tmp2_E = m_E;
356 tmp2_D = m_D;
357 tmp_al_a = m_al_a;
358
359 } else {
360
361 if (tmp2_chisq <= chisq) {
362 for (int k = 0; k < m_TrackCount; k++) m_EachCHIsq[k] = tmp2_each_chisq[k];
363 chisq = tmp2_chisq;
364 m_v_a = tmp2_v_a;
365 m_V_E = tmp2_V_E;
366 m_V_D = tmp2_V_D;
367 m_lam0 = tmp2_lam0;
368 m_E = tmp2_E;
369 m_D = tmp2_D;
370 m_al_a = tmp_al_a;
371 break;
372 } else {
373 for (int k = 0; k < m_TrackCount; k++) tmp2_each_chisq[k] = m_EachCHIsq[k];
374 tmp2_chisq = chisq;
375 tmp2_v_a = m_v_a;
376 tmp2_V_E = m_V_E;
377 tmp2_V_D = m_V_D;
378 tmp2_lam0 = m_lam0;
379 tmp2_E = m_E;
380 tmp2_D = m_D;
381 tmp_al_a = m_al_a;
382 }
383 }
384 } // j'th loop over
385
386
388
389 m_lam = m_lam0 - m_V_D * m_E * m_V_E * (m_E.T()) * m_lam0;
390 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
391 m_V_Dt = m_V_D - m_V_D * m_E * m_V_E * (m_E.T()) * m_V_D;
392 m_V_al_1 = m_V_al_0 - m_V_al_0 * (m_D.T()) * m_V_Dt * m_D * m_V_al_0;
393 m_Cov_v_al_1 = -m_V_E * (m_E.T()) * m_V_D * m_D * m_V_al_0;
394
396
397 m_CHIsq = chisq;
398
400}
enum KFitError::ECode prepareInputMatrix(void) override
Build grand matrices for minimum search from input-track properties.
enum KFitError::ECode calculateNDF(void) override
Calculate an NDF of the fit.
enum KFitError::ECode prepareInputSubMatrix(void) override
Build sub-matrices for minimum search from input-track properties.
enum KFitError::ECode makeCoreMatrix(void) override
Build matrices using the kinematical constraint.
enum KFitError::ECode prepareOutputMatrix(void) override
Build an output error matrix.
static const int kNumber6
Constant 6 to check matrix size (internal use)
Definition: KFitConst.h:30

◆ doFit4()

enum KFitError::ECode doFit4 ( void  )
private

Perform a IP-ellipsoid and vertex-constraint fit.

Returns
error code (zero if success)

Definition at line 404 of file VertexFitKFit.cc.

404 {
405 // included beam position constraint (only no correlation)
407
409 {
411 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
412 return m_ErrorCode;
413 }
414
417
418
419 double chisq = 0;
420 double tmp_chisq = KFitConst::kInitialCHIsq;
421 int err_inverse = 0;
422
423 m_al_a = m_al_0;
424 HepMatrix tmp_al_a(m_al_a);
425
426 HepMatrix tmp_D(m_D), tmp_E(m_E);
427 HepMatrix tmp_lam(m_lam);
428
429 // vertex
430 m_v[0][0] = m_BeforeVertex.x();
431 m_v[1][0] = m_BeforeVertex.y();
432 m_v[2][0] = m_BeforeVertex.z();
433
434 std::vector<double> tmp_each_chisq(m_TrackCount);
435 double tmp_vertex_chisq = 1.e+30; // An init-value is not needed but the C++ compiler requires the init-value.
436
437 // to avoid overestimation of vertex-z error.
438 bool it_flag = false;
439
440 for (int i = 0; i < KFitConst::kMaxIterationCount ; i++)
441 {
442
444
445 chisq = 0;
446
447 HepMatrix tV_Dtin = m_V_al_0.similarity(m_D) + m_BeamError.similarity(m_E);
448 HepMatrix tV_Dt = tV_Dtin.inverse(err_inverse);
449 if (err_inverse) {
451 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
452 return m_ErrorCode;
453 }
454 m_lam = tV_Dt * (m_D * (m_al_0 - m_al_1) + m_E * (m_v - m_v_a) + m_d); // (2*nTrk)x1
455 for (int k = 0; k < m_TrackCount; k++) {
456 HepMatrix tD = m_D.sub(2 * k + 1, 2 * (k + 1), KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1)); // 2x6
457 HepMatrix tDeltaAl = (m_al_0 - m_al_1).sub(KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1), 1, 1); // 6x1
458 HepMatrix td = m_d.sub(2 * k + 1, 2 * (k + 1), 1, 1); // 2x1
459 HepMatrix tE = m_E.sub(2 * k + 1, 2 * (k + 1), 1, 3); // 2x3
460 chisq += ((m_lam.sub(2 * k + 1, 2 * (k + 1), 1, 1).T()) * (tD * tDeltaAl + tE * (m_v - m_v_a) + td))(1,
461 1); // 1x2x(2x6x6x1+2x3x3x1+2x1)
462 m_EachCHIsq[k] = (m_lam.sub(2 * k + 1, 2 * (k + 1), 1, 1).T() * tD * m_V_al_0.sub(KFitConst::kNumber6 * k + 1,
463 KFitConst::kNumber6 * (k + 1)) * (tD.T()) * m_lam.sub(2 * k + 1, 2 * (k + 1), 1, 1))(1, 1);
464 }
465
466 m_CHIsqVertex = (m_lam.T() * m_E * m_BeamError * (m_E.T()) * m_lam)(1, 1);
467 m_al_a = m_al_1;
468 m_v_a = m_v - m_BeamError * (m_E.T()) * m_lam;
469 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
470
471 if (tmp_chisq <= chisq && it_flag) {
472 if (i == 0) {
474 } else {
475 for (int k = 0; k < m_TrackCount; k++) m_EachCHIsq[k] = tmp_each_chisq[k];
476 m_CHIsqVertex = tmp_vertex_chisq;
477 chisq = tmp_chisq;
478 m_lam = tmp_lam;
479 m_E = tmp_E;
480 m_D = tmp_D;
481 m_al_a = tmp_al_a;
482 }
483 break;
484 } else {
485 if (tmp_chisq <= chisq) it_flag = true;
486 for (int k = 0; k < m_TrackCount; k++) tmp_each_chisq[k] = m_EachCHIsq[k];
487 tmp_vertex_chisq = m_CHIsqVertex;
488 tmp_chisq = chisq;
489 tmp_lam = m_lam;
490 tmp_E = m_E;
491 tmp_D = m_D;
492 tmp_al_a = m_al_a;
493 if (i == KFitConst::kMaxIterationCount - 1) {
494 m_FlagOverIteration = true;
495 }
496 }
497 }
498
499
501
502 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
503 m_v_a = m_v - m_BeamError * (m_E.T()) * m_lam;
504 HepMatrix tV_Dtin = m_V_al_0.similarity(m_D) + m_BeamError.similarity(m_E);
505 m_V_Dt = tV_Dtin.inverse(err_inverse);
506 if (err_inverse)
507 {
509 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
510 return m_ErrorCode;
511 }
512
513 m_V_al_1 = m_V_al_0 - m_V_al_0 * (m_D.T()) * m_V_Dt * m_D * m_V_al_0;
515 // m_V_v is m_V_E
516 // --> need to replace m_V_E for my implementation.
518
520
521 m_CHIsq = chisq;
522
524}

◆ doFit5()

enum KFitError::ECode doFit5 ( void  )
private

Perform a fixed-vertex-position fit mainly for slow pion.

Returns
error code (zero if success)

Definition at line 528 of file VertexFitKFit.cc.

528 {
529 // known vertex --> do not find vertex. (only no correlation)
531
533 {
535 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
536 return m_ErrorCode;
537 }
538
541
542
543 double chisq = 0;
544 double tmp_chisq = KFitConst::kInitialCHIsq;
545 int err_inverse = 0;
546
547 m_al_a = m_al_0;
548 HepMatrix tmp_al_a(m_al_a);
549
550 HepMatrix tmp_al_0(m_al_1);
551 HepMatrix tmp_V_al_0(m_V_al_1);
552
553 std::vector<double> tmp_each_chisq(m_TrackCount);
554
555 for (int i = 0; i < KFitConst::kMaxIterationCount; i++)
556 {
557
559
560 chisq = 0;
561
562 for (int k = 0; k < m_TrackCount; k++) {
563 HepMatrix tD = m_D.sub(2 * k + 1, 2 * (k + 1), KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1)); // 2x6
564 HepMatrix tV_D = ((m_V_al_0.sub(KFitConst::kNumber6 * k + 1,
565 (int)(KFitConst::kNumber6 * (k + 1)))).similarity(tD)).inverse(err_inverse); // 2x2
566 if (err_inverse) {
568 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
569 return m_ErrorCode;
570 }
571 m_V_D.sub(2 * k + 1, 2 * k + 1, tV_D);
572
573 HepMatrix tDeltaAl = (m_al_0 - m_al_1).sub(KFitConst::kNumber6 * k + 1, KFitConst::kNumber6 * (k + 1), 1, 1); // 6x1
574 HepMatrix td = m_d.sub(2 * k + 1, 2 * (k + 1), 1, 1); // 2x1
575 HepMatrix tlam = tV_D * (tD * tDeltaAl + td); // 2x2x(2x6x6x1+2x1) = 2x1
576 m_lam.sub(2 * k + 1, 1, tlam);
577 m_EachCHIsq[k] = ((tlam.T()) * (tD * tDeltaAl + td))(1, 1); // 1x2x(2x6x6x1+2x1)
578 chisq += m_EachCHIsq[k];
579 }
580
581 m_al_a = m_al_1;
582 m_al_1 = m_al_0 - m_V_al_0 * (m_D.T()) * m_lam;
583 m_V_al_1 = m_V_al_0 - m_V_al_0 * (m_D.T()) * m_V_D * m_D * m_V_al_0;
584
585 if (tmp_chisq <= chisq) {
586 if (i == 0) {
588 } else {
589 for (int k = 0; k < m_TrackCount; k++) m_EachCHIsq[k] = tmp_each_chisq[k];
590 chisq = tmp_chisq;
591 m_al_1 = tmp_al_0;
592 m_V_al_1 = tmp_V_al_0;
593 m_al_a = tmp_al_a;
594 }
595 break;
596 } else {
597 for (int k = 0; k < m_TrackCount; k++) tmp_each_chisq[k] = m_EachCHIsq[k];
598 tmp_chisq = chisq;
599 tmp_al_0 = m_al_1;
600 tmp_V_al_0 = m_V_al_1;
601 tmp_al_a = m_al_a;
602 if (i == KFitConst::kMaxIterationCount - 1) {
603 m_FlagOverIteration = true;
604 }
605 }
606 }
607
608
610
612
613 m_CHIsq = chisq;
614
616}

◆ getCHIsq()

double getCHIsq ( void  ) const
overridevirtual

Get a chi-square of the fit.

Returns
chi-square of the fit

Reimplemented from KFitBase.

Definition at line 141 of file VertexFitKFit.cc.

142{
143 return KFitBase::getCHIsq();
144}
virtual double getCHIsq(void) const
Get a chi-square of the fit.
Definition: KFitBase.cc:121

◆ getCHIsqVertex()

double getCHIsqVertex ( void  ) const

Get a chi-square of the fit excluding IP-constraint part.

Returns
chi-square of the fit excluding IP-constraint part.

Definition at line 148 of file VertexFitKFit.cc.

149{
150 // only m_FlagBeam = 1
151 return m_CHIsqVertex;
152}

◆ getCorrelation()

const HepMatrix getCorrelation ( const int  id1,
const int  id2,
const int  flag = KFitConst::kAfterFit 
) const
virtualinherited

Get a correlation matrix between two tracks.

Parameters
id1first track id
id2second track id
flagKFitConst::kBeforeFit or KFitConst::kAfterFit
Returns
(7x7) correlation matrix

Reimplemented in FourCFitKFit, MassFitKFit, MassFourCFitKFit, MassPointingVertexFitKFit, MassVertexFitKFit, and RecoilMassKFit.

Definition at line 183 of file KFitBase.cc.

184{
185 if (flag == KFitConst::kAfterFit && !isFitted()) return HepMatrix(KFitConst::kNumber7, KFitConst::kNumber7, 0);
186 if (!isTrackIDInRange(id1)) return HepMatrix(KFitConst::kNumber7, KFitConst::kNumber7, 0);
187 if (!isTrackIDInRange(id2)) return HepMatrix(KFitConst::kNumber7, KFitConst::kNumber7, 0);
188
189 switch (flag) {
191 return makeError1(
192 getTrackMomentum(id1),
193 getTrackMomentum(id2),
194 m_V_al_1.sub(KFitConst::kNumber6 * id1 + 1, KFitConst::kNumber6 * (id1 + 1), KFitConst::kNumber6 * id2 + 1,
195 KFitConst::kNumber6 * (id2 + 1))
196 );
197
198 default:
199 if (id1 == id2) {
200
201 return static_cast<HepMatrix>(m_Tracks[id1].getError(KFitConst::kBeforeFit));
202
203 } else {
204 const int idx1 = id1 < id2 ? id1 : id2, idx2 = id1 < id2 ? id2 : id1;
205
206 int index = 0;
207
208 for (int i = 0; i < idx1; i++) index += m_TrackCount - 1 - i;
209 index -= idx1 + 1;
210 index += idx2;
211 if (id1 == idx1)
212 return m_BeforeCorrelation[index + idx2];
213 else
214 return m_BeforeCorrelation[index + idx2].T();
215 }
216 }
217}
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.
Definition: KFitBase.cc:221
const CLHEP::HepLorentzVector getTrackMomentum(const int id) const
Get a Lorentz vector of the track.
Definition: KFitBase.cc:154
bool isFitted(void) const
Return false if fit is not performed yet or performed fit is failed; otherwise true.
Definition: KFitBase.cc:728
bool isTrackIDInRange(const int id) const
Check if the id is in the range.
Definition: KFitBase.cc:739
std::vector< CLHEP::HepMatrix > m_BeforeCorrelation
Container of input correlation matrices.
Definition: KFitBase.h:251
static const int kAfterFit
Input parameter to specify after-fit when setting/getting a track attribute.
Definition: KFitConst.h:37
static const int kBeforeFit
Input parameter to specify before-fit when setting/getting a track attribute.
Definition: KFitConst.h:35

◆ getErrorCode()

enum KFitError::ECode getErrorCode ( void  ) const
inherited

Get a code of the last error.

Returns
the last error code

Definition at line 101 of file KFitBase.cc.

101 {
102 return m_ErrorCode;
103}

◆ getMagneticField()

double getMagneticField ( void  ) const
inherited

Get a magnetic field.

Returns
magnetic field

Definition at line 128 of file KFitBase.cc.

129{
130 return m_MagneticField;
131}
double m_MagneticField
Magnetic field.
Definition: KFitBase.h:311

◆ getNDF()

int getNDF ( void  ) const
virtualinherited

Get an NDF of the fit.

Returns
NDF of the fit

Definition at line 114 of file KFitBase.cc.

115{
116 return m_NDF;
117}

◆ getTrack()

const KFitTrack getTrack ( const int  id) const
inherited

Get a specified track object.

Parameters
idtrack id
Returns
specified track object

Definition at line 175 of file KFitBase.cc.

176{
177 if (!isTrackIDInRange(id)) return KFitTrack();
178 return m_Tracks[id];
179}

◆ getTrackCHIsq()

double getTrackCHIsq ( const int  id) const
overridevirtual

Get a chi-square of the track.

Parameters
idtrack id
Returns
chi-square of the track

Reimplemented from KFitBase.

Definition at line 164 of file VertexFitKFit.cc.

165{
166 if (!isTrackIDInRange(id)) return -1;
167
169 return KFitBase::getTrackCHIsq(id);
170 }
171
172 return m_EachCHIsq[id];
173}
virtual double getTrackCHIsq(const int id) const
Get a chi-square of the track.
Definition: KFitBase.cc:135

◆ getTrackCount()

int getTrackCount ( void  ) const
inherited

Get the number of added tracks.

Returns
the number of added tracks

Definition at line 107 of file KFitBase.cc.

108{
109 return m_TrackCount;
110}

◆ getTrackError()

const HepSymMatrix getTrackError ( const int  id) const
inherited

Get an error matrix of the track.

Parameters
idtrack id
Returns
error matrix of the track

Definition at line 168 of file KFitBase.cc.

169{
170 if (!isTrackIDInRange(id)) return HepSymMatrix(KFitConst::kNumber7, 0);
171 return m_Tracks[id].getError();
172}

◆ getTrackMomentum()

const HepLorentzVector getTrackMomentum ( const int  id) const
inherited

Get a Lorentz vector of the track.

Parameters
idtrack id
Returns
Lorentz vector of the track

Definition at line 154 of file KFitBase.cc.

155{
156 if (!isTrackIDInRange(id)) return HepLorentzVector();
157 return m_Tracks[id].getMomentum();
158}

◆ getTrackPartCHIsq()

double getTrackPartCHIsq ( void  ) const

Get a sum of the chi-square associated to the input tracks.

The return value should be the same as the one from getCHIsqVertex().

Returns
sum of the chi-square associated to the input tracks

Definition at line 177 of file VertexFitKFit.cc.

178{
180 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
181 return -1;
182 }
183
184 if (m_TrackCount == 0) {
185 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kBadTrackSize);
186 return -1;
187 }
188
189 double chisq = 0.0;
190 for (int i = 0; i < m_TrackCount; i++) {
191 const double i_chisq = this->getTrackCHIsq(i);
192 chisq += i_chisq;
193 }
194
195 return chisq;
196}
double getTrackCHIsq(const int id) const override
Get a chi-square of the track.

◆ getTrackPartNDF()

int getTrackPartNDF ( void  ) const

Get an NDF relevant to the getTrackPartCHIsq().

Returns
NDF relevant to the getTrackPartCHIsq()

Definition at line 200 of file VertexFitKFit.cc.

201{
203 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
204 return 0;
205 }
206
207 if (m_TrackCount == 0) {
208 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kBadTrackSize);
209 return 0;
210 }
211
212 return m_TrackCount * 2 - 2;
213}

◆ getTrackPosition()

const HepPoint3D getTrackPosition ( const int  id) const
inherited

Get a position of the track.

Parameters
idtrack id
Returns
position of the track

Definition at line 161 of file KFitBase.cc.

162{
163 if (!isTrackIDInRange(id)) return HepPoint3D();
164 return m_Tracks[id].getPosition();
165}

◆ getTrackVertexError()

const HepMatrix getTrackVertexError ( const int  id) const

Get a vertex error matrix of the track.

Parameters
idtrack id
Returns
vertex error matrix

Definition at line 156 of file VertexFitKFit.cc.

157{
158 if (!isTrackIDInRange(id)) return HepMatrix(3, KFitConst::kNumber7, 0);
159 return m_AfterTrackVertexError[id];
160}
std::vector< CLHEP::HepMatrix > m_AfterTrackVertexError
Array of vertex error matrices after the fit.

◆ getVertex()

const HepPoint3D getVertex ( const int  flag = KFitConst::kAfterFit) const

Get a vertex position.

Parameters
flagKFitConst::kBeforeFit or KFitConst::kAfterFit
Returns
vertex position

Definition at line 115 of file VertexFitKFit.cc.

116{
117 if (flag == KFitConst::kAfterFit && !isFitted()) return HepPoint3D();
118
119 switch (flag) {
121 return m_BeforeVertex;
122
124 return m_AfterVertex;
125
126 default:
127 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kOutOfRange);
128 return HepPoint3D();
129 }
130}
@ kOutOfRange
Specified track-id out of range.
Definition: KFitError.h:42
HepPoint3D m_AfterVertex
Vertex position after the fit.

◆ getVertexError()

const HepSymMatrix getVertexError ( void  ) const

Get a fitted vertex error matrix.

Returns
vertex error matrix

Definition at line 134 of file VertexFitKFit.cc.

135{
136 return m_AfterVertexError;
137}

◆ isFitted()

bool isFitted ( void  ) const
inherited

Return false if fit is not performed yet or performed fit is failed; otherwise true.

Returns
see description

Definition at line 728 of file KFitBase.cc.

729{
730 if (m_FlagFitted) return true;
731
732 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kNotFittedYet);
733
734 return false;
735}
@ kNotFittedYet
Not fitted yet.
Definition: KFitError.h:39

◆ isNonZeroEnergy()

bool isNonZeroEnergy ( const CLHEP::HepLorentzVector &  p) const
protectedinherited

Check if the energy is non-zero.

Parameters
pLorentz vector
Returns
true for non-zero energy, false for otherwise

Definition at line 750 of file KFitBase.cc.

751{
752 if (p.t() != 0) return true;
753
754 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kDivisionByZero);
755
756 return false;
757}
@ kDivisionByZero
Division by zero (bad track property or internal error)
Definition: KFitError.h:56

◆ isTrackIDInRange()

bool isTrackIDInRange ( const int  id) const
protectedinherited

Check if the id is in the range.

Parameters
idtrack id
Returns
true if the id is in the range, false otherwise

Definition at line 739 of file KFitBase.cc.

740{
741 if (0 <= id && id < m_TrackCount) return true;
742
743 KFitError::displayError(__FILE__, __LINE__, __func__, KFitError::kOutOfRange);
744
745 return false;
746}

◆ makeCoreMatrix()

enum KFitError::ECode makeCoreMatrix ( void  )
overrideprivatevirtual

Build matrices using the kinematical constraint.

Returns
error code (zero if success)

Implements KFitBase.

Definition at line 764 of file VertexFitKFit.cc.

764 {
765 // vertex fit
766 for (int i = 0; i < m_TrackCount; i++)
767 {
768 double S, U;
769 double sininv;
770
771 double px = m_al_1[i * KFitConst::kNumber6 + 0][0];
772 double py = m_al_1[i * KFitConst::kNumber6 + 1][0];
773 double pz = m_al_1[i * KFitConst::kNumber6 + 2][0];
774 double x = m_al_1[i * KFitConst::kNumber6 + 3][0];
775 double y = m_al_1[i * KFitConst::kNumber6 + 4][0];
776 double z = m_al_1[i * KFitConst::kNumber6 + 5][0];
777 double a = m_property[i][2];
778
779 double pt = sqrt(px * px + py * py);
780 if (pt == 0) {
782 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
783 return m_ErrorCode;
784 }
785
786 double invPt = 1. / pt;
787 double invPt2 = invPt * invPt;
788 double dlx = m_v_a[0][0] - x;
789 double dly = m_v_a[1][0] - y;
790 double dlz = m_v_a[2][0] - z;
791 double a1 = -dlx * py + dly * px;
792 double a2 = dlx * px + dly * py;
793 double r2d2 = dlx * dlx + dly * dly;
794 double Rx = dlx - 2.*px * a2 * invPt2;
795 double Ry = dly - 2.*py * a2 * invPt2;
796
797 if (a != 0) { // charged
798
799 double B = a * a2 * invPt2;
800 if (fabs(B) > 1) {
802 B2DEBUG(10, "KFitError: Cannot calculate arcsin");
803 //KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
804 return m_ErrorCode;
805 }
806 // sin^(-1)(B)
807 sininv = asin(B);
808 double tmp0 = 1.0 - B * B;
809 if (tmp0 == 0) {
811 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
812 return m_ErrorCode;
813 }
814 // 1/sqrt(1-B^2)
815 double sqrtag = 1.0 / sqrt(tmp0);
816 S = sqrtag * invPt2;
817 U = dlz - pz * sininv / a;
818
819 } else { // neutral
820
821 sininv = 0.0;
822 S = invPt2;
823 U = dlz - pz * a2 * invPt2;
824 }
825
826 // d
827 m_d[i * 2 + 0][0] = a1 - 0.5 * a * r2d2;
828 m_d[i * 2 + 1][0] = U * pt;
829
830 // D
831 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 0] = dly;
832 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 1] = -dlx;
833 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 2] = 0.0;
834 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 3] = py + a * dlx;
835 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 4] = -px + a * dly;
836 m_D[i * 2 + 0][i * KFitConst::kNumber6 + 5] = 0.0;
837 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 0] = -pz * pt * S * Rx + U * px * invPt;
838 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 1] = -pz * pt * S * Ry + U * py * invPt;
839 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 2] = a != 0 ? -sininv * pt / a : -a2 * invPt;
840 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 3] = px * pz * pt * S;
841 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 4] = py * pz * pt * S;
842 m_D[i * 2 + 1][i * KFitConst::kNumber6 + 5] = -pt;
843
844 // E
845 m_E[i * 2 + 0][0] = -py - a * dlx;
846 m_E[i * 2 + 0][1] = px - a * dly;
847 m_E[i * 2 + 0][2] = 0.0;
848 m_E[i * 2 + 1][0] = -px * pz * pt * S;
849 m_E[i * 2 + 1][1] = -py * pz * pt * S;
850 m_E[i * 2 + 1][2] = pt;
851 }
852
854}
CLHEP::HepMatrix m_property
Container of charges and masses.
Definition: KFitBase.h:263
@ kCannotGetARCSIN
Cannot get arcsin (bad track property or internal error)
Definition: KFitError.h:60
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28

◆ makeError1() [1/2]

const HepSymMatrix makeError1 ( const CLHEP::HepLorentzVector &  p,
const CLHEP::HepMatrix &  e 
) const
protectedinherited

Rebuild an error matrix from a Lorentz vector and an error matrix.

Parameters
pLorentz vector
e(6x6) error matrix
Returns
(7x7) error matrix

Definition at line 221 of file KFitBase.cc.

222{
223 // self track
224 // Error(6x6,e) ==> Error(7x7,output(hsm)) using Momentum(p).
225
226 if (!isNonZeroEnergy(p)) return HepSymMatrix(KFitConst::kNumber7, 0);
227
228 HepSymMatrix hsm(KFitConst::kNumber7, 0);
229
230 for (int i = 0; i < 3; i++) for (int j = i; j < 3; j++) {
231 hsm[i][j] = e[i][j];
232 hsm[4 + i][4 + j] = e[3 + i][3 + j];
233 }
234 for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) {
235 hsm[i][4 + j] = e[i][3 + j];
236 }
237
238 const double invE = 1 / p.t();
239 hsm[0][3] = (p.x() * hsm[0][0] + p.y() * hsm[0][1] + p.z() * hsm[0][2]) * invE;
240 hsm[1][3] = (p.x() * hsm[0][1] + p.y() * hsm[1][1] + p.z() * hsm[1][2]) * invE;
241 hsm[2][3] = (p.x() * hsm[0][2] + p.y() * hsm[1][2] + p.z() * hsm[2][2]) * invE;
242 hsm[3][3] = (p.x() * p.x() * hsm[0][0] + p.y() * p.y() * hsm[1][1] + p.z() * p.z() * hsm[2][2]
243 + 2.0 * p.x() * p.y() * hsm[0][1]
244 + 2.0 * p.x() * p.z() * hsm[0][2]
245 + 2.0 * p.y() * p.z() * hsm[1][2]) * invE * invE;
246 hsm[3][4] = (p.x() * hsm[0][4] + p.y() * hsm[1][4] + p.z() * hsm[2][4]) * invE;
247 hsm[3][5] = (p.x() * hsm[0][5] + p.y() * hsm[1][5] + p.z() * hsm[2][5]) * invE;
248 hsm[3][6] = (p.x() * hsm[0][6] + p.y() * hsm[1][6] + p.z() * hsm[2][6]) * invE;
249
250 return hsm;
251}
bool isNonZeroEnergy(const CLHEP::HepLorentzVector &p) const
Check if the energy is non-zero.
Definition: KFitBase.cc:750

◆ makeError1() [2/2]

const HepMatrix makeError1 ( const CLHEP::HepLorentzVector &  p1,
const CLHEP::HepLorentzVector &  p2,
const CLHEP::HepMatrix &  e 
) const
protectedinherited

Rebuild an error matrix from a pair of Lorentz vectors and an error matrix.

Parameters
p1first Lorentz vector
p2second Lorentz vector
e(6x6) error matrix
Returns
(7x7) error matrix

Definition at line 255 of file KFitBase.cc.

256{
257 // track and track
258 // Error(6x6,e) ==> Error(7x7,output(hm)) using Momentum(p1&p2).
259
260 if (!isNonZeroEnergy(p1)) return HepSymMatrix(KFitConst::kNumber7, 0);
261 if (!isNonZeroEnergy(p2)) return HepSymMatrix(KFitConst::kNumber7, 0);
262
264
265 for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) {
266 hm[i][j] = e[i][j];
267 hm[4 + i][4 + j] = e[3 + i][3 + j];
268 hm[4 + i][j] = e[3 + i][j];
269 hm[i][4 + j] = e[i][3 + j];
270 }
271
272 const double invE1 = 1 / p1.t();
273 const double invE2 = 1 / p2.t();
274 hm[0][3] = (p2.x() * hm[0][0] + p2.y() * hm[0][1] + p2.z() * hm[0][2]) * invE2;
275 hm[1][3] = (p2.x() * hm[1][0] + p2.y() * hm[1][1] + p2.z() * hm[1][2]) * invE2;
276 hm[2][3] = (p2.x() * hm[2][0] + p2.y() * hm[2][1] + p2.z() * hm[2][2]) * invE2;
277 hm[4][3] = (p2.x() * hm[4][0] + p2.y() * hm[4][1] + p2.z() * hm[4][2]) * invE2;
278 hm[5][3] = (p2.x() * hm[5][0] + p2.y() * hm[5][1] + p2.z() * hm[5][2]) * invE2;
279 hm[6][3] = (p2.x() * hm[6][0] + p2.y() * hm[6][1] + p2.z() * hm[6][2]) * invE2;
280 hm[3][3] = (p1.x() * p2.x() * hm[0][0] + p1.y() * p2.y() * hm[1][1] + p1.z() * p2.z() * hm[2][2] +
281 p1.x() * p2.y() * hm[0][1] + p2.x() * p1.y() * hm[1][0] +
282 p1.x() * p2.z() * hm[0][2] + p2.x() * p1.z() * hm[2][0] +
283 p1.y() * p2.z() * hm[1][2] + p2.y() * p1.z() * hm[2][1]) * invE1 * invE2;
284 hm[3][0] = (p1.x() * hm[0][0] + p1.y() * hm[1][0] + p1.z() * hm[2][0]) * invE1;
285 hm[3][1] = (p1.x() * hm[0][1] + p1.y() * hm[1][1] + p1.z() * hm[2][1]) * invE1;
286 hm[3][2] = (p1.x() * hm[0][2] + p1.y() * hm[1][2] + p1.z() * hm[2][2]) * invE1;
287 hm[3][4] = (p1.x() * hm[0][4] + p1.y() * hm[1][4] + p1.z() * hm[2][4]) * invE1;
288 hm[3][5] = (p1.x() * hm[0][5] + p1.y() * hm[1][5] + p1.z() * hm[2][5]) * invE1;
289 hm[3][6] = (p1.x() * hm[0][6] + p1.y() * hm[1][6] + p1.z() * hm[2][6]) * invE1;
290
291 return hm;
292}

◆ makeError2()

const HepMatrix makeError2 ( const CLHEP::HepLorentzVector &  p,
const CLHEP::HepMatrix &  e 
) const
protectedinherited

Rebuild an error matrix from a Lorentz vector and an error matrix.

Parameters
pLorentz vector
e(3x6) error matrix
Returns
(3x7) error matrix

Definition at line 296 of file KFitBase.cc.

297{
298 // vertex and track
299 // Error(3x6,e) ==> Error(3x7,output(hm)) using Momentum(p).
300
301 if (!isNonZeroEnergy(p)) return HepSymMatrix(KFitConst::kNumber7, 0);
302
303 HepMatrix hm(3, KFitConst::kNumber7, 0);
304
305 for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) {
306 hm[i][j] = e[i][j];
307 hm[i][4 + j] = e[i][3 + j];
308 }
309
310 const double invE = 1 / p.t();
311 hm[0][3] = (p.x() * hm[0][0] + p.y() * hm[0][1] + p.z() * hm[0][2]) * invE;
312 hm[1][3] = (p.x() * hm[1][0] + p.y() * hm[1][1] + p.z() * hm[1][2]) * invE;
313 hm[2][3] = (p.x() * hm[2][0] + p.y() * hm[2][1] + p.z() * hm[2][2]) * invE;
314
315 return hm;
316}

◆ makeError3() [1/2]

const HepSymMatrix makeError3 ( const CLHEP::HepLorentzVector &  p,
const CLHEP::HepMatrix &  e,
const bool  is_fix_mass 
) const
protectedinherited

Rebuild an error matrix from a Lorentz vector and an error matrix.

Parameters
pLorentz vector
e(7x7) error matrix
is_fix_masstrue to recalculate energy term from other parameters, false to do nothing
Returns
(7x7) error matrix

Definition at line 320 of file KFitBase.cc.

321{
322 // self track
323 // Error(7x7,e) ==> Error(7x7,output(hsm)) using Momentum(p).
324 // is_fix_mass = 1 : Energy term is recalculated from the other parameters.
325 // is_fix_mass = 0 : hsm = e.
326
327 if (!isNonZeroEnergy(p)) return HepSymMatrix(KFitConst::kNumber7, 0);
328
329 if (!is_fix_mass) {
330 HepSymMatrix hsm(KFitConst::kNumber7, 0);
331 for (int i = 0; i < 7; i++) for (int j = i; j < 7; j++) {
332 hsm[i][j] = e[i][j];
333 }
334 return hsm;
335 }
336
337 HepSymMatrix hsm(KFitConst::kNumber7, 0);
338
339 for (int i = 0; i < 7; i++) {
340 if (i != 3)
341 for (int j = i; j < 7; j++) hsm[i][j] = e[i][j];
342 }
343
344 double invE = 1 / p.t();
345 hsm[0][3] = (p.x() * hsm[0][0] + p.y() * hsm[0][1] + p.z() * hsm[0][2]) * invE;
346 hsm[1][3] = (p.x() * hsm[0][1] + p.y() * hsm[1][1] + p.z() * hsm[1][2]) * invE;
347 hsm[2][3] = (p.x() * hsm[0][2] + p.y() * hsm[1][2] + p.z() * hsm[2][2]) * invE;
348 hsm[3][3] = (p.x() * p.x() * hsm[0][0] + p.y() * p.y() * hsm[1][1] + p.z() * p.z() * hsm[2][2]
349 + 2.0 * p.x() * p.y() * hsm[0][1]
350 + 2.0 * p.x() * p.z() * hsm[0][2]
351 + 2.0 * p.y() * p.z() * hsm[1][2]) * invE * invE;
352 hsm[3][4] = (p.x() * hsm[0][4] + p.y() * hsm[1][4] + p.z() * hsm[2][4]) * invE;
353 hsm[3][5] = (p.x() * hsm[0][5] + p.y() * hsm[1][5] + p.z() * hsm[2][5]) * invE;
354 hsm[3][6] = (p.x() * hsm[0][6] + p.y() * hsm[1][6] + p.z() * hsm[2][6]) * invE;
355
356 return hsm;
357}

◆ makeError3() [2/2]

const HepMatrix makeError3 ( const CLHEP::HepLorentzVector &  p1,
const CLHEP::HepLorentzVector &  p2,
const CLHEP::HepMatrix &  e,
const bool  is_fix_mass1,
const bool  is_fix_mass2 
) const
protectedinherited

Rebuild an error matrix from a pair of Lorentz vectors and an error matrix.

Parameters
p1first Lorentz vector
p2second Lorentz vector
e(7x7) error matrix
is_fix_mass1true to recalculate energy term from other parameters, false to do nothing
is_fix_mass2true to recalculate energy term from other parameters, false to do nothing
Returns
(7x7) error matrix

Definition at line 361 of file KFitBase.cc.

364{
365 // track and track
366 // Error(7x7,e) ==> Error(7x7,output(hm)) using Momentum(p1&p2).
367 // is_fix_mass = 1 : Energy term is recalculated from the other parameters.
368 // is_fix_mass = 0 : not.
369
370 if (is_fix_mass1 && is_fix_mass2) {
371 if (!isNonZeroEnergy(p1)) return HepSymMatrix(KFitConst::kNumber7, 0);
372 if (!isNonZeroEnergy(p2)) return HepSymMatrix(KFitConst::kNumber7, 0);
373
374 HepMatrix hm(e);
375
376 const double invE1 = 1 / p1.t();
377 const double invE2 = 1 / p2.t();
378 hm[0][3] = (p2.x() * hm[0][0] + p2.y() * hm[0][1] + p2.z() * hm[0][2]) * invE2;
379 hm[1][3] = (p2.x() * hm[1][0] + p2.y() * hm[1][1] + p2.z() * hm[1][2]) * invE2;
380 hm[2][3] = (p2.x() * hm[2][0] + p2.y() * hm[2][1] + p2.z() * hm[2][2]) * invE2;
381 hm[4][3] = (p2.x() * hm[4][0] + p2.y() * hm[4][1] + p2.z() * hm[4][2]) * invE2;
382 hm[5][3] = (p2.x() * hm[5][0] + p2.y() * hm[5][1] + p2.z() * hm[5][2]) * invE2;
383 hm[6][3] = (p2.x() * hm[6][0] + p2.y() * hm[6][1] + p2.z() * hm[6][2]) * invE2;
384 hm[3][0] = (p1.x() * hm[0][0] + p1.y() * hm[1][0] + p1.z() * hm[2][0]) * invE1;
385 hm[3][1] = (p1.x() * hm[0][1] + p1.y() * hm[1][1] + p1.z() * hm[2][1]) * invE1;
386 hm[3][2] = (p1.x() * hm[0][2] + p1.y() * hm[1][2] + p1.z() * hm[2][2]) * invE1;
387 hm[3][3] = (p1.x() * p2.x() * hm[0][0] + p1.y() * p2.y() * hm[1][1] + p1.z() * p2.z() * hm[2][2] +
388 p1.x() * p2.y() * hm[0][1] + p2.x() * p1.y() * hm[1][0] +
389 p1.x() * p2.z() * hm[0][2] + p2.x() * p1.z() * hm[2][0] +
390 p1.y() * p2.z() * hm[1][2] + p2.y() * p1.z() * hm[2][1]) * invE1 * invE2;
391 hm[3][4] = (p1.x() * hm[0][4] + p1.y() * hm[1][4] + p1.z() * hm[2][4]) * invE1;
392 hm[3][5] = (p1.x() * hm[0][5] + p1.y() * hm[1][5] + p1.z() * hm[2][5]) * invE1;
393 hm[3][6] = (p1.x() * hm[0][6] + p1.y() * hm[1][6] + p1.z() * hm[2][6]) * invE1;
394
395 return hm;
396 }
397
398
399 if (is_fix_mass1 && !is_fix_mass2) {
400 if (!isNonZeroEnergy(p1)) return HepSymMatrix(KFitConst::kNumber7, 0);
401
402 HepMatrix hm(e);
403
404 const double invE1 = 1 / p1.t();
405 hm[3][0] = (p1.x() * hm[0][0] + p1.y() * hm[1][0] + p1.z() * hm[2][0]) * invE1;
406 hm[3][1] = (p1.x() * hm[0][1] + p1.y() * hm[1][1] + p1.z() * hm[2][1]) * invE1;
407 hm[3][2] = (p1.x() * hm[0][2] + p1.y() * hm[1][2] + p1.z() * hm[2][2]) * invE1;
408 hm[3][3] = (p1.x() * hm[0][3] + p1.y() * hm[1][3] + p1.z() * hm[2][3]) * invE1;
409 hm[3][4] = (p1.x() * hm[0][4] + p1.y() * hm[1][4] + p1.z() * hm[2][4]) * invE1;
410 hm[3][5] = (p1.x() * hm[0][5] + p1.y() * hm[1][5] + p1.z() * hm[2][5]) * invE1;
411 hm[3][6] = (p1.x() * hm[0][6] + p1.y() * hm[1][6] + p1.z() * hm[2][6]) * invE1;
412
413 return hm;
414 }
415
416
417 if (!is_fix_mass1 && is_fix_mass2) {
418 if (!isNonZeroEnergy(p2)) return HepSymMatrix(KFitConst::kNumber7, 0);
419
420 HepMatrix hm(e);
421
422 const double invE2 = 1 / p2.t();
423 hm[0][3] = (p2.x() * hm[0][0] + p2.y() * hm[0][1] + p2.z() * hm[0][2]) * invE2;
424 hm[1][3] = (p2.x() * hm[1][0] + p2.y() * hm[1][1] + p2.z() * hm[1][2]) * invE2;
425 hm[2][3] = (p2.x() * hm[2][0] + p2.y() * hm[2][1] + p2.z() * hm[2][2]) * invE2;
426 hm[3][3] = (p2.x() * hm[3][0] + p2.y() * hm[3][1] + p2.z() * hm[3][2]) * invE2;
427 hm[4][3] = (p2.x() * hm[4][0] + p2.y() * hm[4][1] + p2.z() * hm[4][2]) * invE2;
428 hm[5][3] = (p2.x() * hm[5][0] + p2.y() * hm[5][1] + p2.z() * hm[5][2]) * invE2;
429 hm[6][3] = (p2.x() * hm[6][0] + p2.y() * hm[6][1] + p2.z() * hm[6][2]) * invE2;
430
431 return hm;
432 }
433
434 return e;
435}

◆ makeError4()

const HepMatrix makeError4 ( const CLHEP::HepLorentzVector &  p,
const CLHEP::HepMatrix &  e 
) const
protectedinherited

Rebuild an error matrix from a Lorentz vector and an error matrix.

Parameters
pLorentz vector
e(3x7) error matrix
Returns
(7x7) error matrix

Definition at line 439 of file KFitBase.cc.

440{
441 // vertex and track
442 // Error(3x7,e) ==> Error(3x7,output(hm)) using Momentum(p).
443 // Energy term is recalculated from the other parameters.
444
445 if (!isNonZeroEnergy(p)) return HepSymMatrix(KFitConst::kNumber7, 0);
446
447 HepMatrix hm(e);
448
449 const double invE = 1 / p.t();
450 hm[0][3] = (p.x() * hm[0][0] + p.y() * hm[0][1] + p.z() * hm[0][2]) * invE;
451 hm[1][3] = (p.x() * hm[1][0] + p.y() * hm[1][1] + p.z() * hm[1][2]) * invE;
452 hm[2][3] = (p.x() * hm[2][0] + p.y() * hm[2][1] + p.z() * hm[2][2]) * invE;
453
454 return hm;
455}

◆ prepareCorrelation()

enum KFitError::ECode prepareCorrelation ( void  )
protectedvirtualinherited

Build a grand correlation matrix from input-track properties.

Returns
error code (zero if success)

Reimplemented in FourCFitKFit, MassFitKFit, MassFourCFitKFit, MassPointingVertexFitKFit, MassVertexFitKFit, and RecoilMassKFit.

Definition at line 459 of file KFitBase.cc.

459 {
460 if (m_BeforeCorrelation.size() != (double)m_TrackCount * ((double)m_TrackCount - 1)*.5)
461 {
463 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
464 return m_ErrorCode;
465 }
466
467 HepMatrix tmp_hm(KFitConst::kNumber6, KFitConst::kNumber6, 0);
468 int row = 0, col = 0;
469
470 for (auto& hm : m_BeforeCorrelation)
471 {
472 row++;
473 if (row == m_TrackCount) {
474 col++;
475 row = col + 1;
476 }
477
478 // 7x7 --> 6x6
479 for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) {
480 tmp_hm[i][j] = hm[i][j];
481 tmp_hm[3 + i][3 + j] = hm[4 + i][4 + j];
482 tmp_hm[3 + i][j] = hm[4 + i][j];
483 tmp_hm[i][3 + j] = hm[i][4 + j];
484 }
485
486 int ii = 0, jj = 0;
487 for (int i = KFitConst::kNumber6 * row; i < KFitConst::kNumber6 * (row + 1); i++) {
488 for (int j = KFitConst::kNumber6 * col; j < KFitConst::kNumber6 * (col + 1); j++) {
489 m_V_al_0[i][j] = tmp_hm[ii][jj];
490 jj++;
491 }
492 jj = 0;
493 ii++;
494 }
495 }
496
498}
@ kBadCorrelationSize
Wrong correlation matrix size (internal error)
Definition: KFitError.h:51

◆ prepareInputMatrix()

enum KFitError::ECode prepareInputMatrix ( void  )
overrideprivatevirtual

Build grand matrices for minimum search from input-track properties.

Returns
error code (zero if success)

Implements KFitBase.

Definition at line 620 of file VertexFitKFit.cc.

620 {
622 {
625 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
626 return m_ErrorCode;
627 }
628 } else
629 {
632 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
633 return m_ErrorCode;
634 }
635 }
636
637
638 int index = 0;
639 HepMatrix tmp_al_0(KFitConst::kNumber6 * m_TrackCount, 1, 0);
640 HepSymMatrix tmp_V_al_0(KFitConst::kNumber6 * m_TrackCount, 0);
641 HepMatrix tmp_property(m_TrackCount, 3, 0);
642
643
644 for (auto& track : m_Tracks)
645 {
646 // momentum x,y,z and position x,y,z
647 for (int j = 0; j < KFitConst::kNumber6; j++)
648 tmp_al_0[index * KFitConst::kNumber6 + j][0] = track.getFitParameter(j, KFitConst::kBeforeFit);
649 // these error
650 tmp_V_al_0.sub(index * KFitConst::kNumber6 + 1, track.getFitError(KFitConst::kBeforeFit));
651 // charge , mass , a
652 tmp_property[index][0] = track.getCharge();
653 tmp_property[index][1] = track.getMass();
654 const double c = Belle2::Const::speedOfLight * 1e-4;
655 tmp_property[index][2] = -c * m_MagneticField * track.getCharge();
656 index++;
657 }
658
659 // error between tarck and track
660 m_V_al_0 = tmp_V_al_0;
662 {
663 if (m_FlagCorrelation) {
664 this->prepareCorrelation();
666 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
667 return m_ErrorCode;
668 }
669 }
670 }
671
672 // vertex
673 m_v_a[0][0] = m_BeforeVertex.x();
674 m_v_a[1][0] = m_BeforeVertex.y();
675 m_v_a[2][0] = m_BeforeVertex.z();
676
677 // set member matrix
678 m_al_0 = tmp_al_0;
679 m_al_1 = m_al_0;
680 m_property = tmp_property;
681
682 // define size of matrix
685 m_E = m_V_al_1.sub(1, m_TrackCount * 2, 1, 3);
686 m_d = m_V_al_1.sub(1, m_TrackCount * 2, 1, 1);
687 m_V_D = m_V_al_1.sub(1, m_TrackCount * 2, 1, m_TrackCount * 2);
688 m_lam = m_V_al_1.sub(1, m_TrackCount * 2, 1, 1);
689 m_lam0 = m_V_al_1.sub(1, m_TrackCount * 2, 1, 1);
690 m_V_Dt = m_V_al_1.sub(1, m_TrackCount * 2, 1, m_TrackCount * 2);
692
694}
static const double speedOfLight
[cm/ns]
Definition: Const.h:695
bool m_FlagCorrelation
Flag whether a correlation among tracks exists.
Definition: KFitBase.h:306
virtual enum KFitError::ECode prepareCorrelation(void)
Build a grand correlation matrix from input-track properties.
Definition: KFitBase.cc:459
static const int kMaxTrackCount
Maximum track size.
Definition: KFitConst.h:40

◆ prepareInputSubMatrix()

enum KFitError::ECode prepareInputSubMatrix ( void  )
overrideprivatevirtual

Build sub-matrices for minimum search from input-track properties.

Returns
error code (zero if success)

Implements KFitBase.

Definition at line 698 of file VertexFitKFit.cc.

698 {
699 // vertex
700 for (int i = 0; i < 3; i++)
701 {
702 m_v[i][0] = m_v_a[i][0];
703 }
705}

◆ prepareOutputMatrix()

enum KFitError::ECode prepareOutputMatrix ( void  )
overrideprivatevirtual

Build an output error matrix.

Returns
error code (zero if success)

Implements KFitBase.

Definition at line 709 of file VertexFitKFit.cc.

709 {
710 Hep3Vector h3v;
711 unsigned index = 0;
712
713 for (auto& pdata : m_Tracks)
714 {
715 // tracks
716 // momentum
717 h3v.setX(m_al_1[index * KFitConst::kNumber6 + 0][0]);
718 h3v.setY(m_al_1[index * KFitConst::kNumber6 + 1][0]);
719 h3v.setZ(m_al_1[index * KFitConst::kNumber6 + 2][0]);
720 pdata.setMomentum(HepLorentzVector(h3v, sqrt(h3v.mag2() + pdata.getMass()*pdata.getMass())), KFitConst::kAfterFit);
721 // position
722 pdata.setPosition(HepPoint3D(
723 m_al_1[index * KFitConst::kNumber6 + 3][0],
724 m_al_1[index * KFitConst::kNumber6 + 4][0],
726 // error of the tracks
727 pdata.setError(makeError1(pdata.getMomentum(),
728 m_V_al_1.sub(
729 index * KFitConst::kNumber6 + 1,
730 (index + 1)*KFitConst::kNumber6,
731 index * KFitConst::kNumber6 + 1,
732 (index + 1)*KFitConst::kNumber6)),
734 if (m_ErrorCode != KFitError::kNoError) break;
735 index++;
736 }
737
738 // vertex
739 m_AfterVertex.setX(m_v_a[0][0]);
740 m_AfterVertex.setY(m_v_a[1][0]);
741 m_AfterVertex.setZ(m_v_a[2][0]);
742
743 // error of the vertex
744 for (int i = 0; i < 3; i++) for (int j = i; j < 3; j++)
745 {
746 m_AfterVertexError[i][j] = m_V_E[i][j];
747 }
748
749 // error between vertex and tracks
750 for (int i = 0; i < m_TrackCount; i++)
751 {
752 HepMatrix hm(3, KFitConst::kNumber6, 0);
753 for (int j = 0; j < 3; j++) for (int k = 0; k < KFitConst::kNumber6; k++) {
754 hm[j][k] = m_Cov_v_al_1[j][KFitConst::kNumber6 * i + k];
755 }
756 m_AfterTrackVertexError.push_back(makeError2(m_Tracks[i].getMomentum(), hm));
757 }
758
760}
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:296

◆ setCorrelation()

enum KFitError::ECode setCorrelation ( const CLHEP::HepMatrix &  c)
virtualinherited

Set a correlation matrix.

Not intended for end user's use.

Parameters
c(7x7) correlation matrix
Returns
error code (zero if success)

Reimplemented in FourCFitKFit, MassFitKFit, MassFourCFitKFit, MassPointingVertexFitKFit, MassVertexFitKFit, and RecoilMassKFit.

Definition at line 70 of file KFitBase.cc.

70 {
71 if (e.num_row() != KFitConst::kNumber7)
72 {
74 KFitError::displayError(__FILE__, __LINE__, __func__, m_ErrorCode);
75 return m_ErrorCode;
76 }
77 m_BeforeCorrelation.push_back(e);
78 m_FlagCorrelation = true;
79
81}

◆ setCorrelationMode()

enum KFitError::ECode setCorrelationMode ( const bool  m)

Tell the object to perform a fit with track correlations.

Parameters
mtrue for with correlation, false for otherwise
Returns
error code (zero if success)

Definition at line 107 of file VertexFitKFit.cc.

107 {
109
111}

◆ setInitialVertex() [1/2]

enum KFitError::ECode setInitialVertex ( const HepPoint3D v)

Set an initial vertex point for the vertex-vertex constraint fit.

Parameters
vinitial vertex point
Returns
error code (zero if success)

Definition at line 52 of file VertexFitKFit.cc.

52 {
54
56}

◆ setInitialVertex() [2/2]

enum KFitError::ECode setInitialVertex ( const ROOT::Math::XYZVector &  v)

Set an initial vertex point for the mass-vertex constraint fit.

Parameters
vinitial vertex point
Returns
error code (zero if success)

Definition at line 58 of file VertexFitKFit.cc.

59{
60 m_BeforeVertex = ROOTToCLHEP::getPoint3D(v);
62 return m_ErrorCode;
63}

◆ setIpProfile()

enum KFitError::ECode setIpProfile ( const HepPoint3D ip,
const CLHEP::HepSymMatrix &  ipe 
)

Set an IP-ellipsoid shape for the vertex constraint fit.

Parameters
ipIP position
ipeerror matrix of the IP
Returns
error code (zero if success)

Definition at line 66 of file VertexFitKFit.cc.

66 {
67 if (m_FlagTube)
68 {
69 char buf[1024];
70 sprintf(buf, "%s:%s(): already constrained to IPtube", __FILE__, __func__);
71 B2FATAL(buf);
72 }
73
74 m_FlagBeam = true;
75 m_BeforeVertex = ip;
76 m_BeamError = ipe;
77
79}

◆ setIpTubeProfile()

enum KFitError::ECode setIpTubeProfile ( const CLHEP::HepLorentzVector &  p,
const HepPoint3D x,
const CLHEP::HepSymMatrix &  e,
const double  q 
)

Set a virtual IP-tube track for the vertex constraint fit.

Parameters
pLorentz vector of the virtual IP-tube track
xIP position
eerror matrix of IP-tube track and IP position
qcharge of the virtual IP-tube track
Returns
error code (zero if success)

Definition at line 83 of file VertexFitKFit.cc.

83 {
84 if (m_FlagBeam)
85 {
86 char buf[1024];
87 sprintf(buf, "%s:%s(): already constrained to IP", __FILE__, __func__);
88 B2FATAL(buf);
89 }
90
91 m_FlagTube = true;
92 m_TubeTrack = KFitTrack(p, x, e, q);
93
95}

◆ setKnownVertex()

enum KFitError::ECode setKnownVertex ( const bool  flag = true)

Tell the object to perform a fit with vertex position fixed.

Parameters
flagtrue for fixed vertex, false for otherwise
Returns
error code (zero if success)

Definition at line 99 of file VertexFitKFit.cc.

99 {
100 m_FlagKnownVertex = flag;
101
103}

◆ setMagneticField()

enum KFitError::ECode setMagneticField ( const double  mf)
inherited

Change a magnetic field from the default value KFitConst::kDefaultMagneticField.

Parameters
mfmagnetic field to set
Returns
error code (zero if success)

Definition at line 93 of file KFitBase.cc.

93 {
94 m_MagneticField = mf;
95
97}

◆ setZeroCorrelation()

enum KFitError::ECode setZeroCorrelation ( void  )
virtualinherited

Indicate no correlation between tracks.

Not intended for end user's use.

Returns
error code (zero if success)

Reimplemented in FourCFitKFit, MassFitKFit, MassFourCFitKFit, MassPointingVertexFitKFit, MassVertexFitKFit, and RecoilMassKFit.

Definition at line 85 of file KFitBase.cc.

85 {
86 HepMatrix zero(KFitConst::kNumber7, KFitConst::kNumber7, 0);
87
88 return this->setCorrelation(zero);
89}
virtual enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &c)
Set a correlation matrix.
Definition: KFitBase.cc:70

◆ updateMother()

enum KFitError::ECode updateMother ( Particle mother)

Update mother particle.

Parameters
[in]motherMother particle.

Definition at line 905 of file VertexFitKFit.cc.

906{
907 MakeMotherKFit kmm;
909 unsigned n = getTrackCount();
910 for (unsigned i = 0; i < n; ++i) {
912 getTrack(i).getCharge());
914 for (unsigned j = i + 1; j < n; ++j) {
916 }
917 }
918 kmm.setVertex(getVertex());
920 m_ErrorCode = kmm.doMake();
922 return m_ErrorCode;
923 double chi2 = getCHIsq();
924 int ndf = getNDF();
925 double prob = TMath::Prob(chi2, ndf);
926 //
927 bool haschi2 = mother->hasExtraInfo("chiSquared");
928 if (haschi2) {
929 mother->setExtraInfo("chiSquared", chi2);
930 mother->setExtraInfo("ndf", ndf);
931 } else {
932 mother->addExtraInfo("chiSquared", chi2);
933 mother->addExtraInfo("ndf", ndf);
934 }
935
936 mother->updateMomentum(
937 CLHEPToROOT::getLorentzVector(kmm.getMotherMomentum()),
938 CLHEPToROOT::getXYZVector(kmm.getMotherPosition()),
939 CLHEPToROOT::getTMatrixFSym(kmm.getMotherError()),
940 prob);
942 return m_ErrorCode;
943}
void setExtraInfo(const std::string &name, double value)
Sets the user-defined data of given name to the given value.
Definition: Particle.cc:1402
bool hasExtraInfo(const std::string &name) const
Return whether the extra info with the given name is set.
Definition: Particle.cc:1351
void addExtraInfo(const std::string &name, double value)
Sets the user-defined data of given name to the given value.
Definition: Particle.cc:1421
void updateMomentum(const ROOT::Math::PxPyPzEVector &p4, const ROOT::Math::XYZVector &vertex, const TMatrixFSym &errMatrix, double pValue)
Sets Lorentz vector, position, 7x7 error matrix and p-value.
Definition: Particle.h:397
const CLHEP::HepSymMatrix getTrackError(const int id) const
Get an error matrix of the track.
Definition: KFitBase.cc:168
const HepPoint3D getTrackPosition(const int id) const
Get a position of the track.
Definition: KFitBase.cc:161
virtual int getNDF(void) const
Get an NDF of the fit.
Definition: KFitBase.cc:114
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:183
const KFitTrack getTrack(const int id) const
Get a specified track object.
Definition: KFitBase.cc:175
int getTrackCount(void) const
Get the number of added tracks.
Definition: KFitBase.cc:107
MakeMotherKFit is a class to build mother particle from kinematically fitted daughters.
enum KFitError::ECode setVertex(const HepPoint3D &v)
Set a vertex position of the mother particle.
enum KFitError::ECode addTrack(const KFitTrack &kp)
Add a track to the make-mother object.
enum KFitError::ECode doMake(void)
Perform a reconstruction of mother particle.
const CLHEP::HepSymMatrix getMotherError(void) const
Get an error matrix of the mother particle.
enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &e)
Set a correlation matrix.
const HepPoint3D getMotherPosition(void) const
Get a position of the mother particle.
enum KFitError::ECode setVertexError(const CLHEP::HepSymMatrix &e)
Set a vertex error matrix of the mother particle.
enum KFitError::ECode setTrackVertexError(const CLHEP::HepMatrix &e)
Set a vertex error matrix of the child particle in the addTrack'ed order.
const CLHEP::HepLorentzVector getMotherMomentum(void) const
Get a Lorentz vector of the mother particle.
enum KFitError::ECode setMagneticField(const double mf)
Change a magnetic field from the default value KFitConst::kDefaultMagneticField.
double getCHIsq(void) const override
Get a chi-square of the fit.
const CLHEP::HepSymMatrix getVertexError(void) const
Get a fitted vertex error matrix.
const HepPoint3D getVertex(const int flag=KFitConst::kAfterFit) const
Get a vertex position.
const CLHEP::HepMatrix getTrackVertexError(const int id) const
Get a vertex error matrix of the track.

Member Data Documentation

◆ m_AfterTrackVertexError

std::vector<CLHEP::HepMatrix> m_AfterTrackVertexError
private

Array of vertex error matrices after the fit.

Definition at line 174 of file VertexFitKFit.h.

◆ m_AfterVertex

HepPoint3D m_AfterVertex
private

Vertex position after the fit.

Definition at line 170 of file VertexFitKFit.h.

◆ m_AfterVertexError

CLHEP::HepSymMatrix m_AfterVertexError
private

Vertex error matrix after the fit.

Definition at line 172 of file VertexFitKFit.h.

◆ m_al_0

CLHEP::HepMatrix m_al_0
protectedinherited

See J.Tanaka Ph.D (2001) p136 for definition.

Definition at line 257 of file KFitBase.h.

◆ m_al_1

CLHEP::HepMatrix m_al_1
protectedinherited

See J.Tanaka Ph.D (2001) p136 for definition.

Definition at line 259 of file KFitBase.h.

◆ m_al_a

CLHEP::HepMatrix m_al_a
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 261 of file KFitBase.h.

◆ m_BeamError

CLHEP::HepSymMatrix m_BeamError
private

Error matrix modeling the IP ellipsoid.

Definition at line 179 of file VertexFitKFit.h.

◆ m_BeforeCorrelation

std::vector<CLHEP::HepMatrix> m_BeforeCorrelation
protectedinherited

Container of input correlation matrices.

Definition at line 251 of file KFitBase.h.

◆ m_BeforeVertex

HepPoint3D m_BeforeVertex
private

Vertex position before the fit.

Definition at line 167 of file VertexFitKFit.h.

◆ m_CHIsq

double m_CHIsq
protectedinherited

chi-square of the fit.

Definition at line 297 of file KFitBase.h.

◆ m_CHIsqVertex

double m_CHIsqVertex
private

chi-square of the fit excluding IP-constraint part.

Definition at line 164 of file VertexFitKFit.h.

◆ m_CorrelationMode

bool m_CorrelationMode
private

Flag controlled by setCorrelationMode().

Definition at line 160 of file VertexFitKFit.h.

◆ m_Cov_v_al_1

CLHEP::HepMatrix m_Cov_v_al_1
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 291 of file KFitBase.h.

◆ m_D

CLHEP::HepMatrix m_D
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 266 of file KFitBase.h.

◆ m_d

CLHEP::HepMatrix m_d
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 268 of file KFitBase.h.

◆ m_E

CLHEP::HepMatrix m_E
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 279 of file KFitBase.h.

◆ m_EachCHIsq

double m_EachCHIsq[KFitConst::kMaxTrackCount2]
private

Container of chi-square's of the input tracks.

Definition at line 162 of file VertexFitKFit.h.

◆ m_ErrorCode

enum KFitError::ECode m_ErrorCode
protectedinherited

Error code.

Definition at line 243 of file KFitBase.h.

◆ m_FlagBeam

bool m_FlagBeam
private

Flag if to perform IP-ellipsoid constraint fit.

Definition at line 177 of file VertexFitKFit.h.

◆ m_FlagCorrelation

bool m_FlagCorrelation
protectedinherited

Flag whether a correlation among tracks exists.

Definition at line 306 of file KFitBase.h.

◆ m_FlagFitted

bool m_FlagFitted
protectedinherited

Flag to indicate if the fit is performed and succeeded.

Definition at line 245 of file KFitBase.h.

◆ m_FlagKnownVertex

bool m_FlagKnownVertex
private

Flag controlled by setKnownVertex().

Definition at line 182 of file VertexFitKFit.h.

◆ m_FlagOverIteration

bool m_FlagOverIteration
protectedinherited

Flag whether the iteration count exceeds the limit.

Definition at line 308 of file KFitBase.h.

◆ m_FlagTube

bool m_FlagTube
private

Flag if to perform IP-tube constraint fit.

Definition at line 185 of file VertexFitKFit.h.

◆ m_iTrackTube

int m_iTrackTube
private

ID of the virtual tube track in the m_Tracks.

Definition at line 187 of file VertexFitKFit.h.

◆ m_lam

CLHEP::HepMatrix m_lam
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 276 of file KFitBase.h.

◆ m_lam0

CLHEP::HepMatrix m_lam0
protectedinherited

See J.Tanaka Ph.D (2001) p138 for definition.

Definition at line 283 of file KFitBase.h.

◆ m_MagneticField

double m_MagneticField
protectedinherited

Magnetic field.

Definition at line 311 of file KFitBase.h.

◆ m_NDF

int m_NDF
protectedinherited

NDF of the fit.

Definition at line 295 of file KFitBase.h.

◆ m_NecessaryTrackCount

int m_NecessaryTrackCount
protectedinherited

Number needed tracks to perform fit.

Definition at line 303 of file KFitBase.h.

◆ m_property

CLHEP::HepMatrix m_property
protectedinherited

Container of charges and masses.

Definition at line 263 of file KFitBase.h.

◆ m_TrackCount

int m_TrackCount
protectedinherited

Number of tracks.

Definition at line 301 of file KFitBase.h.

◆ m_Tracks

std::vector<KFitTrack> m_Tracks
protectedinherited

Container of input tracks.

Definition at line 249 of file KFitBase.h.

◆ m_TubeTrack

KFitTrack m_TubeTrack
private

Entity of the virtual IP-tube track.

Definition at line 189 of file VertexFitKFit.h.

◆ m_v

CLHEP::HepMatrix m_v
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 285 of file KFitBase.h.

◆ m_v_a

CLHEP::HepMatrix m_v_a
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 287 of file KFitBase.h.

◆ m_V_al_0

CLHEP::HepSymMatrix m_V_al_0
protectedinherited

See J.Tanaka Ph.D (2001) p137 for definition.

Definition at line 255 of file KFitBase.h.

◆ m_V_al_1

CLHEP::HepMatrix m_V_al_1
protectedinherited

See J.Tanaka Ph.D (2001) p138 for definition.

Definition at line 274 of file KFitBase.h.

◆ m_V_D

CLHEP::HepMatrix m_V_D
protectedinherited

See J.Tanaka Ph.D (2001) p138 for definition.

Definition at line 271 of file KFitBase.h.

◆ m_V_Dt

CLHEP::HepMatrix m_V_Dt
protectedinherited

See J.Tanaka Ph.D (2001) p138 for definition.

Definition at line 289 of file KFitBase.h.

◆ m_V_E

CLHEP::HepMatrix m_V_E
protectedinherited

See J.Tanaka Ph.D (2001) p138 for definition.

Definition at line 281 of file KFitBase.h.


The documentation for this class was generated from the following files: