@@ -504,15 +504,15 @@ def __init__(self, AVISO_FILE, LONMIN, LONMAX, LATMIN, LATMAX,
504504 try : # new AVISO (2014)
505505 self ._lon = self .read_nc (AVISO_FILE , 'lon' )
506506 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' )
508508 base_date = self .read_nc_att (AVISO_FILE , 'time' , 'units' )
509509 self .base_date = dt .date2num (
510510 parser .parse (base_date .split (' ' )[2 :4 ][0 ]))
511511
512512 except Exception : # old AVISO
513513 self ._lon = self .read_nc (AVISO_FILE , 'NbLongitudes' )
514514 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 ,
516516 'Grid_0001' , '_FillValue' )
517517
518518 if LONMIN < 0 and LONMAX <= 0 :
@@ -765,13 +765,13 @@ def set_interp_coeffs(self, sla, uspd):
765765
766766 DIAGNOSTIC_TYPE = config ['DIAGNOSTIC_TYPE' ]
767767
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' ]
775775
776776 AVISO_DT14 = config ['AVISO' ]['AVISO_DT14' ]
777777 AVISO_FILES = config ['AVISO' ]['AVISO_FILES' ]
@@ -784,31 +784,35 @@ def set_interp_coeffs(self, sla, uspd):
784784 else :
785785 DAYS_BTWN_RECORDS = 7. # old seven day AVISO
786786
787- TRACK_DURATION_MIN = config ['TRACK_DURATION_MIN' ]
787+ # TRACK_DURATION_MIN = config['TRACK_DURATION_MIN']
788788
789789 if 'SLA' in DIAGNOSTIC_TYPE :
790790 MAX_SLA = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_SLA' ]['MAX_SLA' ]
791791 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+
794796 elif 'Q' in DIAGNOSTIC_TYPE :
795797 MAX_Q = config ['CONTOUR_PARAMETER' ]['CONTOUR_PARAMETER_Q' ]['MAX_Q' ]
796798 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 ]
798800 else : Exception
799801
800- JDAY_REFERENCE = config ['JDAY_REFERENCE' ]
802+ # JDAY_REFERENCE = config['JDAY_REFERENCE']
801803
802- RADMIN = config ['RADMIN' ]
803- RADMAX = config ['RADMAX' ]
804+ # RADMIN = config['RADMIN']
805+ # RADMAX = config['RADMAX']
804806
805807 if 'SLA' in DIAGNOSTIC_TYPE :
806- AMPMIN = config ['AMPMIN' ]
807- AMPMAX = config ['AMPMAX' ]
808+ #AMPMIN = config['AMPMIN']
809+ #AMPMAX = config['AMPMAX']
810+ pass
808811 elif 'Q' in DIAGNOSTIC_TYPE :
809812 AMPMIN = 0.02 # max(abs(xi/f)) within the eddy
810813 AMPMAX = 100.
811- else : Exception
814+ else :
815+ Exception
812816
813817 SAVE_FIGURES = config ['SAVE_FIGURES' ]
814818
@@ -823,27 +827,22 @@ def set_interp_coeffs(self, sla, uspd):
823827 SMOOTHING_TYPE = config ['SMOOTHING_SLA' ]['TYPE' ]
824828 else : Exception
825829
826- DIST0 = config ['DIST0' ]
827- AREA0 = np .pi * config ['RAD0' ]** 2
828830 if 'Q' in DIAGNOSTIC_TYPE :
829831 AMP0 = 0.02 # vort/f
830832 elif 'SLA' in DIAGNOSTIC_TYPE :
831833 AMP0 = config ['AMP0' ]
832834 TEMP0 = config ['TEMP0' ]
833835 SALT0 = config ['SALT0' ]
834836
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+
839842
840- SEPARATION_METHOD = config ['SEPARATION_METHOD' ]
841843
842- MAX_LOCAL_EXTREMA = config ['MAX_LOCAL_EXTREMA' ]
843844
844- TRACK_EXTRA_VARIABLES = config ['TRACK_EXTRA_VARIABLES' ]
845845
846- VERBOSE = config ['VERBOSE' ]
847846
848847 CMAP = plt .cm .RdBu
849848
@@ -866,23 +865,15 @@ def set_interp_coeffs(self, sla, uspd):
866865 AVISO_FILES = AVISO_FILES [5 :- 5 :np .int (DAYS_BTWN_RECORDS )]
867866
868867 # 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' ])
871870
872-
873-
874-
875871 Mx , My = (sla_grd .Mx [sla_grd .jup0 :sla_grd .jup1 , sla_grd .iup0 :sla_grd .iup1 ],
876872 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-
882873
883874 # 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 )
886877
887878
888879 if 'Gaussian' in SMOOTHING_TYPE :
@@ -892,120 +883,42 @@ def set_interp_coeffs(self, sla, uspd):
892883
893884 fig = plt .figure (1 )
894885
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-
901886 if 'Q' in DIAGNOSTIC_TYPE :
902887 A_SAVEFILE = "" .join ([SAVE_DIR , 'eddy_tracks_Q_AVISO_anticyclonic.nc' ])
903- A_eddy .qparameter = qparameter
904- C_eddy .qparameter = qparameter
905888 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
908889
909890 elif 'SLA' in DIAGNOSTIC_TYPE :
910891 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
913892 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
928893
929- A_eddy .MAX_LOCAL_EXTREMA = MAX_LOCAL_EXTREMA
930- C_eddy .MAX_LOCAL_EXTREMA = MAX_LOCAL_EXTREMA
931894
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
937895
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+
938903 A_eddy .search_ellipse = search_ellipse
939904 C_eddy .search_ellipse = search_ellipse
940905
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' ]:
946907 A_eddy .SEP_DIST_FAC = SEP_DIST_FACTOR
947908 C_eddy .SEP_DIST_FACTOR = SEP_DIST_FACTOR
948909
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-
990910 # See Chelton section B2 (0.4 degree radius)
991911 # 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 ))
995918
996919 A_eddy .PIXEL_THRESHOLD = [PIXMIN , PIXMAX ]
997920 C_eddy .PIXEL_THRESHOLD = [PIXMIN , PIXMAX ]
998921
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-
1009922 # Create nc files for saving of eddy tracks
1010923 A_eddy .create_netcdf (DATA_DIR , A_SAVEFILE , 'Anticyclonic' )
1011924 C_eddy .create_netcdf (DATA_DIR , C_SAVEFILE , 'Cyclonic' )
@@ -1064,7 +977,7 @@ def set_interp_coeffs(self, sla, uspd):
1064977 print '------ applying Gaussian high-pass filter'
1065978 # Set landpoints to zero
1066979 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. )
1068981 # High pass filter, see
1069982 # http://stackoverflow.com/questions/6094957/high-pass-filter-for-image-processing-in-python-by-using-scipy-numpy
1070983 sla -= ndimage .gaussian_filter (sla , [mres , zres ])
@@ -1169,12 +1082,13 @@ def set_interp_coeffs(self, sla, uspd):
11691082
11701083 elif 'SLA' in DIAGNOSTIC_TYPE :
11711084 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 )
11731087 # Note that CSc is for the cyclonics,
11741088 # CONTOUR_PARAMETER in reverse order
11751089 C_CS = ax .contour (sla_grd .lon (),
11761090 sla_grd .lat (),
1177- C_eddy .sla , CONTOUR_PARAMETER [:: - 1 ] )
1091+ C_eddy .sla , C_eddy . CONTOUR_PARAMETER )
11781092
11791093 else :
11801094 Exception
@@ -1199,8 +1113,10 @@ def set_interp_coeffs(self, sla, uspd):
11991113 C_eddy .swirl = SwirlSpeed (C_CS )
12001114
12011115 # 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
12041120 if 'Q' in DIAGNOSTIC_TYPE :
12051121 A_eddy , C_eddy = collection_loop (CS , sla_grd , rtime ,
12061122 A_list_obj = A_eddy , C_list_obj = C_eddy ,
@@ -1209,11 +1125,11 @@ def set_interp_coeffs(self, sla, uspd):
12091125 elif 'SLA' in DIAGNOSTIC_TYPE :
12101126 A_eddy = collection_loop (A_CS , sla_grd , rtime ,
12111127 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 )
12131129 # Note that C_CS is reverse order
12141130 C_eddy = collection_loop (C_CS , sla_grd , rtime ,
12151131 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 )
12171133
12181134
12191135
@@ -1297,7 +1213,7 @@ def set_interp_coeffs(self, sla, uspd):
12971213 # IMPORTANT: this must be done at every time step!!
12981214 #saving_START_TIME = time.time()
12991215 if not first_record :
1300- if VERBOSE :
1216+ if A_eddy . VERBOSE :
13011217 print '--- saving to nc' , A_eddy .SAVE_DIR
13021218 print '--- saving to nc' , C_eddy .SAVE_DIR
13031219 print '+++'
0 commit comments