1 | function 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$ |
---|
54 | % |
---|
55 | % $URL$ |
---|
56 | % |
---|
57 | %- |
---|
58 | |
---|
59 | %nombre de dimensions |
---|
60 | nb_dim=(nargin-2)/3; |
---|
61 | |
---|
62 | %% Chargement et extraction des dimensions |
---|
63 | for 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 | |
---|
95 | end |
---|
96 | |
---|
97 | %% Extraction des variables et stokage pour la sortie |
---|
98 | for 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}; |
---|
110 | end |
---|