File indexing completed on 2026-06-11 07:49:31
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Utilities/AxisDefinitions.hpp"
0010
0011 #include <algorithm>
0012 #include <ostream>
0013 #include <stdexcept>
0014
0015 using namespace Acts;
0016
0017 namespace {
0018
0019
0020
0021
0022 const std::vector<std::string> s_legacyBinningValueNames = {
0023 "binX", "binY", "binZ", "binR", "binPhi",
0024 "binRPhi", "binH", "binEta", "binMag"};
0025
0026
0027 const std::vector<std::string> s_axisDirectionNames = {
0028 "AxisX", "AxisY", "AxisZ", "AxisR", "AxisPhi",
0029 "AxisRPhi", "AxisTheta", "AxisEta", "AxisMag"};
0030
0031 const std::vector<AxisDirection> s_axisDirections = {
0032 AxisDirection::AxisX, AxisDirection::AxisY, AxisDirection::AxisZ,
0033 AxisDirection::AxisR, AxisDirection::AxisPhi, AxisDirection::AxisRPhi,
0034 AxisDirection::AxisTheta, AxisDirection::AxisEta, AxisDirection::AxisMag};
0035
0036 }
0037
0038 const std::vector<AxisDirection>& Acts::allAxisDirections() {
0039 return s_axisDirections;
0040 }
0041
0042 AxisDirection Acts::axisDirectionFromName(const std::string& name) {
0043 auto it = std::ranges::find(s_axisDirectionNames, name);
0044 if (it == s_axisDirectionNames.end()) {
0045
0046 it = std::ranges::find(s_legacyBinningValueNames, name);
0047 if (it == s_legacyBinningValueNames.end()) {
0048
0049 throw std::invalid_argument("Unknown AxisDirection value name: " + name);
0050 }
0051 return static_cast<AxisDirection>(
0052 std::distance(s_legacyBinningValueNames.begin(), it));
0053 }
0054 return static_cast<AxisDirection>(
0055 std::distance(s_axisDirectionNames.begin(), it));
0056 }
0057
0058 const std::string& Acts::axisDirectionName(AxisDirection aDir) {
0059 return s_axisDirectionNames.at(
0060 static_cast<std::underlying_type_t<AxisDirection>>(aDir));
0061 }
0062
0063 std::string Acts::axesDirectionName(const std::vector<AxisDirection>& manyDir) {
0064 std::string name = "{";
0065 for (const auto& dir : manyDir) {
0066 name += axisDirectionName(dir);
0067 if (&dir != &manyDir.back()) {
0068 name += ", ";
0069 }
0070 }
0071 name += "}";
0072 return name;
0073 }
0074
0075 std::ostream& Acts::operator<<(std::ostream& os, AxisDirection aDir) {
0076 os << axisDirectionName(aDir);
0077 return os;
0078 }
0079
0080 std::ostream& Acts::operator<<(std::ostream& os,
0081 const std::vector<AxisDirection>& manyDir) {
0082 os << axesDirectionName(manyDir);
0083 return os;
0084 }
0085
0086 std::ostream& Acts::operator<<(std::ostream& os, AxisBoundaryType bdt) {
0087 using enum AxisBoundaryType;
0088 switch (bdt) {
0089 case Open:
0090 os << "Open";
0091 break;
0092 case Bound:
0093 os << "Bound";
0094 break;
0095 case Closed:
0096 os << "Closed";
0097 break;
0098 }
0099 return os;
0100 }
0101
0102 std::ostream& Acts::operator<<(std::ostream& os, AxisType type) {
0103 switch (type) {
0104 case AxisType::Equidistant:
0105 os << "Equidistant";
0106 break;
0107 case AxisType::Variable:
0108 os << "Variable";
0109 break;
0110 }
0111 return os;
0112 }