Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-16 08:17:19

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/Utilities/IAxis.hpp"
0012 #include "Acts/Utilities/IMultiAxis.hpp"
0013 
0014 #include <memory>
0015 
0016 namespace Acts::detail {
0017 
0018 /// Build a 3-dimensional @c MultiAxis given an already-resolved concrete first
0019 /// axis, dispatching the remaining two axes internally.
0020 ///
0021 /// The three-axis factory instantiates @c MultiAxis for every combination of
0022 /// concrete axis types (2 binning types x 3 boundary types per axis, i.e. 216
0023 /// combinations). Instantiating all of them in a single translation unit is
0024 /// very expensive in compiler memory. This helper is explicitly instantiated
0025 /// per concrete first-axis type in dedicated translation units
0026 /// (@c CreateMultiAxis3*.cpp) so that the combinatorial cost is spread across
0027 /// several TUs instead of concentrated in one. The generated code and runtime
0028 /// behaviour are identical to a single-TU dispatch.
0029 ///
0030 /// @tparam FirstAxis the concrete type of the first axis
0031 /// @param first the already-resolved first axis
0032 /// @param second the second axis (resolved internally)
0033 /// @param third the third axis (resolved internally)
0034 /// @return unique pointer to the created 3D multi-axis
0035 template <typename FirstAxis>
0036 std::unique_ptr<IMultiAxis3D> createMultiAxis3(const FirstAxis& first,
0037                                                const IAxis& second,
0038                                                const IAxis& third);
0039 
0040 }  // namespace Acts::detail