Belle II Software development
V0Fitter.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <framework/datastore/StoreArray.h>
11#include <framework/gearbox/Const.h>
12#include <mdst/dataobjects/TrackFitResult.h>
13#include <mdst/dataobjects/V0.h>
14#include <tracking/dataobjects/V0ValidationVertex.h>
15#include <tracking/dataobjects/RecoTrack.h>
16#include <tracking/v0Finding/fitter/V0VertexFitter.h>
17#include <genfit/Track.h>
18
19#include <Math/Vector3D.h>
20
21#include <memory>
22#include <utility>
23
24namespace genfit {
25 class MeasuredStateOnPlane;
26 class GFRaveVertex;
27 class Track;
28}
29
30namespace Belle2 {
35
41 class V0Fitter {
42 friend class V0FitterTest_GetTrackHypotheses_Test;
43 friend class V0FitterTest_EnableValidation_Test;
44 friend class V0FitterTest_InitializeCuts_Test;
45
46 public:
48 explicit V0Fitter(const std::string& trackFitResultsName = "", const std::string& v0sName = "",
49 const std::string& v0ValidationVerticesName = "",
50 const std::string& recoTracksName = "",
51 const std::string& copiedRecoTracksName = "CopiedRecoTracks",
52 bool enableValidation = false);
53
55 void initializeCuts(double beamPipeRadius,
56 double vertexChi2CutOutside,
57 std::tuple<double, double> invMassRangeKshort,
58 std::tuple<double, double> invMassRangeLambda,
59 std::tuple<double, double> invMassRangePhoton);
60
63 void setVertexFitter(std::unique_ptr<V0VertexFitter> vertexFitter);
64
70 void setFitterMode(int fitterMode);
71
73 bool fitAndStore(const Track* trackPlus, const Track* trackMinus, const Const::ParticleType& v0Hypothesis, bool& isForceStored,
74 bool& isHitRemoved);
75
77 static std::pair<Const::ParticleType, Const::ParticleType> getTrackHypotheses(const Const::ParticleType& v0Hypothesis);
78
79 private:
80
95 bool vertexFitWithRecoTracks(const Track* trackPlus, const Track* trackMinus,
96 RecoTrack* recoTrackPlus, RecoTrack* recoTrackMinus,
97 const Const::ParticleType& v0Hypothesis,
98 unsigned int& hasInnerHitStatus, ROOT::Math::XYZVector& vertexPos,
99 const bool forceStore);
100
105 RecoTrack* copyRecoTrack(const RecoTrack* origRecoTrack);
106
112 RecoTrack* copyRecoTrackAndFit(const RecoTrack* origRecoTrack, const int trackPDG);
113
125 bool removeInnerHits(RecoTrack* prevRecoTrack, RecoTrack* recoTrack,
126 const int trackPDG, const ROOT::Math::XYZVector& vertexPosition);
127
133 int checkSharedInnermostCluster(const RecoTrack* recoTrackPlus, const RecoTrack* recoTrackMinus);
134
136 bool extrapolateToVertex(genfit::MeasuredStateOnPlane& stPlus, genfit::MeasuredStateOnPlane& stMinus,
137 const ROOT::Math::XYZVector& vertexPosition);
138
141 static bool extrapolateToVertex(genfit::MeasuredStateOnPlane& stPlus, genfit::MeasuredStateOnPlane& stMinus,
142 const ROOT::Math::XYZVector& vertexPosition, unsigned int& hasInnerHitStatus);
143
145 TrackFitResult* buildTrackFitResult(const genfit::Track& track, const RecoTrack* recoTrack,
146 const genfit::MeasuredStateOnPlane& msop, const double Bz,
147 const Const::ParticleType& trackHypothesis,
148 const int sharedInnermostCluster);
149
150
151 private:
153 std::string m_recoTracksName;
159
162 std::tuple<double, double> m_invMassRangeKshort;
163 std::tuple<double, double> m_invMassRangeLambda;
164 std::tuple<double, double> m_invMassRangePhoton;
168 std::unique_ptr<V0VertexFitter> m_vertexFitter;
169 };
170
172}
173
The ParticleType class for identifying different particle types.
Definition Const.h:409
This is the Reconstruction Event-Data Model Track.
Definition RecoTrack.h:79
Accessor to arrays stored in the data store.
Definition StoreArray.h:113
Values of the result of a track fit with a given particle hypothesis.
Class that bundles various TrackFitResults.
Definition Track.h:25
bool m_useOnlyOneSVDHitPair
false only if the V0Fitter mode is 3
Definition V0Fitter.h:167
void setFitterMode(int fitterMode)
set V0 fitter mode.
Definition V0Fitter.cc:74
StoreArray< V0ValidationVertex > m_validationV0s
V0ValidationVertex (output, optional).
Definition V0Fitter.h:157
StoreArray< RecoTrack > m_copiedRecoTracks
RecoTrack used to refit tracks (output)
Definition V0Fitter.h:158
bool m_forcestore
true only if the V0Fitter mode is 1
Definition V0Fitter.h:166
void initializeCuts(double beamPipeRadius, double vertexChi2CutOutside, std::tuple< double, double > invMassRangeKshort, std::tuple< double, double > invMassRangeLambda, std::tuple< double, double > invMassRangePhoton)
Initialize the cuts which will be applied during the fit and store process.
Definition V0Fitter.cc:91
bool m_validation
Validation flag.
Definition V0Fitter.h:152
StoreArray< V0 > m_v0s
V0 (output).
Definition V0Fitter.h:156
int checkSharedInnermostCluster(const RecoTrack *recoTrackPlus, const RecoTrack *recoTrackMinus)
Compare innermost hits of daughter pairs to check if they are the same (shared) or not.
Definition V0Fitter.cc:590
TrackFitResult * buildTrackFitResult(const genfit::Track &track, const RecoTrack *recoTrack, const genfit::MeasuredStateOnPlane &msop, const double Bz, const Const::ParticleType &trackHypothesis, const int sharedInnermostCluster)
Build TrackFitResult of V0 Track and set relation to genfit Track.
Definition V0Fitter.cc:130
V0Fitter(const std::string &trackFitResultsName="", const std::string &v0sName="", const std::string &v0ValidationVerticesName="", const std::string &recoTracksName="", const std::string &copiedRecoTracksName="CopiedRecoTracks", bool enableValidation=false)
Constructor for the V0Fitter.
Definition V0Fitter.cc:35
StoreArray< TrackFitResult > m_trackFitResults
TrackFitResult (output).
Definition V0Fitter.h:155
bool fitAndStore(const Track *trackPlus, const Track *trackMinus, const Const::ParticleType &v0Hypothesis, bool &isForceStored, bool &isHitRemoved)
Fit V0 with given hypothesis and store if fit was successful.
Definition V0Fitter.cc:170
void setVertexFitter(std::unique_ptr< V0VertexFitter > vertexFitter)
Set the vertex fitter to be used, replacing the default one.
Definition V0Fitter.cc:69
double m_beamPipeRadius
Radius where inside/outside beampipe is defined.
Definition V0Fitter.h:160
bool vertexFitWithRecoTracks(const Track *trackPlus, const Track *trackMinus, RecoTrack *recoTrackPlus, RecoTrack *recoTrackMinus, const Const::ParticleType &v0Hypothesis, unsigned int &hasInnerHitStatus, ROOT::Math::XYZVector &vertexPos, const bool forceStore)
fit V0 vertex using RecoTrack's as inputs.
Definition V0Fitter.cc:313
std::tuple< double, double > m_invMassRangePhoton
invariant mass cut for Photon.
Definition V0Fitter.h:164
bool removeInnerHits(RecoTrack *prevRecoTrack, RecoTrack *recoTrack, const int trackPDG, const ROOT::Math::XYZVector &vertexPosition)
Remove inner hits from RecoTrack at once.
Definition V0Fitter.cc:483
std::string m_recoTracksName
RecoTrackColName (input).
Definition V0Fitter.h:153
RecoTrack * copyRecoTrack(const RecoTrack *origRecoTrack)
Create a copy of RecoTrack.
Definition V0Fitter.cc:452
bool extrapolateToVertex(genfit::MeasuredStateOnPlane &stPlus, genfit::MeasuredStateOnPlane &stMinus, const ROOT::Math::XYZVector &vertexPosition)
Extrapolate the fit results to the perigee to the vertex.
double m_vertexChi2CutOutside
Chi2 cut outside beampipe.
Definition V0Fitter.h:161
RecoTrack * copyRecoTrackAndFit(const RecoTrack *origRecoTrack, const int trackPDG)
Create a copy of RecoTrack and fit the Track.
Definition V0Fitter.cc:460
StoreArray< RecoTrack > m_recoTracks
RecoTrack (input)
Definition V0Fitter.h:154
static std::pair< Const::ParticleType, Const::ParticleType > getTrackHypotheses(const Const::ParticleType &v0Hypothesis)
Get track hypotheses for a given v0 hypothesis.
Definition V0Fitter.cc:154
std::unique_ptr< V0VertexFitter > m_vertexFitter
Vertex fitter used to fit the V0 vertex.
Definition V0Fitter.h:168
int m_v0FitterMode
0: store V0 at the first vertex fit, regardless of inner hits, 1: remove hits inside the V0 vertex po...
Definition V0Fitter.h:165
std::tuple< double, double > m_invMassRangeKshort
invariant mass cut for Kshort.
Definition V0Fitter.h:162
std::tuple< double, double > m_invMassRangeLambda
invariant mass cut for Lambda.
Definition V0Fitter.h:163
Abstract base class for different kinds of events.