Skip to content

Commit 06264b2

Browse files
committed
Add window reducer to process tool
1 parent bb6dba6 commit 06264b2

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

src/ctapipe/tools/process.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from ..image import ImageCleaner, ImageModifier, ImageProcessor
1313
from ..image.extractor import ImageExtractor
1414
from ..image.muon import MuonProcessor
15+
from ..image.reducer import ReadoutWindowReducer
1516
from ..instrument import SoftwareTrigger
1617
from ..io import (
1718
DataLevel,
@@ -75,6 +76,11 @@ class ProcessorTool(Tool):
7576
default_value=False,
7677
).tag(config=True)
7778

79+
reduce_readout_window = Bool(
80+
default_value=False,
81+
help="If True, use ReadoutWindowReducer on waveforms.",
82+
).tag(config=True)
83+
7884
aliases = {
7985
("i", "input"): "EventSource.input_url",
8086
("o", "output"): "DataWriter.output_path",
@@ -152,6 +158,7 @@ class ProcessorTool(Tool):
152158
metadata.Instrument,
153159
metadata.Contact,
154160
SoftwareTrigger,
161+
ReadoutWindowReducer,
155162
]
156163
+ classes_with_traits(EventSource)
157164
+ classes_with_traits(ImageCleaner)
@@ -179,6 +186,15 @@ def setup(self):
179186
sys.exit(1)
180187

181188
subarray = self.event_source.subarray
189+
190+
if self.reduce_readout_window:
191+
self.readout_window_reducer = ReadoutWindowReducer(
192+
subarray=subarray, parent=self
193+
)
194+
subarray = self.readout_window_reducer.subarray
195+
else:
196+
self.readout_window_reducer = None
197+
182198
self.software_trigger = SoftwareTrigger(parent=self, subarray=subarray)
183199
self.calibrate = CameraCalibrator(parent=self, subarray=subarray)
184200
self.process_images = ImageProcessor(subarray=subarray, parent=self)
@@ -300,6 +316,9 @@ def start(self):
300316
)
301317
continue
302318

319+
if self.readout_window_reducer is not None:
320+
self.readout_window_reducer(event)
321+
303322
if self.should_calibrate:
304323
self.calibrate(event)
305324

src/ctapipe/tools/tests/test_process.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,3 +595,46 @@ def test_prod6_issues(tmp_path):
595595
images = loader.read_telescope_events([32], true_images=True)
596596
images.add_index("event_id")
597597
np.testing.assert_array_equal(images.loc[1664106]["true_image"], -1)
598+
599+
600+
def test_readout_window_reducer(tmp_path, provenance):
601+
"""Test ReadoutWindowReducer in process tool."""
602+
output = tmp_path / "test_reduced_window.dl1.h5"
603+
604+
config = {
605+
"ProcessorTool": {
606+
"reduce_readout_window": True,
607+
"ReadoutWindowReducer": {
608+
"window_start": [
609+
("type", "*", None),
610+
("type", "LST*", 10),
611+
],
612+
"window_end": [
613+
("type", "*", None),
614+
("type", "LST*", 20),
615+
],
616+
},
617+
"DataWriter": {
618+
"write_r1_waveforms": True,
619+
"write_dl1_images": True,
620+
"write_dl1_parameters": False,
621+
},
622+
}
623+
}
624+
config_path = tmp_path / "config.json"
625+
config_path.write_text(json.dumps(config))
626+
627+
provenance_log = tmp_path / "provenance.log"
628+
input_path = get_dataset_path("gamma_prod5.simtel.zst")
629+
run_tool(
630+
ProcessorTool(),
631+
argv=[
632+
f"--config={config_path}",
633+
f"--input={input_path}",
634+
f"--output={output}",
635+
f"--provenance-log={provenance_log}",
636+
"--overwrite",
637+
],
638+
cwd=tmp_path,
639+
raises=True,
640+
)

0 commit comments

Comments
 (0)