source: trunk/src/scripts_Laura/ARCTIC/Travail_CEN/map_monthly_mean_emis_parameters_whole_arctic.py @ 56

Last change on this file since 56 was 53, checked in by lahlod, 10 years ago

modifs

File size: 17.4 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3import string
4import numpy as np
5import matplotlib.pyplot as plt
6from pylab import *
7from mpl_toolkits.basemap import Basemap
8from mpl_toolkits.basemap import shiftgrid, cm
9from netCDF4 import Dataset
10import arctic_map # function to regrid coast limits
11import cartesian_grid_test # function to convert grid from polar to cartesian
12import scipy.special
13import ffgrid2
14import map_ffgrid
15from matplotlib import colors
16from matplotlib.font_manager import FontProperties
17import map_cartesian_grid
18
19
20###############################
21# time period characteristics #
22###############################
23MONTH = np.array(['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'])
24month = np.array(['JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER'])
25month_day = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])
26M = len(month)
27
28
29########################
30# grid characteristics #
31########################
32x0 = -3000. # min limit of grid
33x1 = 2500. # max limit of grid
34dx = 40.
35xvec = np.arange(x0, x1+dx, dx)
36nx = len(xvec) 
37y0 = -3000. # min limit of grid
38y1 = 3000. # max limit of grid
39dy = 40.
40yvec = np.arange(y0, y1+dy, dy)
41ny = len(yvec)
42
43
44grad_ratio = np.zeros([M, ny, nx], float)
45std_grad_ratio = np.zeros([M, ny, nx], float)
46
47spec_anom_23 = np.zeros([M, ny, nx], float)
48std_spec_anom_23 = np.zeros([M, ny, nx], float)
49
50spec_anom_89 = np.zeros([M, ny, nx], float)
51std_spec_anom_89 = np.zeros([M, ny, nx], float)
52
53ratio_anom_89 = np.zeros([M, ny, nx], float)
54std_ratio_anom_89 = np.zeros([M, ny, nx], float)
55
56std_spec_a = np.zeros([M, ny, nx], float)
57std_spec_b = np.zeros([M, ny, nx], float)
58
59for imo in range (0, M): 
60    # AMSUA 89 std
61    fichier_a = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_monthly_mean-std_data_lamb_spec_near_nadir_AMSUA89_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC')
62    spec_a = fichier_a.variables['emis_spec_mean'][:]
63    lamb_a = fichier_a.variables['emis_lamb_mean'][:]
64    std_spec_a[imo, :, :] = fichier_a.variables['emis_spec_std'][:]
65    #std_lamb_a[imo, :, :] = fichier_a.variables['emis_lamb_std'][:]
66    fichier_a.close()
67    # AMSUB 89 std
68    fichier_b = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_monthly_mean-std_data_lamb_spec_near_nadir_AMSUB89_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC')
69    spec_b = fichier_b.variables['emis_spec_mean'][:]
70    lamb_b = fichier_b.variables['emis_lamb_mean'][:]
71    std_spec_b[imo, :, :] = fichier_b.variables['emis_spec_std'][:]
72    #std_lamb_b[imo, :, :] = fichier_b.variables['emis_lamb_std'][:]
73    fichier_b.close()
74    # read daily gradient ratio file
75    print 'read daily gradient ratio for month ' + month[imo]
76    fichier_grad_ratio = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_daily_grad_ratio_spec_23-89_near_nadir_AMSUA_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC')
77    gr = fichier_grad_ratio.variables['grad_ratio'][:]
78    fichier_grad_ratio.close()
79    # read daily emis anomaly file for 23GHz
80    print 'read daily emis anomaly 23GHz for month ' + month[imo]
81    fichier_anom23 = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_daily_data_lamb_spec_ratio_anomaly_near_nadir_AMSUA23_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC')
82    sa_23 = fichier_anom23.variables['spec_anomaly'][:]
83    fichier_anom23.close()
84    # read daily emis anomaly file for 89GHz
85    print 'read daily emis anomaly 89GHz for month ' + month[imo]
86    fichier_anom89 = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_daily_data_lamb_spec_ratio_anomaly_near_nadir_AMSUA89_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC')
87    sa_89 = fichier_anom89.variables['spec_anomaly'][:]
88    ra_89 = fichier_anom89.variables['ratio_anomaly'][:]
89    fichier_anom89.close()
90    print 'compute montly mean and std ' + month[imo]
91    # calculate monthly means out of daily data
92    for ilat in range (0, ny):
93        for ilon in range (0, nx):
94            # gradient ratio
95            grad_ratio[imo, ilat, ilon] = mean(gr[0 : month_day[imo], ilat, ilon][nonzero(isnan(gr[0 : month_day[imo], ilat, ilon]) == False)])
96            std_grad_ratio[imo, ilat, ilon] = sqrt((1. / (month_day[imo] - 1.)) * sum((gr[0 : month_day[imo], ilat, ilon][nonzero(isnan(gr[0 : month_day[imo], ilat, ilon]) == False)] - grad_ratio[imo, ilat, ilon])**2))
97            # spec anomaly 23GHz
98            spec_anom_23[imo, ilat, ilon] = mean(sa_23[0 : month_day[imo], ilat, ilon][nonzero(isnan(sa_23[0 : month_day[imo], ilat, ilon]) == False)])
99            std_spec_anom_23[imo, ilat, ilon] = sqrt((1. / (month_day[imo] - 1.)) * sum((sa_23[0 : month_day[imo], ilat, ilon][nonzero(isnan(sa_23[0 : month_day[imo], ilat, ilon]) == False)] - spec_anom_23[imo, ilat, ilon])**2))
100            # spec anomaly 89GHz
101            spec_anom_89[imo, ilat, ilon] = mean(sa_89[0 : month_day[imo], ilat, ilon][nonzero(isnan(sa_89[0 : month_day[imo], ilat, ilon]) == False)])
102            std_spec_anom_89[imo, ilat, ilon] = sqrt((1. / (month_day[imo] - 1.)) * sum((sa_89[0 : month_day[imo], ilat, ilon][nonzero(isnan(sa_89[0 : month_day[imo], ilat, ilon]) == False)] - spec_anom_89[imo, ilat, ilon])**2))
103            # ratio anomaly 89GHz
104            ratio_anom_89[imo, ilat, ilon] = mean(ra_89[0 : month_day[imo], ilat, ilon][nonzero(isnan(ra_89[0 : month_day[imo], ilat, ilon]) == False)])
105            std_ratio_anom_89[imo, ilat, ilon] = sqrt((1. / (month_day[imo] - 1.)) * sum((ra_89[0 : month_day[imo], ilat, ilon][nonzero(isnan(ra_89[0 : month_day[imo], ilat, ilon]) == False)] - ratio_anom_89[imo, ilat, ilon])**2))
106            # take out erroneous values of std (on land)
107            if ((xvec[ilon] > -2400.) & (xvec[ilon] < -2160.) & (yvec[ilat] > 1240.) & (yvec[ilat] < 1560.)):
108                grad_ratio[imo, ilat, ilon] = NaN
109                spec_anom_23[imo, ilat, ilon] = NaN
110                spec_anom_89[imo, ilat, ilon] = NaN
111                ratio_anom_89[imo, ilat, ilon] = NaN
112                std_spec_a[imo, ilat, ilon] = NaN
113                std_spec_b[imo, ilat, ilon] = NaN
114
115
116########################################################
117# map correlation over the year between each parameter #
118########################################################
119corr_map1 = np.zeros([ny, nx], float)
120corr_map2 = np.zeros([ny, nx], float)
121corr_map3 = np.zeros([ny, nx], float)
122corr_map4 = np.zeros([ny, nx], float)
123corr_map5 = np.zeros([ny, nx], float)
124corr_map6 = np.zeros([ny, nx], float)
125corr_map7 = np.zeros([ny, nx], float)
126corr_map8 = np.zeros([ny, nx], float)
127corr_map9 = np.zeros([ny, nx], float)
128corr_map10 = np.zeros([ny, nx], float)
129for ilat in range (0, ny):
130    for ilon in range (0, nx):
131        corr_map1[ilat, ilon] = corrcoef(grad_ratio[:, ilat, ilon], spec_anom_23[:, ilat, ilon])[0][1]
132        corr_map2[ilat, ilon] = corrcoef(grad_ratio[:, ilat, ilon], spec_anom_89[:, ilat, ilon])[0][1]
133        corr_map3[ilat, ilon] = corrcoef(grad_ratio[:, ilat, ilon], ratio_anom_89[:, ilat, ilon])[0][1]
134        corr_map4[ilat, ilon] = corrcoef(grad_ratio[:, ilat, ilon], std_spec_a[:, ilat, ilon])[0][1]
135        corr_map5[ilat, ilon] = corrcoef(spec_anom_23[:, ilat, ilon], spec_anom_89[:, ilat, ilon])[0][1]
136        corr_map6[ilat, ilon] = corrcoef(spec_anom_23[:, ilat, ilon], ratio_anom_89[:, ilat, ilon])[0][1]
137        corr_map7[ilat, ilon] = corrcoef(spec_anom_23[:, ilat, ilon], std_spec_a[:, ilat, ilon])[0][1]
138        corr_map8[ilat, ilon] = corrcoef(spec_anom_89[:, ilat, ilon], ratio_anom_89[:, ilat, ilon])[0][1]
139        corr_map9[ilat, ilon] = corrcoef(spec_anom_89[:, ilat, ilon], std_spec_a[:, ilat, ilon])[0][1]
140        corr_map10[ilat, ilon] = corrcoef(ratio_anom_89[:, ilat, ilon], std_spec_a[:, ilat, ilon])[0][1]
141
142
143ion()
144x_ind, y_ind, z_ind, volume = arctic_map.arctic_map_lat50()
145x_coast = x_ind
146y_coast = y_ind
147z_coast = z_ind
148map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map1[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation grad ratio - spec A23 anom')
149plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param1.png')
150
151map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map2[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation grad ratio - spec A89 anom')
152plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param2.png')
153
154map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map3[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation grad ratio - ratio A89 anom')
155plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param3.png')
156
157map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map4[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation grad ratio - spec std A89')
158plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param4.png')
159
160map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map5[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation spec A23 anom - spec A89 anom')
161plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param5.png')
162
163map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map6[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation spec A23 anom - ratio A89 anom')
164plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param6.png')
165
166map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map7[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation spec A23 anom - spec std A89')
167plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param7.png')
168
169map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map8[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation spec A89 anom - ratio A89 anom')
170plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param8.png')
171
172map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map9[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation spec A89 anom - std spec A89')
173plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param9.png')
174
175map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, corr_map10[:, :], -1.1, 1.1, 0.1, cm.s3pcpn_l_r, 'correlation ratio A89 anom - std spec A89')
176plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/maps/correlation_maps/correl_map_grad_ratio-param10.png')
177
178
179'''
180# test
181map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, std_spec_a[imo, :, :], 0., 0.12, 0.001, cm.s3pcpn_l_r, 'test')
182'''
183
184############################################################
185# correlation matrix between each parameter for each month #
186############################################################
187# reshape matrix into vector fo calculation or correlation per month between each parameter
188corr_mat = np.zeros([M, 5, 5], float)
189for imo in range (0, M):
190    print 'month ' + month[imo]
191    a = reshape(std_spec_a[imo, :, :], size(std_spec_a[imo, :, :]))
192    b = reshape(std_spec_b[imo, :, :], size(std_spec_b[imo, :, :]))
193    c = reshape(grad_ratio[imo, :, :], size(grad_ratio[imo, :, :]))
194    d = reshape(spec_anom_23[imo, :, :], size(spec_anom_23[imo, :, :]))
195    e = reshape(spec_anom_89[imo, :, :], size(spec_anom_89[imo, :, :]))
196    f = reshape(ratio_anom_89[imo, :, :], size(ratio_anom_89[imo, :, :]))
197    aa = a[nonzero(isnan(a) == False)]
198    bb = b[nonzero(isnan(b) == False)]
199    cc = c[nonzero(isnan(c) == False)]
200    dd = d[nonzero(isnan(d) == False)]
201    ee = e[nonzero(isnan(e) == False)]
202    ff = f[nonzero(isnan(f) == False)]
203    print len(aa), len(bb), len(cc), len(dd), len(ee), len(ff)
204    params = np.array([aa, cc, dd, ee, ff])
205    for ii in range (0, 5):
206        for jj in range (0, 5):
207            corr_mat[imo, ii, jj] = corrcoef(params[ii, :], params[jj, :])[0][1]
208
209
210ion()
211for imo in range (0, M):
212    figure()
213    pc = pcolor(corr_mat[imo, :, :], vmin = -1., vmax = 1., cmap = 'RdBu')
214    cbar = colorbar(pc)
215    xticks(np.arange(0.5, 5.5, 1.), np.array(['std spec A89', 'grad ratio A', 'spec A23 anom', 'spec A89 anom', 'ratio A89 anom']), rotation = 20)
216    yticks(np.arange(0.5, 5.5, 1.), np.array(['std spec A89', 'grad ratio A', 'spec A23 anom', 'spec A89 anom', 'ratio A89 anom']), rotation = 70)
217    cbar.set_label('correlation')
218    title(month[imo] + ' 2009')
219    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA89_AMSUB89/correlation_matrix/corr_matrix_emis_params_temporal_std89_' + MONTH[imo] + month[imo] + '2009.png')
220
221
222'''
223############################
224# map monthly mean and std #
225############################
226#ion()
227x_ind, y_ind, z_ind, volume = arctic_map.arctic_map_lat50()
228x_coast = x_ind
229y_coast = y_ind
230z_coast = z_ind
231for imo in range (0, M):
232    print 'map month ' + month[imo]
233    # emis spec std AMSUA89
234    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, std_spec_a[imo, :, :], 0., 0.12, 0.001, cm.s3pcpn_l_r, 'emis spec monthly std')
235    title('AMSUA 89GHz - ' + month[imo] + ' 2009')
236    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/comparison_lamb_spec/space_evolution/EMIS/cartesian_grid/monthly_std/std_emis_spec_AMSUA89_' + MONTH[imo] + month[imo] + '2009.png')
237    # emis spec std AMSUB89
238    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, std_spec_b[imo, :, :], 0., 0.12, 0.001, cm.s3pcpn_l_r, 'emis spec monthly std')
239    title('AMSUB 89GHz - ' + month[imo] + ' 2009')
240    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/comparison_lamb_spec/space_evolution/EMIS/cartesian_grid/monthly_std/std_emis_spec_AMSUB89_' + MONTH[imo] + month[imo] + '2009.png')
241    # gradient ratio
242    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, grad_ratio[imo, :, :], grad_ratio[nonzero(isnan(grad_ratio) == False)].min(), grad_ratio[nonzero(isnan(grad_ratio) == False)].max(), 0.001, cm.s3pcpn_l_r, 'Gradient ratio monthly mean')
243    title('AMSUA - ' + month[imo] + ' 2009')
244    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/maps/grad_ratio/map_monthly_mean_grad_ratio_AMSUA23-89_' + month[imo] + '2009.png')
245    # spec anomaly 23GHz
246    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, spec_anom_23[imo, :, :], spec_anom_23[nonzero(isnan(spec_anom_23) == False)].min(), spec_anom_23[nonzero(isnan(spec_anom_23) == False)].max(), 0.001, cm.s3pcpn_l_r, 'Emis spec anomaly 23GHz monthly mean')
247    title('AMSUA - ' + month[imo] + ' 2009')
248    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/maps/spec_anom_23/map_monthly_mean_spec_anomaly_AMSUA23_' + month[imo] + '2009.png')
249    # spec anomaly 89GHz
250    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, spec_anom_89[imo, :, :], spec_anom_89[nonzero(isnan(spec_anom_89) == False)].min(), spec_anom_89[nonzero(isnan(spec_anom_89) == False)].max(), 0.001, cm.s3pcpn_l_r, 'Emis spec anomaly 89GHz monthly mean')
251    title('AMSUA - ' + month[imo] + ' 2009')
252    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/maps/spec_anom_89/map_monthly_mean_spec_anomaly_AMSUA89_' + month[imo] + '2009.png')
253    # ratio anomaly 89GHz
254    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, ratio_anom_89[imo, :, :], ratio_anom_89[nonzero(isnan(ratio_anom_89) == False)].min(), ratio_anom_89[nonzero(isnan(ratio_anom_89) == False)].max(), 0.001, cm.s3pcpn_l_r, 'Emis ratio anomaly 89GHz monthly mean')
255    title('AMSUA - ' + month[imo] + ' 2009')
256    plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/maps/ratio_anom_89/map_monthly_mean_ratio_anomaly_AMSUA89_' + month[imo] + '2009.png')
257'''
258
259
260'''
261map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, std_spec_a[imo, :, :], std_spec_a[imo, :, :][nonzero(std_spec_a[imo, :, :] != 0.)].min(), std_spec_a[imo, :, :][nonzero(std_spec_a[imo, :, :] != 0.)].max(), 0.001, cm.s3pcpn_l_r, 'Gradient ratio monthly std')
262
263map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, gr[15, :, :], gr[15, :, :][nonzero(isnan(gr[15, :, :]) == False)].min(), gr[15, :, :][nonzero(isnan(gr[15, :, :]) == False)].max(), 0.001, cm.s3pcpn_l_r, 'daily gradient ratio (01-01-2009)')
264contour(xvec[xxi:xxf+1], yvec[yyi:yyf+1], )
265'''
Note: See TracBrowser for help on using the repository browser.