Changeset 1188 for trunk/src/series.m
- Timestamp:
- Dec 11, 2025, 8:45:31 AM (3 days ago)
- File:
-
- 1 edited
-
trunk/src/series.m (modified) (30 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series.m
r1187 r1188 132 132 end 133 133 134 %% Read the parameter file series.xml , or created fromseries.xml.default if it does not exist134 %% Read the parameter file series.xml containing general parameters for the GUI series, or read series.xml.default if it does not exist 135 135 SeriesData=[]; 136 136 path_series=fileparts(which('series'));% path to the GUI series … … 279 279 return 280 280 end 281 % TimeTable=[{Param.InputFile.TimeName},{[]},{[]},{[]},{[]}];281 % TimeTable=[{Param.InputFile.TimeName},{[]},{[]},{[]},{[]}]; 282 282 if isfield(Param.InputFile,'RootPath_1') 283 283 InputTable=[InputTable;[{Param.InputFile.RootPath_1},{Param.InputFile.SubDir_1},{Param.InputFile.RootFile_1},{Param.InputFile.NomType_1},{Param.InputFile.FileExt_1}]]; 284 % TimeTable=[TimeTable; [{Param.InputFile.TimeName_1},{[]},{[]},{[]},{[]}]];284 % TimeTable=[TimeTable; [{Param.InputFile.TimeName_1},{[]},{[]},{[]},{[]}]]; 285 285 end 286 286 set(handles.InputTable,'Data',InputTable) … … 292 292 set(handles.Experiment,'String',[Experiment ExperimentExt]) 293 293 if ~isempty(regexp(InputTable{1,1},'(^http://)|(^https://)','once')) 294 set(handles.OutputPathBrowse,'Value',1)% an output folder needs to be specified for OpenDAP data294 set(handles.OutputPathBrowse,'Value',1)% an output folder needs to be specified for OpenDAP data 295 295 end 296 296 297 297 %update the output path if needed 298 298 if ~(isfield(SeriesData,'InputPath') && strcmp(SeriesData.InputPath,InputPath)) 299 if get(handles.OutputPathBrowse,'Value')==1 % fix the output path in manual mode300 OutputPathOld=get(handles.OutputPath,'String');301 OutputPath=uigetdir(OutputPathOld,'pick a root folder for output data');302 set(handles.OutputPath,'String',OutputPath)303 else %reproduce the input path for output304 set(handles.OutputPath,'String',InputPath)305 end299 if get(handles.OutputPathBrowse,'Value')==1 % fix the output path in manual mode 300 OutputPathOld=get(handles.OutputPath,'String'); 301 OutputPath=uigetdir(OutputPathOld,'pick a root folder for output data'); 302 set(handles.OutputPath,'String',OutputPath) 303 else %reproduce the input path for output 304 set(handles.OutputPath,'String',InputPath) 305 end 306 306 end 307 307 … … 337 337 SeriesData.ref_j=ref_j; 338 338 set(handles.series,'UserData',SeriesData) 339 update_rootinfo(handles,Param.HiddenData.i1_series{1},Param.HiddenData.i2_series{1},Param.HiddenData.j1_series{1},Param.HiddenData.j2_series{1},... 340 Param.HiddenData.FileInfo{1},Param.HiddenData.MovieObject{1},1) 341 if isfield(Param,'FileName_1') 342 % display_file_name(handles,Param,2) 343 update_rootinfo(handles,Param.HiddenData.i1_series{2},Param.HiddenData.i2_series{2},Param.HiddenData.j1_series{2},Param.HiddenData.j2_series{2},... 344 Param.HiddenData.FileInfo{2},Param.HiddenData.MovieObject{2},2) 345 end 339 Param.XmlData_1=[];XmlData_2=[]; 340 if isfield(Param.HiddenData,'XmlData') 341 Param.XmlData=Param.HiddenData.XmlData{1}; 342 end 343 Param.i1_series=Param.HiddenData.i1_series{1}; 344 Param.i2_series=Param.HiddenData.i2_series{1}; 345 Param.j1_series=Param.HiddenData.j1_series{1}; 346 Param.j2_series=Param.HiddenData.j2_series{1}; 347 update_rootinfo(handles,Param,Param.HiddenData.MovieObject{1},1)% update the data for the first input line 348 if isfield(Param,'FileName_1')% if there is a second input line from uvmat 349 if isfield(Param.HiddenData,'XmlData') && numel(Param.HiddenData.XmlData)>=2 350 Param.XmlData=Param.HiddenData.XmlData{1}; 351 end 352 Param.i1_series=Param.HiddenData.i1_series{2}; 353 Param.i2_series=Param.HiddenData.i2_series{2}; 354 Param.j1_series=Param.HiddenData.j1_series{2}; 355 Param.j2_series=Param.HiddenData.j2_series{2}; 356 update_rootinfo(handles,Param,Param.HiddenData.MovieObject{2},2)% update the data for the second input line 357 end 358 346 359 %% enable field and veltype menus, in accordance with the current action 347 360 ActionName_Callback([],[], handles) 348 361 349 %% set length of waitbar350 displ_time(handles)362 % %% set length of waitbar 363 % displ_time(handles) 351 364 352 365 else … … 386 399 387 400 %delete the bowser if detected 388 hh=findobj(allchild(0),'tag','browser'); 401 hh=findobj(allchild(0),'tag','browser');fileinput 389 402 if ~isempty(hh) 390 403 delete(hh) … … 551 564 function REFRESH_Callback(hObject, eventdata, handles) 552 565 %------------------------------------------------------------------------ 553 check_input_file_series(handles) 566 CheckRelabel=get(handles.Relabel,'Value'); 567 check_input_file_series(handles,CheckRelabel) 554 568 555 569 %% enable field and veltype menus, in accordance with the current action … … 558 572 %------------------------------------------------------------------------ 559 573 % --- check the input file series. 560 function check_input_file_series(handles )574 function check_input_file_series(handles,CheckRelabel) 561 575 %------------------------------------------------------------------------ 562 576 InputTable=get(handles.InputTable,'Data');%read the table of input file series … … 581 595 end 582 596 nbview=size(InputTable,1); 597 CheckRelabelQuest=false; 583 598 for iview=1:nbview 584 599 RootPath=fullfile(InputTable{iview,1},InputTable{iview,2}); 600 Param.Relabel=false; 601 MovieObject=[]; 602 Param.FileInfo=[]; 585 603 if ~exist(RootPath,'dir') 586 i1_series=[];604 Param.i1_series=[]; 587 605 RootFile=''; 588 else %scan the input folder 606 else 607 XmlFileName=find_imadoc(InputTable{iview,1},InputTable{iview,2}); 608 if ~isempty(XmlFileName) 609 XmlData=read_imadoc(XmlFileName); 610 if isfield(XmlData,'FileSeries') 611 set(handles.Relabel,'Visible','on') 612 answer='Yes'; 613 if ~CheckRelabel && ~CheckRelabelQuest% propose to relabel if not selected yet 614 answer=msgbox_uvmat('INPUT_Y-N','relabel the frame indices according to the xml info?'); 615 CheckRelabelQuest=true; 616 end 617 if strcmp(answer,'Yes') 618 set(handles.Relabel,'Value',1) 619 NomType='*'; 620 i1=1;i2=[];j1=1;j2=[]; 621 Param.i1_series=1:size(XmlData.Time,1)-1; 622 Param.i2_series=[]; 623 if size(XmlData.Time,2)>2 624 Param.j1_series=1:size(XmlData.Time,2)-1; 625 else 626 Param.j1_series=[]; 627 end 628 Param.j2_series=[]; 629 Param.Relabel=true; 630 FirstFile=fullfile(InputTable{iview,1},InputTable{iview,2},XmlData.FileSeries.FileName{1}); 631 if ~exist(FirstFile,'file') 632 msgbox_uvmat('ERROR',[FirstFile ' does not exist']); 633 return 634 end 635 [Param.FileInfo,VideoObject]=get_file_info(FirstFile); 636 end 637 end 638 Param.XmlData=XmlData; 639 else 640 set(handles.Relabel,'Value',0) 641 end 642 end 643 if ~Param.Relabel 644 %scan the input folder 589 645 InputTable{iview,3}=regexprep(InputTable{iview,3},'^/','');%suppress '/' at the beginning of the input name 590 646 i1=str2double(get(handles.num_first_i,'String')); … … 593 649 PairString=get(handles.PairString,'Data'); 594 650 if numel(PairString)>=iview 595 r=regexp(PairString{iview},'(?<num1>\d+)-(?<num2>\d+)' ,'names');596 if ~isempty(r)651 r=regexp(PairString{iview},'(?<num1>\d+)-(?<num2>\d+)' ,'names'); 652 if ~isempty(r) 597 653 j1=str2double(r.num1); 598 654 j2=str2double(r.num2); 599 end655 end 600 656 end 601 657 InputFile=fullfile_uvmat('','',InputTable{iview,3},InputTable{iview,5},InputTable{iview,4},i1,[],j1,j2); 602 [RootPath,~,RootFile,i1_series,i2_series,j1_series,j2_series,~,FileInfo,MovieObject]=... 603 find_file_series(fullfile(InputTable{iview,1},InputTable{iview,2}),InputFile); 604 end 605 % if no file is found, open a browser 606 if isempty(RootFile)&& isempty(i1_series) 658 [RootPath,~,RootFile,Param.i1_series,Param.i2_series,Param.j1_series,Param.j2_series,~,Param.FileInfo,MovieObject]=... 659 find_file_series(fullfile(InputTable{iview,1},InputTable{iview,2}),InputFile); 660 end 661 662 % if no file is found on line #ivew, open a browser 663 if ~Param.Relabel && isempty(RootFile)&& isempty(Param.i1_series) 607 664 fileinput=uigetfile_uvmat(['wrong input at line ' num2str(iview) ':pick a new input file'],RootPath); 608 665 if isempty(fileinput) … … 613 670 end 614 671 else 615 update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,MovieObject,iview)672 update_rootinfo(handles,Param,MovieObject,iview) 616 673 end 617 674 end … … 632 689 set(handles.TimeTable,'Data',TimeTable(1:nbview,:)); 633 690 634 %% set length of waitbar 635 displ_time(handles) 691 636 692 set(handles.REFRESH,'BackgroundColor',[1 0 0])% set REFRESH button to red color (indicate activation finished) 637 693 set(handles.series,'Pointer','arrow') % set the mouse pointer to 'watch' … … 644 700 % INPUT: 645 701 % handles: handles of elements in the GUI 646 % Param: structure of input parameters, including input file name andpath702 % InputFile: (full) input file name, including path 647 703 % iview: line index in the input table 648 704 % or 'one': refresh the list 649 705 % 'append': add a new line to the input table 650 function errormsg=display_file_name(handles, Param,iview)706 function errormsg=display_file_name(handles,InputFile,iview) 651 707 652 708 set(handles.REFRESH,'BackgroundColor',[1 1 0])% set REFRESH button to yellow color (indicate activation) 653 709 drawnow 654 710 errormsg=''; % default 655 if ischar(Param) 656 fileinput=Param; 657 else% input set when series is opened (called by the GUI uvmat) 658 fileinput=Param.FileName; 659 end 711 660 712 661 713 %% get the input root name, indices, file extension and nomenclature NomType 662 if isempty(regexp( fileinput,'^http')) && ~exist(fileinput,'file')663 errormsg=['input file ' fileinput' does not exist'];714 if isempty(regexp(InputFile,'^http', 'once')) && ~exist(InputFile,'file') 715 errormsg=['input file ' InputFile ' does not exist']; 664 716 msgbox_uvmat('ERROR',errormsg) 665 717 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (refresh still needed) … … 667 719 end 668 720 669 %% detect root name, nomenclature and indices in the input file name: 670 [FilePath,FileName,FileExt]=fileparts(fileinput); 671 %%%%%%%%%%%%%%%%%% 672 %TODO: case of input by uvmat: do not check agai the input series %%%%%%% 673 %%%%%%%%%%%%%%%%%%% 674 % detect the file type, get the movie object if relevant, and look for the corresponding file series: 675 % the root name and indices may be corrected by including the first index i1 if a corresponding xml file exists 676 [RootPath,SubDir,RootFile,i1_series,i2_series,j1_series,j2_series,NomType,FileInfo,MovieObject,i1,i2,j1,j2]=find_file_series(FilePath,[FileName FileExt]); 677 FileType=FileInfo.FileType; 678 if isempty(RootFile)&&isempty(i1_series) 679 errormsg='no input file in the series'; 680 msgbox_uvmat('ERROR',errormsg) 681 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 721 %% Check the nature of the input file 722 [FileInfo,MovieObject]=get_file_info(InputFile); 723 CheckOpen=false; 724 switch FileInfo.FileType 725 case 'txt'%text input file 726 CheckOpen=true; 727 edit(InputFile) 728 case 'xml'%xml input file 729 CheckOpen=true; 730 editxml(InputFile) 731 case 'figure'%Matlab figure 732 CheckOpen=true; 733 open(InputFile) 734 end 735 if CheckOpen 736 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 682 737 return 683 738 end 684 if strcmp(FileType,'txt') 685 edit(fileinput) 686 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 687 return 688 elseif strcmp(FileType,'xml') 689 editxml(fileinput) 690 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 691 return 692 elseif strcmp(FileType,'figure') 693 open(fileinput) 694 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 695 return 739 Param.FileInfo=FileInfo; 740 741 %% Look for file relabeling option 742 [FilePath,RootFile,FileExt]=fileparts(InputFile); 743 [RootPath,SubDir]=fileparts(FilePath); 744 XmlFileName=find_imadoc(RootPath,SubDir); 745 Param.Relabel=false;%no file relabeling by default 746 XmlData=[]; 747 if ~isempty(XmlFileName) 748 XmlData=read_imadoc(XmlFileName); 749 if isfield(XmlData,'FileSeries') 750 set(handles.Relabel,'Visible','on') 751 answer=msgbox_uvmat('INPUT_Y-N','relabel the frame indices according to the xml info?'); 752 if strcmp(answer,'Yes') 753 set(handles.Relabel,'Value',1) 754 NomType='*'; 755 i1=1;i2=[];j1=1;j2=[]; 756 Param.i1_series=1:size(XmlData.Time,1)-1; 757 Param.i2_series=[]; 758 if size(XmlData.Time,2)>2 759 Param.j1_series=1:size(XmlData.Time,2)-1; 760 else 761 Param.j1_series=[]; 762 end 763 Param.j2_series=[]; 764 Param.Relabel=true; 765 end 766 end 767 end 768 Param.XmlData=XmlData; 769 770 %% detect the list of file in the input series in the case of no relabeling 771 if ~Param.Relabel 772 set(handles.Relabel,'Value',0) 773 %%%%%%%%%%%%%%%%%% 774 %TODO: case of input by uvmat: do not check again the input series %%%%%%% 775 %%%%%%%%%%%%%%%%%%% 776 % detect the file type, get the movie object if relevant, and look for the corresponding file series: 777 % the root name and indices may be corrected by including the first index i1 if a corresponding xml file exists 778 [RootPath,SubDir,RootFile,Param.i1_series,Param.i2_series,Param.j1_series,Param.j2_series,NomType,FileInfo,MovieObject,i1,i2,j1,j2]=find_file_series(FilePath,[RootFile FileExt]); 779 if isempty(RootFile)&&isempty(Param.i1_series) 780 errormsg='no input file in the series'; 781 msgbox_uvmat('ERROR',errormsg) 782 set(handles.REFRESH,'BackgroundColor',[1 0 1])% set REFRESH button to magenta color (end of activation) 783 return 784 end 696 785 end 697 786 … … 699 788 set(handles.RUN, 'Enable','On') 700 789 set(handles.RUN,'BackgroundColor',[1 0 0])% set RUN button to red 701 set(handles.InputTable,'BackgroundColor',[1 1 0]) % set RootPath edit box to yellow 790 set(handles.InputTable,'BackgroundColor',[1 1 0]) % set RootPath edit box to yellow to indicate that it is under modification 702 791 drawnow 703 792 704 793 705 %% fill the list of file series794 %% refresh the list of file series according to the input option 'one' or 'append' 706 795 InputTable=get(handles.InputTable,'Data'); 707 796 SeriesData=get(handles.series,'UserData'); 708 709 797 if strcmp(iview,'append') % display the input data as a new line in the table 710 798 iview=size(InputTable,1)+1; % the next line in InputTable becomes the current line … … 727 815 SeriesData.Time={}; 728 816 end 729 if isfield(SeriesData,'i1_series') 817 if isfield(SeriesData,'i1_series')% remove the irrelevant data lines beyond iview in SeriesData 730 818 SeriesData.i1_series(iview+1:end)=[]; 731 819 SeriesData.i2_series(iview+1:end)=[]; … … 736 824 SeriesData.Time(iview+1:end)=[]; 737 825 end 738 InputTable(iview,:)=[{RootPath},{SubDir},{RootFile},{NomType},{FileExt}]; 826 827 %% fill the current Intput Table line 828 InputTable(iview,:)=[{RootPath},{SubDir},{RootFile},{NomType},{FileExt}];%fill the current Intput Table line 739 829 if iview >1 740 830 set(handles.InputLine,'String',num2str(iview)) … … 761 851 SeriesData.ref_j=ref_j; 762 852 763 %% update first and last indices if they do not exist 764 Param=read_GUI(handles.series); 765 first_j=[]; 766 if isfield(Param.IndexRange,'first_j'); first_j=Param.IndexRange.first_j; end 767 last_j=[]; 768 if isfield(Param.IndexRange,'last_j'); last_j=Param.IndexRange.last_j; end 769 PairString=''; 770 if isfield(Param.IndexRange,'PairString'); PairString=Param.IndexRange.PairString; end 771 [i1,i2,j1,j2] = get_file_index(Param.IndexRange.first_i,first_j,PairString); 772 FirstFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},... 773 Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2); 774 if ~exist(FirstFileName,'file') 775 set(handles.num_first_i,'String',num2str(ref_i)) 776 set(handles.num_first_j,'String',num2str(ref_j)) 777 end 778 [i1,i2,j1,j2] = get_file_index(Param.IndexRange.last_i,last_j,PairString); 779 LastFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},... 780 Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2); 781 if ~exist(LastFileName,'file') 782 set(handles.num_last_i,'String',num2str(ref_i)) 783 set(handles.num_last_j,'String',num2str(ref_j)) 853 %% update first and last indices to operate if the files do not exist 854 if ~Param.Relabel 855 ParamGUI=read_GUI(handles.series); 856 first_j=[]; 857 if isfield(ParamGUI.IndexRange,'first_j'); first_j=ParamGUI.IndexRange.first_j; end 858 last_j=[]; 859 if isfield(ParamGUI.IndexRange,'last_j'); last_j=ParamGUI.IndexRange.last_j; end 860 PairString=''; 861 if isfield(ParamGUI.IndexRange,'PairString'); PairString=ParamGUI.IndexRange.PairString; end 862 [i1,i2,j1,j2] = get_file_index(ParamGUI.IndexRange.first_i,first_j,PairString); 863 FirstFileName=fullfile_uvmat(ParamGUI.InputTable{1,1},ParamGUI.InputTable{1,2},ParamGUI.InputTable{1,3},... 864 ParamGUI.InputTable{1,5},ParamGUI.InputTable{1,4},i1,i2,j1,j2); 865 if ~exist(FirstFileName,'file') 866 set(handles.num_first_i,'String',num2str(ref_i)) 867 set(handles.num_first_j,'String',num2str(ref_j)) 868 end 869 [i1,i2,j1,j2] = get_file_index(ParamGUI.IndexRange.last_i,last_j,PairString); 870 LastFileName=fullfile_uvmat(ParamGUI.InputTable{1,1},ParamGUI.InputTable{1,2},ParamGUI.InputTable{1,3},... 871 ParamGUI.InputTable{1,5},ParamGUI.InputTable{1,4},i1,i2,j1,j2); 872 if ~exist(LastFileName,'file') 873 set(handles.num_last_i,'String',num2str(ref_i)) 874 set(handles.num_last_j,'String',num2str(ref_j)) 875 end 784 876 end 785 877 … … 787 879 MenuFile=[{get(handles.MenuFile_1,'Label')};{get(handles.MenuFile_2,'Label')};... 788 880 {get(handles.MenuFile_3,'Label')};{get(handles.MenuFile_4,'Label')};{get(handles.MenuFile_5,'Label')}]; 789 str_find=strcmp( fileinput,MenuFile);881 str_find=strcmp(InputFile,MenuFile); 790 882 if isempty(find(str_find,1)) 791 MenuFile=[{ fileinput};MenuFile]; % insert the current file if not already in the list883 MenuFile=[{InputFile};MenuFile]; % insert the current file if not already in the list 792 884 end 793 885 for ifile=1:min(length(MenuFile),5) … … 803 895 end 804 896 % save the opened file to initiate future opening 805 SeriesData.RefFile{iview}= fileinput; % reference opening file for line iview897 SeriesData.RefFile{iview}=InputFile; % reference opening file for line iview 806 898 SeriesData.Ref_i1=i1; 807 899 SeriesData.Ref_i2=i2; … … 820 912 %update the output path if needed 821 913 if ~(isfield(SeriesData,'InputPath') && strcmp(SeriesData.InputPath,InputPath)) 822 if get(handles.OutputPathBrowse,'Value')==1 % fix the output path in manual mode 914 if get(handles.OutputPathBrowse,'Value')==1 % fix the output path in manual modei1_series 823 915 OutputPathOld=get(handles.OutputPath,'String'); 824 916 OutputPath=uigetdir(OutputPathOld,'pick a root folder for output data'); … … 830 922 end 831 923 924 832 925 set(handles.series,'UserData',SeriesData) 833 926 834 927 set(handles.InputTable,'BackgroundColor',[1 1 1]) 835 928 929 930 836 931 %% initiate input file series and refresh the current field view: 837 update_rootinfo(handles, i1_series,i2_series,j1_series,j2_series,FileInfo,MovieObject,iview);932 update_rootinfo(handles,Param,MovieObject,iview); 838 933 839 934 %% enable field and veltype menus, in accordance with the current action 840 935 ActionName_Callback([],[], handles) 841 936 842 % % set length of waitbar843 displ_time(handles)937 % %% set length of waitbar 938 % displ_time(handles) 844 939 845 940 set(handles.REFRESH,'BackgroundColor',[1 0 0])% set REFRESH button to red color (end of activation) 941 942 %------------------------------------------------------------------------ 943 % --- get info from the xml file XmlFileName 944 function XmlData=read_imadoc(XmlFileName) 945 946 [XmlData,errormsg]=imadoc2struct(XmlFileName); 947 if ~isempty(errormsg) 948 msgbox_uvmat('WARNING',['error in reading ' XmlFileName ': ' errormsg]); 949 end 950 % read time if available 951 if ~isfield(XmlData,'Time') 952 XmlData.Time=[]; 953 end 954 XmlData.TimeUnit=[]; 955 if isfield(XmlData,'Camera') && isfield(XmlData.Camera,'TimeUnit') 956 XmlData.TimeUnit=XmlData.Camera.TimeUnit; 957 end 958 % number of slices 959 XmlData.NbSlice=[]; 960 if isfield(XmlData,'TranslationMotor')&& isfield(XmlData.TranslationMotor,'NbSlice') 961 XmlData.NbSlice=XmlData.TranslationMotor.NbSlice; 962 end 963 if ~isfield(XmlData,'FileSeries') 964 XmlData.FileSeries=[]; 965 end 846 966 847 967 %------------------------------------------------------------------------ 848 968 % --- Update information about a new field series (indices to scan, timing, 849 969 % calibration from an xml file 850 function update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileInfo,VideoObject,iview) 851 %------------------------------------------------------------------------ 852 InputTable=get(handles.InputTable,'Data'); 970 function update_rootinfo(handles,Param,VideoObject,iview) 971 972 %% default time settings 973 TimeUnit=''; 974 % read value set by the first series for the append mode (iwiew >1) 975 if iview>1 976 TimeUnit=get(handles.TimeUnit,'String'); 977 end 978 TimeName=''; 979 Time=[]; % default 980 TimeMin=[]; 981 TimeFirst=[]; 982 TimeLast=[]; 983 TimeMax=[]; 984 985 %% determine the min and max indices for the whole file series 986 i1_series=Param.i1_series; 987 i2_series=Param.i2_series; 988 j1_series=Param.j1_series; 989 j2_series=Param.j2_series; 990 MaxIndex_j=1; 991 if Param.Relabel 992 MinIndex_i=1; 993 MinIndex_j=1; 994 set(handles.num_incr_j,'String','1') 995 MaxIndex_i=numel(i1_series); 996 set(handles.num_incr_i,'String','1') 997 if ~isempty(j1_series) 998 MaxIndex_j=numel(j1_series); 999 end 1000 Time=Param.XmlData.Time; 1001 TimeMin=Time(2,2); 1002 TimeMax=Time(end,end); 1003 TimeFirst=TimeMin; 1004 TimeLast=TimeMin; 1005 TimeName='xml'; 1006 else 1007 if isempty(i1_series) 1008 MinIndex_j=1;MaxIndex_j=1;MinIndex_i=1;MaxIndex_i=1; 1009 elseif size(i1_series,2)==2 && min(min(i1_series(:,1,:)))==0 1010 MinIndex_j=1; % index j set to 1 by default 1011 MaxIndex_j=1; 1012 MinIndex_i=find(i1_series(1,2,:), 1 )-1; % min ref index i detected in the series (corresponding to the first non-zero value of i1_series, except for zero index) 1013 MaxIndex_i=find(i1_series(1,2,:),1,'last' )-1; % max ref index i detected in the series (corresponding to the last non-zero value of i1_series) 1014 else 1015 ref_i=squeeze(max(i1_series(1,:,:),[],2)); % select ref_j index for each ref_i 1016 ref_j=squeeze(max(j1_series(1,:,:),[],3)); % select ref_i index for each ref_j 1017 MinIndex_i=find(ref_i, 1 )-1; 1018 MaxIndex_i=find(ref_i, 1, 'last' )-1; 1019 MaxIndex_j=find(ref_j, 1, 'last' )-1; 1020 MinIndex_j=find(ref_j, 1 )-1; 1021 diff_j_max=diff(ref_j); 1022 diff_i_max=diff(ref_i); 1023 if ~isempty(diff_i_max) && isequal (diff_i_max,diff_i_max(1)*ones(size(diff_i_max))) 1024 set(handles.num_incr_i,'String',num2str(diff_i_max(1)))% detect an increment to dispaly by default 1025 end 1026 if ~isempty(diff_j_max) && isequal (diff_j_max,diff_j_max(1)*ones(size(diff_j_max))) 1027 set(handles.num_incr_j,'String',num2str(diff_j_max(1))) 1028 end 1029 end 1030 if isequal(MinIndex_i,-1) 1031 MinIndex_i=0; 1032 end 1033 if isequal(MinIndex_j,-1) 1034 MinIndex_j=0; 1035 end 1036 if isfield(Param.FileInfo,'Software')&&~isempty(Param.FileInfo.Software) && ~isempty(regexp(Param.FileInfo.Software,'^pco.camware', 'once')) 1037 MinIndex_i=0; 1038 end 1039 end 853 1040 854 1041 %% make the j indices visible if relevant … … 856 1043 enable_j(handles,'off'); 857 1044 else 858 enable_j(handles,'on')%%%%remark: put series with j index at the end in the case of a list 859 end 860 861 %% display the min and max indices for the whole file series 862 if isempty(i1_series) 863 MinIndex_j=1;MaxIndex_j=1;MinIndex_i=1;MaxIndex_i=1; 864 elseif size(i1_series,2)==2 && min(min(i1_series(:,1,:)))==0 865 MinIndex_j=1; % index j set to 1 by default 866 MaxIndex_j=1; 867 MinIndex_i=find(i1_series(1,2,:), 1 )-1; % min ref index i detected in the series (corresponding to the first non-zero value of i1_series, except for zero index) 868 MaxIndex_i=find(i1_series(1,2,:),1,'last' )-1; % max ref index i detected in the series (corresponding to the last non-zero value of i1_series) 869 else 870 ref_i=squeeze(max(i1_series(1,:,:),[],2)); % select ref_j index for each ref_i 871 ref_j=squeeze(max(j1_series(1,:,:),[],3)); % select ref_i index for each ref_j 872 MinIndex_i=find(ref_i, 1 )-1; 873 MaxIndex_i=find(ref_i, 1, 'last' )-1; 874 MaxIndex_j=find(ref_j, 1, 'last' )-1; 875 MinIndex_j=find(ref_j, 1 )-1; 876 diff_j_max=diff(ref_j); 877 diff_i_max=diff(ref_i); 878 if ~isempty(diff_i_max) && isequal (diff_i_max,diff_i_max(1)*ones(size(diff_i_max))) 879 set(handles.num_incr_i,'String',num2str(diff_i_max(1)))% detect an increment to dispaly by default 880 end 881 if ~isempty(diff_j_max) && isequal (diff_j_max,diff_j_max(1)*ones(size(diff_j_max))) 882 set(handles.num_incr_j,'String',num2str(diff_j_max(1))) 883 end 884 end 885 if isequal(MinIndex_i,-1) 886 MinIndex_i=0; 887 end 888 if isequal(MinIndex_j,-1) 889 MinIndex_j=0; 890 end 891 if isfield(FileInfo,'Software')&&~isempty(FileInfo.Software) && ~isempty(regexp(FileInfo.Software,'^pco.camware', 'once')) 892 MinIndex_i=0; 893 end 894 if strcmp(FileInfo.FileType,'rdvision') 1045 enable_j(handles,'on')%%%%remark: put series with j index at the end in the case of a list 1046 end 1047 1048 SeriesData=get(handles.series,'UserData'); 1049 if ~Param.Relabel 1050 %% read timing from the current file (prioritary) 1051 if ~isempty(VideoObject)% case of movies 1052 imainfo=get(VideoObject); 1053 if isfield(imainfo,'NumFrames') 1054 imainfo.NumberOfFrames=imainfo.NumFrames; 1055 end 1056 if isempty(j1_series) % frame index along i 1057 Time=zeros(imainfo.NumberOfFrames+1,2); 1058 Time(:,2)=(0:1/imainfo.FrameRate:(imainfo.NumberOfFrames)/imainfo.FrameRate)'; 1059 else 1060 Time=[0;ones(size(i1_series,3)-1,1)]*(0:1/imainfo.FrameRate:(imainfo.NumberOfFrames)/imainfo.FrameRate); 1061 end 1062 TimeName='video'; 1063 end 1064 1065 %% get index range in case of relabeling 1066 if ~isempty(Param.XmlData.Time) 1067 Time=Param.XmlData.Time; 1068 MinIndex_i=1; 1069 MaxIndex_i=size(Time,1)-1; 1070 MinIndex_j=1; 1071 MaxIndex_j=size(Time,2)-1; 1072 TimeName='xml'; 1073 else 1074 [nbfield,nbfield_j]=size(XmlData.Time); 1075 nbfield=nbfield-1; %remove the possible index 0 1076 nbfield_j=nbfield_j-1; %remove the possible index 0 1077 MaxIndex_i=get(handles.MaxIndex_i,'Data'); 1078 MaxIndex_j=get(handles.MaxIndex_j,'Data'); 1079 MaxIndex_i(1,:)=nbfield; 1080 MaxIndex_j(1,:)=nbfield_j; 1081 MinIndex_i(1,:)=1; 1082 MinIndex_j(1,:)=1; 1083 1084 first_i=str2double(get(handles.num_first_i,'String')); 1085 first_j=str2double(get(handles.num_first_j,'String')); 1086 %i1=(first_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 1087 i1=1; 1088 if strcmp(SeriesData.TimeName,'xml')% indices i and j 1089 j1=mod(i1-1,nbfield_j)+first_j; 1090 i1=floor((i1-1)/nbfield_j)+1; 1091 set(handles.num_first_j,'String',num2str(j1)) 1092 end 1093 end 1094 end 1095 % set(handles.num_first_i,'String',num2str(i1)) 1096 % % last_i=str2double(get(handles.num_last_i,'String')); 1097 % % last_j=str2double(get(handles.num_last_j,'String')); 1098 % % i1=(last_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 1099 % % if strcmp(SeriesData.TimeName,'xml')% indices i and j 1100 % % j1=mod(i1-1,nbfield_j)+1; 1101 % % i1=floor((i1-1)/nbfield_j)+1; 1102 % % end 1103 % set(handles.num_last_i,'String',num2str(nbfield)) 1104 % set(handles.num_last_j,'String',num2str(nbfield_j)) 1105 % % else 1106 1107 1108 1109 1110 % %% case of possible index relabeling from xml info 1111 % if isfield(XmlData,'FileSeries')&& strcmp(FileInfo.FileType,'multimage') 1112 % answer=msgbox_uvmat('INPUT_Y-N','relabel the frame indices according to the xml info?'); 1113 % if strcmp(answer,'Yes') 1114 % set(handles.Relabel,'Visible','on') 1115 % set(handles.Relabel,'Value',1) 1116 % SeriesData.FileSeries{iview}=XmlData.FileSeries; 1117 % TimeMin=Time(2,2); 1118 % TimeMax=Time(end,end); 1119 % TimeFirst=TimeMin; 1120 % TimeLast=TimeMax; 1121 % end 1122 % elseif iview==1 1123 % set(handles.Relabel,'Visible','off') 1124 % end 1125 1126 if ~isempty(Param.FileInfo) && strcmp(Param.FileInfo.FileType,'rdvision') 895 1127 set(handles.OutputSubDir,'String','/im') 896 1128 end 1129 1130 %% determine the min and max times: case of Netcdf files will be treated later in FieldName_Callback 1131 if ~isempty(TimeName) 1132 if size(Time)<[MaxIndex_i+1 MaxIndex_j+1] 1133 msgbox_uvmat('WARNING',['incomplete time info in xml file']); 1134 end 1135 TimeMin=Time(MinIndex_i+1,MinIndex_j+1); 1136 % if size(Time)>=[first_i+1 first_j+1] 1137 % TimeFirst=Time(first_i+1,first_j+1); 1138 % end 1139 % if size(Time)>=[last_i+1 last_j+1] 1140 % TimeLast=Time(last_i+1,last_j+1); 1141 % end 1142 if size(Time)>=[MaxIndex_i+1 MaxIndex_j+1] 1143 TimeMax=Time(MaxIndex_i+1,MaxIndex_j+1); 1144 end 1145 end 1146 1147 %% update the tables of Min and Max indices 897 1148 MinIndex_i_table=get(handles.MinIndex_i,'Data'); % retrieve the min indices in the table MinIndex 898 1149 MinIndex_j_table=get(handles.MinIndex_j,'Data'); % retrieve the min indices in the table MinIndex … … 912 1163 set(handles.MaxIndex_j,'Data',MaxIndex_j_table)%display the max indices in the table MaxIndex 913 1164 914 915 SeriesData=get(handles.series,'UserData'); 1165 if isfield(Param.XmlData,'NbSlice') && ~isempty(Param.XmlData.NbSlice) 1166 set(handles.num_NbSlice,'String',num2str(Param.XmlData.NbSlice)) 1167 set(handles.num_NbSlice,'Visible','on') 1168 end 1169 916 1170 917 1171 %% adjust the first and last indices for the selected series, only if requested by the bounds … … 920 1174 % ref_i=str2num(get(handles.num_ref_i,'String')); % index i given by the input field 921 1175 ref_i=1; 1176 922 1177 if isfield(SeriesData,'ref_i') 923 1178 ref_i=SeriesData.ref_i; … … 973 1228 end 974 1229 975 %% default time settings976 TimeUnit='';977 % read value set by the first series for the append mode (iwiew >1)978 if iview>1979 TimeUnit=get(handles.TimeUnit,'String');980 end981 TimeName='';982 Time=[]; % default983 TimeMin=[];984 TimeFirst=[];985 TimeLast=[];986 TimeMax=[];987 988 %% read image documentation file if found989 XmlData=[];990 check_calib=0;991 XmlFileName=find_imadoc(InputTable{iview,1},InputTable{iview,2});992 if ~isempty(XmlFileName)993 [XmlData,errormsg]=imadoc2struct(XmlFileName);994 if ~isempty(errormsg)995 msgbox_uvmat('WARNING',['error in reading ' XmlFileName ': ' errormsg]);996 end997 % read time if available998 if isfield(XmlData,'Time')999 Time=XmlData.Time;1000 TimeName='xml';1001 end1002 if isfield(XmlData,'Camera')1003 if isfield(XmlData.Camera,'TimeUnit')&& ~isempty(XmlData.Camera.TimeUnit)1004 if iview>1 && ~isempty(TimeUnit) && ~strcmp(TimeUnit,XmlData.Camera.TimeUnit)1005 msgbox_uvmat('WARNING','inconsistent time unit with the first field series');1006 end1007 TimeUnit=XmlData.Camera.TimeUnit;1008 end1009 end1010 % number of slices1011 if isfield(XmlData,'TranslationMotor')&& isfield(XmlData.TranslationMotor,'NbSlice')1012 NbSlice_motor=XmlData.TranslationMotor.NbSlice;1013 if ~isempty(NbSlice) && ~isequal(NbSlice_motor,NbSlice)1014 msgbox_uvmat('WARNING','inconsistent Z numbers of Z indices');1015 else1016 NbSlice=NbSlice_motor;1017 end1018 end1019 end1020 if ~isempty(NbSlice)1021 set(handles.num_NbSlice,'String',num2str(NbSlice))1022 set(handles.num_NbSlice,'Visible','on')1023 end1024 1025 %% read timing from the current file (prioritary)1026 if ~isempty(VideoObject)% case of movies1027 imainfo=get(VideoObject);1028 if isfield(imainfo,'NumFrames')1029 imainfo.NumberOfFrames=imainfo.NumFrames;1030 end1031 if isempty(j1_series) % frame index along i1032 Time=zeros(imainfo.NumberOfFrames+1,2);1033 Time(:,2)=(0:1/imainfo.FrameRate:(imainfo.NumberOfFrames)/imainfo.FrameRate)';1034 else1035 Time=[0;ones(size(i1_series,3)-1,1)]*(0:1/imainfo.FrameRate:(imainfo.NumberOfFrames)/imainfo.FrameRate);1036 end1037 TimeName='video';1038 end1039 1040 1041 %% determine the min and max times: case of Netcdf files will be treated later in FieldName_Callback1042 if ~isempty(TimeName)1043 if size(Time)<[MaxIndex_i+1 MaxIndex_j+1]1044 msgbox_uvmat('WARNING',['incomplete time info in ' XmlFileName]);1045 end1046 TimeMin=Time(MinIndex_i+1,MinIndex_j+1);1047 if size(Time)>=[first_i+1 first_j+1]1048 TimeFirst=Time(first_i+1,first_j+1);1049 end1050 if size(Time)>=[last_i+1 last_j+1]1051 TimeLast=Time(last_i+1,last_j+1);1052 end1053 if size(Time)>=[MaxIndex_i+1 MaxIndex_j+1]1054 TimeMax=Time(MaxIndex_i+1,MaxIndex_j+1);1055 end1056 end1057 1058 %% case of possible index relabeling from xml info1059 if isfield(XmlData,'FileSeries')&& strcmp(FileInfo.FileType,'multimage')1060 set(handles.Relabel,'Visible','on')1061 set(handles.Relabel,'Value',1)1062 SeriesData.FileSeries{iview}=XmlData.FileSeries;1063 TimeMin=Time(2,2);1064 TimeMax=Time(end,end);1065 TimeFirst=TimeMin;1066 TimeLast=TimeMax;1067 elseif iview==11068 set(handles.Relabel,'Visible','off')1069 end1070 1230 1071 1231 %% update the time table … … 1083 1243 SeriesData.j1_series{iview}=j1_series; 1084 1244 SeriesData.j2_series{iview}=j2_series; 1085 SeriesData.FileType{iview}=FileInfo.FileType;1086 SeriesData.FileInfo{iview}= FileInfo;1245 % SeriesData.FileType{iview}=FileInfo.FileType; 1246 SeriesData.FileInfo{iview}=Param.FileInfo; 1087 1247 SeriesData.Time{iview}=Time; 1088 1089 1248 SeriesData.TimeName=TimeName; 1090 1091 if check_calib1092 SeriesData.GeometryCalib{iview}=XmlData.GeometryCalib;1093 end1094 1249 set(handles.series,'UserData',SeriesData) 1095 1250 1251 %% updtate the time info 1252 displ_time(handles); 1253 1096 1254 %% update pair menus 1255 InputTable=get(handles.InputTable,'Data'); 1097 1256 hset_pair=findobj(allchild(0),'Tag','set_pairs'); 1098 1257 if ~isempty(hset_pair), delete(hset_pair); end % delete the GUI set_pair if opened … … 1129 1288 j_max{iline}=max(pair_max,[],1); % max on j index 1130 1289 if ~isempty(j_max{iline}) 1131 MaxIndex_i(iline)=find(j_max{iline}, 1, 'last' )-1; % max ref index i1132 MinIndex_i(iline)=find(j_max{iline}, 1 )-1; % min ref index i1290 MaxIndex_i(iline)=find(j_max{iline}, 1, 'last' )-1; % max ref index i 1291 MinIndex_i(iline)=find(j_max{iline}, 1 )-1; % min ref index i 1133 1292 end 1134 1293 end … … 1312 1471 ref_i_1=str2double(get(handles.num_first_i,'String')); % first reference index 1313 1472 if isnan(ref_i_1) 1314 ref_i_1=1;1473 ref_i_1=1; 1315 1474 end 1316 1475 ref_i_2=str2double(get(handles.num_last_i,'String')); % last reference index 1317 1476 if isnan(ref_i_2) 1318 ref_i_2=1;1477 ref_i_2=1; 1319 1478 end 1320 1479 ref_j_1=NaN;ref_j_2=NaN; … … 1336 1495 TimeTable{iview,3}=[]; 1337 1496 TimeTable{iview,4}=[]; 1338 if size(SeriesData.Time{iview},1)>=i2_2+1 && (is empty(ref_j_1)||size(SeriesData.Time{iview},2)>=j2_2+1)1339 if is empty(ref_j_1)1340 time_first=(SeriesData.Time{iview}(i1_1+1,2)+SeriesData.Time{iview}(i2_1+1,2))/2; 1497 if size(SeriesData.Time{iview},1)>=i2_2+1 && (isnan(ref_j_1)||size(SeriesData.Time{iview},2)>=j2_2+1) 1498 if isnan(ref_j_1) 1499 time_first=(SeriesData.Time{iview}(i1_1+1,2)+SeriesData.Time{iview}(i2_1+1,2))/2;% take the average between index i1 and i2 1341 1500 time_last=(SeriesData.Time{iview}(i1_2+1,2)+SeriesData.Time{iview}(i2_2+1,2))/2; 1342 1501 else … … 4005 4164 % --- Executes on button press in Relabel. 4006 4165 function Relabel_Callback(hObject, eventdata, handles) 4007 if get(handles.Relabel,'Value') 4008 SeriesData=get(handles.series,'UserData'); 4009 if isfield(SeriesData,'FileSeries')&& ~isempty(SeriesData.FileSeries{1}) 4010 [nbfield,nbfield_j]=size(SeriesData.Time{1}); 4011 nbfield=nbfield-1; %remove the possible index 0 4012 nbfield_j=nbfield_j-1; %remove the possible index 0 4013 MaxIndex_i=get(handles.MaxIndex_i,'Data'); 4014 MaxIndex_j=get(handles.MaxIndex_j,'Data'); 4015 MaxIndex_i(1,:)=nbfield; 4016 MaxIndex_j(1,:)=nbfield_j; 4017 MinIndex_i(1,:)=1; 4018 MinIndex_j(1,:)=1; 4019 set(handles.MaxIndex_i,'Data',MaxIndex_i) 4020 set(handles.MaxIndex_j,'Data',MaxIndex_j) 4021 set(handles.MinIndex_i,'Data',MinIndex_i) 4022 set(handles.MinIndex_j,'Data',MinIndex_j) 4023 first_i=str2double(get(handles.num_first_i,'String')); 4024 first_j=str2double(get(handles.num_first_j,'String')); 4025 %i1=(first_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4026 i1=1; 4027 if strcmp(SeriesData.TimeName,'xml')% indices i and j 4028 j1=mod(i1-1,nbfield_j)+first_j; 4029 i1=floor((i1-1)/nbfield_j)+1; 4030 set(handles.num_first_j,'String',num2str(j1)) 4031 end 4032 set(handles.num_first_i,'String',num2str(i1)) 4033 % last_i=str2double(get(handles.num_last_i,'String')); 4034 % last_j=str2double(get(handles.num_last_j,'String')); 4035 % i1=(last_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4166 CheckRelabel=get(hObject,'Value'); 4167 check_input_file_series(handles,CheckRelabel) 4168 ActionInput_Callback([],[], handles) 4169 % if get(handles.Relabel,'Value') 4170 % NomType='*'; 4171 % i1=1;i2=[];j1=1;j2=[]; 4172 % i1_series=1:size(XmlData.Time,1)-1; 4173 % i2_series=[]; 4174 % j1_series=1:size(XmlData.Time,2)-1; 4175 % j2_series=[]; 4176 % 4177 % 4178 % 4179 % SeriesData=get(handles.series,'UserData'); 4180 % if isfield(SeriesData,'FileSeries')&& ~isempty(SeriesData.FileSeries{1}) 4181 % [nbfield,nbfield_j]=size(SeriesData.Time{1}); 4182 % nbfield=nbfield-1; %remove the possible index 0 4183 % nbfield_j=nbfield_j-1; %remove the possible index 0 4184 % MaxIndex_i=get(handles.MaxIndex_i,'Data'); 4185 % MaxIndex_j=get(handles.MaxIndex_j,'Data'); 4186 % MaxIndex_i(1,:)=nbfield; 4187 % MaxIndex_j(1,:)=nbfield_j; 4188 % MinIndex_i(1,:)=1; 4189 % MinIndex_j(1,:)=1; 4190 % set(handles.MaxIndex_i,'Data',MaxIndex_i) 4191 % set(handles.MaxIndex_j,'Data',MaxIndex_j) 4192 % set(handles.MinIndex_i,'Data',MinIndex_i) 4193 % set(handles.MinIndex_j,'Data',MinIndex_j) 4194 % first_i=str2double(get(handles.num_first_i,'String')); 4195 % first_j=str2double(get(handles.num_first_j,'String')); 4196 % %i1=(first_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4197 % i1=1; 4036 4198 % if strcmp(SeriesData.TimeName,'xml')% indices i and j 4037 % j1=mod(i1-1,nbfield_j)+ 1;4199 % j1=mod(i1-1,nbfield_j)+first_j; 4038 4200 % i1=floor((i1-1)/nbfield_j)+1; 4201 % set(handles.num_first_j,'String',num2str(j1)) 4039 4202 % end 4040 set(handles.num_last_i,'String',num2str(nbfield)) 4041 set(handles.num_last_j,'String',num2str(nbfield_j)) 4042 end 4043 else 4044 check_input_file_series(handles) 4045 ActionInput_Callback([],[], handles) 4046 end 4047 4203 % set(handles.num_first_i,'String',num2str(i1)) 4204 % % last_i=str2double(get(handles.num_last_i,'String')); 4205 % % last_j=str2double(get(handles.num_last_j,'String')); 4206 % % i1=(last_i-SeriesData.FileSeries{1}.FirstFileIndex)*SeriesData.FileSeries{1}.NbFramePerFile+1;%frame index deduced from input file index 4207 % % if strcmp(SeriesData.TimeName,'xml')% indices i and j 4208 % % j1=mod(i1-1,nbfield_j)+1; 4209 % % i1=floor((i1-1)/nbfield_j)+1; 4210 % % end 4211 % set(handles.num_last_i,'String',num2str(nbfield)) 4212 % set(handles.num_last_j,'String',num2str(nbfield_j)) 4213 % end 4214 % else 4215 % check_input_file_series(handles) 4216 % ActionInput_Callback([],[], handles) 4217 % end 4218
Note: See TracChangeset
for help on using the changeset viewer.
