 |
Belle II Software
release-05-01-25
|
11 #include <TMatrixFSym.h>
13 #include <analysis/VertexFitting/KFit/MakeMotherKFit.h>
14 #include <analysis/VertexFitting/KFit/MassVertexFitKFit.h>
15 #include <analysis/utility/CLHEPToROOT.h>
20 using namespace Belle2::analysis;
21 using namespace CLHEP;
23 MassVertexFitKFit::MassVertexFitKFit():
25 m_AfterVertexError(HepSymMatrix(3, 0))
29 m_V_E = HepMatrix(3, 3, 0);
30 m_v = HepMatrix(3, 1, 0);
31 m_v_a = HepMatrix(3, 1, 0);
290 for (
int i = 0; i < 3; i++)
m_v[i][0] =
m_v_a[i][0];
305 int row = 0, col = 0;
343 pdata.setMomentum(HepLorentzVector(h3v, sqrt(h3v.mag2() + pdata.getMass()*pdata.getMass())),
KFitConst::kAfterFit);
352 pdata.setError(this->
makeError3(pdata.getMomentum(),
368 for (
int i = 0; i < 3; i++)
for (
int j = i; j < 3; j++)
392 HepMatrix al_1_prime(
m_al_1);
393 HepMatrix Sum_al_1(4, 1, 0);
411 Sum_al_1[3][0] += energy[i];
419 + Sum_al_1[3][0] * Sum_al_1[3][0] - Sum_al_1[0][0] * Sum_al_1[0][0]
420 - Sum_al_1[1][0] * Sum_al_1[1][0] - Sum_al_1[2][0] * Sum_al_1[2][0]
423 double Sum_a = 0., Sum_tmpx = 0., Sum_tmpy = 0.;
426 if (energy[i] == 0) {
435 double invE = 1. / energy[i];
463 m_E[2 *
m_TrackCount][0] = -2.*Sum_al_1[1][0] * Sum_a + 2.*Sum_al_1[3][0] * Sum_tmpy;
464 m_E[2 *
m_TrackCount][1] = 2.*Sum_al_1[0][0] * Sum_a - 2.*Sum_al_1[3][0] * Sum_tmpx;
470 double sininv, sqrtag;
480 double pt = sqrt(px * px + py * py);
488 double invPt = 1. / pt;
489 double invPt2 = invPt * invPt;
490 double dlx =
m_v_a[0][0] - x;
491 double dly =
m_v_a[1][0] - y;
492 double dlz =
m_v_a[2][0] - z;
493 double a1 = -dlx * py + dly * px;
494 double a2 = dlx * px + dly * py;
495 double r2d2 = dlx * dlx + dly * dly;
496 double Rx = dlx - 2.*px * a2 * invPt2;
497 double Ry = dly - 2.*py * a2 * invPt2;
509 double tmp0 = 1.0 - B * B;
516 sqrtag = 1.0 / sqrt(tmp0);
518 U = dlz - pz * sininv / a;
526 U = dlz - pz * a2 * invPt2;
531 m_d[i * 2 + 0][0] = a1 - 0.5 * a * r2d2;
532 m_d[i * 2 + 1][0] = U * pt;
552 m_E[i * 2 + 0][0] = -py - a * dlx;
553 m_E[i * 2 + 0][1] = px - a * dly;
554 m_E[i * 2 + 0][2] = 0.0;
555 m_E[i * 2 + 1][0] = -px * pz * pt * S;
556 m_E[i * 2 + 1][1] = -py * pz * pt * S;
557 m_E[i * 2 + 1][2] = pt;
576 for (
unsigned i = 0; i < n; ++i) {
580 for (
unsigned j = i + 1; j < n; ++j) {
591 double prob = TMath::Prob(chi2, ndf);
593 bool haschi2 = mother->hasExtraInfo(
"chiSquared");
595 mother->setExtraInfo(
"chiSquared", chi2);
596 mother->setExtraInfo(
"ndf", ndf);
598 mother->addExtraInfo(
"chiSquared", chi2);
599 mother->addExtraInfo(
"ndf", ndf);
602 mother->updateMomentum(
double m_MagneticField
Magnetic field.
CLHEP::HepMatrix m_v
See J.Tanaka Ph.D (2001) p137 for definition.
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.
double m_CHIsq
chi-square of the fit.
enum KFitError::ECode m_ErrorCode
Error code.
bool m_FlagCorrelation
Flag whether a correlation among tracks exists.
double getTrackCHIsq(const int id) const override
Get a chi-square of the track.
CLHEP::HepMatrix m_D
See J.Tanaka Ph.D (2001) p137 for definition.
static const int kBeforeFit
Input parameter to specify before-fit when setting/getting a track attribute.
enum KFitError::ECode setTrackVertexError(const CLHEP::HepMatrix &e)
Set a vertex error matrix of the child particle in the addTrack'ed order.
virtual const CLHEP::HepMatrix getCorrelation(const int id1, const int id2, const int flag=KFitConst::kAfterFit) const
Get a correlation matrix between two tracks.
enum KFitError::ECode setVertex(const HepPoint3D &v)
Set a vertex position of the mother particle.
const CLHEP::HepMatrix getTrackVertexError(const int id) const
Get a vertex error matrix of the track.
bool isFitted(void) const
Return false if fit is not performed yet or performed fit is failed; otherwise true.
enum KFitError::ECode setInitialVertex(const HepPoint3D &v)
Set an initial vertex point for the mass-vertex constraint fit.
enum KFitError::ECode doFit2(void)
Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).
enum KFitError::ECode prepareCorrelation(void) override
Build a grand correlation matrix from input-track properties.
int m_NecessaryTrackCount
Number needed tracks to perform fit.
enum KFitError::ECode prepareInputSubMatrix(void) override
Build sub-matrices for minimum search from input-track properties.
const CLHEP::HepSymMatrix getTrackError(const int id) const
Get an error matrix of the track.
enum KFitError::ECode prepareInputMatrix(void) override
Build grand matrices for minimum search from input-track properties.
CLHEP::HepMatrix m_lam0
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.
std::vector< KFitTrack > m_Tracks
Container of input tracks.
enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &m) override
Set a correlation matrix.
CLHEP::HepMatrix m_property
Container of charges and masses.
CLHEP::HepMatrix m_lam
See J.Tanaka Ph.D (2001) p137 for definition.
enum KFitError::ECode updateMother(Particle *mother)
Update mother particle.
CLHEP::HepMatrix m_V_D
See J.Tanaka Ph.D (2001) p138 for definition.
CLHEP::HepSymMatrix m_AfterVertexError
Vertex error matrix after the fit.
CLHEP::HepMatrix m_al_1
See J.Tanaka Ph.D (2001) p136 for definition.
double getInvariantMass(void) const
Get an invariant mass.
static void displayError(const char *file, const int line, const char *func, const enum ECode code)
Display a description of error and its location.
std::vector< int > m_IsFixMass
Array of flags whether the track property is fixed at the mass.
@ kBadCorrelationSize
Wrong correlation matrix size (internal error)
CLHEP::HepMatrix m_E
See J.Tanaka Ph.D (2001) p137 for definition.
const CLHEP::HepSymMatrix getMotherError(void) const
Get an error matrix of the mother particle.
virtual enum KFitError::ECode setZeroCorrelation(void)
Indicate no correlation between tracks.
enum KFitError::ECode prepareOutputMatrix(void) override
Build an output error matrix.
enum KFitError::ECode unfixMass(void)
Tell the object to unfix the last added track property at the invariant mass.
bool m_FlagFitted
Flag to indicate if the fit is performed and succeeded.
MakeMotherKFit is a class to build mother particle from kinematically fitted daughters.
const CLHEP::HepSymMatrix getVertexError(void) const
Get a fitted vertex error matrix.
const CLHEP::HepLorentzVector getMotherMomentum(void) const
Get a Lorentz vector of the mother particle.
enum KFitError::ECode makeCoreMatrix(void) override
Build matrices using the kinematical constraint.
enum KFitError::ECode calculateNDF(void) override
Calculate an NDF of the fit.
int getTrackCount(void) const
Get the number of added tracks.
static const int kAfterFit
Input parameter to specify after-fit when setting/getting a track attribute.
CLHEP::HepMatrix m_v_a
See J.Tanaka Ph.D (2001) p137 for definition.
enum KFitError::ECode fixMass(void)
Tell the object to fix the last added track property at the invariant mass.
static const int kMaxTrackCount
Maximum track size.
static const int kMaxTrackCount2
Maximum track size (internal use)
double m_InvariantMass
Invariant mass.
CLHEP::HepMatrix m_V_al_1
See J.Tanaka Ph.D (2001) p138 for definition.
Abstract base class for different kinds of events.
virtual int getNDF(void) const
Get an NDF of the fit.
@ kDivisionByZero
Division by zero (bad track property or internal error)
const HepPoint3D getVertex(const int flag=KFitConst::kAfterFit) const
Get a vertex position.
virtual enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &c)
Set a correlation matrix.
enum KFitError::ECode setMagneticField(const double mf)
Change a magnetic field from the default value KFitConst::kDefaultMagneticField.
~MassVertexFitKFit(void)
Destruct the object.
int m_TrackCount
Number of tracks.
@ kCannotGetMatrixInverse
Cannot calculate matrix inverse (bad track property or internal error)
enum KFitError::ECode setZeroCorrelation(void) override
Indicate no correlation between tracks.
enum KFitError::ECode setInvariantMass(const double m)
Set an invariant mass for the mass-vertex constraint fit.
CLHEP::HepMatrix m_al_0
See J.Tanaka Ph.D (2001) p136 for definition.
static constexpr double kLightSpeed
Speed of light.
enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &e)
Set a correlation matrix.
enum KFitError::ECode setVertexError(const CLHEP::HepSymMatrix &e)
Set a vertex error matrix of the mother particle.
const KFitTrack getTrack(const int id) const
Get a specified track object.
std::vector< CLHEP::HepMatrix > m_AfterTrackVertexError
array of vertex error matrices after the fit.
CLHEP::HepMatrix m_d
See J.Tanaka Ph.D (2001) p137 for definition.
const HepPoint3D getMotherPosition(void) const
Get a position of the mother particle.
Class to store reconstructed particles.
CLHEP::HepMatrix m_V_Dt
See J.Tanaka Ph.D (2001) p138 for definition.
enum KFitError::ECode addTrack(const KFitTrack &kp)
Add a track to the make-mother object.
const CLHEP::HepMatrix getCorrelation(const int id1, const int id2, const int flag=KFitConst::kAfterFit) const override
Get a correlation matrix between two tracks.
bool isTrackIDInRange(const int id) const
Check if the id is in the range.
HepPoint3D m_BeforeVertex
Vertex position before the fit.
const HepPoint3D getTrackPosition(const int id) const
Get a position of the track.
ECode
ECode is a error code enumerate.
enum KFitError::ECode doMake(void)
Perform a reconstruction of mother particle.
@ kOutOfRange
Specified track-id out of range.
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.
static const int kNumber7
Constant 7 to check matrix size (internal use)
CLHEP::HepMatrix m_V_E
See J.Tanaka Ph.D (2001) p138 for definition.
enum KFitError::ECode doFit(void)
Perform a mass-vertex-constraint fit.
@ kBadTrackSize
Track count too small to perform fit.
CLHEP::HepSymMatrix m_V_al_0
See J.Tanaka Ph.D (2001) p137 for definition.
std::vector< CLHEP::HepMatrix > m_BeforeCorrelation
Container of input correlation matrices.
HepPoint3D m_AfterVertex
Vertex position after the fit.
double getCHIsq(void) const override
Get a chi-square of the fit.
const CLHEP::HepLorentzVector getTrackMomentum(const int id) const
Get a Lorentz vector of the track.