1 | function [meantimestepof0, stdtimestepof0] = nonprecipperiods(ij_concat, time_concat, Longitudes, Latitudes, nomvar, infocompl, minmean, maxmean, minstd, maxstd)
|
---|
2 |
|
---|
3 | %NONPRECIPPERIODS est une fonction permettant de suivre les periodes de
|
---|
4 | %pauses dans les precipitations et de tracer la carte des moyennes des
|
---|
5 | %jours de non precipitation dans une pause ainsi que la carte des
|
---|
6 | %ecart-types.
|
---|
7 |
|
---|
8 | %
|
---|
9 | %+
|
---|
10 | %
|
---|
11 | % ==================
|
---|
12 | % nonprecipperiods.m
|
---|
13 | % ==================
|
---|
14 | %
|
---|
15 | % .. function:: nonprecipperiods(ij_concat, time_concat, Longitudes, Latitudes, nomvar, infocompl, minmean, maxmean, minstd, maxstd)
|
---|
16 | %
|
---|
17 | % DESCRIPTION
|
---|
18 | % ===========
|
---|
19 | %
|
---|
20 | % - Donnees d'entrees :
|
---|
21 | %
|
---|
22 | % * ij_concat : Matrice des donnees de precipitations dont les dimensions
|
---|
23 | % sont temps, longitudes, latitudes.
|
---|
24 | % * time_concat : Variable temporelle des donnees de precipitation en
|
---|
25 | % jour julien.
|
---|
26 | % * Longitudes : Variable de la seconde dimension des donnees, les
|
---|
27 | % longitudes.
|
---|
28 | % * Latitudes : Variable de la seconde dimension des donnees, les
|
---|
29 | % latitudes.
|
---|
30 | % * nomvar (en caracteres) : Nom de la variable de precipitation, source
|
---|
31 | % des donnees par exemple ('cumuls EPSAT (mm)' ou 'cumuls par analyses
|
---|
32 | % des Tb MSG (mm)').
|
---|
33 | % * infocompl (en caracteres, factultatif) : Informations complementaires
|
---|
34 | % sur les donnees pour le titre. (La date etant automatiquement indique
|
---|
35 | % dans le titre, informations suite a une operation special, 'echelle
|
---|
36 | % restreinte entre 0 et 7' par exemple).
|
---|
37 | % * minmean (Facultatif) : Borne inferieure de l'echelle des moyennes.
|
---|
38 | % * maxmean (Facultatif) : Borne superieure de l'echelle des moyennes.
|
---|
39 | % * minstd (Facultatif) : Borne inferieure de l'echelle des ecart-types.
|
---|
40 | % * maxstd (Facultatif) : Borne inferieure de l'echelle des ecart-types.
|
---|
41 | %
|
---|
42 | % - Donnees de sorties :
|
---|
43 | %
|
---|
44 | % * meantimestepof0 : Matrice comportant les donnees moyennes de jours de
|
---|
45 | % non precipitations et dont les dimensions sont longitudes et
|
---|
46 | % latitudes.
|
---|
47 | % * stdtimestepof0 : Matrice comportant les donnees des ecart-types des
|
---|
48 | % jours de non precipitations et dont les dimensions sont longitudes et
|
---|
49 | % latitudes.
|
---|
50 | %
|
---|
51 | % Cette fonction permet de suivre les periodes de pauses dans les
|
---|
52 | % et de tracer la carte des moyennes des jours de non precipitation dans
|
---|
53 | % une pause ainsi que la carte des ecart-types.
|
---|
54 | %
|
---|
55 | % EXAMPLES
|
---|
56 | % ========
|
---|
57 | %
|
---|
58 | % Voir la 'demo'.
|
---|
59 | %
|
---|
60 | % SEE ALSO
|
---|
61 | % ========
|
---|
62 | %
|
---|
63 | % :ref:`data_epsat`
|
---|
64 | %
|
---|
65 | % :ref:`data_msg`
|
---|
66 | %
|
---|
67 | % :func:`cumulEPSAT_concat`
|
---|
68 | % :func:`intensityMSG_concat`
|
---|
69 | %
|
---|
70 | % TODO
|
---|
71 | % ====
|
---|
72 | %
|
---|
73 | % describe demo
|
---|
74 | %
|
---|
75 | % demo with simulated data
|
---|
76 | %
|
---|
77 | % cratos octave 3.4 : warning: ft_render: skipping missing glyph for character `
|
---|
78 | %
|
---|
79 | % should long text be written on the figure ? now : pb of adjustment between plot size and text length
|
---|
80 | %
|
---|
81 | % fix colorbar limits to make comparison between matlab/octave and machine easier
|
---|
82 | %
|
---|
83 | % EVOLUTIONS
|
---|
84 | % ==========
|
---|
85 | %
|
---|
86 | % $Id$
|
---|
87 | %
|
---|
88 | % $URL$
|
---|
89 | %
|
---|
90 | % - fplod 20110804T132212Z aedon.locean-ipsl.upmc.fr (Darwin)
|
---|
91 | %
|
---|
92 | % * mimize decoration (but not enougth ?)
|
---|
93 | %
|
---|
94 | % - jaclod 2011-07-29
|
---|
95 | %
|
---|
96 | % * Ajout des donnees de sorties.
|
---|
97 | % * Ajout d'une restriction sur les echelles de moyennes et ecart-types
|
---|
98 | % pour une meilleure observation.
|
---|
99 | % * Ajout de la demonstration.
|
---|
100 | % * Ajout des cotes.
|
---|
101 | %
|
---|
102 | % - jaclod 2011-07-28
|
---|
103 | %
|
---|
104 | % * Ajout de la suppression de la variable 'timestepof0' qui induit des
|
---|
105 | % erreurs sinon (il peut rester des valeurs du pixel precedent).
|
---|
106 | % * Suppression des autres variables egalement.
|
---|
107 | % * Suppression des pas de temps ou les donnees sont des 'NaN'.
|
---|
108 | % * Modifications des titres.
|
---|
109 | %
|
---|
110 | % - jaclod 2011-07-27
|
---|
111 | %
|
---|
112 | % * Creation.
|
---|
113 | %
|
---|
114 | %-
|
---|
115 |
|
---|
116 | %%%%%%%%%%%%%%%%%
|
---|
117 | % Initialisation
|
---|
118 | %%%%%%%%%%%%%%%%%
|
---|
119 |
|
---|
120 | % Initialisation de la matrice qui contiendra les moyennes du temps en jour
|
---|
121 | % des periodes de non precipitations.
|
---|
122 | meantimestepof0 = zeros(size(ij_concat,2),size(ij_concat,3));
|
---|
123 |
|
---|
124 | % Initialisation de la matrice qui contiendra les ecart-types du temps en
|
---|
125 | % jour des periodes de non precipitations.
|
---|
126 | stdtimestepof0 = zeros(size(ij_concat,2),size(ij_concat,3));
|
---|
127 |
|
---|
128 | % Suppressions des donnees pour les jours ou nous avons que des 'NaN'.
|
---|
129 | % On cherche s'il y en a, quels sont les pas de temps concernes et leur
|
---|
130 | % nombre.
|
---|
131 | indnan = find(isnan(ij_concat(:,1,1)));
|
---|
132 | nbnan = size(indnan,1);
|
---|
133 |
|
---|
134 | % S'il y en a, on va les supprimer.
|
---|
135 | if ~isempty(indnan);
|
---|
136 |
|
---|
137 | % On boucle pour supprimer chaque pas de temps concernes en commencant
|
---|
138 | % par les derniers (si on souhaite par exemple supprimer les pas de
|
---|
139 | % temps 2 et 5 et que l'on supprime le 2 d'abord, le 5e pas de temps
|
---|
140 | % sera ensuite decale au 4e. En commencant par la fin, cela ne se
|
---|
141 | % produit pas).
|
---|
142 | for nansuppr = 1 : nbnan;
|
---|
143 |
|
---|
144 | ij_concat(indnan(nbnan - nansuppr + 1),:,:) = [];
|
---|
145 |
|
---|
146 | time_concat(indnan(nbnan - nansuppr + 1)) = [];
|
---|
147 |
|
---|
148 | end
|
---|
149 |
|
---|
150 | end
|
---|
151 |
|
---|
152 | clear('indnan','nbnan','nansuppr');
|
---|
153 |
|
---|
154 | %%%%%%%%%%%%%%%%%
|
---|
155 |
|
---|
156 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
157 | % Boucle sur les pixels
|
---|
158 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
159 |
|
---|
160 | % Boucle sur les longitudes.
|
---|
161 | for ilon = 1 : size(ij_concat,2);
|
---|
162 |
|
---|
163 | % Boucle sur les latitudes.
|
---|
164 | for ilat = 1 : size(ij_concat,3);
|
---|
165 |
|
---|
166 | % Recuperation des donnees du pixel.
|
---|
167 | data = squeeze(ij_concat(:,ilon,ilat));
|
---|
168 |
|
---|
169 | % Recuperation des indices ou les precipitations sont nulles
|
---|
170 | % pour le pixel considere.
|
---|
171 | indzero = find(data==0);
|
---|
172 |
|
---|
173 | % Boucle sur les indices trouves (Elle ne se fait pas si aucun
|
---|
174 | % 0 n'a ete trouve).
|
---|
175 | indindzero = 1;
|
---|
176 | nbperiods = 0;
|
---|
177 | while indindzero <= size(indzero,1)
|
---|
178 |
|
---|
179 | % Recuperation de l'indice de debut de la periode de 0.
|
---|
180 | indstart = indzero(indindzero);
|
---|
181 |
|
---|
182 | % On cherche l'indice de fin de la periode de 0.
|
---|
183 | while indindzero ~= size(indzero,1) && indzero(indindzero+1) - indzero(indindzero) == 1;
|
---|
184 |
|
---|
185 | indindzero = indindzero+1;
|
---|
186 |
|
---|
187 | end
|
---|
188 |
|
---|
189 | indstop = indzero(indindzero);
|
---|
190 |
|
---|
191 | nbperiods = nbperiods + 1;
|
---|
192 |
|
---|
193 | % On enregistre pour chaque periode, le nombre de jours de non
|
---|
194 | % precipitation.
|
---|
195 | timestepof0(nbperiods) = 1 + indstop - indstart;
|
---|
196 |
|
---|
197 | indindzero = indindzero + 1;
|
---|
198 |
|
---|
199 | end
|
---|
200 |
|
---|
201 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
202 | % Moyenne et ecart-type
|
---|
203 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
204 |
|
---|
205 | % Calcul de la moyenne.
|
---|
206 | if ~isempty(indzero);
|
---|
207 | ij_meantimestepof0 = sum(timestepof0) / nbperiods;
|
---|
208 | else
|
---|
209 | ij_meantimestepof0 = 0;
|
---|
210 | end
|
---|
211 |
|
---|
212 | meantimestepof0(ilon,ilat) = ij_meantimestepof0;
|
---|
213 |
|
---|
214 | % Calcul de l'ecart-type.
|
---|
215 | if ~isempty(indzero)
|
---|
216 | ij_stdtimestepof0 = sqrt(sum(power(timestepof0,2))/nbperiods - power(ij_meantimestepof0,2));
|
---|
217 | else
|
---|
218 | ij_stdtimestepof0 = 0;
|
---|
219 | end
|
---|
220 | stdtimestepof0(ilon,ilat) = ij_stdtimestepof0;
|
---|
221 |
|
---|
222 | clear('ij_meantimestepof0','ij_stdtimestepof0','indstart','indstop','indzero','indindzero','timestepof0','data');
|
---|
223 |
|
---|
224 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
225 |
|
---|
226 | end
|
---|
227 |
|
---|
228 | end
|
---|
229 |
|
---|
230 | %%%%%%%%%%%%%%%%%%%%%%%%
|
---|
231 |
|
---|
232 |
|
---|
233 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
---|
234 | % Images des moyennes et ecart-types
|
---|
235 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
---|
236 |
|
---|
237 | % Ouverture d'une figure.
|
---|
238 | figure();
|
---|
239 |
|
---|
240 | % Creation de variables comportant les titres et noms des axes.
|
---|
241 | if nargin >= 6;
|
---|
242 | Titlegen = (['Suivi des pauses de precipitations d''apres les ' nomvar ' sur ' num2str(size(ij_concat,1)) ' jours du ' datestr(time_concat(1),'dd mmm yyyy') ' au ' datestr(time_concat(size(time_concat,2)),'dd mmm yyyy') char(10) infocompl]);
|
---|
243 | else
|
---|
244 | Titlegen = (['Suivi des pauses de precipitations d''apres les ' nomvar ' sur ' num2str(size(ij_concat,1)) ' jours du ' datestr(time_concat(1),'dd mmm yyyy') ' au ' datestr(time_concat(size(time_concat,2)),'dd mmm yyyy')]);
|
---|
245 | end
|
---|
246 |
|
---|
247 | Title1 = ('Moyennes des jours de non precipitation');
|
---|
248 | Title2 = ('Ecart-types des jours de non precipitation');
|
---|
249 | Abs = 'Longitudes';
|
---|
250 | Ord = 'Latitudes';
|
---|
251 |
|
---|
252 | % Chargement des donnees cotieres.
|
---|
253 | load('cmgco_traitdecote.mat','Xgco','Ygco');
|
---|
254 |
|
---|
255 | % Moyennes (la transposee est utilisee pour mettre les longitudes selon
|
---|
256 | % l'axe x).
|
---|
257 | subplot(1,2,1);
|
---|
258 | imagesc(Longitudes,Latitudes,meantimestepof0');
|
---|
259 | set(gca, 'DataAspectRatio', [1 1 1]);
|
---|
260 | set(gca,'ydir','normal');
|
---|
261 | title(Title1);
|
---|
262 | xlabel(Abs)
|
---|
263 | ylabel(Ord)
|
---|
264 | if nargin >= 8;
|
---|
265 | caxis([minmean maxmean])
|
---|
266 | end
|
---|
267 | colorbar
|
---|
268 | hold on
|
---|
269 |
|
---|
270 | hold on
|
---|
271 | % Ajout des cotes.
|
---|
272 | plot(Xgco,Ygco,'k.');
|
---|
273 |
|
---|
274 | % Ecart-types (la transposee est egalement utilise ici).
|
---|
275 | subplot(1,2,2);
|
---|
276 | imagesc(Longitudes,Latitudes,stdtimestepof0');
|
---|
277 | set(gca, 'DataAspectRatio', [1 1 1]);
|
---|
278 | set(gca,'ydir','normal');
|
---|
279 | title(Title2);
|
---|
280 | xlabel(Abs)
|
---|
281 | ylabel(Ord)
|
---|
282 | if nargin == 10;
|
---|
283 | caxis([minstd maxstd])
|
---|
284 | end
|
---|
285 | colorbar
|
---|
286 |
|
---|
287 | hold on
|
---|
288 | % Ajout des cotes.
|
---|
289 | plot(Xgco,Ygco,'k.');
|
---|
290 |
|
---|
291 | text(-0.2,1.2,Titlegen,...
|
---|
292 | 'HorizontalAlignment','center','verticalAlignment','middle')
|
---|
293 |
|
---|
294 | end
|
---|
295 |
|
---|
296 | %!demo
|
---|
297 | %! clear all
|
---|
298 | %! close all
|
---|
299 | %! varamma_startup
|
---|
300 | %! more off
|
---|
301 | %! [ij_cumul_concat, time_concat, Longitudes, Latitudes] = cumulEPSAT_concat('extracted', 0, 0, 0, 0, 0, 0, 2006);
|
---|
302 | %! [meantimestepof0, stdtimestepof0] = nonprecipperiods(ij_cumul_concat, time_concat, Longitudes, Latitudes, 'cumuls EPSAT (mm)', 'Restriction des echelles entre 0 et 7 pour la demonstration', 0, 7, 0, 7);
|
---|