Skip to content
Snippets Groups Projects
Commit 4a413fa5 authored by Johannes Schumann's avatar Johannes Schumann
Browse files

Resolve "Add detector center option to geometry"

parent 03b9434a
No related branches found
No related tags found
1 merge request!34Resolve "Add detector center option to geometry"
...@@ -82,14 +82,21 @@ class CanVolume(DetectorVolume): ...@@ -82,14 +82,21 @@ class CanVolume(DetectorVolume):
Cylinder bottom z position Cylinder bottom z position
zmax: float [m] (default: 476.5) zmax: float [m] (default: 476.5)
Cylinder top z position Cylinder top z position
detector_center: tuple [m] (default: (0.0, 0.0) )
Detector center position in the xy-plane
""" """
def __init__(self, radius=403.4, zmin=0.0, zmax=476.5): def __init__(self,
radius=403.4,
zmin=0.0,
zmax=476.5,
detector_center=(0., 0.)):
super().__init__() super().__init__()
self._radius = radius self._radius = radius
self._zmin = zmin self._zmin = zmin
self._zmax = zmax self._zmax = zmax
self._volume = self._calc_volume() self._volume = self._calc_volume()
self._detector_center = detector_center
def _calc_volume(self): def _calc_volume(self):
return np.pi * (self._zmax - self._zmin) * np.power(self._radius, 2) return np.pi * (self._zmax - self._zmin) * np.power(self._radius, 2)
...@@ -97,8 +104,8 @@ class CanVolume(DetectorVolume): ...@@ -97,8 +104,8 @@ class CanVolume(DetectorVolume):
def random_pos(self): def random_pos(self):
r = self._radius * np.sqrt(np.random.uniform(0, 1)) r = self._radius * np.sqrt(np.random.uniform(0, 1))
phi = np.random.uniform(0, 2 * np.pi) phi = np.random.uniform(0, 2 * np.pi)
pos_x = r * np.cos(phi) pos_x = r * np.cos(phi) + self._detector_center[0]
pos_y = r * np.sin(phi) pos_y = r * np.sin(phi) + self._detector_center[1]
pos_z = np.random.uniform(self._zmin, self._zmax) pos_z = np.random.uniform(self._zmin, self._zmax)
return (pos_x, pos_y, pos_z) return (pos_x, pos_y, pos_z)
......
...@@ -17,12 +17,14 @@ import numpy as np ...@@ -17,12 +17,14 @@ import numpy as np
class TestGeneralGeometry(unittest.TestCase): class TestGeneralGeometry(unittest.TestCase):
def test_abstract_init(self): def test_abstract_init(self):
with self.assertRaises(TypeError) as ctx: with self.assertRaises(TypeError) as ctx:
d = DetectorVolume() d = DetectorVolume()
class TestSphere(unittest.TestCase): class TestSphere(unittest.TestCase):
def setUp(self): def setUp(self):
self.detector_geometry = SphericalVolume(20, (2, 2, 2)) self.detector_geometry = SphericalVolume(20, (2, 2, 2))
...@@ -44,9 +46,25 @@ class TestSphere(unittest.TestCase): ...@@ -44,9 +46,25 @@ class TestSphere(unittest.TestCase):
class TestCan(unittest.TestCase): class TestCan(unittest.TestCase):
def setUp(self): def setUp(self):
self.detector_geometry = CanVolume() self.detector_geometry = CanVolume()
def test_volume(self): def test_volume(self):
volume = self.detector_geometry.volume volume = self.detector_geometry.volume
self.assertAlmostEqual(volume, 243604084.28, 2) self.assertAlmostEqual(volume, 243604084.28, 2)
def test_position(self):
np.random.seed(1234)
pos = self.detector_geometry.random_pos()
self.assertAlmostEqual(pos[0], -127.07940486491587)
self.assertAlmostEqual(pos[1], -122.54421157149173)
self.assertAlmostEqual(pos[2], 208.57726763689004)
def test_position(self):
np.random.seed(1234)
detector_geometry = CanVolume(detector_center=(100, 100))
pos = detector_geometry.random_pos()
self.assertAlmostEqual(pos[0], -27.07940486491587)
self.assertAlmostEqual(pos[1], -22.54421157149173)
self.assertAlmostEqual(pos[2], 208.57726763689004)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment