1 | #!/usr/bin/env python |
---|
2 | # -*- coding: utf-8 -*- |
---|
3 | import string |
---|
4 | import numpy as np |
---|
5 | import matplotlib.pyplot as plt |
---|
6 | from pylab import * |
---|
7 | from mpl_toolkits.basemap import Basemap |
---|
8 | from mpl_toolkits.basemap import shiftgrid, cm |
---|
9 | from netCDF4 import Dataset |
---|
10 | import arctic_map # function to regrid coast limits |
---|
11 | import cartesian_grid_test # function to convert grid from polar to cartesian |
---|
12 | import scipy.special |
---|
13 | import ffgrid2 |
---|
14 | import map_ffgrid |
---|
15 | from matplotlib import colors |
---|
16 | |
---|
17 | |
---|
18 | |
---|
19 | MONTH = np.array(['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']) |
---|
20 | month = np.array(['JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER']) |
---|
21 | month_day = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) |
---|
22 | M = len(month) |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | ################### |
---|
27 | # grid parameters # |
---|
28 | ################### |
---|
29 | dx=1. |
---|
30 | dy=0.5 |
---|
31 | x0, x1 = -180., 180. |
---|
32 | y0, y1 = 30., 90. |
---|
33 | xvec = np.arange(x0, x1 + dx, dx) |
---|
34 | yvec = np.arange(y0, y1 + dy, dy) |
---|
35 | nx = len(xvec) |
---|
36 | ny = len(yvec) |
---|
37 | |
---|
38 | |
---|
39 | |
---|
40 | ######################################## |
---|
41 | # different ice types from OSISAF data # |
---|
42 | ######################################## |
---|
43 | ICE = np.array(['Open_Sea', 'Seasonal_Ice', 'Permanent_Ice', 'Ambiguous_Ice_Type']) |
---|
44 | |
---|
45 | |
---|
46 | |
---|
47 | ############################ |
---|
48 | # definition of study zone # |
---|
49 | ############################ |
---|
50 | ## latitude ## |
---|
51 | zlat = np.where((yvec >= 80.) & (yvec <= 83.))[0] |
---|
52 | zlat_vec = yvec[zlat] |
---|
53 | nlat = len(zlat) |
---|
54 | i0 = zlat[0] |
---|
55 | i1 = zlat[nlat - 1] + 1 |
---|
56 | ## longitude ## |
---|
57 | zlon = np.where((xvec <= -100.) & (xvec >= -130.))[0] |
---|
58 | zlon_vec = xvec[zlon] |
---|
59 | nlon = len(zlon) |
---|
60 | j0 = zlon[0] |
---|
61 | j1 = zlon[nlon - 1] + 1 |
---|
62 | |
---|
63 | |
---|
64 | ########################################## |
---|
65 | # calculation of mean SPEC and LAMB emis # |
---|
66 | ########################################## |
---|
67 | type_map = np.zeros([M, ny, nx], float) |
---|
68 | mean_spec_m = np.zeros([M, 31], float) |
---|
69 | ect_spec_m = np.zeros([M, 31], float) |
---|
70 | mean_lamb_m = np.zeros([M, 31], float) |
---|
71 | ect_lamb_m = np.zeros([M, 31], float) |
---|
72 | pred_oit_m = np.zeros([M, 31], float) |
---|
73 | ii = np.zeros([M], float) |
---|
74 | for imo in range (0, M): |
---|
75 | print 'month' + month[imo] |
---|
76 | ############################################ |
---|
77 | # Read daily gridded OSISAF and AMSUB data # |
---|
78 | ############################################ |
---|
79 | fichier = Dataset('/mma/hermozol/Documents/Data/daily_OSISAF_SPEC_LAMB/daily_OSISAF_emis_spec_lamb_AMSUB_ffgrid_' + str(month[imo]) + '_2009.nc', 'r', format='NETCDF3_CLASSIC') |
---|
80 | lon = fichier.variables['longitude'][:] |
---|
81 | lat = fichier.variables['latitude'][:] |
---|
82 | day = fichier.variables['days'][:] |
---|
83 | osi_type = fichier.variables['osi_ice_type'][:] |
---|
84 | type_map[imo, :, :] = osi_type[0, :, :] |
---|
85 | amsub_spec = fichier.variables['spec_emis'][:] |
---|
86 | amsub_lamb = fichier.variables['lamb_emis'][:] |
---|
87 | fichier.close() |
---|
88 | mean_spec = np.zeros([month_day[imo]], float) |
---|
89 | ect_spec = np.zeros([month_day[imo]], float) |
---|
90 | mean_lamb = np.zeros([month_day[imo]], float) |
---|
91 | ect_lamb = np.zeros([month_day[imo]], float) |
---|
92 | pred_oit = np.zeros([month_day[imo]], float) |
---|
93 | for ijr in range (0, month_day[imo]): |
---|
94 | s = reshape(amsub_spec[ijr, i0 : i1, j0 : j1], size(amsub_spec[ijr, i0 : i1, j0 : j1])) |
---|
95 | l = reshape(amsub_lamb[ijr, i0 : i1, j0 : j1], size(amsub_lamb[ijr, i0 : i1, j0 : j1])) |
---|
96 | oit = reshape(osi_type[ijr, i0 : i1, j0 : j1], size(osi_type[ijr, i0 : i1, j0 : j1])) |
---|
97 | ## take out emissivities == 0. |
---|
98 | for ks in range (0, len(s)): |
---|
99 | if (s[ks] == 0.): |
---|
100 | s[ks] = NaN |
---|
101 | ## take out emissivities == 0. |
---|
102 | for kl in range (0, len(l)): |
---|
103 | if (l[kl] == 0.): |
---|
104 | l[kl] = NaN |
---|
105 | mean_spec[ijr] = mean(s[nonzero(isnan(s) == False)]) |
---|
106 | ect_spec[ijr] = (1. / (nlon * nlat - 1)) * sqrt(sum((s[nonzero(isnan(s) == False)] - mean_spec[ijr]) ** 2)) |
---|
107 | if (ect_spec[ijr] == 0.): |
---|
108 | ect_spec[ijr] = NaN |
---|
109 | mean_lamb[ijr] = mean(l[nonzero(isnan(l) == False)]) |
---|
110 | ect_lamb[ijr] = (1. / (nlon * nlat - 1)) * sqrt(sum((l[nonzero(isnan(l) == False)] - mean_lamb[ijr]) ** 2)) |
---|
111 | if (ect_lamb[ijr] == 0.): |
---|
112 | ect_lamb[ijr] = NaN |
---|
113 | print 'day' + str(ijr + 1) |
---|
114 | pred_oit[ijr] = round(mean(oit[nonzero(isnan(oit) == False)])) - 1 |
---|
115 | mean_spec_m[imo, 0 : month_day[imo]] = mean_spec[:] |
---|
116 | ect_spec_m[imo, 0 : month_day[imo]] = ect_spec[:] |
---|
117 | mean_lamb_m[imo, 0 : month_day[imo]] = mean_lamb[:] |
---|
118 | ect_lamb_m[imo, 0 : month_day[imo]] = ect_lamb[:] |
---|
119 | ii[imo] = int(pred_oit[0]) |
---|
120 | |
---|
121 | |
---|
122 | ## map of study zone ## |
---|
123 | for imo in range (0, M): |
---|
124 | map_ffgrid.draw_map_l (xvec, yvec, 0, 5, 1, type_map[8, :, :], colors.ListedColormap(['1.', '0.25', '0.50', '0.75']), 'OSISAF Ice Type') |
---|
125 | title(month[imo] + '2009') |
---|
126 | |
---|
127 | |
---|
128 | |
---|
129 | |
---|
130 | |
---|
131 | |
---|
132 | SPEC = np.zeros([M], float) |
---|
133 | LAMB = np.zeros([M], float) |
---|
134 | ECT_SPEC = np.zeros([M], float) |
---|
135 | ECT_LAMB = np.zeros([M], float) |
---|
136 | for imo in range (0, M): |
---|
137 | #map_ffgrid.draw_map_l (xvec, yvec, 0, 5, 1, type_map[1, :, :], colors.ListedColormap(['1.', '0.25', '0.50', '0.75']), 'OSISAF Ice Type') |
---|
138 | SPEC[imo] = mean(mean_spec_m[imo, :][nonzero(isnan(mean_spec_m[imo, :]) == False)]) |
---|
139 | ECT_SPEC[imo] = mean(ect_spec_m[imo, :][nonzero(isnan(ect_spec_m[imo, :]) == False)]) |
---|
140 | LAMB[imo] = mean(mean_lamb_m[imo, :][nonzero(isnan(mean_lamb_m[imo, :]) == False)]) |
---|
141 | ECT_LAMB[imo] = mean(ect_lamb_m[imo, :][nonzero(isnan(ect_lamb_m[imo, :]) == False)]) |
---|
142 | |
---|
143 | |
---|
144 | |
---|
145 | plt.ion() |
---|
146 | figure() |
---|
147 | errorbar(np.arange(0, M, 1), SPEC, label = 'SPEC', yerr = ECT_SPEC * 5) |
---|
148 | errorbar(np.arange(0, M, 1), LAMB, label = 'LAMB', yerr = ECT_LAMB * 5) |
---|
149 | legend(loc = 3) |
---|
150 | ylabel('emissivity and std (x5)') |
---|
151 | xlim(-1, M) |
---|
152 | ylim(0.5, 1.) |
---|
153 | xticks(np.arange(0, M, 1), month, rotation = 25) |
---|
154 | grid(True) |
---|
155 | twinx() |
---|
156 | plot(ii, '--k', label = 'OSISAF ice type') |
---|
157 | legend(loc = 1) |
---|
158 | yticks(np.arange(0, 4, 1), np.array(['ice free', 'seasonal', 'permanent', 'amiguous']), rotation = 60) |
---|
159 | ylim(0 , 4) |
---|
160 | title('zone : OSISAF 2009 - AMSUB') |
---|
161 | plt.savefig('/mma/hermozol/Documents/figure_output/comp_lamb_spec/time_evolution/daily_evo_emis_spec_lamb_' + ICE[ii[0]] + '_' + month[imo] + '2009_AMSUB.png') |
---|
162 | |
---|
163 | |
---|
164 | |
---|
165 | |
---|
166 | |
---|
167 | |
---|
168 | |
---|
169 | |
---|
170 | |
---|
171 | |
---|
172 | |
---|
173 | |
---|
174 | |
---|
175 | |
---|
176 | |
---|
177 | |
---|
178 | |
---|
179 | ######### |
---|
180 | # tests # |
---|
181 | ######### |
---|
182 | z0 = spec[0, i0 : i1, j0 : j1].min() |
---|
183 | z1 = spec[0, i0 : i1, j0 : j1].max() |
---|
184 | map_ffgrid.draw_map_l (zlon_vec, zlat_vec, 0.4, 1.02, 0.01, spec[0, i0 : i1, j0 : j1] , cm.s3pcpn_l_r, 'emis SPEC') |
---|
185 | cmap2 = colors.ListedColormap(['1.', '0.25', '0.50', '0.75']) |
---|
186 | map_ffgrid.draw_map_l (zlon_vec, zlat_vec, 0, 5, 1, osi_type[6, 0, i0 : i1, j0 : j1] , cmap2, 'OSISAF ice type') |
---|
187 | |
---|
188 | |
---|
189 | map_ffgrid.draw_map_l (xvec, yvec, 0.5, 1.02, 0.01, spec[6, 0, :, :], cm.s3pcpn_l_r, 'emissivity SPEC') |
---|
190 | map_ffgrid.draw_map_l (xvec, yvec, 0.5, 1.02, 0.01, lamb[6, 0, :, :], cm.s3pcpn_l_r, 'emissivity LAMB') |
---|
191 | map_ffgrid.draw_map_l (xvec, yvec, 0, 5, 1, type_map[1, :, :], colors.ListedColormap(['1.', '0.25', '0.50', '0.75']), 'OSISAF Ice Type') |
---|
192 | cbar.set_ticklabels(['no ice','seasonal ice','permanent ice','ambiguous ice type']) |
---|
193 | #xii, yii = m(*np.meshgrid(xvec, yvec)) |
---|
194 | #cmap2 = colors.ListedColormap(['1.', '0.25', '0.50', '0.75']) |
---|
195 | #m.contour(xii, yii, osi_ice_type[0, :, :], np.arange(0, 5, 1)) |
---|
196 | #CS = plt.contour(xii, yii, osi_ice_type[0, :, :], 3, |
---|
197 | colors='k', # negative contours will be dashed by default |
---|
198 | ) |
---|
199 | |
---|
200 | |
---|
201 | |
---|