From 9e596c3a916c184ce165373bec1e7cb8dfe698ff Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Mon, 4 Sep 2023 15:56:00 +0200 Subject: [PATCH] Require eventio 2.0 --- ctapipe/io/simteleventsource.py | 23 ++++---------- ctapipe/io/tests/test_eventseeker.py | 35 +++++++--------------- ctapipe/io/tests/test_simteleventsource.py | 9 +----- 3 files changed, 16 insertions(+), 51 deletions(-) diff --git a/ctapipe/io/simteleventsource.py b/ctapipe/io/simteleventsource.py index 98cdc37e72c..e62e4211e00 100644 --- a/ctapipe/io/simteleventsource.py +++ b/ctapipe/io/simteleventsource.py @@ -2,8 +2,6 @@ import warnings from contextlib import nullcontext from enum import Enum, auto, unique -from gzip import GzipFile -from io import BufferedReader from pathlib import Path from typing import Dict, Optional, Union @@ -12,8 +10,8 @@ from astropy.coordinates import Angle, EarthLocation from astropy.table import Table from astropy.time import Time +from eventio import SimTelFile from eventio.file_types import is_eventio -from eventio.simtel.simtelfile import SimTelFile from ..atmosphere import ( AtmosphereDensityProfile, @@ -430,14 +428,6 @@ class SimTelEventSource(EventSource): skip_calibration_events = Bool(True, help="Skip calibration events").tag( config=True ) - back_seekable = Bool( - False, - help=( - "Require the event source to be backwards seekable." - " This will reduce in slower read speed for gzipped files" - " and is not possible for zstd compressed files" - ), - ).tag(config=True) focal_length_choice = UseEnum( FocalLengthKind, @@ -509,10 +499,7 @@ def __init__(self, input_url=Undefined, config=None, parent=None, **kwargs): self.input_url.expanduser(), allowed_telescopes=self.allowed_tels, skip_calibration=self.skip_calibration_events, - zcat=not self.back_seekable, ) - if self.back_seekable and self.is_stream: - raise IOError("back seekable was required but not possible for inputfile") self._subarray_info = self.prepare_subarray_info( self.file_.telescope_descriptions, self.file_.header @@ -572,7 +559,7 @@ def scheduling_blocks(self) -> Dict[int, SchedulingBlockContainer]: @property def is_stream(self): - return not isinstance(self.file_._filehandle, (BufferedReader, GzipFile)) + return True def prepare_subarray_info(self, telescope_descriptions, header): """ @@ -721,15 +708,15 @@ def _generate_events(self): for counter, array_event in enumerate(self.file_): - event_id = array_event.get("event_id", 0) - if event_id == 0: + event_id = array_event.get("event_id", -1) + if event_id == -1: pseudo_event_id -= 1 event_id = pseudo_event_id obs_id = self.file_.header["run"] trigger = self._fill_trigger_info(array_event) - if trigger.event_type == EventType.SUBARRAY: + if "mc_shower" in array_event: shower = self._fill_simulated_event_information(array_event) else: shower = None diff --git a/ctapipe/io/tests/test_eventseeker.py b/ctapipe/io/tests/test_eventseeker.py index 4adc648ed02..06a5e97df8e 100644 --- a/ctapipe/io/tests/test_eventseeker.py +++ b/ctapipe/io/tests/test_eventseeker.py @@ -1,29 +1,24 @@ import pytest -from ctapipe.io import SimTelEventSource +from ctapipe.io import EventSource, SimTelEventSource from ctapipe.io.eventseeker import EventSeeker from ctapipe.utils import get_dataset_path dataset = get_dataset_path("gamma_test_large.simtel.gz") -def test_eventseeker(): +def test_eventseeker(dl1_file): - with SimTelEventSource( - input_url=dataset, - back_seekable=True, - focal_length_choice="EQUIVALENT", - ) as reader: - - seeker = EventSeeker(event_source=reader) + with EventSource(dl1_file) as source: + seeker = EventSeeker(event_source=source) event = seeker.get_event_index(1) assert event.count == 1 event = seeker.get_event_index(0) assert event.count == 0 - event = seeker.get_event_id(31007) - assert event.index.event_id == 31007 + event = seeker.get_event_id(5103) + assert event.index.event_id == 5103 with pytest.raises(IndexError): seeker.get_event_index(200) @@ -37,24 +32,15 @@ def test_eventseeker(): with pytest.raises(TypeError): seeker.get_event_index(dict()) - with SimTelEventSource( - input_url=dataset, - max_events=5, - back_seekable=True, - focal_length_choice="EQUIVALENT", - ) as reader: - seeker = EventSeeker(event_source=reader) + with EventSource(input_url=dl1_file, max_events=5) as source: + seeker = EventSeeker(event_source=source) with pytest.raises(IndexError): event = seeker.get_event_index(5) assert event is not None -def test_eventseeker_edit(): - with SimTelEventSource( - input_url=dataset, - back_seekable=True, - focal_length_choice="EQUIVALENT", - ) as reader: +def test_eventseeker_edit(dl1_file): + with EventSource(input_url=dl1_file) as reader: seeker = EventSeeker(event_source=reader) event = seeker.get_event_index(1) assert event.count == 1 @@ -68,7 +54,6 @@ def test_eventseeker_simtel(): # Ensure the EventSeeker can forward seek even if back-seeking is not possible with SimTelEventSource( input_url=dataset, - back_seekable=False, focal_length_choice="EQUIVALENT", ) as reader: seeker = EventSeeker(event_source=reader) diff --git a/ctapipe/io/tests/test_simteleventsource.py b/ctapipe/io/tests/test_simteleventsource.py index e9e7ea31f9a..11904e29e7c 100644 --- a/ctapipe/io/tests/test_simteleventsource.py +++ b/ctapipe/io/tests/test_simteleventsource.py @@ -41,21 +41,14 @@ def test_simtel_event_source_on_gamma_test_one_event(): with SimTelEventSource( input_url=gamma_test_large_path, - back_seekable=True, focal_length_choice="EQUIVALENT", ) as reader: - assert not reader.is_stream + assert reader.is_stream for event in reader: if event.count > 1: break - with pytest.warns(UserWarning): - for event in reader: - # Check generator has restarted from beginning - assert event.count == 0 - break - def test_that_event_is_not_modified_after_loop():