def test_hessio_file_reader(): dataset = get_dataset_path("gamma_test.simtel.gz") kwargs = dict(config=None, tool=None, input_url=dataset) with HESSIOEventSource(**kwargs) as reader: assert reader.is_compatible(dataset) assert not reader.is_stream for event in reader: if event.count == 0: assert event.r0.tels_with_data == {38, 47} elif event.count == 1: assert event.r0.tels_with_data == {11, 21, 24, 26, 61, 63, 118, 119} else: break for event in reader: # Check generator has restarted from beginning assert event.count == 0 break # test that max_events works: max_events = 5 with HESSIOEventSource(**kwargs, max_events=max_events) as reader: count = 0 for _ in reader: count += 1 assert count == max_events # test that the allowed_tels mask works: with HESSIOEventSource(**kwargs, allowed_tels={3, 4}) as reader: for event in reader: assert event.r0.tels_with_data.issubset(reader.allowed_tels)
def test_hessio_file_reader(): with HESSIOEventSource(input_url=dataset) as reader: assert not reader.is_stream for event in reader: if event.count == 1: break for event in reader: # Check generator has restarted from beginning assert event.count == 0 break # test that max_events works: max_events = 5 with HESSIOEventSource(input_url=dataset, max_events=max_events) as reader: count = 0 for _ in reader: count += 1 assert count == max_events # test that the allowed_tels mask works: with HESSIOEventSource( input_url=dataset, allowed_tels={3, 4}, max_events=max_events, ) as reader: for event in reader: assert event.r0.tels_with_data.issubset(reader.allowed_tels)
def test_hessio_event_source(): filename = get_dataset_path("gamma_test.simtel.gz") with HESSIOEventSource(input_url=filename) as source: event = next(iter(source)) tels = event.dl0.tels_with_data assert tels == {38, 47}
def setup(self): # load up the telescope types table (need to first open a file, a bit of # a hack until a proper insturment module exists) and select only the # telescopes with the same camera type self.reader = HESSIOEventSource(input_url=self.infile, max_events=self.max_events) for event in self.reader: camtypes = event.inst.subarray.to_table().group_by('camera_type') event.inst.subarray.info(printer=self.log.info) break group = camtypes.groups[self.telgroup] self._selected_tels = list(group['tel_id'].data) self._base_tel = self._selected_tels[0] self.log.info("Telescope group %d: %s", self.telgroup, str(event.inst.subarray.tel[self._selected_tels[0]])) self.log.info("SELECTED TELESCOPES:{}".format(self._selected_tels)) self.calibrator = CameraCalibrator(config=self.config, tool=self, eventsource=self.reader) self.reader.allowed_tels = self._selected_tels
def test_eventseeker(): dataset = get_dataset("gamma_test.simtel.gz") kwargs = dict(config=None, tool=None, input_url=dataset) with HESSIOEventSource(**kwargs) as reader: seeker = EventSeeker(reader=reader) event = seeker[1] assert event.r0.tels_with_data == {11, 21, 24, 26, 61, 63, 118, 119} event = seeker[0] assert event.r0.tels_with_data == {38, 47} event = seeker['409'] assert event.r0.tels_with_data == {11, 21, 24, 26, 61, 63, 118, 119} tel_list = [{38, 47}, {11, 21, 24, 26, 61, 63, 118, 119}] events = seeker[0:2] events_tels = [e.r0.tels_with_data for e in events] assert events_tels == tel_list events = seeker[[0, 1]] events_tels = [e.r0.tels_with_data for e in events] assert events_tels == tel_list events = seeker[['408', '409']] events_tels = [e.r0.tels_with_data for e in events] assert events_tels == tel_list assert len(seeker) == 9 with pytest.raises(IndexError): event = seeker[200] assert event is not None with pytest.raises(ValueError): event = seeker['t'] assert event is not None with pytest.raises(TypeError): event = seeker[dict()] assert event is not None with HESSIOEventSource(**kwargs, max_events=5) as reader: seeker = EventSeeker(reader=reader) with pytest.raises(IndexError): event = seeker[5] assert event is not None class StreamFileReader(HESSIOEventSource): def is_stream(self): return True with StreamFileReader(**kwargs) as reader: with pytest.raises(IOError): seeker = EventSeeker(reader=reader) assert seeker is not None
def test_factory_from_eventsource_override(): dataset = get_dataset("gamma_test.simtel.gz") eventsource = HESSIOEventSource(input_url=dataset) calibrator = CameraR1CalibratorFactory.produce( eventsource=eventsource, product="NullR1Calibrator" ) assert isinstance(calibrator, NullR1Calibrator)
def test_pyhessio_prod2(): pytest.importorskip('pyhessio') with pytest.warns(UnknownPixelShapeWarning): with HESSIOEventSource(input_url=dataset) as reader: for event in reader: if event.count == 2: break
def test_subarray_property(): dataset = get_dataset_path("gamma_test_large.simtel.gz") source = HESSIOEventSource(input_url=dataset) subarray = deepcopy(source.subarray) event = next(iter(source)) subarray_event = event.inst.subarray assert subarray.tel.keys() == subarray_event.tel.keys() assert (subarray.tel[1].camera.geometry.pix_x == subarray_event.tel[1].camera.geometry.pix_x).all()
def test_event(): """ an example event for algorithm testing""" filename = get_dataset_path('gamma_test.simtel.gz') with HESSIOEventSource(input_url=filename) as reader: seeker = EventSeeker(reader) event = seeker['409'] yield event
def compare_sources(input_url): kwargs = dict(config=None, tool=None, input_url=input_url) with SimTelEventSource(**kwargs) as simtel_source, \ HESSIOEventSource(**kwargs) as hessio_source: for s, h in zip_longest(simtel_source, hessio_source): assert s is not None assert h is not None assert h.count == s.count assert h.r0.obs_id == s.r0.obs_id assert h.r0.event_id == s.r0.event_id assert h.r0.tels_with_data == s.r0.tels_with_data assert (h.trig.tels_with_trigger == s.trig.tels_with_trigger).all() assert h.trig.gps_time == s.trig.gps_time assert h.mc.energy == s.mc.energy assert h.mc.alt == s.mc.alt assert h.mc.az == s.mc.az assert h.mc.core_x == s.mc.core_x assert h.mc.core_y == s.mc.core_y assert h.mc.h_first_int == s.mc.h_first_int assert h.mc.x_max == s.mc.x_max assert h.mc.shower_primary_id == s.mc.shower_primary_id assert (h.mcheader.run_array_direction == s.mcheader.run_array_direction).all() tels_with_data = s.r0.tels_with_data for tel_id in tels_with_data: assert h.mc.tel[tel_id].reference_pulse_shape.dtype == s.mc.tel[tel_id].reference_pulse_shape.dtype assert type(h.mc.tel[tel_id].meta['refstep']) is type(s.mc.tel[tel_id].meta['refstep']) assert type(h.mc.tel[tel_id].time_slice) is type(s.mc.tel[tel_id].time_slice) assert (h.mc.tel[tel_id].dc_to_pe == s.mc.tel[tel_id].dc_to_pe).all() assert (h.mc.tel[tel_id].pedestal == s.mc.tel[tel_id].pedestal).all() assert h.r0.tel[tel_id].waveform.shape == s.r0.tel[tel_id].waveform.shape assert np.allclose(h.r0.tel[tel_id].waveform, s.r0.tel[tel_id].waveform) assert (h.r0.tel[tel_id].num_samples == s.r0.tel[tel_id].num_samples) assert (h.r0.tel[tel_id].image == s.r0.tel[tel_id].image).all() assert h.r0.tel[tel_id].num_trig_pix == s.r0.tel[tel_id].num_trig_pix assert (h.r0.tel[tel_id].trig_pix_id == s.r0.tel[tel_id].trig_pix_id).all() assert (h.mc.tel[tel_id].reference_pulse_shape == s.mc.tel[tel_id].reference_pulse_shape).all() assert (h.mc.tel[tel_id].photo_electron_image == s.mc.tel[tel_id].photo_electron_image).all() assert h.mc.tel[tel_id].meta == s.mc.tel[tel_id].meta assert h.mc.tel[tel_id].time_slice == s.mc.tel[tel_id].time_slice assert h.mc.tel[tel_id].azimuth_raw == s.mc.tel[tel_id].azimuth_raw assert h.mc.tel[tel_id].altitude_raw == s.mc.tel[tel_id].altitude_raw
def test_that_event_is_not_modified_after_loop(): dataset = get_dataset_path("gamma_test.simtel.gz") with HESSIOEventSource(input_url=dataset, max_events=2) as source: for event in source: last_event = copy.deepcopy(event) # now `event` should be identical with the deepcopy of itself from # inside the loop. # Unfortunately this does not work: # assert last_event == event # So for the moment we just compare event ids assert event.r0.event_id == last_event.r0.event_id
def _global_example_event(): """ helper to get a single event from a MC file. Don't use this fixture directly, rather use `test_event` """ filename = get_dataset_path('gamma_test.simtel.gz') print("******************** LOAD TEST EVENT ***********************") with HESSIOEventSource(input_url=filename) as reader: seeker = EventSeeker(reader) event = seeker['409'] return event
def setup(self): self.log_format = "%(levelname)s: %(message)s [%(name)s.%(funcName)s]" kwargs = dict(config=self.config, tool=self) self.eventsource = HESSIOEventSource(**kwargs) extractor = ChargeExtractorFactory.produce(**kwargs) self.r1 = HESSIOR1Calibrator(**kwargs) self.dl0 = CameraDL0Reducer(**kwargs) self.dl1 = CameraDL1Calibrator(extractor=extractor, **kwargs) self.calculator = ChargeResolutionCalculator(**kwargs)
def test_factory_from_eventsource(): dataset = get_dataset_path("gamma_test.simtel.gz") eventsource = HESSIOEventSource(input_url=dataset) calibrator = CameraR1CalibratorFactory.produce(eventsource=eventsource) assert isinstance(calibrator, HESSIOR1Calibrator)
def compare_sources(input_url): pytest.importorskip("pyhessio") with SimTelEventSource( input_url=input_url) as simtel_source, HESSIOEventSource( input_url=input_url) as hessio_source: for s, h in zip_longest(simtel_source, hessio_source): assert s is not None assert h is not None assert h.count == s.count assert h.r0.obs_id == s.r0.obs_id assert h.r0.event_id == s.r0.event_id assert h.r0.tels_with_data == s.r0.tels_with_data assert (h.trig.tels_with_trigger == s.trig.tels_with_trigger).all() assert h.trig.gps_time == s.trig.gps_time assert h.mc.energy == s.mc.energy assert h.mc.alt == s.mc.alt assert h.mc.az == s.mc.az assert h.mc.core_x == s.mc.core_x assert h.mc.core_y == s.mc.core_y assert h.mc.h_first_int == s.mc.h_first_int assert h.mc.x_max == s.mc.x_max assert h.mc.shower_primary_id == s.mc.shower_primary_id assert (h.mcheader.run_array_direction == s.mcheader.run_array_direction).all() tels_with_data = s.r0.tels_with_data for tel_id in tels_with_data: assert (h.mc.tel[tel_id].dc_to_pe == s.mc.tel[tel_id].dc_to_pe ).all() assert (h.mc.tel[tel_id].pedestal == s.mc.tel[tel_id].pedestal ).all() assert (h.r0.tel[tel_id].waveform.shape == s.r0.tel[tel_id].waveform.shape) assert (h.r1.tel[tel_id].waveform.shape == s.r1.tel[tel_id].waveform.shape) assert np.allclose(h.r0.tel[tel_id].waveform, s.r0.tel[tel_id].waveform) assert np.allclose(h.r1.tel[tel_id].waveform, s.r1.tel[tel_id].waveform) assert h.r0.tel[tel_id].num_trig_pix == s.r0.tel[ tel_id].num_trig_pix assert (h.r0.tel[tel_id].trig_pix_id == s.r0.tel[tel_id].trig_pix_id).all() assert (h.mc.tel[tel_id].photo_electron_image == s.mc.tel[tel_id].photo_electron_image).all() assert h.mc.tel[tel_id].meta == s.mc.tel[tel_id].meta assert h.mc.tel[tel_id].azimuth_raw == s.mc.tel[ tel_id].azimuth_raw assert h.mc.tel[tel_id].altitude_raw == s.mc.tel[ tel_id].altitude_raw assert h.pointing[tel_id].altitude == s.pointing[ tel_id].altitude assert h.pointing[tel_id].azimuth == s.pointing[tel_id].azimuth h_camera = h.inst.subarray.tel[tel_id].camera s_camera = s.inst.subarray.tel[tel_id].camera assert h_camera.readout.sampling_rate == s_camera.readout.sampling_rate assert np.array_equal( h_camera.readout.reference_pulse_shape, s_camera.readout.reference_pulse_shape, ) assert (h_camera.readout.reference_pulse_sample_width == s_camera.readout.reference_pulse_sample_width)