Belle II Software  release-05-01-25
TrackSelector.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/eventTimeExtraction/findlets/TrackSelector.h>
11 #include <tracking/trackFindingCDC/utilities/Algorithms.h>
12 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
13 #include <tracking/dataobjects/RecoTrack.h>
14 #include <framework/core/ModuleParamList.h>
15 
16 using namespace Belle2;
17 using namespace TrackFindingCDC;
18 
19 void TrackSelector::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
20 {
21  moduleParamList->addParameter(prefixed(prefix, "minNumberCDCHits"), m_param_minNumberCDCHits,
22  "Minimal number of CDC hits for a track", m_param_minNumberCDCHits);
23  moduleParamList->addParameter(prefixed(prefix, "maximumNumberOfTracks"), m_param_maximumNumberOfTracks,
24  "Maximal number of tracks in an event", m_param_maximumNumberOfTracks);
25  moduleParamList->addParameter(prefixed(prefix, "minimumTrackPt"), m_param_minimumTrackPt,
26  "Minimal pt for a track", m_param_minimumTrackPt);
27 }
28 
29 void TrackSelector::apply(std::vector<RecoTrack*>& tracks)
30 {
31  const auto trackHasEnoughPtAndHits = [this](RecoTrack * rt) {
32  return (rt->getNumberOfCDCHits() < m_param_minNumberCDCHits) or
33  (rt->getMomentumSeed().Mag() < m_param_minimumTrackPt);
34  };
35  TrackFindingCDC::erase_remove_if(tracks, trackHasEnoughPtAndHits);
36 
37  // this lambda will sort in reverse order, meaning the tracks with the most CDC hits first
38  const auto greaterHits = [](RecoTrack * lhs, RecoTrack * rhs) {
39  return lhs->getNumberOfCDCHits() > rhs->getNumberOfCDCHits();
40  };
41  // sort by the amount of CDC hits
42  std::sort(tracks.begin(), tracks.end(), greaterHits);
43 
44  const unsigned int maximalNumberOfElements = std::min(static_cast<unsigned int>(tracks.size()),
45  m_param_maximumNumberOfTracks);
46  // limit to the maximum number of tracks
47  tracks.resize(maximalNumberOfElements);
48 
49  B2DEBUG(50, "Limited number of selected tracks: " << tracks.size());
50 }
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2::ModuleParamList::addParameter
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Definition: ModuleParamList.templateDetails.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::RecoTrack::getNumberOfCDCHits
unsigned int getNumberOfCDCHits() const
Return the number of cdc hits.
Definition: RecoTrack.h:417
Belle2::ModuleParamList
The Module parameter list class.
Definition: ModuleParamList.h:46