From b381112c687383878f04f7a849c23b7cb4866069 Mon Sep 17 00:00:00 2001 From: Konstantin Malanchev Date: Tue, 20 Jan 2026 14:04:57 -0800 Subject: [PATCH 1/2] Add detector-centers.py --- scripts/detector-centers.py | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 scripts/detector-centers.py diff --git a/scripts/detector-centers.py b/scripts/detector-centers.py new file mode 100755 index 0000000..aef4b32 --- /dev/null +++ b/scripts/detector-centers.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +import argparse +from collections import defaultdict +from pathlib import Path + +import pyarrow as pa +import pyarrow.parquet as pq + + +def parse_args(argv=None): + """Parse command-line arguments.""" + parser = argparse.ArgumentParser( + description="Make a parquet file with LSSTCam detector center coorinates. " + "Requires LSST stack environment." + ) + parser.add_argument( + "--output", + type=Path, + default=Path(__file__).parent.parent / "data" / "dp2" / "public_parquet" / "detector_center.parquet", + help="The local path to save the parquet file " + "(default: 'data/dp2/public_parquet/detector_center.parquet').", + ) + return parser.parse_args(argv) + + +def main(argv=None): + """Produce detector centers parquet file""" + from lsst.afw import cameraGeom + from lsst.obs.lsst import LsstCam + + arg = parse_args(argv) + + camera = LsstCam().getCamera() + data = defaultdict(list) + for det in camera: + data["detector_id"].append(det.getId()) + + field_angle = det.getCenter(cameraGeom.FIELD_ANGLE) + data["field_angle_x"].append(field_angle.x) + data["field_angle_y"].append(field_angle.y) + + focal_plane = det.getCenter(cameraGeom.FOCAL_PLANE) + data["focal_plane_x"].append(focal_plane.x) + data["focal_plane_y"].append(focal_plane.y) + + table = pa.table(data) + pq.write_table(table, arg.output) + + +if __name__ == "__main__": + main() From 5479be890e5a25918b1a650e67f235bef1ee65e2 Mon Sep 17 00:00:00 2001 From: Konstantin Malanchev Date: Tue, 20 Jan 2026 17:09:13 -0500 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- scripts/detector-centers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/detector-centers.py b/scripts/detector-centers.py index aef4b32..d5545bb 100755 --- a/scripts/detector-centers.py +++ b/scripts/detector-centers.py @@ -11,7 +11,7 @@ def parse_args(argv=None): """Parse command-line arguments.""" parser = argparse.ArgumentParser( - description="Make a parquet file with LSSTCam detector center coorinates. " + description="Make a parquet file with LSSTCam detector center coordinates. " "Requires LSST stack environment." ) parser.add_argument( @@ -45,6 +45,7 @@ def main(argv=None): data["focal_plane_y"].append(focal_plane.y) table = pa.table(data) + arg.output.parent.mkdir(parents=True, exist_ok=True) pq.write_table(table, arg.output)