def test_write_read_pass(self):
        """ read_ibtracs_netcdf"""
        tc_track = TCTracks()
        tc_track.read_ibtracs_netcdf(provider='usa', storm_id='1988234N13299', correct_pres=True)
        tc_track.write_netcdf(DATA_DIR)

        tc_read = TCTracks()
        tc_read.read_netcdf(DATA_DIR)

        self.assertEqual(tc_track.get_track().sid, tc_read.get_track().sid)
    def test_get_track_pass(self):
        """ Test get_track."""
        tc_track = TCTracks()
        tc_track.read_processed_ibtracs_csv(TEST_TRACK_SHORT)
        self.assertIsInstance(tc_track.get_track(), xr.Dataset)
        self.assertIsInstance(tc_track.get_track('1951239N12334'), xr.Dataset)

        tc_track_bis = TCTracks()
        tc_track_bis.read_processed_ibtracs_csv(TEST_TRACK_SHORT)
        tc_track.append(tc_track_bis)
        self.assertIsInstance(tc_track.get_track(), list)
        self.assertIsInstance(tc_track.get_track('1951239N12334'), xr.Dataset)
    def test_penv_rmax_penv_pass(self):
        """ read_ibtracs_netcdf"""
        tc_track = TCTracks()
        tc_track.read_ibtracs_netcdf(provider='usa', storm_id='1992230N11325')
        penv_ref = np.ones(97)*1010
        penv_ref[26] = 1011
        penv_ref[27] = 1012
        penv_ref[28] = 1013
        penv_ref[29] = 1014
        penv_ref[30] = 1015
        penv_ref[31] = 1014
        penv_ref[32] = 1014
        penv_ref[33] = 1014
        penv_ref[34] = 1014
        penv_ref[35] = 1012

        self.assertTrue(np.array_equal(tc_track.get_track().environmental_pressure.values,
                                       penv_ref))
        self.assertTrue(np.array_equal(tc_track.get_track().radius_max_wind.values,
                                       np.zeros(97)))
    def test_calc_orig_lf(self):
        """ Test _calc_orig_lf for andrew tropical cyclone."""
        tc_track = TCTracks()
        tc_track.read_processed_ibtracs_csv(TC_ANDREW_FL)
        track = tc_track.get_track()
        track['on_land'] = ('time',
                            coord_on_land(track.lat.values, track.lon.values))
        sea_land_idx = np.where(np.diff(track.on_land.astype(int)) == 1)[0]
        orig_lf = tc._calc_orig_lf(track, sea_land_idx)

        self.assertEqual(orig_lf.shape, (sea_land_idx.size, 2))
        self.assertTrue(np.array_equal(orig_lf[0], np.array([25.5, -80.25])))
        self.assertTrue(np.array_equal(orig_lf[1], np.array([29.65, -91.5])))
Example #5
0
    def test_dist_since_lf_pass(self):
        """ Test _dist_since_lf for andrew tropical cyclone."""
        tc_track = TCTracks()
        tc_track.read_processed_ibtracs_csv(TC_ANDREW_FL)
        track = tc_track.get_track()
        track['on_land'] = ('time', coord_on_land(track.lat.values,
             track.lon.values))
        track['dist_since_lf'] = ('time', tc._dist_since_lf(track))

        self.assertTrue(np.all(np.isnan(track.dist_since_lf.values[track.on_land == False])))
        self.assertEqual(track.dist_since_lf.values[track.on_land == False].size, 38)

        self.assertTrue(track.dist_since_lf.values[-1] >
                        dist_to_coast(track.lat.values[-1], track.lon.values[-1])/1000)
        self.assertEqual(1020.5431562223974, track['dist_since_lf'].values[-1])

        # check distances on land always increase, in second landfall
        dist_on_land = track.dist_since_lf.values[track.on_land]
        self.assertTrue(np.all(np.diff(dist_on_land)[1:] > 0))
    def test_read_raw_pass(self):
        """Read a tropical cyclone."""
        tc_track = TCTracks()
        tc_track.read_ibtracs_netcdf(provider='usa', storm_id='2017242N16333')
        self.assertEqual(len(tc_track.data), 1)
        self.assertEqual(tc_track.get_track().time.dt.year.values[0], 2017)
        self.assertEqual(tc_track.get_track().time.dt.month.values[0], 8)
        self.assertEqual(tc_track.get_track().time.dt.day.values[0], 30)
        self.assertEqual(tc_track.get_track().time.dt.hour.values[0], 0)
        self.assertAlmostEqual(tc_track.get_track().lat.values[0], 16.1 + 3.8146972514141453e-07)
        self.assertAlmostEqual(tc_track.get_track().lon.values[0], -26.9 + 3.8146972514141453e-07)
        self.assertAlmostEqual(tc_track.get_track().max_sustained_wind.values[0], 30)
        self.assertAlmostEqual(tc_track.get_track().central_pressure.values[0], 1008)
        self.assertAlmostEqual(tc_track.get_track().environmental_pressure.values[0], 1012)
        self.assertAlmostEqual(tc_track.get_track().radius_max_wind.values[0], 60)
        self.assertEqual(tc_track.get_track().time.size, 123)

        self.assertAlmostEqual(tc_track.get_track().lat.values[-1], 36.8 - 7.629394502828291e-07)
        self.assertAlmostEqual(tc_track.get_track().lon.values[-1], -90.1 + 1.5258789005656581e-06)
        self.assertAlmostEqual(tc_track.get_track().central_pressure.values[-1], 1005)
        self.assertAlmostEqual(tc_track.get_track().max_sustained_wind.values[-1], 15)
        self.assertAlmostEqual(tc_track.get_track().environmental_pressure.values[-1], 1008)
        self.assertAlmostEqual(tc_track.get_track().radius_max_wind.values[-1], 60)

        self.assertFalse(np.isnan(tc_track.get_track().radius_max_wind.values).any())
        self.assertFalse(np.isnan(tc_track.get_track().environmental_pressure.values).any())
        self.assertFalse(np.isnan(tc_track.get_track().max_sustained_wind.values).any())
        self.assertFalse(np.isnan(tc_track.get_track().central_pressure.values).any())
        self.assertFalse(np.isnan(tc_track.get_track().lat.values).any())
        self.assertFalse(np.isnan(tc_track.get_track().lon.values).any())

        self.assertEqual(tc_track.get_track().basin, 'NA')
        self.assertEqual(tc_track.get_track().max_sustained_wind_unit, 'kn')
        self.assertEqual(tc_track.get_track().central_pressure_unit, 'mb')
        self.assertEqual(tc_track.get_track().sid, '2017242N16333')
        self.assertEqual(tc_track.get_track().name, 'IRMA')
        self.assertEqual(tc_track.get_track().orig_event_flag, True)
        self.assertEqual(tc_track.get_track().data_provider, 'usa')
        self.assertEqual(tc_track.get_track().category, 5)
 def test_raw_ibtracs_empty_pass(self):
     """ read_ibtracs_netcdf"""
     tc_track = TCTracks()
     tc_track.read_ibtracs_netcdf(provider='usa', storm_id='1988234N13299', correct_pres=False)
     self.assertEqual(tc_track.get_track(), [])