| 1 |
function [MITprofSub]=MITprof_subset(MITprof,varargin); |
| 2 |
% [MITprofSub]=MITprof_subset(MITprof,'PropertyName',PropertyValue,...) |
| 3 |
% load a subset of profiles from MITprof into MITprofSub |
| 4 |
% |
| 5 |
% if PropertyName = 'list' : PropertyValue contains the list of profiles |
| 6 |
% otherwise PropertyName = 'field' : selection on MITprof.prof_field, |
| 7 |
% range or unique value given in PropertyValue. |
| 8 |
% if PropertyName = 'list' is used, then it needs to be the first one. |
| 9 |
% |
| 10 |
% [MITprofSub]=MITprof_subset(MITprof,'list',1:50); |
| 11 |
% returns the 50th first profiles in MITprof |
| 12 |
% [MITprofSub]=MITprof_subset(MITprof,'depth',[50 150]); |
| 13 |
% returns the subset of MITprof that has prof_depth>=50 and <150 |
| 14 |
% [MITprofSub]=MITprof_subset(MITprof,'depth',[50 150],'descr',platformName); |
| 15 |
% ... and prof_descr=platformName; |
| 16 |
|
| 17 |
MITprofSub=MITprof; |
| 18 |
fldNames=fieldnames(MITprof); |
| 19 |
|
| 20 |
nSub=(nargin-1)/2; |
| 21 |
for iSub=1:nSub; |
| 22 |
if ~strcmp('list',varargin{(iSub-1)*2+1}); |
| 23 |
eval(['prof_sub=MITprofSub.prof_' varargin{(iSub-1)*2+1} ';']); |
| 24 |
range_sub=varargin{(iSub-1)*2+2}; |
| 25 |
if strcmp('descr',varargin{(iSub-1)*2+1}); |
| 26 |
KK=find(strcmp(prof_sub,range_sub)); |
| 27 |
elseif length(range_sub)==2 & range_sub(1)<range_sub(2); |
| 28 |
KK=find(prof_sub>=range_sub(1)&prof_sub<range_sub(2)); |
| 29 |
elseif length(range_sub)==1; |
| 30 |
KK=find(prof_sub==range_sub); |
| 31 |
else |
| 32 |
error('MITprof_subset: wrong arguments'); |
| 33 |
end; |
| 34 |
else; |
| 35 |
KK=varargin{(iSub-1)*2+2}; |
| 36 |
prof_sub=[1:length(MITprofSub.prof_lon)]'; |
| 37 |
if iSub~=1; error('''list'' subset should come first'); end; |
| 38 |
end; |
| 39 |
KK=reshape(KK,length(KK),1); |
| 40 |
|
| 41 |
% [varargin{(iSub-1)*2+1} ' -- ' num2str(length(KK))] |
| 42 |
for iFld=1:length(fldNames); |
| 43 |
eval(['tmp1=MITprofSub.' fldNames{iFld} ';']); |
| 44 |
if strcmp('depth',varargin{(iSub-1)*2+1}) & strcmp(fldNames{iFld},'prof_depth'); |
| 45 |
tmp1=tmp1(KK); |
| 46 |
elseif strcmp('depth',varargin{(iSub-1)*2+1}); |
| 47 |
if size(tmp1,2)==length(MITprof.prof_depth); tmp1=tmp1(:,KK); end; |
| 48 |
elseif ~strcmp(fldNames{iFld},'prof_depth');; |
| 49 |
if size(tmp1,1)==size(prof_sub,1); tmp1=tmp1(KK,:); end; |
| 50 |
end; |
| 51 |
eval(['MITprofSub.' fldNames{iFld} '=tmp1;']); |
| 52 |
end; |
| 53 |
|
| 54 |
%add a couple things: |
| 55 |
%-------------------- |
| 56 |
MITprofSub.np=length(MITprofSub.prof_lon); |
| 57 |
MITprofSub.nr=length(MITprofSub.prof_depth); |
| 58 |
MITprofSub.list_descr=unique(MITprofSub.prof_descr); |
| 59 |
MITprofSub.nd=length(MITprofSub.list_descr); |
| 60 |
|
| 61 |
end; |