l200geom package¶
Subpackages¶
- l200geom.materials package
OpticalMaterialRegistryOpticalMaterialRegistry._abc_implOpticalMaterialRegistry._tpb()OpticalMaterialRegistry.acrylOpticalMaterialRegistry.borosilicateOpticalMaterialRegistry.liquidargonOpticalMaterialRegistry.metal_caps_goldOpticalMaterialRegistry.metal_copperOpticalMaterialRegistry.metal_siliconOpticalMaterialRegistry.metal_steelOpticalMaterialRegistry.metal_tantalumOpticalMaterialRegistry.nylonOpticalMaterialRegistry.peekOpticalMaterialRegistry.penOpticalMaterialRegistry.pmmaOpticalMaterialRegistry.pmma_outOpticalMaterialRegistry.pmt_airOpticalMaterialRegistry.ps_fibersOpticalMaterialRegistry.silicaOpticalMaterialRegistry.tetratexOpticalMaterialRegistry.tpb_on_fibersOpticalMaterialRegistry.tpb_on_nylonOpticalMaterialRegistry.tpb_on_tetratexOpticalMaterialRegistry.ultemOpticalMaterialRegistry.vm2000OpticalMaterialRegistry.water
- Submodules
- l200geom.materials.ketek_sipm module
- l200geom.materials.surfaces module
OpticalSurfaceRegistryOpticalSurfaceRegistry.lar_to_penOpticalSurfaceRegistry.lar_to_tpbOpticalSurfaceRegistry.to_copperOpticalSurfaceRegistry.to_germaniumOpticalSurfaceRegistry.to_photocathodeOpticalSurfaceRegistry.to_pmt_steelOpticalSurfaceRegistry.to_sipm_siliconOpticalSurfaceRegistry.to_tetratexOpticalSurfaceRegistry.to_vm2000OpticalSurfaceRegistry.water_to_vm2000
Submodules¶
l200geom.calibration module¶
- l200geom.calibration._get_cu_cap(b, dimens)¶
- Parameters:
dimens (AttrsDict)
- Return type:
tuple[LogicalVolume, LogicalVolume | None]
- l200geom.calibration._get_ta_absorber(b)¶
- Parameters:
- l200geom.calibration._place_source(b, suffix, xy, delta_z, source_type, cu_absorber, bare=False)¶
Place a single source container.
- delta_z
to source container holder top from top plate top
- source_type
controls the interior design of the source container
- cu_absorber
include a copper absorber cap of the given dimensions. The dimensions have to be the same for all sources in this geometry.
- bare
Do not encapsulate the source. only use if you know what you do; this does not correspond to any physical source geometry used in LEGEND.
- l200geom.calibration._place_ta_absorber(b, suffix, xy, delta_z)¶
Place tantalum absorber plus source container.
- delta_z
to absorber top from top plate top
- l200geom.calibration._sis_to_pygeoml200(sis_coord)¶
- l200geom.calibration.place_calibration_system(b)¶
Construct LEGEND-200 calibration system.
- Parameters:
- Return type:
None
l200geom.cli module¶
- l200geom.cli._config_or_cli_arg(args, config, name, default)¶
Fallback of cli args, to config file, and to default value (in this order).
- l200geom.cli._parse_assemblies(arg)¶
Parse an argument string into a set of assemblies to build the geometry for.
- l200geom.cli._parse_cli_args(argv=None)¶
l200geom.core module¶
- class l200geom.core.InstrumentationData(mother_lv, mother_pv, materials, registry, channelmap, special_metadata, runtime_config, top_plate_z_pos)¶
Bases:
NamedTupleCreate new instance of InstrumentationData(mother_lv, mother_pv, materials, registry, channelmap, special_metadata, runtime_config, top_plate_z_pos)
- Parameters:
mother_lv (LogicalVolume)
mother_pv (PhysicalVolume)
materials (OpticalMaterialRegistry)
registry (Registry)
channelmap (AttrsDict)
special_metadata (AttrsDict)
runtime_config (AttrsDict)
top_plate_z_pos (float)
- channelmap: AttrsDict¶
LEGEND-200 channel map containing germanium/spms detectors configuration in the string and their geometry.
- materials: OpticalMaterialRegistry¶
Material properties for common materials
- mother_lv: LogicalVolume¶
Argon LogicalVolume instance in which all components are to be placed.
- mother_pv: PhysicalVolume¶
Argon PhysicalVolume instance in which all components are to be placed.
- runtime_config: AttrsDict¶
Volatile runtime config, settings that are not tied to a specific detector configuration.
- l200geom.core._assign_common_copper_surface(b)¶
- Parameters:
- Return type:
None
- l200geom.core.construct(assemblies={'calibration', 'fibers', 'strings', 'top', 'wlsr'}, pmt_configuration_mv='LEGEND200', use_detailed_fiber_model=False, config=None, public_geometry=False)¶
Construct the LEGEND-200 geometry and return the pyg4ometry Registry containing the world volume.
l200geom.cryo module¶
Construct the LEGEND-200/GERDA cryostat including the liquid argon volume.
Dimensions from [Knoepfle2022] and P. Krause.
T. Knöpfle and B. Schwingenheuer “Design and Performance of the GERDA Low-Background Cryostat for Operation in Water” In: Journal of Instrumentation 17 P02038 (2022). https://doi.org/10.1088/1748-0221/17/02/P02038
- l200geom.cryo.construct_argon(lar_material, reg)¶
Construct an approximate LEGEND-200 argon volume.
- Returns:
logical volume instance and height of the cryostat neck relative to the origin of the argon volume.
.. note:: – the constructed volume’s center (i.e. for children placed at 0,0,0) is not the barycenter of the volume, but the center of the central tubular section of the cryostat.
- Parameters:
- Return type:
- l200geom.cryo.construct_cryostat(cryostat_material, reg)¶
- Parameters:
- Return type:
- l200geom.cryo.place_argon(lar_lv, cryostat_lv, cryostat_displacement_z, reg)¶
- Parameters:
lar_lv (LogicalVolume)
cryostat_lv (LogicalVolume)
cryostat_displacement_z (float)
reg (Registry)
- Return type:
- l200geom.cryo.place_cryostat(cryostat_lv, wl, cryostat_displacement_z, reg)¶
- Parameters:
cryostat_lv (LogicalVolume)
wl (LogicalVolume)
cryostat_displacement_z (float)
reg (Registry)
- Return type:
l200geom.fibers module¶
- class l200geom.fibers.FiberModuleData(barrel: 'str', name: 'str', tpb_thickness: 'float', channel_top_name: 'str | None' = None, channel_bottom_name: 'str | None' = None, channel_top_rawid: 'str | None' = None, channel_bottom_rawid: 'str | None' = None)¶
Bases:
object- Parameters:
- class l200geom.fibers.ModuleFactoryBase(radius_mm, fiber_length_mm, fiber_count_per_module, bend_radius_mm, number_of_modules, zero_angle_module, z_displacement_mm, barrel, materials, registry)¶
Bases:
ABCCreate a fiber module factory.
- Parameters:
radius_mm (float) – radius of the fiber barrel
fiber_length_mm (float) – length of the straight section of this fiber module
fiber_count_per_module (int) – number of single fibers per module
bend_radius_mm (float | None) – radius of the bottom bend, or None if the fibers are not bent at the bottom end.
number_of_modules (int) – number of modules that cover the full circle
zero_angle_module (int) – module number of the module with a zero angle in polar coordinates (at the center of the module).
z_displacement_mm (float) – displacement of the top of the fiber barrel, relative to the global zero point.
barrel (str) – barrel name
materials (materials.OpticalMaterialRegistry)
registry (g4.Registry)
- FIBER_DIM = 1¶
- FIBER_THICKNESS_CL1 = 0.04¶
- FIBER_THICKNESS_CL2 = 0.02¶
- SIPM_GAP = 0.05¶
- SIPM_GAP_SIDE = 0.01¶
- SIPM_HEIGHT = 1¶
- SIPM_OUTER_EXTRA = 0.2¶
- SIPM_OVERLAP = 0.3¶
- _abc_impl = <_abc._abc_data object>¶
- _add_tpb_surfaces(fiber_pvs, mother_pv)¶
- Parameters:
fiber_pvs (list[PhysicalVolume])
mother_pv (LogicalVolume)
- _cached_sipm_volumes()¶
Creates (dummy) SiPM volumes for use at the top/bottom of straight fiber sections.
- Return type:
None
- _create_sipm(module_num, fibers, is_top, mother_lv, mother_pv, sipm_name, sipm_detector_id, z_displacement_straight)¶
Creates a (dummy) SiPM physical volume for use at the top/bottom of straight fiber sections.
- Parameters:
module_num (int)
fibers (list[PhysicalVolume])
is_top (bool)
mother_lv (LogicalVolume)
mother_pv (PhysicalVolume)
sipm_name (str)
sipm_detector_id (int)
z_displacement_straight (float)
- Return type:
None
- abstract create_module(mod, mother_lv, mother_pv)¶
- Parameters:
mod (FiberModuleData)
mother_lv (LogicalVolume)
mother_pv (PhysicalVolume)
- Return type:
None
- class l200geom.fibers.ModuleFactorySegment(radius_mm, fiber_length_mm, fiber_count_per_module, bend_radius_mm, number_of_modules, zero_angle_module, z_displacement_mm, barrel, materials, registry)¶
Bases:
ModuleFactoryBaseCreate a fiber module factory.
- Parameters:
radius_mm (float) – radius of the fiber barrel
fiber_length_mm (float) – length of the straight section of this fiber module
fiber_count_per_module (int) – number of single fibers per module
bend_radius_mm (float | None) – radius of the bottom bend, or None if the fibers are not bent at the bottom end.
number_of_modules (int) – number of modules that cover the full circle
zero_angle_module (int) – module number of the module with a zero angle in polar coordinates (at the center of the module).
z_displacement_mm (float) – displacement of the top of the fiber barrel, relative to the global zero point.
barrel (str) – barrel name
materials (materials.OpticalMaterialRegistry)
registry (g4.Registry)
- _abc_impl = <_abc._abc_data object>¶
- _cached_fiber_volumes()¶
Create solids, logical and physical volumes for the fibers, as specified by the parameters of this instance.
- Return type:
None
- _cached_sipm_volumes_bend()¶
Creates (dummy) SiPM volumes for use at the bottom of bent fiber sections.
- Return type:
None
- _cached_tpb_coating_volume(tpb_thickness_nm, bend=False)¶
Create and cache a TPB coating layer of the specified thickness.
The TPB-Layer is dependent on the module (i.e. the applied thickness varies slightly), so we cannot cache it globally on this instance.
- Parameters:
- Return type:
- _get_bend_polycone(inner_r, outer_r)¶
In the segmented model, there is no fundamental shape for the fiber bent available, so we use a polycone as a replacement.
- Parameters:
- Return type:
tuple[_Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes], _Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]]
- create_module(mod, mother_lv, mother_pv)¶
- Parameters:
mod (FiberModuleData)
mother_lv (LogicalVolume)
mother_pv (PhysicalVolume)
- Return type:
None
- class l200geom.fibers.ModuleFactorySingleFibers(radius_mm, fiber_length_mm, fiber_count_per_module, bend_radius_mm, number_of_modules, zero_angle_module, z_displacement_mm, barrel, materials, registry)¶
Bases:
ModuleFactoryBaseCreate a fiber module factory.
- Parameters:
radius_mm (float) – radius of the fiber barrel
fiber_length_mm (float) – length of the straight section of this fiber module
fiber_count_per_module (int) – number of single fibers per module
bend_radius_mm (float | None) – radius of the bottom bend, or None if the fibers are not bent at the bottom end.
number_of_modules (int) – number of modules that cover the full circle
zero_angle_module (int) – module number of the module with a zero angle in polar coordinates (at the center of the module).
z_displacement_mm (float) – displacement of the top of the fiber barrel, relative to the global zero point.
barrel (str) – barrel name
materials (materials.OpticalMaterialRegistry)
registry (g4.Registry)
- ALLOWED_DELTA_LENGTHS = array([-7.6, -5.7, -3.8, -1.9, 0. , 1.9, 3.8, 5.7, 7.6])¶
- _abc_impl = <_abc._abc_data object>¶
- _cached_fiber_volumes()¶
Create solids, logical and physical volumes for the fibers, as specified by the parameters of this instance.
- Return type:
None
- _cached_sipm_volumes_bend()¶
Creates (dummy) SiPM volumes for use at the bottom of bent fiber sections.
- Return type:
None
- _cached_tpb_coating_volume(tpb_thickness_nm, bend=False, delta_length=0)¶
Create and cache a TPB coating layer of the specified thickness.
The TPB-Layer is dependent on the module (i.e. the applied thickness varies slightly), so we cannot cache it globally on this instance.
- Parameters:
- Return type:
- create_module(mod, mother_lv, mother_pv)¶
- Parameters:
mod (FiberModuleData)
mother_lv (LogicalVolume)
mother_pv (PhysicalVolume)
- Return type:
None
- l200geom.fibers.get_fiber_support_inner(b)¶
- Parameters:
- Return type:
- l200geom.fibers.get_fiber_support_outer(b)¶
- Parameters:
- Return type:
- l200geom.fibers.place_fiber_modules(fiber_metadata, b, use_detailed_fiber_model=False)¶
Construct LEGEND-200 liquid argon instrumentation.
l200geom.hpge_strings module¶
- class l200geom.hpge_strings.HPGeDetUnit(name: 'str', manufacturer: 'str', rawid: 'int', lv: 'geant4.LogicalVolume', height: 'float', radius: 'float', baseplate: 'str', rodlength: 'float', rodlength_cold: 'float', meta: 'AttrsDict')¶
Bases:
object- Parameters:
- lv: LogicalVolume¶
- l200geom.hpge_strings._add_nms_surfaces(nms_pv, mother_pv, mats, reg)¶
- Parameters:
nms_pv (PhysicalVolume)
mother_pv (LogicalVolume)
mats (OpticalMaterialRegistry)
reg (Registry)
- l200geom.hpge_strings._add_pen_surfaces(pen_pv, mother_pv, mats, reg)¶
- Parameters:
pen_pv (PhysicalVolume)
mother_pv (LogicalVolume)
mats (OpticalMaterialRegistry)
reg (Registry)
- l200geom.hpge_strings._get_hv_cable(cable_thickness, cable_length, b)¶
- l200geom.hpge_strings._get_insulator(insulator_du_holder_flap_thickness, insulator_top_length, b)¶
- l200geom.hpge_strings._get_nylon_mini_shroud(radius, length, top_open, materials, registry, min_radius=0)¶
Create a nylon/TPB funnel of the given outer dimensions, which will be closed at the bottom.
Note
this can also be used for calibration tubes.
- Parameters:
- Return type:
- l200geom.hpge_strings._get_signal_cable(cable_thickness, cable_length, b)¶
- l200geom.hpge_strings._get_signal_clamp_and_lmfe(clamp_thickness, b)¶
- Parameters:
clamp_thickness (float)
- l200geom.hpge_strings._get_support_structure(size, b)¶
Get the (simplified) support structure and the tristar of the requested size.
Note
Both models’ coordinate origins are a the top face of the tristar structure.
- Parameters:
size (str)
- Return type:
- l200geom.hpge_strings._get_weldment(weldment_flap_thickness, b)¶
- Parameters:
weldment_flap_thickness (float)
- l200geom.hpge_strings._hpge_unit_get_z(bottom, det_unit)¶
- Parameters:
bottom (float)
det_unit (HPGeDetUnit)
- Return type:
- l200geom.hpge_strings._place_empty_string(string_id, b)¶
Place an empty string (i.e. with no HPGe detectors), optionally with a counterweight.
- Parameters:
string_id (str)
- l200geom.hpge_strings._place_front_end_and_insulators(det_unit, string_info, b, z_pos, thickness, parts_origin)¶
- Parameters:
det_unit (HPGeDetUnit)
string_info (dict)
z_pos (dict)
thickness (dict)
parts_origin (dict)
- l200geom.hpge_strings._place_hpge_string(string_id, string_slots, b)¶
Place a single HPGe detector string (with at least one detector).
This includes all PEN plates and the nylon shroud around the string.
- l200geom.hpge_strings._place_hpge_unit(z_unit_bottom, det_unit, string_info, b)¶
- Parameters:
z_unit_bottom (float)
det_unit (HPGeDetUnit)
string_info (AttrsDict)
l200geom.metadata module¶
- class l200geom.metadata.PublicMetadataProxy¶
Bases:
objectProvides proxies to transparently replace legend hardware metadata with sample data.
- update_special_metadata(special_metadata)¶
- Return type:
None
l200geom.top module¶
- l200geom.top.place_top_plate(b)¶
Construct LEGEND-200 copper top plate.
- Parameters:
- Return type:
None
l200geom.utils module¶
- l200geom.utils._read_model(file, name, material, b)¶
Construct a logical volume for an STL mesh.
Note
This function honours the
no_meshesruntime configuration, which can either beTrueto disable all meshes, or be a list of logical volume names to disable mesh loading.
l200geom.watertank module¶
Construct the LEGEND-200/GERDA watertank including the water volume and the reflective foil VM2000.
- l200geom.watertank.construct_air_buffer(reg, air_material)¶
- Parameters:
- Return type:
- l200geom.watertank.construct_pillbox(reg, pillbox_material)¶
- Parameters:
- Return type:
- l200geom.watertank.construct_tank(reg, tank_material)¶
- Parameters:
- Return type:
- l200geom.watertank.construct_water(reg, water_material)¶
- Parameters:
- Return type:
- l200geom.watertank.insert_muon_veto(reg, world_lv, tank_z_displacement, cryo_z_displacement, mats, pmt_configuration_mv='LEGEND200')¶
- Parameters:
reg (Registry)
world_lv (LogicalVolume)
tank_z_displacement (float)
cryo_z_displacement (float)
mats (OpticalMaterialRegistry)
pmt_configuration_mv (str)
- l200geom.watertank.insert_pmts(reg, pmt_steel_material, cathode_al, pmt_air_material, surfaces, water_lv, water_pv, acryl_material, borosilicate_material, pmt_configuration='LEGEND200')¶
- Parameters:
reg (g4.Registry)
pmt_steel_material (g4.Material | str)
cathode_al (g4.Material | str)
pmt_air_material (g4.Material)
surfaces (materials.surfaces.OpticalSurfaceRegistry)
water_lv (g4.LogicalVolume)
water_pv (g4.PhysicalVolume)
acryl_material (g4.Material)
borosilicate_material (g4.Material)
pmt_configuration (str)
- l200geom.watertank.insert_vm2000(reg, vm2000_material, surfaces, water_lv, water_pv, manhole_pillbox, manhole_rotation, man_hole_offset, cryo_displacement_z)¶
- Parameters:
reg (g4.Registry)
vm2000_material (g4.Material)
surfaces (materials.surfaces.OpticalSurfaceRegistry)
water_lv (g4.LogicalVolume)
water_pv (g4.PhysicalVolume)
manhole_pillbox (g4.solid.Union)
manhole_rotation (list)
man_hole_offset (float)
cryo_displacement_z (float)
- l200geom.watertank.place_air_buffer(reg, air_buffer_lv, water_lv)¶
- Parameters:
reg (Registry)
air_buffer_lv (LogicalVolume)
water_lv (LogicalVolume)
- Return type:
- l200geom.watertank.place_pillbox(reg, pillbox_lv, water_lv)¶
- Parameters:
reg (Registry)
pillbox_lv (LogicalVolume)
water_lv (LogicalVolume)
- Return type:
- l200geom.watertank.place_tank(reg, water_tank_lv, world_lv, tank_offset)¶
- Parameters:
reg (Registry)
water_tank_lv (LogicalVolume)
world_lv (LogicalVolume)
tank_offset (float)
- Return type:
- l200geom.watertank.place_water(reg, water_lv, tank_lv)¶
- Parameters:
reg (Registry)
water_lv (LogicalVolume)
tank_lv (LogicalVolume)
- Return type:
l200geom.wlsr module¶
Construct the LEGEND-200 Wavelength-Shifting Reflector (WLSR).
Dimensions mainly from [Krause2023] (general construction) and [Araujo2022] (TPB layer thickness).
P. Krause “Shining Light on Backgrounds: An Advanced Liquid Argon Scintillation Light Detector for Boosting Background Suppression in LEGEND’s Neutrinoless Double Beta Decay Search”. PhD thesis (2023).
G. R. Araujo et al. “R&D of wavelength-shifting reflectors and characterization of the quantum efficiency of tetraphenyl butadiene and polyethylene naphthalate in liquid argon.” In: The European Physical Journal C 82.5 (May 2022). https://doi.org/10.1140/epjc/s10052-022-10383-0
- l200geom.wlsr._add_surfaces_wlsr(wlsr_ttx_pv, wlsr_tpb_pv, b)¶
- Parameters:
wlsr_ttx_pv (PhysicalVolume)
wlsr_tpb_pv (PhysicalVolume)
- l200geom.wlsr._construct_wlsr(mats, reg)¶
- Parameters:
mats (OpticalMaterialRegistry)
reg (Registry)
- Return type:
tuple[LogicalVolume, …]