Belle II Software development
TrackCreatorSingleSegments.cc
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#include <tracking/trackFindingCDC/findlets/minimal/TrackCreatorSingleSegments.h>
9
10#include <tracking/trackingUtilities/eventdata/tracks/CDCTrack.h>
11#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
12#include <tracking/trackingUtilities/eventdata/hits/CDCWireHit.h>
13
14#include <tracking/trackingUtilities/utilities/StringManipulation.h>
15
16#include <framework/core/ModuleParamList.templateDetails.h>
17
18using namespace Belle2;
19using namespace CDC;
20using namespace TrackFindingCDC;
21using namespace TrackingUtilities;
22
24{
25 m_param_minimalHitsBySuperLayerId = std::map<ISuperLayer, size_t> ({{0, 15}});
26}
27
29{
30 return "Creates a track for each segments that is yet unused by any of the given tracks.";
31}
32
33void TrackCreatorSingleSegments::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
34{
35 moduleParamList->addParameter(prefixed(prefix, "MinimalHitsBySuperLayerId"),
37 "Map of super layer ids to minimum hit number, "
38 "for which left over segments shall be forwarded as tracks, "
39 "if the exceed the minimal hit requirement. Default empty.",
41}
42
43void TrackCreatorSingleSegments::apply(const std::vector<CDCSegment2D>& segments,
44 std::vector<CDCTrack>& tracks)
45{
46 // Create tracks from left over segments
47 // First figure out which segments do not share any hits with any of the given tracks
48 // (if the tracks vector is empty this is the case for all segments)
49 const bool toHits = true;
50 for (const CDCSegment2D& segment : segments) {
51 segment.unsetAndForwardMaskedFlag(toHits);
52 }
53
54 for (const CDCTrack& track : tracks) {
55 track.setAndForwardMaskedFlag();
56 }
57
58 for (const CDCSegment2D& segment : segments) {
59 segment.receiveMaskedFlag(toHits);
60 }
61
62 if (not m_param_minimalHitsBySuperLayerId.empty()) {
63 for (const CDCSegment2D& segment : segments) {
64 if (segment->hasMaskedFlag()) {
65 int nMasked = 0;
66 for (const CDCRecoHit2D& recoHit2D : segment) {
67 if (recoHit2D.getWireHit()->hasMaskedFlag()) ++nMasked;
68 }
69 // code above could be replaced by the following line, but needs to be tested
70 //nMasked = std::count_if( segment.begin(), segment.end(), [](const CDCRecoHit2D& recoHit2D)->bool{ return recoHit2D.getWireHit()->hasMaskedFlag(); });
71
72 // Relaxed requirement of only 20% of hits masked by other tracks
73 if (nMasked > segment.size() * 0.2) continue;
74 }
75 ISuperLayer iSuperLayer = segment.getISuperLayer();
76 if (m_param_minimalHitsBySuperLayerId.count(iSuperLayer) and
77 segment.size() >= m_param_minimalHitsBySuperLayerId[iSuperLayer]) {
78
79 if (segment.getTrajectory2D().isFitted()) {
80 tracks.push_back(CDCTrack(segment));
81 segment.setAndForwardMaskedFlag(toHits);
82 for (const CDCSegment2D& otherSegment : segments) {
83 otherSegment.receiveMaskedFlag(toHits);
84 }
85 }
86 }
87 }
88 }
89}
The Module parameter list class.
TrackCreatorSingleSegments()
Constructor setting up default parameters.
std::string getDescription() final
Short description of the findlet.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
void apply(const std::vector< TrackingUtilities::CDCSegment2D > &segments, std::vector< TrackingUtilities::CDCTrack > &tracks) final
Main algorithm.
std::map< CDC::ISuperLayer, size_t > m_param_minimalHitsBySuperLayerId
Parameter: Map of super layer ids to minimum hit number for which left over segments shall be forward...
Class representing a two dimensional reconstructed hit in the central drift chamber.
A reconstructed sequence of two dimensional hits in one super layer.
Class representing a sequence of three dimensional reconstructed hits.
Definition CDCTrack.h:39
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
signed short ISuperLayer
The type of the layer and superlayer ids.
Definition ISuperLayer.h:24
Abstract base class for different kinds of events.