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

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

scripts ajoutes apres CEN

File size: 7.0 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
15
16
17
18#####################
19# read fichier .DAT #
20#####################
21fichier=open('/mma/hermozol/Documents/Data_tests/GLACE/GLACE_AMSUB89_EMIS_SEPTEMBER2009.DAT','r')
22numlines = 0
23for line in fichier: numlines += 1
24
25fichier.close
26
27fichier=open('/mma/hermozol/Documents/Data_tests/GLACE/GLACE_AMSUB89_EMIS_SEPTEMBER2009.DAT','r')
28
29nbtotal=numlines-1
30
31iligne=0
32lat=np.zeros([nbtotal],float)
33lon=np.zeros([nbtotal],float)
34jjr=np.zeros([nbtotal],float)
35zen=np.zeros([nbtotal],float)
36fov=np.zeros([nbtotal],float)
37ts=np.zeros([nbtotal],float)
38emis=np.zeros([nbtotal],float)
39tb=np.zeros([nbtotal],float)
40tup=np.zeros([nbtotal],float)
41tdn=np.zeros([nbtotal],float)
42trans=np.zeros([nbtotal],float)
43
44# format:
45# printf, luna2, xlon, ylat, annee, mois, jour, heure, jour_obs, heure_obs, tsy, zeny, fovy, saty, masque, ee89, tb89, tup89, tdn89, trans89, format='(18(f12.3,1X))' 
46
47while (iligne < nbtotal) :
48         line=fichier.readline()
49         # exemple : line = "0.22 2.3 5.0 6"
50         liste = line.split()
51         # exemple : listeCoord ['0.22', '2.3', '5.0', '6'] (liste de chaine de caract?es)
52         lat[iligne] = float(liste[1])
53         lon[iligne] = float(liste[0])
54         jjr[iligne] = float(liste[4])
55         ts[iligne] = float(liste[8])
56         fov[iligne] = float(liste[10])
57         zen[iligne] = float(liste[9])
58         emis[iligne] = float(liste[13])
59         tb[iligne] = float(liste[14])
60         tup[iligne] = float(liste[15])
61         tdn[iligne] = float(liste[16])
62         trans[iligne]  = float(liste[17])
63         iligne=iligne+1
64         
65
66fichier.close()
67
68for i in range (0, nbtotal):
69    if (emis[i] < 0.):
70        emis[i] = NaN
71    if (emis[i] > 1.):
72        emis[i] = 0.99 
73
74
75
76############################
77# definition of parameters #
78############################
79bblat = nonzero(lat >= 65.) # only high latitudes
80llon = lon[bblat] # longitude
81llat = lat[bblat] # latitude
82zen_angle = zen[bblat]# zenith angle
83field_view = fov[bblat] # field of view
84e = emis[bblat] # emissivity
85t_surf = ts[bblat] # surface temperature
86t_up = tup[bblat] # tup
87t_dn = tdn[bblat] # tdown
88transm = trans[bblat] # transmissivity
89t_b = tb[bblat] # brightness temperature
90L = shape(bblat)[1]
91
92
93#######################################
94# calculation of lamb_spec parameters #
95#######################################
96r = pi / 180.
97opac = - cos(zen_angle * r) * np.log(transm) 
98E3 = scipy.special.expn(3, opac)
99theta_eff = np.zeros([L], float)
100tdn_lamb = np.zeros([L], float)
101tb_spec = np.zeros([L], float)
102tb_lamb = np.zeros([L], float)
103e_spec = np.zeros([L], float)
104e_lamb = np.zeros([L], float)
105e_spec_lamb = np.zeros([L], float)
106for ii in range (0, L):
107    theta_eff[ii] = math.acos(- opac[ii] / (np.log(2. * E3[ii]))) * (1. / r)
108    tdn_lamb[ii] = t_surf[ii] * (1 - exp(- opac[ii] / cos (theta_eff[ii] * r))) # Tdown to calculate with theta_eff
109    tb_spec[ii] = (t_surf[ii] * e[ii] * exp(- opac[ii])) + (1. - e[ii]) * exp(- opac[ii]) * t_dn[ii] + t_up[ii] # calculation of Tb spec with theta
110    tb_lamb[ii] = (t_surf[ii] * e[ii] * exp(- opac[ii])) + (1. - e[ii]) * exp(- opac[ii]) * tdn_lamb[ii] + t_up[ii] # calculation of Tb spec with theta_eff (with Tdown_lamb)
111    e_spec[ii] = ((tb_spec[ii] - t_up[ii]) * exp(opac[ii]) - t_dn[ii]) / (t_surf[ii] - t_dn[ii])
112    e_lamb[ii] = ((tb_lamb[ii] - t_up[ii]) * exp(opac[ii]) - t_dn[ii]) / (t_surf[ii] - t_dn[ii]) 
113    e_spec_lamb[ii] = e_lamb[ii] - e_spec[ii]
114
115
116
117plt.ion()
118plt.figure()
119plt.scatter(opac, theta_eff)
120xlim(0.14, 0.42)
121ylim(52.9, 56.2)
122xticks(np.arange(0.14, 0.44, 0.02))
123grid(True)
124xlabel('zenith opacity')
125ylabel('effective incidence angle (deg)')
126title('SEPTEMBER 2009 - AMSUB')
127plt.savefig('/mma/hermozol/Documents/figure_output/comp_lamb_spec/scatter_theta_eff-opacity_sept2009_AMSUB.png')
128
129
130plt.figure()
131plt.scatter(field_view, e_spec_lamb)
132xlim(0., 90.)
133xticks(np.arange(0, 90, 5))
134grid(True)
135xlabel('scan position')
136ylabel('emissivity SPEC-LAMB')
137title('SEPTEMBER 2009 - AMSUB')
138plt.savefig('/mma/hermozol/Documents/figure_output/comp_lamb_spec/scatter_e-spec_e-lamb_fov_sept2009_AMSUB.png')
139
140
141
142e_diff_mean = np.zeros([89], float)
143e_diff_ect = np.zeros([89], float)
144for ifov in range (0, 89):
145    ind = np.where(field_view == float(ifov))[0]
146    if (ind == []):
147        e_diff_mean[ifov] = NaN
148        e_diff_ect[ifov] = NaN
149    else:
150        e_diff_mean[ifov] = mean(e_spec_lamb[ind])
151        e_diff_ect[ifov] = sqrt(sum((e_spec_lamb[ind] - e_diff_mean[ifov]) ** 2.))
152    if (e_diff_ect[ifov] == 0.):
153        e_diff_ect[ifov] = NaN
154
155
156   
157
158plt.figure()
159plt.plot(e_diff_mean, 'bo', label = 'mean value')
160xlabel('field of view')
161ylabel('emissivity SPEC-LAMB')
162legend(loc = 2)
163twinx()
164plot(e_diff_ect , 'go', label = 'std value')
165xlabel('standard deviation')
166xticks(np.arange(0, 90, 10))
167legend(loc = 1)
168plt.title('SEPTEMBER 2009 - AMSUB')
169plt.savefig('/mma/hermozol/Documents/figure_output/comp_lamb_spec/evo_emis_lamb-spec_fov_sept2009_AMSUB.png')
170
171
172
173
174
175##############################################
176# stack of lamb_spec parameters in .txt file #
177##############################################
178data_spec_lamb = open ('/mma/hermozol/Documents/Data_tests/monthly_GLACE/lamb_spec_param_all_angles_SEPTEMBER2009.dat', 'a')
179for ii in range (0, L):
180    data_spec_lamb.write(('%(lon)4.2f    %(lat)4.2f    %(za)4.2f    %(fov)2.0f   %(emis)5.4f   %(tsurf)5.2f   %(tup)5.2f   %(tdn)5.2f    %(trans)5.4f   %(tb)5.2f    %(opac)5.4f    %(theta_eff)5.3f    %(tdn_lamb)5.2f    %(tb_spec)5.2f    %(tb_lamb)5.2f    %(e_spec)5.4f    %(e_lamb)5.4f    %(e_diff)5.4f \n' % {
181                                            'lon':llon[ii],
182                                            'lat':llat[ii],
183                                            'za':zen_angle[ii],
184                                            'fov':field_view[ii],
185                                            'emis':e[ii],
186                                            'tsurf':t_surf[ii],
187                                            'tup':t_up[ii],
188                                            'tdn':t_dn[ii],
189                                            'trans':transm[ii],
190                                            'tb':t_b[ii],
191                                            'opac':opac[ii],
192                                            'theta_eff':theta_eff[ii],
193                                            'tdn_lamb':tdn_lamb[ii],
194                                            'tb_spec':tb_spec[ii],
195                                            'tb_lamb':tb_lamb[ii],
196                                            'e_spec':e_spec[ii],
197                                            'e_lamb':e_lamb[ii],
198                                            'e_diff':e_spec_lamb[ii],
199                                            }))
200
201
202data_spec_lamb.close()
203
204
205
206
Note: See TracBrowser for help on using the repository browser.