1 | ; docformat = 'rst' |
---|
2 | ;+ |
---|
3 | ; |
---|
4 | ; ============ |
---|
5 | ; correc_amsu.pro |
---|
6 | ; ============ |
---|
7 | ; |
---|
8 | ; .. function: correc_amsu(numch, yyyyb, mmb, ddb, yyyye, mme, dde, lonmin, lonmax, latmin, latmax) |
---|
9 | ; DESCRIPTION |
---|
10 | ; =========== |
---|
11 | ; |
---|
12 | ; programme d'interpolation avec algorithme de Cressmann'ajustement |
---|
13 | ;des donnees nadir (en complément de la correction de FK) |
---|
14 | ; |
---|
15 | ;; grille de sortie en long / lat |
---|
16 | ; recoit en entree les jours de l'annee jdeb et jfin |
---|
17 | ;correspondant au debut et la fin du mois |
---|
18 | ; |
---|
19 | |
---|
20 | ; EXAMPLES |
---|
21 | ; ======== |
---|
22 | ; |
---|
23 | ; :: |
---|
24 | ; |
---|
25 | ; numch='a5' |
---|
26 | ; yyyyb=2006L |
---|
27 | ; yyyye=2006L |
---|
28 | ; mmb=8 |
---|
29 | ; mme=8 |
---|
30 | ; ddb=1 |
---|
31 | ; dde=3 |
---|
32 | ; lonmin=-25. |
---|
33 | ; lonmax=25. |
---|
34 | ; latmin=-5. |
---|
35 | ; latmax=20. |
---|
36 | |
---|
37 | ; result = cresamsu(numch, yyyyb, mmb, ddb $ |
---|
38 | ; , yyyye, mme, dde $ |
---|
39 | ; , lonmin, lonmax, latmin, latmax) |
---|
40 | ; |
---|
41 | ; |
---|
42 | ; SEE ALSO |
---|
43 | ; ======== |
---|
44 | ; |
---|
45 | ; Previous step :ref:`extract_amsu.pro` (:ref:`traite_amsuab.sh`) |
---|
46 | ; :ref:`traite_amsuab.sh` |
---|
47 | ; |
---|
48 | ; Use :func:`file_amsu_t2_to_mem |
---|
49 | ; :func:`idl_amsu_netcdf` |
---|
50 | ; |
---|
51 | ; TODO |
---|
52 | ; ==== |
---|
53 | ; |
---|
54 | ; |
---|
55 | ;; EVOLUTIONS |
---|
56 | ; ========== |
---|
57 | ; |
---|
58 | |
---|
59 | function correc_amsu $ |
---|
60 | , numch $ |
---|
61 | , yyyyb $ |
---|
62 | , mmb $ |
---|
63 | , ddb $ |
---|
64 | , yyyye $ |
---|
65 | , mme $ |
---|
66 | , dde $ |
---|
67 | , lonmin $ |
---|
68 | , lonmax $ |
---|
69 | , latmin $ |
---|
70 | , latmax |
---|
71 | |
---|
72 | compile_opt idl2, strictarrsubs |
---|
73 | @cm_project |
---|
74 | ; |
---|
75 | s = size(SCOPE_TRACEBACK(/STRUCTURE),/DIMENSION) |
---|
76 | routine = (SCOPE_TRACEBACK(/STRUCTURE))[s-1].Routine |
---|
77 | ; |
---|
78 | key_performance=0 |
---|
79 | if key_performance EQ 1 THEN BEGIN |
---|
80 | time1 = SYSTIME(1) |
---|
81 | ENDIF |
---|
82 | ; |
---|
83 | ; |
---|
84 | ; Return to caller if errors |
---|
85 | ON_ERROR, 2 |
---|
86 | result = -1 |
---|
87 | ; |
---|
88 | usage = 'result = correc_amsu(numch, yyyyb, mmb, ddb, yyyye, mme, dde, lonmin, lonmax, latmin, latmax)' |
---|
89 | ; |
---|
90 | nparam = N_PARAMS() |
---|
91 | IF (nparam NE 11) THEN BEGIN |
---|
92 | ras = report(['Incorrect number of arguments.' $ |
---|
93 | + '!C' $ |
---|
94 | + 'Usage : ' + usage]) |
---|
95 | return, result |
---|
96 | ENDIF |
---|
97 | ; |
---|
98 | tbmin=100 |
---|
99 | tbmax=350 |
---|
100 | |
---|
101 | prefix=numch |
---|
102 | look = 'filename' |
---|
103 | geomin = geolocation_to_string_idl(lonmin, latmin, look,1) |
---|
104 | geomax = geolocation_to_string_idl(lonmax, latmax, look,1) |
---|
105 | |
---|
106 | testfilename='' |
---|
107 | nbfile = 0L |
---|
108 | ; lecture des fichiers |
---|
109 | ddmb=ddb |
---|
110 | ddme=dde |
---|
111 | mmyb=mmb |
---|
112 | mmye=mme |
---|
113 | indic=0 |
---|
114 | for yyyy=yyyyb,yyyye do begin |
---|
115 | if (yyyye ne yyyyb) then begin |
---|
116 | mmyb=1 |
---|
117 | mmye=12 |
---|
118 | if yyyy eq yyyyb then mmyb=mmb |
---|
119 | if yyyy eq yyyye then mmye=mme |
---|
120 | endif |
---|
121 | print,"traitement annee ",yyyy,'mois ',mmyb,'a ',mmye |
---|
122 | for mm=mmyb,mmye do begin |
---|
123 | if (mme ne mmb) then begin |
---|
124 | ddmb=1 |
---|
125 | ddme=31 |
---|
126 | if mm eq mmb then ddmb=ddb |
---|
127 | if mm eq mme then ddme=dde |
---|
128 | endif |
---|
129 | print,"mois ",mm,"jours ",ddmb,"a ",ddme |
---|
130 | for dd=ddmb,ddme do begin |
---|
131 | print, 'iii : traitement du jour ',yyyy,mm,dd |
---|
132 | ; lecture du fichier journalier |
---|
133 | result=file_amsu_t2_to_mem( yyyy, mm, dd, numch $ |
---|
134 | , lonmin, lonmax, latmin, latmax $ |
---|
135 | , testfilename) |
---|
136 | if (size(result,/TYPE) EQ 3) THEN BEGIN |
---|
137 | goto, nofile |
---|
138 | ENDIF |
---|
139 | desc=result.data.desc |
---|
140 | hour=result.data.hour |
---|
141 | fov=result.data.fov |
---|
142 | lon=result.data.lon |
---|
143 | lat=result.data.lat |
---|
144 | mask=result.data.landseamask |
---|
145 | tb1=result.data.tb |
---|
146 | ; decodage du nb de points (nn) |
---|
147 | nn=n_elements(tb1) |
---|
148 | |
---|
149 | if indic eq 0 then begin |
---|
150 | nfov=max(fov) |
---|
151 | fovv=indgen(nfov)+1 |
---|
152 | sumtb=fltarr(nfov) |
---|
153 | vartb=fltarr(nfov) |
---|
154 | kont=intarr(nfov)*0L |
---|
155 | endif |
---|
156 | nfovday=max(fov) |
---|
157 | if nfovday gt nfov then goto, nextday |
---|
158 | for ifov=0,nfov-1 do begin |
---|
159 | ind=where(fov eq ifov+1 and mask eq 1 ,nifov) |
---|
160 | if (nifov ne 0) then begin |
---|
161 | sumtb[ifov]=sumtb[ifov]+tb1[ind] |
---|
162 | vartb[ifov]=vartb[ifov]+tb1[ind]*tb1[ind] |
---|
163 | kont[ifov]=kont[ifov]+1L |
---|
164 | endif |
---|
165 | endfor |
---|
166 | |
---|
167 | nofile: |
---|
168 | print, 'www : no data to read for this day' |
---|
169 | goto, nextday |
---|
170 | nextday: |
---|
171 | indic=indic+1 |
---|
172 | endfor |
---|
173 | endfor |
---|
174 | ; fin boucle sur le temps |
---|
175 | endfor |
---|
176 | |
---|
177 | moytb=sumtb/kont |
---|
178 | sigtb=sqrt((vartb-moytb*moytb)/kont) |
---|
179 | window,0 |
---|
180 | plot,fovv,moytb,psym=7,xstyle=1,ystyle=1,yrange=[min(moytb)-max(sigtb),max(moytb)+max(sigtb)] |
---|
181 | errplot,moytb-sigtb,moytb+sigtb |
---|
182 | |
---|
183 | |
---|
184 | print,moytb |
---|
185 | |
---|
186 | realend: |
---|
187 | |
---|
188 | result = 0 |
---|
189 | return, result |
---|
190 | end |
---|