File indexing completed on 2026-09-07 08:28:05
0001
0002
0003
0004 #pragma once
0005
0006 #include <cstddef>
0007 #include <cmath>
0008 #include <ios>
0009 #include <istream>
0010 #include <limits>
0011 #include <numbers>
0012 #include <ostream>
0013 #include <string>
0014 #include <utility>
0015
0016 #include <Acts/Definitions/Units.hpp>
0017 #include <Acts/Seeding/SeedConfirmationRangeConfig.hpp>
0018 namespace eicrecon {
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 struct TrackSeedingConfig {
0031
0032
0033
0034
0035 enum class SeedingMethod {
0036
0037 Auto,
0038
0039
0040 Seeding2,
0041
0042
0043 Orthogonal
0044 };
0045
0046
0047 #if Acts_VERSION_MAJOR <= 46
0048 SeedingMethod seedingMethod = SeedingMethod::Orthogonal;
0049 #else
0050 SeedingMethod seedingMethod = SeedingMethod::Seeding2;
0051 #endif
0052
0053
0054
0055
0056
0057 float rMax = 440. * Acts::UnitConstants::mm;
0058
0059 float rMin = 33. * Acts::UnitConstants::mm;
0060
0061 float zMax = 1700. * Acts::UnitConstants::mm;
0062
0063 float zMin = -1500. * Acts::UnitConstants::mm;
0064
0065 float phiMin = -std::numbers::pi_v<float>;
0066
0067 float phiMax = std::numbers::pi_v<float>;
0068
0069
0070
0071
0072
0073
0074
0075 float deltaRMin = 10. * Acts::UnitConstants::mm;
0076
0077
0078
0079
0080
0081 float deltaRMinTopSP = deltaRMin;
0082
0083
0084
0085 float deltaRMaxTopSP = 450. * Acts::UnitConstants::mm;
0086
0087
0088
0089
0090
0091 float deltaRMinBottomSP = deltaRMin;
0092
0093
0094
0095 float deltaRMaxBottomSP = 200. * Acts::UnitConstants::mm;
0096
0097
0098
0099 float deltaZMin = -std::numeric_limits<float>::max();
0100
0101
0102 float deltaZMax = std::numeric_limits<float>::max();
0103
0104
0105 float impactMax = 3. * Acts::UnitConstants::mm;
0106
0107
0108 bool interactionPointCut = false;
0109
0110
0111 float collisionRegionMin = -250. * Acts::UnitConstants::mm;
0112
0113 float collisionRegionMax = 250. * Acts::UnitConstants::mm;
0114
0115
0116 float cotThetaMax = 1.0 / tan(2. * atan(exp(-4.0)));
0117
0118
0119 float deltaPhiMax = 0.085;
0120
0121
0122 float helixCutTolerance = 1.0;
0123
0124
0125
0126
0127
0128 float minPt = (100. * Acts::UnitConstants::MeV) / (1.0 / tan(2. * atan(exp(-4.0))));
0129
0130 float sigmaScattering = 5.0;
0131
0132 float radLengthPerSeed = 0.1;
0133
0134 float toleranceParam = 1.1 * Acts::UnitConstants::mm;
0135
0136
0137
0138
0139
0140 float rMinMiddle = 20. * Acts::UnitConstants::mm;
0141
0142 float rMaxMiddle = 400. * Acts::UnitConstants::mm;
0143
0144
0145 bool useVariableMiddleSPRange = false;
0146 float deltaRMiddleMinSPRange = 10. * Acts::UnitConstants::mm;
0147 float deltaRMiddleMaxSPRange = 10. * Acts::UnitConstants::mm;
0148
0149
0150 std::pair<float, float> zOutermostLayers{-1500. * Acts::UnitConstants::mm,
0151 1700. * Acts::UnitConstants::mm};
0152
0153
0154
0155
0156 float deltaInvHelixDiameter = 0.00003 * 1. / Acts::UnitConstants::mm;
0157 float compatSeedWeight = 200.;
0158 float impactWeightFactor = 1.;
0159 float zOriginWeightFactor = 1.;
0160 unsigned int maxSeedsPerSpM = 0;
0161 std::size_t compatSeedLimit = 2;
0162 float seedWeightIncrement = 0;
0163
0164
0165 bool seedConfirmation = false;
0166
0167
0168
0169 float zMinSeedConfCentral = -250. * Acts::UnitConstants::mm;
0170 float zMaxSeedConfCentral = 250. * Acts::UnitConstants::mm;
0171 float rMaxSeedConfCentral = 140. * Acts::UnitConstants::mm;
0172 std::size_t nTopForLargeRCentral = 1;
0173 std::size_t nTopForSmallRCentral = 2;
0174 float seedConfMinBottomRadiusCentral = 60.0 * Acts::UnitConstants::mm;
0175 float seedConfMaxZOriginCentral = 150.0 * Acts::UnitConstants::mm;
0176 float minImpactSeedConfCentral = 1.0 * Acts::UnitConstants::mm;
0177
0178
0179
0180 float zMinSeedConfForward = -3000. * Acts::UnitConstants::mm;
0181 float zMaxSeedConfForward = 3000. * Acts::UnitConstants::mm;
0182 float rMaxSeedConfForward = 140. * Acts::UnitConstants::mm;
0183 std::size_t nTopForLargeRForward = 1;
0184 std::size_t nTopForSmallRForward = 2;
0185 float seedConfMinBottomRadiusForward = 60.0 * Acts::UnitConstants::mm;
0186 float seedConfMaxZOriginForward = 150.0 * Acts::UnitConstants::mm;
0187 float minImpactSeedConfForward = 1.0 * Acts::UnitConstants::mm;
0188
0189
0190
0191
0192
0193
0194 float bFieldInZ = 1.7 * Acts::UnitConstants::T;
0195
0196 float beamPosX = 0.;
0197
0198 float beamPosY = 0.;
0199
0200
0201
0202
0203 float locaError = std::sqrt(1.5) * Acts::UnitConstants::mm;
0204 float locbError = std::sqrt(1.5) * Acts::UnitConstants::mm;
0205 float phiError = std::sqrt(0.02) * Acts::UnitConstants::rad;
0206 float thetaError = std::sqrt(0.002) * Acts::UnitConstants::rad;
0207 float qOverPError = std::sqrt(0.025) / Acts::UnitConstants::GeV;
0208 float timeError =
0209 std::sqrt(0.1 * Acts::UnitConstants::mm / Acts::UnitConstants::ns) * Acts::UnitConstants::ns;
0210
0211
0212
0213 };
0214
0215 inline std::istream& operator>>(std::istream& in,
0216 TrackSeedingConfig::SeedingMethod& seedingMethod) {
0217 std::string s;
0218 in >> s;
0219 if (s == "auto") {
0220 seedingMethod = TrackSeedingConfig::SeedingMethod::Auto;
0221 } else if (s == "seeding2") {
0222 seedingMethod = TrackSeedingConfig::SeedingMethod::Seeding2;
0223 } else if (s == "orthogonal") {
0224 seedingMethod = TrackSeedingConfig::SeedingMethod::Orthogonal;
0225 } else {
0226 in.setstate(std::ios::failbit);
0227 }
0228 return in;
0229 }
0230
0231 inline std::ostream& operator<<(std::ostream& out,
0232 const TrackSeedingConfig::SeedingMethod& seedingMethod) {
0233 switch (seedingMethod) {
0234 case TrackSeedingConfig::SeedingMethod::Auto:
0235 out << "auto";
0236 break;
0237 case TrackSeedingConfig::SeedingMethod::Seeding2:
0238 out << "seeding2";
0239 break;
0240 case TrackSeedingConfig::SeedingMethod::Orthogonal:
0241 out << "orthogonal";
0242 break;
0243 default:
0244 out.setstate(std::ios::failbit);
0245 }
0246 return out;
0247 }
0248
0249 }