24
24
from ..generic import distance , interp2d_geo , fit_circle , uniform_resample
25
25
from ..poly import poly_contain_poly , winding_number_grid_in_poly
26
26
27
+ logger = logging .getLogger ("pet" )
28
+
27
29
28
30
def raw_resample (datas , fixed_size ):
29
31
nb_value = datas .shape [0 ]
@@ -97,8 +99,8 @@ def _fit_circle_path(vertice):
97
99
d_lon = lons .max () - lons .min ()
98
100
d_lat = lats .max () - lats .min ()
99
101
if d_lon < 1e-7 and d_lat < 1e-7 :
100
- # logging .warning('An edge is only define in one position')
101
- # logging .debug('%d coordinates %s,%s', len(lons),lons,
102
+ # logger .warning('An edge is only define in one position')
103
+ # logger .debug('%d coordinates %s,%s', len(lons),lons,
102
104
# lats)
103
105
return 0 , - 90 , nan , nan
104
106
centlon_e , centlat_e , eddy_radius_e , aerr = fit_circle (c_x , c_y )
@@ -226,7 +228,7 @@ def __init__(self, filename, x_name, y_name, centered=None):
226
228
self .vars = dict ()
227
229
self .interpolators = dict ()
228
230
if centered is None :
229
- logging .warning ('We assume the position of grid is the center'
231
+ logger .warning ('We assume the position of grid is the center'
230
232
' corner for %s' , filename )
231
233
self .load_general_features ()
232
234
self .load ()
@@ -244,7 +246,7 @@ def is_centered(self):
244
246
def load_general_features (self ):
245
247
"""Load attrs
246
248
"""
247
- logging .debug ('Load general feature from %(filename)s' , dict (filename = self .filename ))
249
+ logger .debug ('Load general feature from %(filename)s' , dict (filename = self .filename ))
248
250
with Dataset (self .filename ) as h :
249
251
# Load generals
250
252
self .dimensions = {i : len (v ) for i , v in h .dimensions .items ()}
@@ -314,7 +316,7 @@ def load(self):
314
316
self .vars [y_name ] = h .variables [y_name ][:]
315
317
316
318
if self .is_centered :
317
- logging .info ('Grid center' )
319
+ logger .info ('Grid center' )
318
320
self .x_c = self .vars [x_name ]
319
321
self .y_c = self .vars [y_name ]
320
322
@@ -386,7 +388,7 @@ def grid(self, varname):
386
388
if varname not in self .vars :
387
389
coordinates_dims = list (self .x_dim )
388
390
coordinates_dims .extend (list (self .y_dim ))
389
- logging .debug ('Load %(varname)s from %(filename)s' , dict (varname = varname , filename = self .filename ))
391
+ logger .debug ('Load %(varname)s from %(filename)s' , dict (varname = varname , filename = self .filename ))
390
392
with Dataset (self .filename ) as h :
391
393
dims = h .variables [varname ].dimensions
392
394
sl = [slice (None ) if dim in coordinates_dims else 0 for dim in dims ]
@@ -406,7 +408,7 @@ def grid_tiles(self, varname, slice_x, slice_y):
406
408
"""
407
409
coordinates_dims = list (self .x_dim )
408
410
coordinates_dims .extend (list (self .y_dim ))
409
- logging .debug ('Extract %(varname)s from %(filename)s with slice(x:%(slice_x)s,y:%(slice_y)s)' ,
411
+ logger .debug ('Extract %(varname)s from %(filename)s with slice(x:%(slice_x)s,y:%(slice_y)s)' ,
410
412
dict (varname = varname , filename = self .filename , slice_y = slice_y , slice_x = slice_x ))
411
413
with Dataset (self .filename ) as h :
412
414
dims = h .variables [varname ].dimensions
@@ -474,7 +476,7 @@ def eddy_identification(self, grid_height, uname, vname, date, step=0.005, shape
474
476
in_h_unit = units .parse_expression (h_units )
475
477
if in_h_unit is not None :
476
478
factor , _ = in_h_unit .to ('m' ).to_tuple ()
477
- logging .info ('We will apply on step a factor to be coherent with grid : %f' , 1 / factor )
479
+ logger .info ('We will apply on step a factor to be coherent with grid : %f' , 1 / factor )
478
480
step /= factor
479
481
if precision is not None :
480
482
precision /= factor
@@ -491,7 +493,7 @@ def eddy_identification(self, grid_height, uname, vname, date, step=0.005, shape
491
493
z_min_p , z_max_p = percentile (data_tmp , epsilon ), percentile (data_tmp , 100 - epsilon )
492
494
d_zp = z_max_p - z_min_p
493
495
if d_z / d_zp > 2 :
494
- logging .warning ('Maybe some extrema are present zmin %f (m) and zmax %f (m) will be replace by %f and %f' ,
496
+ logger .warning ('Maybe some extrema are present zmin %f (m) and zmax %f (m) will be replace by %f and %f' ,
495
497
z_min , z_max , z_min_p , z_max_p )
496
498
z_min , z_max = z_min_p , z_max_p
497
499
@@ -523,7 +525,7 @@ def eddy_identification(self, grid_height, uname, vname, date, step=0.005, shape
523
525
if nb_paths == 0 :
524
526
continue
525
527
cvalues = self .contours .cvalues [corrected_coll_index ]
526
- logging .debug ('doing collection %s, contour value %.4f, %d paths' ,
528
+ logger .debug ('doing collection %s, contour value %.4f, %d paths' ,
527
529
corrected_coll_index , cvalues , nb_paths )
528
530
529
531
# Loop over individual c_s contours (i.e., every eddy in field)
@@ -626,7 +628,7 @@ def eddy_identification(self, grid_height, uname, vname, date, step=0.005, shape
626
628
properties .obs ['contour_lon_s' ], properties .obs ['contour_lat_s' ] = uniform_resample (
627
629
speed_contour .lon , speed_contour .lat , fixed_size = array_sampling )
628
630
if aerr > 99.9 or aerr_s > 99.9 :
629
- logging .warning ('Strange shape at this step! shape_error : %f, %f' , aerr , aerr_s )
631
+ logger .warning ('Strange shape at this step! shape_error : %f, %f' , aerr , aerr_s )
630
632
631
633
eddies .append (properties )
632
634
# To reserve definitively the area
@@ -781,13 +783,13 @@ def compute_pixel_path(self, x0, y0, x1, y1):
781
783
pass
782
784
783
785
def init_pos_interpolator (self ):
784
- logging .debug ('Create a KdTree could be long ...' )
786
+ logger .debug ('Create a KdTree could be long ...' )
785
787
self .index_interp = cKDTree (
786
788
uniform_resample_stack ((
787
789
self .x_c .reshape (- 1 ),
788
790
self .y_c .reshape (- 1 )
789
791
)))
790
- logging .debug ('... OK' )
792
+ logger .debug ('... OK' )
791
793
792
794
def _low_filter (self , grid_name , x_cut , y_cut , factor = 40. ):
793
795
data = self .grid (grid_name )
@@ -922,7 +924,7 @@ def kernel_lanczos(self, lat, wave_length, order=1):
922
924
# wave_length in km
923
925
# order must be int
924
926
if order < 1 :
925
- logging .warning ('order must be superior to 0' )
927
+ logger .warning ('order must be superior to 0' )
926
928
order = ceil (order ).astype (int )
927
929
# Estimate size of kernel
928
930
step_y_km = self .ystep * distance (0 , 0 , 0 , 1 ) / 1000
@@ -951,14 +953,14 @@ def kernel_bessel(self, lat, wave_length, order=1):
951
953
# wave_length in km
952
954
# order must be int
953
955
if order < 1 :
954
- logging .warning ('order must be superior to 0' )
956
+ logger .warning ('order must be superior to 0' )
955
957
order = ceil (order ).astype (int )
956
958
# Estimate size of kernel
957
959
step_y_km = self .ystep * distance (0 , 0 , 0 , 1 ) / 1000
958
960
step_x_km = self .xstep * distance (0 , lat , 1 , lat ) / 1000
959
961
min_wave_length = max (step_x_km * 2 , step_y_km * 2 )
960
962
if wave_length < min_wave_length :
961
- logging .error ('Wave_length to short for resolution, must be > %d km' , ceil (min_wave_length ))
963
+ logger .error ('Wave_length to short for resolution, must be > %d km' , ceil (min_wave_length ))
962
964
raise Exception ()
963
965
# half size will be multiply with by order
964
966
half_x_pt , half_y_pt = ceil (wave_length / step_x_km ).astype (int ), ceil (wave_length / step_y_km ).astype (int )
@@ -992,7 +994,7 @@ def _low_filter(self, grid_name, x_cut, y_cut):
992
994
"""low filtering
993
995
"""
994
996
i_x , i_y = x_cut * 0.125 / self .xstep , y_cut * 0.125 / self .xstep
995
- logging .info (
997
+ logger .info (
996
998
'Filtering with this wave : (%s, %s) converted in pixel (%s, %s)' ,
997
999
x_cut , y_cut , i_x , i_y
998
1000
)
@@ -1005,7 +1007,7 @@ def _low_filter(self, grid_name, x_cut, y_cut):
1005
1007
1006
1008
def convolve_filter_with_dynamic_kernel (self , grid , kernel_func , lat_max = 85 , extend = False , ** kwargs_func ):
1007
1009
if (abs (self .y_c ) > lat_max ).any ():
1008
- logging .warning ('No filtering above %f degrees of latitude' , lat_max )
1010
+ logger .warning ('No filtering above %f degrees of latitude' , lat_max )
1009
1011
if isinstance (grid , str ):
1010
1012
data = self .grid (grid ).copy ()
1011
1013
else :
@@ -1016,7 +1018,7 @@ def convolve_filter_with_dynamic_kernel(self, grid, kernel_func, lat_max=85, ext
1016
1018
nb_lines = self .y_c .shape [0 ]
1017
1019
dt = list ()
1018
1020
1019
- debug_active = logging .getLogger ().getEffectiveLevel () == logging .DEBUG
1021
+ debug_active = logger .getLogger ().getEffectiveLevel () == logging .DEBUG
1020
1022
1021
1023
for i , lat in enumerate (self .y_c ):
1022
1024
if abs (lat ) > lat_max or data [:, i ].mask .all ():
@@ -1087,11 +1089,11 @@ def bessel_band_filter(self, grid_name, wave_length_inf, wave_length_sup, **kwar
1087
1089
self .vars [grid_name ] -= data_out
1088
1090
1089
1091
def bessel_high_filter (self , grid_name , wave_length , order = 1 , lat_max = 85 ):
1090
- logging .debug ('Run filtering with wave of %(wave_length)s km and order of %(order)s ...' ,
1092
+ logger .debug ('Run filtering with wave of %(wave_length)s km and order of %(order)s ...' ,
1091
1093
dict (wave_length = wave_length , order = order ))
1092
1094
data_out = self .convolve_filter_with_dynamic_kernel (
1093
1095
grid_name , self .kernel_bessel , lat_max = lat_max , wave_length = wave_length , order = order )
1094
- logging .debug ('Filtering done' )
1096
+ logger .debug ('Filtering done' )
1095
1097
self .vars [grid_name ] -= data_out
1096
1098
1097
1099
def bessel_low_filter (self , grid_name , wave_length , order = 1 , lat_max = 85 ):
@@ -1120,7 +1122,7 @@ def spectrum_lonlat(self, grid_name, area=None, ref=None, **kwargs):
1120
1122
continue
1121
1123
pws .append (pw )
1122
1124
if nb_invalid :
1123
- logging .warning ('%d/%d columns invalid' , nb_invalid , i + 1 )
1125
+ logger .warning ('%d/%d columns invalid' , nb_invalid , i + 1 )
1124
1126
lat_content = 1 / f , array (pws ).mean (axis = 0 )
1125
1127
1126
1128
# Lon spectrum
@@ -1142,7 +1144,7 @@ def spectrum_lonlat(self, grid_name, area=None, ref=None, **kwargs):
1142
1144
fs .append (f )
1143
1145
pws .append (pw )
1144
1146
if nb_invalid :
1145
- logging .warning ('%d/%d lines invalid' , nb_invalid , i + 1 )
1147
+ logger .warning ('%d/%d lines invalid' , nb_invalid , i + 1 )
1146
1148
f_interp = linspace (f_min , f_max , f .shape [0 ])
1147
1149
pw_m = array (
1148
1150
[interp1d (f , pw , fill_value = 0. , bounds_error = False )(f_interp ) for f , pw in zip (fs , pws )]).mean (axis = 0 )
@@ -1187,7 +1189,7 @@ def compute_finite_difference(self, data, schema=1, mode='reflect', vertical=Fal
1187
1189
1188
1190
def compute_stencil (self , data , stencil_halfwidth = 4 , mode = 'reflect' , vertical = False ):
1189
1191
stencil_halfwidth = max (min (int (stencil_halfwidth ), 4 ), 1 )
1190
- logging .debug ('Stencil half width apply : %d' , stencil_halfwidth )
1192
+ logger .debug ('Stencil half width apply : %d' , stencil_halfwidth )
1191
1193
# output
1192
1194
grad = None
1193
1195
@@ -1279,7 +1281,7 @@ def add_uv_lagerloef(self, grid_height, uname='u', vname='v', schema=15):
1279
1281
def add_uv (self , grid_height , uname = 'u' , vname = 'v' , stencil_halfwidth = 4 ):
1280
1282
"""Compute a u and v grid
1281
1283
"""
1282
- logging .info ('Add u/v variable with stencil method' )
1284
+ logger .info ('Add u/v variable with stencil method' )
1283
1285
data = self .grid (grid_height )
1284
1286
h_dict = self .variables_description [grid_height ]
1285
1287
for variable in (uname , vname ):
0 commit comments