Belle II Software development
NewV0Fitter.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/Track.h>
13#include <mdst/dataobjects/TrackFitResult.h>
14#include <mdst/dataobjects/V0.h>
15#include <tracking/dataobjects/V0ValidationVertex.h>
16#include <tracking/dataobjects/RecoTrack.h>
17#include <tracking/v0Finding/fitter/V0VertexFitter.h>
18#include <genfit/Track.h>
19#include <genfit/GFRaveVertex.h>
20#include <map>
21#include <memory>
22#include <utility>
23
24namespace Belle2 {
29
34
35 public:
36
40 struct FittedTrack {
41 const RecoTrack* recoTrack = nullptr;
43 genfit::MeasuredStateOnPlane state;
44 double pValue = 0;
45 int Ndf = 0;
46
54 void set(const RecoTrack* recoTrk, const Const::ParticleType& hypo, const genfit::MeasuredStateOnPlane& mSoP,
55 const genfit::AbsTrackRep* rep)
56 {
57 recoTrack = recoTrk;
58 ptype = hypo;
59 state = mSoP;
60 const auto* fitStatus = recoTrk->getGenfitTrack().getFitStatus(rep);
61 pValue = fitStatus->getPVal();
62 Ndf = fitStatus->getNdf();
63 }
64 };
65
66
76 explicit NewV0Fitter(const std::string& trackFitResultsName = "",
77 const std::string& v0sName = "",
78 const std::string& v0ValidationVerticesName = "",
79 const std::string& recoTracksName = "",
80 const std::string& copiedRecoTracksName = "CopiedRecoTracks",
81 bool enableValidation = false);
82
91 void initializeCuts(double vertexDistanceCut,
92 double vertexChi2Cut,
93 const std::tuple<double, double>& invMassRangeKshort,
94 const std::tuple<double, double>& invMassRangeLambda,
95 const std::tuple<double, double>& invMassRangePhoton);
96
104 void setFitterMode(int fitterMode) {m_fitterMode = fitterMode;}
105
111 void setVertexFitter(std::unique_ptr<V0VertexFitter> vertexFitter) {m_vertexFitter = std::move(vertexFitter);}
112
122 bool fitAndStore(const Track* trackPlus, const Track* trackMinus, const Const::ParticleType& v0Hypothesis,
123 bool& isForceStored, bool& isHitRemoved);
124
130 static std::pair<Const::ParticleType, Const::ParticleType> getTrackHypotheses(const Const::ParticleType& v0Hypothesis);
131
132
133 private:
134
144
145
153
154
165 int vertexFit(const RecoTrack* recoTrackPlus, const RecoTrack* recoTrackMinus,
166 int pdgTrackPlus, int pdgTrackMinus, const Const::ParticleType& v0Hypothesis);
167
174 static const genfit::AbsTrackRep* getTrackRepresentation(const RecoTrack* recoTrack, int pdgCode);
175
182 static bool setCardinalRep(genfit::Track& gfTrack, int pdgCode);
183
192 static int extrapolateToVertex(genfit::MeasuredStateOnPlane& statePlus, genfit::MeasuredStateOnPlane& stateMinus,
193 const genfit::GFRaveVertex& vertex);
194
201 RecoTrack* copyRecoTrack(const RecoTrack* origRecoTrack, const genfit::MeasuredStateOnPlane& state);
202
211 const RecoTrack* removeHitsAndRefit(const RecoTrack* origRecoTrack, const RecoTrack* lastRecoTrack,
212 const Const::ParticleType& ptype);
213
221 int isInnermostClusterShared(const RecoTrack* recoTrackPlus, const RecoTrack* recoTrackMinus);
222
229 const TrackFitResult* saveTrackFitResult(const FittedTrack& trk, int sharedInnermostCluster);
230
231
232 std::string m_recoTracksName;
238
240 double m_vertexChi2Cut = 0;
241 std::map<int, std::pair<double, double> > m_invMassCuts;
242
243 std::unique_ptr<V0VertexFitter> m_vertexFitter;
244 int m_fitterMode = 1;
245 bool m_validation = false;
246
247 // temporary storage
248
249 genfit::GFRaveVertex m_fittedVertex;
250 double m_momentum = 0;
251 double m_invMass = 0;
254
255 };
256
258}
259
The ParticleType class for identifying different particle types.
Definition Const.h:409
static const ParticleType invalidParticle
Invalid particle, used internally.
Definition Const.h:682
void setFitterMode(int fitterMode)
Setter for the fitter mode.
StoreArray< V0ValidationVertex > m_validationV0s
V0ValidationVertex collection (optional)
StoreArray< RecoTrack > m_copiedRecoTracks
copied RecoTracks collection
FittedTrack m_trkPlus
positively charged track data of last successfully fitted vertex
bool m_validation
validation flag
StoreArray< V0 > m_v0s
V0s collection.
double m_vertexDistanceCut
cut on the transverse radius
double m_vertexChi2Cut
Chi2 cut.
StoreArray< TrackFitResult > m_trackFitResults
TrackFitResults collection.
bool fitAndStore(const Track *trackPlus, const Track *trackMinus, const Const::ParticleType &v0Hypothesis, bool &isForceStored, bool &isHitRemoved)
Fit V0 with given hypothesis and store results if fit is successful.
void setVertexFitter(std::unique_ptr< V0VertexFitter > vertexFitter)
Setter for the vertex fitter, replacing the default one.
static int extrapolateToVertex(genfit::MeasuredStateOnPlane &statePlus, genfit::MeasuredStateOnPlane &stateMinus, const genfit::GFRaveVertex &vertex)
Extrapolation of both tracks to the vertex.
double m_momentum
momentum of last successfully fitted vertex
ErrorStatus
Error status codes returned by the vertexFit method.
@ c_NoTrackRepresentation
no track representation for given PDG code
@ c_NotSelected
fitted vertex not passing the cuts
@ c_VertexFitFailed
vertex fit failed
@ c_ExtrapolationFailed
track extrapolation failed
static bool setCardinalRep(genfit::Track &gfTrack, int pdgCode)
Sets cardinal representation of a given genfit track and PDG code.
std::string m_recoTracksName
name of the RecoTracks collection
const TrackFitResult * saveTrackFitResult(const FittedTrack &trk, int sharedInnermostCluster)
Append track fit result to the collection.
int isInnermostClusterShared(const RecoTrack *recoTrackPlus, const RecoTrack *recoTrackMinus)
Returns bit flags indicating that the innermost cluster is shared between both tracks.
static const genfit::AbsTrackRep * getTrackRepresentation(const RecoTrack *recoTrack, int pdgCode)
Returns track representation for a given PDG code.
std::map< int, std::pair< double, double > > m_invMassCuts
invariant mass cuts, key = abs(PDG)
NewV0Fitter(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.
StoreArray< RecoTrack > m_recoTracks
RecoTracks collection.
genfit::GFRaveVertex m_fittedVertex
last successfully fitted vertex
static std::pair< Const::ParticleType, Const::ParticleType > getTrackHypotheses(const Const::ParticleType &v0Hypothesis)
Returns daughter particle types for a given V0 hypothesis.
std::unique_ptr< V0VertexFitter > m_vertexFitter
vertex fitter used to fit the V0 vertex
void initializeCuts(double vertexDistanceCut, double vertexChi2Cut, const std::tuple< double, double > &invMassRangeKshort, const std::tuple< double, double > &invMassRangeLambda, const std::tuple< double, double > &invMassRangePhoton)
Initialization of cuts applied during the fit and store process.
double m_invMass
invariant mass of last successfully fitted vertex
int m_fitterMode
fitter mode
FittedTrack m_trkMinus
negatively charged track data of last successfully fitted vertex
EInnerHitBits
Bits used to signal that track has hits inside the V0 vertex.
@ c_BitTrackMinus
negative track has inner hits
@ c_BitTrackPlus
positive track has inner hits
int vertexFit(const RecoTrack *recoTrackPlus, const RecoTrack *recoTrackMinus, int pdgTrackPlus, int pdgTrackMinus, const Const::ParticleType &v0Hypothesis)
Performs a vertex fit.
RecoTrack * copyRecoTrack(const RecoTrack *origRecoTrack, const genfit::MeasuredStateOnPlane &state)
Make a copy of reco track.
const RecoTrack * removeHitsAndRefit(const RecoTrack *origRecoTrack, const RecoTrack *lastRecoTrack, const Const::ParticleType &ptype)
Remove track inner hits and refit the track.
This is the Reconstruction Event-Data Model Track.
Definition RecoTrack.h:79
const genfit::Track & getGenfitTrack() const
Returns genfit track.
Definition RecoTrack.h:503
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
Abstract base class for different kinds of events.
Structure to save track data of the last successful iteration.
Definition NewV0Fitter.h:40
void set(const RecoTrack *recoTrk, const Const::ParticleType &hypo, const genfit::MeasuredStateOnPlane &mSoP, const genfit::AbsTrackRep *rep)
Sets the data members.
Definition NewV0Fitter.h:54
double pValue
p-value of track fit
Definition NewV0Fitter.h:44
genfit::MeasuredStateOnPlane state
measured state at first hit, extrapolated to fitted vertex
Definition NewV0Fitter.h:43
Const::ParticleType ptype
particle type of the V0 track
Definition NewV0Fitter.h:42
const RecoTrack * recoTrack
reco track
Definition NewV0Fitter.h:41
int Ndf
degrees-of-freedom of track fit
Definition NewV0Fitter.h:45