コード例 #1
0
def test_pipeline():
    dataset = get_dataset_path("chec_r1.tio")
    reader = TargetIOEventSource(input_url=dataset, max_events=10)
    calibrator = CameraCalibrator(eventsource=reader)
    for event in reader:
        calibrator.calibrate(event)
        assert event.r0.tel.keys() == event.dl1.tel.keys()
コード例 #2
0
def test_pipeline():
    dataset = get_dataset_path("chec_r1.tio")
    reader = TargetIOEventSource(input_url=dataset, max_events=10)
    calibrator = CameraCalibrator(eventsource=reader)
    for event in reader:
        calibrator.calibrate(event)
        assert event.r0.tel.keys() == event.dl1.tel.keys()
コード例 #3
0
def test_pipeline():
    from ctapipe.io.sst1meventsource import SST1MEventSource
    reader = SST1MEventSource(input_url=example_file_path, max_events=10)
    calibrator = CameraCalibrator(eventsource=reader)
    for event in reader:
        calibrator.calibrate(event)
        assert event.r0.tel.keys() == event.dl1.tel.keys()
コード例 #4
0
def test_pipeline():
    from ctapipe.io.sst1meventsource import SST1MEventSource
    reader = SST1MEventSource(input_url=example_file_path, max_events=10)
    calibrator = CameraCalibrator(eventsource=reader)
    for event in reader:
        calibrator.calibrate(event)
        assert event.r0.tel.keys() == event.dl1.tel.keys()
コード例 #5
0
def test_view_wf(example_event):
    viewer = BokehEventViewer()
    viewer.create()
    viewer.event = example_event

    c = CameraCalibrator()
    c.calibrate(example_event)

    t = list(example_event.r0.tels_with_data)[0]

    wf = viewer.waveforms[0]
    wf.view = 'r1'
    assert (wf.waveform == example_event.r1.tel[t].waveform[0, 0, :]).all()

    with pytest.raises(ValueError):
        wf.view = 'q'
コード例 #6
0
def test_view_camera(example_event):
    viewer = BokehEventViewer()
    viewer.create()
    viewer.event = example_event

    c = CameraCalibrator()
    c.calibrate(example_event)

    t = list(example_event.r0.tels_with_data)[0]

    cam = viewer.cameras[0]
    cam.view = 'r1'
    assert (cam.image == example_event.r1.tel[t].waveform[0, :, 0]).all()

    with pytest.raises(ValueError):
        cam.view = 'q'
コード例 #7
0
class EventFileLooper(Tool):
    name = "EventFileLooper"
    description = "Loop through the file and apply calibration. Intended as " \
                  "a test that the routines work, and a benchmark of speed."

    aliases = Dict(dict(r='EventFileReaderFactory.reader',
                        f='EventFileReaderFactory.input_path',
                        max_events='EventFileReaderFactory.max_events',
                        ped='CameraR1CalibratorFactory.pedestal_path',
                        tf='CameraR1CalibratorFactory.tf_path',
                        pe='CameraR1CalibratorFactory.pe_path',
                        extractor='ChargeExtractorFactory.extractor',
                        extractor_t0='ChargeExtractorFactory.t0',
                        window_width='ChargeExtractorFactory.window_width',
                        window_shift='ChargeExtractorFactory.window_shift',
                        sig_amp_cut_HG='ChargeExtractorFactory.sig_amp_cut_HG',
                        sig_amp_cut_LG='ChargeExtractorFactory.sig_amp_cut_LG',
                        lwt='ChargeExtractorFactory.lwt',
                        clip_amplitude='CameraDL1Calibrator.clip_amplitude',
                        radius='CameraDL1Calibrator.radius',
                        cleaner='WaveformCleanerFactory.cleaner',
                        ))
    classes = List([EventFileReaderFactory,
                    ChargeExtractorFactory,
                    CameraR1CalibratorFactory,
                    CameraDL1Calibrator,
                    WaveformCleanerFactory
                    ])

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.reader = None
        self.calibrator = None
        self.geometry = None

        self.amp_cut = None
        self.dist_cut = None
        self.tail_cut = None
        self.pix_cut = None

    def setup(self):
        self.log_format = "%(levelname)s: %(message)s [%(name)s.%(funcName)s]"
        kwargs = dict(config=self.config, tool=self)

        reader_factory = EventFileReaderFactory(**kwargs)
        reader_class = reader_factory.get_class()
        self.reader = reader_class(**kwargs)

        self.calibrator = CameraCalibrator(origin=self.reader.origin, **kwargs)

        first_event = self.reader.get_event(0)
        self.geometry = Geometry(self.config, self, first_event)

        self.amp_cut = {"LSTCam": 92.7,
                        "NectarCam": 90.6,
                        "FlashCam": 90.6,
                        "CHEC": 29.3}
        self.dist_cut = {"LSTCam": 1.74 * u.deg,
                         "NectarCam": 3. * u.deg,
                         "FlashCam": 3. * u.deg,
                         "CHEC": 3.55 * u.deg}
        self.tail_cut = {"LSTCam": (8, 16),
                         "NectarCam": (7, 14),
                         "FlashCam": (7, 14),
                         "CHEC": (3, 6)}
        self.pix_cut = {"LSTCam": 5,
                         "NectarCam": 4,
                         "FlashCam": 4,
                         "CHEC": 4}

    def start(self):
        # n_events = self.reader.num_events
        source = self.reader.read()
        desc = "Looping through file"
        for event in tqdm(source, desc=desc): #, total=n_events):
            ev = event.count
            self.calibrator.calibrate(event)

            for tel_id in event.r0.tels_with_data:
                geom = self.geometry.get_camera(tel_id)
                nom_geom = self.geometry.get_nominal(tel_id)

                image = event.dl1.tel[tel_id].image[0]

                # Cleaning
                cuts = self.tail_cut[geom.cam_id]
                tc = tailcuts_clean(geom, image, *cuts)
                if not tc.any():
                    # self.log.warning('No image')
                    continue
                # cleaned = np.ma.masked_array(image, mask=~tc)
                cleaned = image * tc

                # Hillas
                try:
                    hillas = hillas_parameters(nom_geom, cleaned)
                except HillasParameterizationError:
                    # self.log.warning('HillasParameterizationError')
                    continue

                # embed()

                fig = plt.figure(figsize=(10, 10))
                ax = fig.add_subplot(111)
                camera = CameraDisplay(nom_geom, ax=ax, image=image, cmap='viridis')
                camera.add_colorbar()
                cen_x = u.Quantity(hillas.cen_x).value
                cen_y = u.Quantity(hillas.cen_y).value
                length = u.Quantity(hillas.length).value
                width = u.Quantity(hillas.width).value

                print(cen_x, cen_y, length, width)

                camera.add_ellipse(centroid=(cen_x, cen_y),
                                   length=length * 2,
                                   width=width * 2,
                                   angle=hillas.psi.rad)

                plt.show()

    def finish(self):
        pass