Belle II Software  release-05-01-25
TrackCreatorSingleSegments.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/trackFindingCDC/findlets/minimal/TrackCreatorSingleSegments.h>
11 
12 #include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
13 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
14 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
15 
16 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
17 
18 #include <framework/core/ModuleParamList.templateDetails.h>
19 
20 using namespace Belle2;
21 using namespace TrackFindingCDC;
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 
33 void 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 
43 void 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 }
Belle2::TrackFindingCDC::TrackCreatorSingleSegments::m_param_minimalHitsBySuperLayerId
std::map< ISuperLayer, size_t > m_param_minimalHitsBySuperLayerId
Parameter: Map of super layer ids to minimum hit number for which left over segments shall be forward...
Definition: TrackCreatorSingleSegments.h:74
Belle2::TrackFindingCDC::CDCTrack
Class representing a sequence of three dimensional reconstructed hits.
Definition: CDCTrack.h:51
Belle2::TrackFindingCDC::TrackCreatorSingleSegments::TrackCreatorSingleSegments
TrackCreatorSingleSegments()
Constructor setting up default parameters.
Definition: TrackCreatorSingleSegments.cc:23
Belle2::TrackFindingCDC::TrackCreatorSingleSegments::apply
void apply(const std::vector< CDCSegment2D > &segments, std::vector< CDCTrack > &tracks) final
Main algorithm.
Definition: TrackCreatorSingleSegments.cc:43
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::TrackFindingCDC::CDCRecoHit2D
Class representing a two dimensional reconstructed hit in the central drift chamber.
Definition: CDCRecoHit2D.h:57
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::TrackCreatorSingleSegments::exposeParameters
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
Definition: TrackCreatorSingleSegments.cc:33
Belle2::TrackFindingCDC::CDCSegment2D
A reconstructed sequence of two dimensional hits in one super layer.
Definition: CDCSegment2D.h:40
Belle2::ModuleParamList
The Module parameter list class.
Definition: ModuleParamList.h:46
Belle2::TrackFindingCDC::TrackCreatorSingleSegments::getDescription
std::string getDescription() final
Short description of the findlet.
Definition: TrackCreatorSingleSegments.cc:28