Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-19 09:16:56

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Units.hpp"
0012 #include "Acts/Seeding/SeedConfirmationRangeConfig.hpp"
0013 
0014 #include <cstddef>
0015 
0016 namespace Acts {
0017 
0018 /// @brief Structure that holds configuration parameters for the seed filter algorithm
0019 struct SeedFilterConfig {
0020   /// Allowed difference in curvature (inverted seed radii) between two
0021   /// compatible seeds
0022   float deltaInvHelixDiameter = 0.00003 * 1. / UnitConstants::mm;
0023   /// Minimum distance between compatible outer space-points to be considered.
0024   /// This is used to avoid counting space-points from the same layer
0025   float deltaRMin = 5. * UnitConstants::mm;
0026   /// Seed weight/score is increased by this value if a compatible seed has been
0027   /// found. This is the c1 factor in the seed score calculation (w = c1 * Nt -
0028   /// c2 * d0 - c3 * z0)
0029   float compatSeedWeight = 200.;
0030   /// The transverse impact parameters (d0) is multiplied by this factor and
0031   /// subtracted from weight. This is the c2 factor in the seed score
0032   /// calculation (w = c1 * Nt - c2 * d0 - c3 * z0)
0033   float impactWeightFactor = 1.;
0034   /// The logitudinal impact parameters (z0) is multiplied by this factor and
0035   /// subtracted from weight. This is the c3 factor in the seed score
0036   /// calculation (w = c1 * Nt - c2 * d0 - c3 * z0)
0037   float zOriginWeightFactor = 1.;
0038   /// Maximum number (minus one) of accepted seeds per middle space-point
0039   /// In dense environments many seeds may be found per middle space-point
0040   /// Only seeds with the highest weight will be kept if this limit is reached
0041   unsigned int maxSeedsPerSpM = 10;
0042   /// Maximum limit to number of compatible space-point used in score
0043   /// calculation. We increase by c1 the weight calculation for each compatible
0044   /// space-point until we reach compatSeedLimit
0045   std::size_t compatSeedLimit = 2;
0046 
0047   /// Increment in seed weight if the number of compatible seeds is larger than
0048   /// numSeedIncrement, this is used in case of high occupancy scenarios if we
0049   /// want to increase the weight of the seed by seedWeightIncrement when the
0050   /// number of compatible seeds is higher than a certain value
0051   float seedWeightIncrement = 0;
0052   /// Number of seeds allowed before increment
0053   float numSeedIncrement = std::numeric_limits<float>::infinity();
0054 
0055   /// Seeding parameters used for quality seed confirmation
0056 
0057   /// Enable quality seed confirmation, this is different than default seeding
0058   /// confirmation because it can also be defined for different (r, z) regions
0059   /// of the detector (e.g. forward or central region) by SeedConfirmationRange.
0060   /// Seeds are classified as "high-quality" seeds and normal quality seeds.
0061   /// Normal quality seeds are only selected if no other "high-quality" seed
0062   /// has been found for that inner-middle doublet.
0063   bool seedConfirmation = false;
0064   /// Contains parameters for central seed confirmation
0065   SeedConfirmationRangeConfig centralSeedConfirmationRange;
0066   /// Contains parameters for forward seed confirmation
0067   SeedConfirmationRangeConfig forwardSeedConfirmationRange;
0068 
0069   /// If seedConfirmation is true we classify seeds as "high-quality" seeds.
0070   /// Seeds that are not confirmed as "high-quality" are only selected if no
0071   /// other "high-quality" seed has been found for that inner-middle doublet
0072   /// Maximum number of normal seeds (not classified as "high-quality" seeds)
0073   /// in seed confirmation
0074   std::size_t maxSeedsPerSpMConf = std::numeric_limits<std::size_t>::max();
0075   /// Maximum number of "high-quality" seeds for each inner-middle SP-dublet in
0076   /// seed confirmation. If the limit is reached we check if there is a normal
0077   /// quality seed to be replaced
0078   std::size_t maxQualitySeedsPerSpMConf =
0079       std::numeric_limits<std::size_t>::max();
0080 
0081   /// Other parameters
0082 
0083   /// Use deltaR between top and middle SP instead of top radius to search for
0084   /// compatible SPs
0085   bool useDeltaRorTopRadius = false;
0086 
0087   /// Flag indicating whether configuration values are in internal units
0088   bool isInInternalUnits = true;
0089 
0090   /// Convert configuration to internal units.
0091   /// @deprecated SeedFilterConfig already uses internal units
0092   /// @return Copy of this configuration (already in internal units)
0093   //[[deprecated("SeedFilterConfig uses internal units")]]
0094   SeedFilterConfig toInternalUnits() const { return *this; }
0095 };
0096 
0097 }  // namespace Acts