From 5a42d5bfc46fb66457d35be5e8fcbdcd55a8e247 Mon Sep 17 00:00:00 2001 From: David Hammer <dhammer@mailbox.org> Date: Fri, 8 Apr 2022 14:12:05 +0200 Subject: [PATCH] Including the individual geometry devices Wow, I guess this was a slight oversight --- src/calng/geometries/Agipd1MGeometry.py | 15 ++++++ src/calng/geometries/Dssc1MGeometry.py | 15 ++++++ src/calng/geometries/JungfrauGeometry.py | 62 ++++++++++++++++++++++++ src/calng/geometries/Lpd1MGeometry.py | 15 ++++++ src/calng/geometries/__init__.py | 1 + 5 files changed, 108 insertions(+) create mode 100644 src/calng/geometries/Agipd1MGeometry.py create mode 100644 src/calng/geometries/Dssc1MGeometry.py create mode 100644 src/calng/geometries/JungfrauGeometry.py create mode 100644 src/calng/geometries/Lpd1MGeometry.py create mode 100644 src/calng/geometries/__init__.py diff --git a/src/calng/geometries/Agipd1MGeometry.py b/src/calng/geometries/Agipd1MGeometry.py new file mode 100644 index 00000000..dd800ad7 --- /dev/null +++ b/src/calng/geometries/Agipd1MGeometry.py @@ -0,0 +1,15 @@ +import extra_geom + +from ..base_geometry import ManualQuadrantsGeometryBase, make_quadrant_corners_node + + +class Agipd1MGeometry(ManualQuadrantsGeometryBase): + geometry_class = extra_geom.AGIPD_1MGeometry + quadrantCorners = make_quadrant_corners_node( + [ + (-525, 625), + (-550, -10), + (520, -160), + (542.5, 475), + ] + ) diff --git a/src/calng/geometries/Dssc1MGeometry.py b/src/calng/geometries/Dssc1MGeometry.py new file mode 100644 index 00000000..55548120 --- /dev/null +++ b/src/calng/geometries/Dssc1MGeometry.py @@ -0,0 +1,15 @@ +import extra_geom + +from ..base_geometry import ManualQuadrantsGeometryBase, make_quadrant_corners_node + + +class Dssc1MGeometry(ManualQuadrantsGeometryBase): + geometry_class = extra_geom.DSSC_1MGeometry + quadrantCorners = make_quadrant_corners_node( + [ + (-130, 5), + (-130, -125), + (5, -125), + (5, 5), + ] + ) diff --git a/src/calng/geometries/JungfrauGeometry.py b/src/calng/geometries/JungfrauGeometry.py new file mode 100644 index 00000000..c447accc --- /dev/null +++ b/src/calng/geometries/JungfrauGeometry.py @@ -0,0 +1,62 @@ +import extra_geom +import numpy as np +from karabo.middlelayer import Hash + +from ..base_geometry import ManualModuleListGeometryBase, make_manual_module_list_node + + +class JungfrauGeometry(ManualModuleListGeometryBase): + geometry_class = extra_geom.JUNGFRAUGeometry + moduleList = make_manual_module_list_node( + [ + Hash("posX", x, "posY", y, "orientX", ox, "orientY", oy) + for (x, y, ox, oy) in [ + (95, 564, -1, -1), + (95, 17, -1, -1), + (95, -530, -1, -1), + (95, -1077, -1, -1), + (-1125, -1078, 1, 1), + (-1125, -531, 1, 1), + (-1125, 16, 1, 1), + (-1125, 563, 1, 1), + ] + ] + ) + + def _update_manual_from_current(self): + self.moduleList.modules = [ + self._guess_offset_and_orientation(module) + for module in self.geometry.modules + ] + + def _guess_offset_and_orientation(self, module, asic_gap=2): + # note: if this generalizes, make classmethod of ManualModuleListGeometryBase + # Working backwards from from_module_positions from detectors.py in extra_geom + corners = np.asarray([tile.corner_pos for tile in module]) + row_1 = corners[0:4] + row_2 = corners[4:8] + horizontal_diff = np.diff([row_1[:, 0], row_2[:, 0]]) + vertical_diff = np.diff([row_1[:, 1], row_2[:, 1]], axis=0) + + if np.all(horizontal_diff > 0): + x_orientation = 1 + else: + # TODO: maybe warn if also not all < 0 + x_orientation = -1 + + if np.all(vertical_diff > 0): + y_orientation = 1 + else: + y_orientation = -1 + + corner = module[0].corner_pos + module_width = (4 * self.geometry_class.frag_fs_pixels) + (3 * asic_gap) + module_height = (2 * self.geometry_class.frag_ss_pixels) + asic_gap + corner_x = corner[0] / self.geometry_class.pixel_size - ( + module_width if x_orientation == -1 else 0 + ) + corner_y = corner[1] / self.geometry_class.pixel_size - ( + module_height if y_orientation == -1 else 0 + ) + + return (corner_x, corner_y, x_orientation, y_orientation) diff --git a/src/calng/geometries/Lpd1MGeometry.py b/src/calng/geometries/Lpd1MGeometry.py new file mode 100644 index 00000000..39a5d043 --- /dev/null +++ b/src/calng/geometries/Lpd1MGeometry.py @@ -0,0 +1,15 @@ +import extra_geom + +from ..base_geometry import ManualQuadrantsGeometryBase, make_quadrant_corners_node + + +class Lpd1MGeometry(ManualQuadrantsGeometryBase): + geometry_class = extra_geom.LPD_1MGeometry + quadrantCorners = make_quadrant_corners_node( + [ + (11.4, 299), + (-11.5, 8), + (254.5, -16), + (278.5, 275), + ] + ) diff --git a/src/calng/geometries/__init__.py b/src/calng/geometries/__init__.py new file mode 100644 index 00000000..b82477f1 --- /dev/null +++ b/src/calng/geometries/__init__.py @@ -0,0 +1 @@ +from . import Agipd1MGeometry, Dssc1MGeometry, Lpd1MGeometry, JungfrauGeometry -- GitLab