Belle II Software  release-05-01-25
RecoComposite.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributor: Wouter Hulsbergen, Francesco Tenchini, Jo-Frederik Krohn *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 
12 #include <analysis/VertexFitting/TreeFitter/RecoComposite.h>
13 #include <analysis/VertexFitting/TreeFitter/FitParams.h>
14 
15 #include <TMatrixFSym.h>
16 
17 namespace TreeFitter {
18 
19  RecoComposite::RecoComposite(Belle2::Particle* particle, const ParticleBase* mother)
20  : ParticleBase(particle, mother), m_params(), m_hasEnergy(true)
21  {
22  updateParams();
23  }
24 
25  ErrCode RecoComposite::initParticleWithMother(FitParams& fitparams)
26  {
27  return initTau(fitparams);
28  }
29 
31  {
32  const int posindex = posIndex();
33  const int momindex = momIndex();
34 
35  fitparams.getStateVector().segment(posindex, 3) = m_params.segment(0, 3);
36 
37  fitparams.getStateVector().segment(momindex, 4) = m_params.segment(3, 4);
38 
39  return ErrCode(ErrCode::Status::success) ;
40  }
41 
43  {
44  const TVector3 pos = particle()->getVertex();
45  const TVector3 mom = particle()->getMomentum();
46  const double energy = particle()->getEnergy();
47 
48  m_params = Eigen::Matrix<double, 7, 1>::Zero(7, 1);
49  m_params(0) = pos.X();
50  m_params(1) = pos.Y();
51  m_params(2) = pos.Z();
52  m_params(3) = mom.X();
53  m_params(4) = mom.Y();
54  m_params(5) = mom.Z();
55 
56  m_params(6) = energy;
57 
58  m_covariance = Eigen::Matrix < double, -1, -1, 0, 7, 7 >::Zero(7, 7);
59  const TMatrixFSym cov7in = particle()->getMomentumVertexErrorMatrix(); //this is (p,E,x)
60 
61  for (int row = 0; row < 4; ++row) { //first the p,E block
62  for (int col = 0; col <= row; ++col) {
63  m_covariance(3 + row, 3 + col) = cov7in[row][col];
64  }
65  }
66 
67  for (int row = 0; row < 3; ++row) { //then the x block
68  for (int col = 0; col <= row; ++col) {
69  m_covariance(row, col) = cov7in[3 + row][3 + col];
70  }
71  }
72  }
73 
74  ErrCode RecoComposite::projectRecoComposite(const FitParams& fitparams, Projection& p) const
75  {
76  const int posindex = posIndex() ;
77  const int momindex = momIndex() ;
78 
79  p.getResiduals().segment(0, 3) = m_params.segment(0, 3) - fitparams.getStateVector().segment(posindex, 3);
80 
81  p.getResiduals().segment(3, 4) = m_params.segment(3, 4) - fitparams.getStateVector().segment(momindex, 4);
82 
83  for (int row = 0; row < 3; ++row) {
84  p.getH()(row, posindex + row) = -1;
85  }
86 
87  for (int row = 0; row < 4; ++row) {
88  p.getH()(3 + row, momindex + row) = -1;
89  }
90 
91  p.getV().triangularView<Eigen::Lower>() = m_covariance.triangularView<Eigen::Lower>();
92 
93  return ErrCode(ErrCode::Status::success) ;
94  }
95 
96  ErrCode RecoComposite::projectConstraint(Constraint::Type type, const FitParams& fitparams, Projection& p) const
97  {
98  ErrCode status;
99  switch (type) {
100  case Constraint::composite:
101  status |= projectRecoComposite(fitparams, p);
102  break ;
103  case Constraint::geometric:
104  status |= projectGeoConstraint(fitparams, p);
105  break ;
106  default:
107  status |= ParticleBase::projectConstraint(type, fitparams, p);
108  }
109  return status ;
110  }
111 
112 }
TreeFitter::RecoComposite::type
virtual int type() const override
get ype
Definition: RecoComposite.h:67
TreeFitter::ParticleBase::projectConstraint
virtual ErrCode projectConstraint(Constraint::Type, const FitParams &, Projection &) const
project constraint.
Definition: ParticleBase.cc:537
Belle2::Particle::getVertex
TVector3 getVertex() const
Returns vertex position (POCA for charged, IP for neutral FS particles)
Definition: Particle.h:529
TreeFitter::RecoComposite::momIndex
virtual int momIndex() const override
get momentum index in statevector
Definition: RecoComposite.h:76
TreeFitter::RecoComposite::projectRecoComposite
ErrCode projectRecoComposite(const FitParams &fitparams, Projection &p) const
project this particle constraint
Definition: RecoComposite.cc:82
TreeFitter::ErrCode
abstract errorocode be aware that the default is succes
Definition: ErrCode.h:23
TreeFitter::RecoComposite::initMotherlessParticle
virtual ErrCode initMotherlessParticle(FitParams &fitparams) override
init particle in case it has no mother
Definition: RecoComposite.cc:38
TreeFitter::RecoComposite::initParticleWithMother
virtual ErrCode initParticleWithMother(FitParams &fitparams) override
init particle in case it has a mother
Definition: RecoComposite.cc:33
TreeFitter::RecoComposite::m_covariance
Eigen::Matrix< double, -1, -1, 0, 7, 7 > m_covariance
only lower triangle filled!
Definition: RecoComposite.h:97
TreeFitter::FitParams
Class to store and manage fitparams (statevector)
Definition: FitParams.h:29
TreeFitter::RecoComposite::m_params
Eigen::Matrix< double, 7, 1 > m_params
column vector to store the measurement
Definition: RecoComposite.h:94
TreeFitter::RecoComposite::posIndex
virtual int posIndex() const override
get position index in statevectof x,y,z,tau,px,py,pz
Definition: RecoComposite.h:70
TreeFitter::FitParams::getStateVector
Eigen::Matrix< double, -1, 1, 0, MAX_MATRIX_SIZE, 1 > & getStateVector()
getter for the fit parameters/statevector
Definition: FitParams.h:74
TreeFitter::ParticleBase::initTau
ErrCode initTau(FitParams &par) const
initialises tau as a length
Definition: ParticleBase.cc:553
Belle2::Particle::getEnergy
float getEnergy() const
Returns total energy.
Definition: Particle.h:455
TreeFitter::Constraint::Type
Type
type of constraints the order of these constraints is important: it is the order in which they are ap...
Definition: Constraint.h:36
Belle2::Particle::getMomentumVertexErrorMatrix
TMatrixFSym getMomentumVertexErrorMatrix() const
Returns 7x7 error matrix.
Definition: Particle.cc:386
TreeFitter::ParticleBase::projectGeoConstraint
virtual ErrCode projectGeoConstraint(const FitParams &, Projection &) const
project geometrical constraint
Definition: ParticleBase.cc:359
TreeFitter::RecoComposite::updateParams
void updateParams()
update chaed params
Definition: RecoComposite.cc:50
Belle2::Particle::getMomentum
TVector3 getMomentum() const
Returns momentum vector.
Definition: Particle.h:475
Belle2::Particle
Class to store reconstructed particles.
Definition: Particle.h:77
TreeFitter::RecoComposite::RecoComposite
RecoComposite(Belle2::Particle *bc, const ParticleBase *mother)
constructor
Definition: RecoComposite.cc:27
TreeFitter::ParticleBase::particle
Belle2::Particle * particle() const
get basf2 particle
Definition: ParticleBase.h:109
TreeFitter::RecoComposite::projectConstraint
virtual ErrCode projectConstraint(Constraint::Type, const FitParams &, Projection &) const override
project this constraint
Definition: RecoComposite.cc:104