Changeset 606 for trunk/src/series
- Timestamp:
- Apr 7, 2013, 10:14:45 AM (12 years ago)
- Location:
- trunk/src/series
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/civ_series.m
r605 r606 42 42 path_series=fileparts(which('series')); 43 43 addpath(fullfile(path_series,'series')) 44 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName 44 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName or InputTable refreshed 45 45 if isstruct(Param) && isequal(Param.Action.RUN,0) 46 46 Data=civ_input(Param);% introduce the civ parameters using the GUI civ_input 47 Data.Program=mfilename; 48 Data.AllowInputSort='off';...% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) 49 Data.WholeIndexRange='off';...% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 50 Data.NbSlice='off'; ...%nbre of slices ('off' by default) 51 Data.VelType='off';...% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 52 Data.FieldName='off';...% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 53 Data.FieldTransform = 'off';...%can use a transform function 54 Data.ProjObject='off';...%can use projection object(option 'off'/'on', 55 Data.Mask='off';...%can use mask option (option 'off'/'on', 'off' by default) 56 Data.OutputDirExt='.civ';%set the output dir extension 57 47 Data.Program=mfilename;%gives the name of the current function 48 Data.AllowInputSort='off';% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) 49 Data.WholeIndexRange='off';% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 50 Data.NbSlice='off'; %nbre of slices ('off' by default) 51 Data.VelType='off';% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 52 Data.FieldName='off';% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 53 Data.FieldTransform = 'off';%can use a transform function 54 Data.ProjObject='off';%can use projection object(option 'off'/'on', 55 Data.Mask='off';%can use mask option (option 'off'/'on', 'off' by default) 56 Data.OutputDirExt='.civ';%set the output dir extension 57 filecell=get_file_series(Param);%check existence of the first input file 58 if ~exist(filecell{1,1},'file') 59 msgbox_uvmat('WARNING','the first input file does not exist') 60 end 58 61 return 59 62 end … … 115 118 116 119 NbField=numel(i1_series_Civ1); 117 ImageTypeOptions={'image','multimage','mmreader','video'};118 120 [FileType_A,FileInfo,MovieObject_A]=get_file_type(filecell{1,1}); 119 121 FileType_B=FileType_A; … … 121 123 if size(filecell,1)>=2 && ~strcmp(filecell{1,1},filecell{2,1}) 122 124 [FileType_B,FileInfo,MovieObject_B]=get_file_type(filecell{2,1}); 123 CheckImage_B=~isempty(find(strcmp(FileType,ImageTypeOptions)));% =1 for images124 125 end 125 126 end … … 141 142 check_patch1=0;%default 142 143 143 144 145 146 144 %% get timing from the ImaDoc file or input video 145 [XmlData,NbSlice_calib,time,errormsg]=read_multimadoc(RootPath,SubDir,RootFile,FileExt,i1_series,i2_series,j1_series,j2_series); 146 %TODO: get time_A and time_B 147 % case of movies TODO TODO TODO 148 if isempty(time) && (strcmp(FileType,'video') || strcmp(FileType,'mmreader')) 149 set(handles.ListPairMode,'Value',1); 150 dt=1/get(MovieObject,'FrameRate');%time interval between successive frames 151 if strcmp(NomTypeIma,'*') 152 set(handles.ListPairMode,'String',{'series(Di)'}) 153 MaxIndex_i=get(MovieObject,'NumberOfFrames'); 154 time=(dt*(0:MaxIndex_i-1))';%list of image times 155 else 156 set(handles.ListPairMode,'String',[{'series(Dj)'};{'series(Di)'}]) 157 MaxIndex_i=max(i1_series(i1_series>0)); 158 MaxIndex_j=get(MovieObject,'NumberOfFrames'); 159 time=ones(MaxIndex_i,1)*(dt*(0:MaxIndex_j-1));%list of image times 160 enable_j(handles,'on') 161 end 162 TimeUnit='s'; 147 163 %%%%% MAIN LOOP %%%%%% 148 164 … … 164 180 end 165 181 else 166 % if ~isfield(Param.Civ1,'ImageA')167 182 ImageName_A=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,i1_series_Civ1(ifield),[],j1_series_Civ1(ifield)); 168 183 [par_civ1.ImageA,MovieObject_A] = read_image(ImageName_A,FileType_A,MovieObject_A,FrameIndex_A_Civ1(ifield)); 169 % elseif ischar(Param.Civ1.ImageA)170 % Param.Civ1.ImageA=regexprep(Param.Civ1.ImageA,'''','\');171 % [par_civ1.ImageA,VideoObject] = read_image(Param.Civ1.ImageA,par_civ1.FileTypeA,MovieObject_A,par_civ1.FrameIndexA);172 % end173 % if ~isfield(Param.Civ1,'ImageB')174 184 ImageName_B=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,i2_series_Civ1(ifield),[],j2_series_Civ1(ifield)); 175 185 [par_civ1.ImageB,MovieObject_B] = read_image(ImageName_B,FileType_B,MovieObject_B,FrameIndex_B_Civ1(ifield)); 176 % elseif isfield(Param.Civ1,'ImageB')&& ischar(Param.Civ1.ImageB)177 % Param.Civ1.ImageB=regexprep(Param.Civ1.ImageB,'''','\');178 % if strcmp(Param.Civ1.ImageA,Param.Civ1.ImageB)% use the same movie object179 % [par_civ1.ImageB,VideoObject] = read_image(Param.Civ1.ImageB,par_civ1.FileTypeB,VideoObject,par_civ1.FrameIndexB);180 % else181 % [par_civ1.ImageB,VideoObject] = read_image(Param.Civ1.ImageB,par_civ1.FileTypeB,par_civ1.ImageB,par_civ1.FrameIndexB);182 % end183 % end184 186 end 185 187 ncfile=fullfile_uvmat(RootPath,OutputDir,RootFile,'.nc',NomTypeNc,i1_series_Civ1(ifield),i2_series_Civ1(ifield),... … … 188 190 par_civ1.ImageHeight=FileInfo.Height; 189 191 list_param=(fieldnames(Param.ActionInput.Civ1))'; 190 Civ1_param=list_param;%default 191 192 %set the values of all the global attributes in list_param 192 Civ1_param=regexprep(list_param,'^.+','Civ1_$0');% insert 'Civ1_' before each string in list_param 193 Civ1_param=[{'Civ1_ImageA','Civ1_ImageB','Civ1_Time','Civ1_Dt'} Civ1_param]; %insert the names of the two input images 194 %indicate the values of all the global attributes in the output data 195 Data.Civ1_ImageA=ImageName_A; 196 Data.Civ1_ImageB=ImageName_B; 197 Data.Civ1_Time=((time(i2_civ1(ifile)+1,j2_civ1(j)+1)+time(i1_civ1(ifile)+1,j1_civ1(j)+1))/2); 198 Data.Civ1_Dt=(time(i2_civ1(ifile)+1,j2_civ1(j)+1)-time(i1_civ1(ifile)+1,j1_civ1(j)+1)); 193 199 for ilist=1:length(list_param) 194 Civ1_param{ilist}=['Civ1_' list_param{ilist}]; 195 Data.(['Civ1_' list_param{ilist}])=Param.ActionInput.Civ1.(list_param{ilist}); 200 Data.(Civ1_param{4+ilist})=Param.ActionInput.Civ1.(list_param{ilist}); 196 201 end 197 202 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Civ1_param]; … … 391 396 ibx2=ceil(par_civ2.CorrBoxSize(1)/2); 392 397 iby2=ceil(par_civ2.CorrBoxSize(2)/2); 393 % isx2=ibx2+4;% search ara +-4 pixels around the guess394 % isy2=iby2+4;395 398 par_civ2.SearchBoxSize(1)=2*ibx2+9;% search ara +-4 pixels around the guess 396 399 par_civ2.SearchBoxSize(2)=2*iby2+9; 397 %par_civ2.SearchBoxSize(1)=2*isx2+1;398 %par_civ2.SearchBoxSize(2)=2*isy2+1;399 400 par_civ2.SearchBoxShift=[Shiftx(nbval>=1)./nbval(nbval>=1) Shifty(nbval>=1)./nbval(nbval>=1)]; 400 401 par_civ2.Grid=[GridX(nbval>=1)-par_civ2.SearchBoxShift(:,1)/2 GridY(nbval>=1)-par_civ2.SearchBoxShift(:,2)/2];% grid taken at the extrapolated origin of the displacement vectors … … 409 410 410 411 list_param=(fieldnames(Param.ActionInput.Civ2))'; 411 list_remove={'pxcmx','pxcmy','npx','npy','gridflag','maskflag','term_a','term_b','T0'};412 for ilist=1:length(list_remove)413 index=strcmp(list_remove{ilist},list_param);414 if ~isempty(find(index,1))415 list_param(index)=[];416 end417 end412 Civ2_param=regexprep(list_param,'^.+','Civ2_$0');% insert 'Civ2_' before each string in list_param 413 Civ2_param=[{'Civ2_ImageA','Civ2_ImageB','Civ2_Time','Civ2_Dt'} Civ2_param]; %insert the names of the two input images 414 %indicate the values of all the global attributes in the output data 415 Data.Civ2_ImageA=ImageName_A; 416 Data.Civ2_ImageB=ImageName_B; 417 Data.Civ2_Time=1; 418 Data.Civ2_Dt=1; 418 419 for ilist=1:length(list_param) 419 Civ2_param{ilist}=['Civ2_' list_param{ilist}]; 420 eval(['Data.Civ2_' list_param{ilist} '=Param.ActionInput.Civ2.' list_param{ilist} ';']) 421 end 422 if isfield(Data,'Civ2_gridname') && strcmp(Data.Civ1_gridname(1:6),'noFile') 423 Data.Civ1_gridname=''; 424 end 425 if isfield(Data,'Civ2_maskname') && strcmp(Data.Civ1_maskname(1:6),'noFile') 426 Data.Civ2_maskname=''; 427 end 428 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Civ2_param {'Civ2_Time','Civ2_Dt'}]; 420 Data.(Civ2_param{4+ilist})=Param.ActionInput.Civ2.(list_param{ilist}); 421 end 422 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Civ2_param]; 423 429 424 nbvar=numel(Data.ListVarName); 430 425 Data.ListVarName=[Data.ListVarName {'Civ2_X','Civ2_Y','Civ2_U','Civ2_V','Civ2_F','Civ2_C'}];% cell array containing the names of the fields to record -
trunk/src/series/ima_levels.m
r604 r606 43 43 function ParamOut=ima_levels (Param) 44 44 45 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName 45 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName or InputTable refreshed 46 46 if isstruct(Param) && isequal(Param.Action.RUN,0) 47 47 ParamOut.NbViewMax=1;% max nbre of input file series (default , no limitation) … … 58 58 %check the type of the existence and type of the first input file: 59 59 Param.IndexRange.last_i=Param.IndexRange.first_i;%keep only the first index in the series 60 if isfield(Param.IndexRange,'first_j') 60 61 Param.IndexRange.last_j=Param.IndexRange.first_j; 62 end 61 63 filecell=get_file_series(Param); 62 64 if ~exist(filecell{1,1},'file') … … 73 75 %%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%% 74 76 %% read input parameters from an xml file if input is a file name (batch mode) 77 ParamOut=[] 75 78 checkrun=1; 76 79 if ischar(Param) -
trunk/src/series/merge_proj.m
r605 r606 41 41 function ParamOut=merge_proj(Param) 42 42 43 %% set the input elements needed on the GUI series when the function is selected in the menu ActionName 43 %% set the input elements needed on the GUI series when the function is selected in the menu ActionName or InputTable refreshed 44 44 if isstruct(Param) && isequal(Param.Action.RUN,0) 45 ParamOut.AllowInputSort='off';...% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) 46 ParamOut.WholeIndexRange='on';...% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 47 ParamOut.NbSlice='off'; ...%nbre of slices ('off' by default) 48 ParamOut.VelType='one';...% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 49 ParamOut.FieldName='one';...% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 50 ParamOut.FieldTransform = 'on';...%can use a transform function 51 ParamOut.ProjObject='on';...%can use projection object(option 'off'/'on', 52 ParamOut.Mask='off';...%can use mask option (option 'off'/'on', 'off' by default) 45 ParamOut.AllowInputSort='off';% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) 46 ParamOut.WholeIndexRange='on';% prescribes the file index ranges from min to max (options 'off'/'on', 'off' by default) 47 ParamOut.NbSlice='off'; %nbre of slices ('off' by default) 48 ParamOut.VelType='one';% menu for selecting the velocity type (options 'off'/'one'/'two', 'off' by default) 49 ParamOut.FieldName='one';% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 50 ParamOut.FieldTransform = 'on';%can use a transform function 51 ParamOut.TransformPath=fullfile(fileparts(which('uvmat')),'transform_field');% path to transform functions (needed for compilation only) 52 ParamOut.ProjObject='on';%can use projection object(option 'off'/'on', 53 ParamOut.Mask='off';%can use mask option (option 'off'/'on', 'off' by default) 53 54 ParamOut.OutputDirExt='.mproj';%set the output dir extension 54 55 ParamOut.OutputFileMode='NbInput';% '=NbInput': 1 output file per input file index, '=NbInput_i': 1 file per input file index i, '=NbSlice': 1 file per slice … … 57 58 msgbox_uvmat('WARNING','the first input file does not exist') 58 59 elseif isequal(size(Param.InputTable,1),1) && ~isfield(Param,'ProjObject') 59 60 end 61 return60 msgbox_uvmat('WARNING','a projection object of type plane needs to be introduced for merge_proj') 61 end 62 return 62 63 end 63 64 64 65 %%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%% 65 66 67 66 %% read input parameters from an xml file if input is a file name (batch mode) 68 67 checkrun=1; … … 72 71 end 73 72 74 ParamOut= Param;%default output73 ParamOut=[] %default output 75 74 if ~isfield(Param,'InputFields') 76 75 Param.InputFields.FieldName=''; 77 76 end 78 Output SubDir=[Param.OutputSubDir Param.OutputDirExt];% subdirectory for output files77 OutputDir=[Param.OutputSubDir Param.OutputDirExt];% subdirectory for output files 79 78 80 79 %% root input file type … … 93 92 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices 94 93 %%%%%%%%%%%% 95 NbSlice=1;%default 96 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 97 NbSlice=Param.IndexRange.NbSlice; 98 end 99 nbview=numel(i1_series);%number of input file series (lines in InputTable) 100 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 101 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 102 nbfield=nbfield_j*nbfield_i; %total number of fields 103 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices) 104 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement 94 % NbSlice=1;%default 95 % if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 96 % NbSlice=Param.IndexRange.NbSlice; 97 % end 98 NbView=numel(i1_series);%number of input file series (lines in InputTable) 99 NbField_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 100 NbField_i=size(i1_series{1},2); %nb of fields for the i index 101 NbField=NbField_j*NbField_i; %total number of fields 105 102 106 103 %determine the file type on each line from the first input file 107 104 ImageTypeOptions={'image','multimage','mmreader','video'}; 108 105 NcTypeOptions={'netcdf','civx','civdata'}; 109 for iview=1: nbview106 for iview=1:NbView 110 107 if ~exist(filecell{iview,1}','file') 111 108 displ_uvmat('ERROR',['the first input file ' filecell{iview,1} ' does not exist'],checkrun) … … 122 119 end 123 120 124 125 121 %% calibration data and timing: read the ImaDoc files 126 122 [XmlData,NbSlice_calib,time,errormsg]=read_multimadoc(RootPath,SubDir,RootFile,FileExt,i1_series,i2_series,j1_series,j2_series); … … 133 129 134 130 %% coordinate transform or other user defined transform 135 transform_fct='';%default 131 % transform_fct='';%default fct handle 132 % if isfield(Param,'FieldTransform')&&~isempty(Param.FieldTransform.TransformName) 133 % if isdeployed 134 % transform_fct=Param.FieldTransform.TransformName; 135 % dd=phys([]);%activate phys for compilation 136 % else 137 % currentdir=pwd; 138 % cd(Param.FieldTransform.TransformPath) 139 % transform_fct=str2func(Param.FieldTransform.TransformName); 140 % cd (currentdir) 141 % end 142 % end 143 transform_fct='';%default fct handle 136 144 if isfield(Param,'FieldTransform')&&~isempty(Param.FieldTransform.TransformName) 137 addpath(Param.FieldTransform.TransformPath)138 transform_fct=str2func(Param.FieldTransform.TransformName);139 rmpath(Param.FieldTransform.TransformPath)140 end 141 145 currentdir=pwd; 146 cd(Param.FieldTransform.TransformPath) 147 transform_fct=str2func(Param.FieldTransform.TransformName); 148 cd (currentdir) 149 end 142 150 %%%%%%%%%%%% END STANDARD PART %%%%%%%%%%%% 143 151 % EDIT FROM HERE … … 152 160 return 153 161 end 154 for iview=1: nbview162 for iview=1:NbView 155 163 if ~isequal(CheckImage{iview},CheckImage{1})||~isequal(CheckNc{iview},CheckNc{1}) 156 164 displ_uvmat('ERROR','input set of input series: need either netcdf either image series',checkrun) … … 169 177 %% MAIN LOOP ON SLICES 170 178 %%%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%% 171 for i_slice=1:NbSlice172 index_slice=i_slice:NbSlice:nbfield;% select file indices of the slice173 nbfiles=0;174 nbmissing=0;179 % for i_slice=1:NbSlice 180 % index_slice=i_slice:NbSlice:NbField;% select file indices of the slice 181 % NbFiles=0; 182 % nbmissing=0; 175 183 176 184 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 177 for index=index_slice 178 if checkrun 179 stopstate=get(Param.RUNHandle,'BusyAction'); 180 update_waitbar(Param.WaitbarHandle,index/nbfield) 181 else 182 stopstate='queue'; 183 end 184 if ~isequal(stopstate,'queue')% enable STOP command 185 return 186 end 187 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 188 Data=cell(1,nbview);%initiate the set Data 189 nbtime=0; 190 for iview=1:nbview 191 %% reading input file(s) 192 [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},Param.InputFields,frame_index{iview}(index)); 185 for index=1:NbField 186 if checkrun 187 stopstate=get(Param.RUNHandle,'BusyAction'); 188 update_waitbar(Param.WaitbarHandle,index/NbField) 189 else 190 stopstate='queue'; 191 end 192 if ~isequal(stopstate,'queue')% enable STOP command 193 return 194 end 195 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 196 Data=cell(1,NbView);%initiate the set Data 197 nbtime=0; 198 for iview=1:NbView 199 %% reading input file(s) 200 [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},Param.InputFields,frame_index{iview}(index)); 201 if ~isempty(errormsg) 202 errormsg=['merge_proj/read_field/' errormsg]; 203 display(errormsg) 204 break 205 end 206 timeread(iview)=0; 207 if isfield(Data{iview},'Time') 208 timeread(iview)=Data{iview}.Time; 209 nbtime=nbtime+1; 210 end 211 if ~isempty(NbSlice_calib) 212 Data{iview}.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 213 end 214 215 %% transform the input field (e.g; phys) if requested 216 if ~isempty(transform_fct) 217 if nargin(transform_fct)>=2 218 Data{iview}=transform_fct(Data{iview},XmlData{iview}); 219 else 220 Data{iview}=transform_fct(Data{iview}); 221 end 222 end 223 % Data{iview}=phys(Data{iview},XmlData{iview}); 224 %% check whether tps is needed, then calculate tps coefficients if needed 225 check_tps=0; 226 if isfield(Param.InputFields,'FieldName') 227 if ischar(Param.InputFields.FieldName) 228 Param.InputFields.FieldName={Param.InputFields.FieldName}; 229 end 230 else 231 Param.InputFields.FieldName={}; 232 end 233 for ilist=1:numel(Param.InputFields.FieldName) 234 switch Param.InputFields.FieldName{ilist} 235 case {'vort','div','strain'} 236 check_tps=1; 237 end 238 end 239 240 %% calculate tps coeff if needed 241 check_proj_tps= ~isempty(Param.ProjObject)&& strcmp(Param.ProjObject.ProjMode,'filter')&&~isfield(Data{iview},'Coord_tps'); 242 Data{iview}=tps_coeff_field(Data{iview},check_proj_tps); 243 244 %% projection on object (gridded plane) 245 if Param.CheckObject 246 [Data{iview},errormsg]=proj_field(Data{iview},Param.ProjObject); 193 247 if ~isempty(errormsg) 194 errormsg=['merge_proj/read_field/' errormsg]; 195 display(errormsg) 196 break 197 end 198 timeread(iview)=0; 199 if isfield(Data{iview},'Time') 200 timeread(iview)=Data{iview}.Time; 201 nbtime=nbtime+1; 202 end 203 if ~isempty(NbSlice_calib) 204 Data{iview}.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 205 end 206 207 %% transform the input field (e.g; phys) if requested 208 if ~isempty(transform_fct) 209 if nargin(transform_fct)>=2 210 Data{iview}=transform_fct(Data{iview},XmlData{iview}); 211 else 212 Data{iview}=transform_fct(Data{iview}); 213 end 214 end 215 216 %% check whether tps is needed, then calculate tps coefficients if needed 217 check_tps=0; 218 if isfield(Param.InputFields,'FieldName') 219 if ischar(Param.InputFields.FieldName) 220 Param.InputFields.FieldName={Param.InputFields.FieldName}; 221 end 222 else 223 Param.InputFields.FieldName={}; 224 end 225 for ilist=1:numel(Param.InputFields.FieldName) 226 switch Param.InputFields.FieldName{ilist} 227 case {'vort','div','strain'} 228 check_tps=1; 229 end 230 end 231 232 %% calculate tps coeff if needed 233 check_proj_tps= ~isempty(Param.ProjObject)&& strcmp(Param.ProjObject.ProjMode,'filter')&&~isfield(Data{iview},'Coord_tps'); 234 Data{iview}=tps_coeff_field(Data{iview},check_proj_tps); 235 236 %% projection on object (gridded plane) 237 if Param.CheckObject 238 [Data{iview},errormsg]=proj_field(Data{iview},Param.ProjObject); 239 if ~isempty(errormsg) 240 displ_uvmat('ERROR',['error in merge_proge/proj_field: ' errormsg],checkrun) 241 return 242 end 243 end 244 end 245 %----------END LOOP ON VIEWS---------------------- 246 247 %% merge the nbview fields 248 MergeData=merge_field(Data); 249 if isfield(MergeData,'Txt') 250 displ_uvmat('ERROR',MergeData.Txt,checkrun) 251 return 252 end 253 254 % time of the merged field: 255 if ~isempty(time)% time defined from ImaDoc 256 timeread=time(:,index); 257 end 258 timeread=mean(timeread); 259 260 % generating the name of the merged field 261 i1=i1_series{iview}(index); 262 if ~isempty(i2_series{iview}) 263 i2=i2_series{iview}(index); 264 else 265 i2=i1; 266 end 267 j1=1; 268 j2=1; 269 if ~isempty(j1_series{iview}) 270 j1=j1_series{iview}(index); 271 if ~isempty(j2_series{iview}) 272 j2=j2_series{iview}(index); 273 else 274 j2=j1; 275 end 276 end 277 OutputFile=fullfile_uvmat(RootPath{1},OutputSubDir,RootFile{1},FileExtOut,NomType{1},i1,i2,j1,j2); 278 279 % recording the merged field 280 if CheckImage{1} %in case of input images an image is produced 281 if isa(MergeData.A,'uint8') 282 bitdepth=8; 283 elseif isa(MergeData.A,'uint16') 284 bitdepth=16; 285 end 286 imwrite(MergeData.A,OutputFile,'BitDepth',bitdepth); 287 %write xml calibration file 288 siz=size(MergeData.A); 289 npy=siz(1); 290 npx=siz(2); 291 if isfield(MergeData,'VarAttribute')&&isfield(MergeData.VarAttribute{1},'Coord_2')&&isfield(MergeData.VarAttribute{1},'Coord_1') 292 Rangx=MergeData.VarAttribute{1}.Coord_2; 293 Rangy=MergeData.VarAttribute{1}.Coord_1; 294 elseif isfield(MergeData,'AX')&& isfield(MergeData,'AY') 295 Rangx=[MergeData.AX(1) MergeData.AX(end)]; 296 Rangy=[MergeData.AY(1) MergeData.AY(end)]; 297 else 298 Rangx=[0.5 npx-0.5]; 299 Rangy=[npy-0.5 0.5];%default 300 end 301 pxcmx=(npx-1)/(Rangx(2)-Rangx(1)); 302 pxcmy=(npy-1)/(Rangy(1)-Rangy(2)); 303 T_x=-pxcmx*Rangx(1)+0.5; 304 T_y=-pxcmy*Rangy(2)+0.5; 305 GeometryCal.focal=1; 306 GeometryCal.R=[pxcmx,0,0;0,pxcmy,0;0,0,1]; 307 GeometryCal.Tx_Ty_Tz=[T_x T_y 1]; 308 ImaDoc.GeometryCalib=GeometryCal; 309 % t=struct2xml(ImaDoc); 310 % t=set(t,1,'name','ImaDoc'); 311 % save(t,[filebase_merge '.xml']) 312 % display([filebase_merge '.xml saved']) 313 else 314 MergeData.ListGlobalAttribute={'Conventions','Project','InputFile_1','InputFile_end','nb_coord','nb_dim','dt','Time','civ'}; 315 MergeData.Conventions='uvmat'; 316 MergeData.nb_coord=2; 317 MergeData.nb_dim=2; 318 dt=[]; 319 if isfield(Data{1},'dt')&& isnumeric(Data{1}.dt) 320 dt=Data{1}.dt; 321 end 322 for iview =2:numel(Data) 323 if ~(isfield(Data{iview},'dt')&& isequal(Data{iview}.dt,dt)) 324 dt=[];%dt not the same for all fields 325 end 326 end 327 if isempty(dt) 328 MergeData.ListGlobalAttribute(6)=[]; 329 else 330 MergeData.dt=dt; 331 end 332 MergeData.Time=timeread; 333 error=struct2nc(OutputFile,MergeData);%save result file 334 if isempty(error) 335 display(['output file ' OutputFile ' written']) 336 else 337 display(error) 338 end 339 end 340 end 341 end 248 displ_uvmat('ERROR',['error in merge_proge/proj_field: ' errormsg],checkrun) 249 return 250 end 251 end 252 end 253 %----------END LOOP ON VIEWS---------------------- 254 255 %% merge the NbView fields 256 MergeData=merge_field(Data); 257 if isfield(MergeData,'Txt') 258 displ_uvmat('ERROR',MergeData.Txt,checkrun) 259 return 260 end 261 262 % time of the merged field: 263 if ~isempty(time)% time defined from ImaDoc 264 timeread=time(:,index); 265 end 266 timeread=mean(timeread); 267 268 % generating the name of the merged field 269 i1=i1_series{iview}(index); 270 if ~isempty(i2_series{iview}) 271 i2=i2_series{iview}(index); 272 else 273 i2=i1; 274 end 275 j1=1; 276 j2=1; 277 if ~isempty(j1_series{iview}) 278 j1=j1_series{iview}(index); 279 if ~isempty(j2_series{iview}) 280 j2=j2_series{iview}(index); 281 else 282 j2=j1; 283 end 284 end 285 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomType{1},i1,i2,j1,j2); 286 287 % recording the merged field 288 if CheckImage{1} %in case of input images an image is produced 289 if isa(MergeData.A,'uint8') 290 bitdepth=8; 291 elseif isa(MergeData.A,'uint16') 292 bitdepth=16; 293 end 294 imwrite(MergeData.A,OutputFile,'BitDepth',bitdepth); 295 %write xml calibration file 296 siz=size(MergeData.A); 297 npy=siz(1); 298 npx=siz(2); 299 if isfield(MergeData,'VarAttribute')&&isfield(MergeData.VarAttribute{1},'Coord_2')&&isfield(MergeData.VarAttribute{1},'Coord_1') 300 Rangx=MergeData.VarAttribute{1}.Coord_2; 301 Rangy=MergeData.VarAttribute{1}.Coord_1; 302 elseif isfield(MergeData,'AX')&& isfield(MergeData,'AY') 303 Rangx=[MergeData.AX(1) MergeData.AX(end)]; 304 Rangy=[MergeData.AY(1) MergeData.AY(end)]; 305 else 306 Rangx=[0.5 npx-0.5]; 307 Rangy=[npy-0.5 0.5];%default 308 end 309 pxcmx=(npx-1)/(Rangx(2)-Rangx(1)); 310 pxcmy=(npy-1)/(Rangy(1)-Rangy(2)); 311 T_x=-pxcmx*Rangx(1)+0.5; 312 T_y=-pxcmy*Rangy(2)+0.5; 313 GeometryCal.focal=1; 314 GeometryCal.R=[pxcmx,0,0;0,pxcmy,0;0,0,1]; 315 GeometryCal.Tx_Ty_Tz=[T_x T_y 1]; 316 ImaDoc.GeometryCalib=GeometryCal; 317 % t=struct2xml(ImaDoc); 318 % t=set(t,1,'name','ImaDoc'); 319 % save(t,[filebase_merge '.xml']) 320 % display([filebase_merge '.xml saved']) 321 else 322 MergeData.ListGlobalAttribute={'Conventions','Project','InputFile_1','InputFile_end','nb_coord','nb_dim','dt','Time','civ'}; 323 MergeData.Conventions='uvmat'; 324 MergeData.nb_coord=2; 325 MergeData.nb_dim=2; 326 dt=[]; 327 if isfield(Data{1},'dt')&& isnumeric(Data{1}.dt) 328 dt=Data{1}.dt; 329 end 330 for iview =2:numel(Data) 331 if ~(isfield(Data{iview},'dt')&& isequal(Data{iview}.dt,dt)) 332 dt=[];%dt not the same for all fields 333 end 334 end 335 if isempty(dt) 336 MergeData.ListGlobalAttribute(6)=[]; 337 else 338 MergeData.dt=dt; 339 end 340 MergeData.Time=timeread; 341 error=struct2nc(OutputFile,MergeData);%save result file 342 if isempty(error) 343 display(['output file ' OutputFile ' written']) 344 else 345 display(error) 346 end 347 end 348 end 349 342 350 343 351 %'merge_field': concatene fields … … 351 359 MergeData=Data{1};%default 352 360 error=0; 353 nbview=length(Data);354 if nbview==1361 NbView=length(Data); 362 if NbView==1 355 363 return 356 364 end … … 382 390 for ivar=VarIndex 383 391 VarName=MergeData.ListVarName{ivar}; 384 for iview=1: nbview392 for iview=1:NbView 385 393 MergeData.(VarName)=[MergeData.(VarName); Data{iview}.(VarName)]; 386 394 end … … 389 397 else 390 398 testFF=0; 391 for iview=2: nbview399 for iview=2:NbView 392 400 for ivar=VarIndex 393 401 VarName=MergeData.ListVarName{ivar}; … … 401 409 end 402 410 if testFF 403 nbaver= nbview-MergeData.FF;411 nbaver=NbView-MergeData.FF; 404 412 indgood=find(nbaver>0); 405 413 for ivar=VarIndex … … 410 418 for ivar=VarIndex 411 419 VarName=MergeData.ListVarName{ivar}; 412 MergeData.(VarName)=double(MergeData.(VarName))./ nbview;420 MergeData.(VarName)=double(MergeData.(VarName))./NbView; 413 421 end 414 422 end -
trunk/src/series/time_series.m
r605 r606 42 42 function ParamOut=time_series(Param) 43 43 44 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName 44 %% set the input elements needed on the GUI series when the action is selected in the menu ActionName or InputTable refreshed 45 45 if isstruct(Param) && isequal(Param.Action.RUN,0) 46 46 ParamOut.AllowInputSort='off';% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) … … 50 50 ParamOut.FieldName='two';% menu for selecting the field (s) in the input file(options 'off'/'one'/'two', 'off' by default) 51 51 ParamOut.FieldTransform = 'on';%can use a transform function 52 ParamOut.TransformPath=fullfile(fileparts(which('uvmat')),'transform_field');% path to transform functions (needed for compilation only) 52 53 ParamOut.ProjObject='on';%can use projection object(option 'off'/'on', 53 54 ParamOut.Mask='off';%can use mask option (option 'off'/'on', 'off' by default) … … 71 72 end 72 73 73 ParamOut= Param; %default output74 ParamOut=[]; %default output 74 75 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 75 76 … … 89 90 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices 90 91 %%%%%%%%%%%% 91 NbSlice=1;%default92 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice)93 NbSlice=Param.IndexRange.NbSlice;94 end92 % NbSlice=1;%default 93 % if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 94 % NbSlice=Param.IndexRange.NbSlice; 95 % end 95 96 nbview=numel(i1_series);%number of input file series (lines in InputTable) 96 nbfield_j=size( i1_series{1},1); %nb of fields for the j index (bursts or volume slices)97 nbfield_j=size(j1_series{1},1); %nb of fields for the j index (bursts or volume slices) 97 98 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 98 99 nbfield=nbfield_j*nbfield_i; %total number of fields 99 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices)100 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement101 100 102 101 %determine the file type on each line from the first input file … … 153 152 end 154 153 NomTypeOut='_1-2_1';% output file index will indicate the first and last ref index in the series 155 if checkrun==1156 return % stop here for input checks157 end158 154 159 155 %% Set field names and velocity types … … 419 415 420 416 %name of result file 421 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(1),i1_series{1}(end), i_slice,[]);417 OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(1),i1_series{1}(end),j1_series{1}(1),j1_series{1}(end)); 422 418 errormsg=struct2nc(OutputFile,DataOut); %save result file 423 419 if isempty(errormsg)
Note: See TracChangeset
for help on using the changeset viewer.