source: trunk/src/extract_nc.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: 2.6 KB
Line 
1function varargout=extract_nc(file,var,varargin)
2
3%EXTRACT_NC Lecture de fichiers .nc
4
5%+
6%
7% .. _extract_nc.m:
8%
9% ============
10% extract_nc.m
11% ============
12%
13% DESCRIPTION
14% ===========
15%
16% Extraction d''un fichier .nc de variables
17% selon les dimensions fournies sous la forme :
18% (nom de la dimension, maximum, minimum ) * nombre de dimension
19%
20% Retourne chaque dimension extraite suivant les minimum et maximum fournis
21% dans l''ordre fourni puis la ou les variables demandees
22%
23% Retourne les variables demandees corrigees de 'scale_factor' et 'add_offset'
24% avec NaN pour les valeurs d''erreur
25%
26% NB :
27%  - pour extraire une dimension entiere entrer NaN comme bornes min et max
28%  - var doit etre un tableau de cellules
29%
30% EXAMPLES
31% ========
32%
33% ::
34
35%  [tps,lon,lat,extract1,extract2]=extract_nc('nomdufichier',{'data1' 'data2'},
36%  ... 'tps',tps_min,tps_max,'lon',lon_min,lon_max,'lat',lat_min,lat_max);
37%
38% voir :ref:`cal_hcl.m` pour exemple d'utilisation
39%
40% SEE ALSO
41% ========
42%
43% TODO
44% ====
45%
46% Ne fonctionne pas avec des dimensions n'etant pas sous forme de vecteurs
47%
48% avoid inline comments
49%
50% EVOLUTIONS
51% ==========
52%
53% $Id: extract_nc.m 326 2011-08-05 14:24:46Z pinsard $
54%
55% $URL$
56%
57%-
58
59%nombre de dimensions
60nb_dim=(nargin-2)/3; 
61
62%% Chargement et extraction des dimensions
63for i=1:nb_dim
64%nom de la dimension   
65  dim=varargin{(i-1)*3+1};       
66%limite inf de la dimension
67  dim_min=varargin{(i-1)*3+2}; 
68%limite sup de la dimension
69  dim_max=varargin{(i-1)*3+3}; 
70
71% charge la dimension originale
72  var_dim=getnc(file,dim);
73
74% extrait la dimension a la taille demandee et la donne en sortie
75  if (isnan(dim_max) & isnan(dim_min))
76    ind=[1:length(var_dim)];
77  else
78    if (isnan(dim_max) & ~isnan(dim_min))
79      ind=find(var_dim>=dim_min);
80    else
81      if (isnan(dim_min) & ~isnan(dim_max))
82       ind=find(var_dim<=dim_max);
83      else
84       ind=find(var_dim>=dim_min & var_dim<=dim_max);
85      end
86    end
87  end
88  var_dim=var_dim(ind);
89  varargout(i)={var_dim};
90
91% trouve indices min et max de la dimension pour extraction des variables
92  ind_min(i)=min(ind);
93  ind_max(i)=max(ind);
94
95end
96
97%% Extraction des variables et stokage pour la sortie
98for k=1:length(var)
99  ext_data=getnc(file,cell2str(var(k)),ind_min,ind_max,-1,-1,2,1,0);
100% le dernier 0 du getnc permet de ne pas utiliser
101% squeeze par defaut sur la matrice de sortie
102% mais besoin d''ajustement qd le singleton est la premiere ou derniere dim
103  if ind_min(1)-ind_max(1)==0 | ind_min(end)-ind_max(end)==0
104    data=zeros([(ind_max-ind_min)+1]);
105    data(:)=ext_data;
106  else
107    data=ext_data;
108  end
109  varargout(k+nb_dim)={data};
110end
Note: See TracBrowser for help on using the repository browser.