- Timestamp:
- Mar 21, 2025, 10:17:07 AM (4 weeks ago)
- Location:
- trunk/src
- Files:
-
- 9 added
- 2 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/get_file_info.m
r1170 r1178 79 79 FileInfo.FileType=regexprep(FileExt,'^.','');% eliminate the dot of the extension; 80 80 case {'.seq','.sqb'} 81 [~,FileInfo ,timestamps,errormsg]=read_rdvision(fileinput,[]);81 [~,FileInfo]=read_rdvision(fileinput,[]); 82 82 case '.im7' 83 83 try … … 158 158 FileInfo=orderfields(FileInfo,[nbfield nbfield-1 nbfield-2 (1:nbfield-3)]); %reorder the fields of fileInfo for clarity 159 159 catch ME 160 FileInfo.error=ME.message 160 FileInfo.error=ME.message; 161 161 end 162 162 else … … 165 165 [Data,tild,tild,errormsg]=nc2struct(fileinput,[]); 166 166 if isempty(errormsg) 167 % if isfield(Data,'absolut_time_T0') && isfield(Data,'hart') && ~isempty(Data.absolut_time_T0) && ~isempty(Data.hart)168 % FileInfo.FileType='civx';%old civ data from the Fortran program169 % if isfield(Data,'patch2') && isequal(Data.patch2,1)170 % FileInfo.CivStage=6;171 % elseif isfield(Data,'fix2') && isequal(Data.fix2,1)172 % FileInfo.CivStage=5;173 % elseif isfield(Data,'civ2')&& isequal(Data.civ2,1)174 % FileInfo.CivStage=4;175 % elseif isfield(Data,'patch')&&isequal(Data.patch,1)176 % FileInfo.CivStage=3;177 % elseif isfield(Data,'fix')&&isequal(Data.fix,1)178 % FileInfo.CivStage=2;179 % else180 % FileInfo.CivStage=1;181 % end182 % else183 167 if isfield(Data,'Conventions') && strcmp(Data.Conventions,'uvmat/civdata') 184 168 FileInfo.FileType='civdata'; % test for civ velocity fields -
trunk/src/imadoc2struct.m
r1150 r1178 40 40 %% opening the xml file 41 41 [tild,tild,FileExt]=fileparts(ImaDoc); 42 %% case of .civ files (obsolete)43 if strcmp(FileExt,'.civ')44 [errormsg,time,TimeUnit,mode,npx,npy,s.GeometryCalib]=read_imatext(ImaDoc);45 return46 end47 42 48 %% case of xml files49 43 if nargin ==1 50 44 [s,Heading,errormsg]=xml2struct(ImaDoc);% convert the whole xml file in a structure s -
trunk/src/read_image.m
r1170 r1178 83 83 A=(reshape(A,Header(1).Width,Header(1).Height))'; 84 84 A=flip(A,1); 85 case 'rdvision' 86 A=read_rdvision(FileName,num); 85 87 end -
trunk/src/read_rdvision.m
r1127 r1178 63 63 s=ini2struct(filename_seq); 64 64 FileInfo=s.sequenceSettings; 65 FileInfo.Width=str2double(FileInfo.width); 66 FileInfo.Height=str2double(FileInfo.height); 67 if isequal(FileInfo.bytesperpixel,'2') 68 FileInfo.BitDepth=16; 69 else 70 FileInfo.BitDepth=8; 71 end 65 72 if isfield(s.sequenceSettings,'numberoffiles') 66 73 FileInfo.NumberOfFrames=str2double(s.sequenceSettings.numberoffiles); … … 119 126 binrepertoire=regexprep(FileInfo.bindirectory,'\\$','');%tranform Windows notation to Linux 120 127 binrepertoire=regexprep(binrepertoire,'\','/'); 121 [ tild,binrepertoire,DirExt]=fileparts(binrepertoire);128 [~,binrepertoire,DirExt]=fileparts(binrepertoire); 122 129 binrepertoire=[binrepertoire DirExt]; 123 130 end … … 144 151 FileInfo.StartTime=regexprep(FileInfo.binrepertoire,'T',' '); 145 152 FileInfo.EndTime=datestr(datenum(FileInfo.StartTime,'yyyy-mm-dd HH.MM.SS')+timestamps(end)/86400); 146 disp(FileInfo)147 153 end 148 154 … … 238 244 if isempty(s) 239 245 continue; 240 end ;246 end 241 247 if (s(1)==';') % ';' start comment lines 242 248 continue; 243 end ;249 end 244 250 if (s(1)=='#') % '#' start comment lines 245 251 continue; 246 end ;252 end 247 253 if ( s(1)=='[' ) && (s(end)==']' ) 248 254 % We found section -
trunk/src/series.m
r1171 r1178 553 553 set(handles.series,'Pointer','watch') % set the mouse pointer to 'watch' 554 554 set(handles.REFRESH,'BackgroundColor',[1 1 0])% set REFRESH button to yellow color (indicate activation) 555 set(handles.Relabel,'BackgroundColor',[0 1 0]) 555 556 drawnow 556 557 empty_line=false(size(InputTable,1),1); … … 876 877 MinIndex_j=0; 877 878 end 879 if isfield(FileInfo,'Software')&&~isempty(FileInfo.Software) && ~isempty(regexp(FileInfo.Software,'^pco.camware', 'once')) 880 MinIndex_i=0; 881 end 882 if strcmp(FileInfo.FileType,'rdvision') 883 set(handles.OutputSubDir,'String','/im') 884 end 878 885 MinIndex_i_table=get(handles.MinIndex_i,'Data'); % retrieve the min indices in the table MinIndex 879 886 MinIndex_j_table=get(handles.MinIndex_j,'Data'); % retrieve the min indices in the table MinIndex … … 1035 1042 TimeMax=Time(MaxIndex_i+1,MaxIndex_j+1); 1036 1043 end 1044 end 1045 1046 %% case of possible index relabeling from xml info 1047 if isfield(XmlData,'FileSeries')&& strcmp(FileInfo.FileType,'multimage') 1048 set(handles.Relabel,'Visible','on') 1049 set(handles.Relabel,'Value',0) 1050 SeriesData.FileSeries{iview}=XmlData.FileSeries; 1051 TimeMin=Time(2,2); 1052 TimeMax=Time(end,end); 1053 TimeFirst=TimeMin; 1054 TimeLast=TimeMax; 1055 elseif iview==1 1056 set(handles.Relabel,'Visible','off') 1037 1057 end 1038 1058 … … 1407 1427 if isfield(SeriesData,'ProjObject') 1408 1428 Param.ProjObject=SeriesData.ProjObject; 1429 end 1430 if isfield(SeriesData,'FileSeries') 1431 Param.FileSeries=SeriesData.FileSeries{1}; 1409 1432 end 1410 1433 if ~isfield(SeriesData,'i1_series') … … 3936 3959 3937 3960 3938 3939 3940 3961 function OutputPath_Callback(hObject, eventdata, handles) 3941 3962 … … 3959 3980 3960 3981 3961 3962 3982 % --- Executes on button press in DeleteMask. 3963 3983 function DeleteMask_Callback(hObject, eventdata, handles) 3964 3984 set(handles.MaskTable,'Data',{}) 3985 3986 3987 % --- Executes on button press in Relabel. 3988 function Relabel_Callback(hObject, eventdata, handles) 3989 if get(handles.Relabel,'Value') 3990 SeriesData=get(handles.series,'UserData'); 3991 if isfield(SeriesData,'FileSeries')&& ~isempty(SeriesData.FileSeries{1}) 3992 [nbfield,nbfield_j]=size(SeriesData.Time{1}); 3993 nbfield=nbfield-1; %remove the possible index 0 3994 nbfield_j=nbfield_j-1; %remove the possible index 0 3995 MaxIndex_i=get(handles.MaxIndex_i,'Data'); 3996 MaxIndex_j=get(handles.MaxIndex_j,'Data'); 3997 MaxIndex_i(1,:)=nbfield; 3998 MaxIndex_j(1,:)=nbfield_j; 3999 MinIndex_i(1,:)=1; 4000 MinIndex_j(1,:)=1; 4001 set(handles.MaxIndex_i,'Data',MaxIndex_i) 4002 set(handles.MaxIndex_j,'Data',MaxIndex_j) 4003 set(handles.MinIndex_i,'Data',MinIndex_i) 4004 set(handles.MinIndex_j,'Data',MinIndex_j) 4005 first_i=str2double(get(handles.num_first_i,'String')); 4006 first_j=str2double(get(handles.num_first_j,'String')); 4007 i1=(first_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4008 if strcmp(SeriesData.TimeName,'xml')% indices i and j 4009 j1=mod(i1-1,nbfield_j)+first_j; 4010 i1=floor((i1-1)/nbfield_j)+1; 4011 set(handles.num_first_j,'String',num2str(j1)) 4012 end 4013 set(handles.num_first_i,'String',num2str(i1)) 4014 % last_i=str2double(get(handles.num_last_i,'String')); 4015 % last_j=str2double(get(handles.num_last_j,'String')); 4016 % i1=(last_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4017 % if strcmp(SeriesData.TimeName,'xml')% indices i and j 4018 % j1=mod(i1-1,nbfield_j)+1; 4019 % i1=floor((i1-1)/nbfield_j)+1; 4020 % end 4021 set(handles.num_last_i,'String',num2str(nbfield)) 4022 set(handles.num_last_j,'String',num2str(nbfield_j)) 4023 end 4024 else 4025 check_input_file_series(handles) 4026 ActionInput_Callback([],[], handles) 4027 end 4028 -
trunk/src/series/aver_spectral.m
r1127 r1178 144 144 transform_fct='';%default 145 145 if isfield(Param,'FieldTransform')&&~isempty(Param.FieldTransform.TransformName) 146 addpath(Param.FieldTransform.TransformPath) 146 currentdir=pwd; 147 cd(Param.FieldTransform.TransformPath) 147 148 transform_fct=str2func(Param.FieldTransform.TransformName); 148 rmpath(Param.FieldTransform.TransformPath)149 cd (currentdir) 149 150 end 150 151 -
trunk/src/series/aver_stat.m
r1148 r1178 198 198 transform_fct='';%default 199 199 if isfield(Param,'FieldTransform')&&~isempty(Param.FieldTransform.TransformName) 200 addpath(Param.FieldTransform.TransformPath) 200 currentdir=pwd; 201 cd(Param.FieldTransform.TransformPath) 201 202 transform_fct=str2func(Param.FieldTransform.TransformName); 202 rmpath(Param.FieldTransform.TransformPath)203 cd (currentdir) 203 204 if isfield(Param,'TransformInput') 204 205 XmlData{1}.TransformInput=Param.TransformInput; -
trunk/src/series/civ_series.m
r1177 r1178 254 254 end 255 255 end 256 CheckRelabel=isfield(Param,'FileSeries' );%=true for index relabeling (PCO) 256 257 257 258 %% introduce input image transform 258 259 transform_fct=[];%default, no transform 259 260 if isfield(Param,'FieldTransform')&&~isempty(Param.FieldTransform.TransformName) 260 % addpath(Param.FieldTransform.TransformPath)261 261 currentdir=pwd; 262 262 cd(Param.FieldTransform.TransformPath) 263 263 transform_fct=str2func(Param.FieldTransform.TransformName); 264 264 cd (currentdir) 265 %rmpath(Param.FieldTransform.TransformPath)266 265 end 267 266 … … 289 288 end 290 289 OutputPath=fullfile(Param.OutputPath,Param.Experiment,Param.Device); 291 290 if CheckRelabel 291 RootFileOut=index2filename(Param.FileSeries,1,1,MaxIndex_j); 292 else 293 RootFileOut=RootFile_A; 294 end 292 295 if strcmp(Param.ActionInput.ListCompareMode,'PIV') 293 ncfile=fullfile_uvmat(OutputPath,OutputDir,RootFile _A,'.nc',NomTypeNc,i1_series_Civ1(ifield),i2_series_Civ1(ifield),...296 ncfile=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,'.nc',NomTypeNc,i1_series_Civ1(ifield),i2_series_Civ1(ifield),... 294 297 j1_series_Civ1(ifield),j2_series_Civ1(ifield)); 295 298 else 296 ncfile=fullfile_uvmat(OutputPath,OutputDir,RootFile _A,'.nc',NomTypeNc,i2_series_Civ1(ifield),[],...299 ncfile=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,'.nc',NomTypeNc,i2_series_Civ1(ifield),[],... 297 300 j1_series_Civ1(ifield),j2_series_Civ1(ifield)); 298 301 end … … 314 317 end 315 318 if strcmp(Param.ActionInput.ListCompareMode,'PIV') 316 ncfile_out=fullfile_uvmat(OutputPath,OutputDir,RootFile _A,'.nc',NomTypeNc,i1_civ2,i2_civ2,j1_civ2,j2_civ2);319 ncfile_out=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,'.nc',NomTypeNc,i1_civ2,i2_civ2,j1_civ2,j2_civ2); 317 320 else % displacement 318 ncfile_out=fullfile_uvmat(OutputPath,OutputDir,RootFile _A,'.nc',NomTypeNc,i2_civ2,[],j2_civ2);321 ncfile_out=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,'.nc',NomTypeNc,i2_civ2,[],j2_civ2); 319 322 end 320 323 end … … 336 339 if strcmp(Param.ActionInput.ListCompareMode,'displacement') 337 340 ImageName_A=Param.ActionInput.RefFile; 341 elseif CheckRelabel 342 [RootFile,FileIndexString,FrameIndex_A]=index2filename(Param.FileSeries,i1_series_Civ1(ifield),j1_series_Civ1(ifield),MaxIndex_j); 343 ImageName_A=fullfile(RootPath_A,SubDir_A,[RootFile FileIndexString FileExt_A]); 338 344 else 339 345 ImageName_A=fullfile_uvmat(RootPath_A,SubDir_A,RootFile_A,FileExt_A,NomType_A,i1_series_Civ1(ifield),[],j1_series_Civ1(ifield)); 346 FrameIndex_A=FrameIndex_A_Civ1(ifield); 340 347 end 341 348 if strcmp(FileExt_A,'.nc')% case of input images in format netcdf … … 368 375 end 369 376 tsart_input=tic; 370 [par_civ1.ImageA,VideoObject_A] = read_image(ImageName_A,FileType_A,VideoObject_A,FrameIndex_A _Civ1(ifield));377 [par_civ1.ImageA,VideoObject_A] = read_image(ImageName_A,FileType_A,VideoObject_A,FrameIndex_A); 371 378 time_input=toc(tsart_input); 372 379 end 380 if CheckRelabel 381 [RootFile,FileIndexString,FrameIndex_B]=index2filename(Param.FileSeries,i1_series_Civ1(ifield),j1_series_Civ1(ifield),MaxIndex_j); 382 ImageName_B=fullfile(RootPath_B,SubDir_B,[RootFile FileIndexString FileExt_B]); 383 else 373 384 ImageName_B=fullfile_uvmat(RootPath_B,SubDir_B,RootFile_B,FileExt_B,NomType_B,i2_series_Civ1(ifield),[],j2_series_Civ1(ifield)); 385 FrameIndex_B=FrameIndex_B_Civ1(ifield); 386 end 374 387 if isempty(FileType_B)% determine the image type for the first field 375 388 [FileInfo_B,VideoObject_B]=get_file_info(ImageName_B); … … 380 393 continue 381 394 end 382 [par_civ1.ImageB,VideoObject_B] = read_image(ImageName_B,FileType_B,VideoObject_B,FrameIndex_B _Civ1(ifield));395 [par_civ1.ImageB,VideoObject_B] = read_image(ImageName_B,FileType_B,VideoObject_B,FrameIndex_B); 383 396 384 397 catch ME % display errors in reading input images … … 613 626 if strcmp(Param.ActionInput.ListCompareMode,'displacement') 614 627 ImageName_A_Civ2=Param.ActionInput.RefFile; 615 else 628 elseif CheckRelabel 629 [RootFile,FileIndexString,FrameIndex_A_2]=index2filename(Param.FileSeries,i1_series_Civ2(ifield),j1_series_Civ2(ifield),MaxIndex_j); 630 ImageName_A_Civ2=fullfile(RootPath_A,SubDir_A,[RootFile FileIndexString FileExt_A]); 631 else 616 632 ImageName_A_Civ2=fullfile_uvmat(RootPath_A,SubDir_A,RootFile_A,FileExt_A,NomType_A,i1_civ2,[],j1_civ2); 617 end 618 if strcmp(ImageName_A_Civ2,ImageName_A) && isequal(FrameIndex_A_Civ1(ifield),FrameIndex_A_Civ2(ifield)) 633 FrameIndex_A_2=FrameIndex_A_Civ2(ifield); 634 end 635 if strcmp(ImageName_A_Civ2,ImageName_A) && isequal(FrameIndex_A,FrameIndex_A_2) 619 636 par_civ2.ImageA=par_civ1.ImageA; 620 637 else 621 [par_civ2.ImageA,VideoObject_A] = read_image(ImageName_A_Civ2,FileType_A,VideoObject_A,FrameIndex_A_Civ2(ifield)); 622 end 638 [par_civ2.ImageA,VideoObject_A] = read_image(ImageName_A_Civ2,FileType_A,VideoObject_A,FrameIndex_A_2); 639 end 640 if CheckRelabel 641 [RootFile,FileIndexString,FrameIndex_B_2]=index2filename(Param.FileSeries,i2_civ2,j2_civ2,MaxIndex_j); 642 ImageName_B_Civ2=fullfile(RootPath_B,SubDir_B,[RootFile FileIndexString FileExt_B]); 643 else 644 645 623 646 ImageName_B_Civ2=fullfile_uvmat(RootPath_B,SubDir_B,RootFile_B,FileExt_B,NomType_B,i2_civ2,[],j2_civ2); 624 if strcmp(ImageName_B_Civ2,ImageName_B) && isequal(FrameIndex_B_Civ1(ifield),FrameIndex_B_Civ2) 647 FrameIndex_B_2=FrameIndex_B_Civ2(ifield); 648 end 649 if strcmp(ImageName_B_Civ2,ImageName_B) && isequal(FrameIndex_B_2,FrameIndex_B) 625 650 par_civ2.ImageB=par_civ1.ImageB; 626 651 else 627 [par_civ2.ImageB,VideoObject_B] = read_image(ImageName_B_Civ2,FileType_B,VideoObject_B,FrameIndex_B_ Civ2(ifield));652 [par_civ2.ImageB,VideoObject_B] = read_image(ImageName_B_Civ2,FileType_B,VideoObject_B,FrameIndex_B_2); 628 653 end 629 654 % [FileInfo_A,VideoObject_A]=get_file_info(ImageName_A_Civ2); -
trunk/src/series/sub_background.m
r1175 r1178 10 10 % Organization of image indices: 11 11 % The program is working on a series of images, 12 % In the mode 'volume', nbfield2=1 (1 image at each level)and NbSlice (= nbfield_j)13 % Else nbfield2= nbfield_j =nbre of images in a burst (j index)12 % In the mode 'volume', nbfield2=1 (1 image at each level)and NbSlice (=NbField_j) 13 % Else nbfield2=NbField_j =nbre of images in a burst (j index) 14 14 15 15 % function GUI_config=sub_background(Param) … … 83 83 ParamOut.OutputDirExt='.sback';%set the output dir extension 84 84 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 85 86 %% root input file(s) and type87 % check the existence of the first file in the series88 first_j=[];% note that the function will propose to cover the whole range of indices89 if isfield(Param.IndexRange,'MinIndex_j'); first_j=Param.IndexRange.MinIndex_j; end90 last_j=[];91 if isfield(Param.IndexRange,'MaxIndex_j'); last_j=Param.IndexRange.MaxIndex_j; end92 PairString='';93 if isfield(Param.IndexRange,'PairString'); PairString=Param.IndexRange.PairString; end94 [i1,i2,j1,j2] = get_file_index(Param.IndexRange.first_i,first_j,PairString);95 FirstFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},...96 Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2);97 if ~exist(FirstFileName,'file')98 msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist'])99 else100 [i1,i2,j1,j2] = get_file_index(Param.IndexRange.last_i,last_j,PairString);101 LastFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},...102 Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2);103 if ~exist(FirstFileName,'file')104 msgbox_uvmat('WARNING',['the last input file ' LastFileName ' does not exist'])105 end106 end107 85 108 86 %% check the validity of input file types 109 FileInfo=get_file_info(FirstFileName); 110 FileType=FileInfo.FileType; 111 CheckImage=strcmp(FileInfo.FieldType,'image');% =1 for images 112 if ~CheckImage 113 msgbox_uvmat('ERROR',['invalid file type input: ' FileType ' not an image']) 87 if isfield(Param,'SeriesData')&& isfield(Param.SeriesData,'FileInfo') 88 if ~strcmp(Param.SeriesData.FileInfo{1}.FieldType,'image') 89 msgbox_uvmat('ERROR','invalid file type input: not an image series') 114 90 return 115 91 end 116 92 end 93 117 94 %% numbers of fields 118 95 NbSlice_i=1;%default … … 124 101 incr_j=Param.IndexRange.incr_j; 125 102 end 126 if is empty(first_j)||isempty(last_j)127 nbfield_j=1;103 if isfield(Param.IndexRange,'first_j')&&~isempty(Param.IndexRange.first_j) 104 NbField_j=numel(Param.IndexRange.first_j:incr_j:Param.IndexRange.last_j);%nb of fields for the j index (bursts or volume slices) 128 105 else 129 nbfield_j=numel(first_j:incr_j:last_j);%nb of fields for the j index (bursts or volume slices)106 NbField_j=1; 130 107 end 131 108 first_i=1;last_i=1;incr_i=1;%default … … 136 113 end 137 114 nbfield_i=numel(first_i:incr_i:last_i);%nb of fields for the i index (bursts or volume slices) 138 nbfield= nbfield_j*nbfield_i; %total number of fields115 nbfield=NbField_j*nbfield_i; %total number of fields 139 116 nbfield_i=floor(nbfield/NbSlice_i);%total number of indexes in a slice (adjusted to an integer number of slices) 140 117 … … 143 120 nbaver_init=23; %default number of images used for the sliding background: to be adjusted later to include an integer number of bursts 144 121 SaturationValue=0; 145 if nbfield_i~=1 && nbfield_j<=nbaver_init146 nbaver=floor(nbaver_init/ nbfield_j); % number of bursts used for the sliding background,122 if nbfield_i~=1 && NbField_j<=nbaver_init 123 nbaver=floor(nbaver_init/NbField_j); % number of bursts used for the sliding background, 147 124 if isequal(mod(nbaver,2),0)% if nbaver is even 148 125 nbaver=nbaver+1;%put the number of burst to an odd number (so the middle burst is defined) 149 126 end 150 nbaver_init=nbaver* nbfield_j;%propose by default an integer number of bursts127 nbaver_init=nbaver*NbField_j;%propose by default an integer number of bursts 151 128 end 152 129 BrightnessRankThreshold=0.1; … … 161 138 BrightnessRankThreshold=Param.ActionInput.BrightnessRankThreshold; 162 139 end 163 % if isfield(Param.ActionInput,'CheckSubmedian') && Param.ActionInput.CheckSubmedian164 % CheckSubmedian='Yes';165 % end166 140 if isfield(Param.ActionInput,'SaturationValue') 167 141 SaturationValue=Param.ActionInput.SaturationValue; … … 190 164 ParamOut.NbSlice=1; %nbre of slices displayed 191 165 else 192 step= nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst193 end 194 ParamOut.ActionInput.SlidingSequenceLength=adjust_slidinglength(str2 num(answer{2}),step);166 step=NbField_j;%case of bursts: the sliding background is shifted by the length of one burst 167 end 168 ParamOut.ActionInput.SlidingSequenceLength=adjust_slidinglength(str2double(answer{2}),step); 195 169 ParamOut.ActionInput.CheckVolume=strcmp(answer{1},'Yes'); 196 170 ParamOut.ActionInput.BrightnessRankThreshold=str2double(answer{3}); … … 205 179 206 180 %% read input parameters from an xml file if input is a file name (batch mode) 207 checkrun=1;181 % checkrun=1; 208 182 RUNHandle=[]; 209 WaitbarHandle=[];183 % WaitbarHandle=[]; 210 184 if ischar(Param) 211 185 Param=xml2struct(Param);% read Param as input file (batch case) 212 checkrun=0; 213 else 214 hseries=findobj(allchild(0),'Tag','series'); 186 else 187 hseries=findobj(allchild(0),'Tag','series'); 215 188 RUNHandle=findobj(hseries,'Tag','RUN');%handle of RUN button in GUI series 216 WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series189 % WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series 217 190 end 218 191 … … 220 193 NbSlice_i=Param.IndexRange.NbSlice; 221 194 if ~isequal(NbSlice_i,1) 222 display(['multi-level splitting into ' num2str(NbSlice_i) ' slices']); 223 end 224 RootPath=Param.InputTable(:,1); 225 RootFile=Param.InputTable(:,3); 226 SubDir=Param.InputTable(:,2); 227 NomType=Param.InputTable(:,4); 228 FileExt=Param.InputTable(:,5); 229 [filecell,i1_series,i2_series,j1_series]=get_file_series(Param);%series of file names organised as a single array 230 231 %%%%%%%%%%%% 232 % The cell array filecell is the list of input file names, while 233 % filecell{iview,fileindex}: 234 % iview: line in the table corresponding to a given file series 235 % fileindex: file index within the file series, 236 % 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 237 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices 238 %%%%%%%%%%%% 239 [FileInfo{1},MovieObject{1}]=get_file_info(filecell{1,1}); 240 FileType{1}=FileInfo{1}.FileType; 241 if ~isempty(j1_series{1}) 242 frame_index{1}=j1_series{1}; 243 else 244 frame_index{1}=i1_series{1}; 245 end 246 247 248 %% output file naming 249 FileExtOut='.png'; % write result as .png images for image inputsFileInfo.FileType='image' 250 if strcmp(FileInfo{1}.FileType,'image') 251 NomTypeOut=NomType{1}; 252 elseif isempty(j1_series{1}) 253 NomTypeOut='_1'; 254 else 255 NomTypeOut='_1_1';% caseof purely numerical indexing 256 end 257 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 258 OutputPath=fullfile(Param.OutputPath,Param.Experiment,Param.Device); 195 disp(['multi-level splitting into ' num2str(NbSlice_i) ' slices']); 196 end 197 RootPath=Param.InputTable{1,1}; 198 RootFile=Param.InputTable{1,3}; 199 SubDir=Param.InputTable{1,2}; 200 NomType=Param.InputTable{1,4}; 201 FileExt=Param.InputTable{1,5}; 202 %[filecell,i1_series,i2_series,j1_series]=get_file_series(Param);%series of file names organised as a single array 203 259 204 260 205 %% file index parameters … … 267 212 % nbaver_ima: nbre of the images in the sliding sequence used for the background 268 213 % nbaver=nbaver_ima/step: nbre of bursts corresponding to nbaver_ima images. It has been adjusted so that nbaver is an odd integer 269 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 270 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 214 i_indices=Param.IndexRange.first_i:Param.IndexRange.incr_i:Param.IndexRange.last_i; 215 if isfield(Param.IndexRange,'first_j') 216 j_indices=Param.IndexRange.first_j:Param.IndexRange.incr_j:Param.IndexRange.last_j; 217 else 218 j_indices=1; 219 end 220 nbfield_i=numel(i_indices); %nb of fields for the i index (bursts or volume slices) 221 NbField_j=numel(j_indices); %nb of fields for the j index 222 j_indices=j_indices'*ones(1,nbfield_i); 223 i_indices=ones(NbField_j,1)*i_indices; 271 224 272 225 if Param.ActionInput.CheckVolume% case of volume scan: the background images must be determined for each index j 273 226 step=2;% we assume the burst contains only one image pair 274 NbSlice_j= nbfield_j;227 NbSlice_j=NbField_j; 275 228 nbfield_series=nbfield_i; 276 229 else 277 step=nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst 230 if Param.ActionInput.SlidingSequenceLength<NbField_j 231 step=1; 232 else 233 step=NbField_j;%case of bursts: the sliding background is shifted by the length of one burst 234 end 278 235 NbSlice_j=1; 279 nbfield_series=nbfield_i* nbfield_j;280 end 281 nbfield= nbfield_j*nbfield_i; %total number of fields236 nbfield_series=nbfield_i*NbField_j; 237 end 238 nbfield=NbField_j*nbfield_i; %total number of fields 282 239 [nbaver_ima,nbaver,step]=adjust_slidinglength(Param.ActionInput.SlidingSequenceLength,step); 283 240 if nbaver_ima > nbfield 284 disp lay('number of images in a slice smaller than the proposed number of images for the sliding average')241 disp('number of images in a slice smaller than the proposed number of images for the sliding average') 285 242 return 286 243 end 287 244 halfnbaver=floor(nbaver/2); % half width (in unit of bursts) of the sliding background 245 246 247 %% File relabeling documented by the xml file 248 CheckRelabel=isfield(Param,'FileSeries' ); 249 250 %% Input file info 251 if CheckRelabel 252 [RootFileOut,FileIndexString]=index2filename(Param.FileSeries,Param.IndexRange.first_i,j_indices(1),NbField_j); 253 FirstFileName=fullfile(RootPath,SubDir,[RootFileOut FileIndexString FileExt]); 254 else 255 FirstFileName=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,Param.IndexRange.first_i,[],j_indices(1));%get first file name 256 RootFileOut=RootFile; 257 end 258 [FileInfo,MovieObject]=get_file_info(FirstFileName); 259 FileType=FileInfo.FileType; 260 if isfield(FileInfo,'NumberOfFrames') && FileInfo.NumberOfFrames >1 261 if isempty(regexp(NomType,'1$', 'once'))% no file indexing 262 frame_index=i_indices;% the index i denotes the frame number in a movie, no index j 263 else 264 frame_index=j_indices;% the index j denotes the frame number in a movie 265 MovieObject=[]; %not a single video object 266 end 267 else 268 frame_index=ones(1,nbfield); 269 end 270 271 %% output file naming 272 FileExtOut='.png'; % write result as .png images for image inputsFileInfo.FileType='image' 273 if strcmp(FileInfo.FileType,'image') 274 NomTypeOut=NomType; 275 elseif NbField_j==1 276 NomTypeOut='_1'; 277 else 278 NomTypeOut='_1_1';% case of purely numerical indexing 279 end 280 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 281 OutputPath=fullfile(Param.OutputPath,Param.Experiment,Param.Device); 288 282 289 283 %% calculate absolute brightness rank … … 294 288 295 289 %% prealocate memory for the sliding background 296 try 297 Afirst=read_image(filecell{1,1},FileType{1},MovieObject{1},frame_index{1}(1)); 298 [npy,npx,nbcolor]=size(Afirst);% the argument nbcolor is important to get npx right for color images 299 if strcmp(class(Afirst),'uint8') % case of 8bit images 300 Ak=zeros(npy,npx,nbaver_ima,'uint8'); %prealocate memory 301 Asort=zeros(npy,npx,nbaver_ima,'uint8'); %prealocate memory 302 else 303 Ak=zeros(npy,npx,nbaver_ima,'uint16'); %prealocate memory 304 Asort=zeros(npy,npx,nbaver_ima,'uint16'); %prealocate memory 305 end 306 catch ME 307 msgbox_uvmat('ERROR',['sub_background/read_image/' ME.message]) 308 return 309 end 310 311 %selection of frame indices 290 Ak=zeros(FileInfo.Height,FileInfo.Width,nbaver_ima,['uint' num2str(FileInfo.BitDepth)]); %prealocate memory 291 292 %% selection of frame indices 312 293 if Param.ActionInput.CheckVolume 313 294 nbfield=floor(nbfield/NbSlice_j)*NbSlice_j;% truncate the total number of frames in case of incomplete series … … 326 307 %%%%%%% LOOP ON SLICES %%%%%%% 327 308 for j_slice=1:NbSlice 328 %% select the series of i indices to process 329 % indselect=j_slice:step*NbSlice_j:nbfield;% select file indices of the slice 330 % for ifield=1:step-1 331 % indselect=[indselect;indselect(end,:)+NbSlice]; 332 % end 333 309 334 310 %% read the first series of nbaver_ima images and sort by luminosity at each pixel 335 311 for ifield = 1:nbaver_ima 336 ifile=indselect(jslice,ifield); 337 filename=filecell{1,ifile}; 338 Aread=read_image(filename,FileType{1},MovieObject{1},frame_index{1}(ifile)); 312 ifile=indselect(j_slice,ifield); 313 %filename=filecell{1,ifile}; 314 if CheckRelabel 315 [RootFile,FileIndexString,FrameIndex]=index2filename(Param.FileSeries,i_indices(ifile),j_indices(ifile),NbField_j); 316 filename=fullfile(RootPath,SubDir,[RootFile FileIndexString FileExt]); 317 else 318 filename=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,i_indices(ifile),[],j_indices(ifile)); 319 FrameIndex=frame_index(ifile); 320 end 321 Aread=read_image(filename,FileType,MovieObject,FrameIndex); 339 322 if ndims(Aread)==3%color images 340 323 Aread=sum(double(Aread),3);% take the sum of color components … … 344 327 Asort=sort(Ak,3);%sort the luminosity of images at each point 345 328 B=Asort(:,:,rank);%background image 346 329 347 330 %% substract the first background image to the first images 348 disp lay( 'first background image will be substracted')331 disp( 'first background image will be substracted') 349 332 for ifield=1:step*(halfnbaver+1)% nbre of images treated by the first background image 350 333 Acor=double(Ak(:,:,ifield))-double(B);%substract background to the current image 351 334 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 352 ifile=indselect(jslice,ifield); 353 j1=1; 354 if ~isempty(j1_series{1}) 355 j1=j1_series{1}(ifile); 356 end 357 newname=fullfile_uvmat(OutputPath,OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 358 335 ifile=indselect(j_slice,ifield); 336 newname=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,FileExtOut,NomTypeOut,i_indices(ifile),[],j_indices(ifile)); 337 359 338 %write result file 360 339 if ~isequal(Param.ActionInput.SaturationValue,0) … … 362 341 imwrite(C,newname,'BitDepth',16); % save the new image 363 342 else 364 if ~isfield(FileInfo{1},'BitDepth') 365 FileInfo{1}.BitDepth=16; 366 end 367 if isequal(FileInfo{1}.BitDepth,16) 343 if isequal(FileInfo.BitDepth,16) 368 344 C=uint16(Acor); 369 345 imwrite(C,newname,'BitDepth',16); % save the new image … … 373 349 end 374 350 end 375 disp lay([newname ' written'])376 end 377 351 disp([newname ' written']) 352 end 353 378 354 %% repeat the operation on a sliding series of images 379 disp lay('sliding background image will be substracted')355 disp('sliding background image will be substracted') 380 356 if nbfield_series > nbaver_ima 381 357 for ifield = step*(halfnbaver+1):step:nbfield_series-step*(halfnbaver+1)% ifield +iburst=index of the current processed image 382 update_waitbar(WaitbarHandle,ifield/nbfield_series)358 % update_waitbar(WaitbarHandle,ifield/nbfield_series) 383 359 if ~isempty(RUNHandle)&&~strcmp(get(RUNHandle,'BusyAction'),'queue') 384 360 disp('program stopped by user') … … 386 362 end 387 363 if nbaver_ima>step 388 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step)364 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step) 389 365 end 390 366 %incorporate next burst in the current image series 391 367 for iburst=1:step 392 ifile=indselect(jslice,ifield+iburst+step*halfnbaver); 393 j1=1; 394 if ~isempty(j1_series{1}) 395 j1=j1_series{1}(ifile); 368 ifile=indselect(j_slice,ifield+iburst+step*halfnbaver); 369 if CheckRelabel 370 [RootFile,FileIndexString,FrameIndex]=index2filename(Param.FileSeries,i_indices(ifile),j_indices(ifile),NbField_j); 371 filename=fullfile(RootPath,SubDir,[RootFile FileIndexString FileExt]); 372 else 373 filename=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,i_indices(ifile),[],j_indices(ifile)); 374 FrameIndex=frame_index(ifile); 396 375 end 397 398 filename=fullfile_uvmat(RootPath{1},SubDir{1},RootFile{1},FileExt{1},NomType{1},i1_series{1}(ifile),[],j1); 399 Aread=read_image(filename,FileType{1},MovieObject{1},frame_index{1}(ifile)); 376 Aread=read_image(filename,FileType,MovieObject,FrameIndex); 400 377 if ndims(Aread)==3%case of color images 401 378 Aread=sum(double(Aread),3);% take the sum of color components … … 409 386 Acor=double(Ak(:,:,step*halfnbaver+iburst))-double(B); %the current image has been already read ans stored as index step*halfnbaver+iburst in the current series 410 387 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 411 ifile=indselect(jslice,ifield+iburst); 412 if ~isempty(j1_series{1}) 413 j1=j1_series{1}(ifile); 414 end 415 newname=fullfile_uvmat(OutputPath,OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 388 ifile=indselect(j_slice,ifield+iburst); 389 newname=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,FileExtOut,NomTypeOut,i_indices(ifile),[],j_indices(ifile)); 416 390 %write result file 417 391 if ~isequal(Param.ActionInput.SaturationValue,0) … … 419 393 imwrite(C,newname,'BitDepth',16); % save the new image 420 394 else 421 if isequal(FileInfo {1}.BitDepth,16)395 if isequal(FileInfo.BitDepth,16) 422 396 C=uint16(Acor); 423 397 imwrite(C,newname,'BitDepth',16); % save the new image … … 427 401 end 428 402 end 429 disp lay([newname ' written'])430 end 431 end 432 end 433 403 disp([newname ' written']) 404 end 405 end 406 end 407 434 408 %% substract the background from the last images 435 disp lay('last background image will be substracted')409 disp('last background image will be substracted') 436 410 for ifield=nbfield_series-step*halfnbaver+1:nbfield_series 437 411 Acor=double(Ak(:,:,ifield-nbfield_series+step*(2*halfnbaver+1)))-double(B); 438 412 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 439 ifile=indselect(jslice,ifield); 440 if ~isempty(j1_series{1}) 441 j1=j1_series{1}(ifile); 442 end 443 newname=fullfile_uvmat(OutputPath,OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 413 ifile=indselect(j_slice,ifield); 414 newname=fullfile_uvmat(OutputPath,OutputDir,RootFileOut,FileExtOut,NomTypeOut,i_indices(ifile),[],j_indices(ifile)); 444 415 %write result file 445 416 if ~isequal(Param.ActionInput.SaturationValue,0) … … 447 418 imwrite(C,newname,'BitDepth',16); % save the new image 448 419 else 449 if isequal(FileInfo {1}.BitDepth,16)420 if isequal(FileInfo.BitDepth,16) 450 421 C=uint16(Acor); 451 422 imwrite(C,newname,'BitDepth',16); % save the new image … … 455 426 end 456 427 end 457 disp lay([newname ' written'])428 disp([newname ' written']) 458 429 end 459 430 end -
trunk/src/uvmat.m
r1176 r1178 221 221 %% EXPORT menu 222 222 export_menu={'as field in workspace';'in new figure';'on existing axis';'make movie';'more...'}; 223 export_path=fullfile(path_uvmat,'export_fct');223 %export_path=fullfile(path_uvmat,'export_fct'); 224 224 225 225 %% load the list of previously browsed files in menus Open, Open_1 and TransformName … … 625 625 hveccolor=axes('Position',[0.93 0.1 0.02 0.5]); 626 626 ima=permute(get(handles.VecColBar,'CData'),[2 1 3]); 627 ymin=str2 num(get(handles.num_MinVec,'String'));628 ymax=str2 num(get(handles.num_MaxVec,'String'));627 ymin=str2double(get(handles.num_MinVec,'String')); 628 ymax=str2double(get(handles.num_MaxVec,'String')); 629 629 set(hveccolor,'YLim',[ymin ymax]) 630 630 imagesc([0 1],[ymin ymax],ima) … … 862 862 huvmat=findobj(allchild(0),'Tag','uvmat'); 863 863 hhuvmat=guidata(huvmat); 864 increment=str2 num(get(hhuvmat.num_IndexIncrement,'String')); %get the field increment from uvmat864 increment=str2double(get(hhuvmat.num_IndexIncrement,'String')); %get the field increment from uvmat 865 865 set(hhuvmat.STOP,'Visible','on') 866 866 set(hhuvmat.speed,'Visible','on') … … 1409 1409 hset_slice=get(hObject, 'parent'); 1410 1410 hZ=findobj(hset_slice,'Tag','num_Z_1'); 1411 Z_plane=str2 num(get(hZ,'String'));% set of Z positions explicitly entered as a Matlab vector1411 Z_plane=str2double(get(hZ,'String'));% set of Z positions explicitly entered as a Matlab vector 1412 1412 SliceData=read_GUI(hset_slice); 1413 1413 Slice.NbSlice=SliceData.NbSlice; … … 2066 2066 end 2067 2067 2068 % %------------------------------------------------------------------------2069 % % -- open the GUI civ.fig for PIV2070 % function MenuCIVx_Callback(hObject, eventdata, handles)2071 % %------------------------------------------------------------------------2072 % [RootPath,SubDir,RootFile,FileIndex,FileExt]=read_file_boxes(handles);2073 % FileName=[fullfile(RootPath,SubDir,RootFile) FileIndex FileExt];2074 % civ(FileName);% interface de civ(not in the uvmat file)2075 2076 2068 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2077 2069 % MenuHelp Callback … … 2083 2075 2084 2076 2085 2086 2087 2088 2089 2090 2091 2092 2093 2077 %------------------------------------------------------------------------ 2094 2078 % --- Called by action in FileIndex edit box … … 2096 2080 %------------------------------------------------------------------------ 2097 2081 [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(get(handles.FileIndex,'String')); 2082 UvData=get(handles.uvmat,'UserData'); 2083 check_index=false; 2084 if isfield(UvData,'XmlData')&& ~isempty(UvData.XmlData) 2085 if isfield(UvData.XmlData{1},'FileSeries')% case of frame indexing documented by the xml file (PCO) 2086 if strcmp(UvData.XmlData{1}.FileSeries.Convention,'PCO') 2087 i1_mod=i1*UvData.XmlData{1}.FileSeries.NbFramePerFile+1; 2088 if isfield(UvData.XmlData{1},'Time') 2089 [NbField,NbField_j]=size(UvData.XmlData{1}.Time); 2090 j1=mod(i1_mod,NbField_j-1)+1; 2091 i1_mod=floor(i1_mod/(NbField_j -1))+1; 2092 end 2093 set(handles.i1,'String',num2str(i1_mod));%update the counters 2094 set(handles.j1,'String',num2str(j1));%update the counters 2095 check_index=true; 2096 end 2097 end 2098 end 2099 if ~check_index 2098 2100 set(handles.i1,'String',num2str(i1));%update the counters 2099 2101 set(handles.i2,'String',num2str(i2)); 2100 2102 set(handles.j1,'String',num2str(j1)); 2101 2103 set(handles.j2,'String',num2str(j2)); 2102 2104 end 2103 2105 2104 2106 %------------------------------------------------------------------------ … … 2106 2108 function NomType_Callback(hObject, eventdata, handles) 2107 2109 %------------------------------------------------------------------------ 2108 i1=str2 num(get(handles.i1,'String'));2109 i2=str2 num(get(handles.i2,'String'));2110 j1=str2 num(get(handles.j1,'String'));2111 j2=str2 num(get(handles.j2,'String'));2110 i1=str2double(get(handles.i1,'String')); 2111 i2=str2double(get(handles.i2,'String')); 2112 j1=str2double(get(handles.j1,'String')); 2113 j2=str2double(get(handles.j2,'String')); 2112 2114 NomType=get(hObject,'String'); 2113 2115 if strcmp(NomType,'level') 2114 FileIndex=str2 num(get(handles.i1,'String'));2116 FileIndex=str2double(get(handles.i1,'String')); 2115 2117 else 2116 2118 FileIndex=fullfile_uvmat('','','','',get(handles.NomType,'String'),i1,i2,j1,j2); … … 2124 2126 function NomType_1_Callback(hObject, eventdata, handles) 2125 2127 %------------------------------------------------------------------------ 2126 i1=str2 num(get(handles.i1,'String'));2127 i2=str2 num(get(handles.i2,'String'));2128 j1=str2 num(get(handles.j1,'String'));2129 j2=str2 num(get(handles.j2,'String'));2128 i1=str2double(get(handles.i1,'String')); 2129 i2=str2double(get(handles.i2,'String')); 2130 j1=str2double(get(handles.j1,'String')); 2131 j2=str2double(get(handles.j2,'String')); 2130 2132 NomType=get(hObject,'String'); 2131 2133 if strcmp(NomType,'level') 2132 FileIndex=str2 num(get(handles.i1,'String'));2134 FileIndex=str2double(get(handles.i1,'String')); 2133 2135 else 2134 2136 FileIndex=fullfile_uvmat('','','','',get(handles.NomType_1,'String'),i1,i2,j1,j2); … … 2148 2150 [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles); 2149 2151 % detect the file type, get the movie object if relevant, and look for the corresponding file series: 2150 [RootPath,SubDir,RootFile,i1_series,i2_series,j1_series,j2_series,tild,FileInfo,MovieObject]=find_file_series(fullfile(RootPath,SubDir),[RootFile FileIndices FileExt]);2152 %[RootPath,SubDir,RootFile,i1_series,i2_series,j1_series,j2_series,tild,FileInfo,MovieObject]=find_file_series(fullfile(RootPath,SubDir),[RootFile FileIndices FileExt]); 2151 2153 errormsg=''; 2152 2154 if isempty(RootFile) … … 2165 2167 else 2166 2168 % initiate the input file series and refresh the current field view: 2167 errormsg=update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,MovieObject,1); 2169 [FileInfo,VideoObject]=get_file_info(fullfile(RootPath,SubDir,[RootFile FileIndices FileExt])); 2170 errormsg=update_rootinfo(handles,RootPath,SubDir,[RootFile FileIndices FileExt],FileInfo,VideoObject,1); 2168 2171 end 2169 2172 … … 2188 2191 else 2189 2192 % initiate the input file series and refresh the current field view: 2190 errormsg=update_rootinfo(handles, i1_series,i2_series,j1_series,j2_series,FileInfo,MovieObject,2);2193 errormsg=update_rootinfo(handles,RootPath,SubDir,FileName,FileInfo,MovieObject,2); 2191 2194 end 2192 2195 end … … 2200 2203 function errormsg=display_file_name(handles,fileinput,input_line) 2201 2204 %------------------------------------------------------------------------ 2202 %% look for the input file existence 2205 %% look for the input file existence and properties in the structure FileInfo 2203 2206 errormsg='';%default 2204 2207 if isempty(regexp(fileinput,'^http')) && ~exist(fileinput,'file') … … 2206 2209 msgbox_uvmat('ERROR',errormsg) 2207 2210 return 2211 end 2212 [FileInfo,MovieObject]=get_file_info(fileinput); 2213 FieldType=FileInfo.FieldType; 2214 2215 %% case of isolated input files without series 2216 switch FieldType 2217 case '' 2218 msgbox_uvmat('ERROR','invalid input file type') 2219 return 2220 case 'txt' 2221 edit(fileinput) 2222 return 2223 case 'figure' %display matlab figure 2224 hfig=open(fileinput); 2225 set(hfig,'WindowButtonMotionFcn','mouse_motion')%set mouse action functio 2226 set(hfig,'WindowButtonUpFcn','mouse_up')%set mouse click action function 2227 set(hfig,'WindowButtonUpFcn','mouse_down')%set mouse click action function 2228 return 2229 case 'xml' % edit xml files 2230 t=xmltree(fileinput); 2231 % the xml file marks a project or project link, open datatree_browser 2232 if strcmp(get(t,1,'name'),'Project')&& exist(regexprep(fileinput,'.xml$',''),'dir') 2233 datatree_browser(fileinput) 2234 else % other xml file, open the xml editor 2235 editxml(fileinput); 2236 end 2237 return 2238 case 'xls'% Excel file opended by editxml 2239 editxml(fileinput); 2240 return 2208 2241 end 2209 2242 … … 2239 2272 drawnow 2240 2273 2274 [RootPath,SubDir,RootFile,i1,i2,j1,j2,~,NomType]=fileparts_uvmat(fileinput); 2275 [~,FileName,FileExt]=fileparts(fileinput); 2276 2277 2241 2278 %% detect root name, nomenclature and indices in the input file name: 2242 [FilePath,FileName,FileExt]=fileparts(fileinput);2279 %[FilePath,FileName,FileExt]=fileparts(fileinput); 2243 2280 % detect the file type, get the movie object if relevant, and look for the corresponding file series: 2244 2281 % the root name and indices may be corrected by including the first index i1 if a corresponding xml file exists 2245 [RootPath,SubDir,RootFile,i1_series,i2_series,j1_series,j2_series,NomType,FileInfo,MovieObject,i1,i2,j1,j2]=... 2246 find_file_series(FilePath,[FileName FileExt]); 2247 2248 %% open the file or fill the GUI uvmat according to the detected file type 2249 FieldType=FileInfo.FieldType; 2250 switch FieldType 2251 case '' 2252 msgbox_uvmat('ERROR','invalid input file type') 2253 return 2254 case 'txt' 2255 edit(fileinput) 2256 return 2257 case 'figure' %display matlab figure 2258 hfig=open(fileinput); 2259 set(hfig,'WindowButtonMotionFcn','mouse_motion')%set mouse action functio 2260 set(hfig,'WindowButtonUpFcn','mouse_up')%set mouse click action function 2261 set(hfig,'WindowButtonUpFcn','mouse_down')%set mouse click action function 2262 return 2263 case 'xml' % edit xml files 2264 t=xmltree(fileinput); 2265 % the xml file marks a project or project link, open datatree_browser 2266 if strcmp(get(t,1,'name'),'Project')&& exist(regexprep(fileinput,'.xml$',''),'dir') 2267 datatree_browser(fileinput) 2268 else % other xml file, open the xml editor 2269 editxml(fileinput); 2270 end 2271 return 2272 case 'xls'% Excel file opended by editxml 2273 editxml(fileinput); 2274 return 2275 otherwise 2276 set(handles_RootPath,'String',RootPath); 2277 set(handles_SubDir,'String',['/' SubDir]); 2278 set(handles_RootFile,'String',['/' RootFile]); %display the separator 2279 if isempty(regexp(RootPath,'^http://', 'once')) 2280 rootname=fullfile(RootPath,SubDir,RootFile); 2282 2283 set(handles_RootPath,'String',RootPath); 2284 set(handles_SubDir,'String',['/' SubDir]); 2285 set(handles_RootFile,'String',['/' RootFile]); %display the separator 2286 if isempty(regexp(RootPath,'^http://', 'once')) 2287 rootname=fullfile(RootPath,SubDir,RootFile); 2288 else 2289 rootname=[RootPath '/' SubDir '/' RootFile]; 2290 end 2291 indices=fileinput(length(rootname)+1:end); 2292 indices(end-length(FileExt)+1:end)=[]; %remove extension 2293 set(handles_FileIndex,'String',indices); 2294 set(handles_NomType,'String',NomType); 2295 set(handles_FileExt,'String',FileExt); 2296 if input_line==1 2297 % fill file index counters if the first file series is opened 2298 set(handles.i1,'String',num2str(i1)); 2299 set(handles.i2,'String',num2str(i2)); 2300 set(handles.j1,'String',num2stra(j1,NomType)); 2301 set(handles.j2,'String',num2stra(j2,NomType)); 2302 if isfield(FileInfo,'MaskFile') 2303 if exist(FileInfo.MaskFile) 2304 set(handles.CheckMask,'Value',1) 2281 2305 else 2282 rootname=[RootPath '/' SubDir '/' RootFile]; 2283 end 2284 indices=fileinput(length(rootname)+1:end); 2285 indices(end-length(FileExt)+1:end)=[]; %remove extension 2286 set(handles_FileIndex,'String',indices); 2287 set(handles_NomType,'String',NomType); 2288 set(handles_FileExt,'String',FileExt); 2289 if input_line==1 2290 % fill file index counters if the first file series is opened 2291 set(handles.i1,'String',num2str(i1)); 2292 set(handles.i2,'String',num2str(i2)); 2293 set(handles.j1,'String',num2stra(j1,NomType)); 2294 set(handles.j2,'String',num2stra(j2,NomType)); 2295 if isfield(FileInfo,'MaskFile') 2296 if exist(FileInfo.MaskFile) 2297 set(handles.CheckMask,'Value',1) 2298 else 2299 set(handles.CheckMask,'Value',0) 2300 end 2301 Mask.File=FileInfo.MaskFile; 2302 if isfield(FileInfo,'MaskNbSlice') 2303 Mask.NbSlice=FileInfo.MaskNbSlice; 2304 elseif isfield(FileInfo,'VolumeScan') 2305 Mask.VolumeScan=FileInfo.VolumeScan; 2306 end 2307 set(handles.CheckMask,'UserData', Mask) 2308 else 2309 set(handles.CheckMask,'Value',0) 2310 CheckMask_Callback(handles.CheckMask, [], handles) 2311 end 2312 else %read the current field index to synchronise with the first series 2313 i1_s=str2num(get(handles.i1,'String')); 2314 i2_0=str2num(get(handles.i2,'String')); 2315 if ~isempty(i2_0) 2316 i2_s=i2_0; 2317 else 2318 i2_s=i2; 2319 end 2320 j1_0=stra2num(get(handles.j1,'String')); 2321 if ~isempty(j1_0) 2322 j1_s=j1_0; 2323 else 2324 j1_s=j1; 2325 end 2326 j2_0=stra2num(get(handles.j2,'String')); 2327 if ~isempty(j2_0) 2328 j2_s=j2_0; 2329 else 2330 j2_s=j2; 2331 end 2332 end 2333 2334 % synchronise indices of the second input file if it exists 2335 if get(handles.SubField,'Value')==1% if the subfield button is activated, update the field numbers 2336 Input=read_GUI(handles.InputFile); 2337 if ~isfield(Input,'RootPath_1')||strcmp(Input.RootPath_1,'"') 2338 Input.RootPath_1=Input.RootPath; 2339 end 2340 if ~isfield(Input,'SubDir_1')||strcmp(Input.SubDir_1,'"') 2341 Input.SubDir_1=Input.SubDir; 2342 end 2343 if ~isfield(Input,'RootFile_1')||strcmp(Input.RootFile_1,'"') 2344 Input.RootFile_1=Input.RootFile; 2345 end 2346 if ~isfield(Input,'FileExt_1')||strcmp(Input.FileExt_1,'"') 2347 Input.FileExt_1=Input.FileExt; 2348 end 2349 if ~isfield(Input,'NomType_1')||strcmp(Input.NomType_1,'"') 2350 Input.NomType_1=Input.NomType; 2351 end 2352 %updtate the indices of the second field series to correspond to the newly opened one 2353 FileName_1=fullfile_uvmat(Input.RootPath_1,Input.SubDir_1,Input.RootFile_1,Input.FileExt_1,Input.NomType_1,i1_s,i2_s,j1_s,j2_s); 2354 if exist(FileName_1,'file') 2355 FileIndex_1=fullfile_uvmat('','','','',Input.NomType_1,i1_s,i2_s,j1_s,j2_s); 2356 else 2357 FileIndex_1=fullfile_uvmat('','','','',Input.NomType_1,i1,i2,j1,j2); 2358 % msgbox_uvmat('WARNING','unable to synchronise the indices of the two series') 2359 end 2360 set(handles.FileIndex_1,'String',FileIndex_1) 2361 end 2362 2363 %enable other menus 2364 set(handles.MenuExport,'Enable','on') 2365 set(handles.MenuExportFigure,'Enable','on') 2366 set(handles.MenuExportMovie,'Enable','on') 2367 set(handles.MenuTools,'Enable','on') 2368 2369 % initiate input file series and inputfilerefresh the current field view: 2370 update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,MovieObject,input_line); 2371 end 2306 set(handles.CheckMask,'Value',0) 2307 end 2308 Mask.File=FileInfo.MaskFile; 2309 if isfield(FileInfo,'MaskNbSlice') 2310 Mask.NbSlice=FileInfo.MaskNbSlice; 2311 elseif isfield(FileInfo,'VolumeScan') 2312 Mask.VolumeScan=FileInfo.VolumeScan; 2313 end 2314 set(handles.CheckMask,'UserData', Mask) 2315 else 2316 set(handles.CheckMask,'Value',0) 2317 CheckMask_Callback(handles.CheckMask, [], handles) 2318 end 2319 else %read the current field index to synchronise with the first series 2320 i1_s=str2double(get(handles.i1,'String')); 2321 i2_0=str2double(get(handles.i2,'String')); 2322 if ~isempty(i2_0) 2323 i2_s=i2_0; 2324 else 2325 i2_s=i2; 2326 end 2327 j1_0=stra2num(get(handles.j1,'String')); 2328 if ~isempty(j1_0) 2329 j1_s=j1_0; 2330 else 2331 j1_s=j1; 2332 end 2333 j2_0=stra2num(get(handles.j2,'String')); 2334 if ~isempty(j2_0) 2335 j2_s=j2_0; 2336 else 2337 j2_s=j2; 2338 end 2339 end 2340 2341 % synchronise indices of the second input file if it exists 2342 if get(handles.SubField,'Value')==1% if the subfield button is activated, update the field numbers 2343 Input=read_GUI(handles.InputFile); 2344 if ~isfield(Input,'RootPath_1')||strcmp(Input.RootPath_1,'"') 2345 Input.RootPath_1=Input.RootPath; 2346 end 2347 if ~isfield(Input,'SubDir_1')||strcmp(Input.SubDir_1,'"') 2348 Input.SubDir_1=Input.SubDir; 2349 end 2350 if ~isfield(Input,'RootFile_1')||strcmp(Input.RootFile_1,'"') 2351 Input.RootFile_1=Input.RootFile; 2352 end 2353 if ~isfield(Input,'FileExt_1')||strcmp(Input.FileExt_1,'"') 2354 Input.FileExt_1=Input.FileExt; 2355 end 2356 if ~isfield(Input,'NomType_1')||strcmp(Input.NomType_1,'"') 2357 Input.NomType_1=Input.NomType; 2358 end 2359 %updtate the indices of the second field series to correspond to the newly opened one 2360 FileName_1=fullfile_uvmat(Input.RootPath_1,Input.SubDir_1,Input.RootFile_1,Input.FileExt_1,Input.NomType_1,i1_s,i2_s,j1_s,j2_s); 2361 if exist(FileName_1,'file') 2362 FileIndex_1=fullfile_uvmat('','','','',Input.NomType_1,i1_s,i2_s,j1_s,j2_s); 2363 else 2364 FileIndex_1=fullfile_uvmat('','','','',Input.NomType_1,i1,i2,j1,j2); 2365 % msgbox_uvmat('WARNING','unable to synchronise the indices of the two series') 2366 end 2367 set(handles.FileIndex_1,'String',FileIndex_1) 2368 end 2369 2370 %enable other menus 2371 set(handles.MenuExport,'Enable','on') 2372 set(handles.MenuExportFigure,'Enable','on') 2373 set(handles.MenuExportMovie,'Enable','on') 2374 set(handles.MenuTools,'Enable','on') 2375 2376 % initiate input file series and inputfilerefresh the current field view: 2377 update_rootinfo(handles,RootPath,SubDir,[FileName FileExt],FileInfo, MovieObject,input_line); 2378 2372 2379 2373 2380 %% update list of recent files in the menubar and save it for future opening … … 2396 2403 % --- Update information about a new field series (indices to scan, timing, 2397 2404 % calibration from an xml file, then inputfilerefresh current plots 2398 function errormsg=update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,VideoObject,input_line) 2405 %function errormsg=update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,VideoObject,input_line) 2406 function errormsg=update_rootinfo(handles,RootPath,SubDir,FileName,FileInfo,VideoObject,input_line) 2399 2407 %------------------------------------------------------------------------ 2400 2408 errormsg=''; %default error msg … … 2410 2418 end 2411 2419 set(handles.FixVelType,'Value',0); %desactivate fixed veltype by default 2420 2421 %% look for the xml file and read it 2422 XmlFileName=find_imadoc(RootPath,SubDir); 2423 [~,XmlName]=fileparts(XmlFileName); 2424 warntext='';%default warning message 2425 NbSlice=1;%default 2426 %CheckImaDoc=false; 2427 TimeUnit='';%default 2428 TimeName='';%default 2429 CheckIndexing=false;%default 2430 if isempty(XmlFileName) 2431 set(handles.view_xml,'Visible','off') 2432 else 2433 set(handles.view_xml,'Visible','on') 2434 set(handles.view_xml,'BackgroundColor',[1 1 0])% paint to yellow color to indicate reading of the xml file 2435 set(handles.view_xml,'String','view xml') 2436 drawnow 2437 [XmlData,warntext]=imadoc2struct(XmlFileName); 2438 if ~isempty(warntext) 2439 msgbox_uvmat('WARNING',warntext) 2440 end 2441 if ~isempty(XmlData) 2442 %CheckImaDoc=true; 2443 if isfield(XmlData,'TimeUnit')&& ~isempty(XmlData.TimeUnit) 2444 TimeUnit=XmlData.TimeUnit; 2445 end 2446 if isfield(XmlData,'Time')&& ~isempty(XmlData.Time) 2447 TimeName='xml';% 2448 if XmlData.Time(1,:)==XmlData.Time(2,:)% case starting with index 1 2449 sizDti=size(XmlData.Time,1)-1;%size of the time vector explicitly defined in the xml file 2450 ind_start=1; 2451 else 2452 sizDti=size(XmlData.Time,1);% case starting with index 0 2453 ind_start=0; 2454 end 2455 if isfield(XmlData,'FileSeries') 2456 if strcmp(XmlName,SubDir)% frame indexing documented from the xml file (case PCO) 2457 CheckIndexing=true; 2458 else 2459 XmlData=rmfield(XmlData,'FileSeries');%desactivate file indexing option for derived file series 2460 end 2461 end 2462 end 2463 end 2464 set(handles.view_xml,'BackgroundColor',[1 1 1])% paint back to white 2465 set(handles.view_xml,'String','view xml')% indicate that a xml file has been detected 2466 drawnow 2467 if isfield(XmlData,'Slice') && isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1) 2468 set (handles.slices,'String','volume') 2469 end 2470 end 2471 2472 %% get the file series 2473 MovieObject=[]; 2474 if strcmp(TimeName,'xml') && strcmp(XmlName,SubDir)% get the image series info from the xml file 2475 [nbfield,nbfield_j]=size(XmlData.Time); 2476 nbfield=nbfield-1; %remove the possible index 0 2477 nbfield_j=nbfield_j-1; %remove the possible index 0 2478 i1_series=zeros(nbfield,nbfield_j,1); 2479 i1_series(:,:,1)=(1:nbfield)'*ones(1,nbfield_j); 2480 i2_series=i1_series; 2481 if nbfield_j==1 2482 j1_series=[]; 2483 else 2484 j1_series(:,:,1)=ones(nbfield,1)*(1:nbfield_j); 2485 end 2486 j2_series=j1_series; 2487 else % scan the input folder to get the list of existing files 2488 [RootPath,SubDir,RootFile,i1_series,i2_series,j1_series,j2_series,NomType,FileInfo,MovieObject,i1,i2,j1,j2]=... 2489 find_file_series(fullfile(RootPath,SubDir),FileName); 2490 nbfield=max(max(max(i2_series)));% total number of fields (i index) 2491 if isempty(nbfield) 2492 nbfield=max(max(max(i1_series))); 2493 end 2494 nbfield_j=max(max(max(j2_series)));% number of fields along j index 2495 if isempty(nbfield_j) 2496 nbfield_j=max(max(max(j1_series))); 2497 end 2498 if input_line==1 2499 set(handles.NomType,'String',NomType) 2500 else 2501 set(handles.NomType_1,'String',NomType) 2502 end 2503 end 2504 if CheckIndexing 2505 i1=str2double(get(handles.FileIndex,'String')); 2506 if isnan(i1) 2507 i1=1; 2508 else 2509 i1=(i1-XmlData.FileSeries.FirstFileIndex)*XmlData.FileSeries.NbFramePerFile+1;%frame index deduced from input file index 2510 end 2511 if strcmp(TimeName,'xml')% indices i and j 2512 j1=mod(i1-1,nbfield_j)+1; 2513 i1=floor((i1-1)/nbfield_j)+1; 2514 set(handles.j1,'String',num2str(j1)) 2515 end 2516 set(handles.i1,'String',num2str(i1)) 2517 end 2518 2412 2519 2413 2520 %% record info in UserData of the figure uvmat … … 2417 2524 %UvData.FileType{input_line}=FileInfo.FileType; 2418 2525 UvData.FileInfo{input_line}=FileInfo; 2419 UvData.MovieObject{input_line}= VideoObject;2526 UvData.MovieObject{input_line}=MovieObject; 2420 2527 UvData.i1_series{input_line}=i1_series; 2421 2528 UvData.i2_series{input_line}=i2_series; 2422 2529 UvData.j1_series{input_line}=j1_series; 2423 2530 UvData.j2_series{input_line}=j2_series; 2424 nbfield=max(max(max(i2_series)));% total number of fields (i index) 2425 if isempty(nbfield) 2426 nbfield=max(max(max(i1_series))); 2427 end 2428 nbfield_j=max(max(max(j2_series)));% number of fields along j index 2429 if isempty(nbfield_j) 2430 nbfield_j=max(max(max(j1_series))); 2431 end 2531 2432 2532 2433 2533 %% read timing and total frame number from the current file (e.g. movie files) 2434 TimeUnit='';%default2435 TimeName='';%default2436 XmlData.Time=[];%default2437 2534 ColorType='falsecolor'; %default 2438 2535 if isfield(FileInfo,'FrameRate')% frame rate given in the file (case of video data) … … 2468 2565 else 2469 2566 [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes_1(handles); 2470 end2471 XmlFileName=find_imadoc(RootPath,SubDir);2472 [tild,tild,DocExt]=fileparts(XmlFileName);2473 warntext='';%default warning message2474 NbSlice=1;%default2475 ImaDoc_str='';2476 if ~isempty(XmlFileName)2477 set(handles.view_xml,'Visible','on')2478 set(handles.view_xml,'BackgroundColor',[1 1 0])% paint to yellow color to indicate reading of the xml file2479 set(handles.view_xml,'String','view .xml')2480 drawnow2481 [XmlDataRead,warntext]=imadoc2struct(XmlFileName);2482 if ~isempty(warntext)2483 msgbox_uvmat('WARNING',warntext)2484 end2485 if ~isempty(XmlDataRead)2486 ImaDoc_str=['view ' DocExt]; % DocExt= '.xml' or .civ (obsolete case)2487 if isfield(XmlDataRead,'TimeUnit')&& ~isempty(XmlDataRead.TimeUnit)2488 TimeUnit=XmlDataRead.TimeUnit;2489 end2490 if isfield(XmlDataRead,'Time')&& ~isempty(XmlDataRead.Time)2491 XmlData.Time=XmlDataRead.Time;2492 if XmlDataRead.Time(1,:)==XmlDataRead.Time(2,:)% case starting with index 12493 sizDti=size(XmlDataRead.Time,1)-1;%size of the time vector explicitly defined in the xml file2494 ind_start=1;2495 else2496 sizDti=size(XmlDataRead.Time,1);% case starting with index 02497 ind_start=0;2498 end2499 end2500 set(handles.view_xml,'BackgroundColor',[1 1 1])% paint back to white2501 drawnow2502 if isfield(XmlDataRead, 'GeometryCalib') && ~isempty(XmlDataRead.GeometryCalib)2503 XmlData.GeometryCalib=XmlDataRead.GeometryCalib;2504 end2505 XmlData.Slice=XmlData.GeometryCalib;%default2506 if isfield(XmlDataRead, 'Slice') && ~isempty(XmlDataRead.Slice)2507 XmlData.Slice=XmlDataRead.Slice;2508 end2509 if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1)2510 set (handles.slices,'String','volume')2511 end2512 if isfield(XmlDataRead, 'LIFCalib')2513 XmlData.LIFCalib=XmlDataRead.LIFCalib;2514 end2515 end2516 end2517 if isempty(ImaDoc_str)2518 set(handles.view_xml,'Visible','off') % no .xml (or .civ) file detected2519 else2520 set(handles.view_xml,'String',ImaDoc_str)% indicate that a xml file has been detected2521 2567 end 2522 2568 … … 2540 2586 2541 2587 %% store last index in handles.MaxIndex_i and .MaxIndex_j 2542 if isfield(XmlData,'Time')&& ~isempty(XmlData.Time)2543 %transform .Time to a column vector if it is a line vector the nomenclature uses a single index2544 if isequal(size(XmlData.Time,1),1)2545 XmlData.Time=(XmlData.Time)';2546 end2547 end2548 2588 last_i_cell=get(handles.MaxIndex_i,'String'); 2549 2589 if isempty(nbfield) … … 2794 2834 2795 2835 NomType=get(handles.NomType,'String'); 2836 UvData=get(handles.uvmat,'UserData'); 2796 2837 2797 2838 if strcmp(NomType,'level') 2798 indices=get(handles.i1,'String'); 2799 else 2800 indices=get(handles.FileIndex,'String'); 2801 [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(indices);% the indices for the second series taken from FileIndex 2802 switch index_rank 2803 case 1 2804 indices=fullfile_uvmat('','','','',NomType,stra2num(get(handles.i1,'String')),i2,j1,j2); 2805 case 2 2806 indices=fullfile_uvmat('','','','',NomType,i1,stra2num(get(handles.i2,'String')),j1,j2); 2807 case 3 2808 indices=fullfile_uvmat('','','','',NomType,i1,i2,stra2num(get(handles.j1,'String')),j2); 2809 case 4 2810 indices=fullfile_uvmat('','','','',NomType,i1,i2,j1,stra2num(get(handles.j2,'String'))); 2811 end 2812 end 2813 set(handles.FileIndex,'String',indices) 2839 index_string=get(handles.i1,'String'); 2840 else 2841 index_string=get(handles.FileIndex,'String'); 2842 if isfield(UvData,'XmlData')&& isfield(UvData.XmlData{1},'FileSeries') 2843 i1=str2double(get(handles.i1,'String')); 2844 j1=str2double(get(handles.j1,'String')); 2845 NbField_j_cell=get(handles.MaxIndex_j,'String'); 2846 NbField_j=str2double(NbField_j_cell{1}); 2847 [RootFile,index_string,FrameIndex]=index2filename(UvData.XmlData{1}.FileSeries,i1,j1,NbField_j); 2848 set(handles.RootFile,'String',RootFile) 2849 else 2850 [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(index_string);% the index_string for the second series taken from FileIndex 2851 switch index_rank 2852 case 1 2853 index_string=fullfile_uvmat('','','','',NomType,stra2num(get(handles.i1,'String')),i2,j1,j2); 2854 case 2 2855 index_string=fullfile_uvmat('','','','',NomType,i1,stra2num(get(handles.i2,'String')),j1,j2); 2856 case 3 2857 index_string=fullfile_uvmat('','','','',NomType,i1,i2,stra2num(get(handles.j1,'String')),j2); 2858 case 4 2859 index_string=fullfile_uvmat('','','','',NomType,i1,i2,j1,stra2num(get(handles.j2,'String'))); 2860 end 2861 end 2862 end 2863 set(handles.FileIndex,'String',index_string) 2814 2864 2815 2865 % update the second index if relevant 2816 2866 if strcmp(get(handles.FileIndex_1,'Visible'),'on') 2817 2867 NomType_1=get(handles.NomType_1,'String'); 2818 ind ices_1=get(handles.FileIndex_1,'String');2819 [tild,tild,tild,i1_1,i2_1,j1_1,j2_1]=fileparts_uvmat(ind ices_1);% the indicesfor the second series taken from FileIndex_12868 index_string_1=get(handles.FileIndex_1,'String'); 2869 [tild,tild,tild,i1_1,i2_1,j1_1,j2_1]=fileparts_uvmat(index_string_1);% the index_string for the second series taken from FileIndex_1 2820 2870 switch index_rank 2821 2871 case 1 2822 ind ices_1=fullfile_uvmat('','','','',NomType_1,stra2num(get(handles.i1,'String')),i2_1,j1_1,j2_1);2872 index_string_1=fullfile_uvmat('','','','',NomType_1,stra2num(get(handles.i1,'String')),i2_1,j1_1,j2_1); 2823 2873 case 2 2824 ind ices_1=fullfile_uvmat('','','','',NomType_1,i1_1,stra2num(get(handles.i2,'String')),j1_1,j2_1);2874 index_string_1=fullfile_uvmat('','','','',NomType_1,i1_1,stra2num(get(handles.i2,'String')),j1_1,j2_1); 2825 2875 case 3 2826 ind ices_1=fullfile_uvmat('','','','',NomType_1,i1_1,i2_1,stra2num(get(handles.j1,'String')),j2_1);2876 index_string_1=fullfile_uvmat('','','','',NomType_1,i1_1,i2_1,stra2num(get(handles.j1,'String')),j2_1); 2827 2877 case 4 2828 ind ices_1=fullfile_uvmat('','','','',NomType_1,i1_1,i2_1,j1_1,stra2num(get(handles.j2,'String')));2829 end 2830 set(handles.FileIndex_1,'String',ind ices_1)2878 index_string_1=fullfile_uvmat('','','','',NomType_1,i1_1,i2_1,j1_1,stra2num(get(handles.j2,'String'))); 2879 end 2880 set(handles.FileIndex_1,'String',index_string_1) 2831 2881 set(handles.FileIndex_1,'BackgroundColor',[0.7 0.7 0.7])% mark the edit box in grey, then RUN0 will mark it in white for confirmation 2832 2882 end … … 2884 2934 end 2885 2935 option=get(handles.view_xml,'String'); 2886 if isequal(option,'view .xml')2936 if isequal(option,'view xml') 2887 2937 FileXml=fullfile(RootPath,[SubDir '.xml']); 2888 2938 if ~exist(FileXml,'file')% case of civ files , removes the extension for subdir … … 2982 3032 if isfield(MaskInfo,'NbSlice')&& ~isempty(MaskInfo.NbSlice) 2983 3033 if isfield(MaskInfo,'VolumeScan') && MaskInfo.VolumeScan 2984 MaskIndex_i=str2 num(get(handles.j1,'String'));3034 MaskIndex_i=str2double(get(handles.j1,'String')); 2985 3035 else 2986 MaskIndex_i=mod(str2 num(get(handles.i1,'String'))-1,MaskInfo.NbSlice)+1;3036 MaskIndex_i=mod(str2double(get(handles.i1,'String'))-1,MaskInfo.NbSlice)+1; 2987 3037 end 2988 3038 MaskName=[MaskInfo.File '_' num2str(MaskIndex_i) '.png']; … … 3174 3224 %------------------------------------------------------------------------ 3175 3225 errormsg='';%default 3176 %% check for movie pair status3177 % movie_status=get(handles.movie_pair,'Value');3178 % if movie_status3179 % STOP_Callback(hObject, eventdata, handles)%interrupt movie pair if active3180 % end3181 3226 3182 3227 %% read the current input file name(s) and field indices … … 3186 3231 FileExt=InputFile.FileExt; 3187 3232 NomType=InputFile.NomType; 3188 [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(InputFile.FileIndex);% check back the indices used 3189 if isempty(i1)% no i index set by the input file name 3190 i1=str2double(get(handles.i1,'String'));%read the field indices (for movie, it is not given by the file name) 3191 elseif isempty(j1) && strcmp(get(handles.j1,'Visible'),'on') 3192 j1=str2double(get(handles.j1,'String'));%case of indexed movie 3193 end 3194 % if movie_status% we read the second index from the edit box 3195 % i2=str2num(get(handles.i2,'String'));%read the field indices (for movie, it is not given by the file name) 3196 % if strcmp(get(handles.j2,'Visible'),'on') 3197 % j2=str2num(get(handles.j2,'String'));% 3198 % end 3199 % end 3233 UvData=get(handles.uvmat,'UserData'); 3234 if isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'FileSeries')% case of indexing documented by the xml file 3235 i1=str2double(get(handles.i1,'String')); 3236 j1=str2double(get(handles.j1,'String'));%read the field indices (for movie, it is not given by the file name) 3237 i2=[];j2=[]; 3238 else 3239 [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(InputFile.FileIndex);% check back the indices used 3240 if isempty(i1)% no i index set by the input file name 3241 i1=str2double(get(handles.i1,'String'));%read the field indices (for movie, it is not given by the file name) 3242 elseif isempty(j1) && strcmp(get(handles.j1,'Visible'),'on') 3243 j1=str2double(get(handles.j1,'String'));%case of indexed movie 3244 end 3245 end 3200 3246 sub_value= get(handles.SubField,'Value'); 3201 3247 if sub_value % a second input file has been entered … … 3203 3249 [tild,tild,tild,i1_1,i2_1,j1_1,j2_1]=fileparts_uvmat(InputFile.FileIndex_1);% the indices for the second series taken from FileIndex_1 3204 3250 if isempty(i1_1) 3205 i1_1=str2 num(get(handles.i1,'String'));%read the field indices (for movie, it is not given by the file name)3251 i1_1=str2double(get(handles.i1,'String'));%read the field indices (for movie, it is not given by the file name) 3206 3252 elseif isempty(j1_1) && strcmp(get(handles.j1,'Visible'),'on') 3207 j1_1=str2 num(get(handles.j1,'String'));%case of indexed movie3253 j1_1=str2double(get(handles.j1,'String'));%case of indexed movie 3208 3254 end 3209 3255 else … … 3234 3280 end 3235 3281 end 3236 3282 3237 3283 % the pair i1-i2 or j1-j2 is free (check box CheckFixPair not selected): the list of existing indices recorded in UvData is used 3238 3284 else 3239 UvData=get(handles.uvmat,'UserData');3240 3285 ref_i=i1; 3241 3286 if ~isempty(i2) … … 3249 3294 end 3250 3295 end 3251 if isnumeric(increment) 3252 if get(handles.scan_i,'Value')==1% case of scanning along index i 3253 ref_i=ref_i+increment;% increment the current reference index i 3254 else % case of scanning along index j (burst numbers) 3255 ref_j=ref_j+increment;% increment the current reference index j if scan_j option is used 3256 end 3257 else % free increment 3258 if strcmp(increment,'+')% if runplus or movie is activated 3259 step=1; 3260 else 3261 step=-1; 3262 end 3263 if get(handles.scan_i,'Value')==1% case of scanning along index i 3296 3297 if strcmp(increment,'+')% if runplus or movie is activated 3298 step=1; 3299 else 3300 step=-1; 3301 end 3302 if get(handles.scan_i,'Value')==1% case of scanning along index i 3303 ref_i=ref_i+step; 3304 while ref_i>=0 && size(UvData.i1_series{1},3)>=ref_i+1 && UvData.i1_series{1}(1,ref_j+1,ref_i+1)==0 3264 3305 ref_i=ref_i+step; 3265 while ref_i>=0 && size(UvData.i1_series{1},3)>=ref_i+1 && UvData.i1_series{1}(1,ref_j+1,ref_i+1)==03266 ref_i=ref_i+step;3267 end3268 else % case of scanning along index j (burst numbers)3306 end 3307 else % case of scanning along index j (burst numbers) 3308 ref_j=ref_j+step; 3309 while ref_j>=0 && size(UvData.i1_series{1},2)>=ref_j+1 && UvData.i1_series{1}(1,ref_j+1,ref_i+1)==0 3269 3310 ref_j=ref_j+step; 3270 while ref_j>=0 && size(UvData.i1_series{1},2)>=ref_j+1 && UvData.i1_series{1}(1,ref_j+1,ref_i+1)==03271 ref_j=ref_j+step;3272 end3273 3311 end 3274 3312 end … … 3304 3342 j2=UvData.j2_series{1}(ref_indices(end)); 3305 3343 end 3306 3344 3307 3345 % case of a second file series 3308 3346 if sub_value … … 3340 3378 elseif ref_i_1+1>size(UvData.i1_series{2},3)&&~isempty(InputFile.NomType_1) 3341 3379 errormsg='maximum i index reached for the second series (reload the input file to update the index bound)'; 3342 %elseif ref_j_1+1>size(UvData.i1_series{2},2)&&~isempty(InputFile.NomType_1)3343 % errormsg='maximum j index reached for the second series(reload the input file to update the index bound)';3380 %elseif ref_j_1+1>size(UvData.i1_series{2},2)&&~isempty(InputFile.NomType_1) 3381 % errormsg='maximum j index reached for the second series(reload the input file to update the index bound)'; 3344 3382 end 3345 3383 if ~isempty(errormsg),return,end … … 3402 3440 if strcmp(NomType,'level') 3403 3441 indices=num2str(i1); 3442 elseif isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'FileSeries') 3443 NbField_j_cell=get(handles.MaxIndex_j,'String'); 3444 NbField_j=str2double(NbField_j_cell{1}); 3445 [RootFile,indices,FrameIndex]=index2filename(UvData.XmlData{1}.FileSeries,i1,j1,NbField_j); 3446 set(handles.RootFile,'String',RootFile) 3404 3447 else 3405 3448 indices=fullfile_uvmat('','','','',NomType,i1,i2,j1,j2); … … 3534 3577 3535 3578 %% determine the main input file information for action 3536 if isempty(regexp(FileName,'^http://', 'once')) &&~exist(FileName,'file')3537 errormsg=['input file ' FileName ' does not exist'];3538 return3539 end3579 % if isempty(regexp(FileName,'^http://', 'once')) &&~exist(FileName,'file') 3580 % errormsg=['input file ' FileName ' does not exist']; 3581 % return 3582 % end 3540 3583 NomType=get(handles.NomType,'String'); 3541 % NomType_1='';3542 % if strcmp(get(handles.NomType_1,'Visible'),'on')3543 % NomType_1=get(handles.NomType_1,'String');3544 % end3545 3584 %update the z position index 3546 3585 mode_slice=get(handles.slices,'String'); … … 3564 3603 for iobj=1:numel(UvData.ProjObject) 3565 3604 if isfield(UvData.ProjObject{iobj},'ProjMode')&& strcmp(UvData.ProjObject{iobj}.ProjMode,'interp_tps') 3566 check_proj_tps=1;% tps projection proposed 3605 check_proj_tps=1;% tps projection proposedUvData.XmlData 3567 3606 break 3568 3607 end … … 3598 3637 ParamIn=UvData.MovieObject{1}; 3599 3638 end 3639 end 3640 %% case of special file series (PCO) 3641 if isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'FileSeries') 3642 [RootName,~,Ext]=fileparts(FileName); 3643 NbField_j_cell=get(handles.MaxIndex_j,'String'); 3644 NbField_j=str2double(NbField_j_cell{1}); 3645 if num_j1>NbField_j 3646 errormsg=['index j exceeds upper bound ' num2str(NbField_j)]; 3647 return 3648 elseif num_j1<1 3649 errormsg='index j smaller that 1'; 3650 return 3651 end 3652 [FNameMulti,FileIndexString,frame_index]=index2filename(UvData.XmlData{1}.FileSeries,num_i1,num_j1,NbField_j); 3653 FileName=fullfile(RootName,[FNameMulti FileIndexString Ext]); 3600 3654 end 3601 3655 switch UvData.FileInfo{1}.FieldType … … 3885 3939 % TODO: look for time unit attribute 3886 3940 elseif ~isempty(regexp(TimeName,'^dim:')) 3887 abstime=str2 num(get(handles.i1,'String'));3941 abstime=str2double(get(handles.i1,'String')); 3888 3942 TimeUnit='index'; 3889 3943 end … … 5111 5165 if ~isempty(errormsg) 5112 5166 msgbox_uvmat('ERROR',errormsg); 5113 else5114 % set(handles.i1,'BackgroundColor',[1 1 1])5115 % set(handles.i2,'BackgroundColor',[1 1 1])5116 % set(handles.j1,'BackgroundColor',[1 1 1])5117 % set(handles.j2,'BackgroundColor',[1 1 1])5118 % set(handles.FileIndex,'BackgroundColor',[1 1 1])5119 % set(handles.FileIndex_1,'BackgroundColor',[1 1 1])5120 5167 end 5121 5168 set(handles.InputFileREFRESH,'BackgroundColor',[1 0 0]) … … 5139 5186 function VOLUME_Callback(hObject, eventdata, handles) 5140 5187 %----------------------------------------------------------------------- 5141 %errordlg('command VOL not implemented yet')5142 5188 if ishandle(handles.UVMAT_title) 5143 5189 delete(handles.UVMAT_title) … … 5150 5196 edit_vect_Callback(hObject, eventdata, handles) 5151 5197 set(handles.CheckEditObject,'Value',0) 5152 % set(handles.CheckEditObject,'BackgroundColor',[0.7 0.7 0.7])5153 % set(handles.cal,'Value',0)5154 % set(handles.cal,'BackgroundColor',[0 1 0])5155 5198 set(handles.edit_vect,'Value',0) 5156 5199 edit_vect_Callback(hObject, eventdata, handles) … … 5441 5484 drawnow 5442 5485 5443 %% inputfile refresh the current plot5486 %% inputfile refresh the current plot 5444 5487 if isempty(list_path{ichoice}) || nargin(transform_handle)<3 5445 5488 set(handles.SubField,'Value',0) … … 5682 5725 %------------------------------------------------------------------ 5683 5726 slider1=get(handles.Slider1,'Value'); 5684 min_val=str2 num(get(handles.num_MinVec,'String'));5685 max_val=str2 num(get(handles.num_MaxVec,'String'));5727 min_val=str2double(get(handles.num_MinVec,'String')); 5728 max_val=str2double(get(handles.num_MaxVec,'String')); 5686 5729 col=min_val+(max_val-min_val)*slider1; 5687 5730 set(handles.num_ColCode1,'String',num2str(col)) … … 5698 5741 function Slider2_Callback(hObject, eventdata, handles) 5699 5742 slider2=get(handles.Slider2,'Value'); 5700 min_val=str2 num(get(handles.num_MinVec,'String'));5701 max_val=str2 num(get(handles.num_MaxVec,'String'));5743 min_val=str2double(get(handles.num_MinVec,'String')); 5744 max_val=str2double(get(handles.num_MaxVec,'String')); 5702 5745 col=min_val+(max_val-min_val)*slider2; 5703 5746 set(handles.num_ColCode2,'String',num2str(col)) … … 5749 5792 set(handles.CheckFixVecColor,'Value',1) 5750 5793 CheckFixVecColor_Callback(hObject, eventdata, handles) 5751 min_val=str2 num(get(handles.num_MinVec,'String'));5752 max_val=str2 num(get(handles.num_MaxVec,'String'));5794 min_val=str2double(get(handles.num_MinVec,'String')); 5795 max_val=str2double(get(handles.num_MaxVec,'String')); 5753 5796 slider1=get(handles.Slider1,'Value'); 5754 5797 slider2=get(handles.Slider2,'Value'); … … 5774 5817 ichoice=get(handles.ColorCode,'Value'); 5775 5818 colcode.ColorCode=list{ichoice}; 5776 colcode.MinVec=str2 num(get(handles.num_MinVec,'String'));5777 colcode.MaxVec=str2 num(get(handles.num_MaxVec,'String'));5819 colcode.MinVec=str2double(get(handles.num_MinVec,'String')); 5820 colcode.MaxVec=str2double(get(handles.num_MaxVec,'String')); 5778 5821 test3color=strcmp(colcode.ColorCode,'rgb') || strcmp(colcode.ColorCode,'bgr'); 5779 5822 if test3color 5780 colcode.ColCode1=str2 num(get(handles.num_ColCode1,'String'));5781 colcode.ColCode2=str2 num(get(handles.num_ColCode2,'String'));5823 colcode.ColCode1=str2double(get(handles.num_ColCode1,'String')); 5824 colcode.ColCode2=str2double(get(handles.num_ColCode2,'String')); 5782 5825 end 5783 5826 vec_C=colcode.MinVec+(colcode.MaxVec-colcode.MinVec)*(0.5:width-0.5)/width;%sample of vec_C values from min to max
Note: See TracChangeset
for help on using the changeset viewer.