diff --git a/Core/include/Acts/Seeding/SeedFilter.ipp b/Core/include/Acts/Seeding/SeedFilter.ipp index b9e2e431c1c..9bbcd7bd1c2 100644 --- a/Core/include/Acts/Seeding/SeedFilter.ipp +++ b/Core/include/Acts/Seeding/SeedFilter.ipp @@ -159,7 +159,8 @@ void SeedFilter::filterSeeds_2SpFixed( } // term on the weight that depends on the value of zOrigin - weight += -std::abs(zOrigin) + m_cfg.compatSeedWeight; + weight += -(std::abs(zOrigin) * m_cfg.zOriginWeightFactor) + + m_cfg.compatSeedWeight; // skip a bad quality seed if any of its constituents has a weight larger // than the seed weight diff --git a/Core/include/Acts/Seeding/SeedFilterConfig.hpp b/Core/include/Acts/Seeding/SeedFilterConfig.hpp index 5812b7c2915..50dffe794eb 100644 --- a/Core/include/Acts/Seeding/SeedFilterConfig.hpp +++ b/Core/include/Acts/Seeding/SeedFilterConfig.hpp @@ -19,9 +19,12 @@ struct SeedFilterConfig { // the allowed delta between two inverted seed radii for them to be considered // compatible. float deltaInvHelixDiameter = 0.00003 * 1. / Acts::UnitConstants::mm; - // the impact parameters (d0) is multiplied by this factor and subtracted from - // weight + // the transverse impact parameters (d0) is multiplied by this factor and + // subtracted from weight float impactWeightFactor = 1.; + // the logitudinal impact parameters (z0) is multiplied by this factor and + // subtracted from weight + float zOriginWeightFactor = 1.; // seed weight increased by this value if a compatible seed has been found. float compatSeedWeight = 200.; // minimum distance between compatible seeds to be considered for weight boost diff --git a/Examples/Python/python/acts/examples/itk.py b/Examples/Python/python/acts/examples/itk.py index 9033810c109..8dcb8fb0123 100644 --- a/Examples/Python/python/acts/examples/itk.py +++ b/Examples/Python/python/acts/examples/itk.py @@ -328,6 +328,7 @@ def itkSeedingAlgConfig(inputSpacePointsType): seedConfMaxZOrigin=150.0 * u.mm, minImpactSeedConf=1.0 * u.mm, ) + zOriginWeightFactor = 1 compatSeedWeight = 100 curvatureSortingInFilter = True phiMin = 0 @@ -487,6 +488,7 @@ def itkSeedingAlgConfig(inputSpacePointsType): ) seedFilterConfigArg = SeedFilterConfigArg( impactWeightFactor=impactWeightFactor, + zOriginWeightFactor=zOriginWeightFactor, compatSeedWeight=compatSeedWeight, compatSeedLimit=compatSeedLimit, numSeedIncrement=numSeedIncrement, diff --git a/Examples/Python/python/acts/examples/reconstruction.py b/Examples/Python/python/acts/examples/reconstruction.py index 7e853610f16..20288e5f3c8 100644 --- a/Examples/Python/python/acts/examples/reconstruction.py +++ b/Examples/Python/python/acts/examples/reconstruction.py @@ -65,6 +65,7 @@ "SeedFilterConfig", [ "impactWeightFactor", + "zOriginWeightFactor", "compatSeedWeight", "compatSeedLimit", "numSeedIncrement", @@ -76,7 +77,7 @@ "useDeltaRorTopRadius", "deltaRMin", ], - defaults=[None] * 11, + defaults=[None] * 12, ) SpacePointGridConfigArg = namedtuple( @@ -364,6 +365,7 @@ def addSeeding( else seedFilterConfigArg.deltaRMin ), impactWeightFactor=seedFilterConfigArg.impactWeightFactor, + zOriginWeightFactor=seedFilterConfigArg.zOriginWeightFactor, compatSeedWeight=seedFilterConfigArg.compatSeedWeight, compatSeedLimit=seedFilterConfigArg.compatSeedLimit, numSeedIncrement=seedFilterConfigArg.numSeedIncrement, @@ -486,6 +488,7 @@ def addSeeding( else seedFilterConfigArg.deltaRMin ), impactWeightFactor=seedFilterConfigArg.impactWeightFactor, + zOriginWeightFactor=seedFilterConfigArg.zOriginWeightFactor, compatSeedWeight=seedFilterConfigArg.compatSeedWeight, compatSeedLimit=seedFilterConfigArg.compatSeedLimit, numSeedIncrement=seedFilterConfigArg.numSeedIncrement, diff --git a/Examples/Python/src/TrackFinding.cpp b/Examples/Python/src/TrackFinding.cpp index cd1888f065c..36bba38d326 100644 --- a/Examples/Python/src/TrackFinding.cpp +++ b/Examples/Python/src/TrackFinding.cpp @@ -43,6 +43,7 @@ void addTrackFinding(Context& ctx) { ACTS_PYTHON_STRUCT_BEGIN(c, Config); ACTS_PYTHON_MEMBER(deltaInvHelixDiameter); ACTS_PYTHON_MEMBER(impactWeightFactor); + ACTS_PYTHON_MEMBER(zOriginWeightFactor); ACTS_PYTHON_MEMBER(compatSeedWeight); ACTS_PYTHON_MEMBER(deltaRMin); ACTS_PYTHON_MEMBER(maxSeedsPerSpM); diff --git a/docs/core/seeding.md b/docs/core/seeding.md index bd451e33daa..57eb1115f2b 100644 --- a/docs/core/seeding.md +++ b/docs/core/seeding.md @@ -209,10 +209,6 @@ likely to stem from a particle than another seed using the same middle SP with smaller impact parameters. The number of compatible seeds ($N_t$) is used to increase the weight, as a higher number of measurements will lead to higher quality tracks. Finally, the weight can also be affected by optional detector-specific cuts. -:::{note} -The $z_0$ term in the weight is not yet fully configurable, but this will change soon. -::: - The {func}`SeedFilter::filterSeeds_2SpFixed` function also includes a configurable {class}`Acts::SeedConfirmationRangeConfig` seed confirmation step that, when enabled, classifies higher quality seeds as "quality confined" seeds if they fall within a predefined range of parameters ($d_0$, $z_0$ and $N_t$) that also depends on the region of the detector (i.e., forward or central region). If the seed is not