def write_simtel_energy_histogram(source, output_filename, obs_id=None, filters=None, metadata={}): """ Write the energy histogram from a simtel source to a HDF5 file Parameters ---------- source: `ctapipe.io.event_source` output_filename: str obs_id: float, int, str or None """ # Writing histograms with HDF5TableWriter(filename=output_filename, group_name="simulation", mode="a", filters=filters) as writer: writer.meta = metadata for hist in yield_toplevel_of_type(source.file_, Histograms): pass # find histogram id 6 (thrown energy) thrown = None for hist in source.file_.histograms: if hist['id'] == 6: thrown = hist thrown_hist = ThrownEventsHistogram() thrown_hist.fill_from_simtel(thrown) thrown_hist.obs_id = obs_id if metadata is not None: add_global_metadata(thrown_hist, metadata) writer.write('thrown_event_distribution', [thrown_hist])
def test_2028(): from eventio.simtel.objects import CalibrationEvent, ArrayEvent with EventIOFile(calib_path) as f: n_events = 0 for event in yield_toplevel_of_type(f, CalibrationEvent): assert isinstance(next(event), ArrayEvent) n_events += 1 assert n_events > 0
def test_2010(): from eventio.simtel.objects import TriggerInformation # class under test from eventio.simtel.objects import ArrayEvent with EventIOFile(prod2_file) as f: n_events = 0 for event in yield_toplevel_of_type(f, ArrayEvent): assert isinstance(next(event), TriggerInformation) n_events += 1 assert n_events > 0
def test_adc_samples(): from eventio import EventIOFile from eventio.simtel import (ArrayEvent, TelescopeEvent, ADCSamples, MCEvent) from eventio.search_utils import yield_toplevel_of_type events_compared = 0 current_event = -1 with pyhessio.open_hessio(testfile) as h, EventIOFile(testfile) as e: hessio_events = h.move_to_next_event() try: for o in e: if isinstance(o, MCEvent): current_event = o.header.id if isinstance(o, ArrayEvent): hessio_event = next(hessio_events) for televent in yield_toplevel_of_type(o, TelescopeEvent): for adcsamp in yield_toplevel_of_type( televent, ADCSamples): assert hessio_event == current_event tel_id = adcsamp.telescope_id assert tel_id in h.get_teldata_list() adcsamp_eventio = adcsamp.parse() adcsamp_hessio = h.get_adc_sample(tel_id) assert np.all(adcsamp_eventio == adcsamp_hessio) events_compared += 1 if events_compared >= 10: raise StopIteration except StopIteration: pass assert events_compared == 10
def main(): args = parser.parse_args() inputfile = args.inputfile hists_read = 0 with EventIOFile(inputfile) as f: for o in yield_toplevel_of_type(f, Histograms): hists = o.parse() for hist in hists: hists_read += 1 plt.figure() x_bins = np.linspace(hist['lower_x'], hist['upper_x'], hist['n_bins_x'] + 1) if hist['n_bins_y'] > 0: y_bins = np.linspace(hist['lower_y'], hist['upper_y'], hist['n_bins_y'] + 1) plt.pcolormesh(x_bins, y_bins, hist['data']) marginal_x = np.sum(hist['data'], axis=0) marginal_y = np.sum(hist['data'], axis=1) non_zero_x, = np.where(marginal_x != 0) plt.xlim(x_bins[non_zero_x[0]], x_bins[non_zero_x[-1] + 1]) non_zero_y, = np.where(marginal_y != 0) plt.ylim(y_bins[non_zero_y[0]], y_bins[non_zero_y[-1] + 1]) plt.colorbar(label='Number of Events') else: centers = 0.5 * (x_bins[:-1] + x_bins[1:]) plt.hist(centers, bins=x_bins, weights=hist['data']) non_zero_x, = np.where(hist['data'] != 0) plt.xlim(x_bins[non_zero_x[0]], x_bins[non_zero_x[-1] + 1]) plt.title(hist['title']) plt.tight_layout() if not args.output_base: plt.show() else: plt.savefig( args.output_base + '_{:03d}.'.format(hists_read) + args.format, dpi=args.dpi, )
def test_telescope_ids(): from eventio.simtel import ArrayEvent, TelescopeEvent def assert_event_has_equal_telids(event): for telescope in yield_toplevel_of_type(event, TelescopeEvent): for o in telescope: assert o.telescope_id == telescope.telescope_id for test_file in test_files: try: with EventIOFile(test_file) as f: for event in yield_toplevel_of_type(f, ArrayEvent): assert_event_has_equal_telids(event) except EOFError: pass
def test_2003_v2(): from eventio.simtel.objects import CameraOrganization with EventIOFile(camorgan_v2_file) as f: for i, o in enumerate(yield_toplevel_of_type(f, CameraOrganization)): if o.header.version != 2: continue cam_organ = parse_and_assert_consumption(o, limit=1) assert cam_organ['telescope_id'] == i + 1 for sector in cam_organ['sectors']: # sector must never contain a zero, unless it is in the # very first element assert all(s != 0 for s in sector[1:])
def test_histograms(): from eventio import Histograms, EventIOFile with EventIOFile(prod4b_sst1m_file) as f: n_read = 0 for obj in yield_toplevel_of_type(f, Histograms): hists = obj.parse() unread = obj.read() assert len(unread) == 0 or all(b == 0 for b in unread) n_read += 1 for hist, title in zip(hists, titles): assert hist['title'] == title assert n_read == 1
def assert_event_has_equal_telids(event): for telescope in yield_toplevel_of_type(event, TelescopeEvent): for o in telescope: assert o.telescope_id == telescope.telescope_id