Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-27 07:24:25

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 // Project include(s)
0010 #include "detray/core/detector.hpp"
0011 #include "detray/geometry/mask.hpp"
0012 #include "detray/geometry/shapes.hpp"
0013 
0014 // Detray plugin include(s)
0015 #include "detray/plugins/svgtools/conversion/surface.hpp"
0016 #include "detray/plugins/svgtools/writer.hpp"
0017 
0018 // Detray test include(s)
0019 #include "detray/test/common/build_toy_detector.hpp"
0020 #include "detray/test/framework/types.hpp"
0021 
0022 // Vecmem include(s)
0023 #include <vecmem/memory/host_memory_resource.hpp>
0024 
0025 // Actsvg include(s)
0026 #include <actsvg/core.hpp>
0027 #include <actsvg/meta.hpp>
0028 
0029 // GTest include(s).
0030 #include <gtest/gtest.h>
0031 
0032 // System include(s)
0033 #include <array>
0034 #include <string>
0035 
0036 GTEST_TEST(svgtools, masks) {
0037   // This tests demonstrate the different masks that can be visualized.
0038 
0039   // Create the axes.
0040   const auto axes = actsvg::draw::x_y_axes("axes", {-250, 250}, {-250, 250},
0041                                            actsvg::style::stroke());
0042 
0043   using toy_detector_t = detray::detector<detray::test::toy_metadata>;
0044   using algebra_t = typename toy_detector_t::algebra_type;
0045   using transform3_t = detray::dtransform3D<algebra_t>;
0046 
0047   const detray::dvector3D<algebra_t> tr{50.f, 100.f, 0.f};
0048   const transform3_t transform(tr);
0049   const actsvg::views::x_y view{};
0050 
0051   // Visualize a 2D annulus.
0052   // e_min_r, e_max_r, e_min_phi_rel, e_max_phi_rel, e_average_phi, e_shift_x,
0053   // e_shift_y
0054   detray::mask<detray::annulus2D, algebra_t> ann2D{0u,   100.f, 200.f, -0.5f,
0055                                                    0.5f, 0.f,   4.f,   30.f};
0056   const auto ann2D_proto =
0057       detray::svgtools::conversion::surface(transform, ann2D);
0058   const auto ann2D_svg = actsvg::display::surface("", ann2D_proto, view);
0059   detray::svgtools::write_svg("test_svgtools_annulus2D", {axes, ann2D_svg});
0060 
0061   // Visualize a 2D cylinder.
0062   // e_r, e_lower_z, e_upper_z
0063   detray::mask<detray::cylinder2D, algebra_t> cyl2D{0u, 100.f, -10.f, 10.f};
0064   const auto cyl2D_proto =
0065       detray::svgtools::conversion::surface(transform, cyl2D);
0066   const auto cyl2D_svg = actsvg::display::surface("", cyl2D_proto, view);
0067   detray::svgtools::write_svg("test_svgtools_cylinder2D", {axes, cyl2D_svg});
0068 
0069   // Visualize a 2D rectangle.
0070   // e_half_x, e_half_y
0071   detray::mask<detray::rectangle2D, algebra_t> rec2D{0u, 100.f, 100.f};
0072   const auto rec2D_proto =
0073       detray::svgtools::conversion::surface(transform, rec2D);
0074   const auto rec2D_svg = actsvg::display::surface("", rec2D_proto, view);
0075   detray::svgtools::write_svg("test_svgtools_rectangle2D", {axes, rec2D_svg});
0076 
0077   // Visualize a 2D ring.
0078   // e_inner_r, e_outer_r
0079   detray::mask<detray::ring2D, algebra_t> rin2D{0u, 50.f, 100.f};
0080   const auto rin2D_proto =
0081       detray::svgtools::conversion::surface(transform, rin2D);
0082   const auto rin2D_svg = actsvg::display::surface("", rin2D_proto, view);
0083   detray::svgtools::write_svg("test_svgtools_ring2D", {axes, rin2D_svg});
0084 
0085   // Visualize a 2D trapezoid.
0086   // e_half_length_0, e_half_length_1, e_half_length_2, e_divisor
0087   detray::mask<detray::trapezoid2D, algebra_t> tra2D{0u, 100.f, 50.f, 200.f,
0088                                                      1.f / 400.f};
0089   const auto tra2D_proto =
0090       detray::svgtools::conversion::surface(transform, tra2D);
0091   const auto tra2D_svg = actsvg::display::surface("", tra2D_proto, view);
0092   detray::svgtools::write_svg("test_svgtools_trapezoid2D", {axes, tra2D_svg});
0093 
0094   // Visualize a line.
0095   // e_cross_section, e_half_z
0096   detray::mask<detray::line_circular, algebra_t> lin2D{0u, 10.f, 100.f};
0097   const auto lin2D_proto =
0098       detray::svgtools::conversion::surface(transform, lin2D);
0099   const auto lin2D_svg = actsvg::display::surface("", lin2D_proto, view);
0100   detray::svgtools::write_svg("test_svgtools_line2D", {axes, lin2D_svg});
0101 }