File indexing completed on 2025-10-28 07:54:46
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/EventData/SpacePointContainer.hpp"
0010 #include "Acts/Seeding/SeedFinderConfig.hpp"
0011 #include "Acts/Seeding/SeedFinderGbtsConfig.hpp"
0012 #include "Acts/Seeding/SeedFinderOrthogonalConfig.hpp"
0013 #include "Acts/Utilities/Logger.hpp"
0014 #include "ActsExamples/EventData/SpacePointContainer.hpp"
0015 #include "ActsExamples/TrackFinding/AdaptiveHoughTransformSeeder.hpp"
0016 #include "ActsExamples/TrackFinding/GbtsSeedingAlgorithm.hpp"
0017 #include "ActsExamples/TrackFinding/GridTripletSeedingAlgorithm.hpp"
0018 #include "ActsExamples/TrackFinding/HoughTransformSeeder.hpp"
0019 #include "ActsExamples/TrackFinding/MuonHoughSeeder.hpp"
0020 #include "ActsExamples/TrackFinding/OrthogonalTripletSeedingAlgorithm.hpp"
0021 #include "ActsExamples/TrackFinding/SeedingAlgorithm.hpp"
0022 #include "ActsExamples/TrackFinding/SeedingOrthogonalAlgorithm.hpp"
0023 #include "ActsExamples/TrackFinding/SpacePointMaker.hpp"
0024 #include "ActsExamples/TrackFinding/TrackFindingAlgorithm.hpp"
0025 #include "ActsExamples/TrackFinding/TrackParamsEstimationAlgorithm.hpp"
0026 #include "ActsExamples/TrackFinding/TrackParamsLookupEstimation.hpp"
0027 #include "ActsPython/Utilities/Helpers.hpp"
0028 #include "ActsPython/Utilities/Macros.hpp"
0029
0030 #include <cstddef>
0031 #include <memory>
0032 #include <utility>
0033 #include <vector>
0034
0035 #include <pybind11/pybind11.h>
0036 #include <pybind11/stl.h>
0037
0038 namespace py = pybind11;
0039
0040 using namespace ActsExamples;
0041
0042 namespace ActsPython {
0043
0044 void addTrackFinding(Context& ctx) {
0045 auto& mex = ctx.get("examples");
0046
0047 ACTS_PYTHON_DECLARE_ALGORITHM(SpacePointMaker, mex, "SpacePointMaker",
0048 inputMeasurements, outputSpacePoints,
0049 trackingGeometry, geometrySelection,
0050 stripGeometrySelection);
0051
0052 {
0053 using Config = Acts::SeedFinderConfig<typename Acts::SpacePointContainer<
0054 SpacePointContainer<std::vector<const SimSpacePoint*>>,
0055 Acts::detail::RefHolder>::SpacePointProxyType>;
0056 auto c = py::class_<Config>(mex, "SeedFinderConfig").def(py::init<>());
0057 ACTS_PYTHON_STRUCT(
0058 c, minPt, cotThetaMax, deltaRMin, deltaRMax, deltaRMinBottomSP,
0059 deltaRMaxBottomSP, deltaRMinTopSP, deltaRMaxTopSP, impactMax,
0060 sigmaScattering, maxPtScattering, maxSeedsPerSpM, collisionRegionMin,
0061 collisionRegionMax, phiMin, phiMax, zMin, zMax, rMax, rMin,
0062 radLengthPerSeed, zAlign, rAlign, sigmaError, maxBlockSize,
0063 nTrplPerSpBLimit, nAvgTrplPerSpBLimit, deltaZMax, zBinEdges,
0064 interactionPointCut, zBinsCustomLooping, useVariableMiddleSPRange,
0065 deltaRMiddleMinSPRange, deltaRMiddleMaxSPRange, rRangeMiddleSP,
0066 rMinMiddle, rMaxMiddle, binSizeR, seedConfirmation,
0067 centralSeedConfirmationRange, forwardSeedConfirmationRange,
0068 useDetailedDoubleMeasurementInfo);
0069 patchKwargsConstructor(c);
0070 }
0071
0072 {
0073 using Config =
0074 Acts::SeedFinderOrthogonalConfig<typename Acts::SpacePointContainer<
0075 SpacePointContainer<std::vector<const SimSpacePoint*>>,
0076 Acts::detail::RefHolder>::SpacePointProxyType>;
0077 auto c =
0078 py::class_<Config>(mex, "SeedFinderOrthogonalConfig").def(py::init<>());
0079 ACTS_PYTHON_STRUCT(
0080 c, minPt, cotThetaMax, deltaRMinBottomSP, deltaRMaxBottomSP,
0081 deltaRMinTopSP, deltaRMaxTopSP, impactMax, deltaZMax, sigmaScattering,
0082 maxPtScattering, maxSeedsPerSpM, collisionRegionMin, collisionRegionMax,
0083 phiMin, phiMax, zMin, zMax, rMax, rMin, radLengthPerSeed,
0084 interactionPointCut, deltaPhiMax, highland, maxScatteringAngle2,
0085 useVariableMiddleSPRange, deltaRMiddleMinSPRange,
0086 deltaRMiddleMaxSPRange, rRangeMiddleSP, rMinMiddle, rMaxMiddle,
0087 seedConfirmation, centralSeedConfirmationRange,
0088 forwardSeedConfirmationRange);
0089 patchKwargsConstructor(c);
0090 }
0091
0092 {
0093 using Config = Acts::Experimental::SeedFinderGbtsConfig<SimSpacePoint>;
0094 auto c = py::class_<Config>(mex, "SeedFinderGbtsConfig").def(py::init<>());
0095 ACTS_PYTHON_STRUCT(c, minPt, sigmaScattering, highland, maxScatteringAngle2,
0096 ConnectorInputFile, m_phiSliceWidth, m_nMaxPhiSlice,
0097 m_useClusterWidth, m_layerGeometry);
0098 patchKwargsConstructor(c);
0099 }
0100
0101 ACTS_PYTHON_DECLARE_ALGORITHM(
0102 SeedingAlgorithm, mex, "SeedingAlgorithm", inputSpacePoints, outputSeeds,
0103 seedFilterConfig, seedFinderConfig, seedFinderOptions, gridConfig,
0104 gridOptions, allowSeparateRMax, zBinNeighborsTop, zBinNeighborsBottom,
0105 numPhiNeighbors, useExtraCuts);
0106
0107 ACTS_PYTHON_DECLARE_ALGORITHM(
0108 GridTripletSeedingAlgorithm, mex, "GridTripletSeedingAlgorithm",
0109 inputSpacePoints, outputSeeds, bFieldInZ, minPt, cotThetaMax, impactMax,
0110 deltaRMin, deltaRMax, deltaRMinTop, deltaRMaxTop, deltaRMinBottom,
0111 deltaRMaxBottom, rMin, rMax, zMin, zMax, phiMin, phiMax,
0112 phiBinDeflectionCoverage, maxPhiBins, zBinNeighborsTop,
0113 zBinNeighborsBottom, numPhiNeighbors, zBinEdges, zBinsCustomLooping,
0114 rMinMiddle, rMaxMiddle, useVariableMiddleSPRange, rRangeMiddleSP,
0115 deltaRMiddleMinSPRange, deltaRMiddleMaxSPRange, deltaZMin, deltaZMax,
0116 interactionPointCut, collisionRegionMin, collisionRegionMax,
0117 helixCutTolerance, sigmaScattering, radLengthPerSeed, toleranceParam,
0118 deltaInvHelixDiameter, compatSeedWeight, impactWeightFactor,
0119 zOriginWeightFactor, maxSeedsPerSpM, compatSeedLimit, seedWeightIncrement,
0120 numSeedIncrement, seedConfirmation, centralSeedConfirmationRange,
0121 forwardSeedConfirmationRange, maxSeedsPerSpMConf,
0122 maxQualitySeedsPerSpMConf, useDeltaRinsteadOfTopRadius, useExtraCuts);
0123
0124 ACTS_PYTHON_DECLARE_ALGORITHM(
0125 OrthogonalTripletSeedingAlgorithm, mex,
0126 "OrthogonalTripletSeedingAlgorithm", inputSpacePoints, outputSeeds,
0127 bFieldInZ, minPt, cotThetaMax, impactMax, deltaRMin, deltaRMax,
0128 deltaRMinTop, deltaRMaxTop, deltaRMinBottom, deltaRMaxBottom, rMin, rMax,
0129 zMin, zMax, phiMin, phiMax, rMinMiddle, rMaxMiddle,
0130 useVariableMiddleSPRange, rRangeMiddleSP, deltaRMiddleMinSPRange,
0131 deltaRMiddleMaxSPRange, deltaZMin, deltaZMax, interactionPointCut,
0132 collisionRegionMin, collisionRegionMax, helixCutTolerance,
0133 sigmaScattering, radLengthPerSeed, toleranceParam, deltaInvHelixDiameter,
0134 compatSeedWeight, impactWeightFactor, zOriginWeightFactor, maxSeedsPerSpM,
0135 compatSeedLimit, seedWeightIncrement, numSeedIncrement, seedConfirmation,
0136 centralSeedConfirmationRange, forwardSeedConfirmationRange,
0137 maxSeedsPerSpMConf, maxQualitySeedsPerSpMConf,
0138 useDeltaRinsteadOfTopRadius, useExtraCuts);
0139
0140 ACTS_PYTHON_DECLARE_ALGORITHM(SeedingOrthogonalAlgorithm, mex,
0141 "SeedingOrthogonalAlgorithm", inputSpacePoints,
0142 outputSeeds, seedFilterConfig, seedFinderConfig,
0143 seedFinderOptions);
0144
0145 ACTS_PYTHON_DECLARE_ALGORITHM(
0146 GbtsSeedingAlgorithm, mex, "GbtsSeedingAlgorithm", inputSpacePoints,
0147 outputSeeds, seedFinderConfig, seedFinderOptions, layerMappingFile,
0148 geometrySelection, trackingGeometry, ActsGbtsMap, fill_module_csv,
0149 inputClusters);
0150
0151 ACTS_PYTHON_DECLARE_ALGORITHM(
0152 HoughTransformSeeder, mex, "HoughTransformSeeder", inputSpacePoints,
0153 outputProtoTracks, trackingGeometry, geometrySelection, inputMeasurements,
0154 subRegions, nLayers, xMin, xMax, yMin, yMax, houghHistSize_x,
0155 houghHistSize_y, hitExtend_x, threshold, localMaxWindowSize, kA);
0156
0157 ACTS_PYTHON_DECLARE_ALGORITHM(
0158 AdaptiveHoughTransformSeeder, mex, "AdaptiveHoughTransformSeeder",
0159 inputSpacePoints, outputSeeds, outputProtoTracks, trackingGeometry,
0160 qOverPtMin, qOverPtMinBinSize, phiMinBinSize, threshold, noiseThreshold,
0161 deduplicate, inverseA, doSecondPhase, zRange, cotThetaRange,
0162 cotThetaMinBinSize, zMinBinSize);
0163
0164 ACTS_PYTHON_DECLARE_ALGORITHM(MuonHoughSeeder, mex, "MuonHoughSeeder",
0165 inTruthSegments, inSpacePoints, outHoughMax,
0166 nBinsTanTheta, nBinsY0, nBinsTanPhi, nBinsX0);
0167
0168 ACTS_PYTHON_DECLARE_ALGORITHM(
0169 TrackParamsEstimationAlgorithm, mex, "TrackParamsEstimationAlgorithm",
0170 inputSeeds, inputProtoTracks, inputParticleHypotheses,
0171 outputTrackParameters, outputSeeds, outputProtoTracks, trackingGeometry,
0172 magneticField, bFieldMin, initialSigmas, initialSigmaQoverPt,
0173 initialSigmaPtRel, initialVarInflation, noTimeVarInflation,
0174 particleHypothesis);
0175
0176 ACTS_PYTHON_DECLARE_ALGORITHM(
0177 TrackParamsLookupEstimation, mex, "TrackParamsLookupEstimation",
0178 refLayers, bins, inputHits, inputParticles, trackLookupGridWriters);
0179
0180 {
0181 using Alg = TrackFindingAlgorithm;
0182 using Config = Alg::Config;
0183
0184 auto alg =
0185 py::class_<Alg, IAlgorithm, std::shared_ptr<Alg>>(
0186 mex, "TrackFindingAlgorithm")
0187 .def(py::init<const Config&, Acts::Logging::Level>(),
0188 py::arg("config"), py::arg("level"))
0189 .def_property_readonly("config", &Alg::config)
0190 .def_static("makeTrackFinderFunction",
0191 [](std::shared_ptr<const Acts::TrackingGeometry>
0192 trackingGeometry,
0193 std::shared_ptr<const Acts::MagneticFieldProvider>
0194 magneticField,
0195 Acts::Logging::Level level) {
0196 return Alg::makeTrackFinderFunction(
0197 std::move(trackingGeometry),
0198 std::move(magneticField),
0199 *Acts::getDefaultLogger("TrackFinding", level));
0200 });
0201
0202 py::class_<Alg::TrackFinderFunction,
0203 std::shared_ptr<Alg::TrackFinderFunction>>(
0204 alg, "TrackFinderFunction");
0205
0206 auto c = py::class_<Config>(alg, "Config").def(py::init<>());
0207 ACTS_PYTHON_STRUCT(c, inputMeasurements, inputInitialTrackParameters,
0208 inputSeeds, outputTracks, trackingGeometry,
0209 magneticField, findTracks, measurementSelectorCfg,
0210 trackSelectorCfg, maxSteps, twoWay, reverseSearch,
0211 seedDeduplication, stayOnSeed, pixelVolumeIds,
0212 stripVolumeIds, maxPixelHoles, maxStripHoles, trimTracks,
0213 constrainToVolumeIds, endOfWorldVolumeIds);
0214 }
0215 }
0216
0217 }