def initialize_camera(tel_id, filename, file_closed=1):
    if 'simtel.gz' in filename:
        if file_closed:
            ld.clear_lists_camera()
            load_hessio(filename)
            nextevent_hessio()
        else:
            pass

        px = h.get_pixel_position(tel_id)[0]
        py = h.get_pixel_position(tel_id)[1]
        ld.pixel_posX.append(px)
        ld.pixel_posY.append(py)
        ld.camera_class.append(
            io.guess_camera_geometry(px * u.m, py * u.m).cam_id)

        #to use this, one has to go through every event of the run...
        n_channel = h.get_num_channel(tel_id)
        ld.channel_num = n_channel
        for chan in range(n_channel):
            ld.adc_sampels.append(h.get_adc_sample(tel_id, chan).tolist())

        if file_closed:
            close_hessio()

    elif 'fits' in filename:
        hdulist = file_closed
        if file_closed == 1:
            ld.clear_lists_camera()
            ld.clear_lists_telescope()
            hdulist = load_fits(filename)
            teles = hdulist[1].data
            ld.telescope = teles["TelID"].tolist()
        else:
            pass

        index = ld.telescope_id.index(tel_id)
        ld.camera_fov.append(hdulist[1].data[index]["FOV"])

        pixel_id_cam = []
        index2 = np.where(hdulist[2].data['L0ID'] == index)[0]
        for i in index2:
            pixel_id_cam.append(hdulist[2].data[i]['PixelID'])
        ld.pixel_id.append(pixel_id_cam)

        if file_closed == 1:
            close_fits(hdulist)
def initialize_camera(tel_id, filename, file_closed = 1):
    if 'simtel.gz' in filename:
        if file_closed:
            ld.clear_lists_camera()
            load_hessio(filename)
            nextevent_hessio()
        else:
            pass
    
        px = h.get_pixel_position(tel_id)[0]
        py = h.get_pixel_position(tel_id)[1]
        ld.pixel_posX.append(px)
        ld.pixel_posY.append(py)
        ld.camera_class.append(io.guess_camera_geometry(px*u.m,py*u.m).cam_id)
        
        #to use this, one has to go through every event of the run...
        n_channel = h.get_num_channel(tel_id)
        ld.channel_num = n_channel
        for chan in range(n_channel):
            ld.adc_sampels.append(h.get_adc_sample(tel_id,chan).tolist())

        if file_closed:
            close_hessio()
        
    elif 'fits' in filename:
        hdulist = file_closed
        if file_closed == 1:
            ld.clear_lists_camera()
            ld.clear_lists_telescope()
            hdulist = load_fits(filename)
            teles = hdulist[1].data
            ld.telescope = teles["TelID"].tolist()
        else:
            pass
        
        index = ld.telescope_id.index(tel_id)
        ld.camera_fov.append(hdulist[1].data[index]["FOV"])
        
        pixel_id_cam = []
        index2 = np.where(hdulist[2].data['L0ID'] == index)[0]
        for i in index2:
            pixel_id_cam.append(hdulist[2].data[i]['PixelID'])
        ld.pixel_id.append(pixel_id_cam)
        
        if file_closed == 1:
            close_fits(hdulist)
Example #3
0
def _load_camera_geometry_from_hessio_file(tel_id, filename):
    import hessio  # warning, non-rentrant!
    hessio.file_open(filename)
    events = hessio.move_to_next_event()
    next(events)  # load at least one event to get all the headers
    pix_x, pix_y = hessio.get_pixel_position(tel_id)
    hessio.close_file()
    return CameraGeometry.guess(pix_x * u.m, pix_y * u.m)
Example #4
0
def initialize_hessio(filename, tel_id, file_closed):
    if file_closed:
        util_functions.load_hessio(filename)
        util_functions.nextevent_hessio()
    else:
        pass

    px = h.get_pixel_position(tel_id)[0]
    py = h.get_pixel_position(tel_id)[1]
    ld.pixel_posX.append(px)
    ld.pixel_posY.append(py)
    ld.camera_class.append(guess_camera_geometry(px * u.m, py * u.m).cam_id)

    #to use this, one has to go through every event of the run...
    n_channel = h.get_num_channel(tel_id)
    ld.channel_num = n_channel
    #for chan in range(n_channel):
    #    ld.adc_samples.append(h.get_adc_sample(tel_id,chan).tolist())

    if file_closed:
        util_functions.close_hessio()
def initialize_hessio(filename,tel_id, file_closed):
    if file_closed:
        util_functions.load_hessio(filename)
        util_functions.nextevent_hessio()
    else:
        pass
    
    px = h.get_pixel_position(tel_id)[0]
    py = h.get_pixel_position(tel_id)[1]
    ld.pixel_posX.append(px)
    ld.pixel_posY.append(py)
    ld.camera_class.append(guess_camera_geometry(px*u.m,py*u.m).cam_id)
    
    #to use this, one has to go through every event of the run...
    n_channel = h.get_num_channel(tel_id)
    ld.channel_num = n_channel
    #for chan in range(n_channel):
    #    ld.adc_samples.append(h.get_adc_sample(tel_id,chan).tolist())
        
    if file_closed:
        util_functions.close_hessio()
Example #6
0
from ctapipe import io

# TODO: use io.fits instead and make the table be variable length
# TODO: make this a tool (ctapipe-eventio2tels)

if __name__ == '__main__':

    filename = sys.argv.pop(1)

    h.file_open(filename)
    event = h.move_to_next_event()
    next(event)

    for telid in range(1, h.get_num_telescope()):
        try:
            px, py = h.get_pixel_position(telid)
            camtab = Table(names=['PIX_POS_X', 'PIX_POS_Y'],
                           data=[px * u.m, py * u.m])
            camtab.meta['N_PIX'] = h.get_num_pixels(telid)
            camtab.meta['N_SAMPS'] = h.get_num_samples(telid)
            camtab.meta['N_TIMES'] = h.get_pixel_timing_num_times_types(telid)
            camtab.meta['MIR_AREA'] = h.get_mirror_area(telid)
            geom = io.guess_camera_geometry(px * u.m, py * u.m)
            camtab.meta['TELCLASS'] = geom.cam_id
            camtab.meta['PIXTYPE'] = geom.pix_type

            filename = "cam_{:03d}.fits".format(telid)
            camtab.write(filename)
            print("WROTE ", filename)
        except h.HessioTelescopeIndexError:
            break
Example #7
0
def hessio_event_source(url, max_events=None, single_tel=None):
    """A generator that streams data from an EventIO/HESSIO MC data file
    (e.g. a standard CTA data file.)

    Parameters
    ----------
    url : str
        path to file to open
    max_events : int, optional
        maximum number of events to read
    single_tel : int
        select only a single telescope, if None, all are read. This is
        to emulate the final CTA data format, where there would be 1
        telescope per file (whereas in current monte-carlo, they are
        all interleaved into one file)

    """

    ret = hessio.file_open(url)

    if ret is not 0:
        raise RuntimeError(
            "hessio_event_source failed to open '{}'".format(url))

    counter = 0
    eventstream = hessio.move_to_next_event()
    container = Container("hessio_container")
    container.meta.add_item('hessio__input', url)
    container.meta.add_item('hessio__max_events', max_events)
    container.meta.add_item('pixel_pos', dict())
    container.add_item("dl0", RawData())
    container.add_item("count")

    for run_id, event_id in eventstream:

        container.dl0.run_id = run_id
        container.dl0.event_id = event_id
        container.dl0.tels_with_data = hessio.get_teldata_list()
        container.count = counter

        # handle single-telescope case (ignore others:
        if single_tel is not None:
            if single_tel not in container.dl0.tels_with_data:
                continue
            container.dl0.tels_with_data = [
                single_tel,
            ]

        # this should be done in a nicer way to not re-allocate the
        # data each time (right now it's just deleted and garbage
        # collected)

        container.dl0.tel = dict()  # clear the previous telescopes

        for tel_id in container.dl0.tels_with_data:

            # fill pixel position dictionary, if not already done:
            if tel_id not in container.meta.pixel_pos:
                container.meta.pixel_pos[tel_id] = hessio.get_pixel_position(
                    tel_id)

            nchans = hessio.get_num_channel(tel_id)
            container.dl0.tel[tel_id] = RawCameraData(tel_id)
            container.dl0.tel[tel_id].num_channels = nchans

            # load the data per telescope/chan
            for chan in range(nchans):
                container.dl0.tel[tel_id].adc_samples[chan] \
                    = hessio.get_adc_sample(channel=chan,
                                            telescope_id=tel_id)
                container.dl0.tel[tel_id].adc_sums[chan] \
                    = hessio.get_adc_sum(channel=chan,
                                         telescope_id=tel_id)
        yield container
        counter += 1

        if max_events is not None and counter > max_events:
            return
Example #8
0
def hessio_event_source(url, max_events=None, single_tel=None):
    """A generator that streams data from an EventIO/HESSIO MC data file
    (e.g. a standard CTA data file.)

    Parameters
    ----------
    url : str
        path to file to open
    max_events : int, optional
        maximum number of events to read
    single_tel : int
        select only a single telescope, if None, all are read. This is
        to emulate the final CTA data format, where there would be 1
        telescope per file (whereas in current monte-carlo, they are
        all interleaved into one file)

    """

    ret = hessio.file_open(url)

    if ret is not 0:
        raise RuntimeError("hessio_event_source failed to open '{}'"
                           .format(url))

    counter = 0
    eventstream = hessio.move_to_next_event()
    container = Container("hessio_container")
    container.meta.add_item('hessio__input', url)
    container.meta.add_item('hessio__max_events', max_events)
    container.meta.add_item('pixel_pos', dict())
    container.add_item("dl0", RawData())
    container.add_item("count")

    for run_id, event_id in eventstream:

        container.dl0.run_id = run_id
        container.dl0.event_id = event_id
        container.dl0.tels_with_data = hessio.get_teldata_list()
        container.count = counter
        
        # handle single-telescope case (ignore others:
        if single_tel is not None:
            if single_tel not in container.dl0.tels_with_data:
                continue
            container.dl0.tels_with_data = [single_tel, ]

        # this should be done in a nicer way to not re-allocate the
        # data each time (right now it's just deleted and garbage
        # collected)

        container.dl0.tel = dict()  # clear the previous telescopes

        for tel_id in container.dl0.tels_with_data:

            # fill pixel position dictionary, if not already done:
            if tel_id not in container.meta.pixel_pos:
                container.meta.pixel_pos[
                    tel_id] = hessio.get_pixel_position(tel_id)

            nchans = hessio.get_num_channel(tel_id)
            container.dl0.tel[tel_id] = RawCameraData(tel_id)
            container.dl0.tel[tel_id].num_channels = nchans

            # load the data per telescope/chan
            for chan in range(nchans):
                container.dl0.tel[tel_id].adc_samples[chan] \
                    = hessio.get_adc_sample(channel=chan,
                                            telescope_id=tel_id)
                container.dl0.tel[tel_id].adc_sums[chan] \
                    = hessio.get_adc_sum(channel=chan,
                                         telescope_id=tel_id)
        yield container
        counter += 1

        if max_events is not None and counter > max_events:
            return