Belle II Software  release-05-02-19
SegmentNetworkProducerModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Jakob Lettenbichler, Felix Metzner *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/modules/vxdtfRedesign/SegmentNetworkProducerModule.h>
12 #include <tracking/trackFindingVXD/segmentNetwork/NodeNetworkHelperFunctions.h>
13 #include <tracking/trackFindingVXD/environment/VXDTFFilters.h>
14 #include <tracking/trackFindingVXD/environment/VXDTFFiltersHelperFunctions.h>
15 
16 #include <tracking/trackFindingVXD/filterMap/filterFramework/VoidObserver.h>
17 
18 using namespace std;
19 using namespace Belle2;
20 
21 REG_MODULE(SegmentNetworkProducer)
22 
24 {
25  //Set module properties
26  setDescription("The segment network producer module. "
27  "\n This module takes a given sectorMap and storeArrays of spacePoints and creates a "
28  "activeSectorNetwork, a trackNodeNetwork and a segmentNetwork."
29  "These are filled and stored in a StoreObjPtr of DirectedNodeNetworkContainer:\n");
30  setPropertyFlags(c_ParallelProcessingCertified);
31 
32  addParam("SpacePointsArrayNames",
33  m_PARAMSpacePointsArrayNames,
34  "List of SpacePoint StoreArray names to be evaluated.",
35  m_PARAMSpacePointsArrayNames);
36 
37  addParam("NetworkOutputName",
38  m_PARAMNetworkOutputName,
39  "Unique name for the DirectedNodeNetworkContainer Store Object Pointer created and filled by this module.",
40  string(""));
41 
42  addParam("EventLevelTrackingInfoName",
43  m_PARAMEventLevelTrackingInfoName,
44  "Name of the EventLevelTrackingInfo that should be used (different one for ROI-finding).",
45  string("EventLevelTrackingInfo"));
46 
47  addParam("addVirtualIP",
48  m_PARAMAddVirtualIP,
49  "Whether to add a SpacePoint for a virtual interaction point to be considered by the network creation.",
50  m_PARAMAddVirtualIP);
51 
52  addParam("virtualIPCoorindates",
53  m_PARAMVirtualIPCoordinates,
54  "Coordinates as list [x,z,y] to be used for the virtual interaction point SpacePoint, if turned on.",
55  m_PARAMVirtualIPCoordinates);
56 
57  addParam("virtualIPErrors",
58  m_PARAMVirtualIPErrors,
59  "Errors on coordinates as list [Ex,Ez,Ey] to be used for the virtual interaction point SpacePoint, if turned on.",
60  m_PARAMVirtualIPErrors);
61 
62  addParam("sectorMapName",
63  m_PARAMsecMapName,
64  "Name of the SectorMap to be used by this instance.",
65  m_PARAMsecMapName);
66 
67  addParam("printNetworks",
68  m_PARAMprintNetworks,
69  "If true for each event and each network a file containing the networks as graphs is created.",
70  m_PARAMprintNetworks);
71 
72  addParam("printNetworkToMathematica",
73  m_PARAMprintToMathematica,
74  "If true a file containing Mathematica code to generate a graph of the segment network is created.",
75  m_PARAMprintToMathematica);
76 
77  addParam("allFiltersOff",
78  m_PARAMallFiltersOff,
79  "For debugging purposes: if true, all filters are deactivated for all hit-combinations and therefore all combinations are accepted.",
80  m_PARAMallFiltersOff);
81 
82  addParam("maxNetworkSize",
83  m_PARAMmaxNetworkSize,
84  "Maximal size of the SegmentNetwork; if exceeded, the event execution will be skipped.",
85  m_PARAMmaxNetworkSize);
86 
87  addParam("maxConnections",
88  m_PARAMmaxSegmentConnections ,
89  "Maximal number of Segment connections; if exceeded, the event execution will be skipped.",
90  m_PARAMmaxSegmentConnections);
91 
92  addParam("maxAddedConnections",
93  m_PARAMmaxSegmentAddedConnections ,
94  "Maximal number of added Segment connections; if exceeded, the event execution will be skipped.",
95  m_PARAMmaxSegmentAddedConnections);
96 
97  addParam("maxHitConnections",
98  m_PARAMmaxTrackNodeConnections,
99  "Maximal number of Hit connections; if exceeded, the event execution will be skipped.",
100  m_PARAMmaxTrackNodeConnections);
101 
102  addParam("maxAddedHitConnections",
103  m_PARAMmaxTrackNodeAddedConnections,
104  "Maximal number of added Hit connections; if exceeded, the event execution will be skipped.",
105  m_PARAMmaxTrackNodeAddedConnections);
106 }
107 
108 void SegmentNetworkProducerModule::initialize()
109 {
110  if (m_PARAMVirtualIPCoordinates.size() != 3 or m_PARAMVirtualIPErrors.size() != 3) {
111  B2FATAL("Parameters for virtualIP are wrong!");
112  }
113 
114  // Get pointer to current filters to check if they exist. They must be reloaded for every run,
115  // as the pointer will change if the DB object changes (see SectorMapBootStrapModule).
116  auto filters = m_filtersContainer.getFilters(m_PARAMsecMapName);
117  if (filters == nullptr) {
118  B2FATAL("Requested secMapName '" << m_PARAMsecMapName << "' does not exist! Can not continue...");
119  }
120 
121  m_virtualIPCoordinates = B2Vector3D(m_PARAMVirtualIPCoordinates.at(0),
122  m_PARAMVirtualIPCoordinates.at(1),
123  m_PARAMVirtualIPCoordinates.at(2));
124  m_virtualIPErrors = B2Vector3D(m_PARAMVirtualIPErrors.at(0),
125  m_PARAMVirtualIPErrors.at(1),
126  m_PARAMVirtualIPErrors.at(2));
127 
128  if (m_PARAMprintToMathematica) {
129  SecMapHelper::printStaticSectorRelations(*filters, filters->getConfig().secMapName + "segNetProducer", 2, m_PARAMprintToMathematica,
130  true);
131  }
132 
133  for (std::string& anArrayName : m_PARAMSpacePointsArrayNames) {
134  m_spacePoints.push_back(StoreArray<SpacePoint>(anArrayName));
135  m_spacePoints.back().isRequired();
136  }
137 
138  m_network.registerInDataStore(m_PARAMNetworkOutputName, DataStore::c_DontWriteOut | DataStore::c_ErrorIfAlreadyRegistered);
139 
140  m_eventLevelTrackingInfo.isRequired(m_PARAMEventLevelTrackingInfoName);
141 }
142 
143 
144 void SegmentNetworkProducerModule::event()
145 {
146  m_eventCounter++;
147 
148  if (m_vxdtfFilters == nullptr) {
149  B2FATAL("Requested secMapName '" << m_PARAMsecMapName << "' does not exist! Can not continue...");
150  }
151 
152  // make sure that network exists:
153  if (!m_network) {
154  m_network.create();
155  }
156 
157  vector<RawSectorData> collectedData = matchSpacePointToSectors();
158 
159  m_network->set_trackNodeConnections(0);
160  m_network->set_activeSectorConnections(0);
161  m_network->set_segmentConnections(0);
162  m_network->set_trackNodeAddedConnections(0);
163  m_network->set_activeSectorAddedConnections(0);
164  m_network->set_segmentAddedConnections(0);
165  m_network->set_collectedPaths(0);
166 
167 
168  buildActiveSectorNetwork(collectedData);
169 
170  if (not buildTrackNodeNetwork<VoidObserver>()) {
171  return;
172  }
173 
174  buildSegmentNetwork<VoidObserver>();
175 }
176 
177 
178 std::vector<SegmentNetworkProducerModule::RawSectorData> SegmentNetworkProducerModule::matchSpacePointToSectors()
179 {
180  std::vector<RawSectorData> collectedData; // contains the raw sectors to be activated
181  std::deque<TrackNode>& trackNodes = m_network->accessTrackNodes(); // collects trackNodes
182  int nCollected = 0;
183 
184  for (StoreArray<SpacePoint>& storeArray : m_spacePoints) {
185  // match all SpacePoints with the sectors:
186  for (SpacePoint& aSP : storeArray) {
187  if (aSP.getAssignmentState()) {
188  continue;
189  }
190 
191  const StaticSectorType* sectorFound = findSectorForSpacePoint(aSP);
192 
193  if (sectorFound == nullptr) {
194  B2WARNING("SpacePoint in sensor " << aSP.getVxdID() << " no sector found, SpacePoint discarded!");
195  continue;
196  }
197 
198  trackNodes.emplace_back(&aSP);
199 
200  // sector for SpacePoint exists:
201  FullSecID foundSecID = sectorFound->getFullSecID();
202 
203  vector<RawSectorData>::iterator iter =
204  std::find_if(collectedData.begin(), collectedData.end(),
205  [&](const RawSectorData & entry) -> bool { return entry.secID == foundSecID; }
206  );
207 
208  // if secID not in collectedData:
209  if (iter == collectedData.end()) {
210  collectedData.push_back({ foundSecID , false, nullptr, sectorFound, { & (trackNodes.back())}});
211  nCollected++;
212  } else {
213  iter->hits.push_back(&(trackNodes.back()));
214  nCollected++;
215  }
216  }
217  }
218 
219  // store IP-coordinates
220  if (m_PARAMAddVirtualIP) {
221  m_network->setVirtualInteractionPoint(m_virtualIPCoordinates, m_virtualIPErrors);
222  TrackNode* vIP = m_network->getVirtualInteractionPoint();
223  const StaticSectorType* sectorFound = findSectorForSpacePoint((vIP->getHit()));
224  collectedData.push_back({FullSecID(), false, nullptr, sectorFound, {vIP}}); // TODO: which FullSecID for the vIP?
225  }
226 
227  m_network->set_trackNodesCollected(nCollected);
228  return collectedData;
229 }
230 
231 
232 void SegmentNetworkProducerModule::buildActiveSectorNetwork(std::vector<SegmentNetworkProducerModule::RawSectorData>&
233  collectedData)
234 {
235  // access (yet) empty activeSectorNetwork:
237  m_network->accessActiveSectorNetwork();
238  // activeSectors are to be stored separately:
239  std::deque<ActiveSector<StaticSectorType, TrackNode>>& activeSectors = m_network->accessActiveSectors();
240  unsigned int nLinked = 0, nAdded = 0;
241 
242  // loop over all raw sectors found so far:
243  for (RawSectorData& outerSectorData : collectedData) {
244  ActiveSector<StaticSectorType, TrackNode> outerSector(outerSectorData.staticSector);
245  std::int32_t outerEntryID = outerSector.getID();
246 
247  // skip double-adding of nodes into the network after first time found -> speeding up the code:
248  bool wasAnythingFoundSoFar = false;
249  // find innerSectors of outerSector and add them to the network:
250  const std::vector<FullSecID>& innerSecIDs = outerSector.getInner2spSecIDs();
251 
252  for (const FullSecID innerSecID : innerSecIDs) {
253  std::int32_t innerEntryID = innerSecID;
254  vector<RawSectorData>::iterator innerRawSecPos =
255  std::find_if(collectedData.begin(), collectedData.end(),
256  [&](const RawSectorData & entry) -> bool { return (entry.secID == innerSecID); }
257  );
258 
259  // current inner sector has no SpacePoints in this event:
260  if (innerRawSecPos == collectedData.end()) {
261  continue;
262  }
263 
264  // take care of inner sector first:
265  if (!innerRawSecPos->wasCreated) { // was already there
266  activeSectors.emplace_back(innerRawSecPos->staticSector);
267  innerRawSecPos->wasCreated = true;
268  innerRawSecPos->sector = &activeSectors.back();
269  for (Belle2::TrackNode* hit : innerRawSecPos->hits) {
270  hit->m_sector = &activeSectors.back();
271  }
272  // add all SpacePoints of this sector to ActiveSector:
273  activeSectors.back().addHits(innerRawSecPos->hits);
274  activeSectorNetwork.addNode(innerEntryID, activeSectors.back());
275  }
276 
277  // when accepting combination the first time, take care of outer sector:
278  if (!wasAnythingFoundSoFar) {
279  activeSectors.push_back(outerSector);
280  outerSectorData.wasCreated = true;
281  outerSectorData.sector = &activeSectors.back();
282  for (Belle2::TrackNode* hit : outerSectorData.hits) {
283  hit->m_sector = &activeSectors.back();
284  }
285  // add all SpacePoints of this sector to ActiveSector:
286  activeSectors.back().addHits(outerSectorData.hits);
287  activeSectorNetwork.addNode(outerEntryID, activeSectors.back());
288 
289  if (activeSectorNetwork.linkNodes(outerEntryID, innerEntryID)) {
290  wasAnythingFoundSoFar = true;
291  nLinked++;
292  nAdded++;
293  }
294  } else {
295  if (activeSectorNetwork.addInnerToLastOuterNode(innerEntryID)) {
296  nAdded++;
297  }
298  }
299  }
300  }
301 
302  m_network->set_activeSectorConnections(nLinked);
303  m_network->set_activeSectorAddedConnections(nAdded);
304 
305  if (m_PARAMprintNetworks) {
306  std::string fileName = m_vxdtfFilters->getConfig().secMapName + "_ActiveSector_Ev" + std::to_string(m_eventCounter);
307  DNN::printNetwork<ActiveSector<StaticSectorType, TrackNode>, VoidMetaInfo>(activeSectorNetwork, fileName);
308  }
309 }
310 
311 
312 template <class ObserverType>
313 bool SegmentNetworkProducerModule::buildTrackNodeNetwork()
314 {
316  m_network->accessActiveSectorNetwork();
317  DirectedNodeNetwork<Belle2::TrackNode, VoidMetaInfo>& hitNetwork = m_network->accessHitNetwork();
318 
319  unsigned int nLinked = 0, nAdded = 0;
320 
321  // loop over outer sectors to get their hits(->outerHits) and inner sectors
322  for (auto* outerSector : activeSectorNetwork.getNodes()) {
323  if (outerSector->getInnerNodes().empty()) {
324  continue;
325  }
326  const vector<TrackNode*>& outerHits = outerSector->getEntry().getHits();
327  if (outerHits.empty()) {
328  continue;
329  }
330 
331  // get the point to the static sector
332  const StaticSectorType* outerStaticSector = outerSector->getEntry().getAttachedStaticSector();
333  // should not happen, but just in case:
334  if (outerStaticSector == nullptr) {
335  B2WARNING("Static sector not found. This should not happen!");
336  continue;
337  }
338 
339  // loop over inner sectors to get their hits(->innerHits) and check their compatibility
340  for (auto* innerSector : outerSector->getInnerNodes()) {
341  const vector<TrackNode*>& innerHits = innerSector->getEntry().getHits();
342  if (innerHits.empty()) {
343  continue;
344  }
345 
346  //retrieve the filter, a null pointer is returned if there is no filter
347  const auto* filter2sp = outerStaticSector->getFilter2sp(innerSector->getEntry().getFullSecID());
348  if (filter2sp == nullptr) {
349  continue;
350  }
351 
352  for (TrackNode* outerHit : outerHits) {
353  // skip double-adding of nodes into the network after first time found -> speeding up the code:
354  bool wasAnythingFoundSoFar = false;
355 
356  std::int32_t outerNodeID = outerHit->getID();
357  hitNetwork.addNode(outerNodeID, *outerHit);
358 
359  for (TrackNode* innerHit : innerHits) {
360  // applying filters provided by the sectorMap:
361  // ->observe() gives back an observed version of the filter (the default filter has the VoidObserver)
362  bool accepted = (filter2sp->observe(ObserverType())).accept(outerHit->getHit(), innerHit->getHit());
363 
364  if (m_PARAMallFiltersOff) accepted = true; // bypass all filters
365 
366  if (!accepted) {
367  continue;
368  }
369 
370  std::int32_t innerNodeID = innerHit->getID();
371  hitNetwork.addNode(innerNodeID, *innerHit);
372  // store combination of hits in network:
373  if (!wasAnythingFoundSoFar) {
374  if (hitNetwork.linkNodes(outerNodeID, innerNodeID)) {
375  nLinked++;
376  nAdded++;
377  wasAnythingFoundSoFar = true;
378  }
379  } else {
380  if (hitNetwork.addInnerToLastOuterNode(innerNodeID)) {
381  nAdded++;
382  }
383  }
384 
385  if (nLinked > m_PARAMmaxTrackNodeConnections) {
386  B2WARNING("Number of TrackNodeConnections has exceeded maximal size limit of " << m_PARAMmaxTrackNodeConnections
387  << "! Processing of the event will be aborted. The number of connections was = " << nLinked);
388  m_eventLevelTrackingInfo->setVXDTF2AbortionFlag();
389  m_network->set_trackNodeConnections(nLinked);
390  m_network->set_trackNodeAddedConnections(nAdded);
391  return false;
392  }
393  if (nAdded > m_PARAMmaxTrackNodeAddedConnections) {
394  B2WARNING("Number of added TrackNodeConnections has exceeded maximal size limit of " << m_PARAMmaxTrackNodeAddedConnections
395  << "! Processing of the event will be aborted. The number of connections was = " << nLinked);
396  m_eventLevelTrackingInfo->setVXDTF2AbortionFlag();
397  m_network->set_trackNodeConnections(nLinked);
398  m_network->set_trackNodeAddedConnections(nAdded);
399  return false;
400  }
401  }
402  }
403  }
404  }
405  m_network->set_trackNodeConnections(nLinked);
406  m_network->set_trackNodeAddedConnections(nAdded);
407 
408  if (m_PARAMprintNetworks) {
409  std::string fileName = m_vxdtfFilters->getConfig().secMapName + "_TrackNode_Ev" + std::to_string(m_eventCounter);
410  DNN::printNetwork<Belle2::TrackNode, VoidMetaInfo>(hitNetwork, fileName);
411  }
412 
413  return true;
414 }
415 
416 
417 template <class ObserverType>
418 void SegmentNetworkProducerModule::buildSegmentNetwork()
419 {
420  DirectedNodeNetwork<Belle2::TrackNode, VoidMetaInfo>& hitNetwork = m_network->accessHitNetwork();
421  DirectedNodeNetwork<Segment<Belle2::TrackNode>, CACell>& segmentNetwork = m_network->accessSegmentNetwork();
422  std::deque<Belle2::Segment<Belle2::TrackNode>>& segments = m_network->accessSegments();
423  unsigned int nLinked = 0, nAdded = 0;
424 
425  for (DirectedNode<TrackNode, VoidMetaInfo>* outerHit : hitNetwork.getNodes()) {
426  const vector<DirectedNode<TrackNode, VoidMetaInfo>*>& centerHits = outerHit->getInnerNodes();
427 
428  if (centerHits.empty()) {
429  continue;
430  }
431 
432  // get the point to the static sector
433  const StaticSectorType* outerStaticSector = outerHit->getEntry().m_sector->getAttachedStaticSector();
434  // should not happen, but just in case:
435  if (outerStaticSector == nullptr) {
436  B2WARNING("Static sector not found. This should not happen!");
437  continue;
438  }
439 
440  for (DirectedNode<TrackNode, VoidMetaInfo>* centerHit : centerHits) {
441  const vector<DirectedNode<TrackNode, VoidMetaInfo>*>& innerHits = centerHit->getInnerNodes();
442  if (innerHits.empty()) {
443  continue;
444  }
445 
446  // skip double-adding of nodes into the network after first time found -> speeding up the code:
447  bool wasAnythingFoundSoFar = false;
448  for (DirectedNode<TrackNode, VoidMetaInfo>* innerHit : innerHits) {
449 
450  //retrieve the filter
451  const auto* filter3sp = outerStaticSector->getFilter3sp(centerHit->getEntry().m_sector->getFullSecID(),
452  innerHit->getEntry().m_sector->getFullSecID());
453  if (filter3sp == nullptr) {
454  continue;
455  }
456 
457  // the filter accepts spacepoint combinations
458  // ->observe gives back an observed version of the filter
459  bool accepted = false;
460  // there is an uncaught exception thrown by the CircleCenterXY filter variable if the points are on a straight line
461  try {
462  accepted = (filter3sp->observe(ObserverType())).accept(outerHit->getEntry().getHit(),
463  centerHit->getEntry().getHit(),
464  innerHit->getEntry().getHit());
465  } catch (...) {
466  B2WARNING("SegmentNetworkProducerModule: exception caught thrown by one of the three hit filters");
467  }
468 
469  if (m_PARAMallFiltersOff) accepted = true; // bypass all filters
470 
471  if (!accepted) {
472  continue;
473  }
474 
475  std::int64_t innerSegmentID = static_cast<std::int64_t>(centerHit->getEntry().getID()) << 32 | static_cast<std::int64_t>
476  (innerHit->getEntry().getID());
477 
478  if (not segmentNetwork.isNodeInNetwork(innerSegmentID)) {
479  // create innerSegment first (order of storage in vector<segments> is irrelevant):
480  segments.emplace_back(centerHit->getEntry().m_sector->getFullSecID(),
481  innerHit->getEntry().m_sector->getFullSecID(),
482  &centerHit->getEntry(),
483  &innerHit->getEntry());
484  segmentNetwork.addNode(innerSegmentID, segments.back());
485  }
486 
487  std::int64_t outerSegmentID = static_cast<std::int64_t>(outerHit->getEntry().getID()) << 32 | static_cast<std::int64_t>
488  (centerHit->getEntry().getID());
489  if (not segmentNetwork.isNodeInNetwork(outerSegmentID)) {
490  segments.emplace_back(outerHit->getEntry().m_sector->getFullSecID(),
491  centerHit->getEntry().m_sector->getFullSecID(),
492  &outerHit->getEntry(),
493  &centerHit->getEntry());
494  segmentNetwork.addNode(outerSegmentID, segments.back());
495  }
496 
497  // store combination of hits in network:
498  if (!wasAnythingFoundSoFar) {
499  if (segmentNetwork.linkNodes(outerSegmentID, innerSegmentID)) {
500  nLinked++;
501  nAdded++;
502  wasAnythingFoundSoFar = true;
503  }
504  } else {
505  if (segmentNetwork.addInnerToLastOuterNode(innerSegmentID)) {
506  nAdded++;
507  }
508  }
509 
510  if (nLinked > m_PARAMmaxSegmentConnections) {
511  B2WARNING("Number of SegmentConnections exceeds the limit of " << m_PARAMmaxSegmentConnections
512  << ". VXDTF2 will abort the processing ot the event and the SegmentNetwork is cleared.");
513  m_eventLevelTrackingInfo->setVXDTF2AbortionFlag();
514  m_network->set_segmentConnections(nLinked);
515  m_network->set_segmentAddedConnections(nAdded);
516  m_network->clear();
517  return;
518  }
519  if (nAdded > m_PARAMmaxSegmentAddedConnections) {
520  B2WARNING("Number of added SegmentConnections exceeds the limit of " << m_PARAMmaxSegmentAddedConnections
521  << ". VXDTF2 will abort the processing ot the event and the SegmentNetwork is cleared.");
522  m_eventLevelTrackingInfo->setVXDTF2AbortionFlag();
523  m_network->set_segmentConnections(nLinked);
524  m_network->set_segmentAddedConnections(nAdded);
525  m_network->clear();
526  return;
527  }
528  if (segments.size() > m_PARAMmaxNetworkSize) {
529  B2WARNING("SegmentNetwork size exceeds the limit of " << m_PARAMmaxNetworkSize
530  << ". Network size is " << segmentNetwork.size()
531  << ". VXDTF2 will abort the processing ot the event and the SegmentNetwork is cleared.");
532  m_eventLevelTrackingInfo->setVXDTF2AbortionFlag();
533  m_network->set_segmentConnections(nLinked);
534  m_network->set_segmentAddedConnections(nAdded);
535  m_network->clear();
536  return;
537  }
538  }
539  }
540  }
541  m_network->set_segmentConnections(nLinked);
542  m_network->set_segmentAddedConnections(nAdded);
543 
544  if (m_PARAMprintNetworks) {
545  std::string fileName = m_vxdtfFilters->getConfig().secMapName + "_Segment_Ev" + std::to_string(m_eventCounter);
546  DNN::printNetwork<Segment<Belle2::TrackNode>, CACell>(segmentNetwork, fileName);
547  DNN::printCANetwork<Segment<Belle2::TrackNode>>(segmentNetwork, "CA" + fileName);
548  }
549 }
Belle2::SegmentNetworkProducerModule
The Segment Network Producer Module.
Definition: SegmentNetworkProducerModule.h:50
Belle2::StaticSector::getFilter3sp
const Filter3sp * getFilter3sp(const FullSecID &centerID, const FullSecID &innerID) const
Get the pionter to the 3 Space Point filter assigned to the friendship relation among this sector; wi...
Definition: StaticSector.h:79
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::TrackNode
Minimal class to store combination of sector and spacePoint, since SpacePoint can not carry sectorCon...
Definition: TrackNode.h:32
Belle2::ActiveSector
The ActiveSector Class.
Definition: ActiveSector.h:39
Belle2::DirectedNodeNetwork::isNodeInNetwork
bool isNodeInNetwork(const NodeID nodeID) const
Check if a given entry is already in the network.
Definition: DirectedNodeNetwork.h:153
Belle2::SegmentNetworkProducerModule::RawSectorData
Simple struct for collecting raw data for a single sector.
Definition: SegmentNetworkProducerModule.h:57
Belle2::DirectedNodeNetwork::size
unsigned int size() const
Returns number of nodes to be found in the network.
Definition: DirectedNodeNetwork.h:225
Belle2::DirectedNodeNetwork
Network of directed nodes of the type EntryType.
Definition: DirectedNodeNetwork.h:38
Belle2::SpacePoint
SpacePoint typically is build from 1 PXDCluster or 1-2 SVDClusters.
Definition: SpacePoint.h:52
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::StaticSector::getFilter2sp
const Filter2sp * getFilter2sp(FullSecID innerSector) const
Get the pionter to the 2 Space Point filter assigned to the friendship relation among this sector; wi...
Definition: StaticSector.h:66
Belle2::VoidMetaInfo
The most CPU efficient MetaInfo for the DirectedNode-requirements (even if useless).
Definition: VoidMetaInfo.h:27
Belle2::FullSecID
Class to identify a sector inside of the VXD.
Definition: FullSecID.h:43
Belle2::B2Vector3D
B2Vector3< double > B2Vector3D
typedef for common usage with double
Definition: B2Vector3.h:507
Belle2::StaticSector::getFullSecID
FullSecID getFullSecID() const
returns FullSecID of this sector
Definition: StaticSector.h:181
Belle2::DirectedNodeNetwork::linkNodes
bool linkNodes(NodeID outerNodeID, NodeID innerNodeID)
takes two entry IDs and weaves them into the network
Definition: DirectedNodeNetwork.h:132
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackNode::getHit
const SpacePoint & getHit() const
returns reference to hit.
Definition: TrackNode.h:102
Belle2::CACell
The CACell class This Class stores all relevant information one wants to have stored in a cell for a ...
Definition: CACell.h:30
Belle2::DirectedNodeNetwork::getNodes
std::vector< Node * > & getNodes()
Returns all nodes of the network.
Definition: DirectedNodeNetwork.h:201
Belle2::StaticSector
class to describe a static sector of the sector map.
Definition: StaticSector.h:39
Belle2::ActiveSector::getID
std::int32_t getID() const
************************* PUBLIC MEMBER FUNCTIONS *************************
Definition: ActiveSector.h:92
Belle2::ActiveSector::getInner2spSecIDs
const std::vector< FullSecID > & getInner2spSecIDs() const
returns all IDs for inner sectors of two-sector-combinations stored in the static SectorMap
Definition: ActiveSector.h:108
Belle2::StoreArray< SpacePoint >
Belle2::DirectedNode
The Node-Class.
Definition: DirectedNode.h:41
Belle2::DirectedNodeNetwork::addNode
bool addNode(NodeID nodeID, EntryType &newEntry)
************************* PUBLIC MEMBER FUNCTIONS *************************
Definition: DirectedNodeNetwork.h:72
Belle2::DirectedNodeNetwork::addInnerToLastOuterNode
bool addInnerToLastOuterNode(NodeID innerNodeID)
to the last outerNode added, another innerNode will be attached
Definition: DirectedNodeNetwork.h:85