Belle II Software development
CDCWire.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 <tracking/trackFindingCDC/topology/CDCWire.h>
10
11#include <tracking/trackFindingCDC/topology/CDCWireTopology.h>
12#include <tracking/trackFindingCDC/topology/CDCWireSuperLayer.h>
13#include <tracking/trackFindingCDC/topology/CDCWireLayer.h>
14
15#include <tracking/trackFindingCDC/topology/EWirePositionToCDC.h>
16#include <tracking/trackFindingCDC/topology/EWirePosition.h>
17
18#include <cdc/geometry/CDCGeometryPar.h>
19#include <cdc/dataobjects/CDCHit.h>
20
21using namespace Belle2;
22using namespace TrackFindingCDC;
23
24const CDCWire* CDCWire::getInstance(const WireID& wireID)
25{
26 return &(CDCWireTopology::getInstance().getWire(wireID));
27}
28
29const CDCWire* CDCWire::getInstance(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire)
30{
31 return &(CDCWireTopology::getInstance().getWire(iSuperLayer, iLayer, iWire));
32}
33
35{
36 if (not CDCWireTopology::getInstance().isValidWireID(WireID(hit.getID()))) {
37 WireID wireID(hit.getID());
38 B2ERROR("Invalid encoded wire id of cdc hit " << wireID);
39 B2ERROR("Superlayer id: " << wireID.getISuperLayer());
40 B2ERROR("Layer cid: " << wireID.getICLayer());
41 B2ERROR("Layer id: " << wireID.getILayer());
42 B2ERROR("Wire id: " << wireID.getIWire());
43 B2FATAL("Do not continue with wrong wire id");
44 return nullptr;
45 }
46
47 const CDCWire& wire = CDCWireTopology::getInstance().getWire(WireID(hit.getID()));
48
49 if (wire.getEWire() != hit.getID()) {
50 B2ERROR("WireID.getEWire() differs from CDCHit.getID()");
51 B2ERROR("WireID.getEWire() : " << wire.getEWire());
52 B2ERROR("CDCHit.getEWire() : " << hit.getID());
53 }
54 return &wire;
55}
56
58 : m_wireID(wireID)
59{
60 EWirePosition wirePosition = EWirePosition::c_Base;
61 initialize(wirePosition, false);
62}
63
64CDCWire::CDCWire(ISuperLayer iSuperLayer, ILayer iLayer, IWire iWire)
65 : CDCWire(WireID(iSuperLayer, iLayer, iWire))
66{
67}
68
69void CDCWire::initialize(EWirePosition wirePosition, bool ignoreWireSag)
70{
72 CDC::CDCGeometryPar::EWirePosition wirePosSet = toCDC(wirePosition);
73
74 IWire iWire = getIWire();
75 ILayer iCLayer = getICLayer();
76
77 Vector3D forwardPos{cdcgp.wireForwardPosition(iCLayer, iWire, wirePosSet)};
78 Vector3D backwardPos{cdcgp.wireBackwardPosition(iCLayer, iWire, wirePosSet)};
79 double sagCoeff = ignoreWireSag ? 0 : cdcgp.getWireSagCoef(wirePosSet, iCLayer, iWire);
80
81 m_wireLine = WireLine(forwardPos, backwardPos, sagCoeff);
83
85 if (not isAxial() and (m_wireLine.tanTheta() == 0)) {
86 B2WARNING("Odd wire " << *this);
87 B2WARNING("wireForwardPosition " << forwardPos);
88 B2WARNING("wireBackwardPosition " << backwardPos);
89 B2WARNING("forward " << m_wireLine.forward3D());
90 B2WARNING("backward " << m_wireLine.backward3D());
91 B2WARNING("ref " << m_wireLine.refPos3D());
92 B2WARNING("tan theta " << m_wireLine.tanTheta());
93 }
94}
95
96bool CDCWire::isInCell(const Vector3D& pos3D) const
97{
98 bool inZ = getBackwardZ() < pos3D.z() and pos3D.z() < getForwardZ();
99 if (not inZ) return false;
100
101 ILayer iCLayer = getICLayer();
102 const CDCWireLayer& wireLayer = getWireLayer();
103 double innerCylindricalR = wireLayer.getInnerCylindricalR();
104 double outerCylindricalR = wireLayer.getOuterCylindricalR();
105 double cylindricalR = pos3D.cylindricalR();
106
107 bool inCylindricalR = innerCylindricalR < cylindricalR and cylindricalR < outerCylindricalR;
108 if (not inCylindricalR) return false;
109
110 IWire iWire = CDC::CDCGeometryPar::Instance().cellId(iCLayer, pos3D);
111 // Safety measure against error in the cellId function
112 iWire %= wireLayer.size();
113 bool inPhi = iWire == getIWire();
114 return inPhi;
115}
116
118{
120}
121
123{
125}
126
128{
129 ILayer iCLayer = getICLayer();
131}
132
134{
135 ISuperLayer iSuperLayer = getISuperLayer();
137}
138
143
148
153
158
159MayBePtr<const CDCWire> CDCWire::getNeighborCCW() const
160{
162}
163
164MayBePtr<const CDCWire> CDCWire::getNeighborCW() const
165{
167}
168
169MayBePtr<const CDCWire> CDCWire::getNeighborCCWInwards() const
170{
172}
173
174MayBePtr<const CDCWire> CDCWire::getNeighborCWInwards() const
175{
177}
178
179MayBePtr<const CDCWire> CDCWire::getNeighborCCWOutwards() const
180{
182}
183
184MayBePtr<const CDCWire> CDCWire::getNeighborCWOutwards() const
185{
187}
188
189MayBePtr<const CDCWire> CDCWire::getSecondaryNeighbor(short oClockDirection) const
190{
192}
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Definition CDCHit.h:40
The Class for CDC Geometry Parameters.
EWirePosition
Wire position set.
unsigned cellId(unsigned layerId, const B2Vector3D &position) const
The method to get cell id based on given layer id and the position.
const B2Vector3D wireForwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the forward position of the input sense wire.
const B2Vector3D wireBackwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the backward position of the input sense wire.
double getWireSagCoef(EWirePosition set, uint layerId, int cellId) const
Returns coefficient for the sense wire sag.
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
Class representing a sense wire layer in the central drift chamber.
double getInnerCylindricalR() const
Getter for inner radius of the layer as taken from the CDCGeometryPar.
double getLateralCellWidth() const
Getter for the width of the wire layer in the lateral direction.
double getOuterCylindricalR() const
Getter for outer radius of the layer as taken from the CDCGeometryPar.
double getRadialCellWidth() const
Getter for the width of the wire layer in the radial direction.
Class representing a sense wire superlayer in the central drift chamber.
MayBePtr< const CDCWire > getNeighborCCWInwards(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
const CDCWire & getWire(const WireID &wireId) const
Getter for wire getter by wireID object.
WireNeighborKind getNeighborKind(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are closest neighbors.
bool arePrimaryNeighbors(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are primary neighbors.
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection, const WireID &wireID) const
Getter for the secondary neighbor of the given wire id.
MayBePtr< const CDCWire > getNeighborCCWOutwards(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor in the next layer outwards.
const CDCWireSuperLayer & getWireSuperLayer(const WireID &wireID) const
Getter for wire superlayer getter by wireID object.
WireNeighborPair getNeighborsOutwards(const WireID &wireID) const
Getter for the two closest neighbors in the layer outwards.
MayBePtr< const CDCWire > getNeighborCWInwards(const WireID &wireID) const
Getter for the nearest clockwise neighbor in the next layer outwards.
MayBePtr< const CDCWire > getNeighborCCW(const WireID &wireID) const
Getter for the nearest counterclockwise neighbor.
MayBePtr< const CDCWire > getNeighborCWOutwards(const WireID &wireID) const
Getter for the nearest clockwise neighbor in the next layer outwards.
const CDCWireLayer & getWireLayer(const WireID &wireId) const
Getter for wire layer getter by wireID object.
static CDCWireTopology & getInstance()
Getter for the singleton instance of the wire topology.
MayBePtr< const CDCWire > getNeighborCW(const WireID &wireID) const
Getter for the nearest clockwise neighbor.
WireNeighborPair getNeighborsInwards(const WireID &wireID) const
Getter for the two closest neighbors in the layer inwards.
CDCWire(const WireID &wireID)
Constructor taking the combined wire id convenience object.
Definition CDCWire.cc:57
ISuperLayer getISuperLayer() const
Gives the superlayer id ranging from 0 - 8.
Definition CDCWire.h:163
MayBePtr< const CDCWire > getNeighborCWOutwards() const
Gives the closest neighbor in the clockwise outwards direction This does not cross superlayer boundar...
Definition CDCWire.cc:184
WireNeighborKind getNeighborKind(const CDCWire &wire) const
Returns gives the kind of neighborhood relation from this wire to the given wire.
Definition CDCWire.cc:139
bool isInCell(const Vector3D &pos3D) const
Checks whether the position is in the drift cell surrounding the wire.
Definition CDCWire.cc:96
WireLine m_wireLine
The line representation of the wire.
Definition CDCWire.h:413
const WireID & getWireID() const
Getter for the wire id.
Definition CDCWire.h:122
bool isAxial() const
Indicates if the wire is axial or stereo.
Definition CDCWire.h:174
MayBePtr< const CDCWire > getNeighborCCWOutwards() const
Gives the closest neighbor in the countclockwise outwards direction This does not cross superlayer bo...
Definition CDCWire.cc:179
MayBePtr< const CDCWire > getNeighborCCW() const
Gives the closest neighbor in the counterclockwise direction - always exists.
Definition CDCWire.cc:159
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection) const
Getter for the secondary neighbors of this wire id following the direction on the clock.
Definition CDCWire.cc:189
double getForwardZ() const
Getter for the z coordinate at the forward joint points of the wires.
Definition CDCWire.h:276
WireNeighborPair getNeighborsOutwards() const
Gives the two wires in the next layer outward.
Definition CDCWire.cc:154
IWire getIWire() const
Getter for the wire id within its layer.
Definition CDCWire.h:146
bool isPrimaryNeighborWith(const CDCWire &wire) const
Returns whether the give wire is a neighbor of this wire.
Definition CDCWire.cc:144
void initialize(EWirePosition wirePosition, bool ignoreWireSag)
(Re)load all geometry parameters form the CDCGeometryPar to adjust to changes in geometry.
Definition CDCWire.cc:69
unsigned short getEWire() const
Getter for the encoded wire number.
Definition CDCWire.h:131
static const CDCWire * getInstance(const WireID &wireID)
Getter from the wireID convenience object. Does not construct a new object.
Definition CDCWire.cc:24
ILayer getICLayer() const
Getter for the continuous layer id ranging from 0 - 55.
Definition CDCWire.h:150
WireID m_wireID
The wireID of the wire.
Definition CDCWire.h:410
MayBePtr< const CDCWire > getNeighborCWInwards() const
Gives the closest neighbor in the clockwise inwards direction This does not cross superlayer boundari...
Definition CDCWire.cc:174
MayBePtr< const CDCWire > getNeighborCW() const
Gives the closest neighbor in the clockwise direction - always exists.
Definition CDCWire.cc:164
const Vector2D & getRefPos2D() const
Getter for the wire reference position for 2D tracking Gives the wire's reference position projected ...
Definition CDCWire.h:229
const CDCWireLayer & getWireLayer() const
Getter for the wire layer.
Definition CDCWire.cc:127
double getLateralCellWidth() const
Getter for the cell widths in lateral direction.
Definition CDCWire.cc:122
MayBePtr< const CDCWire > getNeighborCCWInwards() const
Gives the closest neighbor in the countclockwise inwards direction This does not cross superlayer bou...
Definition CDCWire.cc:169
double m_refCylindricalR
Precomputed distance to the beam line at the reference position.
Definition CDCWire.h:416
WireNeighborPair getNeighborsInwards() const
Gives the two wires in the next layer inward.
Definition CDCWire.cc:149
const CDCWireSuperLayer & getWireSuperLayer() const
Getter for the wire super layer.
Definition CDCWire.cc:133
double getBackwardZ() const
Getter for the z coordinate at the backward joint points of the wires.
Definition CDCWire.h:280
double getRadialCellWidth() const
Getter for the cell widths in radial direction.
Definition CDCWire.cc:117
std::size_t size() const
Returns the total number of objects in this range.
Definition Range.h:76
double norm() const
Calculates the length of the vector.
Definition Vector2D.h:175
A three dimensional vector.
Definition Vector3D.h:33
double cylindricalR() const
Getter for the cylindrical radius ( xy projected norm )
Definition Vector3D.h:534
double z() const
Getter for the z coordinate.
Definition Vector3D.h:496
A three dimensional limited line represented by its closest approach to the z-axes (reference positio...
Definition WireLine.h:31
Type for the neighbor relationship from one wire to another.
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.