Changeset 959
- Timestamp:
- Jun 24, 2016, 8:49:08 PM (8 years ago)
- Location:
- trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/proj_field.m
r955 r959 1653 1653 Mrot=rodrigues(PlaneAngle); 1654 1654 newsummit=zeros(3,8);% initialize the rotated summit coordinates 1655 ObjectData.Coord=[ObjectData.Coord(1,1); ObjectData.Coord(1,2); 0];%TODO: set in set_object 1655 ObjectData.Coord=ObjectData.Coord'; 1656 if size(ObjectData.Coord,2)<3 1657 ObjectData.Coord=[ObjectData.Coord; 0];%add z origin at z=0 by default 1658 end 1656 1659 for isummit=1:8% TODO: introduce a function for rotation of n points (to use also for scattered data) 1657 1660 newsummit(:,isummit)=Mrot*(summit(:,isummit)-(ObjectData.Coord)); 1658 1661 end 1659 coord_x_proj=min(newsummit(1,:)):InterpMesh: max(newsummit(1,:)); 1662 coord_x_proj=min(newsummit(1,:)):InterpMesh: max(newsummit(1,:));% set of coordinqtes in the projection plane 1660 1663 coord_y_proj=min(newsummit(2,:)):InterpMesh: max(newsummit(2,:)); 1661 coord_z_proj=-width: InterpMesh:width;1662 Mrot_inverse=rodrigues(-PlaneAngle); 1664 coord_z_proj=-width:width; 1665 Mrot_inverse=rodrigues(-PlaneAngle);% inverse rotation matrix 1663 1666 Origin=Mrot_inverse*[coord_x_proj(1);coord_y_proj(1);coord_z_proj(1)]+ObjectData.Coord; 1664 ix=Mrot_inverse*[coord_x_proj(end)-coord_x_proj(1);0;0];% unit vector along the new x coordinates 1665 iy=Mrot_inverse*[0;coord_y_proj(end)-coord_y_proj(1);0];% unit vector y coordinates 1666 iz=Mrot_inverse*[0;0;coord_z_proj(end)-coord_z_proj(1)];% x unit vector z coordinates 1667 [Grid_x,Grid_y,Grid_z]=meshgrid(1:numel(coord_x_proj),1:numel(coord_y_proj),1:numel(coord_z_proj)); 1668 if ismatrix(Grid_x) 1667 npx=numel(coord_x_proj); 1668 npy=numel(coord_y_proj); 1669 npz=numel(coord_z_proj); 1670 ix=Mrot_inverse*[coord_x_proj(end)-coord_x_proj(1);0;0]/(npx-1);% unit vector along the new x coordinates 1671 iy=Mrot_inverse*[0;coord_y_proj(end)-coord_y_proj(1);0]/(npy-1);% unit vector y coordinates 1672 iz=Mrot_inverse*[0;0;coord_z_proj(end)-coord_z_proj(1)]/(npz-1);% x unit vector z coordinates 1673 [Grid_x,Grid_y,Grid_z]=meshgrid(0:npx-1,0:npy-1,0:npz-1); 1674 if ismatrix(Grid_x)% add a singleton in case of a single z value 1669 1675 Grid_x=shiftdim(Grid_x,-1); 1670 1676 Grid_y=shiftdim(Grid_y,-1); … … 1681 1687 VarName=FieldData.ListVarName{ivar}; 1682 1688 ListVarName=[ListVarName VarName]; 1689 VarDimName=[VarDimName {{'coord_y','coord_x'}}]; 1683 1690 VarAttribute{length(ListVarName)}=FieldData.VarAttribute{ivar}; %reproduce the variable attributes 1684 1691 FieldData.(VarName)=permute(FieldData.(VarName),[2 3 1]); 1685 ProjData.(VarName)=interp3(X,Y,Z,double(FieldData.(VarName)),XI,YI,ZI); 1692 ProjData.coord_x=coord_x_proj; 1693 ProjData.coord_y=coord_y_proj; 1694 ProjData.(VarName)=interp3(X,Y,Z,double(FieldData.(VarName)),XI,YI,ZI,'*linear'); 1695 ProjData.(VarName)=nanmean(ProjData.(VarName),3); 1696 ProjData.(VarName)=squeeze(ProjData.(VarName)); 1686 1697 end 1687 1698 end -
trunk/src/script_readlvm.m
r950 r959 1 1 %% get the input file 2 fileinput=uigetfile_uvmat('pick an input file','/fsnet/project/coriolis/2016/16MILESTONE/Data'); 2 project='/fsnet/project/coriolis/2015/15MINI_MEDDY/PROBES'; 3 if ~exist(project,'dir') 4 project='U:\project\coriolis\2015\15MINI_MEDDY\PROBES';%windows 5 end 6 fileinput=uigetfile_uvmat('pick an input file',project); 3 7 [Path,Name,Ext]=fileparts(fileinput); 4 8 … … 7 11 if strcmp(Ext,'.lvm') 8 12 disp(['reading ' fileinput '...']) 9 Data=read_lvm(fileinput)13 Data=read_lvm(fileinput) 10 14 elseif strcmp(Ext,'.nc') 11 15 disp(['reading ' fileinput '...']) … … 15 19 end 16 20 17 %% save as netcdf file if it has been openedas .lvm21 %% save netcdf file as .lvm 18 22 if strcmp(Ext,'.lvm') 19 23 OutputFile=fullfile(Path,[Name '.nc']); … … 27 31 end 28 32 29 %% use calibration data stored in an xml file 30 ProbeDoc=[]; 31 XmlFile=fullfile(Path,[Name '.xml']); 33 %% use calibration stored in a specified xml file; always use the same file 34 ProbeDoc=[]; 35 %XmlFile=fullfile(Path,[Name '.xml']); 36 XmlFile=fullfile(Path,'calib.xml'); 32 37 if exist(XmlFile,'file') 33 ProbeDoc=xml2struct(XmlFile); 34 end 38 ProbeDoc=xml2struct(XmlFile) 39 else 40 disp('no calibration file .xml detected') 41 end 42 35 43 % if isfield(Data,'Position'), C2,C4,C6 36 % Min=1; 37 % Data.Position=Data.Position+PositionMin; 44 % Min=1; Data.Position=Data.Position+PositionMin; 38 45 % end 39 % a5=-2.134088,b5=1010.1611, 40 % Data.C2=Data.C2; 41 % Data.C5=a5*Data.C5+b5; 42 % Data.C6=Data.C2; 46 % a5=-2.134088,b5=1010.1611, Data.C2=Data.C2; Data.C5=a5*Data.C5+b5; Data.C6=Data.C2; 43 47 % ylabelstring='density drho (kg/m3)'; 44 48 45 %% treqnsform conductivity probe signals: calibration + filter at 10 Hz 46 ylabelstring='conductivity signal (volts)'; 47 clist=0;% counter of conductivity probes 49 50 %% transform temperature probe signals 51 if isfield(ProbeDoc,'T5')&& ~isempty(ProbeDoc.T5) % if temperature calibration exists; see calibT.m 52 53 Data.T5=exp((Data.T5 - ProbeDoc.T5.a)./ProbeDoc.T5.b);% transform volt signal into temperature 54 Data.T5=filter(ones(1,60)/60,1,Data.T5); % filter the signal to 4 Hz 55 figure(6); set(6,'name','temperature'); plot(Data.Time,Data.T5); 56 %plot(Data.Time,Data.T5,Data.Time,20+Data.Position/100) 57 title([Data.Experiment ', ' Data.FileName ', Time=' Data.DateTime ', temperature']) 58 xlabel('Time(s)'); ylabel('temperature (degree C)'); %ylim([20 37]) 59 grid on 60 end 61 62 %% check camera signal 63 ind_start=find(Data.Trig_Cam>3.5,1,'first') 64 disp(['camera starts at time ' num2str(Data.Time(ind_start))]) 65 %% transform and filter conductivity probe signals into [temperature-corrected] density 66 ylabelstring='conductivity signal (volts)'; clist=0;% counter of conductivity probes 48 67 for ilist=1:numel(Data.ListVarName) 49 68 if isequal(Data.ListVarName{ilist}(1),'C');% if the var name begins by 'C' … … 51 70 CName{clist}=Data.ListVarName{ilist}; 52 71 if isfield(ProbeDoc,CName{clist})&& ~isempty(ProbeDoc.(CName{clist})) 53 a=ProbeDoc.(CName{clist}).a; 54 b=ProbeDoc.(CName{clist}).b; 55 Data.(CName{clist})=a*Data.(CName{clist})+b;% transform volt signal into density 72 73 a=ProbeDoc.(CName{clist}).a; b=ProbeDoc.(CName{clist}).b; 74 % Data.(CName{clist})=a*Data.(CName{clist})+b;% volts STRAIGHT into density (if const T) 75 76 %% BUT now need to modify conductivity, density due to temperature effect 77 %% first put into conductivity - using just C5 conductivity calibration for now (22/7/15) 78 ac1 = 0.5766e4; bc1 = 2.9129e4; %% this was found later, w/ different gain. Use the one below instead 79 %% ac1 = 0.4845e4; bc1 = 2.064e4; %% this was w/ the gain when we did the experiments; but it doesn't work? 80 Data.(CName{clist})=ac1*Data.(CName{clist})+bc1; %% voltage translated into conductivity via calibration 81 82 %% read in temperature... 83 refT = 23; T = Data.T5; 84 Hewitt_fit = [2.2794885e-11 -6.2634979e-9 1.5439826e-7 7.8601061e-5 2.1179818e-2]; 85 bfit = reshape(polyval(Hewitt_fit,T(:)),size(T)); bref = reshape(polyval(Hewitt_fit,refT(:)),size(refT)); 86 sigTsig18 = (1+bfit.*(T-18)); sigREFsig18 = (1+bref.*(refT-18)); 87 modfactor = sigTsig18./sigREFsig18; 88 modfactor = 1./modfactor; %% now in sigREF/sigT, which (* sigT) below to get sigREF, which can convert to rho 89 Data.(CName{clist})=Data.(CName{clist}).*modfactor %% = temp corrected conductivity (= as if at reference temp) 90 91 %% now we need to put the modified conductivity back into a (modified) voltage, then estimate density directly. 92 ac2 = 1.7343e-4; bc2 = -5.0048; 93 Data.(CName{clist})=ac2*Data.(CName{clist})+bc2; % temp-corrected voltage 94 Data.(CName{clist})=a*Data.(CName{clist})+b; % now finally voltage into density 56 95 Data.(CName{clist})=filter(ones(1,20)/20,1,Data.(CName{clist})); % filter the signal to 10 Hz 57 96 ylabelstring='density drho (g/cm3)'; 97 58 98 end 59 99 end 60 100 end 61 101 62 %% plot conductivity probesignals63 figure(1) 64 set(1,'name','conductivity') 102 %% plot conductivity signals 103 figure(1); set(1,'name','conductivity') 104 bandwidth2=60; % corresponds to 0.25 cm (1 cm/s with 240 pts/s), removes 4 Hertz 65 105 plot_string='plot('; 66 106 for clist=1:numel(CName) 107 Data.(CName{clist})=filter(ones(1,bandwidth2)/bandwidth2,1,Data.(CName{clist}));%low pass filter 67 108 plot_string=[plot_string 'Data.Time,Data.' CName{clist} ',']; 68 109 end … … 74 115 xlabel('Time(s)') 75 116 ylabel(ylabelstring) 117 ylim([1 1.02]) 76 118 grid on 77 119 78 120 if isfield(Data,'Position') 79 %% plot 121 %% plot motor position 80 122 figure(2) 81 123 set(2,'name','position') … … 88 130 hold on 89 131 plot(Data.Time,Data.Speed) 90 91 %%plot first profile 92 figure(4) 93 index1=find(Data.Speed<0,1); %start of descent 94 Speed=Data.Speed(index1:end); 95 index2=index1-1+find(Speed>0,1); %end of descent 96 plot(Data.Position(index1:index2),Data.C1(index1:index2)) 97 132 98 133 %% plot conductivity probe profiles (limited to downward motion, Data.Speed<0) 99 134 if ~isempty(ProbeDoc) … … 119 154 xlabel('Z(cm)') 120 155 ylabel(ylabelstring) 156 ylim([1 1.02]) 121 157 grid on 122 158 end 123 % plot(Z,Data.C2(Data.Speed<0),Z,Data.C3(Data.Speed<0),Z,Data.C4(Data.Speed<0),Z,Data.C5(Data.Speed<0)) 124 % legend({'C2';'C3';'C4';'C5'}) 125 % title([Data.Experiment ', ' Data.FileName ', Time=' Data.DateTime ', profiles conductivity probes']) 126 % xlabel('Z(cm)') 127 % %ylabel('signal (Volt)') 128 % ylabel(ylabelstring) 129 % grid on 130 131 132 % set(3,'name','profiles') 133 % PositionMin=1; %position of probes at the bottom (Z=1 cm) 134 % Data.Position=Data.Position-min(Data.Position)+PositionMin; 135 % Z=Data.Position(Data.Speed<0); 136 % plot(Z,Data.C2(Data.Speed<0),Z,Data.C5(Data.Speed<0),Z,Data.C6(Data.Speed<0)) 137 % legend({'C2';'C5';'C6'}) 138 % title([Data.Experiment ', ' Data.FileName ', Time=' Data.DateTime ', profiles conductivity probes']) 139 % xlabel('Z(cm)') 140 % %ylabel('signal (Volt)') 141 % ylabel(ylabelstring) 142 % grid on 143 144 end 145 146 147 148 149 %% plot temperature signals 150 % figure(4) 151 % set(4,'name','temperature') 152 % plot(Data.Time,Data.T2,Data.Time,Data.T5,Data.Time,Data.T6) 153 % legend({'T2';'T5';'T6'}) 154 % title([Data.Experiment ', ' Data.FileName ', Time=' Data.DateTime ', signal conductivity probes']) 155 % xlabel('Time(s)') 156 % ylabel('signal (Volt)') 157 % grid on 159 160 end 161 162 %%%% 163 figure(4) 164 bandwidth1=480; % corresponds to 2 cm (1 cm/s with 240 pts/s) 165 bandwidth2=60; % corresponds to 0.25 cm (1 cm/s with 240 pts/s), removes 4 Hertz 166 C5_filter_low=filter(ones(1,bandwidth2)/bandwidth2,1,Data.C5);%low pass filter 167 C5_filter=filter(ones(1,bandwidth1)/bandwidth1,1,C5_filter_low);%low pass filter 168 C5_filter=C5_filter_low-C5_filter;% high pass filter 169 C5_filter(Data.Speed>-0.1)=NaN; 170 plot(Data.Time,C5_filter) 171 ylim([-0.001 0.001]) 172 hold on 173 plot(Data.Time,Data.Position/100000) 174 grid on 175 hold off 176 title('C5 filtered') 177 178 %%%% 179 figure(5) 180 bandwidth1=480; % corresponds to 2 cm (1 cm/s with 240 pts/s) 181 bandwidth2=60; % corresponds to 0.25 cm (1 cm/s with 240 pts/s), removes 4 Hertz 182 C3_filter_low=filter(ones(1,bandwidth2)/bandwidth2,1,Data.C3);%low pass filter 183 C3_filter=filter(ones(1,bandwidth1)/bandwidth1,1,C3_filter_low);%low pass filter 184 C3_filter=C3_filter_low-C3_filter;% high pass filter 185 C3_filter(Data.Speed>-0.1)=NaN; 186 plot(Data.Time,C3_filter) 187 ylim([-0.001 0.001]) 188 hold on 189 plot(Data.Time,Data.Position/100000) 190 grid on 191 hold off 192 title('C3 filtered') 158 193 159 194 %% plot velocity (ADV) signals … … 178 213 179 214 215 -
trunk/src/series/aver_stat.m
r924 r959 111 111 end 112 112 end 113 % determine volume scan mode 114 prompt = {'volume scan mode (Yes/No)'}; 115 dlg_title = 'determine volume scan'; 116 num_lines= 1; 117 def = { 'No'}; 118 answer=msgbox_uvmat('INPUT_Y-N','volume scan mode (OK/No)?'); 119 % answer = inputdlg(prompt,dlg_title,num_lines,def); 120 if isempty(answer) 121 return 122 end 123 %check input consistency 124 if strcmp(answer,'Yes') 125 ParamOut.NbSlice=1;% set NbSlice to 1 ( for i index) 126 ParamOut.ActionInput.CheckVolume=1; 127 end 113 128 return 114 129 end … … 248 263 end 249 264 end 250 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 251 for index=1:NbField 252 update_waitbar(WaitbarHandle,index/NbField) 253 if ~isempty(RUNHandle)&& ~strcmp(get(RUNHandle,'BusyAction'),'queue') 254 disp('program stopped by user') 255 break 256 end 265 266 %% set volume scan 267 NbSlice_j=1; 268 index_series=1:size(filecell,2); 269 first_j_out=first_j; 270 last_j_out=last_j; 271 if isfield(Param,'ActionInput') && isfield(Param.ActionInput,'CheckVolume') ... 272 && Param.ActionInput.CheckVolume 273 index_j=Param.IndexRange.first_j:Param.IndexRange.incr_j:Param.IndexRange.last_j; 274 NbSlice_j=numel(index_j); 275 index_i=index_series(1:NbSlice_j:end); 276 end 277 278 %%% loop on slices (volume scan) 279 for islice=index_j 280 if NbSlice_j>1 281 first_j_out=islice; 282 last_j_out=islice; 257 283 258 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 259 for iview=1:NbView 260 % reading input file(s) 261 [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},InputFields{iview},frame_index{iview}(index)); 262 if ~isempty(errormsg) 263 errormsg=['error of input reading: ' errormsg]; 284 end 285 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 286 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 287 for index=index_i+index_j(islice) 288 update_waitbar(WaitbarHandle,index/NbField) 289 if ~isempty(RUNHandle)&& ~strcmp(get(RUNHandle,'BusyAction'),'queue') 290 disp('program stopped by user') 264 291 break 265 292 end 266 if ~isempty(NbSlice_calib) 267 Data{iview}.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 268 end 269 end 270 %%%%%%%%%%%%%%%% end loop on views (input lines) %%%%%%%%%%%%%%%% 271 %%%%%%%%%%%% END STANDARD PART %%%%%%%%%%%% 272 % EDIT FROM HERE 273 274 if isempty(errormsg) 275 Field=Data{1}; % default input field structure 276 nbfiles=nbfiles+1; %increment the file counter 277 %% coordinate transform (or other user defined transform) 278 if ~isempty(transform_fct) 279 switch nargin(transform_fct) 280 case 4 281 if length(Data)==2 282 Field=transform_fct(Data{1},XmlData{1},Data{2},XmlData{2}); 293 294 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 295 for iview=1:NbView 296 % reading input file(s) 297 %InputFile=fullfile_uvmat(RootPath{iview},SubDir{iview},RootFile{iview},FileExt{iview},NomType{iview},first_i,last_i,first_j_out,last_j_out); 298 [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},InputFields{iview},frame_index{iview}(index)); 299 if ~isempty(errormsg) 300 errormsg=['error of input reading: ' errormsg]; 301 break 302 end 303 if ~isempty(NbSlice_calib) 304 Data{iview}.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 305 end 306 end 307 %%%%%%%%%%%%%%%% end loop on views (input lines) %%%%%%%%%%%%%%%% 308 309 if isempty(errormsg) 310 Field=Data{1}; % default input field structure 311 nbfiles=nbfiles+1; %increment the file counter 312 %% coordinate transform (or other user defined transform) 313 if ~isempty(transform_fct) 314 switch nargin(transform_fct) 315 case 4 316 if length(Data)==2 317 Field=transform_fct(Data{1},XmlData{1},Data{2},XmlData{2}); 318 else 319 Field=transform_fct(Data{1},XmlData{1}); 320 end 321 case 3 322 if length(Data)==2 323 Field=transform_fct(Data{1},XmlData{1},Data{2}); 324 else 325 Field=transform_fct(Data{1},XmlData{1}); 326 end 327 case 2 328 Field=transform_fct(Data{1},XmlData{1}); 329 case 1 330 Field=transform_fct(Data{1}); 331 end 332 end 333 334 %% field projection on an object 335 if Param.CheckObject 336 if strcmp(Param.ProjObject.ProjMode,'interp_tps') 337 Field=tps_coeff_field(Field,check_proj_tps);% calculate tps coefficients if needed 338 end 339 [Field,errormsg]=proj_field(Field,Param.ProjObject,VarMesh); 340 if ~isempty(errormsg) 341 disp_uvmat('ERROR',['error in aver_stat/proj_field:' errormsg],checkrun) 342 return 343 end 344 end 345 346 %%%%%%%%%%%% MAIN RUNNING OPERATIONS %%%%%%%%%%%% 347 if nbfiles==1 %first field 348 time_1=[]; 349 if isfield(Field,'Time') 350 time_1=Field.Time(1); 351 end 352 DataOut=Field;%outcome reproduces the first (projected) field by default 353 DataOut.Conventions='uvmat'; %suppress Conventions='uvmat/civdata' for civ input files 354 if isfield(Param,'ProjObject')&& ismember(Param.ProjObject.ProjMode,{'inside','outside'})%case of histograms 355 for ivar=1:numel(Field.ListVarName)% list of variable names before projection (histogram) 356 VarName=Field.ListVarName{ivar}; 357 if isfield(Data{1},VarName) 358 DataOut.(VarName)=Field.(VarName); 359 DataOut.([VarName 'Histo'])=zeros(size(DataOut.(VarName))); 360 VarMesh=DataOut.(VarName)(2)-DataOut.(VarName)(1); 361 end 362 end 363 disp(['mesh for histogram = ' num2str(VarMesh)]) 364 else 365 errorvar=zeros(numel(Field.ListVarName));%index of errorflag associated to each variable 366 if isfield(Field,'VarAttribute') 367 for ivar=1:numel(Field.ListVarName) 368 VarName=Field.ListVarName{ivar}; 369 DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero 370 NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero 371 372 for iivar=1:length(Field.VarAttribute) 373 if isequal(Field.VarDimName{iivar},Field.VarDimName{ivar})&& isfield(Field.VarAttribute{iivar},'Role')... 374 && strcmp(Field.VarAttribute{iivar}.Role,'errorflag') 375 errorvar(ivar)=iivar; % index of the errorflag variable corresponding to ivar 376 end 377 end 378 end 379 DataOut.ListVarName(errorvar(errorvar~=0))=[]; %remove errorflag from result 380 DataOut.VarDimName(errorvar(errorvar~=0))=[]; %remove errorflag from result 381 DataOut.VarAttribute(errorvar(errorvar~=0))=[]; %remove errorflag from result 283 382 else 284 Field=transform_fct(Data{1},XmlData{1}); 383 for ivar=1:numel(Field.ListVarName) 384 VarName=Field.ListVarName{ivar}; 385 DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero 386 NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero 387 end 285 388 end 286 case 3 287 if length(Data)==2 288 Field=transform_fct(Data{1},XmlData{1},Data{2}); 389 390 end 391 end %current field 392 for ivar=1:length(DataOut.ListVarName) 393 VarName=DataOut.ListVarName{ivar}; 394 sizmean=size(DataOut.(VarName)); 395 siz=size(Field.(VarName)); 396 if isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'}) 397 if isfield(Data{1},VarName) 398 MaxValue=max(DataOut.(VarName));% current max of histogram absissa 399 MinValue=min(DataOut.(VarName));% current min of histogram absissa 400 % VarMesh=Field.VarAttribute{ivar}.Mesh; 401 MaxIndex=round(MaxValue/VarMesh); 402 MinIndex=round(MinValue/VarMesh); 403 MaxIndex_new=round(max(Field.(VarName)/VarMesh));% max of the current field 404 MinIndex_new=round(min(Field.(VarName)/VarMesh)); 405 if MaxIndex_new>MaxIndex% the variable max for the current field exceeds the previous one 406 DataOut.(VarName)=[DataOut.(VarName) VarMesh*(MaxIndex+1:MaxIndex_new)];% append the new variable values 407 DataOut.([VarName 'Histo'])=[DataOut.([VarName 'Histo']) zeros(1,MaxIndex_new-MaxIndex)]; % append the new histo values 408 end 409 if MinIndex_new <= MinIndex-1 410 DataOut.(VarName)=[VarMesh*(MinIndex_new:MinIndex-1) DataOut.(VarName)];% insert the new variable values 411 DataOut.([VarName 'Histo'])=[zeros(1,MinIndex-MinIndex_new) DataOut.([VarName 'Histo'])];% insert the new histo values 412 ind_start=1; 413 else 414 ind_start=MinIndex_new-MinIndex+1; 415 end 416 DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)=... 417 DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)+Field.([VarName 'Histo']); 418 end 419 elseif ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean) 420 disp_uvmat('ERROR',['unequal size of input field ' VarName ', need to project on a grid'],checkrun) 421 return 422 else 423 if errorvar(ivar)==0 424 check_bad=isnan(Field.(VarName));%=0 for NaN data values, 1 else 289 425 else 290 Field=transform_fct(Data{1},XmlData{1});426 check_bad=isnan(Field.(VarName)) | Field.(Field.ListVarName{errorvar(ivar)})~=0;%=0 for NaN or error flagged data values, 1 else 291 427 end 292 case 2 293 Field=transform_fct(Data{1},XmlData{1}); 294 case 1 295 Field=transform_fct(Data{1}); 296 end 297 end 298 299 %% field projection on an object 300 if Param.CheckObject 301 if strcmp(Param.ProjObject.ProjMode,'interp_tps') 302 Field=tps_coeff_field(Field,check_proj_tps);% calculate tps coefficients if needed 303 end 304 [Field,errormsg]=proj_field(Field,Param.ProjObject,VarMesh); 305 if ~isempty(errormsg) 306 disp_uvmat('ERROR',['error in aver_stat/proj_field:' errormsg],checkrun) 307 return 308 end 309 end 310 311 %%%%%%%%%%%% MAIN RUNNING OPERATIONS %%%%%%%%%%%% 312 if nbfiles==1 %first field 313 time_1=[]; 314 if isfield(Field,'Time') 315 time_1=Field.Time(1); 316 end 317 DataOut=Field;%outcome reproduces the first (projected) field by default 318 DataOut.Conventions='uvmat'; %suppress Conventions='uvmat/civdata' for civ input files 319 if isfield(Param,'ProjObject')&& ismember(Param.ProjObject.ProjMode,{'inside','outside'})%case of histograms 320 for ivar=1:numel(Field.ListVarName)% list of variable names before projection (histogram) 321 VarName=Field.ListVarName{ivar}; 322 if isfield(Data{1},VarName) 323 DataOut.(VarName)=Field.(VarName); 324 DataOut.([VarName 'Histo'])=zeros(size(DataOut.(VarName))); 325 VarMesh=DataOut.(VarName)(2)-DataOut.(VarName)(1); 326 end 327 end 328 disp(['mesh for histogram = ' num2str(VarMesh)]) 329 else 330 errorvar=zeros(numel(Field.ListVarName));%index of errorflag associated to each variable 331 if isfield(Field,'VarAttribute') 332 for ivar=1:numel(Field.ListVarName) 333 VarName=Field.ListVarName{ivar}; 334 DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero 335 NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero 336 337 for iivar=1:length(Field.VarAttribute) 338 if isequal(Field.VarDimName{iivar},Field.VarDimName{ivar})&& isfield(Field.VarAttribute{iivar},'Role')... 339 && strcmp(Field.VarAttribute{iivar}.Role,'errorflag') 340 errorvar(ivar)=iivar; % index of the errorflag variable corresponding to ivar 341 end 342 end 343 end 344 DataOut.ListVarName(errorvar(errorvar~=0))=[]; %remove errorflag from result 345 DataOut.VarDimName(errorvar(errorvar~=0))=[]; %remove errorflag from result 346 DataOut.VarAttribute(errorvar(errorvar~=0))=[]; %remove errorflag from result 347 else 348 for ivar=1:numel(Field.ListVarName) 349 VarName=Field.ListVarName{ivar}; 350 DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero 351 NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero 352 end 353 end 354 355 end 356 end %current field 357 for ivar=1:length(DataOut.ListVarName) 358 VarName=DataOut.ListVarName{ivar}; 359 sizmean=size(DataOut.(VarName)); 360 siz=size(Field.(VarName)); 361 if isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'}) 362 if isfield(Data{1},VarName) 363 MaxValue=max(DataOut.(VarName));% current max of histogram absissa 364 MinValue=min(DataOut.(VarName));% current min of histogram absissa 365 % VarMesh=Field.VarAttribute{ivar}.Mesh; 366 MaxIndex=round(MaxValue/VarMesh); 367 MinIndex=round(MinValue/VarMesh); 368 MaxIndex_new=round(max(Field.(VarName)/VarMesh));% max of the current field 369 MinIndex_new=round(min(Field.(VarName)/VarMesh)); 370 if MaxIndex_new>MaxIndex% the variable max for the current field exceeds the previous one 371 DataOut.(VarName)=[DataOut.(VarName) VarMesh*(MaxIndex+1:MaxIndex_new)];% append the new variable values 372 DataOut.([VarName 'Histo'])=[DataOut.([VarName 'Histo']) zeros(1,MaxIndex_new-MaxIndex)]; % append the new histo values 373 end 374 if MinIndex_new <= MinIndex-1 375 DataOut.(VarName)=[VarMesh*(MinIndex_new:MinIndex-1) DataOut.(VarName)];% insert the new variable values 376 DataOut.([VarName 'Histo'])=[zeros(1,MinIndex-MinIndex_new) DataOut.([VarName 'Histo'])];% insert the new histo values 377 ind_start=1; 378 else 379 ind_start=MinIndex_new-MinIndex+1; 380 end 381 DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)=... 382 DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)+Field.([VarName 'Histo']); 383 end 384 elseif ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean) 385 disp_uvmat('ERROR',['unequal size of input field ' VarName ', need to project on a grid'],checkrun) 386 return 387 else 388 if errorvar(ivar)==0 389 check_bad=isnan(Field.(VarName));%=0 for NaN data values, 1 else 390 else 391 check_bad=isnan(Field.(VarName)) | Field.(Field.ListVarName{errorvar(ivar)})~=0;%=0 for NaN or error flagged data values, 1 else 392 end 393 Field.(VarName)(check_bad)=0; %set to zero NaN or data marked by error flag 394 DataOut.(VarName)=DataOut.(VarName)+ double(Field.(VarName)); % update the sum 395 NbData.(VarName)=NbData.(VarName)+ ~check_bad;% records the number of data for each point 396 end 397 end 398 %%%%%%%%%%%% END MAIN RUNNING OPERATIONS %%%%%%%%%%%% 399 else 400 disp(errormsg) 401 end 402 end 403 %%%%%%%%%%%%%%%% end loop on field indices %%%%%%%%%%%%%%%% 428 Field.(VarName)(check_bad)=0; %set to zero NaN or data marked by error flag 429 DataOut.(VarName)=DataOut.(VarName)+ double(Field.(VarName)); % update the sum 430 NbData.(VarName)=NbData.(VarName)+ ~check_bad;% records the number of data for each point 431 end 432 end 433 %%%%%%%%%%%% END MAIN RUNNING OPERATIONS %%%%%%%%%%%% 434 else 435 disp(errormsg) 436 end 437 end 438 %%%%%%%%%%%%%%%% end loop on field indices %%%%%%%%%%%%%%%% 439 404 440 if ~(isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'})) 405 441 for ivar=1:length(Field.ListVarName) … … 426 462 427 463 %% writing the result file 428 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,first_i,last_i,first_j ,last_j);464 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,first_i,last_i,first_j_out,last_j_out); 429 465 if strcmp(FileExtOut,'.png') %case of images 430 466 if isequal(FileInfo{1}.BitDepth,16)||(numel(FileInfo)==2 &&isequal(FileInfo{2}.BitDepth,16)) … … 444 480 end 445 481 end % end averaging loop 482 end 446 483 447 484 %% open the result file with uvmat (in RUN mode) -
trunk/src/series/merge_proj.m
r956 r959 103 103 WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series 104 104 end 105 tild=phys([],[]);% test to provoke the inclusion of the function phys at compilation 105 106 106 %% define the directory for result file (with path=RootPath{1}) 107 107 OutputDir=[Param.OutputSubDir Param.OutputDirExt];% subdirectory for output files
Note: See TracChangeset
for help on using the changeset viewer.