source: trunk/src/intensityMSG_concat.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: 17.5 KB
Line 
1function [ij_intensity_concat, time_concat, Longitudes, Latitudes] = intensityMSG_concat(ncfilesset, lonmin, lonmax, latmin, latmax, longresol, latresol, Annee, Mois_start, Jour_start, Mois_stop, Jour_stop)
2
3%INTENSITYMSG_CONCAT permet d'analyser les donnees de temperature de
4%brillance par MSG et de concatener les intensites resultantes en sortie.
5%L'analyse s'effectue sur une seule saison, sur tous les fichiers ou entre
6%deux dates predefinies.
7
8%
9%+
10%
11% ======================
12% intensityMSG_concat.m
13% ======================
14%
15% .. function:: intensityMSG_concat(ncfilesset, lonmin, lonmax, latmin, latmax, longresol, latresol, Annee, Mois_start, Jour_start, Mois_stop, Jour_stop)
16%
17% DESCRIPTION
18% ===========
19%
20% - Donnees d'entrees :
21%
22%   * ncfilesset (en caracteres) : Type de fichier NetCDF que l'on cherche,
23%     'normal' ou 'extracted'.
24%   * lonmin : Borne inferieure des longitudes du domaine etudie.
25%   * lonmax : Borne superieure des longitudes du domaine etudie.
26%   * latmin : Borne inferieure des latitudes du domaine etudie.
27%   * latmax : Borne superieure des latitudes du domaine etudie.
28%   * longresol : Nouvelle resolution souhaitee (nombre de points) pour les
29%     longitudes (0 pour garder la resolution d'origine).
30%   * latresol : Nouvelle resolution souhaitee (nombre de points) pour les
31%     latitudes (0 pour garder la resolution d'origine).
32%   * Annee : Annee de la saison d'etude.
33%   * Mois_start (Facultatif) : Mois du premier jour d'etude pour la
34%     selection des fichiers.
35%   * Jour_start (Facultatif) : Jour du premier jour d'etude pour la
36%     selection des fichiers.
37%   * Mois_stop (Facultatif) : Mois du dernier jour d'etude pour la
38%     selection des fichiers.
39%   * Jour_stop (Facultatif) : Jour du dernier jour d'etude pour la
40%     selection des fichiers.
41%
42% - Donnees de sorties :
43%
44%   * ij_intensity_concat : Matrice de donnees (temps, longitudes,
45%     latitudes)contenant les intensites concatenees des differents jours
46%     d'etude.
47%   * time_concat : Variable de temps, en jour julien, pour identifier les
48%     jours etudies.
49%   * Longitudes : Variable de longitudes dans le domaine selectionne.
50%   * Latitudes : Variable de latitudes dans le domaine selectionne.
51%
52% Cette fonction permet d'analyser les donnees de temperature de brillance
53% par MSG et de concatener les intensites resultantes en sortie. L'analyse
54% s'effectue sur une seule saison, sur tous les fichiers ou entre deux
55% dates predefinies.
56%
57% EXAMPLES
58% ========
59%
60% Voir la 'demo'.
61%
62% SEE ALSO
63% ========
64%
65% :ref:`data_msg`
66%
67% :ref:`varamma_startup.m`
68%
69% :func:`MSGbuildfullfilename`
70% :func:`extractedmatrixdata`
71% :func:`spatialresolution`
72% :func:`MSGread`
73% :func:`intensityMSG_day`
74%
75% :func:`int2precip`
76% :func:`nonprecipperiods`
77% :func:`MSGanalysiscrossvalidation`
78% :func:`missingdaytonan`
79%
80% TODO
81% ====
82%
83% coding rule and description of demo
84%
85% demo normal
86%
87% demo simul
88%
89% use :func:`simul_msg`
90%
91% EVOLUTIONS
92% ==========
93%
94% $Id$
95%
96% $URL$
97%
98% - fplod 20110805T093216Z cratos (Linux)
99%
100%   * remove varamma_startup call
101
102% - fplod 20110804T150823Z aedon.locean-ipsl.upmc.fr (Darwin)
103%
104%   * octave and matlab 7.4 (zeus) do not like [argout1,~, argout3]=myfunc() so
105%     replace ~ by temporary variable
106%
107% - jaclod 2011-07-27
108%
109%   * Revision de la documentation et des commentaires.
110%
111% - jaclod 2011-07-22
112%
113%   * Compatibilite avec des fichiers 'extracted'.
114%
115% - jaclod 2011-07-20
116%
117%   * Passage sur Cratos, fonctionne!
118%   * Modifications de la documentation et des commentaires.
119%
120% - jaclod 2011-07-19
121%
122%   * Ajout de boucles pour la lecture des fichiers avec ou sans selection.
123%
124% - jaclod 2011-07-13
125%
126%   * Creation.
127%
128%-
129
130%%%%%%%%%%%%%%%%%
131% Initialisation
132%%%%%%%%%%%%%%%%%
133
134% Appel de la variable global 'PROJECT_ID'.
135global PROJECT_ID
136
137% Sauvegarde de la variable 'Annee' sous forme de caracteres.
138annee = num2str(Annee);
139
140%%%%%%%%%%%%%%%%%
141
142
143%%%%%%%%%%%%%%%%%%%%%%%%%%%
144% Boucles sur les fichiers
145%%%%%%%%%%%%%%%%%%%%%%%%%%%
146
147% Les boucles se realisent de differentes facons selon la selection ou non
148% de jours.
149
150% Si le nombre d'arguments est superieur a 8 c'est qu'une selection est
151% demandee. Sinon, on analyse tous les fichiers present dans le repertoire
152% MSG.
153if nargin > 8;
154
155    % Creation d'un vecteur comportant le nombre maximum de jours que l'on
156    % a dans chaque mois.
157    maxjourmois = [31 29 31 30 31 30 31 31 30 31 30 31];
158
159    %%%%%% Boucle sur les mois %%%%%%
160    for Mois = Mois_start : Mois_stop;
161
162        % Recuperation de la variable 'Mois' sous forme de caracteres.
163        if Mois < 10;
164            mois = ['0' num2str(Mois)];
165        else
166            mois = num2str(Mois);
167        end
168
169        % S'il s'agit du premier mois, le jour de depart sera celui entre
170        % en argument, sinon ce sera le premier du mois.
171        if Mois == Mois_start;
172            Jour_ini = Jour_start;
173        else
174            Jour_ini = 1;
175        end
176
177        % S'il s'agit du dernier mois, le jour de fin sera celui entre
178        % en argument, sinon ce sera le dernier jour possible du mois.
179        if Mois == Mois_stop;
180            Jour_fin = Jour_stop;
181        else
182            Jour_fin = maxjourmois(Mois);
183        end
184
185        %%%%%% Boucle sur les jours %%%%%%
186        for Jour = Jour_ini : Jour_fin;
187
188            % Recuperation de la variable 'Jour' sous forme de caracteres.
189            if Jour < 10;
190                jour = ['0' num2str(Jour)];
191            else
192                jour = num2str(Jour);
193            end
194
195            % Creation du chemin d'acces complet au fichier correspondant.
196            [fullfilename] = MSGbuildfullfilename(ncfilesset, annee, mois, jour);
197
198            %%%%%% Analyse du fichier %%%%%%
199
200            % Verification que le fichier du jour existe bien. Si ce n'est
201            % pas le cas un message d'avertissement est donne. Sinon, on
202            % peut faire l'analyse.
203            % Cette verification differe selon le type de fichier en raison
204            % d'un changement de repertoire et de nom.
205
206            switch ncfilesset
207
208                case 'normal'
209                    repertoire = [PROJECT_ID 'MSG/' annee '/' mois '/'];
210
211                case 'extracted'
212                    repertoire = [PROJECT_ID 'MSG/extracted/' annee '/' mois '/'];
213
214                otherwise
215                    error('La variable ncfilesset doit etre ''normal'' ou ''extracted''.');
216
217            end
218
219            path(path,repertoire);
220
221            switch ncfilesset
222
223                case 'normal'
224                    if exist(['msg-tb108_' annee '-' mois '-' jour '_15min.nc'],'file') == 2;
225
226                        % Message confirmant l'analyse du fichier.
227                        disp(['iii : Analyse du fichier msg-tb108_' annee '-' mois '-' jour '_15min.nc.']);
228
229                        % Lecture du fichier NetCDF, recuperation des
230                        % donnees et des variables.
231                        [TbMSG, Temps, Longitudes, Latitudes] = MSGread(ncfilesset, fullfilename);
232
233                        % Extraction des donnees.
234                        [TbMSG, Temps, Longitudes, Latitudes] = extractedmatrixdata(TbMSG, Temps, Longitudes, Latitudes, Temps(1), Temps(size(Temps,1)), lonmin, lonmax, latmin, latmax);
235
236                        %%%%%% Changement de resolution %%%%%%
237                        % Si longresol et/ou latresol ont pour valeur 0, alors on
238                        % recupere la valeur de la resolution initiale pour ne pas
239                        % faire de changement.
240                        if longresol == 0;
241                            longresol = size(TbMSG,2);
242                        end
243
244                        if latresol == 0;
245                            latresol = size(TbMSG,3);
246                        end
247
248                        % Si la resolution demandee est differente de celle
249                        % initiale, alors on interpole les donnees avec la
250                        % fonction 'spatial resolution'.
251                        if longresol ~= size(TbMSG,2) || latresol ~= size(TbMSG,3);
252                            [Longitudes, Latitudes, TbMSG] = spatialresolution(Longitudes, Latitudes, TbMSG, longresol, latresol);
253                        end
254
255                        %%%%%% Calcul des intensites %%%%%%
256                        [ij_intensity, unused_Tps_SeuilInf, unused_Tb_SeuilSup, unused_Tb_LimNoyau] = intensityMSG_day(Temps, TbMSG, 3, 235, 190);
257                        clear unused_Tps_SeuilInf
258                        clear unused_Tb_SeuilSup
259                        clear unused_Tb_LimNoyau
260
261                        %%%%%% Concatenation %%%%%%
262                        % Sauvegarde des intensites (la dimension 3 est ici
263                        % le temps).
264                        if Mois == Mois_start && Jour == Jour_start;
265                            ij_intensity_concat = ij_intensity;
266                        else
267                            ij_intensity_concat = cat(3,ij_intensity_concat,ij_intensity);
268                        end
269
270                        % Sauvegarde de l'information sur la date. On la
271                        % sauve en jour julien, il faut donc convertir par
272                        % rapport au temps fourni, en heure depuis le 1er
273                        % janvier 1960.
274                        Tempsjourjulien = Temps(1) / 24 + datenum(1960,01,01);
275                        if Mois == Mois_start && Jour == Jour_start;
276                            time_concat = Tempsjourjulien;
277                        else
278                            time_concat = cat(2,time_concat,Tempsjourjulien);
279                        end
280
281                    else
282                        % Message d'avertissement en cas de non presence du
283                        % fichier.
284                        disp(['www : le fichier msg-tb108_' annee '-' mois '-' jour '_15min.nc n''est pas present.']);
285                    end
286
287                case 'extracted'
288                    if exist(['extracted-msg-tb108_' annee '-' mois '-' jour '_15min.nc'],'file') == 2;
289
290                        % Message confirmant l'analyse du fichier.
291                        disp(['iii : Analyse du fichier extracted-msg-tb108_' annee '-' mois '-' jour '_15min.nc.']);
292
293                        % Lecture du fichier NetCDF, recuperation des
294                        % donnees et des variables.
295                        [TbMSG, Temps, Longitudes, Latitudes] = MSGread(ncfilesset, fullfilename);
296
297                        % Pas d'extraction des donnees.
298
299                        %%%%%% Changement de resolution %%%%%%
300                        % Si longresol et/ou latresol ont pour valeur 0,
301                        % alors on recupere la valeur de la resolution
302                        % initiale pour ne pas faire de changement.
303                        if longresol == 0;
304                            longresol = size(TbMSG,2);
305                        end
306
307                        if latresol == 0;
308                            latresol = size(TbMSG,3);
309                        end
310
311                        % Si la resolution demandee est differente de celle
312                        % initiale, alors on interpole les donnees avec la
313                        % fonction 'spatial resolution'.
314                        if longresol ~= size(TbMSG,2) || latresol ~= size(TbMSG,3);
315                            [Longitudes, Latitudes, TbMSG] = spatialresolution(Longitudes, Latitudes, TbMSG, longresol, latresol);
316                        end
317
318                        %%%%%% Calcul des intensites %%%%%%
319                        [ij_intensity, unused_Tps_SeuilInf, unused_Tb_SeuilSup, unused_Tb_LimNoyau] = intensityMSG_day(Temps, TbMSG, 3, 235, 190);
320                        clear unused_Tps_SeuilInf
321                        clear unused_Tb_SeuilSup
322                        clear unused_Tb_LimNoyau
323
324                        %%%%%% Concatenation %%%%%%
325                        % Sauvegarde des intensites (la dimension 3 est ici
326                        % le temps).
327                        if Mois == Mois_start && Jour == Jour_start;
328                            ij_intensity_concat = ij_intensity;
329                        else
330                            ij_intensity_concat = cat(3,ij_intensity_concat,ij_intensity);
331                        end
332
333                        % Sauvegarde de l'information sur la date. On la
334                        % sauve en jour julien, il faut donc convertir par
335                        % rapport au temps fourni, en heure depuis le 1er
336                        % janvier 1960.
337                        Tempsjourjulien = Temps(1) / 24 + datenum(1960,01,01);
338                        if Mois == Mois_start && Jour == Jour_start;
339                            time_concat = Tempsjourjulien;
340                        else
341                            time_concat = cat(2,time_concat,Tempsjourjulien);
342                        end
343
344                    else
345                        % Message d'avertissement en cas de non presence du
346                        % fichier.
347                        disp(['www : le fichier extracted-msg-tb108_' annee '-' mois '-' jour '_15min.nc n''est pas present.']);
348                    end
349
350                otherwise
351                    % Cas impossible. Erreur deja donnee.
352            end
353
354        end
355
356    end
357
358else
359
360    %%%%% Recherche des mois de donnees %%%%%
361    % Repertoire correspondant aux fichiers MSG de l'annee en question.
362    % differents selon le type de fichier.
363    switch ncfilesset
364
365        case 'normal'
366            repertoireMSGsaison = [PROJECT_ID 'MSG/' annee];
367
368        case 'extracted'
369            repertoireMSGsaison = [PROJECT_ID 'MSG/extracted/' annee];
370
371        otherwise
372    end
373
374    path(path,repertoireMSGsaison);
375
376    % On cherche les dossier dans ce dernier repertoire correspondant aux
377    % mois dont nous disposons des donnees.
378    listdir = dir(repertoireMSGsaison);
379
380    % Nombre de dossier. Attention les deux premiers resultats sont '.' et
381    % '..' et ne compte donc pas comme dossier de fichiers.
382    nbdir = numel(listdir)-2;
383
384    %%%%% Boucle sur les mois %%%%%
385    for numdir = 1 : nbdir;
386
387        % Recuperation du numero du mois sous forme de caracteres.
388        mois = listdir(numdir+2).name;
389
390        % Repertoire du mois correspondant.
391        repertoireMSGmois = [repertoireMSGsaison '/' mois];
392
393        path(path,repertoireMSGmois);
394
395        %%%%% Recherche des fichiers netCDF %%%%%
396        ext = '*.nc';
397        chemin = fullfile(repertoireMSGmois,ext);
398        listncfiles = dir(chemin);
399
400        nbfiles = numel(listncfiles);
401
402        %%%%% Boucle sur les fichiers, les jours %%%%%
403        for numfiles = 1 : nbfiles;
404
405            % Recuperation du nom du fichier et de son chemin d'acces
406            % complet.
407            fullfilename = [repertoireMSGmois '/' listncfiles(numfiles).name];
408
409            % Message confirmant l'analyse du fichier.
410            disp(['iii : Analyse du fichier ' listncfiles(numfiles).name '.']);
411
412            % Lecture du fichier NetCDF, recuperation des donnees et des
413            % variables.
414            [TbMSG, Temps, Longitudes, Latitudes] = MSGread(ncfilesset, fullfilename);
415
416            switch ncfilesset
417
418                case 'normal'
419                    % Extraction des donnees.
420                    [TbMSG, Temps, Longitudes, Latitudes] = extractedmatrixdata(TbMSG, Temps, Longitudes, Latitudes, Temps(1), Temps(size(Temps,1)), lonmin, lonmax, latmin, latmax);
421
422                case 'extracted'
423                    % Pas d'extraction.
424
425                otherwise
426            end
427
428            %%%%%% Changement de resolution %%%%%%
429            % Si longresol et/ou latresol ont pour valeur 0, alors on
430            % recupere la valeur de la resolution initiale pour ne pas
431            % faire de changement.
432            if longresol == 0;
433                longresol = size(TbMSG,2);
434            end
435
436            if latresol == 0;
437                latresol = size(TbMSG,3);
438            end
439
440            % Si la resolution demandee est differente de celle
441            % initiale, alors on interpole les donnees avec la fonction
442            % spatial resolution.
443            if longresol ~= size(TbMSG,2) || latresol ~= size(TbMSG,3);
444                [Longitudes, Latitudes, TbMSG] = spatialresolution(Longitudes, Latitudes, TbMSG, longresol, latresol);
445            end
446
447            %%%%%% Calcul des intensites %%%%%%
448            [ij_intensity, unused_Tps_SeuilInf, unused_Tb_SeuilSup, unused_Tb_LimNoyau] = intensityMSG_day(Temps, TbMSG, 3, 235, 190);
449            clear unused_Tps_SeuilInf
450            clear unused_Tb_SeuilSup
451            clear unused_Tb_LimNoyau
452
453            %%%%%% Concatenation %%%%%%
454
455            % Sauvegarde des intensites (la dimension 3 est ici le temps).
456            if numdir==1 && numfiles==1;
457                ij_intensity_concat = ij_intensity;
458            else
459                ij_intensity_concat = cat(3,ij_intensity_concat,ij_intensity);
460            end
461
462            % Sauvegarde de l'information sur la date. On la sauve en jour
463            % julien, il faut donc convertir par rapport au temps fourni,
464            % en heure depuis le 1er janvier 1960.
465            Tempsjourjulien = Temps(1) / 24 + datenum(1960,01,01);
466            if numdir==1 && numfiles==1;
467                time_concat = Tempsjourjulien;
468            else
469                time_concat = cat(2,time_concat,Tempsjourjulien);
470            end
471
472        end
473
474    end
475
476end
477
478% On passe le temps en premiere dimension pour plus de concordance avec les
479% autres variables.
480ij_intensity_concat = permute(ij_intensity_concat,[3 1 2]);
481
482%%%%%%%%%%%%%%%%%%%%%%%%%%%
483
484end
485
486%!demo
487%! clear all
488%! close all
489%! varamma_startup;
490%! more off
491%! [ij_intensity_concat, time_concat, Longitudes, Latitudes] = intensityMSG_concat('normal',-20, 0, 0, 20, 200, 200, 2006, 07, 26, 08, 09);
Note: See TracBrowser for help on using the repository browser.