Exemple #1
0
    def __init_fixed_grid_data(self):
        """ Calculate the fixed grid coordinates for flashes, groups, and events
            and save them to self.dataset as new variables named
            event_x, event_y, group_x, group_y, flash_x, flash_y
        """
        nadir_lon = self.dataset.lon_field_of_view.data
        ellipse_rev = self.ellipse_rev
        if ellipse_rev < 0:
            log.info("Inferring lightning ellipsoid from GLM product time")
            pt = self.dataset.product_time.dt
            date = datetime(pt.year, pt.month, pt.day,
                            pt.hour, pt.minute, pt.second)
            ellipse_rev = ltg_ellpse_rev(date)
        log.info("Using lightning ellipsoid rev {0}".format(ellipse_rev))

        event_x, event_y = ltg_ellps_lon_lat_to_fixed_grid(
            self.dataset.event_lon.data, self.dataset.event_lat.data,
            nadir_lon, ellipse_rev)
        self.dataset['event_x'] = xr.DataArray(event_x, dims=[self.ev_dim,])
        self.dataset['event_y'] = xr.DataArray(event_y, dims=[self.ev_dim,])

        group_x, group_y = ltg_ellps_lon_lat_to_fixed_grid(
            self.dataset.group_lon.data, self.dataset.group_lat.data,
            nadir_lon, ellipse_rev)
        self.dataset['group_x'] = xr.DataArray(group_x, dims=[self.gr_dim,])
        self.dataset['group_y'] = xr.DataArray(group_y, dims=[self.gr_dim,])

        flash_x, flash_y = ltg_ellps_lon_lat_to_fixed_grid(
            self.dataset.flash_lon.data, self.dataset.flash_lat.data,
            nadir_lon, ellipse_rev)
        self.dataset['flash_x'] = xr.DataArray(flash_x, dims=[self.fl_dim,])
        self.dataset['flash_y'] = xr.DataArray(flash_y, dims=[self.fl_dim,])
def test_ellipse_at_launch():
    # This example based on the ellipsoid *at launch* through the first
    # revision to the ellipsoid
    
    date = datetime(2018, 1, 1)
    ellipse_rev = ltg_ellpse_rev(date)
    
    goes_lon = -75.0
    test_lon = -110., -110., -57., -57.
    test_lat = 42., -45., 46., -41.
    fix_testx =  np.asarray((-7.072352765696357, -6.693857076039071,  3.593939139528318,  3.945876828443619))*1e4
    fix_testy =  np.asarray((1.106891557528977,  -1.163584191758841,  1.199674272612177, -1.105394721298256))*1e5

    fix_x, fix_y = ltg_ellps_lon_lat_to_fixed_grid(test_lon, test_lat,
        goes_lon, ellipse_rev)

    # Differences are < 0.5 microradians
    assert np.allclose(fix_y*1e6, fix_testy)
    assert np.allclose(fix_x*1e6, fix_testx)
def test_ellipse_revJ_ellipse():

    date = datetime(2030, 12, 31)
    # re, rp = ltg_ellps_radii(date)
    ellipse_rev = ltg_ellpse_rev(date)
    
    # This example based on the ellipsoid *at launch*
    goes_lon = -75.0
    test_lon = -110., -110., -57., -57.
    test_lat = 42., -45., 46., -41.
    fix_testx = np.asarray([-70709.97522351, -66926.99992007, 35933.3006532, 39450.81169228])
    fix_testy = np.asarray([ 110667.78669847, -116338.15403498,  119946.98040115, -110517.06815844])

    fix_x, fix_y = ltg_ellps_lon_lat_to_fixed_grid(test_lon, test_lat,
        goes_lon, ellipse_rev)

    fix_x *= 1e6
    fix_y *= 1e6
    
    # Differences are < 0.5 microradians
    assert np.allclose(fix_y, fix_testy)
    assert np.allclose(fix_x, fix_testx)