8 #include <tracking/vxdHoughTracking/findlets/TrackCandidateResultRefiner.h>
9 #include <framework/core/ModuleParamList.h>
10 #include <framework/core/ModuleParamList.templateDetails.h>
11 #include <framework/geometry/BFieldManager.h>
12 #include <tracking/spacePointCreation/SpacePointTrackCand.h>
13 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorCircleFit.h>
14 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorMC.h>
15 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRiemannHelixFit.h>
16 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorTripletFit.h>
17 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
20 using namespace TrackFindingCDC;
21 using namespace vxdHoughTracking;
23 TrackCandidateResultRefiner::~TrackCandidateResultRefiner() =
default;
26 TrackCandidateResultRefiner::TrackCandidateResultRefiner() :
Super()
38 "Identifier which estimation method to use. Valid identifiers are: [mcInfo, circleFit, tripletFit, helixFit]",
41 "Only required for MCInfo method. Name of StoreArray containing MCRecoTracks.",
44 "Only required for MCInfo method. If false combining several MCTracks is allowed.",
48 "Cut on quality indicator value for track candidates of size 3. Only accept SpacePointTrackCands with QI above this value.",
51 "Cut on quality indicator value for track candidates of size 4. Only accept SpacePointTrackCands with QI above this value.",
54 "Cut on quality indicator value for track candidates of size 5. Only accept SpacePointTrackCands with QI above this value.",
58 "Maximum number of SpacePointTrackCands with a length of 3, 4, 5, or 6 each.",
70 m_estimator = std::make_unique<QualityEstimatorTripletFit>();
72 m_estimator = std::make_unique<QualityEstimatorCircleFit>();
74 m_estimator = std::make_unique<QualityEstimatorRiemannHelixFit>();
90 std::string svdClustersName =
""; std::string pxdClustersName =
"";
93 svdClustersName = mcRecoTracks[0]->getStoreArrayNameOfSVDHits();
94 pxdClustersName = mcRecoTracks[0]->getStoreArrayNameOfPXDHits();
96 B2WARNING(
"No Entries in mcRecoTracksStoreArray: using empty cluster name for svd and pxd");
105 std::vector<SpacePointTrackCand>& refinedResults)
107 refinedResults.clear();
108 std::vector<SpacePointTrackCand> selectedResults;
109 selectedResults.reserve(unrefinedResults.size());
112 double qi =
m_estimator->estimateQuality(aTrackCandidate.getSortedHits());
113 aTrackCandidate.setQualityIndicator(qi);
120 (aTrackCandidate.getNHits() >= 6)) {
121 selectedResults.emplace_back(aTrackCandidate);
126 if (selectedResults.size() <= 1) {
127 std::swap(selectedResults, refinedResults);
132 std::sort(selectedResults.begin(), selectedResults.end(),
134 return ((a.getNHits() > b.getNHits()) or
135 (a.getNHits() == b.getNHits() and a.getQualityIndicator() > b.getQualityIndicator()));
138 std::array<uint, 8> numberOfHitsInCheckedSPTCs{{0, 0, 0, 0, 0, 0, 0, 0}};
139 refinedResults.reserve(selectedResults.size());
140 for (
auto& currentSPTC : selectedResults) {
142 numberOfHitsInCheckedSPTCs[currentSPTC.size()] += 1;
143 refinedResults.emplace_back(currentSPTC);
The Module parameter list class.
Class implementing the algorithm used for the MC based quality estimation.
void setClustersNames(const std::string &svdClustersName, const std::string &pxdClustersName)
Setter for StoreArray names of SVD and PXD clusters.
Storage for (VXD) SpacePoint-based track candidates.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
void initialize() override
Receive and dispatch signal before the start of the event processing.
void beginRun() override
Receive and dispatch signal for the beginning of a new run.
void addProcessingSignalListener(ProcessingSignalListener *psl)
Register a processing signal listener to be notified.
virtual void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
Forward prefixed parameters of this findlet to the module parameter list.
Interface for an algorithm part that needs to receive the module processing signals.
static const double T
[tesla]
void apply(std::vector< SpacePointTrackCand > &spacePointTrackCandsToResolve) override
Reject bad SpacePointTrackCands and bad hits inside the remaining.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters of the sub findlets.
double m_param_minQualitiyIndicatorSize5
Cut on the quality estimator and only further propagate SPTCs with five hits that are above this valu...
std::string m_param_EstimationMethod
Identifier which estimation method to use.
void initialize() override
Create the store arrays.
bool m_param_MCStrictQualityEstimator
Only required for MCInfo method.
double m_param_minQualitiyIndicatorSize4
Cut on the quality estimator and only further propagate SPTCs with four hits that are above this valu...
double m_param_minQualitiyIndicatorSize3
Cut on the quality estimator and only further propagate SPTCs with three hits that are above this val...
void apply(std::vector< SpacePointTrackCand > &unrefinedResults, std::vector< SpacePointTrackCand > &refinedResults) override
Reject bad SpacePointTrackCands and bad hits inside the remaining.
void beginRun() override
End run and write Root file.
TrackCandidateOverlapResolver m_overlapResolver
Resolve hit overlaps in track candidates.
std::string m_param_MCRecoTracksStoreArrayName
sets the name of the expected StoreArray containing MCRecoTracks. Only required for MCInfo method
std::unique_ptr< QualityEstimatorBase > m_estimator
pointer to the selected QualityEstimator
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters of the sub findlets.
uint m_param_maxNumberOfEachPathLength
Accept nHits for each size at maximum.
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Abstract base class for different kinds of events.