Back to home page

EIC code displayed by LXR

 
 

    


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

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 # --------------------------------------------------------------------------
0010 # Function that will add types commonly needed for silicon trackers
0011 # --------------------------------------------------------------------------
0012 
0013 from ..impl import metadata
0014 from ..impl import Shape, Material, Accelerator, GridBin
0015 
0016 import logging
0017 
0018 """ Types that are typically needed for silicon tracker detectors """
0019 
0020 
0021 def add_silicon_tracker_defaults(
0022     metadata: metadata,
0023     use_mat_maps=False,
0024     use_homogeneous_mat=False,
0025     add_trapezoid=False,
0026 ):
0027     # Don't run more than once on given metadata (prevents spurious log entries)
0028     if metadata in add_silicon_tracker_defaults.clients:
0029         return
0030 
0031     add_silicon_tracker_defaults.clients.append(metadata)
0032 
0033     logger = logging.getLogger(__name__)
0034     logger.info("Define silicon tracker types:")
0035 
0036     # Cylindrical volume portals (barrel and endcap)
0037     logger.info("-> adding portal types")
0038     metadata.add_portal(Shape.CONCENTRIC_CYLINDER, type_id=2)
0039     metadata.add_portal(Shape.RING, type_id=3)
0040 
0041     # Acceleration struct for portals and passives
0042     metadata.add_accel_struct(
0043         Accelerator.BRUTE_FORCE, "portal", is_default=True, type_id=0
0044     )
0045     metadata.add_accel_struct(Accelerator.BRUTE_FORCE, "passive", type_id=0)
0046 
0047     # Barrel Detector
0048     logger.info("-> adding barrel section types")
0049     metadata.add_sensitive(Shape.RECTANGLE, type_id=0)
0050     metadata.add_accel_struct(
0051         Accelerator.CONCENTRIC_CYLINDER_GRID2D, "sensitive", type_id=1
0052     )
0053     if use_mat_maps:
0054         metadata.add_material(Material.CONCENTIRC_CYLINDER_MAP2D, type_id=0)
0055 
0056     # Endcap Detector
0057     logger.info("-> adding endcap section types")
0058     if add_trapezoid:
0059         metadata.add_sensitive(Shape.TRAPEZOID, type_id=1)
0060     metadata.add_accel_struct(Accelerator.DISC_GRID2D, "sensitive", type_id=2)
0061     if use_mat_maps:
0062         metadata.add_material(Material.DISC_MAP2D, type_id=1)
0063 
0064     # Material slabs can be used for both barrel and endcap surface shapes
0065     if use_homogeneous_mat:
0066         logger.info("-> requested homogeneous material types")
0067         metadata.add_material(Material.SLAB, type_id=3)
0068 
0069     # Volume accelerator for layered cylindrical detectors
0070     logger.info("-> adding detector volume acceleration structure")
0071     metadata.add_accel_struct(
0072         Accelerator.CYLINDER_GRID3D, "volume", grid_bin=GridBin.SINGLE, is_default=True
0073     )
0074 
0075     logger.info("Done")
0076 
0077 
0078 add_silicon_tracker_defaults.clients = []