/[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.7 - (hide annotations) (download)
Fri Apr 19 13:03:07 2013 UTC (12 years, 3 months ago) by gforget
Branch: MAIN
Changes since 1.6: +40 -2 lines
- keep track of profileCur.DATA_MODE ('R' for real time, 'D' delayed mode,
  'A' adjusted) to be used in conjonction with argo grey list (for 'R').
- load agro grey list as dataset.greyList (pnum is the platform text number,
  start is the problem starting date, vnam is the affected variable).

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

  ViewVC Help
Powered by ViewVC 1.1.22