Belle II Software  release-08-01-10
CDCWireTopology.h
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 #pragma once
9 
10 #include <tracking/trackFindingCDC/topology/CDCWireSuperLayer.h>
11 #include <tracking/trackFindingCDC/topology/CDCWireLayer.h>
12 
13 #include <tracking/trackFindingCDC/topology/WireNeighborKind.h>
14 #include <tracking/trackFindingCDC/topology/WireNeighborPair.h>
15 #include <tracking/trackFindingCDC/topology/CDCWire.h>
16 
17 #include <tracking/trackFindingCDC/topology/ISuperLayer.h>
18 #include <tracking/trackFindingCDC/topology/ILayer.h>
19 #include <tracking/trackFindingCDC/topology/IWire.h>
20 #include <tracking/trackFindingCDC/topology/EWirePosition.h>
21 
22 #include <tracking/trackFindingCDC/utilities/MayBePtr.h>
23 
24 #include <cdc/dataobjects/WireID.h>
25 
26 #include <vector>
27 
28 namespace Belle2 {
33  namespace TrackFindingCDC {
34 
45 
46  public:
48  static CDCWireTopology& getInstance();
49 
50  public:
53  { initialize(); }
54 
56  CDCWireTopology(const CDCWireTopology& wireTopology) = delete;
57 
59  void operator=(const CDCWireTopology& wireTopology) = delete;
60 
61  public:
63  static const IWire c_NWires = 14336;
64 
66  static const ILayer c_NLayers = 56;
67 
69  static const ISuperLayer c_NSuperLayers = 9;
70 
71  private:
76  void initialize();
77 
78  public:
80  void reinitialize(EWirePosition wirePosition, bool ignoreWireSag);
81 
82  public:
88 
90  bool isValidWireID(const WireID& wireID) const
91  { return isValidIWire(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
92 
94  bool isValidIWire(ILayer iCLayer, IWire iWire) const
95  { return isValidICLayer(iCLayer) and getWireLayer(iCLayer).isValidIWire(iWire); }
96 
98  bool isValidIWire(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
99  { return isValidISuperLayer(iSuperLayer) and getWireSuperLayer(iSuperLayer).isValidIWire(iLayer, iWire); }
100 
102  const CDCWire& getWire(const WireID& wireId) const
103  { return getWireLayer(wireId.getICLayer()).getWire(wireId.getIWire()) ; }
104 
106  const CDCWire& getWire(ILayer iCLayer, IWire iWire) const
107  { return getWireLayer(iCLayer).getWire(iWire) ; }
108 
110  const CDCWire& getWire(ISuperLayer iSuperLayer, ILayer iLayer , IWire iWire) const
111  { return getWireSuperLayer(iSuperLayer).getWireLayer(iLayer).getWire(iWire) ; }
112 
114  const std::vector<Belle2::TrackFindingCDC::CDCWire>& getWires() const
115  { return m_wires; }
117 
123 
125  ILayer getNLayers() const
126  { return getWireLayers().size(); }
127 
129  bool isValidICLayer(ILayer iCLayer) const
130  { return 0 <= iCLayer and iCLayer < int(getWireLayers().size()); }
131 
133  bool isValidILayer(ISuperLayer iSuperLayer, ILayer iLayer) const
134  { return isValidISuperLayer(iSuperLayer) and getWireSuperLayer(iSuperLayer).isValidILayer(iLayer); }
135 
137  const CDCWireLayer& getWireLayer(const WireID& wireId) const
138  { return getWireLayer(wireId.getICLayer()); }
139 
141  const CDCWireLayer& getWireLayer(ILayer iCLayer) const
142  { return m_wireLayers[ iCLayer - m_FirstLayerOffset ]; }
143 
145  const CDCWireLayer& getWireLayer(ISuperLayer iSuperLayer, ILayer iLayer) const
146  { return getWireSuperLayer(iSuperLayer).getWireLayer(iLayer); }
147 
149  const std::vector<Belle2::TrackFindingCDC::CDCWireLayer>& getWireLayers() const
150  { return m_wireLayers; }
152 
158 
160  ISuperLayer getNSuperLayers() const
161  { return getWireSuperLayers().size(); }
162 
164  bool isValidISuperLayer(ISuperLayer iSuperLayer) const
165  { return 0 <= iSuperLayer and iSuperLayer < int(getWireSuperLayers().size()); }
166 
168  ISuperLayer getISuperLayerAtCylindricalR(double cylindricalR);
169 
171  const CDCWireSuperLayer& getWireSuperLayer(const WireID& wireID) const
172  { return getWireSuperLayer(wireID.getISuperLayer()); }
173 
175  const CDCWireSuperLayer& getWireSuperLayer(ISuperLayer iSuperLayer) const
176  {
177  return m_wireSuperLayers[iSuperLayer];
178  }
179 
181  const std::vector<Belle2::TrackFindingCDC::CDCWireSuperLayer>& getWireSuperLayers() const
182  { return m_wireSuperLayers; }
184 
198  WireNeighborKind getNeighborKind(const WireID& wireID, const WireID& otherWireID) const;
199 
201  bool arePrimaryNeighbors(const WireID& wireID, const WireID& otherWireID) const
202  { return getNeighborKind(wireID, otherWireID).getCellDistance() == 1; }
203 
205  bool areSeconaryNeighbors(const WireID& wireID, const WireID& otherWireID) const
206  { return getNeighborKind(wireID, otherWireID).getCellDistance() == 2; }
207 
209  MayBePtr<const CDCWire> getPrimaryNeighbor(short oClockDirection, const WireID& wireID) const
210  { return getPrimaryNeighbor(oClockDirection, wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
211 
214  { return getNeighborsOutwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
215 
218  { return getNeighborsInwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
219 
221  MayBePtr<const CDCWire> getNeighborCCWOutwards(const WireID& wireID) const
222  { return getNeighborCCWOutwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
223 
225  MayBePtr<const CDCWire> getNeighborCWOutwards(const WireID& wireID) const
226  { return getNeighborCWOutwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
227 
229  MayBePtr<const CDCWire> getNeighborCCW(const WireID& wireID) const
230  { return getNeighborCCW(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
231 
233  MayBePtr<const CDCWire> getNeighborCW(const WireID& wireID) const
234  { return getNeighborCW(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
235 
237  MayBePtr<const CDCWire> getNeighborCCWInwards(const WireID& wireID) const
238  { return getNeighborCCWInwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
239 
241  MayBePtr<const CDCWire> getNeighborCWInwards(const WireID& wireID) const
242  { return getNeighborCWInwards(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
255  MayBePtr<const CDCWire> getPrimaryNeighbor(short oClockDirection,
256  ISuperLayer iSuperLayer,
257  ILayer iLayer,
258  IWire iWire) const
259  { return getWireSuperLayer(iSuperLayer).getPrimaryNeighbor(oClockDirection, iLayer, iWire);}
260 
261 
263  WireNeighborPair getNeighborsOutwards(ISuperLayer iSuperLayer,
264  ILayer iLayer,
265  IWire iWire) const
266  { return getWireSuperLayer(iSuperLayer).getNeighborsOutwards(iLayer, iWire); }
267 
269  WireNeighborPair getNeighborsInwards(ISuperLayer iSuperLayer,
270  ILayer iLayer,
271  IWire iWire) const
272  { return getWireSuperLayer(iSuperLayer).getNeighborsInwards(iLayer, iWire); }
273 
275  MayBePtr<const CDCWire> getNeighborCCWOutwards(ISuperLayer iSuperLayer,
276  ILayer iLayer,
277  IWire iWire) const
278  { return getWireSuperLayer(iSuperLayer).getNeighborCCWOutwards(iLayer, iWire); }
279 
281  MayBePtr<const CDCWire> getNeighborCWOutwards(ISuperLayer iSuperLayer,
282  ILayer iLayer,
283  IWire iWire) const
284  { return getWireSuperLayer(iSuperLayer).getNeighborCWOutwards(iLayer, iWire); }
285 
287  MayBePtr<const CDCWire> getNeighborCCW(ISuperLayer iSuperLayer,
288  ILayer iLayer,
289  IWire iWire) const
290  { return getWireSuperLayer(iSuperLayer).getNeighborCCW(iLayer, iWire); }
291 
293  MayBePtr<const CDCWire> getNeighborCW(ISuperLayer iSuperLayer,
294  ILayer iLayer,
295  IWire iWire) const
296  { return getWireSuperLayer(iSuperLayer).getNeighborCW(iLayer, iWire); }
297 
299  MayBePtr<const CDCWire> getNeighborCCWInwards(ISuperLayer iSuperLayer,
300  ILayer iLayer,
301  IWire iWire) const
302  { return getWireSuperLayer(iSuperLayer).getNeighborCCWInwards(iLayer, iWire); }
303 
305  MayBePtr<const CDCWire> getNeighborCWInwards(ISuperLayer iSuperLayer,
306  ILayer iLayer,
307  IWire iWire) const
308  { return getWireSuperLayer(iSuperLayer).getNeighborCWInwards(iLayer, iWire); }
325  MayBePtr<const CDCWire> getSecondaryNeighbor(short oClockDirection, const WireID& wireID) const
326  { return getSecondaryNeighbor(oClockDirection, wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
327 
329  MayBePtr<const CDCWire> getSecondNeighborOneOClock(const WireID& wireID) const
330  { return getSecondNeighborOneOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
331 
333  MayBePtr<const CDCWire> getSecondNeighborTwoOClock(const WireID& wireID) const
334  { return getSecondNeighborTwoOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
335 
337  MayBePtr<const CDCWire> getSecondNeighborThreeOClock(const WireID& wireID) const
338  { return getSecondNeighborThreeOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
339 
341  MayBePtr<const CDCWire> getSecondNeighborFourOClock(const WireID& wireID) const
342  { return getSecondNeighborFourOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
343 
345  MayBePtr<const CDCWire> getSecondNeighborFiveOClock(const WireID& wireID) const
346  { return getSecondNeighborFiveOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
347 
349  MayBePtr<const CDCWire> getSecondNeighborSixOClock(const WireID& wireID) const
350  { return getSecondNeighborSixOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
351 
353  MayBePtr<const CDCWire> getSecondNeighborSevenOClock(const WireID& wireID) const
354  { return getSecondNeighborSevenOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
355 
357  MayBePtr<const CDCWire> getSecondNeighborEightOClock(const WireID& wireID) const
358  { return getSecondNeighborEightOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
359 
361  MayBePtr<const CDCWire> getSecondNeighborNineOClock(const WireID& wireID) const
362  { return getSecondNeighborNineOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
363 
365  MayBePtr<const CDCWire> getSecondNeighborTenOClock(const WireID& wireID) const
366  { return getSecondNeighborTenOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
367 
369  MayBePtr<const CDCWire> getSecondNeighborElevenOClock(const WireID& wireID) const
370  { return getSecondNeighborElevenOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
371 
373  MayBePtr<const CDCWire> getSecondNeighborTwelveOClock(const WireID& wireID) const
374  { return getSecondNeighborTwelveOClock(wireID.getISuperLayer(), wireID.getILayer(), wireID.getIWire()); }
390  MayBePtr<const CDCWire> getSecondaryNeighbor(short oClockDirection,
391  ISuperLayer iSuperLayer,
392  ILayer iLayer,
393  IWire iWire) const
394  { return getWireSuperLayer(iSuperLayer).getSecondaryNeighbor(oClockDirection, iLayer, iWire);}
395 
397  MayBePtr<const CDCWire> getSecondNeighborOneOClock(ISuperLayer iSuperLayer,
398  ILayer iLayer,
399  IWire iWire) const
400  { return getWireSuperLayer(iSuperLayer).getSecondNeighborOneOClock(iLayer, iWire); }
401 
403  MayBePtr<const CDCWire> getSecondNeighborTwoOClock(ISuperLayer iSuperLayer,
404  ILayer iLayer,
405  IWire iWire) const
406  { return getWireSuperLayer(iSuperLayer).getSecondNeighborTwoOClock(iLayer, iWire); }
407 
409  MayBePtr<const CDCWire> getSecondNeighborThreeOClock(ISuperLayer iSuperLayer,
410  ILayer iLayer,
411  IWire iWire) const
412  { return getWireSuperLayer(iSuperLayer).getSecondNeighborThreeOClock(iLayer, iWire); }
413 
415  MayBePtr<const CDCWire> getSecondNeighborFourOClock(ISuperLayer iSuperLayer,
416  ILayer iLayer,
417  IWire iWire) const
418  { return getWireSuperLayer(iSuperLayer).getSecondNeighborFourOClock(iLayer, iWire); }
419 
421  MayBePtr<const CDCWire> getSecondNeighborFiveOClock(ISuperLayer iSuperLayer,
422  ILayer iLayer,
423  IWire iWire) const
424  { return getWireSuperLayer(iSuperLayer).getSecondNeighborFiveOClock(iLayer, iWire); }
425 
427  MayBePtr<const CDCWire> getSecondNeighborSixOClock(ISuperLayer iSuperLayer,
428  ILayer iLayer,
429  IWire iWire) const
430  { return getWireSuperLayer(iSuperLayer).getSecondNeighborSixOClock(iLayer, iWire); }
431 
433  MayBePtr<const CDCWire> getSecondNeighborSevenOClock(ISuperLayer iSuperLayer,
434  ILayer iLayer,
435  IWire iWire) const
436  { return getWireSuperLayer(iSuperLayer).getSecondNeighborSevenOClock(iLayer, iWire); }
437 
439  MayBePtr<const CDCWire> getSecondNeighborEightOClock(ISuperLayer iSuperLayer,
440  ILayer iLayer,
441  IWire iWire) const
442  { return getWireSuperLayer(iSuperLayer).getSecondNeighborEightOClock(iLayer, iWire); }
443 
445  MayBePtr<const CDCWire> getSecondNeighborNineOClock(ISuperLayer iSuperLayer,
446  ILayer iLayer,
447  IWire iWire) const
448  { return getWireSuperLayer(iSuperLayer).getSecondNeighborNineOClock(iLayer, iWire); }
449 
451  MayBePtr<const CDCWire> getSecondNeighborTenOClock(ISuperLayer iSuperLayer,
452  ILayer iLayer,
453  IWire iWire) const
454  { return getWireSuperLayer(iSuperLayer).getSecondNeighborTenOClock(iLayer, iWire); }
455 
457  MayBePtr<const CDCWire> getSecondNeighborElevenOClock(ISuperLayer iSuperLayer,
458  ILayer iLayer,
459  IWire iWire) const
460  { return getWireSuperLayer(iSuperLayer).getSecondNeighborElevenOClock(iLayer, iWire); }
461 
463  MayBePtr<const CDCWire> getSecondNeighborTwelveOClock(ISuperLayer iSuperLayer,
464  ILayer iLayer,
465  IWire iWire) const
466  { return getWireSuperLayer(iSuperLayer).getSecondNeighborTwelveOClock(iLayer, iWire); }
469  public:
471  double getOuterCylindricalR() const
472  { return m_wireLayers.back().getOuterCylindricalR(); }
473 
475  double getInnerCylindricalR() const
476  { return m_wireLayers.front().getInnerCylindricalR(); }
477 
478  private:
480  std::vector<Belle2::TrackFindingCDC::CDCWire> m_wires;
481 
483  std::vector<Belle2::TrackFindingCDC::CDCWireLayer> m_wireLayers;
484 
486  std::vector<Belle2::TrackFindingCDC::CDCWireSuperLayer> m_wireSuperLayers;
487 
489  ILayer m_FirstLayerOffset = 0;
490 
491  };
492  }
494 }
Class representating a sense wire layer in the central drift chamber.
Definition: CDCWireLayer.h:42
bool isValidIWire(IWire iWire) const
Checks if the given wire id belongs to a valid wire in this layer.
Definition: CDCWireLayer.h:134
const CDCWire & getWire(IWire iWire) const
Gives the wire by its id in the layer.
Definition: CDCWireLayer.h:138
Class representating a sense wire superlayer in the central drift chamber.
MayBePtr< const CDCWire > getSecondNeighborTwoOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the two o'clock position.
MayBePtr< const CDCWire > getNeighborCCWOutwards(ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards by wire id and layer id with in ...
MayBePtr< const CDCWire > getPrimaryNeighbor(short oClockDirection, ILayer iLayer, IWire iWire) const
Getter for the two closest neighbors in the given o'clock direction.
MayBePtr< const CDCWire > getNeighborCCWInwards(ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards by wire id and layer id with in ...
MayBePtr< const CDCWire > getSecondNeighborFourOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the four o'clock position.
MayBePtr< const CDCWire > getNeighborCCW(ILayer iLayer, IWire iWire) const
Getter for the nearest counterclockwise neighbor by wire id and layer id with in this superlayer.
WireNeighborPair getNeighborsOutwards(ILayer iLayer, IWire iWire) const
Getter for the two closest neighbors in the layer outwards of the given on.
MayBePtr< const CDCWire > getNeighborCWInwards(ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards by wire id and layer id with in ...
bool isValidIWire(ILayer iLayer, IWire iWire) const
Checks if the given wire id belongs to a valid wire in this superlayer.
MayBePtr< const CDCWire > getSecondNeighborThreeOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the three o'clock position.
MayBePtr< const CDCWire > getNeighborCWOutwards(ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards by wire id and layer id with in ...
MayBePtr< const CDCWire > getSecondNeighborFiveOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the five o'clock position.
MayBePtr< const CDCWire > getSecondNeighborTwelveOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the twelve o'clock position.
MayBePtr< const CDCWire > getNeighborCW(ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor by wire id and layer id with in this superlayer.
const CDCWireLayer & getWireLayer(ILayer iLayer) const
Gives the layer by its layer id within the superlayer.
MayBePtr< const CDCWire > getSecondNeighborElevenOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the elven o'clock position.
bool isValidILayer(ILayer iLayer) const
Checks if the given layer id belongs to a valid layer in this superlayer.
MayBePtr< const CDCWire > getSecondNeighborSixOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the six o'clock position.
MayBePtr< const CDCWire > getSecondNeighborOneOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the one o'clock position.
MayBePtr< const CDCWire > getSecondNeighborEightOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the eight o'clock position.
MayBePtr< const CDCWire > getSecondNeighborNineOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the nine o'clock position.
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection, ILayer iLayer, IWire iWire) const
getSecondaryNeighbor Secondary neighborhood The secondary neighbors are numbered like positions on th...
MayBePtr< const CDCWire > getSecondNeighborSevenOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the seven o'clock position.
WireNeighborPair getNeighborsInwards(ILayer iLayer, IWire iWire) const
Getter for the two closest neighbors in the layer inwards of the given on.
MayBePtr< const CDCWire > getSecondNeighborTenOClock(ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the ten o'clock position.
Class representating the sense wire arrangement in the whole of the central drift chamber.
MayBePtr< const CDCWire > getNeighborCCW(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest counterclockwise neighbor.
const CDCWire & getWire(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for wire getter by superlayer id, layer id and wire id.
MayBePtr< const CDCWire > getSecondNeighborFiveOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the five o'clock position.
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection, const WireID &wireID) const
Getter for the secondary neighbor of the given wire id.
const std::vector< Belle2::TrackFindingCDC::CDCWire > & getWires() const
Getter for the underlying storing wire vector.
static const ISuperLayer c_NSuperLayers
Total number of superlayers.
std::vector< Belle2::TrackFindingCDC::CDCWire > m_wires
Storage for all wires in the CDC.
MayBePtr< const CDCWire > getSecondNeighborTwelveOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the twelve o'clock position.
MayBePtr< const CDCWire > getSecondNeighborTwoOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the two o'clock position.
WireNeighborKind getNeighborKind(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are closest neighbors.
MayBePtr< const CDCWire > getNeighborCWOutwards(const WireID &wireID) const
Getter for the nearest clockwise neighbor in the next layer outwards.
void initialize()
Create all wires, wire layers and wire superlayers and their interdependences with base geometry from...
MayBePtr< const CDCWire > getSecondNeighborSixOClock(const WireID &wireID) const
Getter for secondary neighbor at the six o'clock position.
CDCWireTopology(const CDCWireTopology &wireTopology)=delete
Disallow copy construction of the wire topology.
MayBePtr< const CDCWire > getSecondNeighborSixOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the six o'clock position.
bool arePrimaryNeighbors(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are primary neighbors.
static const ILayer c_NLayers
Total number of layers.
const CDCWireLayer & getWireLayer(const WireID &wireId) const
Getter for wire layer getter by wireID object.
MayBePtr< const CDCWire > getSecondNeighborNineOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the nine o'clock position - always exists.
MayBePtr< const CDCWire > getSecondNeighborFourOClock(const WireID &wireID) const
Getter for secondary neighbor at the four o'clock position.
MayBePtr< const CDCWire > getNeighborCWInwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards.
const std::vector< Belle2::TrackFindingCDC::CDCWireSuperLayer > & getWireSuperLayers() const
Getter for the underlying storing superlayer vector.
MayBePtr< const CDCWire > getNeighborCCW(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor.
WireNeighborPair getNeighborsOutwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the two closest neighbors in the layer outwards.
MayBePtr< const CDCWire > getNeighborCCWInwards(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection, ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the secondary neighbor of the given wire id following the direction on the clock.
ISuperLayer getISuperLayerAtCylindricalR(double cylindricalR)
Returns the logical superlayer number at the given radius.
MayBePtr< const CDCWire > getSecondNeighborFourOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the four o'clock position.
ISuperLayer getNSuperLayers() const
Getter for the total number of superlayers.
MayBePtr< const CDCWire > getSecondNeighborTwelveOClock(const WireID &wireID) const
Getter for secondary neighbor at the twelve o'clock position.
MayBePtr< const CDCWire > getNeighborCWOutwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor in the next layer outwards.
const CDCWireLayer & getWireLayer(ISuperLayer iSuperLayer, ILayer iLayer) const
Getter for wire layer getter by superlayer id and layer id.
WireNeighborPair getNeighborsOutwards(const WireID &wireID) const
Getter for the two closest neighbors in the layer outwards.
MayBePtr< const CDCWire > getSecondNeighborNineOClock(const WireID &wireID) const
Getter for secondary neighbor at the nine o'clock position - always exists.
WireNeighborPair getNeighborsInwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the two closest neighbors in the layer inwards.
std::vector< Belle2::TrackFindingCDC::CDCWireLayer > m_wireLayers
Storage for all wire layers in the CDC.
double getInnerCylindricalR() const
Getter for the inner radius of the inner most wire layer.
MayBePtr< const CDCWire > getSecondNeighborTenOClock(const WireID &wireID) const
Getter for secondary neighbor at the ten o'clock position.
void reinitialize(EWirePosition wirePosition, bool ignoreWireSag)
Reload all geometry parameters form the CDCGeometryPar to adjust to changes in geometry.
const CDCWire & getWire(ILayer iCLayer, IWire iWire) const
Getter for wire getter by continuous layer id and wire id.
MayBePtr< const CDCWire > getNeighborCCWOutwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getSecondNeighborFiveOClock(const WireID &wireID) const
Getter for secondary neighbor at the five o'clock position.
MayBePtr< const CDCWire > getNeighborCW(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest clockwise neighbor.
MayBePtr< const CDCWire > getSecondNeighborEightOClock(const WireID &wireID) const
Getter for secondary neighbor at the eight o'clock position.
bool areSeconaryNeighbors(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are secondary neighbors.
MayBePtr< const CDCWire > getPrimaryNeighbor(short oClockDirection, ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the primary neighbor of the given wire id following the direction on the clock.
MayBePtr< const CDCWire > getPrimaryNeighbor(short oClockDirection, const WireID &wireID) const
Getter for the primary neighbor of the given wire id.
CDCWireTopology()
Default constructor for ROOT compatibility. Use rather getInstance to get the shared singleton instan...
MayBePtr< const CDCWire > getSecondNeighborElevenOClock(const WireID &wireID) const
Getter for secondary neighbor at the eleven o'clock position.
MayBePtr< const CDCWire > getNeighborCWInwards(const WireID &wireID) const
Getter for the nearest clockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getSecondNeighborSevenOClock(const WireID &wireID) const
Getter for secondary neighbor at the seven o'clock position.
bool isValidIWire(ILayer iCLayer, IWire iWire) const
Checks the validity of the continuous layer id, wire id combination.
MayBePtr< const CDCWire > getNeighborCCWInwards(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getSecondNeighborElevenOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the eleven o'clock position.
bool isValidICLayer(ILayer iCLayer) const
Checks the validity of the continuous layer id.
MayBePtr< const CDCWire > getSecondNeighborThreeOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the three o'clock position - always exists.
const CDCWireSuperLayer & getWireSuperLayer(const WireID &wireID) const
Getter for wire superlayer getter by wireID object.
MayBePtr< const CDCWire > getSecondNeighborTwoOClock(const WireID &wireID) const
Getter for secondary neighbor at the two o'clock position.
MayBePtr< const CDCWire > getSecondNeighborOneOClock(const WireID &wireID) const
Getter for secondary neighbor at the one o'clock position.
bool isValidILayer(ISuperLayer iSuperLayer, ILayer iLayer) const
Checks the validity of the superlayer id, layer id combination.
static CDCWireTopology & getInstance()
Getter for the singleton instance of the wire topology.
ILayer m_FirstLayerOffset
Offset of first layer.
MayBePtr< const CDCWire > getSecondNeighborOneOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the one o'clock position.
bool isValidWireID(const WireID &wireID) const
Checks the validity of a wireID convinience object.
ILayer getNLayers() const
Getter for the total number of wire layers.
const CDCWireSuperLayer & getWireSuperLayer(ISuperLayer iSuperLayer) const
Getter for wire superlayer getter by superlayer id.
MayBePtr< const CDCWire > getNeighborCCWOutwards(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getSecondNeighborTenOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the ten o'clock position.
double getOuterCylindricalR() const
Getter for the outer radius of the outer most wire layer.
bool isValidIWire(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Checks the validity of the superlayer id, layer id, wire id combination.
static const IWire c_NWires
Total number of wires.
void operator=(const CDCWireTopology &wireTopology)=delete
Disallow copy assignment of the wire topology.
bool isValidISuperLayer(ISuperLayer iSuperLayer) const
Checks the validity of the superlayer id.
const CDCWireLayer & getWireLayer(ILayer iCLayer) const
Getter for wire layer getter by continuous layer id.
std::vector< Belle2::TrackFindingCDC::CDCWireSuperLayer > m_wireSuperLayers
Storage for all wire superlayers in the CDC.
const CDCWire & getWire(const WireID &wireId) const
Getter for wire getter by wireID object.
WireNeighborPair getNeighborsInwards(const WireID &wireID) const
Getter for the two closest neighbors in the layer inwards.
MayBePtr< const CDCWire > getSecondNeighborEightOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the eight o'clock position.
const std::vector< Belle2::TrackFindingCDC::CDCWireLayer > & getWireLayers() const
Getter for the underlying storing layer vector.
MayBePtr< const CDCWire > getSecondNeighborThreeOClock(const WireID &wireID) const
Getter for secondary neighbor at the three o'clock position - always exists.
MayBePtr< const CDCWire > getSecondNeighborSevenOClock(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire) const
Getter for secondary neighbor at the seven o'clock position.
MayBePtr< const CDCWire > getNeighborCW(const WireID &wireID) const
Getter for the nearest clockwise neighbor.
Class representing a sense wire in the central drift chamber.
Definition: CDCWire.h:58
Type for the neighbor relationship from one wire to another.
short getCellDistance() const
Get the distance to the wire neighbor counted in number of cells.
Class representing a pair of neighbors in the CDC in a single layer For certain circumstances it is a...
Class to identify a wire inside the CDC.
Definition: WireID.h:34
unsigned short getICLayer() const
Getter for continuous layer numbering.
Definition: WireID.cc:24
unsigned short getIWire() const
Getter for wire within the layer.
Definition: WireID.h:145
unsigned short getISuperLayer() const
Getter for Super-Layer.
Definition: WireID.h:130
unsigned short getILayer() const
Getter for layer within the Super-Layer.
Definition: WireID.h:136
Abstract base class for different kinds of events.