From 2f5a4c5def0a6b3e8097fd6f679d5e8051ed8e3e Mon Sep 17 00:00:00 2001 From: Luigi Pertoldi Date: Wed, 4 Dec 2024 13:46:33 +0100 Subject: [PATCH] Allow for ignoring asymmetric features --- src/legendhpges/make_hpge.py | 11 +++++++++-- tests/test_det_profile.py | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/legendhpges/make_hpge.py b/src/legendhpges/make_hpge.py index 2b69921..b73d4f3 100644 --- a/src/legendhpges/make_hpge.py +++ b/src/legendhpges/make_hpge.py @@ -21,6 +21,7 @@ def make_hpge( metadata: str | dict | AttrsDict, registry: geant4.Registry = default_g4_registry, + allow_cylindrical_asymmetry: bool = True, **kwargs, ) -> geant4.LogicalVolume: """Construct an HPGe detector logical volume based on the detector metadata. @@ -32,6 +33,10 @@ def make_hpge( detector static properties. registry pyg4ometry Geant4 registry instance. + allow_cylindrical_asymmetry + if true, use derived classes for detectors that break cylindrical + symmetry. Otherwise, just build them using the base class (i.e. + ignoring the non-symmetric features). Other Parameters ---------------- @@ -80,7 +85,8 @@ def make_hpge( kwargs["name"] = gedet_meta.name if gedet_meta.type == "ppc": - if gedet_meta.name == "P00664B": + # asymmetric detector + if allow_cylindrical_asymmetry and gedet_meta.name == "P00664B": gedet = P00664B(gedet_meta, registry=registry, **kwargs) else: gedet = PPC(gedet_meta, registry=registry, **kwargs) @@ -91,7 +97,8 @@ def make_hpge( elif gedet_meta.type == "icpc": if gedet_meta.name == "V07646A": gedet = V07646A(gedet_meta, registry=registry, **kwargs) - elif gedet_meta.name == "V02160A": + # asymmetric detector + elif allow_cylindrical_asymmetry and gedet_meta.name == "V02160A": gedet = V02160A(gedet_meta, registry=registry, **kwargs) elif gedet_meta.name == "V02162B": gedet = V02162B(gedet_meta, registry=registry, **kwargs) diff --git a/tests/test_det_profile.py b/tests/test_det_profile.py index 0243d92..fd5cd7d 100644 --- a/tests/test_det_profile.py +++ b/tests/test_det_profile.py @@ -110,6 +110,13 @@ def test_make_p00664b(): assert len(gedet._decode_polycone_coord()[0]) == len(gedet.surfaces) + 1 + gedet = make_hpge( + configs.P00664B, name="P00664B_bis", allow_cylindrical_asymmetry=False + ) + assert isinstance(gedet, PPC) + assert not isinstance(gedet, P00664B) + assert isinstance(gedet.solid, geant4.solid.GenericPolycone) + def test_make_v02162b(): gedet = make_hpge(configs.V02162B)