From aed0faac8a181e105186d5f4c479d4ad435d0b96 Mon Sep 17 00:00:00 2001 From: Michael Langmayr Date: Wed, 17 Dec 2025 10:34:33 -0800 Subject: [PATCH] remove keck framework --- pyproject.toml | 3 +- src/keck_primitives/__init__.py | 0 src/keck_primitives/create_master_flat.py | 58 ------------------- src/keck_primitives/load_flat.py | 14 ----- src/keck_primitives/qa_plot.py | 17 ------ src/keck_primitives/save_corrected.py | 18 ------ src/keck_primitives/save_trace.py | 16 ----- src/keck_primitives/trace_slits.py | 13 ----- src/keck_primitives/utils.py | 15 ----- src/main.py | 1 - .../prefect_tasks/create_master_flat.py | 29 ++++------ src/workflows/prefect_tasks/load_flat.py | 14 +---- src/workflows/prefect_tasks/qa_plot.py | 16 +---- src/workflows/prefect_tasks/save_corrected.py | 17 +----- src/workflows/prefect_tasks/save_trace.py | 15 +---- src/workflows/prefect_tasks/trace_slits.py | 13 ++--- 16 files changed, 27 insertions(+), 232 deletions(-) delete mode 100644 src/keck_primitives/__init__.py delete mode 100644 src/keck_primitives/create_master_flat.py delete mode 100644 src/keck_primitives/load_flat.py delete mode 100644 src/keck_primitives/qa_plot.py delete mode 100644 src/keck_primitives/save_corrected.py delete mode 100644 src/keck_primitives/save_trace.py delete mode 100644 src/keck_primitives/trace_slits.py delete mode 100644 src/keck_primitives/utils.py diff --git a/pyproject.toml b/pyproject.toml index 082e8f1..1347c38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,8 +11,7 @@ dependencies = [ "astropy", "numpy", "matplotlib", - "scipy", - "keckdrpframework" + "scipy" ] requires-python = ">=3.9" authors = [ diff --git a/src/keck_primitives/__init__.py b/src/keck_primitives/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/keck_primitives/create_master_flat.py b/src/keck_primitives/create_master_flat.py deleted file mode 100644 index a7fb8cf..0000000 --- a/src/keck_primitives/create_master_flat.py +++ /dev/null @@ -1,58 +0,0 @@ -from keckdrpframework.primitives.base_img import BaseImg -from core.flat import create_master_flat - - -class CreateMasterFlat(BaseImg): - """ - Create a master flat correction - - This primitive wraps the create_master_flat function from core.flat. - """ - - def __init__(self, action, context): - BaseImg.__init__(self, action, context) - self.logger = context.pipeline_logger if hasattr(context, 'pipeline_logger') else None - - def _perform(self, args, config=None): - """ - Create master flat correction. - - Args: - args: Arguments object with: - - flat_data: 2D numpy array of flat field data - - slit_positions: Optional list of slit positions (for spectroscopic method) - - slit_width: Width around slit centers (default: 50) - - n_knots_spectral: Number of B-spline knots (default: 100) - - low_signal_threshold: Threshold for masking low signal (default: 30.0) - - edge_trim_pixels: Pixels to trim from slit edges (default: 5) - - Returns: - Arguments object with: - - correction: Master flat correction array - """ - if config is None: - config = {} - - flat_data = args["flat_data"] - method = args["method"] if "method" in args else "spectroscopic" - - # Get optional parameters for spectroscopic method - kwargs = {} - if method == "spectroscopic": - if "slit_positions" in args: - kwargs["slit_positions"] = args["slit_positions"] - kwargs["slit_width"] = args["slit_width"] if "slit_width" in args else 50 - kwargs["n_knots_spectral"] = args["n_knots_spectral"] if "n_knots_spectral" in args else 100 - kwargs["low_signal_threshold"] = args["low_signal_threshold"] if "low_signal_threshold" in args else 30.0 - kwargs["edge_trim_pixels"] = args["edge_trim_pixels"] if "edge_trim_pixels" in args else 5 - - if self.logger: - self.logger.info(f"Creating master flat using {method} method") - - # Create the master flat correction - correction = create_master_flat(flat_data, **kwargs) - - if self.logger: - self.logger.info(f"Master flat correction created successfully") - - return {"correction": correction} diff --git a/src/keck_primitives/load_flat.py b/src/keck_primitives/load_flat.py deleted file mode 100644 index d1bc566..0000000 --- a/src/keck_primitives/load_flat.py +++ /dev/null @@ -1,14 +0,0 @@ -from keckdrpframework.models.arguments import Arguments -from keckdrpframework.primitives.base_primitive import BasePrimitive -from core.flat import load_flat_frame - - -class LoadFlat(BasePrimitive): - def __init__(self, action, context): - super().__init__(action, context) - - def _perform(self, input_args: Arguments, config: dict) -> dict: - """Load a FITS file and return its data and header.""" - filepath = input_args["filepath"] - data, header = load_flat_frame(filepath) - return {"flat_data": data, "header": header} diff --git a/src/keck_primitives/qa_plot.py b/src/keck_primitives/qa_plot.py deleted file mode 100644 index bc16027..0000000 --- a/src/keck_primitives/qa_plot.py +++ /dev/null @@ -1,17 +0,0 @@ -from keckdrpframework.models.arguments import Arguments -from keckdrpframework.primitives.base_primitive import BasePrimitive -from core.qa import generate_qa_plot - - -class GenerateQAPlot(BasePrimitive): - def __init__(self, action, context): - super().__init__(action, context) - - def _perform(self, input_args: Arguments, config: dict) -> dict: - """Generate a QA plot for the normalized flat field data.""" - data = input_args["data"] - output_path = input_args["output_path"] - title = input_args["title"] if "title" in input_args else "Flat QA" - - result_path = generate_qa_plot(data, output_path, title) - return {"output_path": result_path} diff --git a/src/keck_primitives/save_corrected.py b/src/keck_primitives/save_corrected.py deleted file mode 100644 index 66da9e0..0000000 --- a/src/keck_primitives/save_corrected.py +++ /dev/null @@ -1,18 +0,0 @@ -from keckdrpframework.models.arguments import Arguments -from keckdrpframework.primitives.base_primitive import BasePrimitive -from core.flat import save_corrected_fits - - -class SaveCorrectedFits(BasePrimitive): - def __init__(self, action, context): - super().__init__(action, context) - - def _perform(self, input_args: Arguments, config: dict) -> dict: - """Apply the flat correction to the original data and save as a new FITS file.""" - original_data = input_args["original_data"] - correction = input_args["correction"] - header = input_args["header"] - output_path = input_args["output_path"] - - result_path = save_corrected_fits(original_data, correction, header, output_path) - return {"output_path": result_path} diff --git a/src/keck_primitives/save_trace.py b/src/keck_primitives/save_trace.py deleted file mode 100644 index b1760ce..0000000 --- a/src/keck_primitives/save_trace.py +++ /dev/null @@ -1,16 +0,0 @@ -from keckdrpframework.models.arguments import Arguments -from keckdrpframework.primitives.base_primitive import BasePrimitive -from core.tracing import save_trace_solution - - -class SaveTraceSolution(BasePrimitive): - def __init__(self, action, context): - super().__init__(action, context) - - def _perform(self, input_args: Arguments, config: dict) -> dict: - """Save the traced slit positions to a text file.""" - slit_positions = input_args["slit_positions"] - output_path = input_args["output_path"] - - result_path = save_trace_solution(slit_positions, output_path) - return {"output_path": result_path} diff --git a/src/keck_primitives/trace_slits.py b/src/keck_primitives/trace_slits.py deleted file mode 100644 index 3b58469..0000000 --- a/src/keck_primitives/trace_slits.py +++ /dev/null @@ -1,13 +0,0 @@ -from keckdrpframework.models.arguments import Arguments -from keckdrpframework.primitives.base_primitive import BasePrimitive -from core.tracing import trace_slits_1d - - -class TraceSlits1D(BasePrimitive): - def __init__(self, action, context): - super().__init__(action, context) - - def _perform(self, input_args: Arguments, config: dict) -> dict: - data = input_args["flat_data"] - slit_positions = trace_slits_1d(data) - return {"slit_positions": slit_positions} diff --git a/src/keck_primitives/utils.py b/src/keck_primitives/utils.py deleted file mode 100644 index 53d134b..0000000 --- a/src/keck_primitives/utils.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Utility functions and classes for Keck DRP primitives.""" - -class DummyAction: - def __init__(self, args=None): - self.args = args or {} - self.action_type = "dummy" - self.timestamp = None - self.context = None - self.logger = None - -class DummyContext: - def __init__(self, logger=None, config=None): - import logging - self.logger = logger or logging.getLogger("dummy_logger") - self.config = config or {} diff --git a/src/main.py b/src/main.py index ad7bc5f..9e14c3d 100644 --- a/src/main.py +++ b/src/main.py @@ -6,7 +6,6 @@ import yaml import os import subprocess -import time from workflows.flows.batch_flat_flow import batch_process_all_flats def load_config(config_path="config/config.yaml"): diff --git a/src/workflows/prefect_tasks/create_master_flat.py b/src/workflows/prefect_tasks/create_master_flat.py index 75d542b..c0a5d1c 100644 --- a/src/workflows/prefect_tasks/create_master_flat.py +++ b/src/workflows/prefect_tasks/create_master_flat.py @@ -1,7 +1,5 @@ from prefect import task -from keckdrpframework.models.arguments import Arguments -from keck_primitives.create_master_flat import CreateMasterFlat -from keck_primitives.utils import DummyAction, DummyContext +from core.flat import create_master_flat @task(name="Create Master Flat") @@ -27,19 +25,12 @@ def create_master_flat_task( Returns: Master flat correction array (multiply science data by this) """ - args = Arguments() - args["flat_data"] = flat_data - args["method"] = "spectroscopic" - - if slit_positions is not None: - args["slit_positions"] = slit_positions - args["slit_width"] = slit_width - args["n_knots_spectral"] = n_knots_spectral - args["low_signal_threshold"] = low_signal_threshold - args["edge_trim_pixels"] = edge_trim_pixels - - action = DummyAction(args=args) - context = DummyContext() - - result = CreateMasterFlat(action, context)._perform(args, config={}) - return result["correction"] + correction = create_master_flat( + flat_data, + slit_positions=slit_positions, + slit_width=slit_width, + n_knots_spectral=n_knots_spectral, + low_signal_threshold=low_signal_threshold, + edge_trim_pixels=edge_trim_pixels + ) + return correction diff --git a/src/workflows/prefect_tasks/load_flat.py b/src/workflows/prefect_tasks/load_flat.py index 4bd7764..3adf0b8 100644 --- a/src/workflows/prefect_tasks/load_flat.py +++ b/src/workflows/prefect_tasks/load_flat.py @@ -1,16 +1,8 @@ from prefect import task -from keckdrpframework.models.arguments import Arguments -from keck_primitives.load_flat import LoadFlat -from keck_primitives.utils import DummyAction, DummyContext +from core.flat import load_flat_frame @task(name="Load Flat Frame") def load_flat_frame_task(filepath: str): - args = Arguments() - args["filepath"] = filepath - - action = DummyAction(args=args) - context = DummyContext() - - result = LoadFlat(action, context)._perform(args, config={}) - return result["flat_data"], result["header"] \ No newline at end of file + flat_data, header = load_flat_frame(filepath) + return flat_data, header diff --git a/src/workflows/prefect_tasks/qa_plot.py b/src/workflows/prefect_tasks/qa_plot.py index 8a94f69..d754698 100644 --- a/src/workflows/prefect_tasks/qa_plot.py +++ b/src/workflows/prefect_tasks/qa_plot.py @@ -1,18 +1,8 @@ from prefect import task -from keckdrpframework.models.arguments import Arguments -from keck_primitives.qa_plot import GenerateQAPlot -from keck_primitives.utils import DummyAction, DummyContext +from core.qa import generate_qa_plot @task(name="Generate QA Plot") def generate_qa_plot_task(data, output_path: str, title: str = "Flat QA"): - args = Arguments() - args["data"] = data - args["output_path"] = output_path - args["title"] = title - - action = DummyAction(args=args) - context = DummyContext() - - result = GenerateQAPlot(action, context)._perform(args, config={}) - return result["output_path"] \ No newline at end of file + output_path = generate_qa_plot(data, output_path, title) + return output_path diff --git a/src/workflows/prefect_tasks/save_corrected.py b/src/workflows/prefect_tasks/save_corrected.py index 4f12796..683df6a 100644 --- a/src/workflows/prefect_tasks/save_corrected.py +++ b/src/workflows/prefect_tasks/save_corrected.py @@ -1,19 +1,8 @@ from prefect import task -from keckdrpframework.models.arguments import Arguments -from keck_primitives.save_corrected import SaveCorrectedFits -from keck_primitives.utils import DummyAction, DummyContext +from core.flat import save_corrected_fits @task(name="Save Corrected FITS") def save_corrected_fits_task(original_data, correction, header, output_path: str): - args = Arguments() - args["original_data"] = original_data - args["correction"] = correction - args["header"] = header - args["output_path"] = output_path - - action = DummyAction(args=args) - context = DummyContext() - - result = SaveCorrectedFits(action, context)._perform(args, config={}) - return result["output_path"] \ No newline at end of file + output_path = save_corrected_fits(original_data, correction, header, output_path) + return output_path diff --git a/src/workflows/prefect_tasks/save_trace.py b/src/workflows/prefect_tasks/save_trace.py index c32a8d2..220fcb3 100644 --- a/src/workflows/prefect_tasks/save_trace.py +++ b/src/workflows/prefect_tasks/save_trace.py @@ -1,17 +1,8 @@ from prefect import task -from keckdrpframework.models.arguments import Arguments -from keck_primitives.save_trace import SaveTraceSolution -from keck_primitives.utils import DummyAction, DummyContext +from core.tracing import save_trace_solution @task(name="Save Trace Solution") def save_trace_solution_task(slit_positions, output_path: str): - args = Arguments() - args["slit_positions"] = slit_positions - args["output_path"] = output_path - - action = DummyAction(args=args) - context = DummyContext() - - result = SaveTraceSolution(action, context)._perform(args, config={}) - return result["output_path"] \ No newline at end of file + output_path = save_trace_solution(slit_positions, output_path) + return output_path diff --git a/src/workflows/prefect_tasks/trace_slits.py b/src/workflows/prefect_tasks/trace_slits.py index 74f7b9c..7ffcc11 100644 --- a/src/workflows/prefect_tasks/trace_slits.py +++ b/src/workflows/prefect_tasks/trace_slits.py @@ -1,14 +1,9 @@ from prefect import task -from keck_primitives.trace_slits import TraceSlits1D -from keckdrpframework.models.arguments import Arguments -from keck_primitives.utils import DummyAction, DummyContext +from core.tracing import trace_slits_1d + @task(name="Trace Slits 1D") def trace_slits_task(data): """Task to trace slits in 1D data.""" - args = Arguments() - args["flat_data"] = data - action = DummyAction(args=args) - context = DummyContext() - result = TraceSlits1D(action, context)._perform(args, config={}) - return result["slit_positions"] + slit_positions = trace_slits_1d(data) + return slit_positions