25 float beamPositionVariance,
33 const float referenceCoordinate = disk ? sourceMeasurement.
z : sourceMeasurement.
radius;
34 const float referenceOrigin = disk ?
vertex.getZ() : 0.f;
35 const float projectedCoordinate = disk ? sourceMeasurement.
radius : sourceMeasurement.
z;
36 const float projectedOrigin = disk ? 0.f :
vertex.getZ();
39 const float referenceDelta = referenceCoordinate - referenceOrigin;
40 const float projectedDelta = projectedCoordinate - projectedOrigin;
41 if (!(targetMin <= targetMax) ||
47 const float slope = projectedDelta / referenceDelta;
48 const float targetCoordinate = 0.5f * (targetMin + targetMax);
49 const float referenceToTarget = targetCoordinate - referenceCoordinate;
50 const float prediction = projectedCoordinate +
slope * referenceToTarget;
51 if (disk && !(prediction > 0.f)) {
56 const float referenceOriginVariance = disk ?
vertex.getSigmaZ2() : beamPositionVariance;
57 const float projectedOriginVariance = disk ? beamPositionVariance :
vertex.getSigmaZ2();
58 const float inverseReferenceDelta = 1.f / referenceDelta;
59 const float sourceVarianceScale = (1.f + o2::its::math_utils::Sq(
slope)) * sourceCoordinateVariance;
60 const float originVarianceScale = projectedOriginVariance + o2::its::math_utils::Sq(
slope) * referenceOriginVariance;
61 const float edgeMSVarianceScale = o2::its::math_utils::Sq(edgeCache.
edgeMSAngle);
62 const float varianceConstant = sourceVarianceScale;
63 const float varianceLinear = 2.f * inverseReferenceDelta * sourceVarianceScale;
64 const float varianceQuadratic = o2::its::math_utils::Sq(inverseReferenceDelta) *
65 (sourceVarianceScale + originVarianceScale) +
67 const float minDelta = targetMin - referenceCoordinate;
68 const float minPrediction = projectedCoordinate +
slope * minDelta;
69 const float minVariance = varianceConstant + minDelta * (varianceLinear + minDelta * varianceQuadratic);
70 const float maxDelta = targetMax - referenceCoordinate;
71 const float maxPrediction = projectedCoordinate +
slope * maxDelta;
72 const float maxVariance = varianceConstant + maxDelta * (varianceLinear + maxDelta * varianceQuadratic);
73 const float lowerBound = o2::gpu::CAMath::Min(minPrediction - nSigmaCut * o2::gpu::CAMath::Sqrt(minVariance),
74 maxPrediction - nSigmaCut * o2::gpu::CAMath::Sqrt(maxVariance));
75 const float upperBound = o2::gpu::CAMath::Max(minPrediction + nSigmaCut * o2::gpu::CAMath::Sqrt(minVariance),
76 maxPrediction + nSigmaCut * o2::gpu::CAMath::Sqrt(maxVariance));
77 const float searchPrediction = 0.5f * (lowerBound + upperBound);
78 const float searchHalfWidth = 0.5f * (upperBound - lowerBound);
80 const auto bins = o2::itsmft::getBinsPhiColumn(sourceMeasurement.
phi, edgeCache.
toLayer,
81 searchPrediction, searchHalfWidth,
93 sourceMeasurement.
phi,
94 o2::its::math_utils::Sq(edgeCache.
edgePhiCut / nSigmaCut)};
bool projectTrackletSearchWindow(const GlobalMeasurement &sourceMeasurement, const o2::its::Vertex &vertex, float beamPositionVariance, SurfaceKind kind, const TrackletProjectionCache &edgeCache, const o2::itsmft::IndexTableUtilsCore &indexUtils, float nSigmaCut, TrackletSearchWindow &out)