Belle II Software  release-06-00-14
CDCTriggerNDFinderModule.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 
9 #include "trg/cdc/modules/ndFinder/CDCTriggerNDFinderModule.h"
10 
11 using namespace std;
12 using namespace Belle2;
13 
14 REG_MODULE(CDCTriggerNDFinder)
15 
17 {
18  setDescription("CDC Trigger NDFinder Module.\n"
19  "Implements a 3D Hough transformation for \n"
20  "3D track finding in omega, phi, theta. \n"
21  "Uses trained hit patterns for axial and \n"
22  "stereo TS and a density based clustering \n"
23  "algorithm.\n");
24  setPropertyFlags(c_ParallelProcessingCertified);
25  addParam("TrackSegmentHitsName", m_TrackSegmentHitsName,
26  "The name of the StoreArray of the CDCTriggerSegmentHits.",
27  string("CDCTriggerSegmentHits"));
28  addParam("NDFinderTracksName", m_NDFinderTracksName,
29  "The name of the StoreArray where the tracks found by this NDFinder Module are stored.",
30  string("CDCTrigger3DFinderTracks"));
31  addParam("minhits", m_minhits,
32  "Cluster pruning: Minimum number of hits related to a cluster "
33  "for the cluster to be considered as a track.",
34  4);
35  addParam("minhits_axial", m_minhits_axial,
36  "Cluster pruning: Minimum number of axial hits related to a cluster "
37  "for the cluster to be considered as a track.",
38  0);
39  addParam("minweight", m_minweight,
40  "Clustering: Minimum weight of a cell in Hough space "
41  "for the cell to be considered as a cluster member.",
42  24);
43  addParam("minpts", m_minpts,
44  "Clustering: Minimum number of neighbor cells with minweight "
45  "for a cell to be considered a core cell.",
46  1);
47  addParam("thresh", m_thresh,
48  "Track estimation: Minimum weight of a cluster member cell "
49  "relative to the peak weight of the cluster "
50  "for the cell to enter in the weighted mean "
51  "track parameter value estimation.",
52  0.85);
53  addParam("minassign", m_minassign,
54  "Hit to cluster assignment limit: "
55  "Minimum relatively larger weight contribution to the largest cluster.",
56  0.2);
57  addParam("diagonal", m_diagonal,
58  "Clustering: consider diagonal neighbors.",
59  true);
60  addParam("mincells", m_mincells,
61  "Clustering: minimum number of cells for a cluster.",
62  1);
63  addParam("verbose", m_verbose,
64  "Print Hough planes and verbose output. ",
65  false);
66  addParam("axialFile", m_axialFile,
67  "File name of the axial hit patterns. ",
68  string("data/trg/cdc/ndFinderAxialShallow.txt.gz"));
69  addParam("stereoFile", m_stereoFile,
70  "File name of the stereo hit patterns. ",
71  string("data/trg/cdc/ndFinderStereoShallow.txt.gz"));
72 }
73 
74 CDCTriggerNDFinderModule::~CDCTriggerNDFinderModule()
75 {
76 }
77 
78 void CDCTriggerNDFinderModule::initialize()
79 {
80  B2DEBUG(11, "CDCTriggerNDFinderModule initialize, m_minweight=" << m_minweight <<
81  ", m_minpts=" << m_minpts << ", m_diagonal=" << m_diagonal <<
82  ", m_minhits=" << m_minhits << ", m_minhits_axial=" << m_minhits_axial <<
83  ", m_thresh= " << m_thresh <<
84  ", m_minassign=" << m_minassign <<
85  ", m_mincells=" << m_mincells <<
86  ", m_verbose= " << m_verbose);
87  m_TrackSegmentHits.isRequired(m_TrackSegmentHitsName);
88  m_NDFinderTracks.registerInDataStore(m_NDFinderTracksName);
89  m_NDFinderTracks.registerRelationTo(m_TrackSegmentHits);
90  m_NDFinder.init(m_minweight, m_minpts, m_diagonal, m_minhits,
91  m_minhits_axial,
92  m_thresh, m_minassign, m_mincells, m_verbose,
93  m_axialFile, m_stereoFile);
94  m_NDFinder.printParams();
95 }
96 
97 void CDCTriggerNDFinderModule::beginRun()
98 {
99 }
100 
101 void CDCTriggerNDFinderModule::event()
102 {
103  m_NDFinder.reset();
104  for (CDCTriggerSegmentHit& hit : m_TrackSegmentHits) {
105  m_NDFinder.addHit(hit.getSegmentID(), hit.getPriorityPosition());
106  }
107  m_NDFinder.findTracks();
108 
109  vector<NDFinderTrack>* resultTracks = m_NDFinder.getFinderTracks();
110  for (NDFinderTrack trackND : *resultTracks) {
112  m_NDFinderTracks.appendNew(trackND.getPhi0(), trackND.getOmega(),
113  0., 0., trackND.getCot(), 0.);
114  vector<unsigned short> relHits = trackND.get_relHits();
115  for (ulong i = 0; i < relHits.size(); i++) {
116  NDFinderTrack->addRelationTo(m_TrackSegmentHits[relHits[i]]);
117  }
118  }
119 }
120 
121 void CDCTriggerNDFinderModule::endRun()
122 {
123 }
124 
125 void CDCTriggerNDFinderModule::terminate()
126 {
127  m_NDFinder.printParams();
128 }
Combination of several CDCHits to a track segment hit for the trigger.
Track created by the CDC trigger.
Base class for Modules.
Definition: Module.h:72
Store track parameters of found tracks.
Definition: NDFinder.h:28
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.