Example #1
0
    def test_relative_detector_arrival_times(self, mock_detector_ids,
                                             mock_detector_arrival_times):
        mock_detector_ids.return_value = range(4)
        mock_detector_arrival_times.return_value = [7.5, 5., 2.5, 5.]
        event_dict = {'t_trigger': 10, 'ext_timestamp': 1000}
        event = MagicMock()
        event.__getitem__.side_effect = lambda name: event_dict[name]
        ref_ets = 500
        rel_arrival_time = event_dict['ext_timestamp'] - ref_ets - event_dict[
            't_trigger']

        self.assertEqual(
            event_utils.relative_detector_arrival_times(
                event, 500, range(4), sentinel.offsets, sentinel.station),
            [rel_arrival_time + t for t in mock_detector_arrival_times()])
        self.assertEqual(mock_detector_ids.call_count, 0)
        self.assertEqual(
            event_utils.relative_detector_arrival_times(
                event, 500, None, sentinel.offsets),
            [rel_arrival_time + t for t in mock_detector_arrival_times()])
        mock_detector_ids.assert_called_once_with(None, event)
        self.assertEqual(
            event_utils.relative_detector_arrival_times(
                event, 500, None, sentinel.offsets, sentinel.station),
            [rel_arrival_time + t for t in mock_detector_arrival_times()])
        mock_detector_ids.assert_called_with(sentinel.station, event)
Example #2
0
    def test_relative_detector_arrival_times(self, mock_detector_ids, mock_detector_arrival_times):
        mock_detector_ids.return_value = range(4)
        mock_detector_arrival_times.return_value = [7.5, 5., 2.5, 5.]
        event_dict = {'t_trigger': 10, 'ext_timestamp': 1000}
        event = MagicMock()
        event.__getitem__.side_effect = lambda name: event_dict[name]
        ref_ets = 500
        rel_arrival_time = event_dict['ext_timestamp'] - ref_ets - event_dict['t_trigger']

        self.assertEqual(event_utils.relative_detector_arrival_times(event, 500, range(4), sentinel.offsets, sentinel.station),
                         [rel_arrival_time + t for t in mock_detector_arrival_times()])
        self.assertEqual(mock_detector_ids.call_count, 0)
        self.assertEqual(event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets),
                         [rel_arrival_time + t for t in mock_detector_arrival_times()])
        mock_detector_ids.assert_called_once_with(None, event)
        self.assertEqual(event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets, sentinel.station),
                         [rel_arrival_time + t for t in mock_detector_arrival_times()])
        mock_detector_ids.assert_called_with(sentinel.station, event)
Example #3
0
    def test_nan_relative_detector_arrival_times(self, mock_detector_ids, mock_detector_arrival_times):
        mock_detector_ids.return_value = range(4)
        mock_detector_arrival_times.return_value = [7.5, 5., 5., nan]
        event_dict = {'t_trigger': 10, 'ext_timestamp': 1000}
        event = MagicMock()
        event.__getitem__.side_effect = lambda name: event_dict[name]
        ref_ets = 500
        rel_arrival_time = event_dict['ext_timestamp'] - ref_ets - event_dict['t_trigger']

        result = event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets, sentinel.station)
        self.assertEqual(result[:-1], [rel_arrival_time + t for t in mock_detector_arrival_times()[:-1]])
        self.assertTrue(isnan(result[-1]))
        event_dict['t_trigger'] = -999
        self.assertTrue(isnan(event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets, sentinel.station)).all())
        event_dict['t_trigger'] = nan
        self.assertTrue(isnan(event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets, sentinel.station)).all())
        event_dict['t_trigger'] = 10
        mock_detector_arrival_times.return_value = [nan, nan, nan, nan]
        self.assertTrue(isnan(event_utils.relative_detector_arrival_times(event, 500, None, sentinel.offsets, sentinel.station)).all())
Example #4
0
    def test_nan_relative_detector_arrival_times(self, mock_detector_ids,
                                                 mock_detector_arrival_times):
        mock_detector_ids.return_value = range(4)
        mock_detector_arrival_times.return_value = [7.5, 5., 5., nan]
        event_dict = {'t_trigger': 10, 'ext_timestamp': 1000}
        event = MagicMock()
        event.__getitem__.side_effect = lambda name: event_dict[name]
        ref_ets = 500
        rel_arrival_time = event_dict['ext_timestamp'] - ref_ets - event_dict[
            't_trigger']

        result = event_utils.relative_detector_arrival_times(
            event, 500, None, sentinel.offsets, sentinel.station)
        self.assertEqual(
            result[:-1],
            [rel_arrival_time + t for t in mock_detector_arrival_times()[:-1]])
        self.assertTrue(isnan(result[-1]))
        event_dict['t_trigger'] = -999
        self.assertTrue(
            isnan(
                event_utils.relative_detector_arrival_times(
                    event, 500, None, sentinel.offsets,
                    sentinel.station)).all())
        event_dict['t_trigger'] = nan
        self.assertTrue(
            isnan(
                event_utils.relative_detector_arrival_times(
                    event, 500, None, sentinel.offsets,
                    sentinel.station)).all())
        event_dict['t_trigger'] = 10
        mock_detector_arrival_times.return_value = [nan, nan, nan, nan]
        self.assertTrue(
            isnan(
                event_utils.relative_detector_arrival_times(
                    event, 500, None, sentinel.offsets,
                    sentinel.station)).all())
Example #5
0
File: main.py Project: 153957/topaz
            cq.events_from_stations([coincidence], STATIONS))
        reconstruction = cq._get_reconstruction(coincidence)
        core_x = reconstruction['x']
        core_y = reconstruction['y']

        plot = Plot()

        ref_extts = coincidence_events[0][1]['ext_timestamp']

        distances = arange(1, 370, 1)
        times = (2.43 * (1 + distances / 30.)**1.55) + 20
        plot.plot(distances, times, mark=None)

        for station_number, event in coincidence_events:
            station = CLUSTER.get_station(station_number)
            offsets = OFFSETS[station_number]
            t = relative_detector_arrival_times(event,
                                                ref_extts,
                                                offsets=offsets)
            core_distances = []
            for d in station.detectors:
                x, y = d.get_xy_coordinates()
                core_distances.append(distance_between(core_x, core_y, x, y))
            plot.scatter(core_distances,
                         t,
                         mark='*',
                         markstyle=COLORS[station_number])
        plot.set_ylabel('Relative arrival time [ns]')
        plot.set_xlabel('Distance from core [m]')
        plot.save_as_pdf('relative_arrival_times')
Example #6
0
def plot_distance_vs_delay(data):
    colors = {
        501: 'black',
        502: 'red!80!black',
        503: 'blue!80!black',
        504: 'green!80!black',
        505: 'orange!80!black',
        506: 'pink!80!black',
        508: 'blue!40!black',
        509: 'red!40!black',
        510: 'green!40!black',
        511: 'orange!40!black'
    }

    cq = CoincidenceQuery(data)
    cq.reconstructions = cq.data.get_node('/coincidences', 'recs_curved')
    cq.reconstructed = True

    cluster = data.root.coincidences._v_attrs['cluster']
    offsets = {
        s.number: [d.offset + s.gps_offset for d in s.detectors]
        for s in cluster.stations
    }

    front = CorsikaStationFront()
    front_r = np.arange(500)
    front_t = front.delay_at_r(front_r)

    for i, coincidence in enumerate(cq.coincidences.read_where('N > 6')):
        if i > 50:
            break
        coincidence_events = next(cq.all_events([coincidence]))
        reconstruction = cq._get_reconstruction(coincidence)

        core_x = coincidence['x']
        core_y = coincidence['y']

        plot = MultiPlot(2, 1)
        splot = plot.get_subplot_at(0, 0)
        rplot = plot.get_subplot_at(1, 0)

        splot.plot(front_r, front_t, mark=None)

        ref_extts = coincidence_events[0][1]['ext_timestamp']

        front_detect_r = []
        front_detect_t = []

        for station_number, event in coincidence_events:
            station = cluster.get_station(station_number)
            t = event_utils.relative_detector_arrival_times(
                event,
                ref_extts,
                offsets=offsets[station_number],
                detector_ids=DETECTOR_IDS)
            core_distances = []
            for i, d in enumerate(station.detectors):
                x, y, z = d.get_coordinates()
                core_distances.append(distance_between(core_x, core_y, x, y))
                t += d.get_coordinates()[-1] / c
            splot.scatter(core_distances,
                          t,
                          mark='o',
                          markstyle=colors[station_number])
            splot.scatter([np.mean(core_distances)], [np.nanmin(t)],
                          mark='*',
                          markstyle=colors[station_number])
            rplot.scatter(
                [np.mean(core_distances)],
                [np.nanmin(t) - front.delay_at_r(np.mean(core_distances))],
                mark='*',
                markstyle=colors[station_number])

        splot.set_ylabel('Relative arrival time [ns]')
        rplot.set_ylabel(r'Residuals')
        rplot.set_axis_options(r'height=0.25\textwidth')
        splot.set_ylimits(-10, 150)

        plot.set_xlimits_for_all(None, 0, 400)
        plot.set_xlabel('Distance from core [m]')
        plot.show_xticklabels(1, 0)
        plot.show_yticklabels_for_all()

        plot.save_as_pdf('front_shape/distance_v_time_%d_core' %
                         coincidence['id'])
Example #7
0
def display_coincidences(cluster, coincidence_events, coincidence,
                         reconstruction, map):
    offsets = {
        s.number: [d.offset + s.gps_offset for d in s.detectors]
        for s in cluster.stations
    }
    ts0 = coincidence_events[0][1]['ext_timestamp']

    latitudes = []
    longitudes = []
    t = []
    p = []

    for station_number, event in coincidence_events:
        station = cluster.get_station(station_number)
        for detector in station.detectors:
            latitude, longitude, _ = detector.get_lla_coordinates()
            latitudes.append(latitude)
            longitudes.append(longitude)
        t.extend(
            event_utils.relative_detector_arrival_times(
                event, ts0, DETECTOR_IDS, offsets=offsets[station_number]))
        p.extend(event_utils.detector_densities(event, DETECTOR_IDS))

    image = map.to_pil()

    map_w, map_h = image.size
    aspect = float(map_w) / float(map_h)
    width = 0.67
    height = width / aspect
    plot = Plot(width=r'%.2f\linewidth' % width,
                height=r'%.2f\linewidth' % height)

    plot.draw_image(image, 0, 0, map_w, map_h)

    x, y = map.to_pixels(np.array(latitudes), np.array(longitudes))
    mint = np.nanmin(t)

    xx = []
    yy = []
    tt = []
    pp = []

    for xv, yv, tv, pv in zip(x, y, t, p):
        if np.isnan(tv) or np.isnan(pv):
            plot.scatter([xv], [map_h - yv], mark='diamond')
        else:
            xx.append(xv)
            yy.append(map_h - yv)
            tt.append(tv - mint)
            pp.append(pv)

    plot.scatter_table(xx, yy, tt, pp)

    transform = geographic.FromWGS84ToENUTransformation(cluster.lla)

    # Plot reconstructed core
    dx = np.cos(reconstruction['azimuth'])
    dy = np.sin(reconstruction['azimuth'])
    direction_length = reconstruction['zenith'] * 300
    core_x = reconstruction['x']
    core_y = reconstruction['y']

    core_lat, core_lon, _ = transform.enu_to_lla((core_x, core_y, 0))
    core_x, core_y = map.to_pixels(core_lat, core_lon)
    plot.scatter([core_x], [image.size[1] - core_y],
                 mark='10-pointed star',
                 markstyle='red')
    plot.plot([core_x, core_x + direction_length * dx], [
        image.size[1] - core_y, image.size[1] -
        (core_y - direction_length * dy)
    ],
              mark=None)

    # Plot simulated core
    dx = np.cos(reconstruction['reference_azimuth'])
    dy = np.sin(reconstruction['reference_azimuth'])
    direction_length = reconstruction['reference_zenith'] * 300
    core_x = reconstruction['reference_x']
    core_y = reconstruction['reference_y']

    core_lat, core_lon, _ = transform.enu_to_lla((core_x, core_y, 0))
    core_x, core_y = map.to_pixels(core_lat, core_lon)
    plot.scatter([core_x], [image.size[1] - core_y],
                 mark='asterisk',
                 markstyle='orange')
    plot.plot([core_x, core_x + direction_length * dx], [
        image.size[1] - core_y, image.size[1] -
        (core_y - direction_length * dy)
    ],
              mark=None)

    plot.set_scalebar(location="lower left")
    plot.set_slimits(min=1, max=30)
    plot.set_colorbar('$\Delta$t [\si{n\second}]')
    plot.set_axis_equal()
    plot.set_colormap('viridis')

    nw = num2deg(map.xmin, map.ymin, map.z)
    se = num2deg(map.xmin + map_w / TILE_SIZE, map.ymin + map_h / TILE_SIZE,
                 map.z)

    x0, y0, _ = transform.lla_to_enu((nw[0], nw[1], 0))
    x1, y1, _ = transform.lla_to_enu((se[0], se[1], 0))

    plot.set_xlabel('x [\si{\meter}]')
    plot.set_xticks([0, map_w])
    plot.set_xtick_labels([int(x0), int(x1)])

    plot.set_ylabel('y [\si{\meter}]')
    plot.set_yticks([0, map_h])
    plot.set_ytick_labels([int(y1), int(y0)])

    plot.save_as_pdf('map/event_display_%d' % coincidence['id'])
Example #8
0
def display_coincidences(coincidence_events, c_id, map):

    cluster = CLUSTER

    ts0 = coincidence_events[0][1]['ext_timestamp']

    latitudes = []
    longitudes = []
    t = []
    p = []

    for station_number, event in coincidence_events:
        station = cluster.get_station(station_number)
        for detector in station.detectors:
            latitude, longitude, _ = detector.get_lla_coordinates()
            latitudes.append(latitude)
            longitudes.append(longitude)
        t.extend(
            event_utils.relative_detector_arrival_times(
                event, ts0, DETECTOR_IDS))
        p.extend(event_utils.detector_densities(event, DETECTOR_IDS))

    image = map.to_pil()

    map_w, map_h = image.size
    aspect = float(map_w) / float(map_h)
    width = 0.67
    height = width / aspect
    plot = Plot(width=r'%.2f\linewidth' % width,
                height=r'%.2f\linewidth' % height)

    plot.draw_image(image, 0, 0, map_w, map_h)

    x, y = map.to_pixels(array(latitudes), array(longitudes))
    mint = nanmin(t)

    xx = []
    yy = []
    tt = []
    pp = []

    for xv, yv, tv, pv in zip(x, y, t, p):
        if isnan(tv) or isnan(pv):
            plot.scatter([xv], [map_h - yv], mark='diamond')
        else:
            xx.append(xv)
            yy.append(map_h - yv)
            tt.append(tv - mint)
            pp.append(pv)

    plot.scatter_table(xx, yy, tt, pp)

    transform = geographic.FromWGS84ToENUTransformation(cluster.lla)

    plot.set_scalebar(location="lower left")
    plot.set_slimits(min=1, max=60)
    plot.set_colorbar('$\Delta$t [\si{n\second}]')
    plot.set_axis_equal()

    nw = num2deg(map.xmin, map.ymin, map.z)
    se = num2deg(map.xmin + map_w / TILE_SIZE, map.ymin + map_h / TILE_SIZE,
                 map.z)

    x0, y0, _ = transform.lla_to_enu((nw[0], nw[1], 0))
    x1, y1, _ = transform.lla_to_enu((se[0], se[1], 0))

    plot.set_xlabel('x [\si{\meter}]')
    plot.set_xticks([0, map_w])
    plot.set_xtick_labels([int(x0), int(x1)])

    plot.set_ylabel('y [\si{\meter}]')
    plot.set_yticks([0, map_h])
    plot.set_ytick_labels([int(y1), int(y0)])

    #     plot.set_xlimits(min=-250, max=350)
    #     plot.set_ylimits(min=-250, max=250)
    #     plot.set_xlabel('x [\si{\meter}]')
    #     plot.set_ylabel('y [\si{\meter}]')

    plot.save_as_pdf('coincidences/event_display_%d_%d' % (c_id, ts0))