Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:21:33

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 #include "ActsPlugins/Json/Seeding2ConfigJsonConverter.hpp"
0010 
0011 #include "Acts/Utilities/GridBinFinder.hpp"
0012 #include "Acts/Utilities/Helpers.hpp"
0013 #include "ActsPlugins/Json/DefinitionsJsonConverter.hpp"
0014 
0015 #include <algorithm>
0016 
0017 namespace {
0018 
0019 template <std::size_t DIM>
0020 void to_json(nlohmann::json& j, const Acts::GridBinFinder<DIM>& f) {
0021   nlohmann::json::array_t values;
0022 
0023   for (const auto& value : f.values()) {
0024     std::visit(
0025         Acts::overloaded{
0026             [&](int v) { values.push_back(v); },
0027             [&](const std::pair<int, int>& p) { values.push_back(p); },
0028             [&](const std::vector<std::pair<int, int>>& vec) {
0029               values.push_back(vec);
0030             },
0031             [](const auto&) {
0032               throw std::runtime_error("Unsupported type in GridBinFinder");
0033             }},
0034         value);
0035   }
0036 
0037   j = values;
0038 }
0039 
0040 template <std::size_t DIM>
0041 Acts::GridBinFinder<DIM> from_json(const nlohmann::json& j) {
0042   using stored_values_t = typename Acts::GridBinFinder<DIM>::stored_values_t;
0043 
0044   std::array<stored_values_t, DIM> values;
0045   for (std::size_t i = 0; i < DIM; ++i) {
0046     if (j[i].is_number_integer()) {
0047       values[i] = j[i].get<int>();
0048     } else if (j[i].is_array() && j[i].size() == 2 &&
0049                j[i][0].is_number_integer() && j[i][1].is_number_integer()) {
0050       values[i] = j[i].get<std::pair<int, int>>();
0051     } else if (j[i].is_array() &&
0052                std::ranges::all_of(j[i], [](const nlohmann::json& elem) {
0053                  return elem.is_array() && elem.size() == 2 &&
0054                         elem[0].is_number_integer() &&
0055                         elem[1].is_number_integer();
0056                })) {
0057       values[i] = j[i].get<std::vector<std::pair<int, int>>>();
0058     } else {
0059       throw std::runtime_error("Invalid type for GridBinFinder value");
0060     }
0061   }
0062 
0063   return Acts::GridBinFinder<DIM>(std::move(values));
0064 }
0065 
0066 }  // namespace
0067 
0068 void Acts::to_json(nlohmann::json& j,
0069                    const SeedConfirmationRangeConfig& config) {
0070   j["zMinSeedConf"] = config.zMinSeedConf;
0071   j["zMaxSeedConf"] = config.zMaxSeedConf;
0072   j["rMaxSeedConf"] = config.rMaxSeedConf;
0073   j["nTopForLargeR"] = config.nTopForLargeR;
0074   j["nTopForSmallR"] = config.nTopForSmallR;
0075   j["seedConfMinBottomRadius"] = config.seedConfMinBottomRadius;
0076   j["seedConfMaxZOrigin"] = config.seedConfMaxZOrigin;
0077   j["minImpactSeedConf"] = config.minImpactSeedConf;
0078 }
0079 
0080 void Acts::from_json(const nlohmann::json& j,
0081                      SeedConfirmationRangeConfig& config) {
0082   j["zMinSeedConf"].get_to(config.zMinSeedConf);
0083   j["zMaxSeedConf"].get_to(config.zMaxSeedConf);
0084   j["rMaxSeedConf"].get_to(config.rMaxSeedConf);
0085   j["nTopForLargeR"].get_to(config.nTopForLargeR);
0086   j["nTopForSmallR"].get_to(config.nTopForSmallR);
0087   j["seedConfMinBottomRadius"].get_to(config.seedConfMinBottomRadius);
0088   j["seedConfMaxZOrigin"].get_to(config.seedConfMaxZOrigin);
0089   j["minImpactSeedConf"].get_to(config.minImpactSeedConf);
0090 }
0091 
0092 void Acts::Experimental::to_json(nlohmann::json& j,
0093                                  const DoubletSeedFinder::Config& config) {
0094   j["candidateDirection"] = config.candidateDirection;
0095   j["deltaRMin"] = config.deltaRMin;
0096   j["deltaRMax"] = config.deltaRMax;
0097   j["deltaZMin"] = config.deltaZMin;
0098   j["deltaZMax"] = config.deltaZMax;
0099   j["impactMax"] = config.impactMax;
0100   j["interactionPointCut"] = config.interactionPointCut;
0101   j["collisionRegionMin"] = config.collisionRegionMin;
0102   j["collisionRegionMax"] = config.collisionRegionMax;
0103   j["cotThetaMax"] = config.cotThetaMax;
0104   j["minPt"] = config.minPt;
0105   j["helixCutTolerance"] = config.helixCutTolerance;
0106   // experiment cuts cannot be serialized directly, so we skip it
0107 }
0108 
0109 void Acts::Experimental::to_json(
0110     nlohmann::json& j, const DoubletSeedFinder::DerivedConfig& config) {
0111   to_json(j, static_cast<const DoubletSeedFinder::Config&>(config));
0112   j["bFieldInZ"] = config.bFieldInZ;
0113   j["minHelixDiameter2"] = config.minHelixDiameter2;
0114 }
0115 
0116 void Acts::Experimental::to_json(nlohmann::json& j,
0117                                  const TripletSeedFinder::Config& config) {
0118   j["minPt"] = config.minPt;
0119   j["sigmaScattering"] = config.sigmaScattering;
0120   j["radLengthPerSeed"] = config.radLengthPerSeed;
0121   j["impactMax"] = config.impactMax;
0122   j["helixCutTolerance"] = config.helixCutTolerance;
0123   j["toleranceParam"] = config.toleranceParam;
0124   j["useStripInfo"] = config.useStripInfo;
0125   j["sortedByCotTheta"] = config.sortedByCotTheta;
0126 }
0127 
0128 void Acts::Experimental::to_json(
0129     nlohmann::json& j, const TripletSeedFinder::DerivedConfig& config) {
0130   to_json(j, static_cast<const TripletSeedFinder::Config&>(config));
0131   j["bFieldInZ"] = config.bFieldInZ;
0132   j["highland"] = config.highland;
0133   j["pTPerHelixRadius"] = config.pTPerHelixRadius;
0134   j["minHelixDiameter2"] = config.minHelixDiameter2;
0135   j["sigmapT2perRadius"] = config.sigmapT2perRadius;
0136   j["multipleScattering2"] = config.multipleScattering2;
0137 }
0138 
0139 void Acts::Experimental::to_json(nlohmann::json& j,
0140                                  const BroadTripletSeedFilter::Config& config) {
0141   j["deltaInvHelixDiameter"] = config.deltaInvHelixDiameter;
0142   j["deltaRMin"] = config.deltaRMin;
0143   j["compatSeedWeight"] = config.compatSeedWeight;
0144   j["impactWeightFactor"] = config.impactWeightFactor;
0145   j["zOriginWeightFactor"] = config.zOriginWeightFactor;
0146   j["maxSeedsPerSpM"] = config.maxSeedsPerSpM;
0147   j["compatSeedLimit"] = config.compatSeedLimit;
0148   j["seedWeightIncrement"] = config.seedWeightIncrement;
0149   j["numSeedIncrement"] = config.numSeedIncrement;
0150   j["seedConfirmation"] = config.seedConfirmation;
0151   j["centralSeedConfirmationRange"] = config.centralSeedConfirmationRange;
0152   j["forwardSeedConfirmationRange"] = config.forwardSeedConfirmationRange;
0153   j["maxSeedsPerSpMConf"] = config.maxSeedsPerSpMConf;
0154   j["maxQualitySeedsPerSpMConf"] = config.maxQualitySeedsPerSpMConf;
0155   j["useDeltaRinsteadOfTopRadius"] = config.useDeltaRinsteadOfTopRadius;
0156   // experiment cuts cannot be serialized directly, so we skip it
0157 }
0158 
0159 void Acts::Experimental::to_json(
0160     nlohmann::json& j, const CylindricalSpacePointGrid2::Config& config) {
0161   j["minPt"] = config.minPt;
0162   j["rMin"] = config.rMin;
0163   j["rMax"] = config.rMax;
0164   j["zMin"] = config.zMin;
0165   j["zMax"] = config.zMax;
0166   j["deltaRMax"] = config.deltaRMax;
0167   j["cotThetaMax"] = config.cotThetaMax;
0168   j["impactMax"] = config.impactMax;
0169   j["phiMin"] = config.phiMin;
0170   j["phiMax"] = config.phiMax;
0171   j["phiBinDeflectionCoverage"] = config.phiBinDeflectionCoverage;
0172   j["maxPhiBins"] = config.maxPhiBins;
0173   j["zBinEdges"] = config.zBinEdges;
0174   j["rBinEdges"] = config.rBinEdges;
0175   j["bFieldInZ"] = config.bFieldInZ;
0176   if (config.bottomBinFinder.has_value()) {
0177     ::to_json(j["bottomBinFinder"], config.bottomBinFinder.value());
0178   }
0179   if (config.topBinFinder.has_value()) {
0180     ::to_json(j["topBinFinder"], config.topBinFinder.value());
0181   }
0182   j["navigation"] = config.navigation;
0183 }
0184 
0185 void Acts::Experimental::from_json(const nlohmann::json& j,
0186                                    DoubletSeedFinder::Config& config) {
0187   j["candidateDirection"].get_to(config.candidateDirection);
0188   j["deltaRMin"].get_to(config.deltaRMin);
0189   j["deltaRMax"].get_to(config.deltaRMax);
0190   j["deltaZMin"].get_to(config.deltaZMin);
0191   j["deltaZMax"].get_to(config.deltaZMax);
0192   j["impactMax"].get_to(config.impactMax);
0193   j["interactionPointCut"].get_to(config.interactionPointCut);
0194   j["collisionRegionMin"].get_to(config.collisionRegionMin);
0195   j["collisionRegionMax"].get_to(config.collisionRegionMax);
0196   j["cotThetaMax"].get_to(config.cotThetaMax);
0197   j["minPt"].get_to(config.minPt);
0198   j["helixCutTolerance"].get_to(config.helixCutTolerance);
0199   // experiment cuts cannot be serialized directly, so we skip it
0200 }
0201 
0202 void Acts::Experimental::from_json(const nlohmann::json& j,
0203                                    DoubletSeedFinder::DerivedConfig& config) {
0204   from_json(j, static_cast<DoubletSeedFinder::Config&>(config));
0205   j["bFieldInZ"].get_to(config.bFieldInZ);
0206   j["minHelixDiameter2"].get_to(config.minHelixDiameter2);
0207 }
0208 
0209 void Acts::Experimental::from_json(const nlohmann::json& j,
0210                                    TripletSeedFinder::Config& config) {
0211   j["minPt"].get_to(config.minPt);
0212   j["sigmaScattering"].get_to(config.sigmaScattering);
0213   j["radLengthPerSeed"].get_to(config.radLengthPerSeed);
0214   j["impactMax"].get_to(config.impactMax);
0215   j["helixCutTolerance"].get_to(config.helixCutTolerance);
0216   j["toleranceParam"].get_to(config.toleranceParam);
0217   j["useStripInfo"].get_to(config.useStripInfo);
0218   j["sortedByCotTheta"].get_to(config.sortedByCotTheta);
0219 }
0220 
0221 void Acts::Experimental::from_json(const nlohmann::json& j,
0222                                    TripletSeedFinder::DerivedConfig& config) {
0223   from_json(j, static_cast<TripletSeedFinder::Config&>(config));
0224   j["bFieldInZ"].get_to(config.bFieldInZ);
0225   j["highland"].get_to(config.highland);
0226   j["pTPerHelixRadius"].get_to(config.pTPerHelixRadius);
0227   j["minHelixDiameter2"].get_to(config.minHelixDiameter2);
0228   j["sigmapT2perRadius"].get_to(config.sigmapT2perRadius);
0229   j["multipleScattering2"].get_to(config.multipleScattering2);
0230 }
0231 
0232 void Acts::Experimental::from_json(const nlohmann::json& j,
0233                                    BroadTripletSeedFilter::Config& config) {
0234   j["deltaInvHelixDiameter"].get_to(config.deltaInvHelixDiameter);
0235   j["deltaRMin"].get_to(config.deltaRMin);
0236   j["compatSeedWeight"].get_to(config.compatSeedWeight);
0237   j["impactWeightFactor"].get_to(config.impactWeightFactor);
0238   j["zOriginWeightFactor"].get_to(config.zOriginWeightFactor);
0239   j["maxSeedsPerSpM"].get_to(config.maxSeedsPerSpM);
0240   j["compatSeedLimit"].get_to(config.compatSeedLimit);
0241   j["seedWeightIncrement"].get_to(config.seedWeightIncrement);
0242   j["numSeedIncrement"].get_to(config.numSeedIncrement);
0243   j["seedConfirmation"].get_to(config.seedConfirmation);
0244   j["centralSeedConfirmationRange"].get_to(config.centralSeedConfirmationRange);
0245   j["forwardSeedConfirmationRange"].get_to(config.forwardSeedConfirmationRange);
0246   j["maxSeedsPerSpMConf"].get_to(config.maxSeedsPerSpMConf);
0247   j["maxQualitySeedsPerSpMConf"].get_to(config.maxQualitySeedsPerSpMConf);
0248   j["useDeltaRinsteadOfTopRadius"].get_to(config.useDeltaRinsteadOfTopRadius);
0249   // experiment cuts cannot be serialized directly, so we skip it
0250 }
0251 
0252 void Acts::Experimental::from_json(const nlohmann::json& j,
0253                                    CylindricalSpacePointGrid2::Config& config) {
0254   j["minPt"].get_to(config.minPt);
0255   j["rMin"].get_to(config.rMin);
0256   j["rMax"].get_to(config.rMax);
0257   j["zMin"].get_to(config.zMin);
0258   j["zMax"].get_to(config.zMax);
0259   j["deltaRMax"].get_to(config.deltaRMax);
0260   j["cotThetaMax"].get_to(config.cotThetaMax);
0261   j["impactMax"].get_to(config.impactMax);
0262   j["phiMin"].get_to(config.phiMin);
0263   j["phiMax"].get_to(config.phiMax);
0264   j["phiBinDeflectionCoverage"].get_to(config.phiBinDeflectionCoverage);
0265   j["maxPhiBins"].get_to(config.maxPhiBins);
0266   j["zBinEdges"].get_to(config.zBinEdges);
0267   j["rBinEdges"].get_to(config.rBinEdges);
0268   j["bFieldInZ"].get_to(config.bFieldInZ);
0269   if (j.contains("bottomBinFinder")) {
0270     config.bottomBinFinder = ::from_json<3ul>(j["bottomBinFinder"]);
0271   }
0272   if (j.contains("topBinFinder")) {
0273     config.topBinFinder = ::from_json<3ul>(j["topBinFinder"]);
0274   }
0275   j["navigation"].get_to(config.navigation);
0276 }