14 #include <analysis/VertexFitting/KFit/KFitTrack.h>
16 using namespace CLHEP;
19 using namespace Belle2::analysis;
22 KFitTrack::KFitTrack()
24 this->m_PXEBefore.m_P = HepLorentzVector();
26 this->m_PXEBefore.m_E = HepSymMatrix(KFitConst::kNumber7, 0);
27 this->m_PXEAfter. m_P = HepLorentzVector();
29 this->m_PXEAfter. m_E = HepSymMatrix(KFitConst::kNumber7, 0);
33 this->m_VertexError = HepSymMatrix(3, 0);
37 KFitTrack::KFitTrack(
const KFitTrack& a) =
default;
42 const HepLorentzVector& p,
const HepPoint3D& x,
const HepSymMatrix& e,
const double charge,
47 checkMatrixDimension(e, KFitConst::kNumber7);
50 case KFitConst::kBeforeFit:
54 m_PXEAfter.m_P = HepLorentzVector();
56 m_PXEAfter.m_E = HepSymMatrix(KFitConst::kNumber7, 0);
59 case KFitConst::kAfterFit:
60 m_PXEBefore.m_P = HepLorentzVector();
62 m_PXEBefore.m_E = HepSymMatrix(KFitConst::kNumber7, 0);
72 m_VertexError = HepSymMatrix(3, 0);
76 KFitTrack::~KFitTrack() =
default;
83 this->m_PXEBefore = a.m_PXEBefore;
84 this->m_PXEAfter = a.m_PXEAfter;
85 this->m_Charge = a.m_Charge;
86 this->m_Mass = a.m_Mass;
87 this->m_Vertex = a.m_Vertex;
88 this->m_VertexError = a.m_VertexError;
96 KFitTrack::setMomentum(
const HepLorentzVector& p,
const int flag)
100 if (flag == KFitConst::kBeforeFit)
114 if (flag == KFitConst::kBeforeFit)
122 KFitTrack::setError(
const HepSymMatrix& e,
const int flag)
125 checkMatrixDimension(e, KFitConst::kNumber7);
127 if (flag == KFitConst::kBeforeFit)
135 KFitTrack::setCharge(
const double charge)
149 KFitTrack::setVertexError(
const HepSymMatrix& ve)
151 checkMatrixDimension(ve, 3);
156 const HepLorentzVector
157 KFitTrack::getMomentum(
const int flag)
const
160 return flag == KFitConst::kBeforeFit ? m_PXEBefore.m_P : m_PXEAfter.m_P;
168 return flag == KFitConst::kBeforeFit ? m_PXEBefore.m_X : m_PXEAfter.m_X;
173 KFitTrack::getError(
const int flag)
const
176 return flag == KFitConst::kBeforeFit ? m_PXEBefore.m_E : m_PXEAfter.m_E;
181 KFitTrack::getCharge()
const
188 KFitTrack::getMass()
const
195 KFitTrack::getVertex()
const
202 KFitTrack::getVertexError()
const
204 return m_VertexError;
209 KFitTrack::getFitParameter(
const int which,
const int flag)
const
213 const struct KFitPXE& pxe = flag == KFitConst::kBeforeFit ? m_PXEBefore : m_PXEAfter;
216 case 0:
return pxe.
m_P.x();
217 case 1:
return pxe.
m_P.y();
218 case 2:
return pxe.
m_P.z();
219 case 3:
return pxe.
m_X.x();
220 case 4:
return pxe.
m_X.y();
221 case 5:
return pxe.
m_X.z();
224 sprintf(buf,
"%s:%s(): which=%d out of range", __FILE__, __func__, which);
235 KFitTrack::getFitParameter(
const int flag)
const
237 HepMatrix a(KFitConst::kNumber6, 1, 0);
239 for (
int i = 0; i <= 5; i++)
240 a[i][0] = getFitParameter(i, flag);
247 KFitTrack::getFitError(
const int flag)
const
250 HepSymMatrix err(KFitConst::kNumber6, 0);
252 const HepSymMatrix& e = flag == KFitConst::kBeforeFit ? m_PXEBefore.m_E : m_PXEAfter.m_E;
255 for (
int i = 0; i < 3; i++) {
256 for (
int j = i; j < 3; j++) {
258 err[3 + i][3 + j] = e[4 + i][4 + j];
262 for (
int i = 0; i < 3; i++) {
263 for (
int j = 0; j < 3; j++) {
264 err[i][3 + j] = e[i][4 + j];
273 KFitTrack::getMomPos(
const int flag)
const
275 HepMatrix a(KFitConst::kNumber7, 1, 0);
278 case KFitConst::kBeforeFit:
279 a[0][0] = m_PXEBefore.m_P.x();
280 a[1][0] = m_PXEBefore.m_P.y();
281 a[2][0] = m_PXEBefore.m_P.z();
282 a[3][0] = m_PXEBefore.m_P.t();
283 a[4][0] = m_PXEBefore.m_X.x();
284 a[5][0] = m_PXEBefore.m_X.y();
285 a[6][0] = m_PXEBefore.m_X.z();
288 case KFitConst::kAfterFit:
289 a[0][0] = m_PXEAfter.m_P.x();
290 a[1][0] = m_PXEAfter.m_P.y();
291 a[2][0] = m_PXEAfter.m_P.z();
292 a[3][0] = m_PXEAfter.m_P.t();
293 a[4][0] = m_PXEAfter.m_X.x();
294 a[5][0] = m_PXEAfter.m_X.y();
295 a[6][0] = m_PXEAfter.m_X.z();