Skip to content

Commit 7006f2e

Browse files
committed
save both sid and name in tc tracks read netcdf.
1 parent 2f23f76 commit 7006f2e

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

climada/hazard/tc_tracks.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,9 @@ def _read_one_raw(self, nc_data, i_track, provider):
568568
i_track (int): track position in netcdf data
569569
provider (str): data provider. e.g. usa, newdelhi, bom, cma, tokyo
570570
"""
571-
name = ''.join(nc_data.variables['sid'][i_track].astype(str))
571+
name = ''.join(nc_data.variables['name'][i_track] \
572+
[nc_data.variables['name'][i_track].mask==False].data.astype(str))
573+
sid = ''.join(nc_data.variables['sid'][i_track].astype(str))
572574
basin = ''.join(nc_data.variables['basin'][i_track, 0, :].astype(str))
573575
LOGGER.info('Reading %s', name)
574576

@@ -579,7 +581,7 @@ def _read_one_raw(self, nc_data, i_track, provider):
579581
datetimes.append(dt.datetime.strptime(''.join(date_time.astype(str)),
580582
'%Y-%m-%d %H:%M:%S'))
581583

582-
id_no = float(name.replace('N', '0').replace('S', '1'))
584+
id_no = float(sid.replace('N', '0').replace('S', '1'))
583585
lat = nc_data.variables[provider + '_lat'][i_track, :][:val_len]
584586
lon = nc_data.variables[provider + '_lon'][i_track, :][:val_len]
585587

@@ -593,20 +595,20 @@ def _read_one_raw(self, nc_data, i_track, provider):
593595
np.all(max_sus_wind == nc_data.variables[provider + '_wind']._FillValue) \
594596
and np.all(cen_pres == nc_data.variables[provider + '_pres']._FillValue)):
595597
LOGGER.warning('Skipping %s. It does not contain valid values. ' +\
596-
'Try another provider.', name)
598+
'Try another provider.', sid)
597599
return None
598600

599601
try:
600602
rmax = nc_data.variables[provider + '_rmw'][i_track, :][:val_len]
601603
except KeyError:
602604
LOGGER.info('%s: No rmax for given provider %s. Set to default.',
603-
name, provider)
605+
sid, provider)
604606
rmax = np.zeros(lat.size)
605607
try:
606608
penv = nc_data.variables[provider + '_poci'][i_track, :][:val_len]
607609
except KeyError:
608610
LOGGER.info('%s: No penv for given provider %s. Set to default.',
609-
name, provider)
611+
sid, provider)
610612
penv = np.ones(lat.size)*self._set_penv(basin)
611613

612614
tr_ds = pd.DataFrame({'time': datetimes, 'lat': lat, 'lon':lon, \
@@ -616,7 +618,7 @@ def _read_one_raw(self, nc_data, i_track, provider):
616618
# deal with nans
617619
tr_ds = self._deal_nans(tr_ds, nc_data, provider, datetimes, basin)
618620
if not tr_ds.shape[0]:
619-
LOGGER.warning('Skipping %s. No usable data.', name)
621+
LOGGER.warning('Skipping %s. No usable data.', sid)
620622
return None
621623
# ensure environmental pressure > central pressure
622624
chg_pres = (tr_ds.central_pressure > tr_ds.environmental_pressure).values
@@ -627,7 +629,7 @@ def _read_one_raw(self, nc_data, i_track, provider):
627629
tr_ds.coords['lat'] = ('time', tr_ds.lat)
628630
tr_ds.coords['lon'] = ('time', tr_ds.lon)
629631
tr_ds.attrs = {'max_sustained_wind_unit': 'kn', 'central_pressure_unit': 'mb', \
630-
'name': name, 'orig_event_flag': True, 'data_provider': provider, \
632+
'name': name, 'sid': sid, 'orig_event_flag': True, 'data_provider': provider, \
631633
'basin': basin, 'id_no': id_no, 'category': set_category(max_sus_wind, 'kn')}
632634
return tr_ds
633635

climada/test/test_tc_tracks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ def test_read_raw_pass(self):
6666
tc_track = TCTracks()
6767
tc_track.read_ibtracs_netcdf(provider='usa', storm_id='2017242N16333')
6868
self.assertEqual(len(tc_track.data), 1)
69-
self.assertEqual(tc_track.get_track().name, '2017242N16333')
69+
self.assertEqual(tc_track.get_track().sid, '2017242N16333')
70+
self.assertEqual(tc_track.get_track().name, 'IRMA')
7071
self.assertEqual(tc_track.get_track().time.dt.year.values[0], 2017)
7172
self.assertEqual(tc_track.get_track().time.dt.month.values[0], 8)
7273
self.assertEqual(tc_track.get_track().time.dt.day.values[0], 30)

0 commit comments

Comments
 (0)