10 #include <tracking/trackFindingCDC/topology/CDCWireSuperLayer.h>
12 #include <tracking/trackFindingCDC/numerics/Modulo.h>
15 using namespace TrackFindingCDC;
33 IWire iOtherWire)
const
38 const ILayer iLayerDifference = iOtherLayer - iLayer;
39 const ILayer absILayerDifference = abs(iLayerDifference);
43 const IWire nWires = layer.size();
46 int iOtherRow = 2 * iOtherWire + deltaShift;
47 int iRowDelta = symmetricModuloFast(iOtherRow - iRow, 2 * nWires);
48 int absIRowDelta = abs(iRowDelta);
50 if ((absILayerDifference + absIRowDelta) > 4 or absILayerDifference > 2)
return WireNeighborKind();
53 int cellDistance = absILayerDifference == 2 ? 2 : (absILayerDifference + absIRowDelta) / 2;
58 }
else if (iLayerDifference == 0) {
60 }
else if (absIRowDelta == 3) {
70 if (iLayerDifference > 0) {
74 int oClockDirection = moduloFast(slope + 3 , 12);
86 if (deltaShift == ERotation::c_CounterClockwise) {
89 }
else if (deltaShift == ERotation::c_Clockwise) {
93 B2WARNING(
"Wire numbering shift bigger than one in magnitude. Adjust getNeighbor functions " <<
static_cast<int>(deltaShift));
94 B2WARNING(
"From iLayer " << iLayer <<
" and wire " << iWire <<
" to iLayer " << iLayer - 1);
108 if (deltaShift == ERotation::c_CounterClockwise) {
111 }
else if (deltaShift == ERotation::c_Clockwise) {
115 B2WARNING(
"Wire numbering shift bigger than one in magnitude. Adjust getNeighbor functions " <<
static_cast<int>(deltaShift));
116 B2WARNING(
"From iLayer " << iLayer <<
" and wire " << iWire <<
" to iLayer " << iLayer + 1);