/[MITgcm]/MITgcm_contrib/gael/profilesMatlabProcessing/profiles_IO_external/profiles_read_argo.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/profilesMatlabProcessing/profiles_IO_external/profiles_read_argo.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (hide annotations) (download)
Fri May 31 00:57:02 2013 UTC (12 years, 1 month ago) by gforget
Branch: MAIN
Changes since 1.7: +4 -0 lines
- fix for recent matlab versions.

1 roquet 1.3 function [varargout]=profile_read_argo(dataset,nf,m,varargin);
2     % read hydrographic data in the ARGO netcdf format
3     % return the m-th profile from the nf-th file referenced in
4     % dataset.fileInList.
5     %
6     % if m=0 :
7 roquet 1.5 % dataset=profile_read_argo(dataset,nf,0);
8     % dataset.nprofiles: number of profiles in the nf-th file
9     % dataset.data_argo: argo data in a struct variable
10 roquet 1.3 %
11     % if m~=0 :
12 roquet 1.5 % profileCur=profile_read_argo(dataset,nf,m);
13 roquet 1.3 %
14     % profileCur = (m-th profile of nf-th file)
15     % pnum_txt: '5900841'
16     % ymd: 20060101
17     % hms: 3207
18     % lat: -46.709
19     % lon: 137.501
20     % direc: 1
21     % t: [1x115 single]
22     % s: [1x115 single]
23     % p: [1x115 single]
24     % t_ERR: [1x115 single]
25     % s_ERR: [1x115 single]
26     % PorZisBAD: 0
27     %
28 gforget 1.1
29     fileIn=[dataset.dirIn dataset.fileInList(nf).name];
30    
31 roquet 1.3 if m==0; % return the number of profile.
32 gforget 1.2
33 roquet 1.3 %get the number of profiles:
34 gforget 1.7 list_var={'JULD','LATITUDE','LONGITUDE','DIRECTION','PLATFORM_NUMBER','DATA_MODE',...
35 roquet 1.4 'PRES_ADJUSTED_QC','PRES_QC','TEMP_ADJUSTED_QC','TEMP_QC','PSAL_ADJUSTED_QC','PSAL_QC'};
36 roquet 1.3 argo_data=[];
37     for ii=1:length(list_var),
38     ncload(fileIn,list_var{ii});
39 roquet 1.4 data=eval(list_var{ii});
40 gforget 1.8 if ~isempty(data);
41 roquet 1.4 nc=ncopen(fileIn);
42     FillVal=ncgetFillVal(nc,list_var{ii});
43     ncclose(nc);
44     if ischar(FillVal),
45     data(strcmp(data,FillVal))=' ';
46     else
47     data(data==FillVal)=NaN;
48     end
49 gforget 1.8 end
50 roquet 1.4 argo_data=setfield(argo_data,list_var{ii},data);
51 gforget 1.2 end
52 gforget 1.7
53 roquet 1.4 list_var={'PRES_ADJUSTED','PRES','TEMP_ADJUSTED','TEMP','TEMP_ADJUSTED_ERROR',...
54     'PSAL_ADJUSTED','PSAL','PSAL_ADJUSTED_ERROR'};
55     for ii=1:length(list_var),
56     ncload(fileIn,list_var{ii});
57     data=double(eval(list_var{ii}));
58 gforget 1.8 if ~isempty(data);
59 roquet 1.4 nc=ncopen(fileIn);
60     FillVal=ncgetFillVal(nc,list_var{ii});
61     ncclose(nc);
62     data(data==FillVal)=NaN;
63 gforget 1.8 end;
64 roquet 1.4 argo_data=setfield(argo_data,list_var{ii},data);
65     end
66    
67 roquet 1.5 dataset.argo_data=argo_data;
68     dataset.nprofiles = length(JULD);
69 gforget 1.7
70     if ~isfield(dataset,'greyList');
71     if ~isempty(dir([dataset.dirIn '../../ar_greylist.txt']));
72     fidgrey=fopen([dataset.dirIn '../../ar_greylist.txt'],'rt');
73     tmp1=fgetl(fidgrey);
74     greylist=[]; ii=0;
75     while ~feof(fidgrey);
76     tmp1=fgetl(fidgrey); tmp2=strfind(tmp1,',');
77    
78     cur_pnum=double(tmp1(1:tmp2(1)-1));
79     cur_pnum=cur_pnum(find(cur_pnum~=0&cur_pnum~=32));
80     cur_pnum=char(cur_pnum);
81    
82     date_ref=double(tmp1(tmp2(2)+1:tmp2(3)-1));
83     date_ref=date_ref(find(date_ref~=0&date_ref~=32));
84     date_ref=char(date_ref);
85     date_ref=[str2num(date_ref(1:4)) str2num(date_ref(5:6)) str2num(date_ref(7:8)) 0 0 0];
86    
87     vnam=tmp1(tmp2(1)+1:tmp2(2)-1);
88    
89     ii=ii+1;
90     greylist(ii).pnum=cur_pnum;
91     greylist(ii).start=date_ref;
92     greylist(ii).vnam=vnam;
93     end;
94     fclose(fidgrey);
95    
96     dataset.greyList.pnum={greylist(:).pnum};
97     dataset.greyList.start={greylist(:).start};
98     dataset.greyList.vnam={greylist(:).vnam};
99     else;
100     dataset.greyList.pnum=[];
101     dataset.greyList.start=[];
102     dataset.greyList.vnam=[];
103     end;
104     end;
105    
106 roquet 1.5 varargout{1}=dataset;
107 gforget 1.2
108 roquet 1.3 else;%if m==0;
109 gforget 1.2
110 roquet 1.3 % load data
111 roquet 1.5 argo_data=dataset.argo_data;
112 gforget 1.2
113     %date, position, etc
114 roquet 1.3 juld=argo_data.JULD(m)+datenum(1950,1,1);
115     [Y, M, D, H, MN, S] = datevec(juld);
116     ymd=Y*1e4+M*1e2+D;
117     hms=H*1e4+MN*1e2+S;
118 gforget 1.2
119 roquet 1.3 lat=argo_data.LATITUDE(m);
120     lon=argo_data.LONGITUDE(m); if lon < 0; lon=lon+360;end;
121 gforget 1.2
122 roquet 1.3 direction=argo_data.DIRECTION(m);
123     direc=0;
124     if(direction=='A');direc=1;end;
125     if(direction=='D');direc=2;end
126 gforget 1.2
127 roquet 1.3 pnum_txt=deblank(argo_data.PLATFORM_NUMBER(m,:));
128     pnum_txt=pnum_txt(ismember(pnum_txt,'0123456789')); pnum=str2num(pnum_txt);
129     if isempty(pnum_txt); pnum_txt='9999'; pnum=9999; disp(['no name for profile ' num2str(m)]); end;
130 gforget 1.2
131    
132 roquet 1.3 % pressure data
133 gforget 1.2
134 roquet 1.3 p=argo_data.PRES_ADJUSTED(m,:);
135     p_QC=argo_data.PRES_ADJUSTED_QC(m,:);
136 roquet 1.4 if all(isnan(p)), p=argo_data.PRES(m,:); p_QC=argo_data.PRES_QC(m,:); end
137 roquet 1.3 p_QC(isnan(p))='5';
138 gforget 1.2
139 roquet 1.3 for n=1:length(p)-1; % doubles
140     tmp1=find(p(n+1:end)==p(n)); p(n+tmp1)=NaN; p_QC(n+tmp1)='5';
141 gforget 1.2 end
142    
143     bad_P=0;
144     tmp1=find(p_QC=='4');
145     if(length(tmp1)<=5);
146     %get rid of these few bad points and keep the profile
147 roquet 1.3 p(tmp1)=NaN;p_QC(tmp1)='5';
148 gforget 1.2 else;
149     %flag the profile (will be masked in the main file)
150     %but keep the bad points (to interp and be able to CHECK)
151     bad_P=1;
152     end;
153    
154 roquet 1.3 % temperature data
155     t=argo_data.TEMP_ADJUSTED(m,:);
156     t_QC=argo_data.TEMP_ADJUSTED_QC(m,:);
157     t_ERR=argo_data.TEMP_ADJUSTED_ERROR(m,:);
158     t_ERR(isnan(t_ERR))=0;
159 roquet 1.4 if all(isnan(t)), t=argo_data.TEMP(m,:); t_QC=argo_data.TEMP_QC(m,:); end
160 gforget 1.6
161     %accomodate files that have no salinity
162     if isempty(argo_data.PSAL);
163     argo_data.PSAL=NaN*argo_data.TEMP;
164     argo_data.PSAL_QC=char(32*ones(size(argo_data.TEMP_ADJUSTED_QC)));
165     argo_data.PSAL_ADJUSTED=NaN*argo_data.TEMP;
166     argo_data.PSAL_ADJUSTED_ERROR=NaN*argo_data.TEMP;
167     argo_data.PSAL_ADJUSTED_QC=char(32*ones(size(argo_data.TEMP_ADJUSTED_QC)));
168     end;
169    
170 roquet 1.3 % salinity data
171     s=argo_data.PSAL_ADJUSTED(m,:);
172     s_QC=argo_data.PSAL_ADJUSTED_QC(m,:);
173     s_ERR=argo_data.PSAL_ADJUSTED_ERROR(m,:);
174     s_ERR(isnan(s_ERR))=0;
175 roquet 1.4 if all(isnan(s)), s=argo_data.PSAL(m,:); s_QC=argo_data.PSAL_QC(m,:); end
176 gforget 1.2
177 roquet 1.3 if isnan(t(1)); %this file does not contain temperature data...
178 gforget 1.2 t=NaN*p; t_ERR=0*p;
179     else;
180 roquet 1.3 t(~ismember(t_QC,'12'))=NaN;
181 gforget 1.2 end;
182 roquet 1.3 if isnan(s(1)); %this file does not contain salinity data...
183     s=NaN*p; s_ERR=0*p;
184 gforget 1.2 else;
185 roquet 1.3 s(~ismember(s_QC,'12'))=NaN;
186 gforget 1.2 end;
187    
188     profileCur.pnum_txt=pnum_txt;
189     profileCur.ymd=ymd; profileCur.hms=hms;
190     profileCur.lat=lat; profileCur.lon=lon;
191     profileCur.direc=direc;
192     profileCur.t=t;
193     profileCur.s=s;
194     profileCur.p=p;
195     profileCur.t_ERR=t_ERR;
196     profileCur.s_ERR=s_ERR;
197     profileCur.PorZisBAD=bad_P;
198 gforget 1.7 profileCur.DATA_MODE=argo_data.DATA_MODE(m);
199 gforget 1.2
200     varargout = {profileCur};
201    
202 gforget 1.1 end;
203    
204    
205    

  ViewVC Help
Powered by ViewVC 1.1.22