source: trunk/src/scripts_Laura/ARCTIC/Travail_CEN/daily_evolution_anomaly_grad_ratio.py @ 55

Last change on this file since 55 was 52, checked in by lahlod, 10 years ago

modifs

File size: 15.9 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
44
45'''
46############################################
47# time evolution (monthly) in a given zone #
48############################################
49#zone 1 (seasonal ice) : yi = 960. // yf = 1360. // xi = -680. // xf = -320. (North Beaufort Sea)
50#zone 2 (multiyear ice) : yi = 320. // yf = 720. // xi = -1080. // xf = -720. (North Canadian Archipelago)
51#zone 3 (young ice) : yi = 1880. // yf = 2280. // xi = -480. // xf = -120. (Chukchi Sea)
52
53# select borders of zone
54yi = 320.
55yf = 720.
56xi = -1080.
57xf = -720.
58
59#find corresponding index in xvec and yvec
60xxi = np.where(xvec == xi)[0][0]
61xxf = np.where(xvec == xf)[0][0]
62yyi = np.where(yvec == yi)[0][0]
63yyf = np.where(yvec == yf)[0][0]
64
65len(xvec[xxi:xxf+1])
66len(yvec[yyi:yyf+1])
67
68mean_grad_ratio_zone = np.zeros([M, 31], float)
69std_grad_ratio_zone = np.zeros([M, 31], float)
70
71mean_spec_anom_23_zone = np.zeros([M, 31], float)
72std_spec_anom_23_zone = np.zeros([M, 31], float)
73
74mean_spec_anom_89_zone = np.zeros([M, 31], float)
75std_spec_anom_89_zone = np.zeros([M, 31], float)
76
77mean_ratio_anom_89_zone = np.zeros([M, 31], float)
78std_ratio_anom_89_zone = np.zeros([M, 31], float)
79
80S = np.zeros([M, 31], float)
81
82for imo in range (0, M):
83    # daily read gradient ratio file
84    print 'read daily gradient ratio for month ' + month[imo]
85    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')
86    gr = fichier_grad_ratio.variables['grad_ratio'][:]
87    fichier_grad_ratio.close()
88    # read daily emis anomaly file for 23GHz
89    print 'read daily emis anomaly 23GHz for month ' + month[imo]
90    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')
91    sa_23 = fichier_anom23.variables['spec_anomaly'][:]
92    fichier_anom23.close()
93    # read daily emis anomaly file for 89GHz
94    print 'read daily emis anomaly 89GHz for month ' + month[imo]
95    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')
96    sa_89 = fichier_anom89.variables['spec_anomaly'][:]
97    ra_89 = fichier_anom89.variables['ratio_anomaly'][:]
98    fichier_anom89.close()
99    grad_ratio_vec = np.zeros([month_day[imo], len(xvec[xxi : xxf+1]) * len(yvec[yyi : yyf+1])], float)
100    spec_anom_23_vec = np.zeros([month_day[imo], len(xvec[xxi : xxf+1]) * len(yvec[yyi : yyf+1])], float)
101    spec_anom_89_vec = np.zeros([month_day[imo], len(xvec[xxi : xxf+1]) * len(yvec[yyi : yyf+1])], float)
102    ratio_anom_89_vec = np.zeros([month_day[imo], len(xvec[xxi : xxf+1]) * len(yvec[yyi : yyf+1])], float)
103    print 'calculate daily mean and std zonal gradient ratio'
104    for ijr in range (0, month_day[imo]):
105        print 'date ' + str(ijr+1) + ' ' + month[imo] + ' 2009'
106        S[imo, ijr] = shape(gr[ijr, yyi : yyf + 1, xxi : xxf + 1][nonzero(isnan(gr[ijr, yyi : yyf + 1, xxi : xxf + 1]) == False)])[0]
107        # gradient ratio
108        grad_ratio_vec[ijr, :] = reshape(gr[ijr, yyi : yyf + 1, xxi : xxf + 1], size(gr[ijr, yyi : yyf + 1, xxi : xxf + 1]))
109        mean_grad_ratio_zone[imo, ijr] = mean(grad_ratio_vec[ijr, :][nonzero(isnan(grad_ratio_vec[ijr, :]) == False)])
110        std_grad_ratio_zone[imo, ijr] = sqrt((1. / (size(gr[ijr, yyi : yyf+1, xxi : xxf+1]) - 1.)) * sum((grad_ratio_vec[ijr, :][nonzero(isnan(grad_ratio_vec[ijr, :]) == False)] - mean_grad_ratio_zone[imo, ijr])**2))
111        # spec anomaly 23GHz
112        spec_anom_23_vec[ijr, :] = reshape(sa_23[ijr, yyi : yyf + 1, xxi : xxf + 1], size(sa_23[ijr, yyi : yyf + 1, xxi : xxf + 1]))
113        mean_spec_anom_23_zone[imo, ijr] = mean(spec_anom_23_vec[ijr, :][nonzero(isnan(spec_anom_23_vec[ijr, :]) == False)])
114        std_spec_anom_23_zone[imo, ijr] = sqrt((1. / (size(sa_23[ijr, yyi : yyf+1, xxi : xxf+1]) - 1.)) * sum((spec_anom_23_vec[ijr, :][nonzero(isnan(spec_anom_23_vec[ijr, :]) == False)] - mean_spec_anom_23_zone[imo, ijr])**2))
115        # spec anomaly 89GHz
116        spec_anom_89_vec[ijr, :] = reshape(sa_89[ijr, yyi : yyf + 1, xxi : xxf + 1], size(sa_89[ijr, yyi : yyf + 1, xxi : xxf + 1]))
117        mean_spec_anom_89_zone[imo, ijr] = mean(spec_anom_89_vec[ijr, :][nonzero(isnan(spec_anom_89_vec[ijr, :]) == False)])
118        std_spec_anom_89_zone[imo, ijr] = sqrt((1. / (size(sa_89[ijr, yyi : yyf+1, xxi : xxf+1]) - 1.)) * sum((spec_anom_89_vec[ijr, :][nonzero(isnan(spec_anom_89_vec[ijr, :]) == False)] - mean_spec_anom_89_zone[imo, ijr])**2))
119        # ratio anomaly 89GHz
120        ratio_anom_89_vec[ijr, :] = reshape(ra_89[ijr, yyi : yyf + 1, xxi : xxf + 1], size(ra_89[ijr, yyi : yyf + 1, xxi : xxf + 1]))
121        mean_ratio_anom_89_zone[imo, ijr] = mean(ratio_anom_89_vec[ijr, :][nonzero(isnan(ratio_anom_89_vec[ijr, :]) == False)])
122        std_ratio_anom_89_zone[imo, ijr] = sqrt((1. / (size(ra_89[ijr, yyi : yyf+1, xxi : xxf+1]) - 1.)) * sum((ratio_anom_89_vec[ijr, :][nonzero(isnan(ratio_anom_89_vec[ijr, :]) == False)] - mean_ratio_anom_89_zone[imo, ijr])**2))
123        if (isnan(mean_grad_ratio_zone[imo, ijr]) == True):
124            std_grad_ratio_zone[imo, ijr] = NaN
125        if (isnan(mean_spec_anom_23_zone[imo, ijr]) == True):
126            std_spec_anom_23_zone[imo, ijr] = NaN
127        if (isnan(mean_spec_anom_89_zone[imo, ijr]) == True):
128            std_spec_anom_89_zone[imo, ijr] = NaN
129        if (isnan(mean_ratio_anom_89_zone[imo, ijr]) == True):
130            std_ratio_anom_89_zone[imo, ijr] = NaN
131
132
133
134# append daily zonal gradient ratio for study of the whole year 2009
135mean_year_grad_ratio = np.append(mean_grad_ratio_zone[0, 0 : month_day[0]], mean_grad_ratio_zone[1, 0 : month_day[1]])
136std_year_grad_ratio = np.append(std_grad_ratio_zone[0, 0 : month_day[0]], std_grad_ratio_zone[1, 0 : month_day[1]])
137
138mean_year_spec_anom_23 = np.append(mean_spec_anom_23_zone[0, 0 : month_day[0]], mean_spec_anom_23_zone[1, 0 : month_day[1]])
139std_year_spec_anom_23 = np.append(std_spec_anom_23_zone[0, 0 : month_day[0]], std_spec_anom_23_zone[1, 0 : month_day[1]])
140
141mean_year_spec_anom_89 = np.append(mean_spec_anom_89_zone[0, 0 : month_day[0]], mean_spec_anom_89_zone[1, 0 : month_day[1]])
142std_year_spec_anom_89 = np.append(std_spec_anom_89_zone[0, 0 : month_day[0]], std_spec_anom_89_zone[1, 0 : month_day[1]])
143
144mean_year_ratio_anom_89 = np.append(mean_ratio_anom_89_zone[0, 0 : month_day[0]], mean_ratio_anom_89_zone[1, 0 : month_day[1]])
145std_year_ratio_anom_89 = np.append(std_ratio_anom_89_zone[0, 0 : month_day[0]], std_ratio_anom_89_zone[1, 0 : month_day[1]])
146
147year_S = np.append(S[0, 0 : month_day[0]], S[1, 0 : month_day[1]])
148
149for imo in range (2, M):
150    # gradient ratio
151    mean_year_grad_ratio = np.append(mean_year_grad_ratio, mean_grad_ratio_zone[imo, 0 : month_day[imo]])
152    std_year_grad_ratio = np.append(std_year_grad_ratio, std_grad_ratio_zone[imo, 0 : month_day[imo]])
153    # spec anomaly 23GHz
154    mean_year_spec_anom_23 = np.append(mean_year_spec_anom_23, mean_spec_anom_23_zone[imo, 0 : month_day[imo]])
155    std_year_spec_anom_23 = np.append(std_year_spec_anom_23, std_spec_anom_23_zone[imo, 0 : month_day[imo]])
156    # spec anomaly 89GHz
157    mean_year_spec_anom_89 = np.append(mean_year_spec_anom_89, mean_spec_anom_89_zone[imo, 0 : month_day[imo]])
158    std_year_spec_anom_89 = np.append(std_year_spec_anom_89, std_spec_anom_89_zone[imo, 0 : month_day[imo]])
159    # ratio anomaly 89GHz
160    mean_year_ratio_anom_89 = np.append(mean_year_ratio_anom_89, mean_ratio_anom_89_zone[imo, 0 : month_day[imo]])
161    std_year_ratio_anom_89 = np.append(std_year_ratio_anom_89, std_ratio_anom_89_zone[imo, 0 : month_day[imo]])
162    # number of data points in area of study
163    year_S = np.append(year_S, S[imo, 0 : month_day[imo]])
164
165
166
167############################################################################
168# calculate standard deviation of emissivity parameters over the year 2009 #
169############################################################################
170print 'calculate standard deviation of emissivity parameters over the year 2009'
171time_std1 = sqrt((1./364.)*sum((mean_year_grad_ratio[nonzero(isnan(mean_year_grad_ratio) == False)] - mean(mean_year_grad_ratio[nonzero(isnan(mean_year_grad_ratio) == False)]))**2))
172
173time_std2 = sqrt((1./364.)*sum((mean_year_spec_anom_23[nonzero(isnan(mean_year_spec_anom_23) == False)] - mean(mean_year_spec_anom_23[nonzero(isnan(mean_year_spec_anom_23) == False)]))**2))
174
175time_std3 = sqrt((1./364.)*sum((mean_year_spec_anom_89[nonzero(isnan(mean_year_spec_anom_89) == False)] - mean(mean_year_spec_anom_89[nonzero(isnan(mean_year_spec_anom_89) == False)]))**2))
176
177time_std4 = sqrt((1./364.)*sum((mean_year_ratio_anom_89[nonzero(isnan(mean_year_ratio_anom_89) == False)] - mean(mean_year_ratio_anom_89[nonzero(isnan(mean_year_ratio_anom_89) == False)]))**2))
178
179
180
181
182#########################
183# plot daily parameters #
184#########################
185vec_months = np.array([0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334])
186ion()
187figure()
188subplot(2, 1, 1)
189plot(mean_year_grad_ratio, 'b', label = 'grad ratio')
190plot(mean_year_spec_anom_23, 'r', label = 'spec anom 23GHz')
191plot(mean_year_spec_anom_89, 'g', label = 'spec anom 89GHz')
192plot(np.zeros([365], float), '--k')
193xticks(vec_months, month, rotation = 25)
194xlim(0, 365)
195fontP = FontProperties()
196fontP.set_size('small')
197legend(loc = 3, prop = fontP)
198grid()
199subplot(2, 1, 2)
200plot(mean_year_ratio_anom_89, 'y', label = 'ratio anom 89GHz')
201plot(np.zeros([365], float), '--k')
202xlim(0, 365)
203xticks(vec_months, month, rotation = 25)
204legend(loc = 1, prop = fontP)
205grid()
206plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/sub_classification/study_by_zones/monthly_evolution_grad_ratio_emis_anomaly_params_zone_Chukchi_Sea.png')
207############################################
208# plot daily number of data points in area #
209############################################
210vec_months = np.array([0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334])
211figure()
212plot(year_S, label = 'mean=' + str(mean(year_S))[0:5] + ' ; std=' + str(std(year_S))[0:5])
213xticks(vec_months, month, rotation = 25)
214xlim(0, 365)
215ylabel('Number of data points in area')
216fontP = FontProperties()
217fontP.set_size('small')
218legend(loc = 1, prop = fontP)
219title('North Canadian Archipelago')
220plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/sub_classification/study_by_zones/monthly_evolution_nber_data_points_zone_North_Canadian_Archipelago.png')
221
222
223
224subplot(2, 1, 2)
225plot(std_year_grad_ratio, '--b', label = 'std grad ratio')
226plot(std_year_grad_ratio, '--r', label = 'std grad ratio')
227plot(std_year_grad_ratio, '--g', label = 'std grad ratio')
228plot(std_year_grad_ratio, '--y', label = 'std grad ratio')
229xticks(vec_months, month, rotation = 25)
230legend(loc = 2, prop = fontP)
231xlim(0, 365)
232
233
234
235####################
236# map studied zone #
237####################
238ion()
239x_ind, y_ind, z_ind, volume = arctic_map.arctic_map_lat50()
240x_coast = x_ind
241y_coast = y_ind
242z_coast = z_ind
243map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec[xxi : xxf + 1], yvec[yyi : yyf + 1], gr[0, yyi : yyf + 1, xxi : xxf + 1], gr[0, :, :][nonzero(isnan(gr[0, :, :]) == False)].min(), gr[0, :, :][nonzero(isnan(gr[0, :, :]) == False)].max(), 0.001, cm.s3pcpn_l_r, 'daily gradient ratio (01-01-2009)')
244title('area of study - Chukchi Sea')
245plt.savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/sub_classification/study_by_zones/map_grad_ratio_zone_Chukchi_Sea.png')
246'''
247
248
249################################
250# map parameters in all Arctic #
251################################
252cumul_params = np.zeros([M, ny, nx], float)
253grad_ratio = np.zeros([M, ny, nx], float)
254spec_anom_23 = np.zeros([M, ny, nx], float)
255spec_anom_89 = np.zeros([M, ny, nx], float)
256ratio_anom_89 = np.zeros([M, ny, nx], float)
257CP = np.zeros([M, ny, nx], float)
258for imo in range (0, M): 
259    # daily read gradient ratio file
260    print 'read daily gradient ratio for month ' + month[imo]
261    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')
262    gr = fichier_grad_ratio.variables['grad_ratio'][:]
263    fichier_grad_ratio.close()
264    # read daily emis anomaly file for 23GHz
265    print 'read daily emis anomaly 23GHz for month ' + month[imo]
266    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')
267    sa_23 = fichier_anom23.variables['spec_anomaly'][:]
268    fichier_anom23.close()
269    # read daily emis anomaly file for 89GHz
270    print 'read daily emis anomaly 89GHz for month ' + month[imo]
271    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')
272    sa_89 = fichier_anom89.variables['spec_anomaly'][:]
273    ra_89 = fichier_anom89.variables['ratio_anomaly'][:]
274    fichier_anom89.close()
275    for ilon in range (0, nx):
276        for ilat in range (0, ny):
277            grad_ratio[imo, ilat, ilon] = mean(gr[:, ilat, ilon][nonzero(isnan(gr[:, ilat, ilon]) == False)])
278            spec_anom_23[imo, ilat, ilon] = mean(sa_23[:, ilat, ilon][nonzero(isnan(sa_23[:, ilat, ilon]) == False)])
279            spec_anom_89[imo, ilat, ilon] = mean(sa_89[:, ilat, ilon][nonzero(isnan(sa_89[:, ilat, ilon]) == False)])
280            ratio_anom_89[imo, ilat, ilon] = mean(ra_89[:, ilat, ilon][nonzero(isnan(ra_89[:, ilat, ilon]) == False)])
281            cumul_params[imo, ilat, ilon] = abs(grad_ratio[imo, ilat, ilon]) + abs(spec_anom_23[imo, ilat, ilon]) + abs(spec_anom_89[imo, ilat, ilon]) + abs(ratio_anom_89[imo, ilat, ilon])
282    CP[imo, :, :] = (cumul_params[imo, :, :]/max(cumul_params[imo, :, :][nonzero(isnan(cumul_params[imo, :, :]) == False)])) * 100.
283
284
285#ion()
286x_ind, y_ind, z_ind, volume = arctic_map.arctic_map_lat50()
287x_coast = x_ind
288y_coast = y_ind
289z_coast = z_ind
290for imo in range (0, M):
291    print 'map month ' + month[imo]
292    map_cartesian_grid.draw_map_cartes_l(x_coast, y_coast, z_coast, volume, xvec, yvec, CP[imo, :, :], 0., 100., 1., cm.s3pcpn_l_r, 'Cumulation index (%)')
293    title('AMSUA - ' + month[imo] + ' 2009')
294    savefig('/usr/home/lahlod/twice_d/fig_output_ARCTIC/fig_output_sea_ice_study/ice_class_AMSUA/sub_classification/maps/cumul_params/cumul_all_parameters/map_cumulation_index_'+ str(MONTH[imo]) + month[imo] + '2009.png')
Note: See TracBrowser for help on using the repository browser.