Skip to content

Commit

Permalink
Require eventio 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
maxnoe committed Sep 4, 2023
1 parent 45bf408 commit 9e596c3
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 51 deletions.
23 changes: 5 additions & 18 deletions ctapipe/io/simteleventsource.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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
Expand Down
35 changes: 10 additions & 25 deletions ctapipe/io/tests/test_eventseeker.py
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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
Expand All @@ -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)
Expand Down
9 changes: 1 addition & 8 deletions ctapipe/io/tests/test_simteleventsource.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():

Expand Down

0 comments on commit 9e596c3

Please sign in to comment.