/[MITgcm]/MITgcm_contrib/gael/profilesMatlabProcessing/profiles_stats/MITprof_stats_load.m
ViewVC logotype

Contents of /MITgcm_contrib/gael/profilesMatlabProcessing/profiles_stats/MITprof_stats_load.m

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


Revision 1.10 - (show annotations) (download)
Fri Mar 17 18:06:59 2017 UTC (8 years, 4 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66f, checkpoint66e, checkpoint66o, HEAD
Changes since 1.9: +5 -1 lines
- MITprof_wrapper.m (new): wrapper routine to call applies encoded operation to MITprof variables
- MITprof_stats_load.m: improve print statement

1 function [MITprof]=MITprof_stats_load(dirData,listData,varCur,varargin);
2 %[MITprof]=MITprof_stats_load(dirData,listData,varCur,varargin);
3 %object: loads a series of MITprof files, and computes
4 % normalized misfits for one variable
5 %input: dirData is the data directory name
6 % listData is the data file list (e.g. {'argo_in*'} or {'argo_in*','argo_at*'} )
7 % varCur is 'T' or 'S'
8 %optional :
9 % EITHER normFactor (optional; double) is the normalization factor (1./prof_?weight by default)
10 % OR varSpec (optional; char) is e.g. 'prof_T' or 'prof_Testim'
11 % OR varSpec,true to remask varSpec according to e.g. prof_T & prof_Testim & prof_Tweight
12 %output: MITprof.prof is the normalized misfit
13 %note: by assumption, all of the files in listData must share the same vertical grid
14
15 normFactor=[]; varSpec=''; doRemask=false;
16 if nargin>3;
17 if isnumeric(varargin{1}); normFactor=varargin{1}; end;
18 if ischar(varargin{1}); varSpec=varargin{1}; end;
19 end;
20 if nargin>4;
21 if islogical(varargin{2}); doRemask=varargin{2}; end;
22 end;
23
24 useExtendedProfDepth=0;
25
26 %develop listData (that may include wildcards)
27 listData_bak=listData;
28 listData={};
29 for ii=1:length(listData_bak);
30 tmp1=dir([dirData listData_bak{ii}]);
31 for jj=1:length(tmp1);
32 ii2=length(listData)+1;
33 listData{ii2}=tmp1(jj).name;
34 end;
35 end;
36 %avoid duplicates
37 listData=unique(listData);
38
39 %loop over files
40 for iFile=1:length(listData);
41 fileData=dir([dirData listData{iFile}]);
42 fileData=fileData.name;
43 if ~isempty(varSpec);
44 fprintf([' loading ' varSpec ' from ' fileData '...\n']);
45 else;
46 fprintf([' loading ' varCur ' from ' fileData '...\n']);
47 end;
48 MITprofCur=MITprof_load([dirData fileData]);
49
50 if isfield(MITprofCur,'prof_TeccoV4R2')&~isfield(MITprofCur,'prof_Testim');
51 MITprofCur.prof_Testim=MITprofCur.prof_TeccoV4R2;
52 end;
53 if isfield(MITprofCur,'prof_SeccoV4R2')&~isfield(MITprofCur,'prof_Sestim');
54 MITprofCur.prof_Sestim=MITprofCur.prof_SeccoV4R2;
55 end;
56
57 %fixes:
58 if ~isfield(MITprofCur,['prof_' varCur]);
59 tmp1=NaN*ones(MITprofCur.np,MITprofCur.nr);
60 eval(['MITprofCur.prof_' varCur '=tmp1;']);
61 eval(['MITprofCur.prof_' varCur 'estim=tmp1;']);
62 eval(['MITprofCur.prof_' varCur 'weight=tmp1;']);
63 eval(['MITprofCur.prof_' varCur 'flag=[];']);
64 end;
65
66 if ~isfield(MITprofCur,['prof_' varCur 'weight']);
67 eval(['MITprofCur.prof_' varCur 'weight=1+0*MITprofCur.prof_' varCur ';']);
68 end;
69
70 %replace weights with normFactor:
71 if ~isempty(normFactor);
72 eval(['tmp1=MITprofCur.prof_' varCur 'weight;']);
73 tmp1(tmp1>0)=normFactor;
74 eval(['MITprofCur.prof_' varCur 'weight=tmp1;']);
75 end;
76
77 %map variable of interest to MITprofCur.prof:
78 if isempty(varSpec);
79 eval(['tmp1=(MITprofCur.prof_' varCur 'estim-MITprofCur.prof_' varCur ')' ...
80 '.*sqrt(MITprofCur.prof_' varCur 'weight);']);
81 tmp1(tmp1==0)=NaN;
82 else;
83 eval(['tmp1=MITprofCur.' varSpec ';']);
84 if doRemask;
85 eval(['tmp1(isnan(MITprofCur.prof_' varCur '))=NaN;']);
86 eval(['tmp1(isnan(MITprofCur.prof_' varCur 'estim))=NaN;']);
87 eval(['tmp1(isnan(MITprofCur.prof_' varCur 'weight))=NaN;']);
88 eval(['tmp1(MITprofCur.prof_' varCur 'weight==0)=NaN;']);
89 end;
90 end;
91 %
92 MITprofCur.prof=tmp1;
93
94 %remove bad profiles:
95 if isfield(MITprofCur,'prof_flag');
96 tmp1=MITprofCur.prof_flag; tmp1=isnan(tmp1);
97 MITprofCur.prof_flag(tmp1)=0;
98 MITprofCur=MITprof_subset(MITprofCur,'flag',0);
99 MITprofCur=rmfield(MITprofCur,'prof_flag');
100 end;
101
102 %remove un-needed variables:
103 listKeep={'prof_YYYYMMDD','prof_HHMMSS','prof_lon','prof_lat',...
104 'prof_depth','prof_date','prof_basin','prof_point','prof_descr',...
105 'list_descr','nd','np','nr','prof'};
106 listField=fieldnames(MITprofCur);
107 for iField=1:length(listField);
108 if sum(strcmp(listKeep,listField{iField}))==0;
109 MITprofCur=rmfield(MITprofCur,listField{iField});
110 end;
111 end;
112
113 %bug in 2013b? the following return wrong dates when SS='60'
114 %MITprofCur.prof_date=datenum(num2str(MITprofCur.prof_YYYYMMDD*1e6+MITprofCur.prof_HHMMSS),'yyyymmddHHMMSS');
115 %old: ii=find(MITprofCur.prof_date<datenum(1992,1,1)|MITprofCur.prof_date>datenum(2008,12,27)); MITprofCur.prof(ii,:)=NaN;
116
117 %extend prof_depth if needed:
118 if iFile>1;
119 prof_depth=union(MITprof.prof_depth,MITprofCur.prof_depth,'rows');
120 for kk=1:2;
121 if kk==1; tmpProf=MITprof; else; tmpProf=MITprofCur; end;
122 if length(prof_depth)>length(tmpProf.prof_depth);
123 tmp1=tmpProf.prof;
124 tmp2=NaN*zeros(tmpProf.np,length(prof_depth));
125 ii=NaN*length(tmpProf.prof_depth);
126 for jj=1:length(tmpProf.prof_depth);
127 ii(jj)=find(prof_depth==tmpProf.prof_depth(jj));
128 end;
129 tmp2(:,ii)=tmpProf.prof;
130 tmpProf.prof=tmp2;
131 tmpProf.nr=length(prof_depth);
132 tmpProf.prof_depth=prof_depth;
133 end;
134 if kk==1; MITprof=tmpProf; else; MITprofCur=tmpProf; end;
135 end;
136 end;
137
138 if iFile==1;
139 MITprof=MITprofCur;
140 else;
141 MITprof=MITprof_concat(MITprof,MITprofCur);
142 end;
143 clear MITprofCur;
144 end;
145
146

  ViewVC Help
Powered by ViewVC 1.1.22