57 static GPUhdi() int getEffectiveTrackLength(LayerMask hitLayerMask, LayerMask excludedLayerMask)
59 if (hitLayerMask.empty()) {
62 return hitLayerMask.length() - (LayerMask::span(hitLayerMask.first(), hitLayerMask.last()) & excludedLayerMask).
count();
65 static GPUhdi() LayerMask getEffectiveHoleMask(LayerMask hitLayerMask, LayerMask excludedLayerMask)
67 return hitLayerMask.holeMask() & ~excludedLayerMask;
70 GPUhd() bool operator()(const TrackSeed<NLayers>&
seed)
const
72 const auto hitLayerMask =
seed.getHitLayerMask();
113 o2::gpu::CAMath::SinCos(tf3.alphaTrackingFrame, sa, ca);
114 const float sign =
reverse ? -1.f : 1.f;
115 const float x1 = (cluster1.xCoordinate * ca) + (cluster1.yCoordinate * sa);
116 const float y1 = (-cluster1.xCoordinate * sa) + (cluster1.yCoordinate * ca);
117 const float x2 = (cluster2.xCoordinate * ca) + (cluster2.yCoordinate * sa);
118 const float y2 = (-cluster2.xCoordinate * sa) + (cluster2.yCoordinate * ca);
119 const float x3 = tf3.xTrackingFrame;
120 const float y3 = tf3.positionTrackingFrame[0];
121 if (o2::gpu::CAMath::Abs(
bz) < 0.01f) {
122 const float dx = x3 -
x1;
123 const float dy = y3 -
y1;
124 snp = sign * dy / o2::gpu::CAMath::Hypot(dx, dy);
128 const float crv = math_utils::computeCurvature(x3, y3, x2, y2,
x1,
y1);
129 snp = sign * crv * (x3 - math_utils::computeCurvatureCentreX(x3, y3, x2, y2,
x1,
y1));
130 q2pt = sign * crv / (
bz * o2::constants::math::B2C);
133 const float tgl = -0.5f * sign * (math_utils::computeTanDipAngle(
x1,
y1, x2, y2, cluster1.zCoordinate, cluster2.zCoordinate) + math_utils::computeTanDipAngle(x2, y2, x3, y3, cluster2.zCoordinate, tf3.positionTrackingFrame[1]));
135 return {x3, tf3.alphaTrackingFrame, {y3, tf3.positionTrackingFrame[1], snp, tgl, q2pt}, {tf3.covarianceTrackingFrame[0], tf3.covarianceTrackingFrame[1], tf3.covarianceTrackingFrame[2], 0.f, 0.f,
o2::track::kCSnp2max, 0.f, 0.f, 0.f,
o2::track::kCTgl2max, 0.f, 0.f, 0.f, 0.f, sg2q2pt}};
265 bool fitSuccess = fitTrack(track, track.paramIn, 0,
ctx.nLayers, 1,