Skip to content

Commit f448412

Browse files
author
adelepoulle
committed
cleanning action
1 parent dd657a6 commit f448412

File tree

5 files changed

+93
-467
lines changed

5 files changed

+93
-467
lines changed

src/py_eddy_tracker/grid/__init__.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,47 @@
88
concatenate
99
import logging
1010
from ..tracking_objects import nearest
11+
from re import compile as re_compile
12+
from os.path import join as join_path
13+
from datetime import datetime
14+
from glob import glob
15+
16+
17+
def browse_dataset_in(data_dir, files_model, date_regexp, date_model,
18+
start_date=None, end_date=None, sub_sampling_step=1):
19+
pattern_regexp = re_compile('.*/' + date_regexp)
20+
full_path = join_path(data_dir, files_model)
21+
logging.info('Search files : %s', full_path)
22+
23+
dataset_list = array(glob(full_path),
24+
dtype=[('filename', 'S256'),
25+
('date', 'datetime64[D]'),
26+
])
27+
28+
logging.info('%s grids available', dataset_list.shape[0])
29+
for item in dataset_list:
30+
result = pattern_regexp.match(item['filename'])
31+
if result:
32+
str_date = result.groups()[0]
33+
item['date'] = datetime.strptime(str_date, date_model).date()
34+
35+
dataset_list.sort(order=['date', 'filename'])
36+
37+
steps = unique(dataset_list['date'][1:] - dataset_list['date'][:-1])
38+
if len(steps) > 1:
39+
raise Exception('Several days steps in grid dataset %s' % steps)
40+
41+
if sub_sampling_step != 1:
42+
logging.info('Grid subsampling %d', sub_sampling_step)
43+
dataset_list = dataset_list[::sub_sampling_step]
44+
45+
if start_date is not None or end_date is not None:
46+
logging.info('Filtering grid by time %s, %s', start_date, end_date)
47+
mask = (dataset_list['date'] >= start_date) * (
48+
dataset_list['date'] <= end_date)
49+
50+
dataset_list = dataset_list[mask]
51+
return dataset_list
1152

1253

1354
class BaseData(object):

src/py_eddy_tracker/grid/aviso.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -150,32 +150,6 @@ def set_mask(self, sla):
150150
minus70 = argmin(abs(self.lonpad[0] + 70))
151151
self.mask[:125, minus70] = True
152152

153-
# DT10 mask is open around Panama, so close it...
154-
#~ if 'AVISO_DT10' in self.product:
155-
#~ self.mask[348, 92:110] = True
156-
#~ self.mask[348:356, 92] = True
157-
#~ self.mask[355, 71:92] = True
158-
#~ self.mask[355:363, 71] = True
159-
#~ self.mask[362, 66:71] = True
160-
#~ self.mask[362:380, 66] = True
161-
#~ self.mask[380, 47:67] = True
162-
#~ self.mask[380:389, 47] = True
163-
#~ self.mask[388, 13:47] = True
164-
#~ self.mask[388:393, 13] = True
165-
#~ self.mask[392, :13] = True
166-
#~ ind = 4 * 360
167-
#~ self.mask[348, 92 + ind:110 + ind] = True
168-
#~ self.mask[348:356, 92 + ind] = True
169-
#~ self.mask[355, 71 + ind:92 + ind] = True
170-
#~ self.mask[355:363, 71 + ind] = True
171-
#~ self.mask[362, 66 + ind:71 + ind] = True
172-
#~ self.mask[362:380, 66 + ind] = True
173-
#~ self.mask[380, 47 + ind:67 + ind] = True
174-
#~ self.mask[380:389, 47 + ind] = True
175-
#~ self.mask[388, 13 + ind:47 + ind] = True
176-
#~ self.mask[388:393, 13 + ind] = True
177-
#~ self.mask[392, ind:13 + ind] = True
178-
179153
# Mask all unwanted regions (Caspian Sea, etc)
180154
self.labels = ndimage.label(-self.mask)[0]
181155

src/py_eddy_tracker/observations.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,56 @@ def elements(self):
652652
elements.extend(['track', 'segment_size', 'dlon', 'dlat'])
653653
return elements
654654

655+
@classmethod
656+
def init_move_function(cls, obs_a, obs_b, out):
657+
"""Store information to init move function
658+
"""
659+
out['dlon'] = obs_b['lon'] - obs_a['lon']
660+
out['dlat'] = obs_b['lat'] - obs_a['lat']
661+
662+
@classmethod
663+
def move_function(cls, obs_a, obs_b, out):
664+
"""Basic move on the previous one
665+
Position N-2 : A
666+
Position N-1 : B
667+
Forecast Position : C
668+
669+
New position C = B + AB
670+
"""
671+
out['lon'] = obs_b['lon'] + out['dlon']
672+
out['lat'] = obs_b['lat'] + out['dlat']
673+
674+
@classmethod
675+
def forecast_move(cls, obs_a, obs_b, out):
676+
"""Forecast move of an eddy
677+
"""
678+
# New dead
679+
for key in obs_b.dtype.fields.keys():
680+
# Copy all parameters (which are not listed below)
681+
# from the previous observations
682+
if key in ['lon', 'lat', 'time', 'segment_size',
683+
'dlon', 'dlat'] or 'contour_' in key:
684+
continue
685+
out[key] = obs_b[key]
686+
cls.init_move_function(obs_a, obs_b, out)
687+
cls.move_function(obs_a, obs_b, out)
688+
689+
# Previous dead eddies
690+
# Add previous virtual
691+
if nb_virtual_extend > 0:
692+
obs_to_extend = self.previous_virtual_obs.obs[i_virtual_dead_id
693+
][alive_virtual_obs]
694+
for key in obs_b.dtype.fields.keys():
695+
if key in ['lon', 'lat', 'time', 'track', 'segment_size',
696+
'dlon', 'dlat'] or 'contour_' in key:
697+
continue
698+
out[key][nb_dead:] = obs_to_extend[key]
699+
out['lon'][nb_dead:] = obs_to_extend['lon'] + obs_to_extend['dlon']
700+
out['lat'][nb_dead:] = obs_to_extend['lat'] + obs_to_extend['dlat']
701+
out['track'][nb_dead:] = obs_to_extend['track']
702+
out['segment_size'][nb_dead:] = obs_to_extend['segment_size']
703+
# Count
704+
out['segment_size'][:] += 1
655705

656706
class TrackEddiesObservations(EddiesObservations):
657707
"""Class to practice Tracking on observations

0 commit comments

Comments
 (0)