diff --git a/src/calng/geometries/Agipd1MGeometry.py b/src/calng/geometries/Agipd1MGeometry.py new file mode 100644 index 0000000000000000000000000000000000000000..dd800ad7195dec64388906a6c3e61de7e1b8a821 --- /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 0000000000000000000000000000000000000000..55548120ac07a68d54c88c5811d7eb2c22f6d116 --- /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 0000000000000000000000000000000000000000..c447accc7dec7857a5c858e3cfac62e001d2af29 --- /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 0000000000000000000000000000000000000000..39a5d043d800bed87c67cb8a1c38d4a1fa014606 --- /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 0000000000000000000000000000000000000000..b82477f10ce25946ac036ffbaee347e407cb5824 --- /dev/null +++ b/src/calng/geometries/__init__.py @@ -0,0 +1 @@ +from . import Agipd1MGeometry, Dssc1MGeometry, Lpd1MGeometry, JungfrauGeometry