Belle II Software development
RaveKinematicVertexFitter Class Reference

The RaveKinematicVertexFitter class is part of the RaveInterface together with RaveSetup. More...

#include <RaveKinematicVertexFitter.h>

Public Member Functions

 RaveKinematicVertexFitter ()
 The default constructor checks if RaveSetup was initialized and will set the attributes of RaveKinematicVertexFitter.
 
 ~RaveKinematicVertexFitter ()
 Destructor.
 
void addTrack (const Particle *aParticlePtr)
 add a track (in the format of a Particle) to set of tracks that should be fitted to a vertex
 
void addMother (const Particle *aMotherParticlePtr)
 All daughters of the argument of this function will be used as input for the vertex fit.
 
void setMother (const Particle *aMotherParticlePtr)
 Set Mother particle for Vertex/momentum update.
 
int fit ()
 do the kinematic vertex fit with all tracks previously added with the addTrack or addMother function.
 
ROOT::Math::XYZVector getPos ()
 get the position of the fitted vertex.
 
double getPValue ()
 get the p value of the fitted vertex.
 
double getNdf ()
 get the number of degrees of freedom (NDF) of the fitted vertex.
 
double getChi2 ()
 get the χ² of the fitted vertex.
 
TMatrixDSym getCov ()
 get the covariance matrix (7x7).
 
TMatrixDSym getVertexErrorMatrix ()
 get the covariance matrix (3x3) of the of the fitted vertex position.
 
void useBeamSpot (bool beamSpot=true)
 Overwrite the global option in ReveSetup that tells the fitter if beam spot info should be used or not.
 
ParticlegetMother ()
 returns a pointer to the mother particle
 
void updateMother ()
 update the mother particle
 
void updateDaughters ()
 update the Daughters particles
 
void clearTracks ()
 Delete all information of previously added tracks and fitted results.
 
void setMassConstFit (bool isConstFit=true)
 Set mass constrained fit.
 
void setVertFit (bool isVertFit=true)
 Set vertex fit: set false in case of mass fit only.
 
void Print () const
 Print all attributes of this object to terminal.
 

Protected Attributes

bool m_useBeamSpot
 flag determines if the beam spot will be used or not.
 
Particlem_motherParticlePtr
 pointer to the mother particle who's daughters will be used in the fit.
 
std::string m_raveAlgorithm
 Algorithm used by rave (kalman, avr, ...)
 
rave::KinematicTree m_fittedResult
 the output of the kinematic fit
 
std::vector< rave::Track > m_raveTracks
 holds the tracks that were added to a RaveVertexFitter object in the format used by Rave
 
std::vector< rave::Vertex > m_raveVertices
 holds the fitted vertices after fit() was called in the format used by Rave
 
std::vector< rave::KinematicParticle > m_inputParticles
 input particles for vertex fit in rave format
 
rave::KinematicParticle m_fittedParticle
 Particle fit output.
 
std::vector< Particle * > m_belleDaughters
 Belle Particle pointers input.
 
bool m_massConstFit
 flag determines if the mass fit is performed
 
bool m_vertFit
 flag determines if the vertex fit is performed
 
double m_fittedNdf
 Ndf of the vertex fit.
 
double m_fittedPValue
 Pvalue of the fit result.
 
double m_fittedChi2
 chi^2 of the vertex fit
 
ROOT::Math::XYZVector m_fittedPos
 Fitted vertex position.
 
ROOT::Math::PxPyPzEVector m_fitted4Vector
 4 momentum of the mother particle after the fit
 
TMatrixFSym m_fitted7Cov
 7x7 error matrix of the mother particle after the fit
 

Private Member Functions

TMatrixDSym ErrorMatrixMassToEnergy (const ROOT::Math::PxPyPzEVector &p4, const TMatrixDSym &MassErr)
 Convert the error matrix from P-M to P-E.
 
TMatrixDSym ErrorMatrixEnergyToMass (const ROOT::Math::PxPyPzEVector &p4, const TMatrixDSym &EnergyErr)
 Convert the error matrix from P-E to P-M.
 
IOIntercept::InterceptorScopeGuard< IOIntercept::OutputToLogMessagescaptureOutput ()
 Start capturing the output of rave and divert it to log messages.
 

Detailed Description

The RaveKinematicVertexFitter class is part of the RaveInterface together with RaveSetup.

To fit a vertex the user adds tracks (different formats are supported). Then calls the fit() function where the name of the fitting method and parameters can be passed as a string. RaveKinematicVertexFitter provides the getters to extract the results produced by Rave.

Definition at line 41 of file RaveKinematicVertexFitter.h.

Constructor & Destructor Documentation

◆ RaveKinematicVertexFitter()

The default constructor checks if RaveSetup was initialized and will set the attributes of RaveKinematicVertexFitter.

Definition at line 36 of file RaveKinematicVertexFitter.cc.

37 m_massConstFit(false), m_vertFit(true)
38{
39 if (RaveSetup::getRawInstance() == nullptr) {
40 B2FATAL("RaveSetup::initialize was not called. It has to be called before RaveSetup or RaveKinematicVertexFitter are used");
41 }
43}
std::string m_raveAlgorithm
Algorithm used by rave (kalman, avr, ...)
bool m_useBeamSpot
flag determines if the beam spot will be used or not.
bool m_massConstFit
flag determines if the mass fit is performed
Particle * m_motherParticlePtr
pointer to the mother particle who's daughters will be used in the fit.
bool m_vertFit
flag determines if the vertex fit is performed
bool m_useBeamSpot
flag determines if beam spot information should be used for vertex fit.
Definition RaveSetup.h:69
static RaveSetup * getRawInstance()
Same as getInstance(), but no check if the instance is initialised.
Definition RaveSetup.cc:29

Member Function Documentation

◆ addMother()

void addMother ( const Particle * aMotherParticlePtr)

All daughters of the argument of this function will be used as input for the vertex fit.

Writes back the result directly to the mother particle

Definition at line 104 of file RaveKinematicVertexFitter.cc.

105{
106 vector<Particle*> daughters = aMotherParticlePtr->getDaughters();
107
108 int nDaughters = daughters.size();
109 for (int i = 0; i not_eq nDaughters; ++i) {
110 addTrack(daughters[i]);
111 }
112
113 //store input pointer so fit results can be written to the mother particle after the fit
114 auto* tmp = const_cast<Particle*>(aMotherParticlePtr);
116
117}
std::vector< Particle * > getDaughters() const
Returns a vector of pointers to daughter particles.
Definition Particle.cc:668
void addTrack(const Particle *aParticlePtr)
add a track (in the format of a Particle) to set of tracks that should be fitted to a vertex

◆ addTrack()

void addTrack ( const Particle * aParticlePtr)

add a track (in the format of a Particle) to set of tracks that should be fitted to a vertex

Definition at line 67 of file RaveKinematicVertexFitter.cc.

68{
69 rave::Vector7D raveState(aParticlePtr->getX(), aParticlePtr->getY(), aParticlePtr->getZ(), aParticlePtr->getPx(),
70 aParticlePtr->getPy(), aParticlePtr->getPz(), aParticlePtr->getMass());
71 TMatrixDSym covP = aParticlePtr->getMomentumVertexErrorMatrix();
72
73 TMatrixDSym covE(7);
74 for (int i = 0; i < 7; i++) {
75 for (int j = 0; j < 7; j++) {
76 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
77 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
78 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
79 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
80 }
81 }
82
83 TMatrixDSym cov = ErrorMatrixEnergyToMass(aParticlePtr->get4Vector(), covE);
84
85 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2), // x x , x y, x z
86 cov(1, 1), cov(1, 2), cov(2, 2), // y y , y z, z z
87 cov(0, 3), cov(0, 4), cov(0, 5), // x px , x py, x pz
88 cov(1, 3), cov(1, 4), cov(1, 5), // y px , y py, y pz
89 cov(2, 3), cov(2, 4), cov(2, 5), // z px , z py, z pz
90 cov(3, 3), cov(3, 4), cov(3, 5), // px px , px py, px pz
91 cov(4, 4), cov(4, 5), cov(5, 5), // py py , py pz, pz pz
92 cov(0, 6), cov(1, 6), cov(2, 6), // x m , y m, z m
93 cov(3, 6), cov(4, 6), cov(5, 6), // px m, py m, pz m
94 cov(6, 6)); // mm
95
96 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->getCharge()), 1, 1);
97 // 1 and 1 are dummy values for chi2 and ndf. the are not used for the vertex fit
98
99 m_inputParticles.push_back(aRaveParticle);
100 m_belleDaughters.push_back(const_cast<Particle*>(aParticlePtr));
101
102}
double getPx() const
Returns x component of momentum.
Definition Particle.h:607
double getPz() const
Returns z component of momentum.
Definition Particle.h:625
double getX() const
Returns x component of vertex position.
Definition Particle.h:660
double getPy() const
Returns y component of momentum.
Definition Particle.h:616
double getZ() const
Returns z component of vertex position.
Definition Particle.h:678
double getCharge(void) const
Returns particle charge.
Definition Particle.cc:653
ROOT::Math::PxPyPzEVector get4Vector() const
Returns Lorentz vector.
Definition Particle.h:567
double getY() const
Returns y component of vertex position.
Definition Particle.h:669
TMatrixFSym getMomentumVertexErrorMatrix() const
Returns 7x7 error matrix.
Definition Particle.cc:451
double getMass() const
Returns invariant mass (= nominal for FS particles)
Definition Particle.h:527
std::vector< Particle * > m_belleDaughters
Belle Particle pointers input.
TMatrixDSym ErrorMatrixEnergyToMass(const ROOT::Math::PxPyPzEVector &p4, const TMatrixDSym &EnergyErr)
Convert the error matrix from P-E to P-M.
std::vector< rave::KinematicParticle > m_inputParticles
input particles for vertex fit in rave format

◆ captureOutput()

Start capturing the output of rave and divert it to log messages.

Capturing will finish as soon as the returned object goes out of scope

Definition at line 45 of file RaveKinematicVertexFitter.cc.

46{
47 static IOIntercept::OutputToLogMessages s_captureOutput("Rave", LogConfig::c_Debug, LogConfig::c_Debug);
48 return IOIntercept::start_intercept(s_captureOutput);
49}
@ c_Debug
Debug: for code development.
Definition LogConfig.h:26
InterceptorScopeGuard< T > start_intercept(T &interceptor)
Convenience wrapper to simplify use of InterceptorScopeGuard<T>.

◆ clearTracks()

void clearTracks ( )
inline

Delete all information of previously added tracks and fitted results.

Definition at line 104 of file RaveKinematicVertexFitter.h.

105 {
106 m_inputParticles.clear();
107 m_motherParticlePtr = nullptr;
108 }

◆ ErrorMatrixEnergyToMass()

TMatrixDSym ErrorMatrixEnergyToMass ( const ROOT::Math::PxPyPzEVector & p4,
const TMatrixDSym & EnergyErr )
private

Convert the error matrix from P-E to P-M.

It Requires an input error matrix in the form X,P,E

Definition at line 482 of file RaveKinematicVertexFitter.cc.

483{
484
485 TMatrix jac(7, 7);
486 for (int i = 0; i < 7; i++) {
487 for (int j = 0; j < 7; j++) {
488 if (i == j) jac(i, j) = 1;
489 else jac(i, j) = 0;
490 }
491 }
492 jac(6, 3) = -1 * p4.Px() / p4.M();
493 jac(6, 4) = -1 * p4.Py() / p4.M();
494 jac(6, 5) = -1 * p4.Pz() / p4.M();
495 jac(6, 6) = p4.E() / p4.M();
496
497 TMatrix jact(7, 7); jact.Transpose(jac);
498 TMatrix MassErrPart(7, 7); MassErrPart.Mult(jac, EnergyErr);
499 TMatrix MassErrTemp(7, 7); MassErrTemp.Mult(MassErrPart, jact);
500
501 TMatrixDSym MassErr(7);
502 for (int i = 0; i < 7; i++) {
503 for (int j = 0; j < 7; j++) {
504 MassErr(i, j) = MassErrTemp(i, j);
505 }
506 }
507
508 return MassErr;
509}

◆ ErrorMatrixMassToEnergy()

TMatrixDSym ErrorMatrixMassToEnergy ( const ROOT::Math::PxPyPzEVector & p4,
const TMatrixDSym & MassErr )
private

Convert the error matrix from P-M to P-E.

It Requires an input error matrix in the form X,P,M

Definition at line 452 of file RaveKinematicVertexFitter.cc.

453{
454
455 TMatrix jac(7, 7);
456 for (int i = 0; i < 7; i++) {
457 for (int j = 0; j < 7; j++) {
458 if (i == j) jac(i, j) = 1;
459 else jac(i, j) = 0;
460 }
461 }
462 jac(6, 3) = p4.Px() / p4.E();
463 jac(6, 4) = p4.Py() / p4.E();
464 jac(6, 5) = p4.Pz() / p4.E();
465 jac(6, 6) = p4.M() / p4.E();
466
467
468 TMatrix jact(7, 7); jact.Transpose(jac);
469 TMatrix EnergyErrPart(7, 7); EnergyErrPart.Mult(jac, MassErr);
470 TMatrix EnergyErrTemp(7, 7); EnergyErrTemp.Mult(EnergyErrPart, jact);
471
472 TMatrixDSym EnergyErr(7);
473 for (int i = 0; i < 7; i++) {
474 for (int j = 0; j < 7; j++) {
475 EnergyErr(i, j) = EnergyErrTemp(i, j);
476 }
477 }
478
479 return EnergyErr;
480}

◆ fit()

int fit ( )

do the kinematic vertex fit with all tracks previously added with the addTrack or addMother function.

The return value is 1 if a vertex is successfully found. Return value 0 means the fit was not successful. -1 means not enough tracks were added

Definition at line 128 of file RaveKinematicVertexFitter.cc.

129{
130 // make sure all output in this function is converted to log messages
131 auto output_capture = captureOutput();
132
133 if (m_inputParticles.size() < 2 && m_vertFit) {
134 return -1;
135 }
136 int nOfVertices = -100;
137 if (m_useBeamSpot == true) {
138 const ROOT::Math::XYZVector& bsPos = RaveSetup::getRawInstance()->m_beamSpot;
139 const TMatrixDSym& bsCov = RaveSetup::getRawInstance()->m_beamSpotCov;
140 const rave::Covariance3D bsCovRave(bsCov(0, 0), bsCov(0, 1), bsCov(0, 2), bsCov(1, 1), bsCov(1, 2), bsCov(2, 2));
141 RaveSetup::getRawInstance()->m_raveVertexFactory->setBeamSpot(rave::Ellipsoid3D(rave::Point3D(bsPos.X(), bsPos.Y(), bsPos.Z()),
142 bsCovRave));
143 }
144
145 if (m_vertFit && m_massConstFit) {
146
147 rave::KinematicConstraint cs2 = rave::KinematicConstraintBuilder().createMultiTrackMassKinematicConstraint(
148 m_motherParticlePtr->getPDGMass(), m_inputParticles.size());
149 try {
151 m_fittedParticle = m_fittedResult.topParticle();
152 } catch (...) {
153 nOfVertices = 0;
154 }
155 } else {
156
157 if (m_vertFit) {
158 if (!m_massConstFit) {
159 try {
161 m_fittedParticle = m_fittedResult.topParticle();
162 } catch (...) {
163 nOfVertices = 0;
164 }
165 }
166
167 }
168
169 if (!m_vertFit && m_massConstFit) {
170
171 try {
172
173 Particle* aParticlePtr = m_motherParticlePtr;
174
175 rave::Vector7D raveState(aParticlePtr->getX(), aParticlePtr->getY(), aParticlePtr->getZ(), aParticlePtr->getPx(),
176 aParticlePtr->getPy(), aParticlePtr->getPz(), aParticlePtr->getMass());
177 TMatrixFSym covP = aParticlePtr->getMomentumVertexErrorMatrix();
178
179 float chi2 = 1;
180 float ndf = 1.;
181
182 TMatrixDSym covE(7);
183 for (int i = 0; i < 7; i++) {
184 for (int j = 0; j < 7; j++) {
185 if (i < 3 && j < 3) covE(i, j) = covP(i + 4, j + 4);
186 if (i > 2 && j > 2) covE(i, j) = covP(i - 3, j - 3);
187 if (i < 3 && j > 2) covE(i, j) = covP(i + 4, j - 3);
188 if (i > 2 && j < 3) covE(i, j) = covP(i - 3, j + 4);
189 }
190 }
191
192 TMatrixDSym cov = ErrorMatrixEnergyToMass(aParticlePtr->get4Vector(), covE);
193
194 rave::Covariance7D raveCov(cov(0, 0), cov(0, 1), cov(0, 2), // x x , x y, x z
195 cov(1, 1), cov(1, 2), cov(2, 2), // y y , y z, z z
196 cov(0, 3), cov(0, 4), cov(0, 5), // x px , x py, x pz
197 cov(1, 3), cov(1, 4), cov(1, 5), // y px , y py, y pz
198 cov(2, 3), cov(2, 4), cov(2, 5), // z px , z py, z pz
199 cov(3, 3), cov(3, 4), cov(3, 5), // px px , px py, px pz
200 cov(4, 4), cov(4, 5), cov(5, 5), // py py , py pz, pz pz
201 cov(0, 6), cov(1, 6), cov(2, 6), // x m , y m, z m
202 cov(3, 6), cov(4, 6), cov(5, 6), // px m, py m, pz m
203 cov(6, 6)); // mm
204
205 rave::TransientTrackKinematicParticle aRaveParticle(raveState, raveCov, rave::Charge(aParticlePtr->getCharge()), chi2, ndf);
206
207 std::vector< rave::KinematicParticle > parts; parts.push_back(aRaveParticle);
208
209 rave::KinematicConstraint constraint = rave::KinematicConstraintBuilder().createMassKinematicConstraint(
210 m_motherParticlePtr->getPDGMass(), 0.);
211
212 if (m_motherParticlePtr->getMomentumVertexErrorMatrix().Determinant() != 0) {
213
214 std::vector< rave::KinematicParticle > refitted = RaveSetup::getRawInstance()->m_raveKinematicTreeFactory->useParticleFitter(parts,
215 constraint, "ppf:lppf");
216
217 m_fittedParticle = refitted[0];
218
219 } else {
220 B2ERROR("[RaveKinematicVertexFitter]: VertexException saying ParentParticleFitter::error inverting covariance matrix occurred");
221 nOfVertices = 0;
222 }
223
224
225 } catch (...) {
226 nOfVertices = 0;
227 }
228 }
229
230 }
231
232
233 rave::Vector7D fittedState;
234 rave::Covariance7D fittedCov;
235
236 try {
237 fittedState = m_fittedParticle.fullstate();
238 fittedCov = m_fittedParticle.fullerror();
239 } catch (...) {
240 nOfVertices = 0;
241 }
242
243
244 for (auto& i : m_inputParticles) i.unlink();
245 m_inputParticles.clear();
246 //
247
248 if (nOfVertices == 0) { // vertex fit not successful
249 return 0;
250 }
251
252 if (m_vertFit) {
253 rave::KinematicVertex fittedVertex = m_fittedResult.currentDecayVertex();
254
255 m_fittedNdf = fittedVertex.ndf();
256 m_fittedChi2 = fittedVertex.chiSquared();
257 m_fittedPValue = ROOT::Math::chisquared_cdf_c(m_fittedChi2, m_fittedNdf);
258 m_fittedPos.SetXYZ(fittedVertex.position().x(), fittedVertex.position().y(), fittedVertex.position().z());
259
260 } else {
263 m_fittedPValue = ROOT::Math::chisquared_cdf_c(m_fittedChi2, m_fittedNdf);
265 }
266
267
268 m_fitted4Vector.SetXYZT(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(), fittedState.p4().energy());
269
270 m_fitted7Cov.ResizeTo(7, 7);
271
272 TMatrixDSym fitted7CovM(7);
273
274 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
275 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
276 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
277 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
278 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
279 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
280 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
281
282 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
283 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
284 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
285 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
286 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
287 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
288
289 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
290 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
291 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
292 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
293 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
294
295 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
296 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
297 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
298 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
299
300 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
301 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
302 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
303
304 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
305 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
306
307 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
308
309 TMatrixDSym fitted7CovE = ErrorMatrixMassToEnergy(m_fitted4Vector, fitted7CovM);
310
311 for (int i = 0; i < 7; i++) {
312 for (int j = 0; j < 7; j++) {
313 if (i < 4 && j < 4) m_fitted7Cov(i, j) = fitted7CovE(i + 3, j + 3);
314 if (i > 3 && j > 3) m_fitted7Cov(i, j) = fitted7CovE(i - 4, j - 4);
315 if (i < 4 && j > 3) m_fitted7Cov(i, j) = fitted7CovE(i + 3, j - 4);
316 if (i > 3 && j < 4) m_fitted7Cov(i, j) = fitted7CovE(i - 4, j + 3);
317 }
318 }
319
320 return 1;
321}
IOIntercept::InterceptorScopeGuard< IOIntercept::OutputToLogMessages > captureOutput()
Start capturing the output of rave and divert it to log messages.
ROOT::Math::PxPyPzEVector m_fitted4Vector
4 momentum of the mother particle after the fit
TMatrixFSym m_fitted7Cov
7x7 error matrix of the mother particle after the fit
rave::KinematicParticle m_fittedParticle
Particle fit output.
TMatrixDSym ErrorMatrixMassToEnergy(const ROOT::Math::PxPyPzEVector &p4, const TMatrixDSym &MassErr)
Convert the error matrix from P-M to P-E.
rave::KinematicTree m_fittedResult
the output of the kinematic fit
ROOT::Math::XYZVector m_fittedPos
Fitted vertex position.
TMatrixDSym m_beamSpotCov
beam spot position covariance matrix.
Definition RaveSetup.h:71
rave::KinematicTreeFactory * m_raveKinematicTreeFactory
< The RAVE Kinematic Tree factory is the principal interface offered by the RAVE for kinematic vertex...
Definition RaveSetup.h:78
ROOT::Math::XYZVector m_beamSpot
beam spot position.
Definition RaveSetup.h:70
rave::VertexFactory * m_raveVertexFactory
The RAVE vertex factory is the principal interface offered by the RAVE vertex fitting library.
Definition RaveSetup.h:74

◆ getChi2()

double getChi2 ( )

get the χ² of the fitted vertex.

Definition at line 425 of file RaveKinematicVertexFitter.cc.

426{
427 return m_fittedChi2;
428}

◆ getCov()

TMatrixDSym getCov ( )

get the covariance matrix (7x7).

Definition at line 430 of file RaveKinematicVertexFitter.cc.

431{
432 return m_fitted7Cov;
433}

◆ getMother()

Particle * getMother ( )

returns a pointer to the mother particle

Definition at line 405 of file RaveKinematicVertexFitter.cc.

406{
407 return m_motherParticlePtr;
408}

◆ getNdf()

double getNdf ( )

get the number of degrees of freedom (NDF) of the fitted vertex.

Definition at line 420 of file RaveKinematicVertexFitter.cc.

421{
422 return m_fittedNdf;
423}

◆ getPos()

ROOT::Math::XYZVector getPos ( )

get the position of the fitted vertex.

Definition at line 410 of file RaveKinematicVertexFitter.cc.

411{
412 return m_fittedPos;
413}

◆ getPValue()

double getPValue ( )

get the p value of the fitted vertex.

Definition at line 415 of file RaveKinematicVertexFitter.cc.

416{
417 return m_fittedPValue;
418}

◆ getVertexErrorMatrix()

TMatrixDSym getVertexErrorMatrix ( )

get the covariance matrix (3x3) of the of the fitted vertex position.

Definition at line 435 of file RaveKinematicVertexFitter.cc.

436{
437 TMatrixDSym posErr(3);
438 posErr(0, 0) = m_fitted7Cov(4, 4);
439 posErr(0, 1) = m_fitted7Cov(4, 5);
440 posErr(0, 2) = m_fitted7Cov(4, 6);
441 posErr(1, 0) = m_fitted7Cov(5, 4);
442 posErr(1, 1) = m_fitted7Cov(5, 5);
443 posErr(1, 2) = m_fitted7Cov(5, 6);
444 posErr(2, 0) = m_fitted7Cov(6, 4);
445 posErr(2, 1) = m_fitted7Cov(6, 5);
446 posErr(2, 2) = m_fitted7Cov(6, 6);
447
448 return posErr;
449}

◆ Print()

void Print ( ) const
inline

Print all attributes of this object to terminal.

Definition at line 117 of file RaveKinematicVertexFitter.h.

118 {
119 B2INFO("useBeamSpot: " << m_useBeamSpot);
120 B2INFO("number of rave::Tracks: " << m_inputParticles.size());
121 }

◆ setMassConstFit()

void setMassConstFit ( bool isConstFit = true)

Set mass constrained fit.

Definition at line 55 of file RaveKinematicVertexFitter.cc.

56{
57 m_massConstFit = isConstFit;
58}

◆ setMother()

void setMother ( const Particle * aMotherParticlePtr)

Set Mother particle for Vertex/momentum update.

Not to be used with addMother

Definition at line 120 of file RaveKinematicVertexFitter.cc.

121{
122 auto* tmp = const_cast<Particle*>(aMotherParticlePtr);
124}

◆ setVertFit()

void setVertFit ( bool isVertFit = true)

Set vertex fit: set false in case of mass fit only.

Definition at line 60 of file RaveKinematicVertexFitter.cc.

61{
62 m_vertFit = isVertFit;
63}

◆ updateDaughters()

void updateDaughters ( )

update the Daughters particles

Definition at line 328 of file RaveKinematicVertexFitter.cc.

329{
330
331 m_fittedResult.topParticle();
332 std::vector< rave::KinematicParticle > rDau = m_fittedResult.daughterParticles();
333 std::vector<Particle*> bDau = m_belleDaughters;
334 if (rDau.size() == bDau.size()) {
335 for (unsigned ii = 0; ii < bDau.size(); ii++) {
336 rave::Vector7D fittedState;
337 rave::Covariance7D fittedCov;
338 fittedState = rDau[ii].fullstate();
339 fittedCov = rDau[ii].fullerror();
340
341 ROOT::Math::PxPyPzEVector p4(fittedState.p4().p3().x(), fittedState.p4().p3().y(), fittedState.p4().p3().z(),
342 fittedState.p4().energy());
343
344 ROOT::Math::XYZVector x3(fittedState.x(), fittedState.y(), fittedState.z());
345
346
347 TMatrixDSym fitted7CovM(7);
348 fitted7CovM(3, 6) = fittedCov.dpxm(); fitted7CovM(6, 3) = fitted7CovM(3, 6);
349 fitted7CovM(4, 6) = fittedCov.dpym(); fitted7CovM(6, 4) = fitted7CovM(4, 6);
350 fitted7CovM(5, 6) = fittedCov.dpzm(); fitted7CovM(6, 5) = fitted7CovM(5, 6);
351 fitted7CovM(6, 6) = fittedCov.dmm(); fitted7CovM(6, 6) = fitted7CovM(6, 6);
352 fitted7CovM(0, 6) = fittedCov.dxm(); fitted7CovM(6, 0) = fitted7CovM(0, 6);
353 fitted7CovM(1, 6) = fittedCov.dym(); fitted7CovM(6, 1) = fitted7CovM(1, 6);
354 fitted7CovM(2, 6) = fittedCov.dzm(); fitted7CovM(6, 2) = fitted7CovM(2, 6);
355
356 fitted7CovM(3, 3) = fittedCov.dpxpx(); fitted7CovM(3, 3) = fitted7CovM(3, 3);
357 fitted7CovM(3, 4) = fittedCov.dpxpy(); fitted7CovM(4, 3) = fitted7CovM(3, 4);
358 fitted7CovM(3, 5) = fittedCov.dpxpz(); fitted7CovM(5, 3) = fitted7CovM(3, 5);
359 fitted7CovM(3, 0) = fittedCov.dxpx(); fitted7CovM(0, 3) = fitted7CovM(3, 0);
360 fitted7CovM(3, 1) = fittedCov.dypx(); fitted7CovM(1, 3) = fitted7CovM(3, 1);
361 fitted7CovM(3, 2) = fittedCov.dzpx(); fitted7CovM(2, 3) = fitted7CovM(3, 2);
362
363 fitted7CovM(4, 4) = fittedCov.dpypy(); fitted7CovM(4, 4) = fitted7CovM(4, 4);
364 fitted7CovM(4, 5) = fittedCov.dpypz(); fitted7CovM(5, 4) = fitted7CovM(4, 5);
365 fitted7CovM(4, 0) = fittedCov.dxpy(); fitted7CovM(0, 4) = fitted7CovM(4, 0);
366 fitted7CovM(4, 1) = fittedCov.dypy(); fitted7CovM(1, 4) = fitted7CovM(4, 1);
367 fitted7CovM(4, 2) = fittedCov.dzpy(); fitted7CovM(2, 4) = fitted7CovM(4, 2);
368
369 fitted7CovM(5, 5) = fittedCov.dpzpz(); fitted7CovM(5, 5) = fitted7CovM(5, 5);
370 fitted7CovM(5, 0) = fittedCov.dxpz(); fitted7CovM(0, 5) = fitted7CovM(5, 0);
371 fitted7CovM(5, 1) = fittedCov.dypz(); fitted7CovM(1, 5) = fitted7CovM(5, 1);
372 fitted7CovM(5, 2) = fittedCov.dzpz(); fitted7CovM(2, 5) = fitted7CovM(5, 2);
373
374 fitted7CovM(0, 0) = fittedCov.dxx(); fitted7CovM(0, 0) = fitted7CovM(0, 0);
375 fitted7CovM(0, 1) = fittedCov.dxy(); fitted7CovM(1, 0) = fitted7CovM(0, 1);
376 fitted7CovM(0, 2) = fittedCov.dxz(); fitted7CovM(2, 0) = fitted7CovM(0, 2);
377
378 fitted7CovM(1, 1) = fittedCov.dyy(); fitted7CovM(1, 1) = fitted7CovM(1, 1);
379 fitted7CovM(1, 2) = fittedCov.dyz(); fitted7CovM(2, 1) = fitted7CovM(1, 2);
380
381 fitted7CovM(2, 2) = fittedCov.dzz(); fitted7CovM(2, 2) = fitted7CovM(2, 2);
382
383 TMatrixDSym fitted7CovE = ErrorMatrixMassToEnergy(m_fitted4Vector, fitted7CovM);
384
385 TMatrixDSym fitted7CovDauM(7);
386 for (int i = 0; i < 7; i++) {
387 for (int j = 0; j < 7; j++) {
388 if (i < 4 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j + 3);
389 if (i > 3 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j - 4);
390 if (i < 4 && j > 3) fitted7CovDauM(i, j) = fitted7CovE(i + 3, j - 4);
391 if (i > 3 && j < 4) fitted7CovDauM(i, j) = fitted7CovE(i - 4, j + 3);
392 }
393 }
394
395 float pValDau = rDau[ii].chi2();
396
397 bDau[ii]->updateMomentum(p4, x3, fitted7CovDauM, pValDau);
398
399 }
400
401 } else B2ERROR("Error in Daughters update");
402
403}

◆ updateMother()

void updateMother ( )

update the mother particle

Definition at line 323 of file RaveKinematicVertexFitter.cc.

◆ useBeamSpot()

void useBeamSpot ( bool beamSpot = true)
inline

Overwrite the global option in ReveSetup that tells the fitter if beam spot info should be used or not.

The beam spot pos and cov must still be set in the RaveSetup class if you what to use it

Definition at line 82 of file RaveKinematicVertexFitter.h.

83 {
84 if (beamSpot == true) {
85 if (RaveSetup::getRawInstance()->m_useBeamSpot == false) {
86 B2FATAL("Beam spot information cannot be used because the beam spot position and covariance was not set in RaveSetup");
87 }
88 m_useBeamSpot = true;
89 } else {
90 m_useBeamSpot = false;
91 }
92 }

Member Data Documentation

◆ m_belleDaughters

std::vector<Particle*> m_belleDaughters
protected

Belle Particle pointers input.

Definition at line 152 of file RaveKinematicVertexFitter.h.

◆ m_fitted4Vector

ROOT::Math::PxPyPzEVector m_fitted4Vector
protected

4 momentum of the mother particle after the fit

Definition at line 167 of file RaveKinematicVertexFitter.h.

◆ m_fitted7Cov

TMatrixFSym m_fitted7Cov
protected

7x7 error matrix of the mother particle after the fit

Definition at line 169 of file RaveKinematicVertexFitter.h.

◆ m_fittedChi2

double m_fittedChi2
protected

chi^2 of the vertex fit

Definition at line 163 of file RaveKinematicVertexFitter.h.

◆ m_fittedNdf

double m_fittedNdf
protected

Ndf of the vertex fit.

Definition at line 159 of file RaveKinematicVertexFitter.h.

◆ m_fittedParticle

rave::KinematicParticle m_fittedParticle
protected

Particle fit output.

Definition at line 149 of file RaveKinematicVertexFitter.h.

◆ m_fittedPos

ROOT::Math::XYZVector m_fittedPos
protected

Fitted vertex position.

Definition at line 165 of file RaveKinematicVertexFitter.h.

◆ m_fittedPValue

double m_fittedPValue
protected

Pvalue of the fit result.

Definition at line 161 of file RaveKinematicVertexFitter.h.

◆ m_fittedResult

rave::KinematicTree m_fittedResult
protected

the output of the kinematic fit

Definition at line 138 of file RaveKinematicVertexFitter.h.

◆ m_inputParticles

std::vector< rave::KinematicParticle > m_inputParticles
protected

input particles for vertex fit in rave format

Definition at line 147 of file RaveKinematicVertexFitter.h.

◆ m_massConstFit

bool m_massConstFit
protected

flag determines if the mass fit is performed

Definition at line 155 of file RaveKinematicVertexFitter.h.

◆ m_motherParticlePtr

Particle* m_motherParticlePtr
protected

pointer to the mother particle who's daughters will be used in the fit.

the fit result will be written back to the mother particle

Definition at line 132 of file RaveKinematicVertexFitter.h.

◆ m_raveAlgorithm

std::string m_raveAlgorithm
protected

Algorithm used by rave (kalman, avr, ...)

Definition at line 135 of file RaveKinematicVertexFitter.h.

◆ m_raveTracks

std::vector<rave::Track> m_raveTracks
protected

holds the tracks that were added to a RaveVertexFitter object in the format used by Rave

Definition at line 141 of file RaveKinematicVertexFitter.h.

◆ m_raveVertices

std::vector< rave::Vertex > m_raveVertices
protected

holds the fitted vertices after fit() was called in the format used by Rave

Definition at line 144 of file RaveKinematicVertexFitter.h.

◆ m_useBeamSpot

bool m_useBeamSpot
protected

flag determines if the beam spot will be used or not.

Overwrites the global flag in RaveSetup

Definition at line 129 of file RaveKinematicVertexFitter.h.

◆ m_vertFit

bool m_vertFit
protected

flag determines if the vertex fit is performed

Definition at line 157 of file RaveKinematicVertexFitter.h.


The documentation for this class was generated from the following files: