Ejemplo n.º 1
0
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])
Ejemplo n.º 2
0
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
Ejemplo n.º 3
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
Ejemplo n.º 4
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
Ejemplo n.º 5
0
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,
                    )
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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:])
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
 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