Changeset 360


Ignore:
Timestamp:
Jan 9, 2012, 1:16:35 AM (9 years ago)
Author:
sommeria
Message:

civ: bugs corrected. Iintroduction of an xm file for parameters read using the new fct fill_GUI (to test and improve)
cleaning in uvmat. Possibility of using blank increment added (go to the next available file)
fullfile_uvmat: case of two equal indices in a pair, bug repair.
find_fileseries: improved speed.

Location:
trunk/src
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/civ.m

    r356 r360  
    2323%TODO: search range
    2424
    25 % Last Modified by GUIDE v2.5 21-Dec-2011 00:34:49
     25% Last Modified by GUIDE v2.5 08-Jan-2012 11:00:13
    2626% Begin initialization code - DO NOT EDIT
    2727gui_Singleton = 1;
     
    139139    oldfile=filebase;
    140140end
    141 % ind_opening=1;%default
    142 % browse.incr_pair=[0 0]; %default
    143 %% get the new input fiel with the browser
     141
     142%% get the new input file with the browser
    144143menu={'*.xml;*.civ;*.png;*.jpg;*.tif;*.avi;*.AVI;*.nc;', ' (*.xml,*.civ,*.png,*.jpg ,.tif, *.avi,*.nc)';
    145144    '*.xml',  '.xml files '; ...
     
    159158[path,name,ext]=fileparts(fileinput);
    160159testeditxml=0;
    161 if isequal(ext,'.xml')
    162     testeditxml=1;
    163     t_browse=xmltree(fileinput);
    164     head_element=get(t_browse,1);
    165     if isfield(head_element,'name')&& isequal(head_element.name,'ImaDoc')
    166         testeditxml=0;
    167     end
    168 end
    169 if testeditxml==1 || isequal(ext,'.xls')
    170     heditxml=editxml({fileinput});
    171     set(heditxml,'Tag','browser')
    172     waitfor(heditxml,'Tag','idle')
    173     if ~ishandle(heditxml)
    174         return
    175     end
    176     attr=findobj(get(heditxml,'children'),'Tag','CurrentAttributes');
    177     set(handles.browse,'UserData',fileinput)% store for future opening with browser
    178     fileinput=get(attr,'UserData');
    179     if ~exist(fileinput,'file')
    180         return
    181     end
    182 end
    183 %[RootPath,RootFile,str1,str2,str_a,str_b,FileExt,NomType,subdir]=name2display(fileinput);
     160% if isequal(ext,'.xml')
     161%     testeditxml=1;
     162%     t_browse=xmltree(fileinput);
     163%     head_element=get(t_browse,1);
     164%     if isfield(head_element,'name')&& isequal(head_element.name,'ImaDoc')
     165%         testeditxml=0;
     166%     end
     167% end
     168% if testeditxml==1 || isequal(ext,'.xls')
     169%     heditxml=editxml({fileinput});
     170%     set(heditxml,'Tag','browser')
     171%     waitfor(heditxml,'Tag','idle')
     172%     if ~ishandle(heditxml)
     173%         return
     174%     end
     175%     attr=findobj(get(heditxml,'children'),'Tag','CurrentAttributes');
     176%     set(handles.browse,'UserData',fileinput)% store for future opening with browser
     177%     fileinput=get(attr,'UserData');
     178%     if ~exist(fileinput,'file')
     179%         return
     180%     end
     181% end
    184182[tild,tild,tild,i1,i2,j1,j2,FileExt,NomType]=fileparts_uvmat(fileinput);
    185 % filebase=fullfile(RootPath,RootFile);
    186 
    187 %% record the information obtained from the input file
    188 % if isempty(i1),i1=1;end
    189 % if isempty(i2),i2=i1;end
    190 % if isempty(j1),j1=1;end
    191 % if isempty(j2),j2=j1;end
    192 % if isequal(get(handles.ListCompareMode,'Value'),1)
    193 %     browse=[];%initialisation
    194 % else
    195 %     browse=get(handles.RootName,'UserData');
    196 % end
    197 % browse.num_i1=i1;
    198 % browse.num_i2=i2;
    199 % browse.num_j1=j1;
    200 % browse.num_j2=j2;
    201 % if length(FileExt)>1 && (~isempty(imformats(FileExt(2:end)))||strcmpi(FileExt,'.avi'));%if an image file has been opened by uvmat
    202 %     browse.nom_type_ima=NomType;
    203 %     browse.ext_ima=FileExt;
    204 %     set(handles.ImaExt,'String',FileExt)
    205 % end
    206 % set(handles.RootName,'UserData',browse);% store information from browser
    207183
    208184%% prepare the GUI with parameters from the input file
     
    321297%------------------------------------------------------------------------
    322298set(handles.RootName,'BackgroundColor',[1 1 0])%paint RootName edit box in yellow to indicate that the file input is proceeding
    323 filebase=get(handles.RootName,'String');
    324 errormsg=display_file_name(handles,filebase);
     299[RootPath,RootFile]=fileparts(get(handles.RootName,'String'));
     300ref_i=str2num(get(handles.ref_i,'String'));
     301ref_j=str2num(get(handles.ref_j,'String'));
     302NomType=get(handles.NomType,'String');
     303ImaExt=get(handles.ImaExt,'String');
     304fileinput=fullfile_uvmat(RootPath,'',RootFile,ImaExt,NomType,ref_i,[],ref_j)
     305errormsg=display_file_name(handles,fileinput);
    325306if ~isempty(errormsg)
    326     msgbox_uvmat('ERROR',erromsg)
     307    msgbox_uvmat('ERROR',errormsg)
    327308end
    328309set(handles.RootName,'BackgroundColor',[1 1 1])%paint RootName back to white to indicate that the file input is finished
     
    346327
    347328%% determine nomenclature types and extension of the input files
    348 ext_ima='';%default
    349 NomTypeIma='';%default
    350 NomTypeNc='';
    351 %[RootPath,RootFile,i1_str,i2_str,j1_str,j2_str,ext_input,nom_type_input,SubDir]=name2display(fileinput);
    352329[RootPath,SubDir,RootFile,i1,i2,j1,j2,ExtInput,NomTypeInput]=fileparts_uvmat(fileinput);
    353 [RootPath,RootFile,i1_series,i2_series,j1_series,j2_series,NomTypeInput,FileType,Object]=find_file_series(fileinput);
    354 if strcmp(NomTypeInput,'*')% movies will be opened at the first frame
    355     i1=1;
    356     i2=[];
    357     j1=[];
    358     j2=[];
    359 end 
     330NomTypeNc='';%default
     331
     332%% case of netcdf file as input, look for a coresponding image
    360333ind_opening=0;%default
    361 switch FileType
    362     case 'civdata'
    363         Data=nc2struct(fileinput,'ListGlobalAttribute','CivStage','Civ1_ImageA');
    364         if isfield(Data,'Txt')
    365             errormsg=Data.Txt;
    366             return
    367         end
     334if strcmp(ExtInput,'.xml')
     335    Param=xml2struct(fileinput);
     336    fill_GUI(Param,handles);%fill the GUI with the parameters retrieved from the xml file
     337    return
     338end
     339if strcmp(ExtInput,'.nc')
     340    NomTypeNc=NomTypeInput;
     341    Data=nc2struct(fileinput,'ListGlobalAttribute','Conventions','absolut_time_T0','CivStage','Civ2_ImageA','Civ1_ImageA','fix','patch','civ2','fix2');
     342    if isfield(Data,'Txt')
     343        errormsg=Data.Txt;
     344        return
     345    end
     346    if strcmp(Data.Conventions,'uvmat/civdata')% case of new civ data,
     347        set(handles.MenuMatlab,'checked','on') %select civ/Matlab by default
     348        set(handles.MenuCivX,'checked','off')
    368349        if ~isempty(Data.CivStage)%test for civ files
    369350            ind_opening=Data.CivStage;
    370351        end
    371         if ~isempty(Data.Civ1_ImageA)%test for civ files
     352        if ~isempty(Data.Civ2_ImageA)%get the corresponding input image in the netcdf file
    372353            imageinput=Data.Civ1_ImageA;
    373             if ~exist(imageinput,'file')
    374                 errormsg=['the image ' imageinput ' does not exist, please enter an image'];
    375                 return
    376             end
    377         end
    378         set(handles.MenuMatlab,'checked','on')
    379         set(handles.MenuCivX,'checked','off')
    380         NomTypeNc=NomTypeInput;
    381     case 'civx'
    382         Data=nc2struct(fileinput,'ListGlobalAttribute','fix','patch','civ2','fix2');
     354        elseif ~isempty(Data.Civ1_ImageA)
     355            imageinput=Data.Civ1_ImageA;
     356        end
     357    elseif ~isempty(Data.absolut_time_T0')% case of  civx data,
     358        set(handles.MenuMatlab,'checked','off') %select Cix by default
     359        set(handles.MenuCivX,'checked','on')
    383360        if ~isempty(Data.fix2)
    384361            ind_opening=5;
     
    390367            ind_opening=2;
    391368        end
    392         % look for the input images
     369        % look for the corresponding input images
    393370        check_letter=~isempty(regexp(NomTypeInput,'[ab|AB]$'));%detect pair label by letter
    394371        NomTypeIma=NomTypeInput;
     
    396373            NomTypeIma=NomTypeInput(1:end-1);
    397374        else
    398             r=regexp(NomTypeIma,'.-(?<num2>\d+$','names');
     375            r=regexp(NomTypeIma,'.-(?<num2>\d+)$','names');
    399376            if ~isempty(r)
    400377                NomTypeIma=regexprep(NomTypeIma,['-' r.num2],'');
    401378            end
     379            r=regexp(NomTypeIma,'.-(?<num2>\d+)','names');
     380            if ~isempty(r)
     381                NomTypeIma=regexprep(NomTypeIma,['-' r.num2],'');
     382            end
    402383        end
    403384        imageinput=fullfile_uvmat(RootPath,'',RootFile,'.png',NomTypeIma,i1,[],j1);
    404         if ~exist(imageinput,'file')
    405             errormsg='no image corresponds to the input .nc file, please open an image';
    406             return
    407         end
     385    else
     386        errormsg='the input netcdf file is not civ data';
     387        return
     388    end
     389end
     390
     391%% scan the image series when a nc file has been opened
     392ImaExt=ExtInput;
     393if ~isempty(NomTypeNc)
     394    %no corresponding image found, select manually with the browser
     395    if ~exist(imageinput,'file')
     396        menu={'*.png;*.jpg;*.tif;*.avi;*.AVI', '(*.png,*.jpg ,*.tif, *.avi,*.AVI)';
     397            '*.png','.png image files'; ...
     398            '*.jpg',' jpeg image files'; ...
     399            '*.tif','.tif image files'; ...
     400            '*.avi;*.AVI','.avi movie files'; ...
     401            '*.*',  'All Files (*.*)'};
     402        [FileName, PathName] = uigetfile( menu, 'Pick an input image file',fileparts(fileparts(fileinput)));
     403        imageinput=[PathName FileName];%complete file name
     404     
     405    end   
     406    fileinput=imageinput;
     407    [tild, tild,ImaExt]=fileparts(imageinput);
     408end
     409[RootPath,RootFile,i1_series,tild,j1_series,tild,NomTypeIma,FileType,Object]=find_file_series(fileinput);
     410if strcmp(NomTypeInput,'*')% movies will be opened at the first frame
     411    i1=1;
     412    i2=[];
     413    j1=[];
     414    j2=[];
     415end
     416switch FileType
    408417    case {'image','multimage','video'}
    409          imageinput=fileinput;
    410          NomTypeIma=NomTypeInput;
    411          ext_ima=ExtInput;
    412418    otherwise
    413         errormsg='invalid input file: enter an image, a movie or .nc file';
    414 end
    415 [RootPath,RootFile,i1_series,i2_series,j1_series,j2_series,NomTypeIma,ImageType,Object]=find_file_series(imageinput);
     419        errormsg='invalid input file: enter an image, a movie or civ .nc file';
     420        return
     421end
    416422RootName=fullfile(RootPath,RootFile);
    417423set(handles.RootName,'String',RootName)
     424browse=get(handles.RootName,'UserData');
     425browse.nom_type_nc=NomTypeNc;
     426browse.incr_pair=[0 0];%default
     427
     428%% fill reference indices from the input file indices
     429num_ref_i=i1;%efaulmt ref index
     430if ~isempty(i2)
     431    num_ref_i=floor((num_ref_i+i2)/2);
     432end
     433num_ref_j=j1;
     434if ~isempty(j2)
     435    num_ref_i=floor((num_ref_j+j2)/2);
     436end
     437
     438%% scan the images if a civ file has been opened
     439if ~isempty(NomTypeNc)
     440[RootPath,RootFile,i1_series,tild,j1_series,tild,NomTypeIma,ImageType,Object]=find_file_series(imageinput);
     441end
    418442MaxIndex_i=max(i1_series(i1_series>0));
    419443MaxIndex_j=max(j1_series(j1_series>0));
    420 
    421 num_ref_i=i1;%efaulmt ref index
    422 num_ref_j=j1;
    423 browse=get(handles.RootName,'UserData');
    424 browse.nom_type_nc=NomTypeNc;
    425 browse.nom_type_ima=NomTypeInput;
    426 browse.incr_pair=[0 0];%default
    427 
    428 % % form=imformats(ext_input(2:end));
    429 % check_letter=0;
    430 % check_separator=0;
    431 % if ~isempty(ext_input)&&(~isempty(imformats(ext_input(2:end)))||strcmpi(ext_input,'.avi'))% if the extension corresponds to an image or movie format recognized by Matlab
    432 %     ext_ima=ext_input;
    433 %     nom_type_ima=nom_type_input;
    434 %     imagename=fileinput;
    435 %     check_letter=~isempty(regexp(nom_type_ima,'[a|A]$'));%detect pair label by letter
    436 % else %case of netcdf input file, look for corresponding images
    437 %     nom_type_nc=nom_type_input;
    438 %     imagename=fullfile_uvmat(RootPath,[],RootFile,ext_ima,nom_type_ima,1,[],1);
    439 %     %imagename=name_generator(fullfile(RootPath,RootFile),1,1,ext_ima,nom_type_ima);
    440 %     i1_str='';
    441 %     j1_str='';
    442 %     if ~isnan(i2)
    443 %         num_ref_i=floor((num_ref_i+i2)/2);% reference image number corresponding to the file
    444 %         browse.incr_pair(1)=i2-i1;
    445 %         browse.incr_pair(2)=0;
    446 %     end
    447 %     %TODO: read the image name in the netcdf file (if documented)
    448 %     %look for double image series '_i_j'
    449 %     check_letter=~isempty(regexp(nom_type_nc,'[ab|AB]$'));%detect pair label by letter
    450 %     if check_letter
    451 %         j1_str=nom_type_nc(end-1);
    452 %         r=regexp(nom_type_nc,'_(?<num1>\d+)','names');
    453 %         if ~isempty(r)
    454 %             i1_str=r.num1;
    455 %         end
    456 %     else
    457 %         NomTypeIma=regexprep(nom_type_nc,'-\d','');%
    458 %         r_end=regexp(NomTypeIma,'.\D(?<num2>\d+$','names');
    459 %         if ~isempty(r_end)
    460 %             j1_str=r.num2;
    461 %         end
    462 %     end
    463 %     r=regexp(NomTypeIma,'_(?<num1>\d+)','names');
    464 %     if ~isempty(r)
    465 %         i1_str=r.num1;
    466 %     end 
    467 %     dirima=dir([RootName '_' i1_str '_' j1_str '.*']);
    468 %     if isempty(dirima)
    469 %         % look for images series  with sub marker '_'
    470 %         dirima=dir([RootName '_*' i1_str  '.*']);
    471 %         if isempty(dirima)
    472 %             % look for other images series
    473 %             dirima=dir([RootName '*' i1_str '.*']);
    474 %             if isempty(dirima)
    475 %                 % look for other images series witth letter appendix
    476 %                 appendix=char(96+j1_str);
    477 %                 dirima=dir([RootName '*' i1_str appendix '.*']);
    478 %             end
    479 %         end
    480 %     end
    481 %     for ilist=1:numel(dirima)
    482 %         %[pp,ff,i1_str,i2_str,j1_str,j2_str,ext_list,nom_type_list]=name2display(dirima(ilist).name);
    483 %         [tild,tild,tild,i1,i2,j1,j2,ext_list,nom_type_list]=fileparts_uvmat(dirima(ilist).name);
    484 %         form=imformats(ext_list(2:end));
    485 %         if ~isempty(form)% if the extension corresponds to an image format recognized by Matlab
    486 %             ext_ima=ext_list;
    487 %             nom_type_ima=nom_type_list;
    488 % %             i1=str2double(i1_str);
    489 % %             j1=str2double(j1_str);
    490 % %             i2=str2double(i2_str);
    491 % %             j2=str2double(j2_str);         
    492 %             % set the range of fields (1:1 by default) and selected pair
    493 %             if isempty(i2)
    494 %                 num_ref_i=i1;
    495 %             else
    496 %                 num_ref_i=floor((i1+i2)/2);
    497 %                 browse.incr_pair(1)=i2-i1;
    498 %                 browse.incr_pair(2)=0;
    499 %             end
    500 %             if isempty(j2)
    501 %                 if isempty(j1)
    502 %                     num_ref_j=1;
    503 %                 else
    504 %                     num_ref_j=j1;
    505 %                 end
    506 %             else
    507 %                 num_ref_j=floor((j1+j2)/2);
    508 %                 browse.incr_pair(2)=j2-j1;
    509 %             end
    510 %             break
    511 %         end
    512 %     end
    513 % end
    514 
    515444
    516445%% look for an image documentation file
     
    528457end
    529458set(handles.ImaDoc,'String',ext_imadoc)% display the extension name for the image documentation file used
    530 
    531459
    532460%%  read the time in the image documentation file 
     
    594522        case {'.avi','.AVI'}
    595523            nom_type_ima='*';
    596             ext_ima=ext_imadoc;
     524            ImaExt=ext_imadoc;
    597525            set(handles.ListPairMode,'Value',1);
    598526            set(handles.ListPairMode,'String',{'series(Di)'})
     
    632560set(handles.CoordUnit,'String',CoordUnit)
    633561set(handles.SearchRange,'UserData',[pxcmx_search pxcmy_search]);
    634 set(handles.ImaExt,'String',ext_ima)
     562set(handles.ImaExt,'String',ImaExt)
     563set(handles.NomType,'String',NomTypeIma)
    635564set(handles.ref_i,'String',num2str(num_ref_i))
    636565set(handles.first_i,'String',num2str(num_ref_i));
     
    639568set(handles.first_j,'String',num2str(num_ref_j));
    640569set(handles.last_j,'String',num2str(num_ref_j));%
     570% set(handles.civ,'UserData',CivData)
    641571
    642572%% set the civ options depending on the input file content
    643 % ind_opening=0;%default
    644 % if isequal(ext_input,'.nc')
    645 %     browse.nom_type_nc=nom_type_input;
    646 %     ind_opening=2;% propose 'fix' as the default option
    647 %     Data=nc2struct(fileinput,'ListGlobalAttribute','CivStage','absolut_time_T0','fix','patch','civ2','fix2');
    648 %     if isfield(Data,'Txt')
    649 %         msgbox_uvmat('ERROR',Data.Txt)
    650 %         return
    651 %     end
    652 %     if ~isempty(Data.CivStage)%test for civ files
    653 %         ind_opening=Data.CivStage;
    654 %         set(handles.ListPairMode,'Value',3)
    655 %     end
    656 % end
    657573ListOptions={'CheckCiv1', 'CheckFix1' 'CheckPatch1', 'CheckCiv2', 'CheckFix2', 'CheckPatch2'};
    658574for index = 1:ind_opening
     
    664580update_CivOptions(handles,1)
    665581
    666 
    667582%%  set the menus of image pairs and default selection for civ   %%%%%%%%%%%%%%%%%%%
    668 % test_ima_i=numel(nom_type_ima)>1 && isempty(regexp(nom_type_ima(2:end),'\D','once'))%=1 for images with single indexing
    669 % TODO: determine MaxIndex_i and MaxIndex_j using find_file_series (in the absence of xml file)
    670 % try
    671583check_letter=~isempty(regexp(NomTypeIma,'[ab|AB]$'));%detect pair label by letter
    672584if ~check_letter|| isequal(NomTypeNc,'_1-2')|| (MaxIndex_j==1)
     
    680592else
    681593    set(handles.ListPairMode,'String',{'pair j1-j2';'series(Dj)';'series(Di)'})%multiple choice
    682     if  MaxIndex_j <= 10
     594    if strcmp(NomTypeNc,'_1-2_1')
     595        set(handles.ListPairMode,'Value',3)% advise 'series(Di)'
     596    elseif  MaxIndex_j <= 10
    683597        set(handles.ListPairMode,'Value',1)% advice 'pair j1-j2' except in MaxIndex_j is large
    684598    end
    685599end
    686 % end
    687600
    688601%% update the subdirectory display
     
    728641
    729642%% store info
    730 % browse.nom_type_ima=nom_type_ima;
    731643set(handles.RootName,'UserData',browse)% store the nomenclature type
    732644
    733645%% list the possible index pairs, depending on the option set in ListPairMode
    734646ListPairMode_Callback([], [], handles)
    735 browse=get(handles.RootName,'UserData');
    736647
    737648%% store the root input filename for future opening
    738649profil_perso=fullfile(prefdir,'uvmat_perso.mat');
    739 % RootPath=fileparts(RootName);
    740650if exist(profil_perso,'file')
    741651    save (profil_perso,'RootPath','-append'); %store the root name for future opening of uvmat
     
    769679    set(handles.ListSubdirCiv2,'Value',ilist)
    770680else % if Civ1 data already exist
    771     find_netcpair_civ1(handles); %update the list of available pairs from netcdf files in the new directory
     681    find_netcpair_civ(handles,1); %update the list of available pairs from netcdf files in the new directory
    772682end
    773683
     
    787697%update the list of available pairs from netcdf files in the new directory
    788698if ~get(handles.CheckCiv2,'Value') && ~get(handles.CheckCiv1,'Value') && ~get(handles.CheckFix1,'Value') && ~get(handles.CheckPatch1,'Value')
    789     find_netcpair_civ2(handles);
     699    find_netcpair_civ(handles,2);
    790700end
    791701
     
    849759set(handles.ListSubdirCiv1,'Visible','on')
    850760if ~opening
    851 find_netcpair_civ1(handles) % select the available netcdf files
     761find_netcpair_civ(handles,1) % select the available netcdf files
    852762end
    853763if max(checkbox(4:6))% case of civ2 pair choice needed
     
    858768    set(handles.ListPairCiv2,'Visible','on')
    859769    if ~opening
    860     find_netcpair_civ2(handles) % select the available netcdf files
     770    find_netcpair_civ(handles,2) % select the available netcdf files
    861771    end
    862772else
     
    17571667    end
    17581668end
    1759 %[RootPath,RootFile,field_count,str2,str_a,str_b,ext,nom_type,SubDir]=name2display(fileresu);
    17601669[RootPath,SubDir,RootFile]=fileparts_uvmat(fileresu);
    17611670namedoc=fullfile(RootPath,SubDir,RootFile);
     
    17711680    end
    17721681end
     1682t=struct2xml(Param);
     1683save(t,[namedoc '.xml']); %save GUI  parameters as xml file
    17731684saveas(gcbf,namefigfull);%save the interface with name namefigfull (A CHANGER EN FICHIER  .xml)
    17741685
     
    18441755val=get(handles.ListCompareMode,'Value');
    18451756compare=compare_list{val};
    1846 if strcmp(compare,'displacement')
     1757if strcmp(compare,'displacement')||strcmp(compare,'shift')
    18471758    mode='displacement';
    18481759else
     
    18531764%time=get(handles.RootName,'UserData'); %get the set of times
    18541765ext_ima=get(handles.ImaExt,'String');
    1855 nom_type_nc=browse.nom_type_nc;
    1856 if isfield(browse,'nom_type_ima')
    1857     nom_type_ima2=browse.nom_type_ima;
    1858 end
    1859 if isempty(nom_type_ima2),nom_type_ima2='1';end; %default
    1860 if isempty(nom_type_nc),nom_type_nc='_1-2';end; %default
     1766if strcmp(compare,'displacement')
     1767    nom_type_ima1='*';
     1768else
     1769    nom_type_ima1=get(handles.NomType,'String');
     1770end
     1771nom_type_nc=nomtype2pair(nom_type_ima1,mode);
     1772
    18611773[num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2]=...
    18621774    find_pair_indices(handles,ref_i,ref_j,mode);
    18631775%determine the new filebase for 'displacement' ListPairMode (comparison of two series)
    18641776filebase_B=filebase;% root name of the second field series for stereo
    1865 if strcmp(compare,'displacement') || strcmp(compare,'stereo PIV')
    1866 %     test_disp=1;
    1867     nom_type_ima1=browse.nom_type_ima_1; %nomenclature type of the second file series
     1777if ~strcmp(compare,'PIV')
    18681778    [Path2,Name2]=fileparts(filebase_B);
    18691779    Path1=Path2;
     
    18801790%     test_disp=0;
    18811791    filebase_A=filebase;
    1882     nom_type_ima1=nom_type_ima2;
     1792    nom_type_ima2=nom_type_ima1;
    18831793    filebase_AB=filebase;
    18841794end
    1885 if strcmp(compare,'displacement')
     1795if strcmp(compare,'displacement')||strcmp(compare,'shift')
    18861796    filebase_ima1=filebase_A;
    18871797    filebase_ima2=filebase_B;
     
    23532263                for j=1:nbslice
    23542264                    filename=fullfile_uvmat(RootPath_A,subdir_civ2,RootFile_A,'.nc',nom_type_nc,num1_civ2(ifile),num2_civ2(ifile),num_a_civ2(j),num_b_civ2(j));
    2355 %                     filename=name_generator(filebase_A,num1_civ2(ifile),num_a_civ2(j),'.nc',...
    2356 %                         nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
    23572265                    filecell.ncA.civ2(ifile,j)={filename};
    23582266                    if ~exist(filename,'file')
     
    23722280        for j=1:nbslice
    23732281            filename=fullfile_uvmat(RootPath_nc,subdir_civ2,RootFile_nc,'.nc',nom_type_nc,num1_civ2(ifile),num2_civ2(ifile),num_a_civ2(j),num_b_civ2(j));
    2374 %             filename=name_generator(filebase_nc,num1_civ2(ifile),num_a_civ2(j),'.nc',...
    2375 %                 nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);
    23762282            detect=exist(filename,'file')==2;
    23772283            filecell.nc.civ2(ifile,j)={filename};
     
    24252331            for j=1:nbslice
    24262332                 filename=fullfile_uvmat(RootPath_nc,subdir_civ2,RootFile_nc,'.nc',nom_type_nc,num1_civ2(ifile),num2_civ2(ifile),num_a_civ2(j),num_b_civ2(j));
    2427 %                 filename=name_generator(filebase_nc,num1_civ2(ifile),num_a_civ2(j),'.nc',...
    2428 %                     nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
    24292333                filecell.nc.civ2(ifile,j)={filename};
    24302334                if ~exist(filename,'file')
     
    24552359            for j=1:nbslice
    24562360                 filename=fullfile_uvmat(RootPath_AB,subdir_civ1,RootFile_AB,'.nc',nom_type_nc,num1_civ1(ifile),num2_civ1(ifile),num_a_civ1(j),num_b_civ1(j));
    2457 %                 filename=name_generator(filebase_AB,num1_civ1(ifile),num_a_civ1(j),'.nc',...
    2458 %                     nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1);%
    24592361                filecell.st(ifile,j)={filename};
    24602362            end
     
    24652367            for j=1:nbslice
    24662368                 filename=fullfile_uvmat(RootPath_AB,subdir_civ2,RootFile_AB,'.nc',nom_type_nc,num1_civ2(ifile),num2_civ2(ifile),num_a_civ2(j),num_b_civ2(j));
    2467 %                 filename=name_generator(filebase_AB,num1_civ2(ifile),num_a_civ2(j),'.nc',...
    2468 %                     nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
    24692369                filecell.st(ifile,j)={filename};
    24702370            end
     
    26902590function ListCompareMode_Callback(hObject, eventdata, handles)
    26912591%------------------------------------------------------------------------
    2692 test=get(handles.ListCompareMode,'Value');
    2693 if test==2 || test==3 % case 'displacement' or 'stereo PIV'
     2592menu=get(handles.ListCompareMode,'String');
     2593val=get(handles.ListCompareMode,'Value');
     2594option=menu{val};
     2595if ~strcmp(option,'PIV') % case 'displacement' or 'stereo PIV'
    26942596    filebase=get(handles.RootName,'String');
    26952597    browse=get(handles.RootName,'Userdata');
    2696     browse.nom_type_ima1=browse.nom_type_ima;
     2598   % browse.nom_type_ima1=browse.nom_type_ima;
    26972599    set(handles.RootName,'UserData',browse);
    26982600    set(handles.sub_txt,'Visible','on')
     
    27352637        msgbox_uvmat('ERROR','The second image series must be in the same directory as the first one')
    27362638        return
    2737      end
    2738 %     set(handles.RootName_1,'String',name);
    2739     %[RootPath,RootFile,field_count,str2,str_a,str_b,xx,nom_type,SubDir]=name2display(name);
     2639    end
    27402640    [tild,tild,RootFile,tild,tild,tild,tild,tild,nom_type]=fileparts_uvmat(name);
    27412641    set(handles.RootName_1,'String',RootFile);
    27422642    browse=get(handles.RootName,'UserData');
    2743     browse.nom_type_ima_1=nom_type;
     2643    %browse.nom_type_ima_1=nom_type;
    27442644    set(handles.RootName,'UserData',browse)
    27452645   
     
    27492649        return
    27502650    end
    2751    
    2752     %% check coincidence of image sizes
    2753 %     ref_i=get(handles.ref_i,'string');
    2754 %     ref_j=get(handles.ref_j,'string');
    2755 %     [filecell,num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2,nom_type_nc]=set_civ_filenames(handles,ref_i,ref_j,[1 0 0 0 0 0]);
    2756 %     A=imread(filecell.ima1.checkciv1{1});
    2757 %     A_1=imread(fileinput);
    2758 %     npxy=size(A);
    2759 %     npxy_1=size(A_1);
    2760 %     if ~isequal(size(A),size(A_1))
    2761 %         msgbox_uvmat('ERROR','The two input image series do not have the same size')
    2762 %         return
    2763 %     end
     2651
    27642652else
    27652653    set(handles.ListPairMode,'Visible','on')
     
    27702658    set(handles.ListPairMode,'Value',1)
    27712659    set(handles.ListPairMode,'String',mode_store)
    2772 %     set(handles.test_stereo1,'Value',0)
    27732660    set(handles.CheckStereo,'Value',0)
    27742661    set(handles.ListPairMode,'Value',1) % mode 'civX' selected by default
    27752662end
    2776 if test==3 && get(handles.CheckPatch1,'Value')
     2663if strcmp(option,'stereo PIV') && get(handles.CheckPatch1,'Value')
    27772664    set(handles.CheckStereo,'Visible','on')
    27782665else
    27792666    set(handles.CheckStereo,'Visible','off')
    27802667end
    2781 if test==3 && get(handles.CheckPatch2,'Value')
     2668if strcmp(option,'stereo PIV') && get(handles.CheckPatch2,'Value')
    27822669    set(handles.CheckStereo,'Visible','on')
    27832670else
     
    27972684val=get(handles.ListCompareMode,'Value');
    27982685compare=compare_list{val};
    2799 if strcmp(compare,'displacement')
     2686if strcmp(compare,'displacement')||strcmp(compare,'shift')
    28002687    mode='displacement';
    28012688else
     
    28212708% are relative to the reference indices ref_i and ref_j respectively.
    28222709if isequal(mode,'pair j1-j2')%| isequal(mode,'st_pair j1-j2')
    2823 
    28242710    dt=1;
    28252711    displ='';
     
    28502736    displ_num(3,:)=0;
    28512737    displ_num(4,:)=0;
    2852     set(handles.jtext,'Visible','Off')
    2853     set(handles.first_j,'Visible','Off')
    2854     set(handles.last_j,'Visible','Off')
    2855     set(handles.incr_j,'Visible','Off')
    2856     set(handles.nb_field2,'Visible','Off')
    2857     set(handles.ref_j,'Visible','Off')
     2738    enable_j(handles, 'off')
    28582739elseif isequal(mode,'series(Dj)') %| isequal(mode,'st_series(Dj)')
    28592740    index=1:200;
     
    28612742    displ_num(2,index)=ceil(index/2);
    28622743    displ_num(3:4,index)=zeros(2,200);
    2863 %     for index=1:min(nbfield2-1,200)
    2864 %         displ_num(1,index)=-floor(index/2);
    2865 %         displ_num(2,index)=ceil(index/2);
    2866 %         displ_num(3,index)=0;
    2867 %         displ_num(4,index)=0;
    2868 %     end
    2869     set(handles.jtext,'Visible','On')
    2870     set(handles.first_j,'Visible','On')
    2871     set(handles.last_j,'Visible','On')
    2872     set(handles.incr_j,'Visible','On')
    2873     set(handles.nb_field2,'Visible','On')
    2874     set(handles.ref_j,'Visible','On')
    2875 %     if nbfield > 1
    2876 %         set(handles.itext,'Visible','On')
    2877 %         set(handles.first_i,'Visible','On')
    2878 %         set(handles.last_i,'Visible','On')
    2879 %         set(handles.incr_i,'Visible','On')
    2880 %         set(handles.nb_field,'Visible','On')
    2881 %         set(handles.ref_i,'Visible','On')
    2882 %     else
    2883 %         set(handles.itext,'Visible','Off')
    2884 %         set(handles.first_i,'Visible','Off')
    2885 %         set(handles.last_i,'Visible','Off')
    2886 %         set(handles.incr_i,'Visible','Off')
    2887 %         set(handles.nb_field,'Visible','Off')
    2888 %         set(handles.ref_i,'Visible','Off')
    2889 %     end
     2744    enable_j(handles, 'on')
    28902745elseif isequal(mode,'series(Di)') %| isequal(mode,'st_series(Di)')
    28912746    index=1:200;
     
    28932748    displ_num(3,index)=-floor(index/2);
    28942749    displ_num(4,index)=ceil(index/2);
    2895 %     for index=1:200%min(nbfield-1,200)
    2896 %         displ_num(1,index)=0;
    2897 %         displ_num(2,index)=0;
    2898 %         displ_num(3,index)=-floor(index/2);
    2899 %         displ_num(4,index)=ceil(index/2);
    2900 %     end
    2901     set(handles.itext,'Visible','On')
    2902     set(handles.first_i,'Visible','On')
    2903     set(handles.last_i,'Visible','On')
    2904     set(handles.incr_i,'Visible','On')
    2905     set(handles.nb_field,'Visible','On')
    2906     set(handles.ref_i,'Visible','On')
     2750    enable_i(handles, 'on')
    29072751    if nbfield2 > 1
    2908         set(handles.jtext,'Visible','On')
    2909         set(handles.first_j,'Visible','On')
    2910         set(handles.last_j,'Visible','On')
    2911         set(handles.incr_j,'Visible','On')
    2912         set(handles.nb_field2,'Visible','On')
    2913         set(handles.ref_j,'Visible','On')
     2752        enable_j(handles, 'on')
    29142753    else
    2915         set(handles.jtext,'Visible','Off')
    2916         set(handles.first_j,'Visible','Off')
    2917         set(handles.last_j,'Visible','Off')
    2918         set(handles.incr_j,'Visible','Off')
    2919         set(handles.nb_field2,'Visible','Off')
    2920         set(handles.ref_j,'Visible','Off')
     2754        enable_j(handles, 'off')
    29212755    end
    29222756elseif isequal(mode,'displacement')%the pairs have the same indices
     
    29262760    displ_num(4,1)=0;
    29272761    if nbfield > 1 || nbfield==0
    2928         set(handles.itext,'Visible','On')
    2929         set(handles.first_i,'Visible','On')
    2930         set(handles.last_i,'Visible','On')
    2931         set(handles.incr_i,'Visible','On')
    2932         set(handles.nb_field,'Visible','On')
    2933         set(handles.ref_i,'Visible','On')
     2762        enable_i(handles, 'on')
    29342763    else
    2935         set(handles.itext,'Visible','Off')
    2936         set(handles.first_i,'Visible','Off')
    2937         set(handles.last_i,'Visible','Off')
    2938         set(handles.incr_i,'Visible','Off')
    2939         set(handles.nb_field,'Visible','Off')
    2940         set(handles.ref_i,'Visible','Off')
     2764        enable_j(handles, 'off')
    29412765    end
    29422766    if nbfield2 > 1
    2943         set(handles.jtext,'Visible','On')
    2944         set(handles.first_j,'Visible','On')
    2945         set(handles.last_j,'Visible','On')
    2946         set(handles.incr_j,'Visible','On')
    2947         set(handles.nb_field2,'Visible','On')
    2948         set(handles.ref_j,'Visible','On')
     2767        enable_j(handles, 'on')
    29492768    else
    2950         set(handles.jtext,'Visible','Off')
    2951         set(handles.first_j,'Visible','Off')
    2952         set(handles.last_j,'Visible','Off')
    2953         set(handles.incr_j,'Visible','Off')
    2954         set(handles.nb_field2,'Visible','Off')
    2955         set(handles.ref_j,'Visible','Off')
     2769        enable_j(handles, 'off')
    29562770    end
    29572771end
    29582772set(handles.ListPairCiv1,'UserData',displ_num);
    2959 find_netcpair_civ1( handles)
    2960 find_netcpair_civ2(handles)
    2961 browse=get(handles.RootName,'UserData');
     2773find_netcpair_civ( handles,1)
     2774% find_netcpair_civ2(handles)
     2775
     2776function enable_i(handles, state)
     2777set(handles.itext,'Visible',state)
     2778set(handles.first_i,'Visible',state)
     2779set(handles.last_i,'Visible',state)
     2780set(handles.incr_i,'Visible',state)
     2781set(handles.nb_field,'Visible',state)
     2782set(handles.ref_i,'Visible',state)
     2783
     2784function enable_j(handles, state)
     2785set(handles.jtext,'Visible',state)
     2786set(handles.first_j,'Visible',state)
     2787set(handles.last_j,'Visible',state)
     2788set(handles.incr_j,'Visible',state)
     2789set(handles.nb_field2,'Visible',state)
     2790set(handles.ref_j,'Visible',state)
     2791
    29622792
    29632793%------------------------------------------------------------------------
     
    30522882mode_value=get(handles.ListPairMode,'Value');
    30532883mode=mode_list{mode_value};
    3054 find_netcpair_civ1(handles);% update the menu of pairs depending on the available netcdf files
     2884find_netcpair_civ(handles,1);% update the menu of pairs depending on the available netcdf files
    30552885if isequal(mode,'series(Di)') || ...% we do patch2 only
    30562886        (get(handles.CheckCiv2,'Value')==0 && get(handles.CheckCiv1,'Value')==0 && get(handles.CheckFix1,'Value')==0 && get(handles.CheckPatch1,'Value')==0)
    3057     find_netcpair_civ2( handles);
     2887    find_netcpair_civ( handles,2);
    30582888end
    30592889
     
    30652895mode=mode_list{mode_value};
    30662896if isequal(get(handles.CheckCiv1,'Value'),0)|| isequal(mode,'series(Dj)')
    3067     find_netcpair_civ1(handles);% update the menu of pairs depending on the available netcdf files
     2897    find_netcpair_civ(handles,1);% update the menu of pairs depending on the available netcdf files
    30682898end
    30692899if isequal(mode,'series(Dj)') || ...
    30702900        (get(handles.CheckCiv2,'Value')==0 && get(handles.CheckCiv1,'Value')==0 && get(handles.CheckFix1,'Value')==0 && get(handles.CheckPatch1,'Value')==0)
    3071     find_netcpair_civ2(handles);
     2901    find_netcpair_civ(handles,2);
    30722902end
    30732903%
     2904
    30742905%------------------------------------------------------------------------
    30752906% determine the menu for checkciv1 pairs depending on existing netcdf file at the middle of
    30762907% the field series set by first_i, incr, last_i
    3077 function find_netcpair_civ1(handles)
     2908function find_netcpair_civ(handles,index)
    30782909%------------------------------------------------------------------------
    30792910set(gcf,'Pointer','watch')
    3080 %nomenclature types
    30812911filebase=get(handles.RootName,'String');
    30822912[filepath,Nme,ext_dir]=fileparts(filebase);
     
    30952925    mode=mode_list{mode_value};
    30962926end
    3097 
    3098 % nomenclature type of the .nc files
    3099 nom_type_ima=[];%default
    3100 if isfield(browse,'nom_type_ima')
    3101     nom_type_ima=browse.nom_type_ima;
    3102 end
    3103 
    3104 %determine nom_type_nc:
    3105 nom_type_nc=[];%default
     2927nom_type_ima=get(handles.NomType,'String');
     2928
     2929%% determine nom_type_nc, nomenclature type of the .nc files:
     2930nom_type_nc='';%default
    31062931if isfield(browse,'nom_type_nc')
    31072932    nom_type_nc=browse.nom_type_nc;
    31082933end
    31092934if isempty(nom_type_nc)
    3110     [nom_type_nc]=nomtype2pair(nom_type_ima,isequal(mode,'series(Di)'),isequal(mode,'series(Dj)'));
     2935    [nom_type_nc]=nomtype2pair(nom_type_ima,mode);
    31112936end
    31122937browse.nom_type_nc=nom_type_nc;
     
    31152940%reads .nc subdirectoy and image numbers from the interface
    31162941subdir_civ1=get(handles.txt_SubdirCiv1,'String');%subdirectory subdir_civ1 for the netcdf data
     2942subdir_civ2=get(handles.txt_SubdirCiv2,'String');%subdirectory subdir_civ2 for the netcdf data
    31172943ref_i=str2double(get(handles.ref_i,'String'));
    31182944if isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')
     
    31222948end
    31232949time=get(handles.ImaDoc,'UserData');%get the set of times
    3124 % if isempty(time)
    3125 %     time=[0 1];
    3126 % end
    31272950TimeUnit=get(handles.TimeUnit,'String');
    31282951checkframe=strcmp(TimeUnit,'frame');
    3129 
    31302952displ_num=get(handles.ListPairCiv1,'UserData');
    31312953
     
    31512973%% case with no Civ1 operation, netcdf files need to exist for reading
    31522974[RootPath,RootFile]=fileparts(filebase);
     2975if index==1 % case civ1
    31532976if ~get(handles.CheckCiv1,'Value') %
    31542977    if ~exist(fullfile(filepath,subdir_civ1,ext_dir),'dir')
     
    31602983        filename=fullfile_uvmat(RootPath,subdir_civ1,RootFile,'.nc',nom_type_nc,...
    31612984            ref_i+displ_num(3,ipair),ref_i+displ_num(4,ipair),ref_j+displ_num(1,ipair),ref_j+displ_num(2,ipair));
    3162       %  filename=name_generator(filebase,ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair),'.nc',nom_type_nc,1,...
    3163        %     ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair),subdir_civ1);
    31642985        select(ipair)=exist(filename,'file')==2;% put flag to 0 if the file does not exist
    31652986    end   
     
    31722993            num_j2=ref_j+ceil(browse.incr_pair(2)/2);
    31732994            filename=fullfile_uvmat(RootPath,subdir_civ1,RootFile,'.nc',nom_type_nc,num_i1,num_i2,num_j1,num_j2);
    3174             %filename=name_generator(filebase,num_i1,num_j1,'.nc',nom_type_nc,1,num_i2,num_j2,subdir_civ1);
    31752995            select(1)=exist(filename,'file')==2;
    31762996            testpair=1;
     
    31863006        end
    31873007    end
     3008end
     3009else %case civ2
     3010if ~get(handles.CheckCiv2,'Value') && ~get(handles.CheckCiv1,'Value') && ~get(handles.CheckFix1,'Value') && ~get(handles.CheckPatch1,'Value')
     3011    if ~exist(fullfile(filepath,subdir_civ2,ext_dir),'dir')
     3012        errordlg(['no civ2 file available: subdirectory ' subdir_civ2 ' does not exist'])
     3013        set(handles.ListPairCiv2,'Value',1);
     3014        set(handles.ListPairCiv2,'String',{''});
     3015        return
     3016    end
     3017    for ipair=1:nbpair
     3018        filename=fullfile_uvmat(RootPath,subdir_civ1,RootFile,'.nc',nom_type_nc,...
     3019            ref_i+displ_num(3,ipair),ref_i+displ_num(4,ipair),ref_j+displ_num(1,ipair),ref_j+displ_num(2,ipair));
     3020        select(ipair)=exist(filename,'file')==2;
     3021    end
     3022    if  isequal(select,zeros(size(1:nbpair)))
     3023        if isfield(browse,'incr_pair')
     3024            num_i1=ref_i-floor(browse.incr_pair(1)/2);
     3025            num_i2=ref_i+floor((browse.incr_pair(1)+1)/2);
     3026            num_j1=ref_j-floor(browse.incr_pair(2)/2);
     3027            num_j2=ref_j+floor((browse.incr_pair(2)+1)/2);
     3028            filename=fullfile_uvmat(RootPath,subdir_civ2,RootFile,'.nc',nom_type_nc,num_i1,num_i2,num_j1,num_j2);
     3029            select(1)=exist(filename,'file')==2;
     3030        else
     3031            if  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
     3032                msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index j=' num2str(ref_j) ' and subdirectory ' subdir_civ2])
     3033            else
     3034                msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index i=' num2str(ref_i) ' and subdirectory ' subdir_civ2])
     3035            end
     3036            set(handles.ListPairCiv2,'Value',1);
     3037            set(handles.ListPairCiv2,'String',{''});
     3038            return
     3039        end
     3040    end
     3041end
    31883042end
    31893043
     
    32703124% determine the menu for checkciv2 pairs depending on the existing netcdf file at the
    32713125%middle of the series set by first_i, incr, last_i
    3272 function find_netcpair_civ2(handles)
    3273 %------------------------------------------------------------------------
    3274 set(gcf,'Pointer','watch')
    3275 %nomenclature types
    3276 filebase=get(handles.RootName,'String');
    3277 [filepath,Nme,ext_dir]=fileparts(filebase);
    3278 browse=get(handles.RootName,'UserData');
    3279 compare_list=get(handles.ListCompareMode,'String');
    3280 val=get(handles.ListCompareMode,'Value');
    3281 compare=compare_list{val};
    3282 if strcmp(compare,'displacement')
    3283     mode='displacement';
    3284 else
    3285     mode_list=get(handles.ListPairMode,'String');
    3286     if isempty(mode_list)
    3287         msgbox_uvmat('ERROR','please enter an input image or netcdf file')
    3288         return
    3289     end
    3290     mode_value=get(handles.ListPairMode,'Value');
    3291     mode=mode_list{mode_value};
    3292 end
    3293 
    3294 % nomenclature type of the .nc files
    3295 nom_type_ima='ima_num';%default
    3296 if isfield(browse,'nom_type_ima')
    3297     nom_type_ima=browse.nom_type_ima;
    3298 end
    3299 nom_type_nc='_1-2';%default
    3300 if isfield(browse,'nom_type_nc')
    3301     nom_type_nc=browse.nom_type_nc;
    3302 end
    3303 if isequal(nom_type_ima,'png_old') || isequal(nom_type_ima,'netc_old')|| isequal(nom_type_ima,'raw_SMD')|| isequal(nom_type_nc,'netc_old')
    3304     nom_type_nc='netc_old';%nom_type for the netcdf files
    3305 elseif isequal(nom_type_ima,'none')||isequal(nom_type_nc,'none')
    3306     nom_type_nc='none';
    3307 elseif isequal(nom_type_ima,'avi')||isequal(nom_type_ima,'_i')||isequal(nom_type_ima,'ima_num')||isequal(nom_type_nc,'_1-2')
    3308     nom_type_nc='_1-2';
    3309 else
    3310     if  isequal(mode,'series(Di)')%|isequal(mode,'st_series(Di)')
    3311         nom_type_nc='_1-2_1'; % PIV in volume
    3312     else
    3313         nom_type_nc='_1_1-2';
    3314     end
    3315 end
    3316 browse.nom_type_nc=nom_type_nc;
    3317 set(handles.RootName,'UserData',browse)
    3318 
    3319 %reads .nc subdirectory and image numbers from the interface
    3320 subdir_civ1=get(handles.txt_SubdirCiv1,'String');%subdirectory subdir_civ1 for the netcdf data
    3321 subdir_civ2=get(handles.txt_SubdirCiv2,'String');%subdirectory subdir_civ2 for the netcdf data
    3322 ref_i=str2double(get(handles.ref_i,'String'));
    3323 if isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')
    3324     ref_j=0;
    3325 else
    3326     ref_j=str2double(get(handles.ref_j,'String'));
    3327 end
    3328 time=get(handles.ImaDoc,'UserData'); %get the set of times
    3329 TimeUnit=get(handles.TimeUnit,'String');
    3330 checkframe=strcmp(TimeUnit,'frame');
    3331 % if isempty(time)
    3332 %     time=[0 1];%default
     3126% function find_netcpair_civ2(handles)
     3127% %------------------------------------------------------------------------
     3128% set(gcf,'Pointer','watch')
     3129% %nomenclature types
     3130% filebase=get(handles.RootName,'String');
     3131% [filepath,Nme,ext_dir]=fileparts(filebase);
     3132% browse=get(handles.RootName,'UserData');
     3133% compare_list=get(handles.ListCompareMode,'String');
     3134% val=get(handles.ListCompareMode,'Value');
     3135% compare=compare_list{val};
     3136% if strcmp(compare,'displacement')
     3137%     mode='displacement';
     3138% else
     3139%     mode_list=get(handles.ListPairMode,'String');
     3140%     if isempty(mode_list)
     3141%         msgbox_uvmat('ERROR','please enter an input image or netcdf file')
     3142%         return
     3143%     end
     3144%     mode_value=get(handles.ListPairMode,'Value');
     3145%     mode=mode_list{mode_value};
    33333146% end
    3334 displ_num=get(handles.ListPairCiv1,'UserData');
    3335 
    3336 %eliminate the first pairs inconsistent with the position
    3337 if isempty(displ_num)
    3338     nbpair=0;
    3339 else
    3340     nbpair=length(displ_num(1,:));%nbre of displayed pairs
    3341     if  isequal(mode,'series(Di)')% | isequal(mode,'st_series(Di)')
    3342         nbpair=min(2*ref_i-1,nbpair);%limit the number of pairs with positive first index
    3343     elseif  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
    3344         nbpair=min(2*ref_j-1,nbpair);%limit the number of pairs with positive first index
    3345     end
    3346 end
    3347 nbpair=min(200,nbpair);%limit the number of displayed pairs to 200
    3348 
    3349 %% look for existing processed pairs at the reference indices if Civ1 will not
    3350 % be performed, while the result is needed for next steps.
    3351 displ_pair={''}; %default
    3352 select=ones(size(1:nbpair));%default =1 for numbers of displayed pairs
    3353 [RootPath,RootFile]=fileparts(filebase);
    3354 if ~get(handles.CheckCiv2,'Value') && ~get(handles.CheckCiv1,'Value') && ~get(handles.CheckFix1,'Value') && ~get(handles.CheckPatch1,'Value')
    3355     if ~exist(fullfile(filepath,subdir_civ2,ext_dir),'dir')
    3356         errordlg(['no civ2 file available: subdirectory ' subdir_civ2 ' does not exist'])
    3357         set(handles.ListPairCiv2,'Value',1);
    3358         set(handles.ListPairCiv2,'String',{''});
    3359         return
    3360     end
    3361     for ipair=1:nbpair
    3362         filename=fullfile_uvmat(RootPath,subdir_civ1,RootFile,'.nc',nom_type_nc,...
    3363             ref_i+displ_num(3,ipair),ref_i+displ_num(4,ipair),ref_j+displ_num(1,ipair),ref_j+displ_num(2,ipair));
    3364        % filename=name_generator(filebase,ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair),'.nc',nom_type_nc,1,...
    3365         %    ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair),subdir_civ1);
    3366         select(ipair)=exist(filename,'file')==2;
    3367     end
    3368     if  isequal(select,zeros(size(1:nbpair)))
    3369         if isfield(browse,'incr_pair')
    3370             num_i1=ref_i-floor(browse.incr_pair(1)/2);
    3371             num_i2=ref_i+floor((browse.incr_pair(1)+1)/2);
    3372             num_j1=ref_j-floor(browse.incr_pair(2)/2);
    3373             num_j2=ref_j+floor((browse.incr_pair(2)+1)/2);
    3374             filename=fullfile_uvmat(RootPath,subdir_civ2,RootFile,'.nc',nom_type_nc,num_i1,num_i2,num_j1,num_j2);
    3375             %filename=name_generator(filebase,num_i1,num_j1,'.nc',nom_type_nc,1,num_i2,num_j2,subdir_civ2);
    3376             select(1)=exist(filename,'file')==2;
    3377         else
    3378             if  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
    3379                 msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index j=' num2str(ref_j) ' and subdirectory ' subdir_civ2])
    3380             else
    3381                 msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index i=' num2str(ref_i) ' and subdirectory ' subdir_civ2])
    3382             end
    3383             set(handles.ListPairCiv2,'Value',1);
    3384             set(handles.ListPairCiv2,'String',{''});
    3385             return
    3386         end
    3387     end
    3388 end
    3389 if isequal(mode,'series(Di)')
    3390     for ipair=1:nbpair
    3391         if select(ipair)
    3392             displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ];
    3393             if  ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
    3394                 dt=time(ref_i+displ_num(4,ipair)+1,ref_j+displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,ref_j+displ_num(1,ipair)+1);%time interval dt
    3395                 displ_pair{ipair}=[displ_pair{ipair} ' :dt= ' num2str(dt*1000)];
    3396             end
    3397         else
    3398             displ_pair{ipair}='...'; %pair not displayed in the menu
    3399         end
    3400     end
    3401 elseif isequal(mode,'series(Dj)') %| isequal(mode,'st_series(Dj)') % series on the j index
    3402     for ipair=1:nbpair
    3403         if select(ipair)
    3404             displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ];
    3405             if ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)&& displ_num(1,ipair)>=1 && displ_num(2,ipair)>=1
    3406                 dt=time(ref_i+displ_num(4,ipair)+1,ref_j+displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,ref_j+displ_num(1,ipair)+1);%time interval dt
    3407             else
    3408                 dt=1;
    3409             end
    3410                 displ_pair{ipair}=[displ_pair{ipair} ' :dt= ' num2str(dt*1000)];
    3411         else
    3412             displ_pair{ipair}='...'; %pair not displayed in the menu
    3413         end
    3414     end
    3415 elseif isequal(mode,'pair j1-j2')% | isequal(mode,'st_pair j1-j2') %case of pairs
    3416     for ipair=1:nbpair
    3417         if select(ipair)
    3418             if  ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair) && displ_num(1,ipair)>=1 && displ_num(2,ipair)>=1
    3419             dt=time(ref_i+displ_num(4,ipair)+1,displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,displ_num(1,ipair)+1);%time interval dt
    3420             else
    3421                 dt=1;
    3422             end
    3423             displ_pair{ipair}=['j= ' num2stra(displ_num(1,ipair)+1,nom_type_ima) '-' num2stra(displ_num(2,ipair)+1,nom_type_ima) ...
    3424                 ' :dt= ' num2str(dt*1000)];
    3425                
    3426         else
    3427             displ_pair{ipair}='...'; %pair not displayed in the menu
    3428         end
    3429     end
    3430 elseif isequal(mode,'displacement')
    3431     displ_pair={'Di=Dj=0'};
    3432 end
    3433 val=get(handles.ListPairCiv2,'Value');
    3434 ichoice=find(select,1);
    3435 if (isempty(ichoice) || ichoice < 1); ichoice=1; end;
    3436 if get(handles.CheckCiv2,'Value')==0 && get(handles.CheckCiv1,'Value')==0 && get(handles.CheckFix1,'Value')==0 && get(handles.CheckPatch1,'Value')==0
    3437     val=ichoice;% first valid pair proposed by default in the menu
    3438 end
    3439 if val>length(displ_pair')
    3440     set(handles.ListPairCiv2,'Value',1);% first valid pair proposed by default in the menu
    3441 else
    3442     set(handles.ListPairCiv2,'Value',val);
    3443 end
    3444 set(handles.ListPairCiv2,'String',displ_pair');
    3445 set(gcf,'Pointer','arrow')
     3147%
     3148% % nomenclature type of the .nc files
     3149% nom_type_ima='ima_num';%default
     3150% NomTypeIma=get(handles.NomType,'String');
     3151% nom_type_nc='_1-2';%default
     3152% if isfield(browse,'nom_type_nc')
     3153%     nom_type_nc=browse.nom_type_nc;
     3154% end
     3155% if isequal(nom_type_ima,'png_old') || isequal(nom_type_ima,'netc_old')|| isequal(nom_type_ima,'raw_SMD')|| isequal(nom_type_nc,'netc_old')
     3156%     nom_type_nc='netc_old';%nom_type for the netcdf files
     3157% elseif isequal(nom_type_ima,'none')||isequal(nom_type_nc,'none')
     3158%     nom_type_nc='none';
     3159% elseif isequal(nom_type_ima,'avi')||isequal(nom_type_ima,'_i')||isequal(nom_type_ima,'ima_num')||isequal(nom_type_nc,'_1-2')
     3160%     nom_type_nc='_1-2';
     3161% else
     3162%     if  isequal(mode,'series(Di)')%|isequal(mode,'st_series(Di)')
     3163%         nom_type_nc='_1-2_1'; % PIV in volume
     3164%     else
     3165%         nom_type_nc='_1_1-2';
     3166%     end
     3167% end
     3168% browse.nom_type_nc=nom_type_nc;
     3169% set(handles.RootName,'UserData',browse)
     3170%
     3171% %reads .nc subdirectory and image numbers from the interface
     3172% subdir_civ1=get(handles.txt_SubdirCiv1,'String');%subdirectory subdir_civ1 for the netcdf data
     3173% subdir_civ2=get(handles.txt_SubdirCiv2,'String');%subdirectory subdir_civ2 for the netcdf data
     3174% ref_i=str2double(get(handles.ref_i,'String'));
     3175% if isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')
     3176%     ref_j=0;
     3177% else
     3178%     ref_j=str2double(get(handles.ref_j,'String'));
     3179% end
     3180% time=get(handles.ImaDoc,'UserData'); %get the set of times
     3181% TimeUnit=get(handles.TimeUnit,'String');
     3182% checkframe=strcmp(TimeUnit,'frame');
     3183% % if isempty(time)
     3184% %     time=[0 1];%default
     3185% % end
     3186% displ_num=get(handles.ListPairCiv1,'UserData');
     3187%
     3188% %eliminate the first pairs inconsistent with the position
     3189% if isempty(displ_num)
     3190%     nbpair=0;
     3191% else
     3192%     nbpair=length(displ_num(1,:));%nbre of displayed pairs
     3193%     if  isequal(mode,'series(Di)')% | isequal(mode,'st_series(Di)')
     3194%         nbpair=min(2*ref_i-1,nbpair);%limit the number of pairs with positive first index
     3195%     elseif  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
     3196%         nbpair=min(2*ref_j-1,nbpair);%limit the number of pairs with positive first index
     3197%     end
     3198% end
     3199% nbpair=min(200,nbpair);%limit the number of displayed pairs to 200
     3200%
     3201% %% look for existing processed pairs at the reference indices if Civ1 will not
     3202% % be performed, while the result is needed for next steps.
     3203% displ_pair={''}; %default
     3204% select=ones(size(1:nbpair));%default =1 for numbers of displayed pairs
     3205% [RootPath,RootFile]=fileparts(filebase);
     3206% if ~get(handles.CheckCiv2,'Value') && ~get(handles.CheckCiv1,'Value') && ~get(handles.CheckFix1,'Value') && ~get(handles.CheckPatch1,'Value')
     3207%     if ~exist(fullfile(filepath,subdir_civ2,ext_dir),'dir')
     3208%         errordlg(['no civ2 file available: subdirectory ' subdir_civ2 ' does not exist'])
     3209%         set(handles.ListPairCiv2,'Value',1);
     3210%         set(handles.ListPairCiv2,'String',{''});
     3211%         return
     3212%     end
     3213%     for ipair=1:nbpair
     3214%         filename=fullfile_uvmat(RootPath,subdir_civ1,RootFile,'.nc',nom_type_nc,...
     3215%             ref_i+displ_num(3,ipair),ref_i+displ_num(4,ipair),ref_j+displ_num(1,ipair),ref_j+displ_num(2,ipair));
     3216%        % filename=name_generator(filebase,ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair),'.nc',nom_type_nc,1,...
     3217%         %    ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair),subdir_civ1);
     3218%         select(ipair)=exist(filename,'file')==2;
     3219%     end
     3220%     if  isequal(select,zeros(size(1:nbpair)))
     3221%         if isfield(browse,'incr_pair')
     3222%             num_i1=ref_i-floor(browse.incr_pair(1)/2);
     3223%             num_i2=ref_i+floor((browse.incr_pair(1)+1)/2);
     3224%             num_j1=ref_j-floor(browse.incr_pair(2)/2);
     3225%             num_j2=ref_j+floor((browse.incr_pair(2)+1)/2);
     3226%             filename=fullfile_uvmat(RootPath,subdir_civ2,RootFile,'.nc',nom_type_nc,num_i1,num_i2,num_j1,num_j2);
     3227%             %filename=name_generator(filebase,num_i1,num_j1,'.nc',nom_type_nc,1,num_i2,num_j2,subdir_civ2);
     3228%             select(1)=exist(filename,'file')==2;
     3229%         else
     3230%             if  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
     3231%                 msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index j=' num2str(ref_j) ' and subdirectory ' subdir_civ2])
     3232%             else
     3233%                 msgbox_uvmat('ERROR',['no civ2 file available for the selected reference index i=' num2str(ref_i) ' and subdirectory ' subdir_civ2])
     3234%             end
     3235%             set(handles.ListPairCiv2,'Value',1);
     3236%             set(handles.ListPairCiv2,'String',{''});
     3237%             return
     3238%         end
     3239%     end
     3240% end
     3241% if isequal(mode,'series(Di)')
     3242%     for ipair=1:nbpair
     3243%         if select(ipair)
     3244%             displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ];
     3245%             if  ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
     3246%                 dt=time(ref_i+displ_num(4,ipair)+1,ref_j+displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,ref_j+displ_num(1,ipair)+1);%time interval dt
     3247%                 displ_pair{ipair}=[displ_pair{ipair} ' :dt= ' num2str(dt*1000)];
     3248%             end
     3249%         else
     3250%             displ_pair{ipair}='...'; %pair not displayed in the menu
     3251%         end
     3252%     end
     3253% elseif isequal(mode,'series(Dj)') %| isequal(mode,'st_series(Dj)') % series on the j index
     3254%     for ipair=1:nbpair
     3255%         if select(ipair)
     3256%             displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ];
     3257%             if ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)&& displ_num(1,ipair)>=1 && displ_num(2,ipair)>=1
     3258%                 dt=time(ref_i+displ_num(4,ipair)+1,ref_j+displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,ref_j+displ_num(1,ipair)+1);%time interval dt
     3259%             else
     3260%                 dt=1;
     3261%             end
     3262%                 displ_pair{ipair}=[displ_pair{ipair} ' :dt= ' num2str(dt*1000)];
     3263%         else
     3264%             displ_pair{ipair}='...'; %pair not displayed in the menu
     3265%         end
     3266%     end
     3267% elseif isequal(mode,'pair j1-j2')% | isequal(mode,'st_pair j1-j2') %case of pairs
     3268%     for ipair=1:nbpair
     3269%         if select(ipair)
     3270%             if  ~checkframe && size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair) && displ_num(1,ipair)>=1 && displ_num(2,ipair)>=1
     3271%             dt=time(ref_i+displ_num(4,ipair)+1,displ_num(2,ipair)+1)-time(ref_i+displ_num(3,ipair)+1,displ_num(1,ipair)+1);%time interval dt
     3272%             else
     3273%                 dt=1;
     3274%             end
     3275%             displ_pair{ipair}=['j= ' num2stra(displ_num(1,ipair)+1,nom_type_ima) '-' num2stra(displ_num(2,ipair)+1,nom_type_ima) ...
     3276%                 ' :dt= ' num2str(dt*1000)];
     3277%                 
     3278%         else
     3279%             displ_pair{ipair}='...'; %pair not displayed in the menu
     3280%         end
     3281%     end
     3282% elseif isequal(mode,'displacement')
     3283%     displ_pair={'Di=Dj=0'};
     3284% end
     3285% val=get(handles.ListPairCiv2,'Value');
     3286% ichoice=find(select,1);
     3287% if (isempty(ichoice) || ichoice < 1); ichoice=1; end;
     3288% if get(handles.CheckCiv2,'Value')==0 && get(handles.CheckCiv1,'Value')==0 && get(handles.CheckFix1,'Value')==0 && get(handles.CheckPatch1,'Value')==0
     3289%     val=ichoice;% first valid pair proposed by default in the menu
     3290% end
     3291% if val>length(displ_pair')
     3292%     set(handles.ListPairCiv2,'Value',1);% first valid pair proposed by default in the menu
     3293% else
     3294%     set(handles.ListPairCiv2,'Value',val);
     3295% end
     3296% set(handles.ListPairCiv2,'String',displ_pair');
     3297% set(gcf,'Pointer','arrow')
    34463298
    34473299%-------------------------------------------------------------------
     
    38333685end
    38343686set(handles.txt_SubdirCiv1,'String',SubDir);
    3835 find_netcpair_civ1(handles)
     3687find_netcpair_civ(handles,1)
    38363688
    38373689%------------------------------------------------------------------------
     
    46744526% Dtj: ~=0 if i index pairs are used
    46754527
    4676 function [nom_type_pair]=nomtype2pair(nom_type,Dti,Dtj)
     4528function NomTypeNc=nomtype2pair(NomTypeIma,mode)
    46774529
    46784530%determine nom_type_nc:
    4679 nom_type_pair=[];%default
    4680 if ischar(nom_type)
    4681     switch nom_type
    4682         case {'_i_j'}
    4683             if Dtj>0 || Dtj<0
    4684                 nom_type_pair='_i_j1-j2';
    4685                 if Dti>0 || Dti<0
    4686                     nom_type_pair='_i1-i2_j1-j2';
    4687                 end
    4688                 elseif Dti>0 || Dti<0
    4689                 nom_type_pair='_i1-i21_j';   
    4690             else
    4691                  nom_type_pair='_i_j';
    4692             end
    4693         case {'_i1-i2_j'}
    4694             if Dtj>0 || Dtj<0
    4695                nom_type_pair='_i1-i2_j1-j2';
    4696             else
    4697                 nom_type_pair='_i1-i2_j';
    4698             end
    4699         case {'i_j1-j2'}
    4700             if Dti>0 || Dti<0
    4701                nom_type_pair='_i1-i2_j1-j2';
    4702             else
    4703                 nom_type_pair='_i1-i2_j';
    4704             end
    4705         case {'i1-i2_j1-j2'}
    4706              nom_type_pair='_i1-i2_j1-j2';
    4707         case '#a'
    4708             if Dtj>0 || Dtj<0
    4709                 nom_type_pair='#_ab';
    4710             end
    4711         otherwise
    4712             if Dti>0 || Dti<0
    4713                nom_type_pair='_i1-i2';
    4714             end
    4715     end
    4716 end
    4717 
     4531NomTypeNc='';%default
     4532switch mode
     4533    case 'pair j1-j2'     
     4534    if ~isempty(regexp(NomTypeIma,'a$'))
     4535        NomTypeNc=[NomTypeIma 'b'];
     4536    elseif ~isempty(regexp(NomTypeIma,'A$'))
     4537        NomTypeNc=[NomTypeIma 'B'];
     4538    else
     4539        r=regexp(NomTypeIma,'(?<num1>\d+)_(?<num2>\d+)$','names');
     4540        if ~isempty(r)
     4541            NomTypeNc='_1_1-2';
     4542        end
     4543    end
     4544    case 'series(Dj)' 
     4545        r=regexp(NomTypeIma,'(?<num1>\d+)_(?<num2>\d+)$','names');
     4546        if ~isempty(r)
     4547            NomTypeNc='_1_1-2';
     4548        end
     4549   case 'series(Di)'
     4550        r=regexp(NomTypeIma,'(?<num1>\d+)_(?<num2>\d+)$','names');
     4551        if ~isempty(r)
     4552            NomTypeNc='_1-2_1';
     4553        else
     4554            NomTypeNc='_1-2';
     4555        end
     4556end
     4557
     4558function NomType_Callback(hObject, eventdata, handles)
  • trunk/src/find_file_series.m

    r356 r360  
    8888            try
    8989                if exist('VideoReader','file')%recent version of Matlab
    90                     Object=VideoReader(fileinput);   
     90                    Object=VideoReader(fileinput);
    9191                else
    92                     Object=mmreader(fileinput);%older Matlab function for movies               
     92                    Object=mmreader(fileinput);%older Matlab function for movies
    9393                end
    9494                NomType='*';
    95                 FileType='video'; 
     95                FileType='video';
    9696                i1_series=(1:get(Object,'NumberOfFrames'))';
    9797            end
     
    9999end
    100100
    101 %% get the list of existing files when relevant
    102101if strcmp(NomType,'')||strcmp(NomType,'*')
    103102    if exist(fileinput,'file')
    104     [RootPath,RootFile]=fileparts(fileinput);% case of constant name (no indexing)
     103        [RootPath,RootFile]=fileparts(fileinput);% case of constant name (no indexing)
    105104    else
    106        RootPath='';
    107        RootFile='';
    108     end
    109 else
    110     if strcmp(SubDir,'')
    111         filebasesub=fullfile(RootPath,RootFile);
    112     else
    113         filebasesub=fullfile(RootPath,SubDir,RootFile);
    114     end
    115     detect_string=regexprep(NomType,'\d','*');%replace numbers by '*'
    116     old_string='';
    117     detect_string=regexprep(detect_string,'[ab]$','*');%suppress the possible letter ab at the end
    118     detect_string=regexprep(detect_string,'[AB]$','*');%suppress the possible letter ab at the end
    119     detect_string=regexprep(detect_string,'[a|A]$','*');%suppress a possible second letter a,A at the end
    120     while ~strcmp(detect_string,old_string)%removes multiple '*'
    121         old_string=detect_string;
    122         detect_string=regexprep(detect_string,'**','*');
    123     end
    124     dirpair=dir([filebasesub detect_string FileExt]);
     105        RootPath='';
     106        RootFile='';
     107    end
     108else   
     109    %% analyse the list of existing files when relevant
     110    sep1='';
     111    i1_str='(?<i1>)';
     112    i1_star='';
     113    sep2='';
     114    i2_str='(?<i2>)';
     115    i2_star='';
     116    sep3='';
     117    j1_str='(?<j1>)';
     118    j1_star='';
     119    sep4='';
     120    j2_str='(?<j2>)';
     121    j2_star='';
     122    NomTypeStr=NomType;
     123    if ~isempty(regexp(NomTypeStr,'^_\d'))
     124        sep1='_';
     125        NomTypeStr(1)=[];%remove '_' from the beginning of NomTypeStr
     126    end
     127    r=regexp(NomTypeStr,'^(?<num1>\d+)','names');%look for a number at the beginning of NomTypeStr
     128    if ~isempty(r)
     129        i1_str='(?<i1>\d+)';
     130        i1_star='*';
     131        NomTypeStr=regexprep(NomTypeStr,['^' r.num1],'');
     132        r=regexp(NomTypeStr,'^-(?<num2>\d+)','names');%look for a pair i1-i2
     133        if ~isempty(r)
     134            sep2='-';
     135            i2_str='(?<i2>\d+)';
     136            i2_star='*';
     137            NomTypeStr=regexprep(NomTypeStr,['^-' r.num2],'');
     138        end
     139        if ~isempty(regexp(NomTypeStr,'^_'));
     140            sep3='_';
     141            NomTypeStr(1)=[];%remove '_' from the beginning of NomTypeStr
     142        end
     143        if ~isempty(regexp(NomTypeStr,'^[a|A]'));
     144            j1_str='(?<j1>[a-z]|[A-Z])';
     145            j1_star='*';
     146            if ~isempty(regexp(NomTypeStr,'[b|B]$'));
     147                j2_str='(?<j1>[a-z]|[A-Z])';
     148                j2_star='*';
     149            end
     150        else
     151            r=regexp(NomTypeStr,'^(?<num3>\d+)','names');
     152            if ~isempty(r)
     153                j1_str='(?<j1>\d+)';
     154                 j1_star='*';
     155                NomTypeStr=regexprep(NomTypeStr,['^' r.num3],'');
     156            end
     157            r=regexp(NomTypeStr,'-(?<num4>\d+)','names');
     158            if ~isempty(r)
     159                sep4='-';
     160                j2_str='(?<j2>\d+)';
     161                 j2_star='*';
     162            end
     163        end
     164    end
     165    detect_string=[sep1 i1_str sep2 i2_str sep3 j1_str sep4 j2_str];%string used in regexp to detect file indices
     166    %find the string used to extract the relevant files with the command dir
     167    star_string=['*' sep1 i1_star sep2 i2_star sep3 j1_star sep4 j2_star '*'];
     168    wd=pwd;%current working directory
     169    RR=fullfile(RootPath,SubDir);
     170    cd (RR)% move to the local dir to save time in the operation dir.
     171    dirpair=dir([RootFile star_string FileExt]);% look for relevant files in the file directory
     172    cd(wd)
    125173    nbpair=numel(dirpair);
    126174    ref_i_list=zeros(1,nbpair);
     
    130178        RootFile='';
    131179    end
     180    % scan the list of relevant files, extract the indices
    132181    for ifile=1:nbpair
    133         [tild,tild,tild,i1,i2,j1,j2]=fileparts_uvmat(dirpair(ifile).name);
     182        rr=regexp(dirpair(ifile).name,detect_string,'names');
     183        i1=str2num(rr.i1);
     184        i2=str2num(rr.i2);
     185        j1=stra2num(rr.j1);
     186        j2=stra2num(rr.j2);
    134187        ref_i=i1;
    135188        if isempty(i2_input)
     
    187240        ref_ij=ref_i_list*max_j+ref_j_list; % ordered by index i, then by j for a given i.
    188241    end
    189     [tild,ifile]=min(ref_ij(ref_ij>0));
    190     if isempty(ifile)
     242    [tild,ifile_min]=min(ref_ij(ref_ij>0));
     243    if isempty(ifile_min)
    191244        RootPath='';
    192245        RootFile='';
    193246        NomType='';
    194247    else
    195     [tild,tild,tild,tild,tild,tild,tild,tild,NomType]=fileparts_uvmat(dirpair(ifile).name);
     248        [tild,tild,tild,tild,tild,tild,tild,tild,NomType]=fileparts_uvmat(dirpair(ifile_min).name);
    196249    end
    197250end
  • trunk/src/fullfile_uvmat.m

    r354 r360  
    3636
    3737function filename=fullfile_uvmat(RootPath,SubDir,RootFile,FileExt,NomType,i1,i2,j1,j2)
    38 % sizf=size(filebase);
    39 % if (~ischar(filebase)||~isequal(sizf(1),1)),filebase='';end
    40 % if ~exist('ext','var')
    41 %     ext='';
    42 % end
    43 % if ~exist('nom_type','var')
    44 %     nom_type='';
    45 % end
    46 % if ~ischar(ext),ext='';end
    47 % % idetect=0;
    48 % if ~exist('i1','var') || isempty(i1) || isnan(i1)
    49 %     i1=1; %default
    50 % end
    51 % if ~exist('j1','var') ||  isempty(j1) || isnan(j1)
    52 %     j1=1; %default
    53 % end
    54 % if ~exist('i2','var') ||  isempty(i2) || isnan(i2)
    55 %     i2=i1; %default
    56 % end
    57 % if ~exist('j2','var') || isempty(j2) || isnan(j2)
    58 %     j2=j1; %default
    59 % end
    60 % if ~exist('subdir','var')|| isempty(subdir)
    61 %     subdir='' ; %default
    62 % end
    63 
    6438   
    6539%% display help and test function in the absence of input arument
     
    7549end
    7650if isequal(j1,j2)
    77     j2=[];
     51    j2=[];% suppress the secodn index if equal to the first
    7852end
    7953if ~exist('j1','var')
     
    8458end
    8559if isequal(i1,i2)
    86     i2=[];
     60    i2=[];% suppress the secodn index if equal to the first
    8761end
    8862if ~exist('i1','var')
     
    10882if ~isempty(r)
    10983    i1_str=num2str(i1,['%0' num2str(length(r.num1)) 'd']);
    110     NomType=regexprep(NomType,['^' r.num1],'');
     84    NomType=regexprep(NomType,['^' r.num1],'');   
    11185    r=regexp(NomType,'^-(?<num2>\d+)','names');%look for a pair i1-i2
    11286    if ~isempty(r)
     87         if ~isempty(i2)
    11388        sep2='-';
    11489         i2_str=num2str(i2,['%0' num2str(length(r.num2)) 'd']);
     90         end
    11591         NomType=regexprep(NomType,['^-' r.num2],'');
    11692    end
     
    12197    if ~isempty(regexp(NomType,'^[a|A]'));
    12298        j1_str=num2stra(j1,NomType);
    123         if ~isempty(regexp(NomType,'[b|B]$'));
     99        if ~isempty(regexp(NomType,'[b|B]$'))&& ~isempty(j2);
    124100            j2_str=num2stra(j2,NomType);
    125101        end
     
    130106            NomType=regexprep(NomType,['^' r.num3],'');
    131107        end
     108        if ~isempty(j2)
    132109        r=regexp(NomType,'-(?<num4>\d+)','names');
    133         if ~isempty(r)&& ~isempty(j2)
     110        if ~isempty(r)
    134111            sep4='-';
    135112            j2_str=num2str(j2,['%0' num2str(length(r.num4)) 'd']);
     113        end
    136114        end
    137115    end
  • trunk/src/series.m

    r358 r360  
    10871087function RUN_Callback(hObject, eventdata, handles)
    10881088%------------------------------------------------------------------------
     1089%% Read parameters from series
     1090Series=read_GUI(handles.series)%TODO: extend to all input param
     1091Series.hseries=handles.series; % handles to the series GUI
     1092
    10891093%% read root name and field type
    10901094set(handles.RUN,'BusyAction','queue');
     
    10961100    Series.GetObject=0;
    10971101end
    1098 SeriesData=get(handles.series,'UserData');
     1102% SeriesData=get(handles.series,'UserData');
    10991103
    11001104% Series.hseries=handles.series; % handles to the series GUI
    1101 
    1102 %% Read parameters from series
    1103 Series=read_GUI(handles.series);%TODO: extend to all input param
    1104 Series.hseries=handles.series; % handles to the series GUI
    1105 
    11061105   first_i=1;
    11071106   last_i=1;
     
    11291128NomType=Series.InputTable(:,4);
    11301129FileExt=Series.InputTable(:,5);
    1131 % RootPath=get(handles.RootPath,'String');% path of the root name of the first field series
    1132 % RootFile=get(handles.RootFile,'String');% root name of the first field series
    1133 % SubDir=get(handles.SubDir,'String');% subdirectory for netcdf files
    1134 % FileExt=get(handles.FileExt,'String');%file extension
    1135 if isempty(SeriesData)
    1136     msgbox_uvmat('ERROR','no input file series')
    1137     return
    1138 end
     1130% if isempty(SeriesData)
     1131%     msgbox_uvmat('ERROR','no input file series')
     1132%     return
     1133% end
    11391134% NomType=SeriesData.NomType;
    1140 if length(RootPath)==1 %string character input for user fct
    1141     Series.RootPath=RootPath{1};
    1142     Series.RootFile=RootFile{1};
    1143     Series.SubDir=SubDir{1};
    1144     Series.FileExt=FileExt{1};
    1145     Series.NomType=NomType{1};
    1146 else %cell input for user fct
    1147     Series.RootPath=RootPath;
    1148     Series.RootFile=RootFile;
    1149     Series.SubDir=SubDir;
    1150     Series.FileExt=FileExt;
    1151     Series.NomType=NomType;
    1152 end
    1153 if isequal(get(handles.FieldMenu,'Visible'),'on')
    1154     FieldMenu=get(handles.FieldMenu,'String');
    1155     FieldValue=get(handles.FieldMenu,'Value');
    1156     Series.Field=FieldMenu(FieldValue);
    1157 end
     1135% if length(RootPath)==1 %string character input for user fct
     1136%     Series.RootPath=RootPath{1};
     1137%     Series.RootFile=RootFile{1};
     1138%     Series.SubDir=SubDir{1};
     1139%     Series.FileExt=FileExt{1};
     1140%     Series.NomType=NomType{1};
     1141% else %cell input for user fct
     1142%     Series.RootPath=RootPath;
     1143%     Series.RootFile=RootFile;
     1144%     Series.SubDir=SubDir;
     1145%     Series.FileExt=FileExt;
     1146%     Series.NomType=NomType;
     1147% end
     1148% if isequal(get(handles.FieldMenu,'Visible'),'on')
     1149%     FieldMenu=get(handles.FieldMenu,'String');
     1150%     FieldValue=get(handles.FieldMenu,'Value');
     1151%     Series.Field=FieldMenu(FieldValue);
     1152% end
    11581153menu_coord_state=get(handles.transform_fct,'Visible');
    11591154Series.CoordType='';%default
     
    11641159    Series.transform_fct=transform_list{menu_index};% transform function handles
    11651160end
    1166    
    1167 %     
    1168 % first_i=str2num(get(handles.num_first_i,'String'));
    1169 % last_i=str2num(get(handles.num_last_i,'String'));
    1170 % incr_i=str2num(get(handles.num_incr_i,'String'));
    1171 % first_j=str2num(get(handles.num_first_j,'String'));
    1172 % last_j=str2num(get(handles.num_last_j,'String'));
    1173 % incr_j=str2num(get(handles.num_incr_j,'String'));
    1174 % if ~isequal(get(handles.num_first_i,'Visible'),'on')
    1175 %    first_i=1;
    1176 %    last_i=1;
    1177 %    incr_i=1;
    1178 % end
    1179 % if ~isequal(get(handles.num_first_j,'Visible'),'on')
    1180 %     first_j=1;
    1181 %     last_j=1;
    1182 %     incr_j=1;
    1183 % end
    11841161
    11851162%reinitiate waitbar position
     
    12021179nbfield=nb(1);
    12031180nbfield2=nb(2);
    1204 % nbfield2=cell2mat(Series.IndexRange.MaxIndex);
    1205 % nbfield=min(nbfield);
    1206 % % nbfield=[]; %default
    1207 % % for iview=1:length(nbfield_cell)
    1208 % %     nb=nbfield_cell{iview};
    1209 % %     if ~isempty(nb)
    1210 % %         nbfield=[nbfield nb];
    1211 % %     end
    1212 % % end
    1213 % % nbfield=min(nbfield);
    1214 % nbfield2_cell=get(handles.num_MaxIndex_j,'String');
    1215 % nbfield2=[]; %default
    1216 % for iview=1:length(nbfield2_cell)
    1217 %     nb=str2num(nbfield2_cell{iview});
    1218 %     if ~isempty(nb)
    1219 %         nbfield2=[nbfield2 nb];
    1220 %     end
    1221 % end
    1222 % nbfield2=min(nbfield2);
    12231181
    12241182%get complementary information from the 'series' interface
     
    12331191%determine the list of input file names
    12341192nbmissing=0;
    1235 for iview=1:length(RootPath)
    1236     %case of pairs (.nc files)
    1237     fileinput=name_generator(fullfile(RootPath{iview},RootFile{iview}),first_i,first_j,FileExt{iview},NomType{iview},1,first_i+1,first_j+1,SubDir{iview});
    1238     if strcmp(get(handles.Pairs,'Visible'),'on')
    1239        pair_list=get(handles.list_pair_civ,'String');
    1240        val=get(handles.list_pair_civ,'Value');
    1241        pair_string=pair_list{val};
    1242        r=regexp(pair_string,'.*\D(?<num1>[\d+|*])(?<delim>[-||])(?<num2>[\d+|*])','names');
    1243        if ~isempty(r)
    1244            if strcmp(r.num1,'*')%free pairs
    1245                [tild,RootFile,i1_series,i2_series,j1_series,j2_series,tild,tild,Object]=find_file_series(fileinput)% TODO: choice pair when multiple choice
    1246  
    1247                if isempty(i2_series) %j pairs
    1248                    ind_sel=i1_series>=i1_series>=first_i & i1_series<=last_i & j1_series>first_j & j2_series<last_j;
    1249                    j2_series=j2_series(ind_sel);
    1250                else%i pairs
    1251                    if isempty(j1_series) %j pairs
    1252                         ind_sel=i1_series>=first_i & i2_series<=last_i ;
    1253                    else
    1254                        ind_sel=i1_series>=first_i & i2_series<=last_i& j1_series>first_j & j1_series<last_j;
    1255                        j1_series=j1_series(ind_sel);
    1256                        i2_series=i2_series(ind_sel);
    1257                    end
    1258                end
    1259                i1_series=i1_series(ind_sel);             
    1260            else
    1261                if strcmp(r.delim,'-')
    1262                    ind_shift(1)=str2num(r.num1);
    1263                    ind_shift(2)=str2num(r.num2);
    1264                else
    1265                    ind_shift(1)=-str2num(r.num1);
    1266                    ind_shift(2)=str2num(r.num2);
    1267                end
    1268                [i1_series,i2_series,j1_series,j2_series,nbmissing]=find_file_indices(num_i,num_j,ind_shift,NomType{iview},mode);
    1269            end
    1270        end
    1271        if isempty(i1_series)
    1272            msgbox_uvmat('ERROR','no file in the considered range')
    1273            return
    1274        end
    1275        if isempty(i2_series)
    1276            i2_series=i1_series;
    1277        end
    1278        if isempty(j2_series)
    1279            j2_series=j1_series;
    1280        end
    1281 %     if isequal(NomType{iview},'_1_1-2')|| isequal(NomType{iview},'_1-2_1')|| isequal(NomType{iview},'_1-2')|| isequal(NomType{iview},'#_ab')
    1282 %         ind_shift=SeriesData.displ_num(iview,:);
    1283 %         if isequal(ind_shift,[0 0 0 0]) % undefined pairs
    1284 %             if isequal(NomType{iview},'#_ab')
    1285 %                 mode='#_ab';
    1286 %             end
    1287 %             [num_i1,i2_series,j1_series,num_j2,nbmissing]=netseries_generator(fullfile(RootPath{iview},RootFile{iview}),SubDir{iview},mode,num_first_i,num_incr_i,num_last_i,num_first_j,num_incr_j,num_last_j);
    1288 %         else   
    1289 %             [num_i1,num_i2,num_j1,num_j2,num_i,num_j]=find_file_indices(num_i,num_j,ind_shift,NomType{iview},mode);
    1290 %             if isempty(num_i)
    1291 %                 msgbox_uvmat('ERROR','ERROR: empty set of input files chosen')
    1292 %                 return
    1293 %             end
    1294 %             if num_i(1)>num_first_i
    1295 %                set(handles.num_first_i,'String',num2str(num_i(1)))%update the display of first field
    1296 %                last_i_Callback(hObject, eventdata, handles)
    1297 %             end
    1298 %             if num_i(end)<num_last_i
    1299 %                set(handles.num_last_i,'String',num2str(num_i(end)))%update the display of last field
    1300 %                last_i_Callback(hObject, eventdata, handles)
    1301 %             end
    1302 %             if num_j(1)>num_first_j
    1303 %                set(handles.num_first_j,'String',num2str(num_j(1)))%update the display of first field
    1304 %                last_j_Callback(hObject, eventdata, handles)
    1305 %             end
    1306 %             if num_j(end)<num_last_j
    1307 %                set(handles.num_last_j,'String',num2str(num_j(end)))%update the display of last field
    1308 %                last_j_Callback(hObject, eventdata, handles)
    1309 %             end
    1310 %         end
    1311     else%case of images
    1312         [i1_series,j1_series]=meshgrid(num_i,num_j);
    1313         i2_series=i1_series;
    1314         j2_series=j1_series;
    1315     end
    1316     if length(RootPath)>1
    1317         i1_series_cell{iview}=i1_series;
    1318         i2_series_cell{iview}=i2_series;
    1319         j1_series_cell{iview}=j1_series;
    1320         j2_series_cell{iview}=j2_series;
    1321     end
    1322 end
     1193% for iview=1:length(RootPath)
     1194%     %case of pairs (.nc files)
     1195%     fileinput=name_generator(fullfile(RootPath{iview},RootFile{iview}),first_i,first_j,FileExt{iview},NomType{iview},1,first_i+1,first_j+1,SubDir{iview});
     1196%     if strcmp(get(handles.Pairs,'Visible'),'on')
     1197%        pair_list=get(handles.list_pair_civ,'String');
     1198%        val=get(handles.list_pair_civ,'Value');
     1199%        pair_string=pair_list{val};
     1200%        r=regexp(pair_string,'.*\D(?<num1>[\d+|*])(?<delim>[-||])(?<num2>[\d+|*])','names');
     1201%        if ~isempty(r)
     1202%            if strcmp(r.num1,'*')%free pairs
     1203%                [tild,RootFile,i1_series,i2_series,j1_series,j2_series,tild,tild,Object]=find_file_series(fileinput);% TODO: choice pair when multiple choice
     1204
     1205%                if isempty(i2_series) %j pairs
     1206%                    ind_sel=i1_series>=i1_series>=first_i & i1_series<=last_i & j1_series>first_j & j2_series<last_j;
     1207%                    j2_series=j2_series(ind_sel);
     1208%                else%i pairs
     1209%                    if isempty(j1_series) %j pairs
     1210%                         ind_sel=i1_series>=first_i & i2_series<=last_i ;
     1211%                    else
     1212%                        ind_sel=i1_series>=first_i & i2_series<=last_i& j1_series>first_j & j1_series<last_j;
     1213%                        j1_series=j1_series(ind_sel);
     1214%                        i2_series=i2_series(ind_sel);
     1215%                    end
     1216%                end
     1217%                i1_series=i1_series(ind_sel);             
     1218%            else
     1219%                if strcmp(r.delim,'-')
     1220%                    ind_shift(1)=str2num(r.num1);
     1221%                    ind_shift(2)=str2num(r.num2);
     1222%                else
     1223%                    ind_shift(1)=-str2num(r.num1);
     1224%                    ind_shift(2)=str2num(r.num2);
     1225%                end
     1226%                [i1_series,i2_series,j1_series,j2_series,nbmissing]=find_file_indices(num_i,num_j,ind_shift,NomType{iview},mode);
     1227%            end
     1228%        end
     1229%        if isempty(i1_series)
     1230%            msgbox_uvmat('ERROR','no file in the considered range')
     1231%            return
     1232%        end
     1233%        if isempty(i2_series)
     1234%            i2_series=i1_series;
     1235%        end
     1236%        if isempty(j2_series)
     1237%            j2_series=j1_series;
     1238%        end
     1239%     else%case of images
     1240%         [i1_series,j1_series]=meshgrid(num_i,num_j);
     1241%         i2_series=i1_series;
     1242%         j2_series=j1_series;
     1243%     end
     1244%     if length(RootPath)>1
     1245%         i1_series_cell{iview}=i1_series;
     1246%         i2_series_cell{iview}=i2_series;
     1247%         j1_series_cell{iview}=j1_series;
     1248%         j2_series_cell{iview}=j2_series;
     1249%     end
     1250% end
    13231251
    13241252%% defining the ACTION function handle
     
    13441272%% RUN ACTION
    13451273Series.Action=action;%name of the processing programme
     1274Series
    13461275set(handles.RUN,'BackgroundColor',[0.831 0.816 0.784])
    1347 if length(RootPath)>1
    1348     h_fun(i1_series_cell,i2_series_cell,j1_series_cell,j2_series_cell,Series);
    1349 else
    1350     h_fun(i1_series,i2_series,j1_series,j2_series,Series);
    1351 end
     1276h_fun(Series);
     1277% if length(RootPath)>1
     1278%     h_fun(i1_series_cell,i2_series_cell,j1_series_cell,j2_series_cell,Series);
     1279% else
     1280%     h_fun(i1_series,i2_series,j1_series,j2_series,Series);
     1281% end
    13521282set(handles.RUN,'BackgroundColor',[1 0 0])
    13531283
  • trunk/src/uvmat.m

    r354 r360  
    469469function display_file_name(hObject, eventdata, handles,fileinput,index)
    470470%------------------------------------------------------------------------
    471 %% analyse the input file
     471%% look for the input file existence
    472472if ~exist(fileinput,'file')
    473473    msgbox_uvmat('ERROR',['input file ' fileinput  ' does not exist'])
     
    475475end
    476476
    477 %% have a unique function for fileinput (index=1) and fileinput_1 (index=2)
     477%% set the mouse pointer to 'watch'
     478set(handles.uvmat,'Pointer','watch')
     479set(handles.RootPath,'BackgroundColor',[1 1 0])
     480drawnow
     481
     482%% define the relevant handles for the first fiel series (index=1) or the second file series (index=2)
    478483if ~exist('index','var')
    479484    index=1;
     
    502507    set(handles.NomType_1,'Visible','on');
    503508end
    504 % detect root name, nomenclature and indices in the input file name:
     509
     510%% detect root name, nomenclature and indices in the input file name:
    505511[tild,SubDir,tild,i1,i2,j1,j2,FileExt]=fileparts_uvmat(fileinput);
    506512% detect the file type, get the movie object if relevant, and look for the corresponding file series:
     
    512518    j2=[];
    513519end 
    514 % open the file or fill the GUI uvmat according to the detected file type
     520
     521%% open the file or fill the GUI uvmat according to the detected file type
    515522switch FileType
    516523    case ''
     
    536543        set(handles_FileExt,'String',FileExt);
    537544        if index==1
    538             % fill file index counters
     545            % fill file index counters if the first file series is opened
    539546            set(handles.i1,'String',num2str(i1));
    540547            set(handles.i2,'String',num2str(i2));
    541548            set(handles.j1,'String',num2stra(j1,NomType));
    542549            set(handles.j2,'String',num2stra(j2,NomType));
    543         else %read the current field index
     550        else %read the current field index if the second file series is opened
    544551            i1=str2num(get(handles.i1,'String'));
    545552            i2=str2num(get(handles.i2,'String'));
     
    547554            j2=stra2num(get(handles.j2,'String'));
    548555        end
     556       
    549557        % synchronise indices of the second  input file if it exists
    550558        if get(handles.SubField,'Value')==1% if the subfield button is activated, update the field numbers
    551             %             if index==1
    552559            Input=read_GUI(handles.InputFile);
    553560            if ~isfield(Input,'RootPath_1')||strcmp(Input.RootPath_1,'"')
     
    564571            if exist(FileName_1,'file')
    565572                FileIndex_1=fullfile_uvmat('','','','',Input.NomType_1,i1,i2,j1,j2);
    566                 %FileIndex_1=name_generator('',i1,i2,'',NomType_1,1,j1,j2,'');
    567573                set(handles.FileIndex_1,'String',FileIndex_1)
    568574            else
     
    588594        set(handles.frame_object,'Visible','on')
    589595       
    590         % initiate input file series and refresh the current field view:
    591        
     596        % initiate input file series and refresh the current field view:     
    592597        update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileType,MovieObject,index);
    593598
    594599end
     600
     601%% set back the mouse pointer to arrow
     602set(handles.uvmat,'Pointer','arrow')
    595603
    596604%------------------------------------------------------------------------
     
    601609[RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    602610fileinput=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    603 % fileinput=read_file_boxes(handles);
    604611% detect the file type, get the movie object if relevant, and look for the corresponding file series:
    605612[RootPath,RootFile,i1_series,i2_series,j1_series,j2_series,tild,FileType,MovieObject]=find_file_series(fileinput);
     
    640647function update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileType,MovieObject,index)
    641648%------------------------------------------------------------------------
    642 %% TODO: have a unique function for update_rootinfo and update_rootinfo_1
     649%% define the relevant handles depending on the index (1=first file series, 2= second file series)
    643650if ~exist('index','var')
    644651    index=1;
     
    650657    handles_RootPath=handles.RootPath_1;
    651658    handles_Fields=handles.Fields_1;
    652     %..........................
    653659end
    654660
     
    664670UvData.j1_series{index}=j1_series;
    665671UvData.j2_series{index}=j2_series;
    666 set(handles.fix_pair,'Value',1) % activate by default the comp_input '-'input window
     672% set(handles.CheckFixPair,'Value',1) % activate by default the comp_input '-'input window
    667673set(handles.FixVelType,'Value',0); %desactivate fixed veltype
    668 %[FileName,RootPath,FileBase,FileIndices,FileExt,SubDir]=read_file_boxes(handles);
    669674if index==1
    670 [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
     675    [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    671676else
    672677    [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes_1(handles);
     
    681686nbfield_j=[];%default
    682687
    683 % read timing and total frame number from the current file (movie files) !! may be overrid by xml file
     688%% read timing and total frame number from the current file (movie files) !! may be overrid by xml file
    684689XmlData.Time=[];%default
    685690XmlData.GeometryCalib=[];%default
     
    732737set(handles.CheckBW,'Value',strcmp(ColorType,'grayscale'))% select handles.CheckBW if grayscale image
    733738
    734 % read parameters (time, geometric calibration..) from a documentation file (.xml advised)
     739%% read parameters (time, geometric calibration..) from a documentation file (.xml advised)
    735740filexml=[FileBase '.xml'];
    736741fileciv=[FileBase '.civ'];
    737742warntext='';%default warning message
    738743NbSlice=1;%default
    739 
     744set(handles.RootPath,'BackgroundColor',[1 1 1])
    740745if exist(filexml,'file')
    741746    set(handles.view_xml,'Visible','on')
    742747    set(handles.view_xml,'BackgroundColor',[1 1 0])
    743     set(handles.RootPath,'BackgroundColor',[1 1 1])
    744748    set(handles.view_xml,'String','view .xml')
    745749    drawnow
     
    815819    if isequal(nbfield,1) && ~isequal(nbfield_j,1)% .Time is a line vector
    816820        NomType=get(handles.NomType,'String');
    817 %         NomType=get(handles.FileIndex,'UserData');
    818821        if numel(NomType)>=2 &&(strcmp(NomType,'_i')||strcmp(NomType(1:2),'%0')||strcmp(NomType(1:2),'_%'))
    819822            XmlData.Time=(XmlData.Time)';
     
    838841set(handles.last_j,'String',last_j_cell);
    839842
    840 % store geometric calibration in UvData
     843%% store geometric calibration in UvData
    841844if isfield(XmlData,'GeometryCalib')
    842845    GeometryCalib=XmlData.GeometryCalib;
     
    877880end
    878881
    879 %update the data attached to the uvmat interface
     882%% update the data attached to the uvmat interface
    880883if ~isempty(TimeUnit)
    881884    set(handles.time_txt,'String',['time (' TimeUnit ')'])
    882885end
    883886UvData.TimeUnit=TimeUnit;
    884 UvData.XmlData=XmlData;
     887UvData.XmlData{index}=XmlData;
    885888UvData.NewSeries=1;
    886889% UvData.MovieObject=MovieObject;
     
    891894end
    892895
    893 % set default options in menu 'Fields'
     896%% set default options in menu 'Fields'
    894897if ~testima
    895898    testcivx=0;
     
    919922
    920923%% set index navigation options and refresh plots
    921 set(handles.RootPath,'BackgroundColor',[1 1 1])
    922 drawnow
    923 set_scan_options(handles)
    924 
    925 %% update list of recent files in the menubar
    926 MenuFile=[{get(handles.MenuFile_1,'Label')};{get(handles.MenuFile_2,'Label')};...
    927     {get(handles.MenuFile_3,'Label')};{get(handles.MenuFile_4,'Label')};{get(handles.MenuFile_5,'Label')}];
    928 str_find=strcmp(FileName,MenuFile);
    929 if isempty(find(str_find,1))
    930     MenuFile=[{FileName};MenuFile];%insert the current file if not already in the list
    931 end
    932 for ifile=1:min(length(MenuFile),5)
    933     eval(['set(handles.MenuFile_' num2str(ifile) ',''Label'',MenuFile{ifile});'])
    934     eval(['set(handles.MenuFile_' num2str(ifile) '_1,''Label'',MenuFile{ifile});'])
    935 end
    936 dir_perso=prefdir;
    937 profil_perso=fullfile(dir_perso,'uvmat_perso.mat');
    938 if exist(profil_perso,'file')
    939     save (profil_perso,'MenuFile','-append'); %store the file names for future opening of uvmat
    940 else
    941     save (profil_perso,'MenuFile','-V6'); %store the file names for future opening of uvmat
    942 end
    943 
    944 %------------------------------------------------------------------------
    945 %--- Set index navigation options for new series input and refresh plot
    946 %------------------------------------------------------------------------
    947 function set_scan_options(handles)
    948 
    949 %  set the corresponding index navigation options
    950  NomType=get(handles.NomType,'String');       
    951  NomType_1=get(handles.NomType_1,'String');
    952 % NomType=get(handles.FileIndex,'UserData');       
    953 % NomType_1=get(handles.FileIndex_1,'UserData');
    954 last_i_str=get(handles.last_i,'String');
    955 nbfield=str2num(last_i_str{1});
    956 if numel(last_i_str)==2
    957     nbfield=min(nbfield,str2num(last_i_str{2}));
    958 end 
     924scan_option='i';%default
    959925state_j='off'; %default
    960 scan_option='i';%default
    961 NomTypeRaw=regexprep(NomType(2:end), '-', '');
    962 if numel(regexp(NomTypeRaw,'\D'))>=1
     926if index==2
     927    if get(handles.scan_j,'Value')
     928        scan_option='j'; %keep the scan option for the second fiel series
     929    end
     930    if strcmp(get(handles.j1,'Visible'),'on')
    963931        state_j='on';
    964         if isequal(nbfield,1)
     932    end
     933end
     934if ~isempty(j1_series)
     935        state_j='on';
     936        if isequal(nbfield,1) &&index==1
    965937            scan_option='j'; %scan j index by default if nbfield=1               
    966938        end
    967 end
    968 if ~isempty(NomType_1)
    969     NomTypeRaw=regexprep(NomType_1(2:end), '-', '');
    970     if numel(regexp(NomTypeRaw,'\D'))>=1
    971             state_j='on';
    972             if isequal(nbfield,1)
    973                 scan_option='j';                 
    974             end           
    975     end
    976939end
    977940if isequal(scan_option,'i')
     
    988951set(handles.frame_j,'Visible',state_j);
    989952set(handles.j_text,'Visible',state_j);
    990 if strcmp(state_j,'on')
    991     set(handles.fix_pair,'Visible','on')
    992 else
    993     set(handles.fix_pair,'Visible','off')
     953if ~isempty(i2_series)||~isempty(j2_series)
     954    set(handles.CheckFixPair,'Visible','on')
     955elseif index==1
     956    set(handles.CheckFixPair,'Visible','off')
    994957end
    995958
     
    1004967    CheckMask_Callback([],[],handles)
    1005968end
     969
     970%% update list of recent files in the menubar
     971MenuFile=[{get(handles.MenuFile_1,'Label')};{get(handles.MenuFile_2,'Label')};...
     972    {get(handles.MenuFile_3,'Label')};{get(handles.MenuFile_4,'Label')};{get(handles.MenuFile_5,'Label')}];
     973str_find=strcmp(FileName,MenuFile);
     974if isempty(find(str_find,1))
     975    MenuFile=[{FileName};MenuFile];%insert the current file if not already in the list
     976end
     977for ifile=1:min(length(MenuFile),5)
     978    eval(['set(handles.MenuFile_' num2str(ifile) ',''Label'',MenuFile{ifile});'])
     979    eval(['set(handles.MenuFile_' num2str(ifile) '_1,''Label'',MenuFile{ifile});'])
     980end
     981dir_perso=prefdir;
     982profil_perso=fullfile(dir_perso,'uvmat_perso.mat');
     983if exist(profil_perso,'file')
     984    save (profil_perso,'MenuFile','-append'); %store the file names for future opening of uvmat
     985else
     986    save (profil_perso,'MenuFile','-V6'); %store the file names for future opening of uvmat
     987end
     988
    1006989
    1007990%------------------------------------------------------------------------
     
    11101093display_file_name(hObject,eventdata,handles,fileinput_1,2)
    11111094
    1112 %------------------------------------------------------------------------
    1113 % NOT USED  fills the edit boxes RootPath_1, RootFile_1,NomType_1...from an input file name 'fileinput_1'
    1114 %------------------------------------------------------------------------
    1115 % function display_file_name_1(hObject,eventdata,handles,fileinput_1)
    1116 %
    1117 % %[path,name,ext]=fileparts(fileinput_1);
    1118 % [tild,SubDir_1,tild,i1,i2,j1,j2,FileExt_1]=fileparts_uvmat(fileinput_1);
    1119 % [RootPath_1,RootFile_1,i1_series,i2_series,j1_series,j2_series,NomType,FileType,MovieObject]=find_file_series(fileinput_1);
    1120 % % [RootPath_1,RootFile_1,field_count,str2,str_a,str_b,FileExt_1,NomType_1,SubDir_1]=name2display(fileinput_1);
    1121 % switch FileType
    1122 %     case ''
    1123 %        msgbox_uvmat('ERROR','invalid input file type')
    1124 %     case 'txt'
    1125 %         edit(fileinput) 
    1126 %     case 'figure'                           %display matlab figure
    1127 %         hfig=open(fileinput_1);
    1128 %         set(hfig,'WindowButtonMotionFcn','mouse_motion')%set mouse action functio
    1129 %         set(hfig,'WindowButtonUpFcn','mouse_up')%set mouse click action function
    1130 %         set(hfig,'WindowButtonUpFcn','mouse_down')%set mouse click action function
    1131 %     case {'xml','xls'}                % edit xml or Excel files
    1132 %        editxml(fileinput_1);
    1133 % %     case {'.avi','.image','.vol','.nc','.cdf'} 
    1134 %     otherwise
    1135 %         set(handles.RootPath_1,'String',RootPath_1);
    1136 %         if  isequal(SubDir_1,'')
    1137 %             rootname=fullfile(RootPath_1,RootFile_1);
    1138 %         else
    1139 %             rootname=fullfile(RootPath_1,SubDir_1,RootFile_1);
    1140 %             SubDir=['/' SubDir_1]; %display the separator
    1141 %         end
    1142 %         set(handles.SubDir_1,'String',SubDir_1);
    1143 %         set(handles.RootFile_1,'String',['/' RootFile_1]); %display the separator
    1144 %         indices=fileinput_1(length(rootname)+1:end);
    1145 %         indices(end-length(FileExt_1)+1:end)=[]; %remove extension
    1146 %         set(handles.FileIndex,'String',indices);       
    1147 % %         set(handles.FileIndex,'UserData',NomType);
    1148 %         set(handles.NomType_1,'String',NomType);
    1149 %         set(handles.FileExt_1,'String',FileExt_1);
    1150 %         % fill file index counters
    1151 %         set(handles.i1,'String',num2str(i1));   
    1152 %         set(handles.i2,'String',num2str(i2));
    1153 %         set(handles.j1,'String',num2str(j1));
    1154 %         set(handles.j2,'String',num2str(j2));
    1155 %         
    1156 %         % synchronise indices of the second  input file if it exists
    1157 %         if get(handles.SubField,'Value')==1% if the subfield button is activated, update the field numbers
    1158 %             [RootPath_1,SubDir_1,RootFile_1,FileIndices_1,FileExt_1]=read_file_boxes_1(handles);
    1159 %             %[ff,rr,FileBase_1,ii,FileExt_1,SubDir_1]=read_file_boxes_1(handles);
    1160 %             NomType_1=get(handles.NomType_1,'String');
    1161 % %             NomType_1=get(handles.FileIndex_1,'UserData');     
    1162 %             %FileName_1=name_generator(FileBase_1,i1,i2,FileExt_1,NomType_1,1,j1,j2,SubDir_1);
    1163 %             FileName_1=fullfile_uvmat(RootPath_1,SubDir_1,RootFile_1,FileExt_1,NomType_1,i1,i2,j1,j2);
    1164 %             if exist(FileName_1,'file')
    1165 %                 FileIndex_1=fullfile_uvmat('','','','',NomType_1,i1,i2,j1,j2);
    1166 %                 %FileIndex_1=name_generator('',i1,i2,'',NomType_1,1,j1,j2,'');
    1167 %                 set(handles.FileIndex_1,'String',FileIndex_1)
    1168 %             else
    1169 %                 set(handles.SubField,'Value',0)
    1170 %                 SubField_Callback(hObject, eventdata, handles)
    1171 %             end
    1172 %         end 
    1173 % end
    1174 %
    1175 % % test for image series in a single file and synchronise file indices of the two series
    1176 % if nbfield_1 >1 %case of image with multiple frames
    1177 %     if nbfield_1 < num_i1
    1178 %         msgbox_uvmat('ERROR','current frame index beyond the input movie length')
    1179 %         return
    1180 %     else
    1181 %         NomType_1='*'; %indicate a set of indexed frames within a single file
    1182 %         filename_new=fileinput_1;
    1183 %     end
    1184 % else  % cases of data files   
    1185 %     RootPath=get(handles.RootPath,'String');
    1186 %     RootFile=get(handles.RootFile,'String');
    1187 %     FileBase=fullfile(RootPath,RootFile);
    1188 %     FileBase_1=fullfile(RootPath_1,RootFile_1);
    1189 %     if isequal(FileBase,FileBase_1)
    1190 %         filename_new=fileinput_1;
    1191 %     else       
    1192 %         num_i1=stra2num(get(handles.i1,'String'));%get the current file indices from counters
    1193 %         num_j1=stra2num(get(handles.j1,'String'));
    1194 %         num_i2=stra2num(get(handles.i2,'String'));
    1195 %         num_j2=stra2num(get(handles.j2,'String'));
    1196 %         [filename_new,idetect]=...
    1197 %            name_generator(FileBase_1,num_i1,num_j1,FileExt_1,NomType_1,1,num_i2,num_j2,SubDir_1);%create name with indices synchronised with the first file
    1198 %         indices=''; %default
    1199 %         if ~idetect
    1200 %             msgbox_uvmat('ERROR','second input file with indices corresponding to the first one does not exist')
    1201 %             return
    1202 %         end
    1203 %     end
    1204 % end
    1205 % set(handles.NomType_1,'String',NomType_1);
    1206 % % set(handles.FileIndex_1,'UserData',NomType_1);
    1207 %
    1208 % % make visible and fill the second raw of edit boxes
    1209 % set(handles.RootPath_1,'Visible','on')
    1210 % set(handles.RootFile_1,'Visible','on')
    1211 % set(handles.SubDir_1,'Visible','on');
    1212 % set(handles.FileIndex_1,'Visible','on');
    1213 % set(handles.FileExt_1,'Visible','on');
    1214 % %[FileName,RootPath,FileBase,FileIndices,FileExt,SubDir]=read_file_boxes(handles);
    1215 % [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    1216 % FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    1217 % FileBase=fullfile(RootPath,RootFile);
    1218 % if isequal(FileBase,FileBase_1)
    1219 %     set(handles.RootPath_1,'String','"')
    1220 %     set(handles.RootFile_1,'String','"');
    1221 % else
    1222 %     set(handles.RootPath_1,'String',RootPath_1)
    1223 %     set(handles.RootFile_1,'String',['/' RootFile_1]);
    1224 % end
    1225 % if  isequal(SubDir_1,'')
    1226 %      set(handles.SubDir_1,'String','');
    1227 %      FileBaseSub_1=FileBase_1;
    1228 % else 
    1229 %     set(handles.SubDir_1,'String',['/' SubDir_1]);
    1230 %     FileBaseSub_1=fullfile(FileBase_1,SubDir_1);
    1231 % end
    1232 % indices=filename_new(length(FileBaseSub_1)+1:end);
    1233 % indices(end-length(FileExt_1)+1:end)=[]; %remove extension
    1234 % set(handles.FileIndex_1,'String',indices)
    1235 % set(handles.NomType_1,'String',NomType_1)
    1236 % % set(handles.FileIndex_1,'UserData',NomType_1)
    1237 % set(handles.FileExt_1,'String',FileExt_1);
    1238 %
    1239 % % % default choice of fields
    1240 % %set(handles.SubField,'Visible','on')
    1241 % set(handles.SubField,'Value',1)
    1242 % RootPath_1_Callback(hObject,eventdata,handles); 
    1243 
    12441095%-----------------------------------------------------------------------
    12451096% --- Called by action in RootPath_1 edit box
    12461097function RootPath_1_Callback(hObject,eventdata,handles)
    12471098% -----------------------------------------------------------------------
    1248 update_rootinfo_1(hObject,eventdata,handles)
    1249 
     1099% update_rootinfo_1(hObject,eventdata,handles)
     1100[RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes_1(handles);
     1101fileinput=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
     1102% detect the file type, get the movie object if relevant, and look for the corresponding file series:
     1103[tild,tild,i1_series,i2_series,j1_series,j2_series,tild,FileType,MovieObject]=find_file_series(fileinput);
     1104% initiate the input file series and refresh the current field view:
     1105update_rootinfo(handles,i1_series,i2_series,j1_series,j2_series,FileType,MovieObject,2);
    12501106%-----------------------------------------------------------------------
    12511107% --- Called by action in RootFile_1 edit box
    12521108function RootFile_1_Callback(hObject, eventdata, handles)
    12531109% -----------------------------------------------------------------------
    1254 update_rootinfo_1(hObject,eventdata,handles)
     1110RootPath_1_Callback(hObject,eventdata,handles)
    12551111
    12561112%------------------------------------------------------------------------
     
    12591115%------------------------------------------------------------------------
    12601116run0_Callback(hObject, eventdata, handles)
    1261 
    1262 % %------------------------------------------------------------------------
    1263 % % --- Update information about a new second field series (indices to scan, timing,
    1264 % %     calibration from an xml file, then refresh current plots
    1265 % function update_rootinfo_1(handles,i1_series,i2_series,j1_series,j2_series,FileType,MovieObject) %A REVOIR
    1266 % % -----------------------------------------------------------------------
    1267 % set(handles.RootPath_1,'BackgroundColor',[1 1 0])% indicate active program by yellow color
    1268 % drawnow
    1269 % UvData=get(handles.uvmat,'UserData');%huvmat=handles of the uvmat interface
    1270 % UvData.NewSeries=1; %flag for run0: begin a new series
    1271 % [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes_1(handles);
    1272 % FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    1273 % %[FileName,RootPath,FileBase,FileIndices,FileExt,SubDir]=read_file_boxes_1(handles);
    1274 % if ~exist(FileName,'file')
    1275 %     msgbox_uvmat('ERROR',['input file ' FileName ' not found']);
    1276 % end
    1277 % set(handles.FixVelType,'Value',0); %desactivate fixed veltype
    1278 % nbfield_1=[];%default
    1279 % nbfield_j_1=[];%default
    1280 % XmlData.Time=[];
    1281 % XmlData.GeometryCalib=[];%default
    1282 % TimeUnit=[];
    1283 % if isfield(UvData,'TimeUnit')
    1284 %     TimeUnit=UvData.TimeUnit;
    1285 % end
    1286 % TimeUnit_1=[];
    1287 % hhh='';%default, test for  movie reading with mmreader
    1288 % imainfo=[];
    1289 % FileBase=fullfile(RootPath,RootFile);
    1290 % if isequal(lower(FileExt),'.avi') %.avi file
    1291 %     imainfo=aviinfo([FileBase FileIndices FileExt]);
    1292 %     nbfield_1=imainfo.NumFrames;
    1293 %     nbfield_j_1=1;
    1294 %     set(handles.Dt_txt,'String',['Dt=' num2str(1000/info.FramesPerSecond) 'ms']);%display the elementary time interval in millisec
    1295 %     time=(0:1/imainfo.FramesPerSecond:(imainfo.NumFrames-1)/imainfo.FramesPerSecond)';
    1296 %     ColorType=imainfo.ImageType;%='truecolor' for color images
    1297 %     hhh=which('mmreader');
    1298 % elseif ~isempty(imformats(FileExt(2:end)))|| isequal(FileExt,'.vol')
    1299 %     if ~isequal(SubDir,'')
    1300 %         RootFile=get(handles.RootFile,'String');
    1301 %         imainfo=imfinfo([fullfile(RootPath,SubDir,RootFile) FileIndices FileExt]);
    1302 %     else
    1303 %         imainfo=imfinfo([FileBase FileIndices FileExt]);
    1304 %     end
    1305 %     ColorType=imainfo.ColorType;%='truecolor' for color images
    1306 %     if length(imainfo) >1 %case of image with multiple frames
    1307 %         nbfield_1=length(imainfo);
    1308 %         nbfield_j_1=1;
    1309 %     end
    1310 % end
    1311 % if ~strcmp(hhh,'')&& mmreader.isPlatformSupported()% if the function is found (recent version of matlab)
    1312 %     UvData.MovieObject_1=mmreader([FileBase FileIndices FileExt]);
    1313 % elseif isfield(UvData,'MovieObject_1')
    1314 %     UvData=rmfield(UvData,'MovieObject_1');
    1315 % end
    1316 % if ~isempty(imainfo)% (an image has been introduced as second fierld input)
    1317 %     if strcmp(get(handles.num_Npx,'String'),'') || strcmp(get(handles.num_Npy,'String'),'')%update npx and npy if it is not already filled by the first input field
    1318 %         if  isfield(imainfo,'Width') && isfield(imainfo,'Height')
    1319 %             set(handles.num_Npx,'String',num2str(imainfo.Width));%fills nbre of pixels x box
    1320 %             set(handles.num_Npy,'String',num2str(imainfo.Height));%fills nbre of pixels x box
    1321 %         else
    1322 %             set(handles.num_Npx,'String','');%fills nbre of pixels x box
    1323 %             set(handles.num_Npy,'String','');%fills nbre of pixels x box
    1324 %         end
    1325 %         set(handles.CheckBW,'Value',strcmp(ColorType,'grayscale'))% select handles.CheckBW if grayscale image
    1326 %     end
    1327 % end
    1328 % % find scaling parameters
    1329 % filexml=[FileBase '.xml'];
    1330 % fileciv=[FileBase '.civ'];
    1331 % warntext='';%default warning text
    1332 % if exist(filexml,'file')
    1333 %     [XmlData,warntext]=imadoc2struct(filexml);
    1334 %     if ~isempty(warntext)
    1335 %         msgbox_uvmat('WARNING',warntext)
    1336 %     end
    1337 %     if isfield(XmlData,'Camera')
    1338 %         if isfield(XmlData.Camera,'TimeUnit')&& ~isempty(XmlData.Camera.TimeUnit)
    1339 %             TimeUnit=XmlData.Camera.TimeUnit;
    1340 %         end
    1341 %     end
    1342 % elseif exist(fileciv,'file')% if .civ file found
    1343 %     [error,XmlData.Time,TimeUnit,mode,npx,npy,pxcmx,pxcmy]=read_imatext([FileBase '.civ']);
    1344 %     GeometryCalib.R=[pxcmx 0 0; 0 pxcmy 0;0 0 0];
    1345 %     GeometryCalib.Tx=0;
    1346 %     GeometryCalib.Ty=0;
    1347 %     GeometryCalib.Tz=1;
    1348 %     GeometryCalib.dpx=1;
    1349 %     GeometryCalib.dpy=1;
    1350 %     GeometryCalib.sx=1;
    1351 %     GeometryCalib.Cx=0;
    1352 %     GeometryCalib.Cy=0;
    1353 %     GeometryCalib.f=1;
    1354 %     GeometryCalib.kappa1=0;
    1355 %     GeometryCalib.CoordUnit='cm';
    1356 %     XmlData.GeometryCalib=GeometryCalib;
    1357 %     if error==2, warntext=['no file ' FileBase '.civ'];
    1358 %     elseif error==1, warntext='inconsistent number of fields in the .civ file';
    1359 %     end
    1360 %     
    1361 %     set(handles.num_Npx,'String',num2str(npx));%fills nbre of pixels x box
    1362 %     set(handles.num_Npy,'String',num2str(npy));%fills nbre of pixels y box
    1363 %     set(handles.pxcm,'String',num2str(pxcmx));%fills scale x (pixel/cm) box
    1364 %     set(handles.pycm,'String',num2str(pxcmy));%fills scale y (pixel/cm) box
    1365 %     set(handles.pxcm,'Visible','on');%fills scale x (pixel/cm) box
    1366 %     set(handles.pycm,'Visible','on');%fills scale y (pixel/cm) box
    1367 % end   
    1368 % if ~isempty(TimeUnit_1) && ~isequal(TimeUnit_1,TimeUnit)
    1369 %         msgbox_uvmat('WARNING','the time units for the second series differs from the first one')
    1370 % end
    1371 %         
    1372 % % store last index in handles.lat_i and .last_j
    1373 % if ~isempty(XmlData.Time)
    1374 %     nbfield_1=size(XmlData.Time,1);
    1375 %     nbfield_j_1=size(XmlData.Time,2);   
    1376 % end
    1377 % last_i_cell=get(handles.last_i,'String');
    1378 % if isempty(nbfield_1)
    1379 %     last_i_cell{2}='';
    1380 % else
    1381 %     last_i_cell{2}=num2str(nbfield_1);
    1382 % end
    1383 % set(handles.last_i,'String',last_i_cell)
    1384 % last_j_cell=get(handles.last_j,'String');
    1385 % if isempty(nbfield_j_1)
    1386 %      last_j_cell{2}='';
    1387 % else
    1388 %      last_j_cell{2}=num2str(nbfield_j_1);
    1389 % end
    1390 % set(handles.last_j,'String',last_j_cell);
    1391 % if ~isequal(last_i_cell{1},last_i_cell{2}) || ~isequal(last_j_cell{1},last_j_cell{2})
    1392 %         msgbox_uvmat('WARNING','the numbers of input file of the second series differs from the first one')
    1393 % end
    1394 %
    1395 % % store calibration data
    1396 % GeometryCalib=XmlData.GeometryCalib;
    1397 % if isempty(GeometryCalib)
    1398 %     if isfield(UvData, 'GeometryCalib_1')
    1399 %         UvData=rmfield(UvData,'GeometryCalib_1');
    1400 %     end
    1401 % else
    1402 %     UvData.GeometryCalib_1=GeometryCalib;
    1403 %     if (isfield(GeometryCalib,'R')&& ~isequal(GeometryCalib.R(2,1),0) && ~isequal(GeometryCalib.R(1,2),0)) ||...
    1404 %         (isfield(GeometryCalib,'kappa1')&& ~isequal(GeometryCalib.kappa1,0))
    1405 %         set(handles.pxcm,'String','var')
    1406 %         set(handles.pycm,'String','var')
    1407 %     else
    1408 %         if isfield(GeometryCalib,'fx_fy')
    1409 %             pixcmx=GeometryCalib.fx_fy(1);
    1410 %             pixcmy=GeometryCalib.fx_fy(2);
    1411 %             set(handles.pxcm,'String',num2str(pixcmx))
    1412 %             set(handles.pycm,'String',num2str(pixcmy))
    1413 %         end
    1414 %     end
    1415 % end
    1416 % UvData.XmlData_1=XmlData;
    1417 % set(handles.uvmat,'UserData',UvData)%update the data attached to the uvmat interface
    1418 %
    1419 % if ~isequal(warntext,'')
    1420 %     msgbox_uvmat('WARNING',warntext)
    1421 % end
    1422 %
    1423 % set(handles.RootPath_1,'BackgroundColor',[1 1 1])% signa the end the input operation
    1424 % drawnow
    1425 %
    1426 % set_scan_options(handles)
    14271117
    14281118%------------------------------------------------------------------------
     
    14331123    set(handles.scan_i,'BackgroundColor',[1 1 0])
    14341124    set(handles.scan_j,'Value',0)
    1435 %     set(handles.scan_j,'BackgroundColor',[0.831 0.816 0.784])
    14361125else
    14371126    set(handles.scan_i,'BackgroundColor',[0.831 0.816 0.784])
    14381127    set(handles.scan_j,'Value',1)
    1439 %     set(handles.scan_j,'BackgroundColor',[1 1 0])
    14401128end
    14411129scan_j_Callback(hObject, eventdata, handles)
     
    14491137    set(handles.scan_i,'Value',0)
    14501138    set(handles.scan_i,'BackgroundColor',[0.831 0.816 0.784])
    1451     NomType=get(handles.NomType,'String');
    1452 %     NomType=get(handles.FileIndex,'UserData');
    1453     switch NomType
    1454     case {'_1_1-2','#_ab','%3dab'},% pair with j index
    1455         set(handles.fix_pair,'Visible','on')% option fixed pair on/off made visible (choice of avaible pair with buttons + and - if ='off')
    1456     otherwise
    1457         set(handles.fix_pair,'Visible','off')
    1458     end
     1139%     NomType=get(handles.NomType,'String');
     1140%     switch NomType
     1141%     case {'_1_1-2','#_ab','%3dab'},% pair with j index
     1142%         set(handles.CheckFixPair,'Visible','on')% option fixed pair on/off made visible (choice of avaible pair with buttons + and - if ='off')
     1143%     otherwise
     1144%         set(handles.CheckFixPair,'Visible','off')
     1145%     end
    14591146else
    14601147    set(handles.scan_j,'BackgroundColor',[0.831 0.816 0.784])
    14611148    set(handles.scan_i,'Value',1)
    14621149    set(handles.scan_i,'BackgroundColor',[1 1 0])
    1463     set(handles.fix_pair,'Visible','off')
     1150    set(handles.CheckFixPair,'Visible','off')
    14641151end
    14651152
     
    17051392        transform=transform_list{choice_value};
    17061393        if  ~isequal(transform_name,'') && ~isequal(transform_name,'px')
    1707             if isfield(UvData,'XmlData') && isfield(UvData.XmlData,'GeometryCalib')%use geometry calib recorded from the ImaDoc xml file as first priority
    1708                 Calib=UvData.XmlData.GeometryCalib;
    1709                 Mask=transform(Mask,UvData.XmlData);
     1394            if isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'GeometryCalib')%use geometry calib recorded from the ImaDoc xml file as first priority
     1395                Calib=UvData.XmlData{1}.GeometryCalib;
     1396                Mask=transform(Mask,UvData.XmlData{1});
    17101397            end
    17111398        end
     
    17631450drawnow
    17641451%TODO: introduce the option: increment ='*' to move to the next available view
    1765 increment=str2double(get(handles.increment_scan,'String')); %get the field increment d
    1766 if isnan(increment)
    1767     set(handles.increment_scan,'String','1')%default value
    1768     increment=1;
    1769 end
     1452increment=str2num(get(handles.increment_scan,'String')); %get the field increment d
     1453% if isnan(increment)
     1454%     set(handles.increment_scan,'String','1')%default value
     1455%     increment=1;
     1456% end
    17701457errormsg=runpm(hObject,eventdata,handles,increment);
    17711458if ~isempty(errormsg)
     
    17821469set(handles.runmin,'BackgroundColor',[1 1 0])%paint the command button in yellow
    17831470drawnow
    1784 increment=-str2double(get(handles.increment_scan,'String')); %get the field increment d
    1785 if isnan(increment)
    1786     set(handles.increment_scan,'String','1')%default value
    1787     increment=1;
    1788 end
     1471increment=-str2num(get(handles.increment_scan,'String')); %get the field increment d
     1472% if isnan(increment)
     1473%     set(handles.increment_scan,'String','1')%default value
     1474%     increment=1;
     1475% end
    17891476errormsg=runpm(hObject,eventdata,handles,increment);
    17901477if ~isempty(errormsg)
     
    17991486set(handles.Movie,'BackgroundColor',[1 1 0])%paint the command button in yellow
    18001487drawnow
    1801 increment=str2double(get(handles.increment_scan,'String')); %get the field increment d
    1802 if isnan(increment)
    1803     set(handles.increment_scan,'String','1')%default value
    1804     increment=1;
    1805 end
     1488increment=str2num(get(handles.increment_scan,'String')); %get the field increment d
     1489% if isnan(increment)
     1490%     set(handles.increment_scan,'String','1')%default value
     1491%     increment=1;
     1492% end
    18061493set(handles.STOP,'Visible','on')
    18071494set(handles.speed,'Visible','on')
     
    18301517set(handles.MovieBackward,'BackgroundColor',[1 1 0])%paint the command button in yellow
    18311518drawnow
    1832 increment=-str2double(get(handles.increment_scan,'String')); %get the field increment d
    1833 if isnan(increment)
    1834     set(handles.increment_scan,'String','1')%default value
    1835     increment=1;
    1836 end
     1519increment=-str2num(get(handles.increment_scan,'String')); %get the field increment d
    18371520set(handles.STOP,'Visible','on')
    18381521set(handles.speed,'Visible','on')
     
    18711554function errormsg=runpm(hObject,eventdata,handles,increment)
    18721555%------------------------------------------------------------------------
     1556errormsg='';%default
    18731557%% check for movie pair status
    18741558movie_status=get(handles.movie_pair,'Value');
     
    18811565InputFile.RootFile=regexprep(InputFile.RootFile,'^[\\/]|[\\/]$','');%suppress possible / or \ separator at the beginning or the end of the string
    18821566InputFile.SubDir=regexprep(InputFile.SubDir,'^[\\/]|[\\/]$','');%suppress possible / or \ separator at the beginning or the end of the string
    1883 % if isempty(InputFile.RootFile)
    1884 %     filebase=InputFile.RootPath;
    1885 % else
    1886  filebase=fullfile(InputFile.RootPath,InputFile.RootFile);
    1887 % end
    18881567FileExt=InputFile.FileExt;
    1889 % [FileName,RootPath,filebase,FileIndices,FileExt,subdir]=read_file_boxes(handles);
    18901568NomType=get(handles.NomType,'String');
    1891 % NomType=get(handles.FileIndex,'UserData');
    18921569i1=str2num(get(handles.i1,'String'));%read the field indices (for movie, it is not given by the file name)
    18931570i2=str2num(get(handles.i2,'String'));
     
    18951572j2=stra2num(get(handles.j2,'String'));
    18961573sub_value= get(handles.SubField,'Value');
    1897 if sub_value % a second input file has been entered
    1898    
     1574if sub_value % a second input file has been entered
    18991575    [FileName_1,RootPath_1,filebase_1,FileIndices_1,FileExt_1,SubDir_1]=read_file_boxes_1(handles);
    19001576    [tild,tild,tild,i1_1,i2_1,j1_1,j2_1]=fileparts_uvmat(FileIndices_1);
    1901   %  [pp,ff,i1_1_str,i2_1_str,j1_1_str,j2_1_str]=name2display(FileIndices_1);
    1902 %     i1_1=stra2num(i1_1_str);%current set of indices for the second field (may be set different than the main indices)
    1903 %     i2_1=stra2num(i2_1_str);
    1904 %     j1_1=stra2num(j1_1_str);
    1905 %     j2_1=stra2num(j2_1_str);
    19061577    NomType_1=get(handles.NomType_1,'String');
    1907 %     NomType_1=get(handles.FileIndex_1,'UserData');
    19081578else
    19091579    filename_1=[];
    19101580end   
    1911 comp_input=get(handles.fix_pair,'Value');
    19121581
    19131582%% increment (or decrement) the field indices and update the input filename(s)
    1914 if get(handles.scan_i,'Value')==1% case of scanning along index i
    1915     i1=i1+increment;
    1916     i2=i2+increment;
    1917     if sub_value
    1918         i1_1=i1_1+increment;
    1919         i2_1=i2_1+increment;
    1920     end
    1921 else % case of scanning along index j (burst numbers)
    1922     j1=j1+increment;
    1923     j2=j2+increment;
    1924     if sub_value
    1925         j1_1=j1_1+increment;
    1926         j2_1=j2_1+increment;
    1927     end
    1928 end
    1929 if ~comp_input
     1583CheckSearch=0;
     1584if isempty(increment)
     1585    CheckSearch=1;% search for the next available file
     1586    set(handles.CheckFixPair,'Value',0)
     1587end
     1588CheckFixPair=get(handles.CheckFixPair,'Value');
     1589if CheckFixPair
     1590    if get(handles.scan_i,'Value')==1% case of scanning along index i
     1591        i1=i1+increment;
     1592        i2=i2+increment;
     1593        if sub_value
     1594            i1_1=i1_1+increment;
     1595            i2_1=i2_1+increment;
     1596        end
     1597    else % case of scanning along index j (burst numbers)
     1598        j1=j1+increment;
     1599        j2=j2+increment;
     1600        if sub_value
     1601            j1_1=j1_1+increment;
     1602            j2_1=j2_1+increment;
     1603        end
     1604    end
     1605else
    19301606    UvData=get(handles.uvmat,'UserData');
    19311607    ref_i=i1;
     
    19401616        end
    19411617    end
    1942     if ref_i+1>size(UvData.i1_series{1},1)
    1943         msgbox_uvmat('ERROR','maximum i index exceeded');
    1944         return
    1945     end
    1946     if ref_j+1>size(UvData.i1_series{1},2)
    1947         msgbox_uvmat('ERROR','maximum j index exceeded');
     1618    if ~isempty(increment)
     1619        if get(handles.scan_i,'Value')==1% case of scanning along index i
     1620            ref_i=ref_i+increment;
     1621        else % case of scanning along index j (burst numbers)
     1622            ref_j=ref_j+increment;
     1623        end
     1624    else% free increment
     1625        if isequal(get(handles.runplus,'BackgroundColor'),[1 1 0])% if runplus is activated
     1626            step=1;
     1627        else
     1628            step=-1;
     1629        end
     1630        if get(handles.scan_i,'Value')==1% case of scanning along index i
     1631            ref_i=ref_i+step;
     1632            while ref_i>=0  && size(UvData.i1_series{1},1)>=ref_i+1 && UvData.i1_series{1}(ref_i+1,ref_j+1,1)==0
     1633                ref_i=ref_i+step;
     1634            end
     1635        else % case of scanning along index j (burst numbers)
     1636            ref_j=ref_j+step;
     1637            while ref_j>=0  && size(UvData.i1_series{1},2)>=ref_j+1 && UvData.i1_series{1}(ref_i+1,ref_j+1,1)==0
     1638                ref_j=ref_j+step;
     1639            end
     1640        end
     1641    end
     1642    if ref_i<0
     1643        errormsg='minimum i index reached';
     1644    elseif ref_j<0
     1645        errormsg='minimum j index reached';
     1646    elseif ref_i+1>size(UvData.i1_series{1},1)
     1647        errormsg='maximum i index reached';
     1648    elseif ref_j+1>size(UvData.i1_series{1},2)
     1649        errormsg='maximum j index reached';
     1650    end
     1651    if ~isempty(errormsg)
    19481652        return
    19491653    end
     
    21211825transform=transform_list{choice_value};
    21221826if  ~isequal(transform_name,'') && ~isequal(transform_name,'px')
    2123     if test_1 && isfield(UvData,'XmlData_1') && isfield(UvData.XmlData_1,'GeometryCalib')%use geometry calib recorded from the ImaDoc xml file as first priority
    2124         Field_a=transform(Field_a,UvData.XmlData_1);%the first field has been stored without transform
    2125         Field_b=transform(Field_b,UvData.XmlData_1);
    2126     elseif ~test_1 && isfield(UvData,'XmlData') && isfield(UvData.XmlData,'GeometryCalib')%use geometry calib
    2127         Field_b=transform(Field_b,UvData.XmlData);
     1827    if test_1 && isfield(UvData,'XmlData') && numel(UvData.XmlData)==2 && isfield(UvData.XmlData{2},'GeometryCalib')%use geometry calib recorded from the ImaDoc xml file as first priority
     1828        Field_a=transform(Field_a,UvData.XmlData{2});%the first field has been stored without transform
     1829        Field_b=transform(Field_b,UvData.XmlData{2});
     1830    elseif ~test_1 && isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'GeometryCalib')%use geometry calib
     1831        Field_b=transform(Field_b,UvData.XmlData{1});
    21281832    end
    21291833end
     
    23292033            end
    23302034    end
    2331 %     if strcmp(get(handles.FileExt_1,'Visible'),'on')
    2332 %         FileExt_1=get(handles.FileExt_1,'String');
    2333 %     else
    2334 %         FileExt_1=get(handles.FileExt,'String');%read the file extension for the first series (case of veltype comparison within a single file)
    2335 %     end
    23362035    NomType_1=get(handles.NomType_1,'String');
    2337 %     %         NomType_1=get(handles.FileIndex_1,'UserData');
    2338 %     if isequal(Ext_1,'.nc')||isequal(Ext_1,'.cdf')
    2339 %         FileType_1='netcdf';
    2340 %     elseif isfield(UvData,'MovieObject_1')
    2341 %         Name=UvData.MovieObject_1;
    2342 %         FileType_1='movie';
    2343 %     elseif isequal(lower(Ext_1),'.avi')
    2344 %         FileType_1='avi';
    2345 %     elseif isequal(lower(Ext_1),'.vol')
    2346 %         FileType_1='vol';
    2347 %         if isfield(UvData.XmlData_1,'Npy') && isfield(UvData.XmlData_1,'Npx')
    2348 %             ParamIn.Npy=UvData.XmlData_1.Npy;
    2349 %             ParamIn.Npx=UvData.XmlData_1.Npx;
    2350 %         else
    2351 %             errormsg='Npx and Npy need to be defined in the xml file for volume images .vol';
    2352 %             return
    2353 %         end
    2354 %     else
    2355 %         if length(Ext_1)>=2
    2356 %             form=imformats(Ext_1(2:end));
    2357 %             if ~isempty(form)% if the extension corresponds to an image format recognized by Matlab
    2358 %                 if isequal(NomType_1,'*');
    2359 %                     FileType_1='multimage';
    2360 %                 else
    2361 %                     FileType_1='image';
    2362 %                 end
    2363 %             end
    2364 %         end
    2365 %     end
    2366 %     if strcmp(FileType_1,'netcdf')
    2367 %         list_fields=get(handles.Fields_1,'String');% list menu fields
    2368 %         index_fields=get(handles.Fields_1,'Value');% selected string index
    2369 %         FieldName_1= list_fields{index_fields}; % selected field
    2370 %         if ~isequal(FieldName_1,'get_field...')% read the field names on the interface get_field...
    2371 %             VelType_1='';
    2372 %             if get(handles.FixVelType,'Value')
    2373 %                 VelTypeList=get(handles.VelType_1,'String');
    2374 %                 index=get(handles.VelType_1,'Value');
    2375 %                 VelType_1=VelTypeList{index};
    2376 %             end
    2377 %         end
    2378 %         if strcmp(VelType_1,'*')% free veltype choice
    2379 %             VelType_1=[];
    2380 %         elseif strcmp(VelType_1,'"')% veltype the same as for the first field
    2381 %             if isempty(VelType)
    2382 %                 VelType_1=[];
    2383 %             else
    2384 %                 VelType_1=VelType;
    2385 %             end
    2386 %         end
    2387 %         if strcmp(FieldName_1,'velocity')
    2388 %             list_code=get(handles.ListColorCode,'String');% list menu fields
    2389 %             index_code=get(handles.ListColorCode,'Value');% selected string index
    2390 %             if  ~strcmp(list_code{index_code},'black') &&  ~strcmp(list_code{index_code},'white')
    2391 %                 list_code=get(handles.ListColorScalar,'String');% list menu fields
    2392 %                 index_code=get(handles.ListColorScalar,'Value');% selected string index
    2393 %                 ParamIn.ColorVar= list_code{index_code}; % selected field
    2394 %             end
    2395 %         end
    2396 %     end
    23972036    test_keepdata_1=0;% test for keeping the previous stored data if the input files are unchanged
    23982037    if ~isequal(NomType_1,'*')%in case of a series of files (not avi movie)
     
    25132152%% apply coordinate transform or other user fct
    25142153XmlData=[];%default
     2154XmlData_1=[];%default
    25152155if isfield(UvData,'XmlData')%use geometry calib recorded from the ImaDoc xml file as first priority
    2516     XmlData=UvData.XmlData;
    2517 end
    2518 XmlData_1=[];%default
    2519 if isfield(UvData,'XmlData_1')
    2520    XmlData_1=UvData.XmlData_1;
    2521 end
     2156    XmlData=UvData.XmlData{1};
     2157    if numel(UvData.XmlData)==2
     2158        XmlData_1=UvData.XmlData{2};
     2159    end
     2160end
     2161
    25222162% menu_transform=get(handles.transform_fct,'String');
    25232163choice_value=get(handles.transform_fct,'Value');
     
    26842324elseif isfield(UvData,'Z')
    26852325    if isfield(UvData,'CoordType')&& isequal(UvData.CoordType,'phys') && isfield(UvData,'XmlData')
    2686         XmlData=UvData.XmlData;
     2326        XmlData=UvData.XmlData{1};
    26872327        if isfield(XmlData,'PlanePos')
    26882328            UvData.Object{1}.Coord=XmlData.PlanePos(UvData.ZIndex,:);
     
    27262366    UvData.Object={[]};
    27272367    set(handles.ListObject,'Value',1)
    2728 %     set(handles.list_object_2,'Value',1)
    2729 %     set(handles.list_object_2,'String',{''})
    2730 %     set(handles.list_object_2,'Visible','off')
    27312368end
    27322369IndexObj=get(handles.ListObject,'Value');%selected projection object for main view
     
    29282565end
    29292566% time from xml file overset previous result
    2930 if isfield(UvData,'XmlData') && isfield(UvData.XmlData,'Time')
     2567if isfield(UvData,'XmlData') && isfield(UvData.XmlData{1},'Time')
    29312568    if isempty(num_i2)||isnan(num_i2)
    29322569        num_i2=num_i1;
     
    29382575        num_j2=num_j1;
    29392576    end
    2940     siz=size(UvData.XmlData.Time);
     2577    siz=size(UvData.XmlData{1}.Time);
    29412578    if siz(1)>=max(num_i1,num_i2) && siz(2)>=max(num_j1,num_j2)
    2942         abstime=(UvData.XmlData.Time(num_i1,num_j1)+UvData.XmlData.Time(num_i2,num_j2))/2;%overset the time read from files
    2943         dt=(UvData.XmlData.Time(num_i2,num_j2)-UvData.XmlData.Time(num_i1,num_j1));
     2579        abstime=(UvData.XmlData{1}.Time(num_i1,num_j1)+UvData.XmlData{1}.Time(num_i2,num_j2))/2;%overset the time read from files
     2580        dt=(UvData.XmlData{1}.Time(num_i2,num_j2)-UvData.XmlData{1}.Time(num_i1,num_j1));
    29442581        testimedoc=1;
    2945         if isfield(UvData.XmlData,'TimeUnit')
    2946             TimeUnit=UvData.XmlData.TimeUnit;
    2947         end
    2948     end
    2949 end
    2950 if isfield(UvData,'XmlData_1') && isfield(UvData.XmlData_1,'Time')
    2951     [tild,tild,tild,num_i1,num_i2,num_j1,num_j2]=fileparts_uvmat(['xx' get(handles.FileIndex_1,'String') get(handles.FileExt_1,'String')]);
    2952   %  [P,F,str1,str2,str_a,str_b,E]=name2display(['xx' get(handles.FileIndex_1,'String') get(handles.FileExt_1,'String')]);
    2953     if isempty(num_i2)
    2954         num_i2=num_i1;
    2955     end
    2956     if isempty(num_j1)
    2957         num_j1=1;
    2958     end
    2959     if isempty(num_j2)
    2960         num_j2=num_j1;
    2961     end
    2962     siz=size(UvData.XmlData_1.Time);
    2963     if siz(1)>=max(num_i1,num_i2) && siz(2)>=max(num_j1,num_j2)
    2964         abstime_1=(UvData.XmlData_1.Time(num_i1,num_j1)+UvData.XmlData_1.Time(num_i2,num_j2))/2;%overset the time read from files
    2965     end
    2966 end
     2582        if isfield(UvData.XmlData{1},'TimeUnit')
     2583            TimeUnit=UvData.XmlData{1}.TimeUnit;
     2584        end
     2585    end
     2586    if numel(UvData.XmlData)==2
     2587        [tild,tild,tild,num_i1,num_i2,num_j1,num_j2]=fileparts_uvmat(['xx' get(handles.FileIndex_1,'String') get(handles.FileExt_1,'String')]);
     2588        %  [P,F,str1,str2,str_a,str_b,E]=name2display(['xx' get(handles.FileIndex_1,'String') get(handles.FileExt_1,'String')]);
     2589        if isempty(num_i2)
     2590            num_i2=num_i1;
     2591        end
     2592        if isempty(num_j1)
     2593            num_j1=1;
     2594        end
     2595        if isempty(num_j2)
     2596            num_j2=num_j1;
     2597        end
     2598        siz=size(UvData.XmlData{2}.Time);
     2599        if siz(1)>=max(num_i1,num_i2) && siz(2)>=max(num_j1,num_j2)
     2600            abstime_1=(UvData.XmlData{2}.Time(num_i1,num_j1)+UvData.XmlData{2}.Time(num_i2,num_j2))/2;%overset the time read from files
     2601        end
     2602    end
     2603end
     2604
    29672605if ~isequal(numel(abstime),1)
    29682606    abstime=[];
     
    30202658end
    30212659
    3022 
    30232660%-------------------------------------------------------------------
    30242661
     
    30352672    set(handles.CheckZoom,'BackgroundColor',[0.7 0.7 0.7])
    30362673end
    3037 
    30382674
    30392675%-------------------------------------------------------------------
     
    30982734fin=close(nc);
    30992735
    3100 
    31012736%-------------------------------------------------------------------
    31022737%determines the fields to read from the interface
     
    31072742VelType=VelTypeList{index};
    31082743
    3109 % VelType=[]; %default
    3110 % if (get(handles.VelType,'Value') == 1);
    3111 %         VelType='civ1';
    3112 % % interp1   
    3113 % elseif (get(handles.interp1,'Value') == 1);
    3114 %     VelType='interp1';
    3115 % % filter1   
    3116 % elseif (get(handles.filter1,'Value') == 1);
    3117 %     VelType='filter1'; 
    3118 % % CIV2
    3119 % elseif (get(handles.civ2,'Value') == 1);
    3120 %     VelType='civ2';
    3121 % % interp2   
    3122 % elseif (get(handles.interp2,'Value') == 1);
    3123 %     VelType='interp2';
    3124 % % filter2   
    3125 % elseif (get(handles.filter2,'Value') == 1); 
    3126 %     VelType='filter2';
    3127 % end
    3128 %
    3129 % if isequal(get(handles.filter2,'Visible'),'on');
    3130 %     civ=6;
    3131 % % interp1   
    3132 % elseif isequal(get(handles.interp2,'Visible'),'on');
    3133 %     civ=5;
    3134 % % filter1   
    3135 % elseif isequal(get(handles.civ2,'Visible'),'on');
    3136 %     civ=4; 
    3137 % % CIV2
    3138 % elseif isequal(get(handles.filter1,'Visible'),'on');
    3139 %    civ=3;
    3140 % % interp2   
    3141 % elseif isequal(get(handles.interp1,'Visible'),'on');
    3142 %     civ=2;
    3143 % % filter2   
    3144 % elseif isequal(get(handles.VelType,'Visible'),'on'); 
    3145 %     civ=1;
    3146 % else
    3147 %     civ=0;
    3148 % end
    3149 
    31502744%-------------------------------------------------------------------
    31512745%determines the veltype of the second field to read from the iinterface
     
    31552749index=get(handles.VelType_1,'Value');
    31562750VelType=VelTypeList{index};
    3157 % VelType=[]; %default
    3158 % if (get(handles.VelType_1,'Value') == 1);
    3159 %     VelType='civ1';
    3160 % % interp1   
    3161 % elseif (get(handles.interp1_1,'Value') == 1);
    3162 %     VelType='interp1';
    3163 % % filter1   
    3164 % elseif (get(handles.filter1_1,'Value') == 1);
    3165 %     VelType='filter1'; 
    3166 % % CIV2
    3167 % elseif (get(handles.civ2_1,'Value') == 1);
    3168 %     VelType='civ2';
    3169 % % interp2   
    3170 % elseif (get(handles.interp2_1,'Value') == 1);
    3171 %     VelType='interp2';
    3172 % % filter2   
    3173 % elseif (get(handles.filter2_1,'Value') == 1); 
    3174 %     VelType='filter2';
    3175 % end
    3176 
    31772751
    31782752%---------------------------------------------------
     
    32882862[RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    32892863FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    3290 % [FileName,RootPath,FileBase,FileIndices,FileExt]=read_file_boxes(handles);
    32912864[tild,tild,tild,i1,i2,j1,j2,tild,NomType]=fileparts_uvmat(['xxx' get(handles.FileIndex,'String') FileExt]);
    3292 % [P,F,str1,str2,str_a,str_b,E,NomType]=name2display(['xxx' get(handles.FileIndex,'String') FileExt]);
    3293 NomTypeNew=NomType;%default
     2865% NomTypeNew=NomType;%default
    32942866if isequal(field,'image')
    3295     if isequal(NomType,'_1-2_1')||isequal(NomType,'_1_1-2')
    3296         NomTypeNew='_1_1';
    3297     elseif isequal(NomType,'#_ab')
    3298         NomTypeNew='#a';
    3299     elseif isequal(NomType,'_1-2')
    3300         NomTypeNew='_1';
    3301     end
    3302     imagename=fullfile_uvmat(RootPath,SubDir,RootFile,'.png',NomTypeNew,i1,i2,j1,j2);
    3303 %     imagename=name_generator(FileBase,i1,j1,'.png',NomTypeNew,1,i2,j2,'');
     2867%     if isequal(NomType,'_1-2_1')||isequal(NomType,'_1_1-2')
     2868%         NomTypeNew='_1_1';
     2869%     elseif isequal(NomType,'#_ab')
     2870%         NomTypeNew='#a';
     2871%     elseif isequal(NomType,'_1-2')
     2872%         NomTypeNew='_1';
     2873%     end
     2874    imagename=fullfile_uvmat(RootPath,SubDir,RootFile,'.png',NomType,i1,[],j1,[]);
    33042875    if ~exist(imagename,'file')
    33052876        [FileName,PathName] = uigetfile( ...
     
    33312902    end
    33322903end
    3333 % indices=name_generator('',i1,j1,'',NomTypeNew,1,i2,j2,'');
    3334 indices=fullfile_uvmat('','','','',NomTypeNew,i1,i2,j1,j2);
     2904indices=fullfile_uvmat('','','','',NomType,i1,i2,j1,j2);
    33352905set(handles.FileIndex,'String',indices)
    3336 set(handles.NomType,'String',NomTypeNew)
    3337 % set(handles.FileIndex,'UserData',NomTypeNew)
     2906% set(handles.NomType,'String',NomType)
     2907
    33382908%common to Fields_1_Callback
    33392909if isequal(field,'image')||isequal(field_1,'image')
     
    33612931UvData=get(handles.uvmat,'UserData');
    33622932if check_new && isfield(UvData,'XmlData')
    3363     UvData.XmlData_1=UvData.XmlData;
     2933    UvData.XmlData{2}=UvData.XmlData{1};
    33642934end
    33652935list_fields=get(handles.Fields,'String');% list menu fields
     
    33872957switch field_1
    33882958    case 'get_field...'
    3389         %veltype_handles=[handles.VelType handles.interp1 handles.filter1 handles.civ2 handles.interp2 handles.filter2];
    33902959        set_veltype_display(0) % no veltype display
    3391         %      [RootPath_1,SubDir_1,RootFile_1,FileIndices_1,FileExt_1]=read_file_boxes_1(handles);
    3392         %      filename=[fullfile(RootPath_1,SubDir_1,RootFile_1) FileIndices_1 FileExt_1];
    33932960        hget_field=findobj(allchild(0),'name','get_field_1');
    33942961        if ~isempty(hget_field)
     
    34062973        NomType=get(handles.NomType,'string');
    34072974        check_letter=~isempty(regexp(NomType,'[ab|AB]$'));%detect pair label by letter
    3408         NomType_1=NomType;
    3409         if check_letter
    3410             NomType_1=NomType_1(1:end-1);
    3411         else
    3412             r=regexp(NomType_1,'.-(?<num2>\d+$','names');
    3413             if ~isempty(r)
    3414                 NomType_1=regexprep(NomType_1,['-' r.num2],'');
    3415             end
    3416         end
    3417         imagename=fullfile_uvmat(RootPath_1,'',RootFile_1,'.png',NomType_1,i1,[],j1);
     2975%         NomType_1=NomType;
     2976%         if check_letter
     2977%             NomType_1=NomType_1(1:end-1);
     2978%         else
     2979%             r=regexp(NomType_1,'.-(?<num2>\d+$','names');
     2980%             if ~isempty(r)
     2981%                 NomType_1=regexprep(NomType_1,['-' r.num2],'');
     2982%             end
     2983%         end
     2984        imagename=fullfile_uvmat(RootPath_1,'',RootFile_1,'.png',NomType,i1,[],j1);
    34182985        if ~exist(imagename,'file')
    34192986            [FileName,PathName] = uigetfile( ...
     
    34523019        end
    34533020end
    3454 
    34553021
    34563022%------------------------------------------------------------------------
     
    36383204            testphys=0; %coordinates in pixels by default
    36393205            if isfield(ObjectData,'CoordType') && isequal(ObjectData.CoordType,'phys')
    3640                 if isfield(UvData,'XmlData')&& isfield(UvData.XmlData,'GeometryCalib')
    3641                     Calib=UvData.XmlData.GeometryCalib;
     3206                if isfield(UvData,'XmlData')&& isfield(UvData.XmlData{1},'GeometryCalib')
     3207                    Calib=UvData.XmlData{1}.GeometryCalib;
    36423208                    testphys=1;
    36433209                end
     
    38913457     UvData.Object=UvData.Object(1);
    38923458end
    3893 %list_object=get(handles.ListObject,'String');
    38943459set(handles.ListObject,'Value',1)
    38953460set(handles.ListObject,'String',{''})
    3896 %set(handles.list_object_2,'Value',1)
    3897 %set(handles.list_object_2,'String',{''})
    3898 %list_object_2_Callback(hObject, eventdata, handles)
    38993461
    39003462%delete mask if it is displayed
     
    39863548            end
    39873549        end
    3988 %         set(haxes,'XLimMode','auto')%reset auto mode (after CheckZoom effect)
    3989 %         set(haxes,'YLimMode','auto')
    3990 %         PlotParam.Auto_xy=1;
    39913550        plot_field(Histo,haxes);
    39923551    end
     
    42113770[PP,PlotParamOut]= plot_field(AxeData,handles.axes3,PlotParam);
    42123771write_plot_param(handles,PlotParamOut); %update the auto plot parameters
    4213 
    4214 % %-------------------------------------------------------------------
    4215 % % --- Executes on button press in grid.
    4216 % function grid_Callback(hObject, eventdata, handles)
    4217 
    42183772
    42193773%-------------------------------------------------------------------
     
    42373791    UvData.MouseAction='none';
    42383792    set(handles.edit_object,'BackgroundColor',[0.7,0.7,0.7])   
    4239 %     hset_object=findobj(allchild(0),'tag','set_object');% look for the set_object GUI
    4240 %     if ~isempty(hset_object)
    4241 %         delete(hset_object)% delete the current GUI set_object
    4242 %     end
    42433793end
    42443794set(handles.uvmat,'UserData',UvData);
     
    43533903ProjData= proj_field(UvData.Field,ObjectData);%project the current interface field on ObjectData
    43543904plot_field(ProjData,ViewObjectAxes,read_GUI(get(ViewObjectAxes,'Parent')));%read plotting parameters on the uvmat interfacPlotHandles);
    4355 %
    4356 % UvData.Object=update_obj(UvData,IndexObj(1),IndexObj(2));
    4357 % set(handles.uvmat,'UserData',UvData)
    43583905
    43593906%------------------------------------------------------------------------
     
    44063953end
    44073954end
    4408 
    4409 %         SubObjectData=get(ObjectData.DisplayHandle_uvmat,'UserData');
    4410 
    4411 
    4412 
    4413 
    4414 
    4415 
    44163955
    44173956%------------------------------------------------------
     
    45064045UvData.plotaxes=newaxes;% the axis in the new figure becomes the current main plotting axes
    45074046set(huvmat,'UserData',UvData);
    4508 increment=str2double(get(handles.increment_scan,'String')); %get the field increment d
    4509 if isnan(increment)
    4510     set(handles.increment_scan,'String','1')%default value
    4511     increment=1;
    4512 end
     4047increment=str2num(get(handles.increment_scan,'String')); %get the field increment d
    45134048set(handles.STOP,'Visible','on')
    45144049set(handles.speed,'Visible','on')
     
    46074142                testphys=0; %coordinates in pixels by default
    46084143                if isfield(ObjectData,'CoordUnit') && ~isequal(ObjectData.CoordUnit,'pixel')
    4609                     if isfield(UvData,'XmlData')&& isfield(UvData.XmlData,'GeometryCalib')
    4610                         Calib=UvData.XmlData.GeometryCalib;
     4144                    if isfield(UvData,'XmlData')&& isfield(UvData.XmlData{1},'GeometryCalib')
     4145                        Calib=UvData.XmlData{1}.GeometryCalib;
    46114146                        testphys=1;
    46124147                    end
     
    46954230[RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    46964231FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    4697 %FileName=read_file_boxes(handles);
    46984232CoordList=get(handles.transform_fct,'String');
    46994233val=get(handles.transform_fct,'Value');
     
    47074241[RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    47084242param.FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    4709 %[param.FileName]=read_file_boxes(handles);
    47104243if isequal(get(handles.SubField,'Value'),1)
    47114244    [RootPath_1,SubDir_1,RootFile_1,FileIndices_1,FileExt_1]=read_file_boxes_1(handles);
     
    47204253param.NomType_1=get(handles.NomType_1,'String');
    47214254% param.NomType_1=get(handles.FileIndex_1,'UserData');
    4722 param.comp_input=get(handles.fix_pair,'Value');
     4255param.CheckFixPair=get(handles.CheckFixPair,'Value');
    47234256huvmat=get(handles.MenuSeries,'parent');
    47244257UvData=get(huvmat,'UserData');
    4725 if isfield(UvData,'Time')
    4726     param.Time=UvData.XmlData.Time;
     4258if isfield(UvData,'XmlData')&& isfield(UvData.XmlData{1},'Time')
     4259    param.Time=UvData.XmlData{1}.Time;
    47274260end
    47284261if isequal(get(handles.scan_i,'Value'),1)
    4729     param.incr_i=str2double(get(handles.increment_scan,'String'));
     4262    param.incr_i=str2num(get(handles.increment_scan,'String'));
    47304263elseif isequal(get(handles.scan_j,'Value'),1)
    4731     param.incr_j=str2double(get(handles.increment_scan,'String'));
     4264    param.incr_j=str2num(get(handles.increment_scan,'String'));
    47324265end
    47334266param.list_fields=get(handles.Fields,'String');% list menu fields
     
    47534286 [RootPath,SubDir,RootFile,FileIndices,FileExt]=read_file_boxes(handles);
    47544287 FileName=[fullfile(RootPath,SubDir,RootFile) FileIndices FileExt];
    4755 %FileName=read_file_boxes(handles);
    4756 %[FileName,RootPath,filebase,FileIndices,ext,SubDir]=read_file_boxes(handles)
    4757 % num1=stra2num(get(handles.i1,'String'));
    4758 % num2=stra2num(get(handles.i2,'String'));
    4759 % num_a=stra2num(get(handles.j1,'String'));
    4760 % num_b=stra2num(get(handles.j2,'String'));
    4761 % NomType=get(handles.FileIndex,'UserData');
    4762 % ind_opening=1; % default (images): will advice civ1 option by default in the civ interface
    4763 % if isequal(ext,'.nc') ||  isequal(ext,'.cdf')% netcdf files
    4764 %     ind_opening=2;% propose 'fix' as the default option
    4765 % % +read the current netcdf rootfile
    4766 %     Data=nc2struct(FileName,'ListGlobalAttribute','fix','patch','civ2','fix2');
    4767 %     if isfield(Data,'fix') && isequal(Data.fix,1)
    4768 %         ind_opening=3;
    4769 %     end
    4770 %     if isfield(Data,'patch') && isequal(Data.patch,1)
    4771 %         ind_opening=4;
    4772 %     end
    4773 %     if isfield(Data,'civ2') && isequal(Data.civ2,1)
    4774 %         ind_opening=5;
    4775 %     end
    4776 %     if isfield(Data,'fix2') && isequal(Data.fix2,1)
    4777 %         ind_opening=6;
    4778 %     end
    4779 % end     
    4780 % param.RootName=filebase;
    4781 % param.NomType=NomType;
    4782 % param.num1=num1;
    4783 % param.num2=num2;
    4784 % param.num_a=num_a;
    4785 % param.num_b=num_b;
    4786 % param.SubDir=SubDir;
    4787 % param.IndOpening=ind_opening;% A REVOIR +TRANSMETTRE IMADOC INFO
    4788 % param.ImaExt=ext;
    47894288civ(FileName);% interface de civ(not in the uvmat file)
    47904289
     
    48974396        'Pick an xml Object file',get(handles.RootPath,'String'));
    48984397fileinput=[PathName FileName];%complete file name
    4899 % testblank=findstr(fileinput,' ');%look for blanks
    4900 % if ~isempty(testblank)
    4901 %     msgbox_uvmat('ERROR','forbidden input file name: contain blanks')
    4902 %     return
    4903 % end
    49044398sizf=size(fileinput);
    49054399if (~ischar(fileinput)||~isequal(sizf(1),1)),return;end
     
    49154409    delete(hset_object)% delete existing version of set_object
    49164410end
    4917 % UvData=get(handles.uvmat,'UserData');
    49184411set_object(data);% call the set_object interface
    4919 % %position the set_object GUI with respect to uvmat
    4920 % pos_uvmat=get(handles.uvmat,'Position');
    4921 % if isfield(UvData,'SetObjectOrigin')
    4922 %     pos_set_object(1:2)=UvData.SetObjectOrigin + pos_uvmat(1:2);
    4923 %     pos_set_object(3:4)=UvData.SetObjectSize .* pos_uvmat(3:4);
    4924 %     set(hset_object,'Position',pos_set_object)
    4925 % end
    49264412set(handles.edit_object,'Value',0); %suppress the object edit mode
    49274413set(handles.edit_object,'BackgroundColor',[0.7,0.7,0.7]) 
    49284414set(handles.MenuObject,'checked','on')
    4929 %UvData.MouseAction='create_object';
    4930 % set(handles.uvmat,'UserData',UvData)
    49314415set(handles.delete_object,'Visible','on')
    4932 % set(handles.uvmat_title,'Visible','on')
    4933 % set(handles.view_field_title,'Visible','on')
    49344416
    49354417%------------------------------------------------------------------------
     
    50424524end
    50434525
    5044 
    50454526% --- Executes on button press in ViewObject.
    50464527function ViewObject_Callback(hObject, eventdata, handles)
     
    50654546
    50664547
    5067 
    50684548function NomType_Callback(hObject, eventdata, handles)
    50694549
Note: See TracChangeset for help on using the changeset viewer.