@@ -504,15 +504,15 @@ def __init__(self, AVISO_FILE, LONMIN, LONMAX, LATMIN, LATMAX,
504
504
try : # new AVISO (2014)
505
505
self ._lon = self .read_nc (AVISO_FILE , 'lon' )
506
506
self ._lat = self .read_nc (AVISO_FILE , 'lat' )
507
- self .fillval = self .read_nc_att (AVISO_FILE , 'sla' , '_FillValue' )
507
+ self .FILLVAL = self .read_nc_att (AVISO_FILE , 'sla' , '_FillValue' )
508
508
base_date = self .read_nc_att (AVISO_FILE , 'time' , 'units' )
509
509
self .base_date = dt .date2num (
510
510
parser .parse (base_date .split (' ' )[2 :4 ][0 ]))
511
511
512
512
except Exception : # old AVISO
513
513
self ._lon = self .read_nc (AVISO_FILE , 'NbLongitudes' )
514
514
self ._lat = self .read_nc (AVISO_FILE , 'NbLatitudes' )
515
- self .fillval = self .read_nc_att (AVISO_FILE ,
515
+ self .FILLVAL = self .read_nc_att (AVISO_FILE ,
516
516
'Grid_0001' , '_FillValue' )
517
517
518
518
if LONMIN < 0 and LONMAX <= 0 :
@@ -765,13 +765,13 @@ def set_interp_coeffs(self, sla, uspd):
765
765
766
766
DIAGNOSTIC_TYPE = config ['DIAGNOSTIC_TYPE' ]
767
767
768
- THE_DOMAIN = config ['DOMAIN' ]['THE_DOMAIN' ]
769
- LONMIN = config ['DOMAIN' ]['LONMIN' ]
770
- LONMAX = config ['DOMAIN' ]['LONMAX' ]
771
- LATMIN = config ['DOMAIN' ]['LATMIN' ]
772
- LATMAX = config ['DOMAIN' ]['LATMAX' ]
773
- DATE_STR = config ['DOMAIN' ]['DATE_STR' ]
774
- DATE_END = config ['DOMAIN' ]['DATE_END' ]
768
+ config [ ' THE_DOMAIN' ] = config ['DOMAIN' ]['THE_DOMAIN' ]
769
+ config [ ' LONMIN' ] = config ['DOMAIN' ]['LONMIN' ]
770
+ config [ ' LONMAX' ] = config ['DOMAIN' ]['LONMAX' ]
771
+ config [ ' LATMIN' ] = config ['DOMAIN' ]['LATMIN' ]
772
+ config [ ' LATMAX' ] = config ['DOMAIN' ]['LATMAX' ]
773
+ DATE_STR = config ['DATE_STR' ] = config [ ' DOMAIN' ]['DATE_STR' ]
774
+ DATE_END = config ['DATE_END' ] = config [ ' DOMAIN' ]['DATE_END' ]
775
775
776
776
AVISO_DT14 = config ['AVISO' ]['AVISO_DT14' ]
777
777
AVISO_FILES = config ['AVISO' ]['AVISO_FILES' ]
@@ -784,31 +784,35 @@ def set_interp_coeffs(self, sla, uspd):
784
784
else :
785
785
DAYS_BTWN_RECORDS = 7. # old seven day AVISO
786
786
787
- TRACK_DURATION_MIN = config ['TRACK_DURATION_MIN' ]
787
+ # TRACK_DURATION_MIN = config['TRACK_DURATION_MIN']
788
788
789
789
if 'SLA' in DIAGNOSTIC_TYPE :
790
790
MAX_SLA = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_SLA' ]['MAX_SLA' ]
791
791
INTERVAL = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_SLA' ]['INTERVAL' ]
792
- CONTOUR_PARAMETER = np .arange (- MAX_SLA , MAX_SLA + INTERVAL , INTERVAL )
793
- SHAPE_ERROR = config ['SHAPE_ERROR' ] * np .ones (CONTOUR_PARAMETER .size )
792
+ config ['CONTOUR_PARAMETER' ] = np .arange (- MAX_SLA , MAX_SLA + INTERVAL , INTERVAL )
793
+ config ['SHAPE_ERROR' ] = np .full (config ['CONTOUR_PARAMETER' ].size ,
794
+ config ['SHAPE_ERROR' ])
795
+
794
796
elif 'Q' in DIAGNOSTIC_TYPE :
795
797
MAX_Q = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_Q' ]['MAX_Q' ]
796
798
NUM_LEVS = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_Q' ]['NUM_LEVS' ]
797
- CONTOUR_PARAMETER = np .linspace (0 , MAX_Q , NUM_LEVS )[::- 1 ]
799
+ config [ ' CONTOUR_PARAMETER' ] = np .linspace (0 , MAX_Q , NUM_LEVS )[::- 1 ]
798
800
else : Exception
799
801
800
- JDAY_REFERENCE = config ['JDAY_REFERENCE' ]
802
+ # JDAY_REFERENCE = config['JDAY_REFERENCE']
801
803
802
- RADMIN = config ['RADMIN' ]
803
- RADMAX = config ['RADMAX' ]
804
+ # RADMIN = config['RADMIN']
805
+ # RADMAX = config['RADMAX']
804
806
805
807
if 'SLA' in DIAGNOSTIC_TYPE :
806
- AMPMIN = config ['AMPMIN' ]
807
- AMPMAX = config ['AMPMAX' ]
808
+ #AMPMIN = config['AMPMIN']
809
+ #AMPMAX = config['AMPMAX']
810
+ pass
808
811
elif 'Q' in DIAGNOSTIC_TYPE :
809
812
AMPMIN = 0.02 # max(abs(xi/f)) within the eddy
810
813
AMPMAX = 100.
811
- else : Exception
814
+ else :
815
+ Exception
812
816
813
817
SAVE_FIGURES = config ['SAVE_FIGURES' ]
814
818
@@ -823,27 +827,22 @@ def set_interp_coeffs(self, sla, uspd):
823
827
SMOOTHING_TYPE = config ['SMOOTHING_SLA' ]['TYPE' ]
824
828
else : Exception
825
829
826
- DIST0 = config ['DIST0' ]
827
- AREA0 = np .pi * config ['RAD0' ]** 2
828
830
if 'Q' in DIAGNOSTIC_TYPE :
829
831
AMP0 = 0.02 # vort/f
830
832
elif 'SLA' in DIAGNOSTIC_TYPE :
831
833
AMP0 = config ['AMP0' ]
832
834
TEMP0 = config ['TEMP0' ]
833
835
SALT0 = config ['SALT0' ]
834
836
835
- EVOLVE_AMP_MIN = config ['EVOLVE_AMP_MIN' ]
836
- EVOLVE_AMP_MAX = config ['EVOLVE_AMP_MAX' ]
837
- EVOLVE_AREA_MIN = config ['EVOLVE_AREA_MIN' ]
838
- EVOLVE_AREA_MAX = config ['EVOLVE_AREA_MAX' ]
837
+ #EVOLVE_AMP_MIN = config['EVOLVE_AMP_MIN']
838
+ #EVOLVE_AMP_MAX = config['EVOLVE_AMP_MAX']
839
+ #EVOLVE_AREA_MIN = config['EVOLVE_AREA_MIN']
840
+ #EVOLVE_AREA_MAX = config['EVOLVE_AREA_MAX']
841
+
839
842
840
- SEPARATION_METHOD = config ['SEPARATION_METHOD' ]
841
843
842
- MAX_LOCAL_EXTREMA = config ['MAX_LOCAL_EXTREMA' ]
843
844
844
- TRACK_EXTRA_VARIABLES = config ['TRACK_EXTRA_VARIABLES' ]
845
845
846
- VERBOSE = config ['VERBOSE' ]
847
846
848
847
CMAP = plt .cm .RdBu
849
848
@@ -866,23 +865,15 @@ def set_interp_coeffs(self, sla, uspd):
866
865
AVISO_FILES = AVISO_FILES [5 :- 5 :np .int (DAYS_BTWN_RECORDS )]
867
866
868
867
# Set up a grid object using first AVISO file in the list
869
- sla_grd = AvisoGrid (AVISO_FILES [0 ], LONMIN , LONMAX , LATMIN , LATMAX )
870
-
868
+ sla_grd = AvisoGrid (AVISO_FILES [0 ], config [ ' LONMIN' ], config [ ' LONMAX' ],
869
+ config [ 'LATMIN' ], config [ 'LATMAX' ])
871
870
872
-
873
-
874
-
875
871
Mx , My = (sla_grd .Mx [sla_grd .jup0 :sla_grd .jup1 , sla_grd .iup0 :sla_grd .iup1 ],
876
872
sla_grd .My [sla_grd .jup0 :sla_grd .jup1 , sla_grd .iup0 :sla_grd .iup1 ])
877
- #pMx, pMy = sla_grd.pcol_2dxy(Mx, My)
878
-
879
-
880
-
881
-
882
873
883
874
# Instantiate search ellipse object
884
- search_ellipse = eddy_tracker .SearchEllipse (THE_DOMAIN , sla_grd ,
885
- DAYS_BTWN_RECORDS , RW_PATH )
875
+ search_ellipse = eddy_tracker .SearchEllipse (config [ ' THE_DOMAIN' ] ,
876
+ sla_grd , DAYS_BTWN_RECORDS , RW_PATH )
886
877
887
878
888
879
if 'Gaussian' in SMOOTHING_TYPE :
@@ -892,120 +883,42 @@ def set_interp_coeffs(self, sla, uspd):
892
883
893
884
fig = plt .figure (1 )
894
885
895
- # Initialise two eddy objects to hold data
896
- A_eddy = eddy_tracker .TrackList ('AVISO' , TRACK_DURATION_MIN ,
897
- TRACK_EXTRA_VARIABLES )
898
- C_eddy = eddy_tracker .TrackList ('AVISO' , TRACK_DURATION_MIN ,
899
- TRACK_EXTRA_VARIABLES )
900
-
901
886
if 'Q' in DIAGNOSTIC_TYPE :
902
887
A_SAVEFILE = "" .join ([SAVE_DIR , 'eddy_tracks_Q_AVISO_anticyclonic.nc' ])
903
- A_eddy .qparameter = qparameter
904
- C_eddy .qparameter = qparameter
905
888
C_SAVEFILE = "" .join ([SAVE_DIR , 'eddy_tracks_Q_AVISO_cyclonic.nc' ])
906
- A_eddy .SHAPE_ERROR = SHAPE_ERROR
907
- C_eddy .SHAPE_ERROR = SHAPE_ERROR
908
889
909
890
elif 'SLA' in DIAGNOSTIC_TYPE :
910
891
A_SAVEFILE = "" .join ([SAVE_DIR , 'eddy_tracks_SLA_AVISO_anticyclonic.nc' ])
911
- A_eddy .CONTOUR_PARAMETER = CONTOUR_PARAMETER
912
- A_eddy .SHAPE_ERROR = SHAPE_ERROR
913
892
C_SAVEFILE = "" .join ([SAVE_DIR , 'eddy_tracks_SLA_AVISO_cyclonic.nc' ])
914
- C_eddy .CONTOUR_PARAMETER = CONTOUR_PARAMETER [::- 1 ]
915
- C_eddy .SHAPE_ERROR = SHAPE_ERROR [::- 1 ]
916
-
917
- A_eddy .JDAY_REFERENCE = JDAY_REFERENCE
918
- C_eddy .JDAY_REFERENCE = JDAY_REFERENCE
919
-
920
- A_eddy .INTERANNUAL = True
921
- C_eddy .INTERANNUAL = True
922
-
923
- A_eddy .DIAGNOSTIC_TYPE = DIAGNOSTIC_TYPE
924
- C_eddy .DIAGNOSTIC_TYPE = DIAGNOSTIC_TYPE
925
-
926
- A_eddy .SMOOTHING = SMOOTHING
927
- C_eddy .SMOOTHING = SMOOTHING
928
893
929
- A_eddy .MAX_LOCAL_EXTREMA = MAX_LOCAL_EXTREMA
930
- C_eddy .MAX_LOCAL_EXTREMA = MAX_LOCAL_EXTREMA
931
894
932
- A_eddy .M = sla_grd .M
933
- C_eddy .M = sla_grd .M
934
-
935
- #A_eddy.rwv = rwv
936
- #C_eddy.rwv = rwv
937
895
896
+ # Initialise two eddy objects to hold data
897
+ #kwargs = config
898
+ A_eddy = eddy_tracker .TrackList ('AVISO' , 'Anticyclonic' , A_SAVEFILE ,
899
+ sla_grd , search_ellipse , ** config )
900
+ C_eddy = eddy_tracker .TrackList ('AVISO' , 'Cyclonic' , C_SAVEFILE ,
901
+ sla_grd , search_ellipse , ** config )
902
+
938
903
A_eddy .search_ellipse = search_ellipse
939
904
C_eddy .search_ellipse = search_ellipse
940
905
941
-
942
- A_eddy .SEPARATION_METHOD = SEPARATION_METHOD
943
- C_eddy .SEPARATION_METHOD = SEPARATION_METHOD
944
-
945
- if 'sum_radii' in SEPARATION_METHOD :
906
+ if 'sum_radii' in config ['SEPARATION_METHOD' ]:
946
907
A_eddy .SEP_DIST_FAC = SEP_DIST_FACTOR
947
908
C_eddy .SEP_DIST_FACTOR = SEP_DIST_FACTOR
948
909
949
-
950
- A_eddy .points = np .array ([sla_grd .lon ().ravel (),
951
- sla_grd .lat ().ravel ()]).T
952
- C_eddy .points = np .array ([sla_grd .lon ().ravel (),
953
- sla_grd .lat ().ravel ()]).T
954
-
955
- A_eddy .EVOLVE_AMP_MIN = np .float64 (EVOLVE_AMP_MIN )
956
- A_eddy .EVOLVE_AMP_MAX = np .float64 (EVOLVE_AMP_MAX )
957
- A_eddy .EVOLVE_AREA_MIN = np .float64 (EVOLVE_AREA_MIN )
958
- A_eddy .EVOLVE_AREA_MAX = np .float64 (EVOLVE_AREA_MAX )
959
-
960
- C_eddy .EVOLVE_AMP_MIN = np .float64 (EVOLVE_AMP_MIN )
961
- C_eddy .EVOLVE_AMP_MAX = np .float64 (EVOLVE_AMP_MAX )
962
- C_eddy .EVOLVE_AREA_MIN = np .float64 (EVOLVE_AREA_MIN )
963
- C_eddy .EVOLVE_AREA_MAX = np .float64 (EVOLVE_AREA_MAX )
964
-
965
- A_eddy .i0 , A_eddy .i1 = sla_grd .i0 , sla_grd .i1
966
- A_eddy .j0 , A_eddy .j1 = sla_grd .j0 , sla_grd .j1
967
- C_eddy .i0 , C_eddy .i1 = sla_grd .i0 , sla_grd .i1
968
- C_eddy .j0 , C_eddy .j1 = sla_grd .j0 , sla_grd .j1
969
-
970
- A_eddy .LONMIN , A_eddy .LONMAX = np .float64 (LONMIN ), np .float64 (LONMAX )
971
- A_eddy .LATMIN , A_eddy .LATMAX = np .float64 (LATMIN ), np .float64 (LATMAX )
972
- C_eddy .LONMIN , C_eddy .LONMAX = np .float64 (LONMIN ), np .float64 (LONMAX )
973
- C_eddy .LATMIN , C_eddy .LATMAX = np .float64 (LATMIN ), np .float64 (LATMAX )
974
-
975
- A_eddy .RADMIN = np .float64 (RADMIN )
976
- A_eddy .RADMAX = np .float64 (RADMAX )
977
- A_eddy .AMPMIN = np .float64 (AMPMIN )
978
- A_eddy .AMPMAX = np .float64 (AMPMAX )
979
- C_eddy .RADMIN = np .float64 (RADMIN )
980
- C_eddy .RADMAX = np .float64 (RADMAX )
981
- C_eddy .AMPMIN = np .float64 (AMPMIN )
982
- C_eddy .AMPMAX = np .float64 (AMPMAX )
983
-
984
- A_eddy .fillval = sla_grd .fillval
985
- C_eddy .fillval = sla_grd .fillval
986
- A_eddy .VERBOSE = VERBOSE
987
- C_eddy .VERBOSE = VERBOSE
988
-
989
-
990
910
# See Chelton section B2 (0.4 degree radius)
991
911
# These should give 8 and 1000 for 0.25 deg resolution
992
- PIXMIN = np .round ((np .pi * RADMIN ** 2 ) / sla_grd .get_resolution ()** 2 )
993
- PIXMAX = np .round ((np .pi * RADMAX ** 2 ) / sla_grd .get_resolution ()** 2 )
994
- print '--- Pixel range = %s-%s' % (np .int (PIXMIN ), np .int (PIXMAX ))
912
+ PIXMIN = np .round ((np .pi * config ['RADMIN' ]** 2 ) /
913
+ sla_grd .get_resolution ()** 2 )
914
+ PIXMAX = np .round ((np .pi * config ['RADMAX' ]** 2 ) /
915
+ sla_grd .get_resolution ()** 2 )
916
+ print '--- Pixel range = %s-%s' % (np .int (PIXMIN ),
917
+ np .int (PIXMAX ))
995
918
996
919
A_eddy .PIXEL_THRESHOLD = [PIXMIN , PIXMAX ]
997
920
C_eddy .PIXEL_THRESHOLD = [PIXMIN , PIXMAX ]
998
921
999
- A_eddy .AREA0 = np .float64 (AREA0 )
1000
- C_eddy .AREA0 = np .float64 (AREA0 )
1001
- A_eddy .AMP0 = np .float64 (AMP0 )
1002
- C_eddy .AMP0 = np .float64 (AMP0 )
1003
- A_eddy .DIST0 = np .float64 (DIST0 )
1004
- C_eddy .DIST0 = np .float64 (DIST0 )
1005
-
1006
- A_eddy .DAYS_BTWN_RECORDS = DAYS_BTWN_RECORDS
1007
- C_eddy .DAYS_BTWN_RECORDS = DAYS_BTWN_RECORDS
1008
-
1009
922
# Create nc files for saving of eddy tracks
1010
923
A_eddy .create_netcdf (DATA_DIR , A_SAVEFILE , 'Anticyclonic' )
1011
924
C_eddy .create_netcdf (DATA_DIR , C_SAVEFILE , 'Cyclonic' )
@@ -1064,7 +977,7 @@ def set_interp_coeffs(self, sla, uspd):
1064
977
print '------ applying Gaussian high-pass filter'
1065
978
# Set landpoints to zero
1066
979
np .place (sla , sla_grd .mask == False , 0. )
1067
- np .place (sla , sla .data == sla_grd .fillval , 0. )
980
+ np .place (sla , sla .data == sla_grd .FILLVAL , 0. )
1068
981
# High pass filter, see
1069
982
# http://stackoverflow.com/questions/6094957/high-pass-filter-for-image-processing-in-python-by-using-scipy-numpy
1070
983
sla -= ndimage .gaussian_filter (sla , [mres , zres ])
@@ -1169,12 +1082,13 @@ def set_interp_coeffs(self, sla, uspd):
1169
1082
1170
1083
elif 'SLA' in DIAGNOSTIC_TYPE :
1171
1084
A_CS = ax .contour (sla_grd .lon (),
1172
- sla_grd .lat (), A_eddy .sla , CONTOUR_PARAMETER )
1085
+ sla_grd .lat (),
1086
+ A_eddy .sla , A_eddy .CONTOUR_PARAMETER )
1173
1087
# Note that CSc is for the cyclonics,
1174
1088
# CONTOUR_PARAMETER in reverse order
1175
1089
C_CS = ax .contour (sla_grd .lon (),
1176
1090
sla_grd .lat (),
1177
- C_eddy .sla , CONTOUR_PARAMETER [:: - 1 ] )
1091
+ C_eddy .sla , C_eddy . CONTOUR_PARAMETER )
1178
1092
1179
1093
else :
1180
1094
Exception
@@ -1199,8 +1113,10 @@ def set_interp_coeffs(self, sla, uspd):
1199
1113
C_eddy .swirl = SwirlSpeed (C_CS )
1200
1114
1201
1115
# Now we loop over the CS collection
1202
- A_eddy .sign_type = 'Anticyclonic'
1203
- C_eddy .sign_type = 'Cyclonic'
1116
+ A_eddy .SIGN_TYPE = 'Anticyclonic'
1117
+ C_eddy .SIGN_TYPE = 'Cyclonic'
1118
+
1119
+ qqq
1204
1120
if 'Q' in DIAGNOSTIC_TYPE :
1205
1121
A_eddy , C_eddy = collection_loop (CS , sla_grd , rtime ,
1206
1122
A_list_obj = A_eddy , C_list_obj = C_eddy ,
@@ -1209,11 +1125,11 @@ def set_interp_coeffs(self, sla, uspd):
1209
1125
elif 'SLA' in DIAGNOSTIC_TYPE :
1210
1126
A_eddy = collection_loop (A_CS , sla_grd , rtime ,
1211
1127
A_list_obj = A_eddy , C_list_obj = None ,
1212
- sign_type = A_eddy .sign_type , VERBOSE = VERBOSE )
1128
+ sign_type = A_eddy .SIGN_TYPE , VERBOSE = A_eddy . VERBOSE )
1213
1129
# Note that C_CS is reverse order
1214
1130
C_eddy = collection_loop (C_CS , sla_grd , rtime ,
1215
1131
A_list_obj = None , C_list_obj = C_eddy ,
1216
- sign_type = C_eddy .sign_type , VERBOSE = VERBOSE )
1132
+ sign_type = C_eddy .SIGN_TYPE , VERBOSE = C_eddy . VERBOSE )
1217
1133
1218
1134
1219
1135
@@ -1297,7 +1213,7 @@ def set_interp_coeffs(self, sla, uspd):
1297
1213
# IMPORTANT: this must be done at every time step!!
1298
1214
#saving_START_TIME = time.time()
1299
1215
if not first_record :
1300
- if VERBOSE :
1216
+ if A_eddy . VERBOSE :
1301
1217
print '--- saving to nc' , A_eddy .SAVE_DIR
1302
1218
print '--- saving to nc' , C_eddy .SAVE_DIR
1303
1219
print '+++'
0 commit comments