source: trunk/src/nonprecipperiods.m @ 327

Last change on this file since 327 was 327, checked in by pinsard, 13 years ago

change svn properties

  • Property svn:keywords set to URL
File size: 9.3 KB
Line 
1function [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.
122meantimestepof0 = 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.
126stdtimestepof0 = 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.
131indnan = find(isnan(ij_concat(:,1,1)));
132nbnan = size(indnan,1);
133
134% S'il y en a, on va les supprimer.
135if ~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   
150end
151
152clear('indnan','nbnan','nansuppr');
153
154%%%%%%%%%%%%%%%%%
155
156%%%%%%%%%%%%%%%%%%%%%%%%
157% Boucle sur les pixels
158%%%%%%%%%%%%%%%%%%%%%%%%
159
160% Boucle sur les longitudes.
161for 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   
228end
229
230%%%%%%%%%%%%%%%%%%%%%%%%
231
232
233%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
234% Images des moyennes et ecart-types
235%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
236
237% Ouverture d'une figure.
238figure();
239
240% Creation de variables comportant les titres et noms des axes.
241if 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]);
243else
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')]);
245end
246
247Title1 = ('Moyennes des jours de non precipitation');
248Title2 = ('Ecart-types des jours de non precipitation');
249Abs = 'Longitudes';
250Ord = 'Latitudes';
251
252% Chargement des donnees cotieres.
253load('cmgco_traitdecote.mat','Xgco','Ygco');
254
255% Moyennes (la transposee est utilisee pour mettre les longitudes selon
256% l'axe x).
257subplot(1,2,1);
258imagesc(Longitudes,Latitudes,meantimestepof0');
259set(gca, 'DataAspectRatio', [1 1 1]);
260set(gca,'ydir','normal');
261title(Title1);
262xlabel(Abs)
263ylabel(Ord)
264if nargin >= 8;
265    caxis([minmean maxmean])
266end
267colorbar
268hold on
269
270hold on
271% Ajout des cotes.
272plot(Xgco,Ygco,'k.');
273
274% Ecart-types (la transposee est egalement utilise ici).
275subplot(1,2,2);
276imagesc(Longitudes,Latitudes,stdtimestepof0');
277set(gca, 'DataAspectRatio', [1 1 1]);
278set(gca,'ydir','normal');
279title(Title2);
280xlabel(Abs)
281ylabel(Ord)
282if nargin == 10;
283    caxis([minstd maxstd])
284end
285colorbar
286
287hold on
288% Ajout des cotes.
289plot(Xgco,Ygco,'k.');
290
291text(-0.2,1.2,Titlegen,...
292    'HorizontalAlignment','center','verticalAlignment','middle')
293
294end
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);
Note: See TracBrowser for help on using the repository browser.