Belle II Software development
Origin.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * External Contributor: Wouter Hulsbergen *
5 * *
6 * See git log for contributors and copyright holders. *
7 * This file is licensed under LGPL-3.0, see LICENSE.md. *
8 **************************************************************************/
9
10#include <analysis/VertexFitting/TreeFitter/Origin.h>
11#include <analysis/VertexFitting/TreeFitter/ConstraintConfiguration.h>
12#include <analysis/VertexFitting/TreeFitter/FitParams.h>
13#include <analysis/VertexFitting/TreeFitter/Projection.h>
14#include <analysis/dataobjects/Particle.h>
15#include <framework/logging/Logger.h>
16
17#include <Math/Vector3D.h>
18
19namespace TreeFitter {
20
22 const ConstraintConfiguration& config,
23 bool forceFitAll
24 ) :
25 ParticleBase("Origin"),
26 m_constraintDimension(config.m_originDimension), //this also affects the geometric constraint
29 m_posVec(config.m_originDimension),
30 m_covariance(config.m_originDimension, config.m_originDimension),
31 m_isBeamSpot(config.m_ipConstraint),
33 {
34 addDaughter(daughter, config, forceFitAll);
35 initOrigin();
36 }
37
39 {
40 return ErrCode(ErrCode::Status::success);
41 }
42
44 {
45 ErrCode status;
46 const int posindex = posIndex();
47 fitparams.getStateVector().segment(posindex, m_constraintDimension) = m_posVec.segment(0, m_constraintDimension);
48
49 for (auto daughter : m_daughters) {
50 status |= daughter->initMotherlessParticle(fitparams);
51 status |= daughter->initParticleWithMother(fitparams);
52 }
53
54 return status;
55 }
56
58 {
60 m_covariance = Eigen::Matrix<double, 3, 3>::Zero(3, 3);
61 const ROOT::Math::XYZVector& vertexVector = m_beamSpot->getIPPosition();
62 const TMatrixDSym& covVertex = m_beamSpot->getCovVertex();
63 m_posVec(0) = vertexVector.X();
64 m_posVec(1) = vertexVector.Y();
65 m_posVec(2) = vertexVector.Z();
66 m_covariance(0, 0) = covVertex(0, 0);
67 m_covariance(1, 1) = covVertex(1, 1);
68 m_covariance(2, 2) = covVertex(2, 2);
69 m_covariance(1, 0) = covVertex(1, 0);
70 m_covariance(2, 0) = covVertex(2, 0);
71 m_covariance(2, 1) = covVertex(2, 1);
72
73 } else if (m_beamSpot && m_isBeamSpot && m_constraintDimension == 2) {
74 m_covariance = Eigen::Matrix<double, 2, 2>::Zero(2, 2);
75 const ROOT::Math::XYZVector& vertexVector = m_beamSpot->getIPPosition();
76 const TMatrixDSym& covVertex = m_beamSpot->getCovVertex();
77 m_posVec(0) = vertexVector.X();
78 m_posVec(1) = vertexVector.Y();
79 m_covariance(0, 0) = covVertex(0, 0);
80 m_covariance(1, 1) = covVertex(1, 1);
81 m_covariance(1, 0) = covVertex(1, 0);
82
83 } else if (!m_isBeamSpot && m_constraintDimension == 3) {
84
85 if (!(m_customOriginVertex.size() == 3) || !(m_customOriginCovariance.size() == 9)) {
86 B2FATAL("Incorrect dimension of customOriginVertex or customOriginCovariance. customOriginVertex dim = "
87 << m_customOriginVertex.size() << " customOriginCovariance dim = " << m_customOriginCovariance.size());
88 } else if ((m_customOriginCovariance.at(0) < 0) || (m_customOriginCovariance.at(4) < 0) || (m_customOriginCovariance.at(8) < 0)) {
89 B2WARNING("An element of customOriginCovariance diagonal is smaller than 0.");
90 return ErrCode(ErrCode::Status::badsetup);
91 }
99
100 // all with z
106 } else {
107 B2FATAL("The Origin is nether beamspot nor custom. This is ether a configuration error or no beam parameters were found to build the beam spot.");
108 }
109
110 return ErrCode(ErrCode::Status::success);
111 }
112
114 {
115 ErrCode status;
116 const int posindex = posIndex();
117 for (int row = 0; row < m_constraintDimension; ++row) {
118 fitpar.getCovariance()(posindex + row, posindex + row) = 1000 * m_covariance(row, row);
119 }
120 for (auto daughter : m_daughters) {
121 status |= daughter->initCovariance(fitpar);
122 }
123 return status;
124 }
125
127 {
128 const int posindex = posIndex();
129
130 p.getResiduals().segment(0, m_constraintDimension) =
131 m_posVec.segment(0, m_constraintDimension) -
132 fitparams.getStateVector().segment(posindex, m_constraintDimension);
133
134 for (int row = 0; row < m_constraintDimension; ++row) {
135 p.getH()(row, posindex + row) = -1;
136
137 for (int col = 0; col <= row; ++col) {
138 p.getV()(row, col) = m_covariance(row, col);
139 }
140 }
141
142 return ErrCode(ErrCode::Status::success);
143 }
144
146 {
147 ErrCode status;
148 switch (type) {
149 case Constraint::origin:
150 status |= projectOriginConstraint(fitparams, p);
151 break;
152 default:
153 status |= ParticleBase::projectConstraint(type, fitparams, p);
154 }
155 return status;
156 }
157
158 void Origin::addToConstraintList(constraintlist& list, int depth) const
159 {
160 for (auto daughter : m_daughters) {
161 daughter->addToConstraintList(list, depth - 1);
162 }
163 list.push_back(Constraint(this, Constraint::origin, depth, m_constraintDimension)) ;
164 }
165}
Class to store reconstructed particles.
Definition Particle.h:76
class to manage the order of constraints and their filtering
Definition Constraint.h:20
Type
type of constraints the order of these constraints is important: it is the order in which they are ap...
Definition Constraint.h:27
abstract errorocode be aware that the default is success
Definition ErrCode.h:14
Class to store and manage fitparams (statevector)
Definition FitParams.h:20
Eigen::Matrix< double, -1, 1, 0, MAX_MATRIX_SIZE, 1 > & getStateVector()
getter for the fit parameters/statevector
Definition FitParams.h:65
Eigen::Matrix< double, -1, -1, 0, MAX_MATRIX_SIZE, MAX_MATRIX_SIZE > & getCovariance()
getter for the states covariance
Definition FitParams.h:53
ErrCode projectOriginConstraint(const FitParams &fitpar, Projection &) const
the actual constraint projection
Definition Origin.cc:126
const int m_constraintDimension
dimension of the constraint
Definition Origin.h:82
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor, 3, 3 > m_covariance
covariance of the origin dont know size but I know the max size
Definition Origin.h:96
const std::vector< double > m_customOriginVertex
vertex coordinates
Definition Origin.h:85
virtual ErrCode initCovariance(FitParams &fitpar) const override
init covariance matrix of the constraint
Definition Origin.cc:113
virtual ErrCode projectConstraint(Constraint::Type, const FitParams &, Projection &) const override
the abstract projection
Definition Origin.cc:145
ErrCode initOrigin()
init the origin "particle"
Definition Origin.cc:57
virtual int type() const override
get particle type
Definition Origin.h:53
const std::vector< double > m_customOriginCovariance
vertex covariance
Definition Origin.h:88
Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, 3, 1 > m_posVec
vertex position of the origin
Definition Origin.h:91
Origin(Belle2::Particle *particle, const ConstraintConfiguration &config, const bool forceFitAll)
Constructor.
Definition Origin.cc:21
virtual ErrCode initParticleWithMother(FitParams &fitparams) override
init particle, used if it has a mother
Definition Origin.cc:38
virtual void addToConstraintList(constraintlist &list, int depth) const override
adds the origin as a particle to the constraint list
Definition Origin.cc:158
virtual ErrCode initMotherlessParticle(FitParams &fitparams) override
init particle, used if it has no mother
Definition Origin.cc:43
virtual int posIndex() const override
vertex position index in the statevector
Definition Origin.h:65
const bool m_isBeamSpot
is this the beam constraint?
Definition Origin.h:99
Belle2::DBObjPtr< Belle2::BeamSpot > m_beamSpot
the parameters are initialize elsewhere this is just a pointer to that
Definition Origin.h:102
const int m_inflationFactorCovZ
inflated the covariance matrix in z by this number
Definition Origin.h:105
virtual ParticleBase * addDaughter(Belle2::Particle *, const ConstraintConfiguration &config, bool forceFitAll=false)
add daughter
virtual ErrCode projectConstraint(Constraint::Type, const FitParams &, Projection &) const
project constraint.
ParticleBase(Belle2::Particle *particle, const ParticleBase *mother, const ConstraintConfiguration *config=nullptr)
default constructor
std::vector< ParticleBase * > m_daughters
daughter container
std::vector< Constraint > constraintlist
alias
class to store the projected residuals and the corresponding jacobian as well as the covariance matri...
Definition Projection.h:18