10#include <TMatrixFSym.h>
12#include <analysis/VertexFitting/KFit/MakeMotherKFit.h>
13#include <analysis/VertexFitting/KFit/MassVertexFitKFit.h>
14#include <analysis/utility/CLHEPToROOT.h>
15#include <framework/gearbox/Const.h>
19using namespace Belle2::analysis;
23 m_BeforeVertex(HepPoint3D(0., 0., 0.)),
24 m_AfterVertexError(HepSymMatrix(3, 0))
28 m_V_E = HepMatrix(3, 3, 0);
29 m_v = HepMatrix(3, 1, 0);
30 m_v_a = HepMatrix(3, 1, 0);
288 for (
int i = 0; i < 3; i++)
m_v[i][0] =
m_v_a[i][0];
303 int row = 0, col = 0;
341 pdata.setMomentum(HepLorentzVector(h3v, sqrt(h3v.mag2() + pdata.getMass()*pdata.getMass())),
KFitConst::kAfterFit);
345 pdata.setPosition(HepPoint3D(
350 pdata.setError(this->
makeError3(pdata.getMomentum(),
366 for (
int i = 0; i < 3; i++)
for (
int j = i; j < 3; j++)
390 HepMatrix al_1_prime(
m_al_1);
391 HepMatrix Sum_al_1(4, 1, 0);
405 Sum_al_1[3][0] += energy[i];
416 + Sum_al_1[3][0] * Sum_al_1[3][0] - Sum_al_1[0][0] * Sum_al_1[0][0]
417 - Sum_al_1[1][0] * Sum_al_1[1][0] - Sum_al_1[2][0] * Sum_al_1[2][0]
420 double Sum_a = 0., Sum_tmpx = 0., Sum_tmpy = 0.;
423 if (energy[i] == 0) {
432 double invE = 1. / energy[i];
460 m_E[2 *
m_TrackCount][0] = -2.*Sum_al_1[1][0] * Sum_a + 2.*Sum_al_1[3][0] * Sum_tmpy;
461 m_E[2 *
m_TrackCount][1] = 2.*Sum_al_1[0][0] * Sum_a - 2.*Sum_al_1[3][0] * Sum_tmpx;
477 double pt = sqrt(px * px + py * py);
485 double invPt = 1. / pt;
486 double invPt2 = invPt * invPt;
487 double dlx =
m_v_a[0][0] - x;
488 double dly =
m_v_a[1][0] - y;
489 double dlz =
m_v_a[2][0] - z;
490 double a1 = -dlx * py + dly * px;
491 double a2 = dlx * px + dly * py;
492 double r2d2 = dlx * dlx + dly * dly;
493 double Rx = dlx - 2.*px * a2 * invPt2;
494 double Ry = dly - 2.*py * a2 * invPt2;
498 double B = a * a2 * invPt2;
506 double tmp0 = 1.0 - B * B;
513 double sqrtag = 1.0 / sqrt(tmp0);
515 U = dlz - pz * sininv / a;
521 U = dlz - pz * a2 * invPt2;
526 m_d[i * 2 + 0][0] = a1 - 0.5 * a * r2d2;
527 m_d[i * 2 + 1][0] = U * pt;
547 m_E[i * 2 + 0][0] = -py - a * dlx;
548 m_E[i * 2 + 0][1] = px - a * dly;
549 m_E[i * 2 + 0][2] = 0.0;
550 m_E[i * 2 + 1][0] = -px * pz * pt * S;
551 m_E[i * 2 + 1][1] = -py * pz * pt * S;
552 m_E[i * 2 + 1][2] = pt;
571 for (
unsigned i = 0; i < n; ++i) {
575 for (
unsigned j = i + 1; j < n; ++j) {
586 double prob = TMath::Prob(chi2, ndf);
DataType Z() const
access variable Z (= .at(2) without boundary check)
DataType X() const
access variable X (= .at(0) without boundary check)
DataType Y() const
access variable Y (= .at(1) without boundary check)
static const double speedOfLight
[cm/ns]
Class to store reconstructed particles.
void setExtraInfo(const std::string &name, double value)
Sets the user-defined data of given name to the given value.
bool hasExtraInfo(const std::string &name) const
Return whether the extra info with the given name is set.
void addExtraInfo(const std::string &name, double value)
Sets the user-defined data of given name to the given value.
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.
int m_NecessaryTrackCount
Number needed tracks to perform fit.
double m_MagneticField
Magnetic field.
CLHEP::HepMatrix m_al_1
See J.Tanaka Ph.D (2001) p136 for definition.
CLHEP::HepMatrix m_V_Dt
See J.Tanaka Ph.D (2001) p138 for definition.
virtual enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &c)
Set a correlation 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::HepSymMatrix getTrackError(const int id) const
Get an error matrix of the track.
const CLHEP::HepLorentzVector getTrackMomentum(const int id) const
Get a Lorentz vector of the track.
CLHEP::HepMatrix m_lam
See J.Tanaka Ph.D (2001) p137 for definition.
enum KFitError::ECode doFit2(void)
Perform a fit (used in VertexFitKFit::doFit() and MassVertexFitKFit::doFit()).
CLHEP::HepMatrix m_E
See J.Tanaka Ph.D (2001) p137 for definition.
const HepPoint3D getTrackPosition(const int id) const
Get a position of the track.
CLHEP::HepMatrix m_property
Container of charges and masses.
enum KFitError::ECode m_ErrorCode
Error code.
virtual enum KFitError::ECode setZeroCorrelation(void)
Indicate no correlation between tracks.
CLHEP::HepMatrix m_V_al_1
See J.Tanaka Ph.D (2001) p138 for definition.
virtual int getNDF(void) const
Get an NDF of the fit.
CLHEP::HepMatrix m_d
See J.Tanaka Ph.D (2001) p137 for definition.
CLHEP::HepMatrix m_lam0
See J.Tanaka Ph.D (2001) p138 for definition.
bool isFitted(void) const
Return false if fit is not performed yet or performed fit is failed; otherwise true.
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.
bool isTrackIDInRange(const int id) const
Check if the id is in the range.
CLHEP::HepMatrix m_v_a
See J.Tanaka Ph.D (2001) p137 for definition.
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 m_FlagCorrelation
Flag whether a correlation among tracks exists.
CLHEP::HepSymMatrix m_V_al_0
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_Cov_v_al_1
See J.Tanaka Ph.D (2001) p137 for definition.
const KFitTrack getTrack(const int id) const
Get a specified track object.
std::vector< CLHEP::HepMatrix > m_BeforeCorrelation
Container of input correlation matrices.
bool m_FlagFitted
Flag to indicate if the fit is performed and succeeded.
double m_CHIsq
chi-square of the fit.
int getTrackCount(void) const
Get the number of added tracks.
std::vector< KFitTrack > m_Tracks
Container of input tracks.
CLHEP::HepMatrix m_v
See J.Tanaka Ph.D (2001) p137 for definition.
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.
int m_TrackCount
Number of tracks.
CLHEP::HepMatrix m_al_0
See J.Tanaka Ph.D (2001) p136 for definition.
static void displayError(const char *file, const int line, const char *func, const enum ECode code)
Display a description of error and its location.
ECode
ECode is a error code enumerate.
@ kCannotGetMatrixInverse
Cannot calculate matrix inverse (bad track property or internal error)
@ kOutOfRange
Specified track-id out of range.
@ kDivisionByZero
Division by zero (bad track property or internal error)
@ kBadTrackSize
Track count too small to perform fit.
@ kBadCorrelationSize
Wrong correlation matrix size (internal error)
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.
enum KFitError::ECode setZeroCorrelation(void) override
Indicate no correlation between tracks.
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 setInitialVertex(const HepPoint3D &v)
Set an initial vertex point for the mass-vertex constraint fit.
double getCHIsq(void) const override
Get a chi-square of the fit.
std::vector< int > m_IsFixMass
Array of flags whether the track property is fixed at the mass.
enum KFitError::ECode updateMother(Particle *mother)
Update mother particle.
const CLHEP::HepSymMatrix getVertexError(void) const
Get a fitted vertex error matrix.
enum KFitError::ECode unfixMass(void)
Tell the object to unfix the last added track property at the invariant mass.
enum KFitError::ECode prepareInputSubMatrix(void) override
Build sub-matrices for minimum search from input-track properties.
~MassVertexFitKFit(void)
Destruct the object.
enum KFitError::ECode doFit(void)
Perform a mass-vertex-constraint fit.
double m_InvariantMass
Invariant mass.
enum KFitError::ECode setInvariantMass(const double m)
Set an invariant mass for the mass-vertex constraint fit.
enum KFitError::ECode makeCoreMatrix(void) override
Build matrices using the kinematical constraint.
enum KFitError::ECode prepareCorrelation(void) override
Build a grand correlation matrix from input-track properties.
MassVertexFitKFit(void)
Construct an object with no argument.
HepPoint3D m_AfterVertex
Vertex position after the fit.
enum KFitError::ECode setCorrelation(const CLHEP::HepMatrix &m) override
Set a correlation matrix.
std::vector< CLHEP::HepMatrix > m_AfterTrackVertexError
array of vertex error matrices after the fit.
const CLHEP::HepMatrix getCorrelation(const int id1, const int id2, const int flag=KFitConst::kAfterFit) const override
Get a correlation matrix between two tracks.
double getTrackCHIsq(const int id) const override
Get a chi-square of the track.
const HepPoint3D getVertex(const int flag=KFitConst::kAfterFit) const
Get a vertex position.
CLHEP::HepSymMatrix m_AfterVertexError
Vertex error matrix after the fit.
enum KFitError::ECode prepareOutputMatrix(void) override
Build an output error matrix.
const CLHEP::HepMatrix getTrackVertexError(const int id) const
Get a vertex error matrix of the track.
HepPoint3D m_BeforeVertex
Vertex position before the fit.
enum KFitError::ECode fixMass(void)
Tell the object to fix the last added track property at the invariant mass.
double getInvariantMass(void) const
Get an invariant mass.
Abstract base class for different kinds of events.
static const int kMaxTrackCount
Maximum track size.
static const int kAfterFit
Input parameter to specify after-fit when setting/getting a track attribute.
static const int kBeforeFit
Input parameter to specify before-fit when setting/getting a track attribute.
static const int kNumber7
Constant 7 to check matrix size (internal use)