Changeset 590
- Timestamp:
- Mar 16, 2013, 4:33:29 PM (12 years ago)
- Location:
- trunk/src/series
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/check_peaklock.m
r583 r590 1 %%------------------------------------------------------- 2 % --- Executes on button press in peaklocking. TODO: UPDATE 3 %------------------------------------------------- 4 function peaklocking(handles) 1 % 'check_peaklocking': estimte peaklocking error in a civ field series TODO: UPDATE 2 %------------------------------------------------------------------------ 3 % function ParamOut=check_peaklocking(Param) 4 % 5 %%%%%%%%%%% GENERAL TO ALL SERIES ACTION FCTS %%%%%%%%%%%%%%%%%%%%%%%%%%% 6 % 7 % This function is used in four modes by the GUI series: 8 % 1) config GUI: with no input argument, the function determine the suitable GUI configuration 9 % 2) interactive input: the function is used to interactively introduce input parameters, and then stops 10 % 3) RUN: the function itself runs, when an appropriate input structure Param has been introduced. 11 % 4) BATCH: the function itself proceeds in BATCH mode, using an xml file 'Param' as input. 12 % 13 % This function is used in four modes by the GUI series: 14 % 1) config GUI: with no input argument, the function determine the suitable GUI configuration 15 % 2) interactive input: the function is used to interactively introduce input parameters, and then stops 16 % 3) RUN: the function itself runs, when an appropriate input structure Param has been introduced. 17 % 4) BATCH: the function itself proceeds in BATCH mode, using an xml file 'Param' as input. 18 % 19 %OUTPUT 20 % GUI_input=list of options in the GUI series.fig needed for the function 21 % 22 %INPUT: 23 % In run mode, the input parameters are given as a Matlab structure Param copied from the GUI series. 24 % In batch mode, Param is the name of the corresponding xml file containing the same information 25 % In the absence of input (as activated when the current Action is selected 26 % in series), the function ouput GUI_input set the activation of the needed GUI elements 27 % 28 % Param contains the elements:(use the menu bar command 'export/GUI config' in series to see the current structure Param) 29 % .InputTable: cell of input file names, (several lines for multiple input) 30 % each line decomposed as {RootPath,SubDir,Rootfile,NomType,Extension} 31 % .OutputSubDir: name of the subdirectory for data outputs 32 % .OutputDirExt: directory extension for data outputs 33 % .Action: .ActionName: name of the current activated function 34 % .ActionPath: path of the current activated function 35 % .IndexRange: set the file or frame indices on which the action must be performed 36 % .FieldTransform: .TransformName: name of the selected transform function 37 % .TransformPath: path of the selected transform function 38 % .TransformHandle: corresponding function handle 39 % .InputFields: sub structure describing the input fields withfields 40 % .FieldName: name of the field 41 % .VelType: velocity type 42 % .FieldName_1: name of the second field in case of two input series 43 % .VelType_1: velocity type of the second field in case of two input series 44 % .ProjObject: %sub structure describing a projection object (read from ancillary GUI set_object) 45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 46 function ParamOut=check_peaklocking(Param) 47 48 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName 49 if ~exist('Param','var') % case with no input parameter 50 ParamOut={'AllowInputSort';'off';...% allow alphabetic sorting of the list of input files (options 'off'/'on', 'off' by default) 51 'WholeIndexRange';'off';...% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 52 'NbSlice';'on'; ...%nbre of slices ('off' by default) 53 'VelType';'two';...% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 54 'FieldName';'off';...% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 55 'FieldTransform'; 'off';...%can use a transform function 56 'ProjObject';'on';...%can use projection object(option 'off'/'on', 57 'Mask';'off';...%can use mask option (option 'off'/'on', 'off' by default) 58 'OutputDirExt';'.pklock';...%set the output dir extension 59 ''}; 60 return 61 end 62 63 %%%%%%%%%%%% STANDARD PART %%%%%%%%%%%% 64 %% select different modes, RUN, parameter input, BATCH 65 % BATCH case: read the xml file for batch case 66 if ischar(Param) 67 Param=xml2struct(Param); 68 checkrun=0; 69 % RUN case: parameters introduced as the input structure Param 70 else 71 hseries=guidata(Param.hseries);%handles of the GUI series 72 if isfield(Param,'Specific')&& strcmp(Param.Specific,'?') 73 checkrun=1;% will only search interactive input parameters (preparation of BATCH mode) 74 else 75 checkrun=2; % indicate the RUN option is used 76 end 77 end 78 ParamOut=Param; %default output 79 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 80 81 %% root input file(s) and type 82 RootPath=Param.InputTable(:,1); 83 RootFile=Param.InputTable(:,3); 84 SubDir=Param.InputTable(:,2); 85 NomType=Param.InputTable(:,4); 86 FileExt=Param.InputTable(:,5); 87 [filecell,i1_series,i2_series,j1_series,j2_series]=get_file_series(Param); 88 %%%%%%%%%%%% 89 % The cell array filecell is the list of input file names, while 90 % filecell{iview,fileindex}: 91 % iview: line in the table corresponding to a given file series 92 % fileindex: file index within the file series, 93 % i1_series(iview,ref_j,ref_i)... are the corresponding arrays of indices i1,i2,j1,j2, depending on the input line iview and the two reference indices ref_i,ref_j 94 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices 95 %%%%%%%%%%%% 96 NbSlice=1;%default 97 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 98 NbSlice=Param.IndexRange.NbSlice; 99 end 100 nbview=1;%number of input file series (lines in InputTable) 101 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 102 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 103 nbfield=nbfield_j*nbfield_i; %total number of fields 104 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices) 105 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement 106 107 %determine the file type on each line from the first input file 108 ImageTypeOptions={'image','multimage','mmreader','video'}; 109 NcTypeOptions={'netcdf','civx','civdata'}; 110 for iview=1:nbview 111 if ~exist(filecell{iview,1}','file') 112 displ_uvmat('ERROR',['the first input file ' filecell{iview,1} ' does not exist'],checkrun) 113 return 114 end 115 [FileType{iview},FileInfo{iview},MovieObject{iview}]=get_file_type(filecell{iview,1}); 116 CheckImage{iview}=~isempty(find(strcmp(FileType{iview},ImageTypeOptions)));% =1 for images 117 CheckNc{iview}=~isempty(find(strcmp(FileType{iview},NcTypeOptions)));% =1 for netcdf files 118 if ~isempty(j1_series{iview}) 119 frame_index{iview}=j1_series{iview}; 120 else 121 frame_index{iview}=i1_series{iview}; 122 end 123 end 124 125 %% calibration data and timing: read the ImaDoc files 126 %none 127 128 %% coordinate transform or other user defined transform 129 % none 130 131 %%%%%%%%%%%% END STANDARD PART %%%%%%%%%%%% 132 % EDIT FROM HERE 133 134 %% check the validity of ctinput file types 135 %none 136 137 %% Set field names and velocity types 138 InputFields{1}=[];%default (case of images) 139 if isfield(Param,'InputFields') 140 InputFields{1}=Param.InputFields; 141 end 142 % only one input fieldseries 143 144 %% Initiate output fields 145 %initiate the output structure as a copy of the first input one (reproduce fields) 146 [DataOut,tild,errormsg] = read_field(filecell{1,1},FileType{1},InputFields{1},1); 147 if ~isempty(errormsg) 148 displ_uvmat('ERROR',['error reading ' filecell{1,1} ': ' errormsg],checkrun) 149 return 150 end 151 time_1=[]; 152 if isfield(DataOut,'Time') 153 time_1=DataOut.Time(1); 154 end 155 if CheckNc{iview} 156 if isempty(strcmp('Conventions',DataOut.ListGlobalAttribute)) 157 DataOut.ListGlobalAttribute=['Conventions' DataOut.ListGlobalAttribute]; 158 end 159 DataOut.Conventions='uvmat'; 160 DataOut.ListGlobalAttribute=[DataOut.ListGlobalAttribute {Param.Action}]; 161 ActionKey='Action'; 162 while isfield(DataOut,ActionKey) 163 ActionKey=[ActionKey '_1']; 164 end 165 DataOut.(ActionKey)=Param.Action; 166 DataOut.ListGlobalAttribute=[DataOut.ListGlobalAttribute {ActionKey}]; 167 if isfield(DataOut,'Time') 168 DataOut.ListGlobalAttribute=[DataOut.ListGlobalAttribute {'Time','Time_end'}]; 169 end 170 end 171 172 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 173 index_slice=1:nbfield;% select the file indices 174 for index=index_slice 175 if checkrun 176 update_waitbar(hseries.Waitbar,index/(nbfield)) 177 stopstate=get(hseries.RUN,'BusyAction'); 178 else 179 stopstate='queue'; 180 end 181 if isequal(stopstate,'queue')% enable STOP command 182 Data=cell(1,nbview);%initiate the set Data; 183 nbtime=0; 184 dt=[]; 185 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 186 for iview=1:nbview 187 % reading input file(s) 188 [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},InputFields{iview},frame_index{iview}(index)); 189 if ~isempty(errormsg) 190 errormsg=['time_series / read_field / ' errormsg]; 191 display(errormsg) 192 break 193 end 194 if ~isempty(NbSlice_calib) 195 Data{iview}.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 196 end 197 end 198 if isempty(errormsg) 199 Field=Data{1}; % default input field structure 200 % coordinate transform (or other user defined transform) 201 % none 202 203 %field projection on an object 204 if Param.CheckObject 205 [Field,errormsg]=proj_field(Field,Param.ProjObject); 206 if ~isempty(errormsg) 207 msgbox_uvmat('ERROR',['time_series / proj_field / ' errormsg]) 208 return 209 end 210 end 211 nbfile=nbfile+1; 212 213 % initiate the time series at the first iteration 214 if nbfile==1 215 % stop program if the first field reading is in error 216 if ~isempty(errormsg) 217 displ_uvmat('ERROR',['time_series / sub_field / ' errormsg],checkrun) 218 return 219 end 220 DataOut=Field;%default 221 DataOut.NbDim=Field.NbDim+1; %add the time dimension for plots 222 nbvar=length(Field.ListVarName); 223 if nbvar==0 224 displ_uvmat('ERROR','no input variable selected',checkrun) 225 return 226 end 227 testsum=2*ones(1,nbvar);%initiate flag for action on each variable 228 if isfield(Field,'VarAttribute') % look for coordinate and flag variables 229 for ivar=1:nbvar 230 if length(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'Role') 231 var_role=Field.VarAttribute{ivar}.Role;%'role' of the variable 232 if isequal(var_role,'errorflag') 233 displ_uvmat('ERROR','do not handle error flags in time series',checkrun) 234 return 235 end 236 if isequal(var_role,'warnflag') 237 testsum(ivar)=0; % not recorded variable 238 eval(['DataOut=rmfield(DataOut,''' Field.ListVarName{ivar} ''');']);%remove variable 239 end 240 if isequal(var_role,'coord_x')| isequal(var_role,'coord_y')|... 241 isequal(var_role,'coord_z')|isequal(var_role,'coord') 242 testsum(ivar)=1; %constant coordinates, record without time evolution 243 end 244 end 245 % check whether the variable ivar is a dimension variable 246 DimCell=Field.VarDimName{ivar}; 247 if ischar(DimCell) 248 DimCell={DimCell}; 249 end 250 if numel(DimCell)==1 && isequal(Field.ListVarName{ivar},DimCell{1})%detect dimension variables 251 testsum(ivar)=1; 252 end 253 end 254 end 255 for ivar=1:nbvar 256 if testsum(ivar)==2 257 eval(['DataOut.' Field.ListVarName{ivar} '=[];']) 258 end 259 end 260 DataOut.ListVarName=[{'Time'} DataOut.ListVarName]; 261 end 262 263 % add data to the current field 264 for ivar=1:length(Field.ListVarName) 265 VarName=Field.ListVarName{ivar}; 266 VarVal=Field.(VarName); 267 if testsum(ivar)==2% test for recorded variable 268 if isempty(errormsg) 269 if isequal(Param.ProjObject.ProjMode,'inside')% take the average in the domain for 'inside' mode 270 if isempty(VarVal) 271 displ_uvmat('ERROR',['empty result at frame index ' num2str(i1_series{iview}(index))],checkrun) 272 return 273 end 274 VarVal=mean(VarVal,1); 275 end 276 VarVal=shiftdim(VarVal,-1); %shift dimension 277 DataOut.(VarName)=cat(1,DataOut.(VarName),VarVal);%concanete the current field to the time series 278 else 279 DataOut.(VarName)=cat(1,DataOut.(VarName),0);% put each variable to 0 in case of input reading error 280 end 281 elseif testsum(ivar)==1% variable representing fixed coordinates 282 VarInit=DataOut.(VarName); 283 if isempty(errormsg) && ~isequal(VarVal,VarInit) 284 displ_uvmat('ERROR',['time series requires constant coordinates ' VarName],checkrun) 285 return 286 end 287 end 288 end 289 290 % record the time: 291 if isempty(time)% time not set by xml filer(s) 292 if isfield(Data{1},'Time') 293 DataOut.Time(nbfile,1)=Field.Time; 294 else 295 DataOut.Time(nbfile,1)=index;%default 296 end 297 else % time from ImaDoc prevails TODO: correct 298 DataOut.Time(nbfile,1)=time(index);% 299 end 300 301 % record the number of missing input fields 302 if ~isempty(errormsg) 303 nbmissing=nbmissing+1; 304 display(['index=' num2str(index) ':' errormsg]) 305 end 306 end 307 end 308 end 309 %%%%%%% END OF LOOP WITHIN A SLICE 310 311 %remove time for global attributes if exists 312 Time_index=find(strcmp('Time',DataOut.ListGlobalAttribute)); 313 if ~isempty(Time_index) 314 DataOut.ListGlobalAttribute(Time_index)=[]; 315 end 316 DataOut.Conventions='uvmat'; 317 for ivar=1:numel(DataOut.ListVarName) 318 VarName=DataOut.ListVarName{ivar}; 319 eval(['DataOut.' VarName '=squeeze(DataOut.' VarName ');']) %remove singletons 320 end 321 322 % add time dimension 323 for ivar=1:length(Field.ListVarName) 324 DimCell=Field.VarDimName(ivar); 325 if testsum(ivar)==2%variable used as time series 326 DataOut.VarDimName{ivar}=[{'Time'} DimCell]; 327 elseif testsum(ivar)==1 328 DataOut.VarDimName{ivar}=DimCell; 329 end 330 end 331 indexremove=find(~testsum); 332 if ~isempty(indexremove) 333 DataOut.ListVarName(1+indexremove)=[]; 334 DataOut.VarDimName(indexremove)=[]; 335 if isfield(DataOut,'Role') && ~isempty(DataOut.Role{1})%generaliser aus autres attributs 336 DataOut.Role(1+indexremove)=[]; 337 end 338 end 339 340 %shift variable attributes 341 if isfield(DataOut,'VarAttribute') 342 DataOut.VarAttribute=[{[]} DataOut.VarAttribute]; 343 end 344 DataOut.VarDimName=[{'Time'} DataOut.VarDimName]; 345 DataOut.Action=Param.Action;%name of the processing programme 346 test_time=diff(DataOut.Time)>0;% test that the readed time is increasing (not constant) 347 if ~test_time 348 DataOut.Time=1:filecounter; 349 end 350 351 % display nbmissing 352 if ~isequal(nbmissing,0) 353 displ_uvmat('WARNING',[num2str(nbmissing) ' files skipped: missing files or bad input, see command window display'],checkrun) 354 end 355 356 %name of result file 357 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(1),i1_series{1}(end),i_slice,[]); 358 errormsg=struct2nc(OutputFile,DataOut); %save result file 359 if isempty(errormsg) 360 display([OutputFile ' written']) 361 else 362 displ_uvmat('ERROR',['error in Series/struct2nc: ' errormsg],checkrun) 363 end 364 365 return 366 367 %%%%%%%%%%%%%%%%%% END%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 368 %evaluation of peacklocking errors 6 369 %use splinhist: give spline coeff cc for a smooth histo (call spline4) -
trunk/src/series/ima_levels.m
r551 r590 161 161 end 162 162 if isequal(stopstate,'queue') % enable STOP command 163 if ~isempty(j1_series) 163 if ~isempty(j1_series)&&~isequal(j1_series,{[]}) 164 164 j1=j1_series{1}(ifile); 165 165 end … … 172 172 A=levels(A); 173 173 filename_new=fullfile_uvmat(RootPath{1},OutputSubDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 174 % OutputFile=fullfile_uvmat(RootPath{1},OutputSubDir,RootFile{1},FileExtOut,NomType{1},i1,i2,j1,j2);175 174 imwrite(A,filename_new) 176 175 display([filename_new ' written'])
Note: See TracChangeset
for help on using the changeset viewer.