8 #include <tracking/modules/V0Finder/V0FinderModule.h>
10 #include <framework/gearbox/Const.h>
11 #include <framework/logging/Logger.h>
12 #include <framework/core/ModuleParam.templateDetails.h>
14 #include <tracking/dataobjects/RecoTrack.h>
22 setDescription(
"This is a simple V0 finder which matches all positive "
23 "tracks with all negative tracks, fitting a vertex for each "
24 "pair. Depending on the outcome of each fit, a corresponding "
25 "Belle2::V0 is stored or not.\n\n"
27 "No V0s with vertex inside the beam pipe "
28 "are saved. They are recovered in a following step.\n\n"
30 "Outside the beam pipe only a chi^2 cut is applied "
31 "('vertexChi2CutOutside').\n"
32 "The value used as beam pipe radius is a parameter and "
39 "RecoTrack StoreArray name (input)", std::string(
""));
41 "RecoTrack StoreArray name (used for track refitting)", std::string(
"CopiedRecoTracks"));
43 "Belle2::TrackFitResult StoreArray name (in- and output).\n"
44 "Note that the V0s use pointers indices into these arrays, so all hell may break loose, "
45 "if you change this.", std::string(
""));
47 "Belle2::Track StoreArray name (input).\n"
48 "Note that the V0s use pointers indices into these arrays, so all hell may break loose, "
49 "if you change this.", std::string(
""));
58 "Radius at which we switch between the two classes of cuts. "
59 "The default is a little inside the beam pipe to allow some tolerance.",
63 "Maximum chiĀ² for the vertex fit (NDF = 1)", 10000.);
66 "mass range in GeV for reconstructed Kshort after removing material effects and inner hits",
m_invMassRangeKshort);
69 "mass range in GeV for reconstructed Lambda after removing material effects and inner hits",
m_invMassRangeLambda);
72 "mass range in GeV for reconstructed Photon after removing material effects and inner hits",
m_invMassRangePhoton);
75 "designate which fitAndStore function is called in V0Fitter.\n"
76 " 0: store V0 at the first vertex fit, regardless of inner hits \n"
77 " 1: remove hits inside the V0 vertex position\n"
78 " 2: mode 2 + don't use SVD hits if there is only one available SVD hit-pair (default)",
82 "mass range in GeV for reconstructed Kshort used for pre-selection of candidates"
85 "mass range in GeV for reconstructed Lambda used for pre-selection of candidates"
94 m_tracks.requireRelationTo(recoTracks);
106 B2FATAL(
"The minimum has to be smaller than the maximum of the Kshort mass range! min = " << std::get<0>
110 B2FATAL(
"The minimum has to be smaller than the maximum of the Lambda mass range! min = " << std::get<0>
133 B2DEBUG(200,
m_tracks.getEntries() <<
" tracks in event.");
136 std::vector<const Track*> tracksPlus;
137 tracksPlus.reserve(
m_tracks.getEntries());
139 std::vector<const Track*> tracksMinus;
140 tracksMinus.reserve(
m_tracks.getEntries());
142 for (
const auto& track :
m_tracks) {
144 B2ASSERT(
"No RecoTrack available for given Track.", recoTrack);
147 tracksPlus.push_back(&track);
150 tracksMinus.push_back(&track);
155 if (tracksPlus.empty() || tracksMinus.empty()) {
156 B2DEBUG(200,
"No interesting track pairs. tracksPlus " << tracksPlus.size() <<
", tracksMinus " << tracksMinus.size());
162 for (
auto& trackPlus : tracksPlus) {
163 for (
auto& trackMinus : tracksMinus) {
164 bool isForceStored, isHitRemoved;
168 m_nForceStored += isForceStored;
169 m_nHitRemoved += isHitRemoved;
173 B2WARNING(
"Genfit exception caught. Skipping this track pair for Kshort hypothesis. " <<
LogVar(
"Genfit exception:", e.what()));
179 m_nForceStored += isForceStored;
180 m_nHitRemoved += isHitRemoved;
183 B2WARNING(
"Genfit exception caught. Skipping this track pair for photon hypothesis. " <<
LogVar(
"Genfit exception:", e.what()));
189 m_nForceStored += isForceStored;
190 m_nHitRemoved += isHitRemoved;
194 B2WARNING(
"Genfit exception caught. Skipping this track pair for Lambda hypothesis. " <<
LogVar(
"Genfit exception:", e.what()));
200 m_nForceStored += isForceStored;
201 m_nHitRemoved += isHitRemoved;
205 B2WARNING(
"Genfit exception caught. Skipping this track pair for anti-Lambda hypothesis. " <<
LogVar(
"Genfit exception:",
215 B2INFO(
"===V0Finder summary=============================================================");
216 B2INFO(
"In total " << m_nHitRemoved + m_nForceStored <<
" saved V0s have inner hits.");
217 B2INFO(
"- Inner hits successfully removed in " << m_nHitRemoved <<
" V0s.");
218 B2INFO(
"- The hit removal failed in " << m_nForceStored <<
" V0s, instead V0s before removing inner hits saved.");
224 const double* range_m2_min =
nullptr;
225 const double* range_m2_max =
nullptr;
237 const auto trackHypotheses =
m_v0Fitter->getTrackHypotheses(v0Hypothesis);
240 double m_plus = trackHypotheses.first.getMass();
242 double E_plus = sqrt(m_plus * m_plus + p_plus * p_plus);
245 double m_minus = trackHypotheses.second.getMass();
247 double E_minus = sqrt(m_minus * m_minus + p_minus * p_minus);
250 double sum_E2 = (E_minus + E_plus) * (E_minus + E_plus);
253 double candmass_min2 = sum_E2 - (p_plus + p_minus) * (p_plus + p_minus);
254 double candmass_max2 = sum_E2 - (p_plus - p_minus) * (p_plus - p_minus);
257 bool in_range = candmass_max2 > *range_m2_min and candmass_min2 < *range_m2_max;
The ParticleType class for identifying different particle types.
static const ParticleType Lambda
Lambda particle.
static const ParticleType antiLambda
Anti-Lambda particle.
static const ParticleType Kshort
K^0_S particle.
static const ParticleType photon
photon particle
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
This is the Reconstruction Event-Data Model Track.
short int getChargeSeed() const
Return the charge seed stored in the reco track. ATTENTION: This is not the fitted charge.
Accessor to arrays stored in the data store.
TVector3 getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
Class that bundles various TrackFitResults.
const TrackFitResult * getTrackFitResultWithClosestMass(const Const::ChargedStable &requestedType) const
Return the track fit for a fit hypothesis with the closest mass.
std::tuple< double, double > m_preFilterMassRangeKshort
range for reconstructed Kshort mass used for pre-selection default range set to nominal KS mass + 0....
std::string m_arrayNameCopiedRecoTrack
StoreArray name of the RecoTracks.
std::string m_arrayNameV0
StoreArray name of the V0 (Output).
void initialize() override
Registration of StoreArrays, Relations, check proper GenFit setup.
bool m_validation
Flag if use validation.
std::tuple< double, double > m_preFilterMassRangeLambda
range for reconstructed Lambda mass used for pre-selection Default range set to nominal Lambda mass +...
void event() override
Creates Belle2::V0s from Belle2::Tracks as described in the class documentation.
std::string m_arrayNameTFResult
StoreArray name of the TrackFitResults (In- and Output).
double m_mKshortMax2
pre-calculated maximum Kshort mass squared
std::string m_arrayNameV0ValidationVertex
StoreArray name of the V0ValidationVertex.
void terminate() override
Prints status summary.
double m_mLambdaMin2
pre-calculated mininum Lambda mass squared
double m_beamPipeRadius
Radius where inside/outside beampipe is defined.
V0FinderModule()
Setting of module description, parameters.
double m_mLambdaMax2
pre-calculated maximum Lambda mass squared
std::tuple< double, double > m_invMassRangePhoton
range for reconstructed Photon mass used after removing material effects and inner hits default range...
std::unique_ptr< V0Fitter > m_v0Fitter
Object containing the actual algorithm.
StoreArray< Track > m_tracks
Actually array of mdst Tracks.
double m_vertexChi2CutOutside
Chi2 cut for V0s outside of the beampipe. Applies to all.
std::string m_arrayNameRecoTrack
StoreArray name of the RecoTracks (Input).
bool preFilterTracks(const Track *trackPlus, const Track *trackMinus, const Const::ParticleType &v0Hypothesis)
helper function that gets the approximate mass range for the two given tracks and rejects candidates ...
int m_v0FitterMode
fitter mode (0: store V0 at the first vertex fit, regardless of inner hits, 1: remove hits inside the...
std::tuple< double, double > m_invMassRangeKshort
range for reconstructed Kshort mass used after removing material effects and inner hits default range...
std::tuple< double, double > m_invMassRangeLambda
range for reconstructed Lambda mass used after removing material effects and inner hits default range...
std::string m_arrayNameTrack
StoreArray name of the Tracks (Input).
double m_mKshortMin2
pre-calculated mininum Kshort mass squared
Class to store variables with their name which were sent to the logging service.
Exception class for error handling in GENFIT (provides storage for diagnostic information)
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.