From 796c38d6478c60348079a7d578da45e6e10a128f Mon Sep 17 00:00:00 2001
From: Carlo Varni <75478407+CarloVarni@users.noreply.github.com>
Date: Wed, 16 Oct 2024 11:05:16 +0200
Subject: [PATCH] docs: Add comment on computation of impact parameter from the
doublet (#3728)
One of the criterion used in doublet finding relies on computing the minimal distance between the origin and the straight line connecting the two points of the doublet. This distance is compared against a maximum impact parameter (`impactMax`) provided by the user.
Let's consider for instance the middle-top doublet search.
In the attached image:
- `A` is the origin
- `B` is the middle space point, thus `AB = rM` (radius of middle space point)
- `C` is the top space point
What the code does is to compute `BD` (`xNewFrame` in the code) and `CD` (`yNewFrame` in the code) and then a simple geometric similarity to compute the impact parameter.
The code currently does: `Im / CD = AB / BD`, where `Im` is the impact parameter we are trying to compute. Thus `Im = (AB * CD) / BD <= impactMax`. Unfortunately `Im` is equal to `AF`, while we really want to compute `AE`. The proper computation would be `Im / CD = AB / BC`, which leads to `Im = (AB * CD) / BC <= impactMax`. In this case `Im = AE`.
However, `BC` has to be computed from `CD` and `BD`. In order to avoid square roots I'm using square quantities.
It is also possible that the code assumes that the `alpha` angle is too small to make a difference and thus uses an approximation... But there are no comments in the code about this
---
Core/include/Acts/Seeding/SeedFinder.ipp | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/Core/include/Acts/Seeding/SeedFinder.ipp b/Core/include/Acts/Seeding/SeedFinder.ipp
index 2896fba925f9..45b95ec05d56 100644
--- a/Core/include/Acts/Seeding/SeedFinder.ipp
+++ b/Core/include/Acts/Seeding/SeedFinder.ipp
@@ -368,8 +368,15 @@ SeedFinder::getCompatibleDoublets(
const float uT = xNewFrame * iDeltaR2;
const float vT = yNewFrame * iDeltaR2;
- // interactionPointCut == true we apply this cut first cuts before
- // coordinate transformation to avoid unnecessary calculations
+ // We check the interaction point by evaluating the minimal distance
+ // between the origin and the straight line connecting the two points in
+ // the doublets. Using a geometric similarity, the Im is given by
+ // yNewFrame * rM / deltaR <= m_config.impactMax
+ // However, we make here an approximation of the impact parameter
+ // which is valid under the assumption yNewFrame / xNewFrame is small
+ // The correct computation would be:
+ // yNewFrame * yNewFrame * rM * rM <= m_config.impactMax *
+ // m_config.impactMax * deltaR2
if (std::abs(rM * yNewFrame) <= impactMax * xNewFrame) {
// check if duplet cotTheta is within the region of interest
// cotTheta is defined as (deltaZ / deltaR) but instead we multiply