source: trunk/src/civ.m @ 280

Last change on this file since 280 was 280, checked in by gostiaux, 12 years ago

introduced dummy variables for multiple handles for the same tag... is it the solution ?

File size: 216.0 KB
Line 
1%'civ': function associated with the interface 'civ.fig' for PIV, spline interpolation and stereo PIV (patch)
2%------------------------------------------------------------------------
3%  provides an interface for the software CIVx
4% function varargout = civ(varargin)
5% provides an interface for the software CIVx
6%
7%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
8%  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.
9%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
10%     This file is part of the toolbox UVMAT.
11%
12%     UVMAT is free software; you can redistribute it and/or modify
13%     it under the terms of the GNU General Public License as published by
14%     the Free Software Foundation; either version 2 of the License, or
15%     (at your option) any later version.
16%
17%     UVMAT is distributed in the hope that it will be useful,
18%     but WITHOUT ANY WARRANTY; without even the implied warranty of
19%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20%     GNU General Public License (file UVMAT/COPYING.txt) for more details.
21%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
22function varargout = civ(varargin)
23%TODO: search range
24
25% Last Modified by GUIDE v2.5 18-Nov-2011 10:14:23
26% Begin initialization code - DO NOT EDIT
27gui_Singleton = 1;
28gui_State = struct('gui_Name',       mfilename, ...
29    'gui_Singleton',  gui_Singleton, ...
30    'gui_OpeningFcn', @civ_OpeningFcn, ...
31    'gui_OutputFcn',  @civ_OutputFcn, ...
32    'gui_LayoutFcn',  [] , ...
33    'gui_Callback',   []);
34if nargin && ischar(varargin{1})
35    gui_State.gui_Callback = str2func(varargin{1});
36end
37
38if nargout
39    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
40else
41    gui_mainfcn(gui_State, varargin{:});
42end
43% End initialization code - DO NOT EDIT
44
45%------------------------------------------------------------------------
46% --- Executes just before civ is made visible.
47function civ_OpeningFcn(hObject, eventdata, handles, param)
48%------------------------------------------------------------------------
49% This function has no output args, see OutputFcn.
50%filebase: root name
51%nom_type: nomencalture used ('png_old','_i_j'...)
52%list of field numbers to process
53%subdir: subdirectory of the opened netcdf file
54%ind_opening: operation number advised for beginning (1=civ1,2=fix1,3=patch1,4=civ2,5=fix2,6=patch2),
55%ind_a_opening ind_b_opening chosen pair from the opened netcdf file
56% Choose default command line output for civ
57handles.output = hObject;
58% Update handles structure
59guidata(hObject, handles);
60set(hObject,'WindowButtonDownFcn',{'mouse_alt_gui',handles}) % allows mouse action with right button (zoom for uicontrol display)
61%default initial parameters
62filebase=''; % root file name ('filebase'.civ)
63ext=[];
64
65%% read names of the .exe file to adjust the interface according to available binaries
66%path_uvmat=which('uvmat');% check the path detected for source file uvmat
67path_civ=fileparts(which('civ')); %path to civ
68addpath (path_civ) ; %add the path to UVMAT, (useful in case of change of working directory after civ has been s opened in the working directory)
69errormsg=[];%default error message
70xmlfile='PARAM.xml';
71if exist(xmlfile,'file')
72    try
73        t=xmltree(xmlfile);
74        sparam=convert(t);
75    catch
76        errormsg={' Unable to read the file PARAM.xml defining the civx binaries:'; lasterr};
77        return
78    end
79else
80    errormsg=[xmlfile ' not found: path to civx binaries undefined'];
81    return
82end
83if ~isempty(errormsg)
84    msgbox_uvmat('ERROR',errormsg);
85end
86
87test_batch=0;%default: ,no batch mode available
88if isfield(sparam,'BatchParam') && isfield(sparam.BatchParam,'BatchMode')
89    test_batch=strcmp(sparam.BatchParam.BatchMode,'sge'); %sge is currently the only implemented batch mod
90end
91if test_batch==0
92    set(handles.BATCH,'Enable','off')% put the BATCH button in grey (unactivated)
93    set(handles.BATCH,'BackgroundColor',[0.831 0.816 0.784])% put the BATCH button in grey (unactivated)
94end
95if isfield(sparam.RunParam,'CivBin')
96    if ~exist(sparam.RunParam.CivBin,'file')
97        sparam.RunParam.CivBin=fullfile(path_civ,sparam.RunParam.CivBin);
98    end
99else
100    sparam.RunParam.CivBin='';
101end
102
103%% load the list of previously browsed files in menu Open
104 dir_perso=prefdir; % path to the directory .matlab for personal data
105 profil_perso=fullfile(dir_perso,'uvmat_perso.mat');% personal data file uvmauvmat_perso.mat' in .matlab
106 if exist(profil_perso,'file')
107      h=load (profil_perso);
108      if isfield(h,'MenuFile')
109          set(handles.MenuFile_1,'Label',h.MenuFile{1})
110          %set(handles.MenuFile_1,'Label',h.MenuFile_1);
111      end
112%       if isfield(h,'MenuFile_2')
113%           set(handles.MenuFile_2,'Label',h.MenuFile_2);
114%       end
115%       if isfield(h,'MenuFile_3')
116%           set(handles.MenuFile_3,'Label',h.MenuFile_3);
117%       end
118%       if isfield(h,'MenuFile_4')
119%           set(handles.MenuFile_4,'Label',h.MenuFile_4);
120%       end
121%       if isfield(h,'MenuFile_5')
122%           set(handles.MenuFile_5,'Label',h.MenuFile_5);
123%       end
124end
125
126%default input parameters:
127num_i1=1; % set of field i numbers
128num_i2=1; % set of field i numbers
129num_j1=1; % set of field j numbers (fields a)
130num_j2=1; % second set of field j numbers (fields b)
131%subdir='A'; % subdir for the netcdf result files
132ind_opening=0; % proposed operation number (1=civ1,2=fix1,3=patch1,4=civ2,5=fix2,6=patch2)
133%load the initial parameters if the interface is started from uvmat
134if exist('param','var')&&isstruct(param)% the interface is opened from uvmat
135    filebase=param.RootName;
136    nom_type_read=param.NomType;
137    num_i1=param.num1;
138    if isnan(num_i1),num_i1=1;end
139    num_i2=param.num2;
140    if isnan(num_i2),num_i2=num_i1;end
141    num_j1=param.num_a;
142    if isnan(num_j1),num_j1=1;end
143    num_j2=param.num_b;
144    if isnan(num_j2),num_j2=num_j1;end
145    subdir=param.SubDir;
146    ind_opening=param.IndOpening;
147    ext=param.ImaExt;
148end
149browse.num_i1=num_i1;
150browse.num_i2=num_i2;
151browse.num_j1=num_j1;
152browse.num_j2=num_j2;
153if ~isempty(ext) && (~isempty(imformats(ext(2:end)))||strcmpi(ext,'.avi'));%if an image file has been opened by uvmat
154    set(handles.ImaExt,'String',ext)
155    browse.ext_ima=ext;
156    if exist('nom_type_read','var')
157        browse.nom_type_ima=nom_type_read; % the image nomenclature is stored
158    end
159elseif isequal(ext,'.nc')
160    if exist('nom_type_read','var')
161        browse.nom_type_nc=nom_type_read;% the netcdf  nomenclature is stored
162    end
163end
164set(handles.RootName,'String',filebase);
165set(handles.ImaDoc,'String',ext)
166
167%initiate advised operations
168enable_civ1(handles,0)
169enable_civ2(handles,0)
170%enable_pair1(handles,'on')
171enable_fix1(handles,0)
172enable_patch1(handles,0)
173enable_fix2(handles,0)
174enable_patch2(handles,0)
175set(handles.CIV1,'Value',0)
176set(handles.FIX1,'Value',0)
177set(handles.PATCH1,'Value',0)
178set(handles.CIV2,'Value',0)
179set(handles.FIX2,'Value',0)
180set(handles.PATCH2,'Value',0)
181%set(handles.frame_subdirciv2,'BackgroundColor',[0.831 0.816 0.784])
182if isequal(ind_opening,1)
183    set(handles.CIV1,'Value',1)
184    enable_civ1(handles,1)
185elseif isequal(ind_opening,2)
186    set(handles.FIX1,'Value',1)
187    enable_fix1(handles,1)
188elseif isequal(ind_opening,3)
189    set(handles.PATCH1,'Value',1)
190    enable_patch1(handles,1)
191elseif isequal(ind_opening,4)
192    set(handles.CIV2,'Value',1)
193    enable_civ2(handles,1)
194elseif isequal(ind_opening,5)
195    set(handles.FIX2,'Value',1)
196    enable_fix2(handles,1)
197    set(handles.frame_subdirciv2,'BackgroundColor',[1 1 0])
198    set(handles.list_pair_civ2,'Enable','On')
199    set(handles.list_pair_civ2,'Enable','On')
200    enable_pair1(handles,'off')
201elseif isequal(ind_opening,6)
202    set(handles.PATCH2,'Value',1)
203    enable_patch2(handles,1)
204    set(handles.frame_subdirciv2,'BackgroundColor',[1 1 0])
205    set(handles.list_pair_civ2,'Enable','On')
206    enable_pair1(handles,'off')
207end
208
209% set the range of fields (1:1 by default) and selected pair
210if isequal(num_i2,num_i1)
211    num_ref_i=num_i1;
212else
213    num_ref_i=floor((num_i1+num_i2)/2);
214    browse.incr_pair(1)=num_i2-num_i1;
215    browse.incr_pair(2)=0;
216end
217if isequal(num_j1,num_j2)
218    if isnan(num_j1)
219        num_ref_j=1;
220    else
221        num_ref_j=num_j1;
222    end
223else
224    num_ref_j=floor((num_j1+num_j2)/2);
225    browse.incr_pair(2)=num_j2-num_j1;
226end
227set(handles.first_i,'String',num2str(num_ref_i));
228set(handles.last_i,'String',num2str(num_ref_i));
229set(handles.first_j,'String',num2str(num_ref_j));
230set(handles.last_j,'String',num2str(num_ref_j));
231set(handles.ref_i,'String',num2str(num_ref_i));
232set(handles.ref_j,'String',num2str(num_ref_j));
233% set(handles.ref_i_civ2,'String',num2str(num_ref_i));
234% set(handles.ref_j_civ2,'String',num2str(num_ref_j));
235set(handles.RootName,'UserData',browse);
236if exist('param','var') && isfield(param,'RootName') && ~isempty(param.RootName)%varargin the interface is opened from uvmat
237    RootName_Callback(hObject, eventdata, handles);
238end
239
240%------------------------------------------------------------------------
241% --- Outputs from this function are returned to the command line.
242function varargout = civ_OutputFcn(hObject, eventdata, handles)
243%------------------------------------------------------------------------
244% varargout  cell array for returning output args (see VARARGOUT);
245% hObject    handle to figure
246% eventdata  reserved - to be defined in a future version of MATLAB
247% handles    structure with handles and user data (see GUIDATA)
248% Get default command line output from handles structure
249varargout{1} = handles.output;
250
251% --------------------------------------------------------------------
252function MenuBrowse_Callback(hObject, eventdata, handles)
253
254%get the input file properties
255filebase=get(handles.RootName,'String');
256oldfile=''; %default
257if isempty(filebase)|| isequal(filebase,'')%loads the previously stored file name and set it as default in the file_input box
258    dir_perso=prefdir;
259    profil_perso=fullfile(dir_perso,'uvmat_perso.mat');
260    if exist(profil_perso,'file')
261        h=load (profil_perso);
262        if isfield(h,'filebase')&& ischar(h.filebase)
263            oldfile=h.filebase;
264        end
265        if isfield(h,'RootPath') && ischar(h.RootPath)
266            oldfile=h.RootPath;
267        end
268    end
269else
270    oldfile=filebase;
271end
272ind_opening=1;%default
273browse.incr_pair=[0 0]; %default
274menu={'*.xml;*.civ;*.png;*.jpg;*.tif;*.avi;*.AVI;*.nc;', ' (*.xml,*.civ,*.png,*.jpg ,.tif, *.avi,*.nc)';
275       '*.xml',  '.xml files '; ...
276        '*.civ',  '.civ files '; ...
277        '*.png','.png image files'; ...
278        '*.jpg',' jpeg image files'; ...
279        '*.tif','.tif image files'; ...
280        '*.avi;*.AVI','.avi movie files'; ...
281        '*.nc','.netcdf files'; ...
282        '*.*',  'All Files (*.*)'};
283[FileName, PathName, filtindex] = uigetfile( menu, 'Pick a file',oldfile);
284fileinput=[PathName FileName];%complete file name
285sizf=size(fileinput);
286if (~ischar(fileinput)||~isequal(sizf(1),1)),return;end %stop if fileinput not a character string
287[path,name,ext]=fileparts(fileinput);
288testeditxml=0;
289if isequal(ext,'.xml')
290    testeditxml=1;
291    t_browse=xmltree(fileinput);
292    head_element=get(t_browse,1);
293    if isfield(head_element,'name')&& isequal(head_element.name,'ImaDoc')
294        testeditxml=0;
295    end
296end
297if testeditxml==1 || isequal(ext,'.xls')
298    heditxml=editxml({fileinput});
299    set(heditxml,'Tag','browser')
300    waitfor(heditxml,'Tag','idle')
301    if ~ishandle(heditxml)
302        return
303    end
304    attr=findobj(get(heditxml,'children'),'Tag','CurrentAttributes');
305    set(handles.browse,'UserData',fileinput)% store for future opening with browser
306    fileinput=get(attr,'UserData');
307    if ~exist(fileinput,'file')
308        return
309    end
310end
311[RootPath,RootFile,str1,str2,str_a,str_b,ext,nom_type,subdir]=name2display(fileinput);
312filebase=fullfile(RootPath,RootFile);
313num_i1=str2double(str1);
314if isnan(num_i1),num_i1=1;end
315num_i2=str2double(str2);
316if isnan(num_i2),num_i2=num_i1;end
317num_j1=stra2num(str_a);
318if isnan(num_j1),num_j1=1;end
319num_j2=stra2num(str_b);
320if isnan(num_j2),num_j2=num_j1;end
321if isequal(get(handles.compare,'Value'),1)
322    browse=[];%initialisation
323else
324    browse=get(handlesRootName,'UserData');
325end
326browse.num_i1=num_i1;
327browse.num_i2=num_i2;
328browse.num_j1=num_j1;
329browse.num_j2=num_j2;
330if length(ext)>1 && (~isempty(imformats(ext(2:end)))||strcmpi(ext,'.avi'));%if an image file has been opened by uvmat
331    browse.nom_type_ima=nom_type;
332    browse.ext_ima=ext;
333    set(handles.ImaExt,'String',ext)
334end
335set(handles.ImaDoc,'String',ext);
336
337%%%%% read the state of the selected netcdf file to advise default operation
338if isequal(ext,'.nc')
339    browse.nom_type_nc=nom_type;
340    ind_opening=2;% propose 'fix' as the default option
341    Data=nc2struct(fileinput,'ListGlobalAttribute','CivStage','absolut_time_T0','fix','patch','civ2','fix2');
342    if ~isempty(Data.CivStage)%test for civ files
343        ind_opening=Data.CivStage;
344        set(handles.CivMode,'Value',3)
345    end
346    if ~isempty(Data.absolut_time_T0)%test for civx files
347        set(handles.CivMode,'Value',1)
348        if isfield(Data,'fix') && isequal(Data.fix,1)
349            ind_opening=3;
350        end
351        if isequal(Data.patch,1)
352            ind_opening=4;
353        end
354        if isequal(Data.civ2,1)
355            ind_opening=5;
356        end
357        if  isequal(Data.fix2,1)
358            ind_opening=6;
359        end
360        testciv=1; %TO SUPPRESS WITH NEW VERSION OF CIVX
361    else
362        ind_opening=3; %GUI used only for patch
363        testciv=0;
364    end
365    set(handles.subdir_civ1,'String',subdir);%set the default subdir directories for installing the .nc results
366    set(handles.subdir_civ2,'String',subdir);
367    browse.testciv=testciv;
368    browse.ind_opening=ind_opening;
369end
370set(handles.RootName,'String',filebase);
371set(handles.ImaDoc,'String',ext);
372if ~isempty(num_i1)
373    ref_i=num_i1;
374    if ~isempty(num_i2)
375        ref_i=floor((ref_i+num_i2)/2);% reference image number corresponding to the file
376        browse.incr_pair(1)=num_i2-num_i1;
377        browse.incr_pair(2)=0;
378    end
379    set(handles.first_i,'String',num2str(ref_i));
380    set(handles.last_i,'String',num2str(ref_i));
381    set(handles.ref_i,'String',num2str(ref_i));
382%     set(handles.ref_i_civ2,'String',num2str(ref_i))
383end
384if isempty(num_j1)
385    set(handles.ref_j,'String','1');
386    set(handles.ref_j_civ2,'String','1');
387else
388    ref_j=num_j1;
389    if ~isempty(num_j2)
390        ref_j=floor((num_j1+num_j2)/2);
391        browse.incr_pair(2)=num_j2-num_j1;
392    end
393    set(handles.first_j,'String',num2str(ref_j));
394    set(handles.last_j,'String',num2str(ref_j));
395    set(handles.ref_j,'String',num2str(ref_j));
396%     set(handles.ref_j_civ2,'String',num2str(ref_j));
397end
398
399% set default operation options
400enable_civ1(handles,0)
401enable_civ2(handles,0')
402enable_pair1(handles,'on')
403enable_fix1(handles,0)
404enable_patch1(handles,0)
405enable_fix2(handles,0)
406enable_patch2(handles,0)
407set(handles.CIV1,'Value',0)
408set(handles.FIX1,'Value',0)
409set(handles.PATCH1,'Value',0)
410set(handles.CIV2,'Value',0)
411set(handles.FIX2,'Value',0)
412set(handles.PATCH2,'Value',0)
413% set(handles.frame_subdirciv2,'BackgroundColor',[0.831 0.816 0.784])
414if isequal(ind_opening,1)
415    set(handles.CIV1,'Value',1)
416    enable_civ1(handles,'on')
417elseif isequal(ind_opening,2)
418    set(handles.FIX1,'Value',1)
419    enable_fix1(handles,'on')
420elseif isequal(ind_opening,3)
421    set(handles.PATCH1,'Value',1)
422    enable_patch1(handles)
423elseif isequal(ind_opening,4)
424    set(handles.CIV2,'Value',1)
425    enable_civ2(handles,'on')
426elseif isequal(ind_opening,5)
427    enable_pair1(handles,'off')
428    set(handles.FIX2,'Value',1)
429    enable_fix2(handles)
430    set(handles.frame_subdirciv2,'BackgroundColor',[1 1 0])
431    set(handles.list_pair_civ2,'Enable','On')
432    set(handles.list_pair_civ2,'Enable','On')
433elseif isequal(ind_opening,6)
434    enable_pair1(handles,'off')
435    set(handles.PATCH2,'Value',1)
436    enable_patch2(handles)
437    set(handles.frame_subdirciv2,'BackgroundColor',[1 1 0])
438    set(handles.list_pair_civ2,'Enable','On')
439end
440set(handles.RootName,'UserData',browse);% store information from browser
441RootName_Callback(hObject, eventdata, handles);
442
443
444% -----------------------------------------------------------------------
445% --- Open again the file whose name has been recorded in MenuFile_1
446function MenuFile_1_Callback(hObject, eventdata, handles)
447%------------------------------------------------------------------------
448fileinput=get(handles.MenuFile_1,'Label');
449display_file_name(hObject, eventdata, handles,fileinput)
450
451% -----------------------------------------------------------------------
452% --- Open again the file whose name has been recorded in MenuFile_2
453function MenuFile_2_Callback(hObject, eventdata, handles)
454%------------------------------------------------------------------------
455fileinput=get(handles.MenuFile_2,'Label');
456display_file_name(hObject, eventdata, handles,fileinput)
457
458% -----------------------------------------------------------------------
459% --- Open again the file whose name has been recorded in MenuFile_3
460function MenuFile_3_Callback(hObject, eventdata, handles)
461%------------------------------------------------------------------------
462fileinput=get(handles.MenuFile_3,'Label');
463display_file_name(hObject, eventdata, handles,fileinput)
464
465% -----------------------------------------------------------------------
466% --- Open again the file whose name has been recorded in MenuFile_4
467function MenuFile_4_Callback(hObject, eventdata, handles)
468%------------------------------------------------------------------------
469fileinput=get(handles.MenuFile_4,'Label');
470display_file_name(hObject, eventdata, handles,fileinput)
471
472% -----------------------------------------------------------------------
473% --- Open again the file whose name has been recorded in MenuFile_5
474function MenuFile_5_Callback(hObject, eventdata, handles)
475%------------------------------------------------------------------------
476fileinput=get(handles.MenuFile_5,'Label');
477display_file_name(hObject, eventdata, handles,fileinput)
478
479%------------------------------------------------------------------------
480function ImaDoc_Callback(hObject, eventdata, handles)
481%------------------------------------------------------------------------
482RootName_Callback(hObject, eventdata, handles)
483
484%------------------------------------------------------------------------
485% --- function activated when a new filebase (image series) is introduced
486function RootName_Callback(hObject, eventdata, handles)
487%------------------------------------------------------------------------
488filebase=get(handles.RootName,'String');
489display_file_name(hObject, eventdata, handles,filebase)
490
491%------------------------------------------------------------------------
492function display_file_name(hObject, eventdata, handles,filebase)
493%------------------------------------------------------------------------
494set(handles.compare,'Visible','on')
495ext_ima='';%default
496nom_type_ima=[];%default
497field_count=1;%default
498nom_type_nc=[];
499time=[];
500TimeUnit='frame'; %default
501CoordUnit='px';%default
502pxcmx_search=[];%default
503pxcmy_search=[];%default
504
505ext_imadoc=get(handles.ImaDoc,'String');
506browse=get(handles.RootName,'UserData');%default
507if isfield(browse,'nom_type_ima')
508    nom_type_ima=browse.nom_type_ima;% get an image nomenclature type already determined by an input image name
509end
510if isfield(browse,'ext_ima')
511    ext_ima=browse.ext_ima;
512end
513if isfield(browse,'nom_type_nc')
514    nom_type_nc=browse.nom_type_nc;% get an image nomenclature type already determined by an input image name
515end
516if isfield(browse,'num_i1')
517    field_count=browse.num_i1;% get an image index type already determined by an input file
518end
519set(handles.civ,'UserData',[]); %refresh list of previous civ files (for STATUS)
520
521%default first_i and j and increments
522first_i=str2double(get(handles.first_i,'String'));%value possibly set by uvmat_Opening
523if isnan(first_i)|| first_i < 1
524    first_i=1; %default first_i
525end
526last_i=str2double(get(handles.last_i,'String'));
527if isnan(last_i)|| last_i < first_i
528    last_i=first_i;  %default last_i
529end
530first_j=str2double(get(handles.first_j,'String'));
531if isnan(first_j)|| first_j < 1
532    first_j=1; %default first_j
533end
534last_j=str2double(get(handles.last_j,'String'));
535if isnan(last_j)|| last_j < first_j
536    last_j=first_j; %default last_j
537end
538incr_i=str2double(get(handles.incr_i,'String'));
539if isnan(incr_i) || incr_i < 1;
540    set(handles.incr_i,'String','1') %default incr_i
541end
542incr_j=str2double(get(handles.incr_j,'String'));
543if isnan(incr_j) || incr_j < 1;
544    set(handles.incr_j,'String','1') %default incr_j
545end
546dt=[];%default
547testmode=0;%default
548nbfield=[]; %default
549nburst=[];%default
550pxcmx=1;
551pxcmy=1;
552
553%look for an image documentation file
554if ~strcmp(ext_imadoc,'.xml') && ~strcmp(ext_imadoc,'.civ')&& ~strcmpi(ext_imadoc,'.avi')
555    if exist([filebase '.xml'],'file')
556        ext_imadoc='.xml';
557    elseif exist([filebase '.civxml'],'file')
558        ext_imadoc='.civxml';
559    elseif exist([filebase '.civ'],'file')
560        ext_imadoc='.civ';
561    elseif exist([filebase '.avi'],'file')
562        ext_imadoc='.avi';
563    elseif exist([filebase '.AVI'],'file')
564        ext_imadoc='.AVI';
565    end
566    set(handles.ImaDoc,'String',ext_imadoc)
567end
568
569%%%%%%%%   read image documentation file  %%%%%%%%%%%%%%%%%%%%%%%%%%%
570mode=''; %default
571set(handles.ImaDoc,'BackgroundColor',[1 1 0])
572drawnow
573if isequal(ext_imadoc,'.civxml') || isequal(ext_imadoc,'.xml')|| isequal(ext_imadoc,'.civ')
574    set(handles.ref_i,'Visible','On')%use a reference index
575    set(handles.ref_j,'Visible','On')
576elseif isequal(ext_imadoc,'.avi') || isequal(ext_imadoc,'.AVI')
577    set(handles.ref_j,'Visible','Off')
578else
579    set(handles.ref_i,'Visible','Off')
580    set(handles.ref_j,'Visible','Off')
581end
582testima_xml=0;
583if isequal(ext_imadoc,'.civxml')%TO ABANDON
584    [nbfield,nbfield2,time]=read_civxml([filebase '.civxml']);
585    mode='pair j1-j2';
586    if isempty(nom_type_ima)% dtermine types by default if not already selected by browser or uvmat
587        nom_type_ima='_i_j';
588    end
589elseif isequal(ext_imadoc,'.xml')
590    [XmlData,warntext]=imadoc2struct([filebase '.xml']);
591    ext_ima_read=[];
592    nom_type_read=[];
593    if isfield(XmlData,'Heading')&&isfield(XmlData.Heading','ImageName')&&ischar(XmlData.Heading.ImageName)% get image nom type and extension from the xml file
594        [PP,FF,fc,str2,str_a,str_b,ext_ima_read,nom_type_read]=name2display(XmlData.Heading.ImageName);
595        fullname=fullfile(fileparts(filebase),XmlData.Heading.ImageName); %full name (including path) of the first image defined by the xmle file,
596        if ~exist(fullname,'file')
597            msgbox_uvmat('WARNING',['FirstImage ' fullname ' defined in the xml file does not exist'])
598        end
599    end
600    if isfield(XmlData,'Time')
601        time=XmlData.Time;
602        nbfield=size(time,1);
603        nbfield2=size(time,2);
604        %transform .Time to a column vector if it is a line vector thenomenclature uses a single index: correct possible bug in xml
605        if isequal(nbfield,1) && ~isequal(nbfield2,1)% .Time is a line vector
606            if numel(nom_type_read)>=2 && isempty(regexp(nom_type_read(2:end),'\D'))
607                time=time';
608                nbfield=nbfield2;
609                nbfield2=1;
610            end
611        end
612    end
613    if isfield(XmlData,'TimeUnit')
614        TimeUnit=XmlData.TimeUnit;
615    end
616    if isfield(XmlData,'Npx')
617        npx=XmlData.Npx;
618        npy=XmlData.Npy;
619    end
620    pxcmx_search=1;
621    pxcmy_search=1;
622    if isfield(XmlData,'GeometryCalib')
623        tsai=XmlData.GeometryCalib;
624        if isfield(tsai,'f') && isfield(tsai,'Tz') && isfield(tsai,'dpx') && isfield(tsai,'dpy')&& isfield(tsai,'R')
625            rot2D=tsai.R(1:2,[1,2]);
626            pxcmx_search=tsai.f * sqrt(det(rot2D))/(tsai.Tz*tsai.dpx);
627            pxcmy_search=tsai.f * sqrt(det(rot2D))/(tsai.Tz*tsai.dpy);
628        end
629        if isfield(tsai,'CoordUnit')
630            CoordUnit=tsai.CoordUnit;
631        end
632    end
633elseif strcmp(ext_imadoc,'.civ')% case of .civ image documentation file
634    [error,time,TimeUnit,mode,npx,npy]=read_imatext([filebase '.civ']);
635    if error==2, msgbox_uvmat('WARNING',['no file ' filebase '.civ']);
636    elseif error==1, msgbox_uvmat('WARNING','inconsistent number of fields in the .civ file');
637    end
638    nom_type_ima='001a';
639elseif strcmpi(ext_imadoc,'.avi')
640    nom_type_ima='*';
641    ext_ima=ext_imadoc;
642    set(handles.CivMode,'Value',1);
643    set(handles.CivMode,'String',{'series(Di)'})
644    dt=0.04;%default
645    if exist([filebase ext_imadoc],'file')==2
646        info=aviinfo([filebase ext_imadoc]);%read infos on the avi movie
647        dt=1/info.FramesPerSecond;%time interval between successive frames
648        nbfield=info.NumFrames;%number of frames
649    end
650    time=(dt*(0:nbfield-1))';%list of image times
651end
652if isempty(time)
653    set(handles.ImaDoc,'String',''); %xml file not used for timing
654end
655set(handles.ImaDoc,'BackgroundColor',[1 1 1])
656
657%get the imabe nomenclature type if not defined by the input file nor by the xml file
658dirima=[];%default
659if isempty(nom_type_ima)
660    %look for double image series '_i_j'
661    dirima=dir([filebase '_' num2str(first_i) '_' num2str(first_j) '.*']);
662    if isempty(dirima)
663        % look for images series  with sub marker '_'
664        dirima=dir([filebase '_*' num2str(first_i) '.*']);
665        if isempty(dirima)
666            % look for other images series
667            dirima=dir([filebase '*' num2str(first_i) '.*']);
668            if isempty(dirima)
669                % look for other images series witth letter appendix
670                appendix=char(96+first_j);
671                dirima=dir([filebase '*' num2str(first_i) appendix '.*']);
672            end
673        end
674    end
675end
676for ilist=1:numel(dirima)
677    [pp,ff,fc,str2,str_a,str_b,ext_list,nom_type_list]=name2display(dirima(ilist).name);
678    form=imformats(ext_list(2:end));
679    if ~isempty(form)% if the extension corresponds to an image format recognized by Matlab
680        ext_ima=ext_list;
681        nom_type_ima=nom_type_list;
682            break
683    end
684end
685% no image documentation file found: look for a series of existing files,images by priority or .nc files
686if isempty(nom_type_ima)
687    ext_search=ext_imadoc;
688    nom_type_search=nom_type_nc;
689else
690    ext_search=ext_ima;
691    nom_type_search=nom_type_ima;
692end
693if isempty(time) && ~strcmp(nom_type_search,'none') && ~strcmp(nom_type_search,'') && ~strcmp(nom_type_search,'*')
694    subdir=get(handles.subdir_civ1,'String');
695    incr_pair=[0 0];%default
696    if isfield(browse,'incr_pair')
697        incr_pair=browse.incr_pair;
698    end
699    %     nbdetect=0;%test of detected images
700    field_i=browse.num_i2;
701    imagename=name_generator(filebase,field_i,1,ext_search,nom_type_search);
702    imagename_plus='';
703    idetect=1;
704    while idetect %look for the maximum file number in the series
705        imagename_plus=name_generator(filebase,field_i+1,1,ext_search,nom_type_search);
706        idetect=(exist(imagename_plus,'file')==2)&& ~strcmp(imagename,imagename_plus);
707        if idetect
708            field_i=field_i+1;
709        end
710        %SEE CASE OF NETCDF FILES
711        %             nbdetect=nbdetect+(exist(imagename,'file')==2);
712    end
713    nbfield=field_i;% last detected field number
714    field_i=browse.num_i1;%look for the minimum file number in the series
715    imagename_min='';
716    idetect=1;
717    while idetect==1
718        imagename_min=name_generator(filebase,field_i-1,1,ext_search,nom_type_search);
719        idetect=(exist(imagename_min,'file')==2)&& ~strcmp(imagename,imagename_min);
720        if idetect
721            field_i=field_i-1;
722        end
723    end
724    first_i=max(field_i,1);
725    if numel(regexp(nom_type_search,'\D'))>=1%two indices i and j
726        field_i=browse.num_i1;
727        field_j=browse.num_j2;
728        imagename=name_generator(filebase,field_i,field_j,ext_search,nom_type_search);
729        imagename_plus='';
730        jdetect=1;
731        while jdetect==1 %look for the maximum file number in the series
732            imagename_plus=name_generator(filebase,field_i,field_j+1,ext_search,nom_type_search);
733            jdetect=(exist(imagename_plus,'file')==2)&& ~strcmp(imagename,imagename_plus);
734            if jdetect
735                field_j=field_j+1;
736            end
737            %SEE CASE OF NETCDF FILES
738            %             nbdetect=nbdetect+(exist(imagename,'file')==2);
739        end
740        nbfield2=field_j;% last detected field number
741     end
742 
743    %determine the set of times and possible intervals for CIV
744    %   dt=(1/1000)*str2double(get(handles.dt,'String'));
745    time=(0:nbfield-1)';% time=file index -1  by default
746    if numel(regexp(nom_type_search,'\D'))>=1%two indices i and j
747        [x,y]=meshgrid(0:nbfield2-1,0:nbfield-1);
748        time=x+y;
749    end
750end
751
752if exist('time','var')
753    if size(time,1)+size(time,2)>=3 % if there are at least two time values to define dt
754        nbfield=size(time,1);
755        nbfield2=size(time,2);
756        set(handles.ImaDoc,'UserData',time); %store the set of times
757        set(handles.dt_unit,'String',['dt in m' TimeUnit]);
758%         set(handles.dt_unit_civ2,'String',['dt in m' TimeUnit]);
759        set(handles.TimeUnit,'String',TimeUnit);
760        set(handles.nb_field,'String',num2str(nbfield));
761        set(handles.nb_field2,'String',num2str(nbfield2));
762    end
763end
764set(handles.CoordUnit,'String',CoordUnit)
765set(handles.SearchRange,'UserData',[pxcmx_search pxcmy_search]);
766% npxy=[npy npx];
767set(handles.ImaExt,'String',ext_ima)
768set(handles.first_i,'String',num2str(first_i));
769set(handles.last_i,'String',num2str(last_i));%
770set(handles.first_j,'String',num2str(first_j));
771set(handles.last_j,'String',num2str(last_j));%
772browse.nom_type_ima=nom_type_ima;
773set(handles.RootName,'UserData',browse)% store the nomenclature type
774
775%%  set the menus of image pairs and default selection for civ   %%%%%%%%%%%%%%%%%%%
776test_ima_i=numel(nom_type_ima)>1 && isempty(regexp(nom_type_ima(2:end),'\D','once'));%images with single indexing
777if test_ima_i || isequal(nom_type_nc,'_i1-i2')||~(exist('nbfield2','var')&&(nbfield2~=1))
778    set(handles.CivMode,'Value',1)
779    set(handles.CivMode,'String',{'series(Di)'})   
780elseif (nbfield==1)% simple series in j
781    set(handles.CivMode,'Value',1)
782    set(handles.CivMode,'String',{'series(Dj)'})
783else
784    set(handles.CivMode,'String',{'pair j1-j2';'series(Dj)';'series(Di)'})%multiple choice
785    if nbfield2 <= 10
786        set(handles.CivMode,'Value',1)% advice 'pair j1-j2' for small burst
787    end
788end
789
790
791%% desable status and RUN button
792set(handles.RUN, 'Enable','On')
793set(handles.RUN,'BackgroundColor',[1 0 0])
794set(handles.BATCH,'Enable','On')
795set(handles.BATCH,'BackgroundColor',[1 0 0])
796if isfield(handles,'status')
797set(handles.status,'Value',0);%suppress status display
798status_Callback(hObject, eventdata, handles)
799end
800
801%% store the root input filename for future opening
802dir_perso=prefdir;
803profil_perso=fullfile(prefdir,'uvmat_perso.mat');
804RootPath=fileparts(filebase);
805if exist(profil_perso,'file')
806    save (profil_perso,'RootPath','-append'); %store the root name for future opening of uvmat
807else
808    txt=ver('MATLAB');
809    Release=txt.Release;
810    relnumb=str2double(Release(3:4));
811    if relnumb >= 14
812        save (profil_perso,'RootPath','-V6'); %store the root name for future opening of uvmat
813    else
814        save (profil_perso,'RootPath'); %store the root name for future opening of uvmat
815    end
816end
817
818%% update the subdir
819pathdir=fileparts(filebase);%path to the current xml file
820listot=dir(pathdir);
821idir=0;
822listdir={''};%default
823for ilist=1:length(listot)
824    if listot(ilist).isdir
825        name=listot(ilist).name;
826        if ~isequal(name,'.') && ~isequal(name,'..')
827            idir=idir+1;
828            listdir{idir,1}=listot(ilist).name;
829        end
830    end
831end
832set(handles.list_subdir_civ1,'Value',1)
833set(handles.list_subdir_civ2,'Value',1)
834set(handles.list_subdir_civ1,'String',[listdir;'new...'])
835set(handles.list_subdir_civ2,'String',[listdir;'new...'])
836if isempty(listdir)
837    dirname=listdir{1};
838else
839    dirname='CIV'; %default civ directory name
840end
841set(handles.subdir_civ1,'String',dirname)
842set(handles.subdir_civ2,'String',dirname)
843%check wether the current subdir exists:
844% subdir_civ1=get(handles.subdir_civ1,'String');
845% subdir_civ2=get(handles.subdir_civ2,'String');
846
847CivMode_Callback(hObject, eventdata, handles)
848
849%------------------------------------------------------------------------
850% --- Executes on button press in CivMode.
851function CivMode_Callback(hObject, eventdata, handles)
852%------------------------------------------------------------------------
853browse=get(handles.RootName,'UserData');
854compare_list=get(handles.compare,'String');
855val=get(handles.compare,'Value');
856compare=compare_list{val};
857if strcmp(compare,'displacement')
858    mode='displacement';
859else
860    mode_list=get(handles.CivMode,'String');
861    if ischar(mode_list)
862        mode_list={mode_list};
863    end
864    mode_value=get(handles.CivMode,'Value');
865    mode=mode_list{mode_value};
866end
867displ_num=[];%default
868ref_i=str2double(get(handles.ref_i,'String'));
869% last_i=str2num(get(handles.last_i,'String'));
870time=get(handles.ImaDoc,'UserData'); %get the set of times
871siztime=size(time);
872nbfield=siztime(1);
873nbfield2=siztime(2);
874indchosen=1;  %%first pair selected by default
875if isequal(mode,'pair j1-j2')%| isequal(mode,'st_pair j1-j2')
876    dt=1;
877    displ='';
878    index=0;
879    numlist_a=[];
880    numlist_B=[];
881    %get all the time intervals in bursts
882    displ_dt=1;%default
883    nbfield2=min(nbfield2,10);%limitate the number of pairs to 10x10
884    for numod_a=1:nbfield2-1 %nbfield2 always >=2 for 'pair j1-j2' mode
885        for numod_b=(numod_a+1):nbfield2
886            index=index+1;
887            numlist_a(index)=numod_a;
888            numlist_b(index)=numod_b;
889            if ~isempty(time)
890                dt(numod_a,numod_b)=time(ref_i,numod_b)-time(ref_i,numod_a);%first time interval dt
891                displ_dt(index)=dt(numod_a,numod_b);
892            else
893                displ_dt(index)=1;
894            end
895        end
896    end
897    [dtsort,indsort]=sort(displ_dt);
898    if ~isempty(numlist_a)
899        displ_num(1,:)=numlist_a(indsort);
900        displ_num(2,:)=numlist_b(indsort);
901    end
902    displ_num(3,:)=0;
903    displ_num(4,:)=0;
904    set(handles.jtext,'Visible','Off')
905    set(handles.first_j,'Visible','Off')
906    set(handles.last_j,'Visible','Off')
907    set(handles.incr_j,'Visible','Off')
908    set(handles.nb_field2,'Visible','Off')
909    set(handles.ref_j,'Visible','Off')
910elseif isequal(mode,'series(Dj)') %| isequal(mode,'st_series(Dj)')
911    for index=1:min(nbfield2-1,200)
912        displ_num(1,index)=-floor(index/2);
913        displ_num(2,index)=ceil(index/2);
914        displ_num(3,index)=0;
915        displ_num(4,index)=0;
916    end
917    set(handles.jtext,'Visible','On')
918    set(handles.first_j,'Visible','On')
919    set(handles.last_j,'Visible','On')
920    set(handles.incr_j,'Visible','On')
921    set(handles.nb_field2,'Visible','On')
922    set(handles.ref_j,'Visible','On')
923    if nbfield > 1
924        set(handles.itext,'Visible','On')
925        set(handles.first_i,'Visible','On')
926        set(handles.last_i,'Visible','On')
927        set(handles.incr_i,'Visible','On')
928        set(handles.nb_field,'Visible','On')
929        set(handles.ref_i,'Visible','On')
930    else
931        set(handles.itext,'Visible','Off')
932        set(handles.first_i,'Visible','Off')
933        set(handles.last_i,'Visible','Off')
934        set(handles.incr_i,'Visible','Off')
935        set(handles.nb_field,'Visible','Off')
936        set(handles.ref_i,'Visible','Off')
937    end
938elseif isequal(mode,'series(Di)') %| isequal(mode,'st_series(Di)')
939    for index=1:200%min(nbfield-1,200)
940        displ_num(1,index)=0;
941        displ_num(2,index)=0;
942        displ_num(3,index)=-floor(index/2);
943        displ_num(4,index)=ceil(index/2);
944    end
945    set(handles.itext,'Visible','On')
946    set(handles.first_i,'Visible','On')
947    set(handles.last_i,'Visible','On')
948    set(handles.incr_i,'Visible','On')
949    set(handles.nb_field,'Visible','On')
950    set(handles.ref_i,'Visible','On')
951    if nbfield2 > 1
952        set(handles.jtext,'Visible','On')
953        set(handles.first_j,'Visible','On')
954        set(handles.last_j,'Visible','On')
955        set(handles.incr_j,'Visible','On')
956        set(handles.nb_field2,'Visible','On')
957        set(handles.ref_j,'Visible','On')
958    else
959        set(handles.jtext,'Visible','Off')
960        set(handles.first_j,'Visible','Off')
961        set(handles.last_j,'Visible','Off')
962        set(handles.incr_j,'Visible','Off')
963        set(handles.nb_field2,'Visible','Off')
964        set(handles.ref_j,'Visible','Off')
965    end
966elseif isequal(mode,'displacement')%the pairs have the same indices
967    displ_num(1,1)=0;
968    displ_num(2,1)=0;
969    displ_num(3,1)=0;
970    displ_num(4,1)=0;
971    if nbfield > 1
972        set(handles.itext,'Visible','On')
973        set(handles.first_i,'Visible','On')
974        set(handles.last_i,'Visible','On')
975        set(handles.incr_i,'Visible','On')
976        set(handles.nb_field,'Visible','On')
977        set(handles.ref_i,'Visible','On')
978    else
979        set(handles.itext,'Visible','Off')
980        set(handles.first_i,'Visible','Off')
981        set(handles.last_i,'Visible','Off')
982        set(handles.incr_i,'Visible','Off')
983        set(handles.nb_field,'Visible','Off')
984        set(handles.ref_i,'Visible','Off')
985    end
986    if nbfield2 > 1
987        set(handles.jtext,'Visible','On')
988        set(handles.first_j,'Visible','On')
989        set(handles.last_j,'Visible','On')
990        set(handles.incr_j,'Visible','On')
991        set(handles.nb_field2,'Visible','On')
992        set(handles.ref_j,'Visible','On')
993    else
994        set(handles.jtext,'Visible','Off')
995        set(handles.first_j,'Visible','Off')
996        set(handles.last_j,'Visible','Off')
997        set(handles.incr_j,'Visible','Off')
998        set(handles.nb_field2,'Visible','Off')
999        set(handles.ref_j,'Visible','Off')
1000    end
1001end
1002set(handles.list_pair_civ1,'UserData',displ_num);
1003find_netcpair_civ1(hObject, eventdata, handles)
1004find_netcpair_civ2(hObject, eventdata, handles)
1005
1006%------------------------------------------------------------------------
1007% determine the menu for civ1 pairs depending on existing netcdf file at the middle of
1008% the field series set by first_i, incr, last_i
1009function find_netcpair_civ1(hObject, eventdata, handles)
1010%------------------------------------------------------------------------
1011set(gcf,'Pointer','watch')
1012%nomenclature types
1013filebase=get(handles.RootName,'String');
1014[filepath,Nme,ext_dir]=fileparts(filebase);
1015browse=get(handles.RootName,'UserData');
1016compare_list=get(handles.compare,'String');
1017val=get(handles.compare,'Value');
1018compare=compare_list{val};
1019if strcmp(compare,'displacement')
1020    mode='displacement';
1021else
1022    mode_list=get(handles.CivMode,'String');
1023    mode_value=get(handles.CivMode,'Value');
1024    if isempty(mode_list)
1025        return
1026    end
1027    mode=mode_list{mode_value};
1028end
1029
1030% nomenclature type of the .nc files
1031nom_type_ima=[];%default
1032if isfield(browse,'nom_type_ima')
1033    nom_type_ima=browse.nom_type_ima;
1034end
1035
1036%determine nom_type_nc:
1037nom_type_nc=[];%default
1038if isfield(browse,'nom_type_nc')
1039    nom_type_nc=browse.nom_type_nc;
1040end
1041if isempty(nom_type_nc)
1042    [nom_type_nc]=nomtype2pair(nom_type_ima,isequal(mode,'series(Di)'),isequal(mode,'series(Dj)'));
1043end
1044browse.nom_type_nc=nom_type_nc;
1045set(handles.RootName,'UserData',browse)
1046
1047%reads .nc subdirectoy and image numbers from the interface
1048subdir_civ1=get(handles.subdir_civ1,'String');%subdirectory subdir_civ1 for the netcdf data
1049ref_i=str2double(get(handles.ref_i,'String'));
1050if isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')
1051    ref_j=0;
1052else
1053    ref_j=str2double(get(handles.ref_j,'String'));
1054end
1055time=get(handles.ImaDoc,'UserData');%get the set of times
1056if isempty(time)
1057    time=[0 1];
1058end
1059dt_unit=1000;%default
1060displ_num=get(handles.list_pair_civ1,'UserData');
1061
1062%eliminate the first pairs inconsistent with the position
1063if isempty(displ_num)
1064    nbpair=0;
1065else
1066    nbpair=length(displ_num(1,:));%nbre of displayed pairs
1067    if  isequal(mode,'series(Di)')  %| isequal(mode,'st_series(Di)')
1068        nbpair=min(2*ref_i-1,nbpair);%limit the number of pairs with positive first index
1069    elseif  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
1070        nbpair=min(2*ref_j-1,nbpair);%limit the number of pairs with positive first index
1071    end
1072end
1073nbpair=min(200,nbpair);%limit the number of displayed pairs to 200
1074
1075%look for existing processed pairs involving the field at the middle of the series if civ1 will not
1076% be performed, while the result is needed for next steps.
1077displ_pair={''};
1078select=ones(size(1:nbpair));%flag for displayed pairs =1 for display
1079testpair=0;
1080% case with no civ1 operation, netcdf files need to exist for reading
1081if get(handles.CIV1,'Value')==0 %
1082    if ~exist(fullfile(filepath,subdir_civ1,ext_dir),'dir')
1083        msgbox_uvmat('ERROR',['no civ1 file available: subdirectory ' subdir_civ1 ' does not exist']);
1084        set(handles.list_pair_civ1,'String',{});
1085        return
1086    end
1087    for ipair=1:nbpair
1088        filename=name_generator(filebase,ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair),'.nc',nom_type_nc,1,...
1089            ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair),subdir_civ1);
1090        select(ipair)=exist(filename,'file')==2;% put flag to 0 if the file does not exist
1091    end   
1092    % case of no displayed pair
1093    if isequal(select,zeros(size(1:nbpair)))
1094        if isfield(browse,'incr_pair') && ~isequal(browse.incr_pair,[0 0])
1095            num_i1=ref_i-floor(browse.incr_pair(1)/2);
1096            num_i2=ref_i+ceil(browse.incr_pair(1)/2);
1097            num_j1=ref_j-floor(browse.incr_pair(2)/2);
1098            num_j2=ref_j+ceil(browse.incr_pair(2)/2);
1099            filename=name_generator(filebase,num_i1,num_j1,'.nc',nom_type_nc,1,num_i2,num_j2,subdir_civ1);
1100            select(1)=exist(filename,'file')==2;
1101            testpair=1;
1102        else
1103            if  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
1104                msgbox_uvmat('ERROR',['no civ1 file available for the selected reference index j=' num2str(ref_j) ' and subdirectory ' subdir_civ1]);
1105            else
1106                msgbox_uvmat('ERROR',['no civ1 file available for the selected reference index i=' num2str(ref_i) ' and subdirectory ' subdir_civ1]);
1107            end
1108            set(handles.list_pair_civ1,'String',{''});
1109            %COMPLETER CAS STEREO
1110            return
1111        end
1112    end
1113end
1114if isequal(mode,'series(Di)') %| isequal(mode,'st_series(Di)')
1115    if testpair
1116        displ_pair{1}=['Di= ' num2str(-floor(browse.incr_pair(1)/2)) '|' num2str(ceil(browse.incr_pair(1)/2))];
1117    else
1118        for ipair=1:nbpair
1119            if select(ipair)
1120                if size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
1121                    dt=time(ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair));%time interval dt
1122                    displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ' :dt= ' num2str(dt*1000)];
1123                else
1124                    displ_pair{ipair}='...'; %pair not displayed in the menu
1125                end
1126            end
1127        end
1128    end
1129elseif isequal(mode,'series(Dj)')%|isequal(mode,'st_series(Dj)')% series on the j index
1130    if testpair
1131        displ_pair{1}=['Dj= ' num2str(-floor(browse.incr_pair(1)/2)) '|' num2str(ceil(browse.incr_pair(1)/2))];
1132    else
1133        for ipair=1:nbpair
1134            if select(ipair)
1135                if size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
1136                    dt=time(ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair));%time interval dt
1137                    displ_pair{ipair}=['Dj= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ' :dt= ' num2str(dt*1000)];
1138                end
1139            elseif testpair
1140                displ_pair{1}=['Dj= ' num2str(-floor(browse.incr_pair(2)/2)) '|' num2str(ceil(browse.incr_pair(2)/2))];
1141            else
1142                displ_pair{ipair}='...'; %pair not displayed in the menu
1143            end
1144        end
1145    end
1146elseif isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')%case of pairs
1147    for ipair=1:nbpair
1148        if select(ipair)
1149            dt=time(ref_i+displ_num(4,ipair),displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),displ_num(1,ipair));%time interval dt
1150            displ_pair{ipair}=['j= ' num2stra(displ_num(1,ipair),nom_type_ima) '-' num2stra(displ_num(2,ipair),nom_type_ima) ...
1151                ' :dt= ' num2str(dt*1000)];
1152        else
1153            displ_pair{ipair}='...'; %pair not displayed in the menu
1154        end
1155    end
1156elseif isequal(mode,'displacement')
1157    displ_pair={'Di=Dj=0'};
1158end
1159set(handles.list_pair_civ1,'String',displ_pair');
1160ichoice=find(select,1);
1161if (isempty(ichoice) || ichoice < 1); ichoice=1; end;
1162initial=get(handles.list_pair_civ1,'Value');%initial choice of pair
1163if initial>nbpair
1164    set(handles.list_pair_civ1,'Value',ichoice);% first valid pair proposed by default in the menu
1165end
1166if numel(select)>=initial && ~isequal(select(initial),1)
1167    set(handles.list_pair_civ1,'Value',ichoice);% first valid pair proposed by default in the menu
1168end
1169
1170%set(handles.list_pair_civ2,'String',displ_pair');
1171initial=get(handles.list_pair_civ2,'Value');
1172if initial>length(displ_pair')%|~isequal(select(initial),1)
1173    if ichoice <= length(displ_pair')
1174        set(handles.list_pair_civ2,'Value',ichoice);% same pair proposed by default for civ2
1175    else
1176        set(handles.list_pair_civ2,'Value',1);% same pair proposed by default for civ2
1177    end
1178end
1179set(handles.list_pair_civ2,'String',displ_pair');
1180set(gcf,'Pointer','arrow')
1181
1182%------------------------------------------------------------------------
1183% determine the menu for civ2 pairs depending on the existing netcdf file at the
1184%middle of the series set by first_i, incr, last_i
1185function find_netcpair_civ2(hObject, eventdata, handles)
1186%------------------------------------------------------------------------
1187set(gcf,'Pointer','watch')
1188%nomenclature types
1189filebase=get(handles.RootName,'String');
1190[filepath,Nme,ext_dir]=fileparts(filebase);
1191browse=get(handles.RootName,'UserData');
1192compare_list=get(handles.compare,'String');
1193val=get(handles.compare,'Value');
1194compare=compare_list{val};
1195if strcmp(compare,'displacement')
1196    mode='displacement';
1197else
1198    mode_list=get(handles.CivMode,'String');
1199    if isempty(mode_list)
1200        msgbox_uvmat('ERROR','please enter an input image or netcdf file')
1201        return
1202    end
1203    mode_value=get(handles.CivMode,'Value');
1204    mode=mode_list{mode_value};
1205end
1206
1207% nomenclature type of the .nc files
1208nom_type_ima='ima_num';%default
1209if isfield(browse,'nom_type_ima')
1210    nom_type_ima=browse.nom_type_ima;
1211end
1212nom_type_nc='_i1-i2';%default
1213if isfield(browse,'nom_type_nc')
1214    nom_type_nc=browse.nom_type_nc;
1215end
1216if isequal(nom_type_ima,'png_old') || isequal(nom_type_ima,'netc_old')|| isequal(nom_type_ima,'raw_SMD')|| isequal(nom_type_nc,'netc_old')
1217    nom_type_nc='netc_old';%nom_type for the netcdf files
1218elseif isequal(nom_type_ima,'none')||isequal(nom_type_nc,'none')
1219    nom_type_nc='none';
1220elseif isequal(nom_type_ima,'avi')||isequal(nom_type_ima,'_i')||isequal(nom_type_ima,'ima_num')||isequal(nom_type_nc,'_i1-i2')
1221    nom_type_nc='_i1-i2';
1222else
1223    if  isequal(mode,'series(Di)')%|isequal(mode,'st_series(Di)')
1224        nom_type_nc='_i1-i2_j'; % PIV in volume
1225    else
1226        nom_type_nc='_i_j1-j2';
1227    end
1228end
1229browse.nom_type_nc=nom_type_nc;
1230set(handles.RootName,'UserData',browse)
1231
1232%reads .nc subdirectory and image numbers from the interface
1233subdir_civ1=get(handles.subdir_civ1,'String');%subdirectory subdir_civ1 for the netcdf data
1234subdir_civ2=get(handles.subdir_civ2,'String');%subdirectory subdir_civ2 for the netcdf data
1235% first_i=str2num(get(handles.first_i,'String'));
1236% last_i=str2num(get(handles.last_i,'String'));
1237% incr=str2num(get(handles.incr_i,'String'));
1238% num1=first_i:incr:last_i;
1239% if isempty(num1)
1240%     set(handles.list_pair_civ2,'Value',1);
1241%     set(handles.list_pair_civ2,'String',{''});
1242%     return
1243% end
1244ref_i=str2double(get(handles.ref_i,'String'));
1245if isequal(mode,'pair j1-j2')%|isequal(mode,'st_pair j1-j2')
1246    ref_j=0;
1247else
1248    ref_j=str2double(get(handles.ref_j,'String'));
1249end
1250time=get(handles.ImaDoc,'UserData'); %get the set of times
1251if isempty(time)
1252    time=[0 1];%default
1253end
1254%dt_unit=str2num(get(handles.dt,'String'));% used when there is no image documentation file
1255%dt_unit=1000;
1256displ_num=get(handles.list_pair_civ1,'UserData');
1257
1258
1259%eliminate the first pairs inconsistent with the position
1260if isempty(displ_num)
1261    nbpair=0;
1262else
1263    nbpair=length(displ_num(1,:));%nbre of displayed pairs
1264    if  isequal(mode,'series(Di)')% | isequal(mode,'st_series(Di)')
1265        nbpair=min(2*ref_i-1,nbpair);%limit the number of pairs with positive first index
1266    elseif  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
1267        nbpair=min(2*ref_j-1,nbpair);%limit the number of pairs with positive first index
1268    end
1269end
1270nbpair=min(200,nbpair);%limit the number of displayed pairs to 200
1271
1272%look for existing processed pairs involving the field at the middle of the series if civ1 will not
1273% be performed, while the result is needed for next steps.
1274displ_pair={''}; %default
1275select=ones(size(1:nbpair));%default =1 for numbers of displayed pairs
1276if get(handles.CIV2,'Value')==0 & get(handles.CIV1,'Value')==0 & get(handles.FIX1,'Value')==0 & get(handles.PATCH1,'Value')==0%&...
1277    if ~exist(fullfile(filepath,subdir_civ2,ext_dir),'dir')
1278        errordlg(['no civ2 file available: subdirectory ' subdir_civ2 ' does not exist'])
1279        set(handles.list_pair_civ2,'Value',1);
1280        set(handles.list_pair_civ2,'String',{''});
1281        return
1282    end
1283    for ipair=1:nbpair
1284        filename=name_generator(filebase,ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair),'.nc',nom_type_nc,1,...
1285            ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair),subdir_civ1);
1286        select(ipair)=exist(filename,'file')==2;
1287    end
1288    if  isequal(select,zeros(size(1:nbpair)))
1289        if isfield(browse,'incr_pair')
1290            num_i1=ref_i-floor(browse.incr_pair(1)/2);
1291            num_i2=ref_i+floor((browse.incr_pair(1)+1)/2);
1292            num_j1=ref_j-floor(browse.incr_pair(2)/2);
1293            num_j2=ref_j+floor((browse.incr_pair(2)+1)/2);
1294            filename=name_generator(filebase,num_i1,num_j1,'.nc',nom_type_nc,1,num_i2,num_j2,subdir_civ2);
1295            select(1)=exist(filename,'file')==2;
1296        else
1297            if  isequal(mode,'series(Dj)')% | isequal(mode,'st_series(Dj)')
1298                errordlg(['no civ2 file available for the selected reference index j=' num2str(ref_j) ' and subdirectory ' subdir_civ2])
1299            else
1300                errordlg(['no civ2 file available for the selected reference index i=' num2str(ref_i) ' and subdirectory ' subdir_civ2])
1301            end
1302            set(handles.list_pair_civ2,'Value',1);
1303            set(handles.list_pair_civ2,'String',{''});
1304            return
1305        end
1306    end
1307end
1308if isequal(mode,'series(Di)') % | isequal(mode,'st_series(Di)')
1309    for ipair=1:nbpair
1310        if select(ipair)
1311            if size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
1312                dt=time(ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair));%time interval dt
1313                displ_pair{ipair}=['Di= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ' :dt= ' num2str(dt*1000)];
1314            end
1315        else
1316            displ_pair{ipair}='...'; %pair not displayed in the menu
1317        end
1318    end
1319elseif isequal(mode,'series(Dj)') %| isequal(mode,'st_series(Dj)') % series on the j index
1320    for ipair=1:nbpair
1321        if select(ipair)
1322            if size(time,1)>=ref_i+displ_num(4,ipair) && size(time,2)>=ref_j+displ_num(2,ipair)
1323                dt=time(ref_i+displ_num(4,ipair),ref_j+displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),ref_j+displ_num(1,ipair));%time interval dt
1324                displ_pair{ipair}=['Dj= ' num2str(-floor(ipair/2)) '|' num2str(ceil(ipair/2)) ' :dt= ' num2str(dt*1000)];
1325            end
1326        else
1327            displ_pair{ipair}='...'; %pair not displayed in the menu
1328        end
1329    end
1330elseif isequal(mode,'pair j1-j2')% | isequal(mode,'st_pair j1-j2') %case of pairs
1331    for ipair=1:nbpair
1332        if select(ipair)
1333            dt=time(ref_i+displ_num(4,ipair),displ_num(2,ipair))-time(ref_i+displ_num(3,ipair),displ_num(1,ipair));%time interval dt
1334            displ_pair{ipair}=['j= ' num2stra(displ_num(1,ipair),nom_type_ima) '-' num2stra(displ_num(2,ipair),nom_type_ima) ...
1335                ' :dt= ' num2str(dt*1000)];
1336        else
1337            displ_pair{ipair}='...'; %pair not displayed in the menu
1338        end
1339    end
1340elseif isequal(mode,'displacement')
1341    displ_pair={'Di=Dj=0'};
1342end
1343val=get(handles.list_pair_civ2,'Value');
1344ichoice=find(select,1);
1345if (isempty(ichoice) || ichoice < 1); ichoice=1; end;
1346if get(handles.CIV2,'Value')==0 && get(handles.CIV1,'Value')==0 && get(handles.FIX1,'Value')==0 && get(handles.PATCH1,'Value')==0
1347    val=ichoice;% first valid pair proposed by default in the menu
1348end
1349if val>length(displ_pair')
1350    set(handles.list_pair_civ2,'Value',1);% first valid pair proposed by default in the menu
1351else
1352    set(handles.list_pair_civ2,'Value',val);
1353end
1354set(handles.list_pair_civ2,'String',displ_pair');
1355set(gcf,'Pointer','arrow')
1356
1357
1358
1359
1360%------------------------------------------------------------------------
1361% --- Executes on selection change in list_pair_civ1.
1362function list_pair_civ1_Callback(hObject, eventdata, handles)
1363%------------------------------------------------------------------------
1364%reproduce by default the chosen pair in the civ2 menu
1365list_pair=get(handles.list_pair_civ1,'String');%get the menu of image pairs
1366index_pair=get(handles.list_pair_civ1,'Value');
1367displ_num=get(handles.list_pair_civ1,'UserData');
1368% num_a=displ_num(1,index_pair);
1369% num_b=displ_num(2,index_pair);
1370list_pair2=get(handles.list_pair_civ2,'String');%get the menu of image pairs
1371if index_pair<=length(list_pair2)
1372    set(handles.list_pair_civ2,'Value',index_pair);
1373end
1374
1375%update first_i and last_i according to the chosen image pairs
1376mode_list=get(handles.CivMode,'String');
1377mode_value=get(handles.CivMode,'Value');
1378mode=mode_list{mode_value};
1379if isequal(mode,'series(Di)')
1380    first_i=str2double(get(handles.first_i,'String'));
1381    last_i=str2double(get(handles.last_i,'String'));
1382    incr_i=str2double(get(handles.incr_i,'String'));
1383    num1=first_i:incr_i:last_i;
1384    lastfield=str2double(get(handles.nb_field,'String'));
1385    if ~isnan(lastfield)
1386        test_find=(num1-floor(index_pair/2)*ones(size(num1))>0)& ...
1387            (num1+ceil(index_pair/2)*ones(size(num1))<=lastfield);
1388        num1=num1(test_find);
1389    end
1390    set(handles.first_i,'String',num2str(num1(1)));
1391    set(handles.last_i,'String',num2str(num1(end)));
1392elseif isequal(mode,'series(Dj)')
1393    first_j=str2double(get(handles.first_j,'String'));
1394    last_j=str2double(get(handles.last_j,'String'));
1395    incr_j=str2double(get(handles.incr_j,'String'));
1396    num_j=first_j:incr_j:last_j;
1397    lastfield2=str2double(get(handles.nb_field2,'String'));
1398    if ~isnan(lastfield2)
1399        test_find=(num_j-floor(index_pair/2)*ones(size(num_j))>0)& ...
1400            (num_j+ceil(index_pair/2)*ones(size(num_j))<=lastfield2);
1401        num1=num_j(test_find);
1402    end
1403    set(handles.first_j,'String',num2str(num1(1)));
1404    set(handles.last_j,'String',num2str(num1(end)));
1405end
1406
1407%------------------------------------------------------------------------
1408% --- Executes on selection change in list_pair_civ2.
1409function list_pair_civ2_Callback(hObject, eventdata, handles)
1410%------------------------------------------------------------------------
1411index_pair=get(handles.list_pair_civ2,'Value');%get the selected position index in the menu
1412
1413%update first_i and last_i according to the chosen image pairs
1414mode_list=get(handles.CivMode,'String');
1415mode_value=get(handles.CivMode,'Value');
1416mode=mode_list{mode_value};
1417if isequal(mode,'series(Di)')
1418    first_i=str2double(get(handles.first_i,'String'));
1419    last_i=str2double(get(handles.last_i,'String'));
1420    incr_i=str2double(get(handles.incr_i,'String'));
1421    num1=first_i:incr_i:last_i;
1422    lastfield=str2double(get(handles.nb_field,'String'));
1423    if ~isnan(lastfield)
1424        test_find=(num1-floor(index_pair/2)*ones(size(num1))>0)& ...
1425            (num1+ceil(index_pair/2)*ones(size(num1))<=lastfield);
1426        num1=num1(test_find);
1427    end
1428    set(handles.first_i,'String',num2str(num1(1)));
1429    set(handles.last_i,'String',num2str(num1(end)));
1430elseif isequal(mode,'series(Dj)')
1431    first_j=str2double(get(handles.first_j,'String'));
1432    last_j=str2double(get(handles.last_j,'String'));
1433    incr_j=str2double(get(handles.incr_j,'String'));
1434    num_j=first_j:incr_j:last_j;
1435    lastfield2=str2double(get(handles.nb_field2,'String'));
1436    if ~isnan(lastfield2)
1437        test_find=(num_j-floor(index_pair/2)*ones(size(num_j))>0)& ...
1438            (num_j+ceil(index_pair/2)*ones(size(num_j))<=lastfield2);
1439        num1=num_j(test_find);
1440    end
1441    set(handles.first_j,'String',num2str(num1(1)));
1442    set(handles.last_j,'String',num2str(num1(end)));
1443end
1444
1445%------------------------------------------------------------------------
1446% --- Executes on button press in RUN: processing on local computer
1447function RUN_Callback(hObject, eventdata, handles)
1448%------------------------------------------------------------------------
1449set(handles.RUN, 'Enable','Off')
1450set(handles.RUN,'BackgroundColor',[0.831 0.816 0.784])
1451batch=0;
1452errormsg=launch_jobs(hObject, eventdata, handles,batch);
1453set(handles.RUN, 'Enable','On')
1454set(handles.RUN,'BackgroundColor',[1 0 0])
1455
1456% start status callback to visualise results
1457if ~isempty(errormsg)
1458    display(errormsg)
1459    msgbox_uvmat('ERROR',errormsg)
1460elseif  isfield(handles,'status') %&& ~isequal(get(handles.CivMode,'Value'),3)
1461    set(handles.status,'Value',1);%suppress status display
1462    status_Callback(hObject, eventdata, handles)
1463end
1464
1465%------------------------------------------------------------------------
1466% --- Executes on button press in BATCH: remote processing
1467function BATCH_Callback(hObject, eventdata, handles)
1468% -----------------------------------------------------------------------
1469set(handles.BATCH, 'Enable','Off')
1470set(handles.BATCH,'BackgroundColor',[0.831 0.816 0.784])
1471batch=1;
1472errormsg=launch_jobs(hObject, eventdata, handles, batch);
1473set(handles.BATCH, 'Enable','On')
1474set(handles.BATCH,'BackgroundColor',[1 0 0])
1475
1476% start status callback to visualise results
1477if ~isempty(errormsg)
1478    display(errormsg)
1479    msgbox_uvmat('ERROR',errormsg)
1480elseif isfield(handles,'status')
1481    set(handles.status,'Value',1);%suppress status display
1482    status_Callback(hObject, eventdata, handles)
1483end
1484
1485%------------------------------------------------------------------------
1486% --- Lauch command called by RUN and BATCH: remote processing
1487function errormsg=launch_jobs(hObject, eventdata, handles, batch)
1488%-----------------------------------------------------------------------
1489errormsg='';%default
1490
1491
1492%% check the selected list of operations:
1493operations={'CIV1','FIX1','PATCH1','CIV2','FIX2','PATCH2'};
1494box_test(1)=get(handles.CIV1,'Value');
1495box_test(2)=get(handles.FIX1,'Value');
1496box_test(3)=get(handles.PATCH1,'Value');
1497box_test(4)=get(handles.CIV2,'Value');
1498box_test(5)=get(handles.FIX2,'Value');
1499box_test(6)=get(handles.PATCH2,'Value');
1500index_first=find(box_test==1,1);
1501if isempty(index_first)
1502    errormsg='no selected operation';
1503    return
1504end
1505index_last=find(box_test==1,1,'last');
1506box_used=box_test(index_first : index_last);
1507[box_missing,ind_missing]=min(box_used);
1508if isequal(box_missing,0); %there is a missing step in the sequence of operations
1509    errormsg=['missing' cell2mat(operations(ind_missing))];
1510    return
1511end
1512
1513%% check mask if selecetd
1514%could be included in get_mask callback ?
1515if isequal(get(handles.check_Mask,'Value'),1)
1516    maskname=get(handles.txt_MaskName,'String');
1517    if ~exist(maskname,'file')
1518        get_mask_civ1_Callback(hObject, eventdata, handles);
1519    end
1520end
1521if isequal(get(handles.get_mask_fix1,'Value'),1)
1522    maskname=get(handles.mask_fix1,'String');
1523    if ~exist(maskname,'file')
1524        get_mask_fix1_Callback(hObject, eventdata, handles);
1525    end
1526end
1527if isequal(get(handles.check_Mask,'Value'),1)
1528    maskname=get(handles.txt_Mask,'String');
1529    if ~exist(maskname,'file')
1530        get_mask_civ2_Callback(hObject, eventdata, handles);
1531    end
1532end
1533if isequal(get(handles.get_mask_fix2,'Value'),1)
1534    maskname=get(handles.mask_fix2,'String');
1535    if ~exist(maskname,'file')
1536        get_mask_fix2_Callback(hObject, eventdata, handles);
1537    end
1538end
1539
1540%% reinitialise status callback
1541if isfield(handles,'status')
1542    set(handles.status,'Value',0);%suppress status display
1543    status_Callback(hObject, eventdata, handles)
1544end
1545
1546%% set the list of files and check them
1547display('checking the files...')
1548[ref_i,ref_j,errormsg]=find_ref_indices(handles);
1549if ~isempty(errormsg)
1550    return
1551end
1552[filecell,num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2,nom_type_nc,xx,yy,compare]=...
1553    set_civ_filenames(handles,ref_i,ref_j,box_test);
1554% ADDED
1555   [Rootbat,Filebat]=fileparts(filecell.nc.civ1{1,1});%output netcdf file (without extention)
1556%ADDED
1557set(handles.civ,'UserData',filecell);%store for futur use of status callback
1558if isempty(filecell)% (error message displayed in fct set_civ_filenames)
1559    return
1560end
1561nbfield=numel(num1_civ1);
1562nbslice=numel(num_a_civ1);
1563
1564%% read the PARAM.xml file to get the binaries (and batch_mode if batch)
1565path_civ=fileparts(which('civ')); %path to the source directory of uvmat
1566xmlfile='PARAM.xml';
1567if exist(xmlfile,'file')% search parameter xml file in the whole matlab path
1568    t=xmltree(xmlfile);
1569    s=convert(t);
1570else
1571    errormsg=['no file ' xmlfile];
1572    return
1573end
1574
1575test_interp=0; %eviter les variables test_ (LG)
1576
1577if batch
1578    if isfield(s,'BatchParam')
1579        param.global=s.BatchParam;
1580        if isfield(param.global,'BatchMode')
1581            batch_mode=param.global.BatchMode;
1582            if ~ismember(batch_mode,{'sge','oar'})
1583                errormsg=['batch mode ' batch_mode ' not supported by UVMAT'];
1584                return
1585            end
1586        end
1587    else
1588        errormsg='no batch civ binaries defined in PARAM.xml';
1589        return
1590    end
1591else % run
1592    if isfield(s,'RunParam')
1593        param.global=s.RunParam;
1594    else
1595        msgbox_uvmat('ERROR','no run civ binaries defined in PARAM.xml')
1596        return
1597    end
1598end
1599
1600%% check batch mode supported
1601if batch
1602    switch batch_mode
1603        case 'sge'
1604            test_command='qstat';
1605        case 'oar'
1606            test_command='oartat';
1607    end   
1608    [s,w]=system(test_command);
1609    if ~isequal(s,0)
1610        msgbox_uvmat('ERROR',[batch_mode ' batch system not available'])
1611        return
1612    end
1613end
1614
1615%% check if the binaries exist
1616if isequal(get(handles.Matlab,'checked'),'on')
1617    CivMode='Matlab';
1618else
1619    CivMode='CivX';
1620end
1621binary_list={};
1622switch CivMode
1623    case 'CivX'
1624        binary_list={'Civ1Bin','Civ2Bin','PatchBin','FixBin'};
1625    case 'CivAll'
1626        binary_list={'Civ'}
1627    case 'Matlab'
1628        if batch
1629            % vérifier Matlab installé sur le cluster
1630            % difficile a faire a priori
1631        end         
1632end
1633for bin_name=binary_list
1634    if isfield(param.global,bin_name{1})
1635        if ~exist(param.global.(bin_name{1}),'file')%look for the full path if the file name has been defined with a relative path in PARAM.xml
1636            fullname=fullfile(path_civ,param.global.(bin_name{1}));
1637            if exist(fullname,'file')
1638                param.global.(bin_name{1})=fullname;
1639            else
1640                msgbox_uvmat('ERROR',['Binary ' param.global.(bin_name{1}) ' defined in PARAM.xml does not exist'])
1641                return
1642            end
1643        else
1644            [path,name,ext]=fileparts(param.global.(bin_name{1}));
1645            currentdir=pwd;
1646            cd(path);
1647            binpath=pwd;%path of the binary
1648            param.global.(bin_name{1})=fullfile(binpath,[name ext]);
1649            %                      display(param.global.(bin_name{1}));
1650            cd(currentdir);
1651        end
1652       
1653    end
1654end
1655
1656display('files OK, processing...')
1657
1658%% get civ1 parameters
1659if box_test(1)
1660    param.civ1=read_param_civ1(handles,filecell);
1661end
1662
1663%% get fix1 parameters
1664if box_test(2)
1665    param.fix1=read_param_fix1(handles,filecell);
1666end
1667
1668%% get patch1 parameters
1669if box_test(3)
1670    param.Patch1=read_panel(handles.panel_Patch1);
1671    %param.patch1=read_param_patch1(handles)
1672end
1673
1674%% get civ2 parameters:
1675if box_test(4)
1676    param.civ2=read_param_civ2(handles,cell2mat(filecell.ima1.civ2(1,1)));
1677end
1678
1679%% get fix2 parameters
1680if box_test(5)
1681    flagindex2(1)=get(handles.vec_Fmin2_2, 'Value');
1682    flagindex2(2)=get(handles.vec_F3_2, 'Value');
1683    flagindex2(3)=get(handles.vec_F4, 'Value');
1684    thresh_vec2C=str2double(get(handles.thresh_vec2C,'String'));%threshold on image correlation vec_C
1685    thresh_vel2=str2double(get(handles.thresh_vel2,'String'));%threshold on velocity modulus
1686    test_mask=get(handles.get_mask_fix2,'Value');
1687    nbslice_mask=get(handles.mask_fix2,'UserData'); % get the number of slices (= number of masks)
1688    %%%%%%%%%%%%%COMPLETER LE PROGRAMME FIX AVEC REF FILE ET OPTION inf_sup=2
1689    %     inf_sup=get(handles.inf_sup2,'Value');
1690    %     ref=get(handles.ref_fix2,'UserData');
1691   
1692    %%%%%%%%%%%%%%%%%%%
1693end
1694
1695%% get patch2 parameters
1696if box_test(6)==1
1697    param.Patch2=read_panel(handles.panel_Patch1);
1698end
1699
1700%%
1701
1702
1703%% MAIN LOOP
1704time=get(handles.ImaDoc,'UserData'); %get the set of times
1705
1706super_cmd=[];
1707batch_file_list=[];
1708   
1709for ifile=1:nbfield
1710    for j=1:nbslice
1711        % initiate system command
1712        switch CivMode
1713            case 'CivX'
1714                if isunix % check: necessaire aussi en RUN?
1715                    cmd=['#!/bin/bash \n '...
1716                        '#$ -cwd \n '...
1717                        'hostname && date \n '...
1718                        'umask 002 \n'];%allow writting access to created files for user group
1719                else
1720                    cmd=[];
1721                end
1722            case 'CivAll'
1723                %         if CivAll
1724                CivAllxml=xmltree;% xml contents,  all parameters
1725                CivAllCmd='';
1726                CivAllxml=set(CivAllxml,1,'name','CivDoc');
1727        end
1728       
1729       
1730        % define output file name
1731        if box_test(4)==1 || box_test(5)==1 || box_test(6)==1
1732            OutputFile=filecell.nc.civ2{ifile,j};
1733        else
1734            OutputFile=filecell.nc.civ1{ifile,j};
1735        end
1736        OutputFile=regexprep(OutputFile,'.nc','');
1737
1738       
1739        %CIV1
1740        if box_test(1)
1741            % read image-dependent parameters
1742            param.civ1.filename_ima_a=filecell.ima1.civ1{ifile,j};
1743            param.civ1.filename_ima_b=filecell.ima2.civ1{ifile,j};
1744            param.civ1.Dt=num2str(time(num2_civ1(ifile),num_b_civ1(j))-time(num1_civ1(ifile),num_a_civ1(j)));
1745            param.civ1.T0=num2str((time(num2_civ1(ifile),num_b_civ1(j))+time(num1_civ1(ifile),num_a_civ1(j)))/2);
1746            param.civ1.term_a=num2stra(num_a_civ1(j),nom_type_nc);%UTILITE?
1747            param.civ1.term_b=num2stra(num_b_civ1(j),nom_type_nc);%
1748           
1749            % read mask parameters
1750            dummy=get(handles.check_Mask,'Value');
1751            if dummy{1}
1752                maskdispl=get(handles.txt_MaskName,'String');
1753                if exist(maskdispl,'file')
1754                    param.civ1.maskname=maskdispl;
1755                    param.civ1.maskflag='y';
1756                else
1757                    maskbase=[filecell.filebase '_' maskdispl]; %
1758                    nbslice_mask=str2double(maskdispl(1:end-4)); %
1759                    num1_mask=mod(num1_civ1(ifile)-1,nbslice_mask)+1;
1760                    param.civ1.maskname=name_generator(maskbase,num1_mask,1,'.png','_i');
1761                    if exist(param.civ1.maskname,'file')
1762                        param.civ1.maskflag='y';
1763                    else
1764                        param.civ1.maskname='noFile use default';
1765                        param.civ1.maskflag='n';
1766                    end
1767                end
1768            else
1769                param.civ1.maskname='noFile use default';
1770                param.civ1.maskflag='n';
1771            end
1772           
1773            % read grid parameters
1774            dummy=get(handles.check_Grid,'Value');
1775            if dummy{1}
1776                param.civ1.gridflag='y';
1777                gridname=get(handles.txt_GridName,'String');
1778                if isequal(gridname(end-3:end),'grid')
1779                    nbslice_grid=str2double(gridname(1:end-4)); %
1780                    if ~isnan(nbslice_grid)
1781                        num1_grid=mod(num1_civ1(ifile)-1,nbslice_grid)+1;
1782                        param.civ1.gridname=[filecell.filebase '_' name_generator(gridname,num1_grid,1,'.grid','_i')];
1783                        if ~exist(param.civ1.gridname,'file')
1784                            msgbox_uvmat('ERROR','grid file absent for civ1')
1785                        end
1786                    elseif exist(gridname,'file')
1787                        param.civ1.gridname=gridname;
1788                    else
1789                        msgbox_uvmat('ERROR','grid file absent for civ1')
1790                    end
1791                end
1792            else
1793                param.civ1.gridname='noFile use default';
1794                param.civ1.gridflag='n';
1795            end
1796           
1797            switch CivMode
1798                case 'CivX'
1799                    civ1_exe=CIV1_CMD(filecell.nc.civ1{ifile,j},param);%create the parameter file .civ1.cmx and set the execution string civ1_exe
1800                    cmd=[cmd civ1_exe '\n'];
1801                case 'CivAll'
1802                    CivAllCmd=[CivAllCmd ' civ1 '];
1803                    str=CIV1_CMD_Unified(filecell.nc.civ1{ifile,j},'',param.civ1);
1804                    fieldnames=fields(str);
1805                    [CivAllxml,uid_civ1]=add(CivAllxml,1,'element','civ1');
1806                    for ilist=1:length(fieldnames)
1807                        val=eval(['str.' fieldnames{ilist}]);
1808                        if ischar(val)
1809                            [CivAllxml,uid_t]=add(CivAllxml,uid_civ1,'element',fieldnames{ilist});
1810                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
1811                        end
1812                    end
1813            end
1814        end
1815       
1816        % FIX1
1817        if box_test(2)
1818           switch CivMode
1819                case 'CivX'
1820                    if isunix %unix system
1821                        cmd_FIX=[param.global.FixBin ' -f ' filecell.nc.civ1{ifile,j} ' -fi1 ' num2str(param.fix1.flagindex1(1)) ...
1822                            ' -fi2 ' num2str(param.fix1.flagindex1(2)) ' -fi3 ' num2str(param.fix1.flagindex1(3)) ...
1823                            ' -threshC ' num2str(param.fix1.thresh_vecC1) ' -threshV ' num2str(param.fix1.thresh_vel1) ' -maskName ' param.fix1.maskname];
1824                    else %windows system
1825                        cmd_FIX=['"' param.global.FixBin '" -f "' filecell.nc.civ1{ifile,j} '" -fi1 ' num2str(param.fix1.flagindex1(1)) ...
1826                            ' -fi2 ' num2str(param.fix1.flagindex1(2)) ' -fi3 ' num2str(param.fix1.flagindex1(3)) ...
1827                            ' -threshC ' num2str(param.fix1.thresh_vecC1) ' -threshV ' num2str(param.fix1.thresh_vel1) ' -maskName "' param.fix1.maskname '"'];
1828                        cmd_FIX=regexprep(cmd_FIX,'\\','\\\\');
1829                    end
1830                    cmd=[cmd cmd_FIX '\n'];
1831                case 'CivAll'
1832                    fix1.inputFileName=filecell.nc.civ1{ifile,j} ;
1833                    fix1.fi1=num2str(param.fix1.flagindex1(1));
1834                    fix1.fi2=num2str(param.fix1.flagindex1(2));
1835                    fix1.fi3=num2str(param.fix1.flagindex1(3));
1836                    fix1.threshC=num2str(param.fix1.thresh_vecC1);
1837                    fix1.threshV=num2str(param.fix1.thresh_vel1);
1838                    fieldnames=fields(fix1);
1839                    [CivAllxml,uid_fix1]=add(CivAllxml,1,'element','fix1');
1840                    for ilist=1:length(fieldnames)
1841                        val=eval(['fix1.' fieldnames{ilist}]);
1842                        if ischar(val)
1843                            [CivAllxml,uid_t]=add(CivAllxml,uid_fix1,'element',fieldnames{ilist});
1844                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
1845                        end
1846                    end
1847                    CivAllCmd=[CivAllCmd ' fix1 '];
1848            end
1849        end
1850       
1851        %PATCH1
1852        if box_test(3)==1
1853            switch CivMode
1854                case 'CivX'
1855                    cmd_PATCH=cmd_patch(filecell.nc.civ1{ifile,j},param.Patch1,param.global.PatchBin);
1856                    cmd=[cmd cmd_PATCH '\n'];
1857                case 'CivAll'
1858                    patch1.inputFileName=filecell.nc.civ1{ifile,j} ;
1859                    patch1.nopt=subdomain_patch1;
1860                    patch1.maxdiff=thresh_patch1;
1861                    patch1.ro=rho_patch1;
1862                    test_grid=get(handles.get_gridpatch1,'Value');
1863                    if test_grid
1864                        patch1.gridflag='y';
1865                        gridname=get(handles.grid_patch1,'String');
1866                        if isequal(gridname(end-3:end),'grid')
1867                            nbslice_grid=str2double(gridname(1:end-4)); %
1868                            if ~isnan(nbslice_grid)
1869                                num1_grid=mod(num1_civ1(ifile)-1,nbslice_grid)+1;
1870                                patch1.gridPatch=[filecell.filebase '_' name_generator(gridname,num1_grid,1,'.grid','_i')];
1871                                if ~exist(patch1.gridPatch,'file')
1872                                    msgbox_uvmat('ERROR','grid file absent for patch1')
1873                                end
1874                            elseif exist(gridname,'file')
1875                                patch1.gridPatch=gridname;
1876                            else
1877                                msgbox_uvmat('ERROR','grid file absent for patch1')
1878                            end
1879                        end
1880                    else
1881                        patch1.gridPatch='none';
1882                        patch1.gridflag='n';
1883                        patch1.m=nx_patch1;
1884                        patch1.n=ny_patch1;
1885                    end
1886                    patch1.convectFlow='n';
1887                    fieldnames=fields(patch1);
1888                    [CivAllxml,uid_patch1]=add(CivAllxml,1,'element','patch1');
1889                    for ilist=1:length(fieldnames)
1890                        val=eval(['patch1.' fieldnames{ilist}]);
1891                        if ischar(val)
1892                            [CivAllxml,uid_t]=add(CivAllxml,uid_patch1,'element',fieldnames{ilist});
1893                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
1894                        end
1895                    end
1896                    CivAllCmd=[CivAllCmd ' patch1 '];
1897            end
1898        end
1899        if box_test(4)==1
1900            param.civ2.filename_ima_a=filecell.ima1.civ2{ifile,j};
1901            param.civ2.filename_ima_b=filecell.ima2.civ2{ifile,j};
1902            param.civ2.Dt=num2str(time(num2_civ2(ifile),num_b_civ2(j))-time(num1_civ2(ifile),num_a_civ2(j)));
1903            param.civ2.T0=num2str((time(num2_civ1(ifile),num_b_civ2(j))+time(num1_civ2(ifile),num_a_civ2(j)))/2);
1904            param.civ2.term_a=num2stra(num_a_civ2(j),nom_type_nc);
1905            param.civ2.term_b=num2stra(num_b_civ2(j),nom_type_nc);
1906            param.civ2.filename_nc1=filecell.nc.civ1{ifile,j};
1907            param.civ2.filename_nc1(end-2:end)=[]; % remove '.nc'
1908            test_mask=get(handles.check_Mask,'Value');
1909            if test_mask==0
1910                param.civ2.maskname='noFile use default';
1911                param.civ2.maskflag='n';
1912            else
1913                maskdispl=get(handles.txt_Mask,'String');
1914                if exist(maskdispl,'file')
1915                    param.civ2.maskname=maskdispl;
1916                    param.civ2.maskflag='y';
1917                else
1918                    maskbase=[filecell.filebase '_' maskdispl]; %
1919                    nbslice_mask=str2double(maskdispl(1:end-4)); %
1920                    num1_mask=mod(num1_civ2(ifile)-1,nbslice_mask)+1;
1921                    param.civ2.maskname=name_generator(maskbase,num1_mask,1,'.png','_i');
1922                    if exist(param.civ2.maskname,'file')
1923                        param.civ2.maskflag='y';
1924                    else
1925                        param.civ2.maskname='noFile use default';
1926                        param.civ2.maskflag='n';
1927                    end
1928                end
1929            end
1930            gridname=get(handles.txt_GridName,'String');
1931            if numel(gridname)>=4 && isequal(gridname(end-3:end),'grid')
1932                nbslice_grid=str2double(gridname(1:end-4)); %
1933                if ~isnan(nbslice_grid)
1934                    param.civ2.gridflag='y';
1935                    num1_grid=mod(num1_civ2(ifile)-1,nbslice_grid)+1;
1936                    param.civ2.gridname=[filecell.filebase '_' name_generator(gridname,num1_grid,1,'.grid','_i')];
1937                    if exist(param.civ2.gridname,'file')
1938                        param.civ2.gridflag='y';
1939                    else
1940                        param.civ2.gridname='noFile use default';
1941                        param.civ2.gridflag='n';
1942                    end
1943                elseif exist(gridname,'file')
1944                    param.civ2.gridflag='y';
1945                else
1946                    param.civ2.gridname='noFile use default';
1947                    param.civ2.gridflag='n';
1948                end
1949            end
1950            switch CivMode
1951                case 'CivX'
1952                    cmd_CIV2=CIV2_CMD(filecell.nc.civ2{ifile,j},param);%creates the cmx file [fullfile(Rootbat,Filebat) '.civ2.cmx]
1953                    cmd=[cmd cmd_CIV2 '\n'];
1954                case 'CivAll'
1955                    CivAllCmd=[CivAllCmd ' civ2 '];
1956                    str=CIV2_CMD_Unified(filecell.nc.civ2{ifile,j},'',param.civ2);
1957                    fieldnames=fields(str);
1958                    [CivAllxml,uid_civ2]=add(CivAllxml,1,'element','civ2');
1959                    for ilist=1:length(fieldnames)
1960                        val=eval(['str.' fieldnames{ilist}]);
1961                        if ischar(val)
1962                            [CivAllxml,uid_t]=add(CivAllxml,uid_civ2,'element',fieldnames{ilist});
1963                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
1964                        end
1965                    end
1966            end
1967        end
1968       
1969        % FIX2
1970        if box_test(5)==1
1971            test_mask=get(handles.get_mask_fix2,'Value');
1972            if test_mask==0
1973                maskname=''; %no mask used
1974            else
1975                maskdispl=get(handles.mask_fix2,'String');
1976                maskbase=[filecell.filebase '_' maskdispl]; %
1977                nbslice_mask=str2double(maskdispl(1:end-4)); %
1978                num1_mask=mod(num1_civ2(ifile)-1,nbslice_mask)+1;
1979                maskname =name_generator(maskbase,num1_mask,1,'.png','_i');
1980            end
1981            switch CivMode
1982                case 'CivX'
1983                    if isunix
1984                        cmd_FIX=[param.global.FixBin ' -f ' filecell.nc.civ2{ifile,j} ' -fi1 ' num2str(flagindex2(1)) ...
1985                            ' -fi2 ' num2str(flagindex2(2)) ' -fi3 ' num2str(flagindex2(3)) ...
1986                            ' -threshC ' num2str(thresh_vec2C) ' -threshV ' num2str(thresh_vel2) ' -maskName ' maskname];
1987                    else
1988                        cmd_FIX=['"' param.global.FixBin '" -f "' filecell.nc.civ2{ifile,j} '" -fi1 ' num2str(flagindex2(1)) ...
1989                            ' -fi2 ' num2str(flagindex2(2)) ' -fi3 ' num2str(flagindex2(3)) ...
1990                            ' -threshC ' num2str(thresh_vec2C) ' -threshV ' num2str(thresh_vel2) ' -maskName "' maskname '"'];
1991                        cmd_FIX=regexprep(cmd_FIX,'\\','\\\\');
1992                    end
1993                    cmd=[cmd cmd_FIX '\n'];
1994                case 'CivAll'
1995                    fix2.inputFileName=filecell.nc.civ2{ifile,j} ;
1996                    fix2.fi1=num2str(flagindex2(1));
1997                    fix2.fi2=num2str(flagindex2(2));
1998                    fix2.fi3=num2str(flagindex2(3));
1999                    fix2.threshC=num2str(thresh_vec2C);
2000                    fix2.threshV=num2str(thresh_vel2);
2001                    fieldnames=fields(fix2);
2002                    [CivAllxml,uid_fix2]=add(CivAllxml,1,'element','fix2');
2003                    for ilist=1:length(fieldnames)
2004                        val=eval(['fix2.' fieldnames{ilist}]);
2005                        if ischar(val)
2006                            [CivAllxml,uid_t]=add(CivAllxml,uid_fix2,'element',fieldnames{ilist});
2007                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
2008                        end
2009                    end
2010                    CivAllCmd=[CivAllCmd ' fix2 '];
2011            end
2012        end
2013       
2014        %PATCH2
2015        if box_test(6)==1
2016            switch CivMode
2017                case 'CivX'
2018                    cmd_PATCH=cmd_patch(filecell.nc.civ2{ifile,j},param.Patch2,param.global.PatchBin);
2019                    cmd=[cmd cmd_PATCH '\n'];
2020                case 'CivAll'
2021                    patch2.inputFileName=filecell.nc.civ1{ifile,j} ;
2022                    patch2.nopt=subdomain_patch2;
2023                    patch2.maxdiff=thresh_patch2;
2024                    patch2.ro=rho_patch2;
2025                    test_grid=get(handles.get_gridpatch2,'Value');
2026                    if test_grid
2027                        patch2.gridflag='y';
2028                        gridname=get(handles.grid_patch2,'String');
2029                        if isequal(gridname(end-3:end),'grid')
2030                            nbslice_grid=str2double(gridname(1:end-4)); %
2031                            if ~isnan(nbslice_grid)
2032                                num1_grid=mod(num1_civ2(ifile)-1,nbslice_grid)+1;
2033                                patch2.gridPatch=[filecell.filebase '_' name_generator(gridname,num1_grid,1,'.grid','_i')];
2034                                if ~exist(patch2.gridPatch,'file')
2035                                    msgbox_uvmat('ERROR','grid file absent for patch2')
2036                                end
2037                            elseif exist(gridname,'file')
2038                                patch2.gridPatch=gridname;
2039                            else
2040                                msgbox_uvmat('ERROR','grid file absent for patch2')
2041                            end
2042                        end
2043                    else
2044                        patch2.gridPatch='none';
2045                        patch2.gridflag='n';
2046                        patch2.m=nx_patch2;
2047                        patch2.n=ny_patch2;
2048                    end
2049                    patch2.convectFlow='n';
2050                    fieldnames=fields(patch2);
2051                    [CivAllxml,uid_patch2]=add(CivAllxml,1,'element','patch2');
2052                    for ilist=1:length(fieldnames)
2053                        val=eval(['patch2.' fieldnames{ilist}]);
2054                        if ischar(val)
2055                            [CivAllxml,uid_t]=add(CivAllxml,uid_patch2,'element',fieldnames{ilist});
2056                            [CivAllxml,uid_t2]=add(CivAllxml,uid_t,'chardata',val);
2057                        end
2058                    end
2059                    CivAllCmd=[CivAllCmd ' patch2 '];
2060            end
2061        end
2062 
2063        switch CivMode
2064            case {'CivX','CivAll'}
2065                if isequal(CivMode,'CivAll')
2066                    save(CivAllxml,[OutputFile '.xml']);
2067                    cmd=[cmd sparam.CivBin ' -f ' OutputFile '.xml '  CivAllCmd ' >' OutputFile '.log' '\n'];
2068                end
2069               
2070                % create the .bat file used in run or batch
2071                filename_bat=[OutputFile '.bat'];
2072                [fid,message]=fopen(filename_bat,'w');
2073                if isequal(fid,-1)
2074                    msgbox_uvmat('ERROR', ['creation of .bat file: ' message])
2075                    return
2076                end
2077                fprintf(fid,cmd);
2078                fclose(fid);
2079               
2080                if isunix
2081                    system(['chmod +x ' filename_bat]);
2082                end
2083               
2084                batch_file_list{length(batch_file_list)+1}=filename_bat;
2085               
2086%                 if batch
2087%                     switch batch_mode
2088%                         case 'sge'                           
2089%                             display(['!qsub -p ' pvalue ' -q civ.q -e ' flname '.errors -o ' flname '.log' ' ' filename_bat]);
2090%                             eval(  ['!qsub -p ' pvalue ' -q civ.q -e ' flname '.errors -o ' flname '.log' ' ' filename_bat]);
2091%                         case 'oar'
2092% %                             eval(  ['!chmod +x ' filename_bat]);
2093% %                             %eval(  ['!oarsub -n CIVX -l /core=1,walltime=00:10:00  ' filename_bat]);                   
2094% %                             eval(  ['!oarsub -n CIVX -l "/core=1+{type = ''smalljob''}/licence=1,walltime=00:10:00"   ' filename_bat]);
2095%
2096%                     cmd_str=['sh ' filename_bat];
2097%                     super_cmd{length(super_cmd)+1}=cmd_str;
2098%                           
2099%                     end
2100%                 else
2101%                     %% to lauch the jobs locally :
2102%                     if(isunix)
2103%                         cmd_str=['. ' filename_bat];
2104%                     else %case of Windows
2105%                         cmd_str=['@call "' regexprep(filename_bat,'\\','\\\\') '"'];
2106%                     end
2107%                     super_cmd=[super_cmd cmd_str '\n'];
2108%                     disp(cmd_str);
2109%                 end
2110            case 'Matlab'
2111                drawnow
2112                if box_test(1)==1
2113                    Param.Civ1=param.civ1;
2114                end
2115                if box_test(2)==1
2116                    fix1.WarnFlags=[];
2117                    if get(handles.vec_Fmin2,'Value')
2118                        fix1.WarnFlags=[fix1.WarnFlags -2];
2119                    end
2120                    if get(handles.vec_F3,'Value')
2121                        fix1.WarnFlags=[fix1.WarnFlags 3];
2122                    end
2123                    fix1.LowerBoundCorr=thresh_vecC1;
2124                    if get(handles.inf_sup1,'Value')
2125                        fix1.UppperBoundVel=thresh_vel1;
2126                    else
2127                        fix1.LowerBoundVel=thresh_vel1;
2128                    end
2129                    if get(handles.get_mask_fix1,'Value')
2130                        fix1.MaskName=maskname;
2131                    end
2132                    Param.Fix1=fix1;
2133                end
2134                if box_test(3)==1
2135                    if strcmp(compare,'stereo PIV')
2136                        filebase_A=filecell.filebase;
2137                        [pp,ff]=fileparts(filebase_A);
2138                        filebase_B=fullfile(pp,get(handles.RootName_1,'String'));
2139                        RUN_STLIN(filecell.ncA.civ1{ifile,j},filecell.nc.civ1{ifile,j},'civ1',filecell.st{ifile,j},...
2140                            str2num(nx_patch1),str2num(ny_patch1),str2num(thresh_patch1),[filebase_A '.xml'],[filebase_B '.xml'])
2141                    else
2142                        Param.Patch1.Rho=rho_patch1;
2143                        Param.Patch1.Threshold=thresh_patch1;
2144                        Param.Patch1.SubDomain=subdomain_patch1;
2145                    end
2146                end
2147                if box_test(4)==1
2148                    Param.Civ2=param.civ2;
2149                end
2150                if box_test(5)==1
2151                    fix2.WarnFlags=[];
2152                    if get(handles.vec_Fmin2_2,'Value')
2153                        fix2.WarnFlags=[fix2.WarnFlags -2];
2154                    end
2155                    if get(handles.vec_F4,'Value')
2156                        fix2.WarnFlags=[fix2.WarnFlags 4];
2157                    end
2158                    if get(handles.vec_F3_2,'Value')
2159                        fix2.WarnFlags=[fix2.WarnFlags 3];
2160                    end
2161                    fix2.LowerBoundCorr=thresh_vec2C;
2162                    if get(handles.inf_sup2,'Value')
2163                        fix2.UppperBoundVel=thresh_vel2;
2164                    else
2165                        fix2.LowerBoundVel=thresh_vel2;
2166                    end
2167                    if get(handles.get_mask_fix2,'Value')
2168                        fix2.MaskName=maskname;
2169                    end
2170                    Param.Fix2=fix2;
2171                end
2172                if box_test(6)==1
2173                    if strcmp(compare,'stereo PIV')
2174                        filebase_A=filecell.filebase;
2175                        [pp,ff]=fileparts(filebase_A);
2176                        filebase_B=fullfile(pp,get(handles.RootName_1,'String'));
2177                        RUN_STLIN(filecell.ncA.civ2{ifile,j},filecell.nc.civ2{ifile,j},'civ2',filecell.st{ifile,j},...
2178                            str2num(nx_patch2),str2num(ny_patch2),str2num(thresh_patch2),[filebase_A '.xml'],[filebase_B '.xml'])
2179                    else
2180                        Param.Patch2.Rho=rho_patch2;
2181                        Param.Patch2.Threshold=thresh_patch2;
2182                        Param.Patch2.SubDomain=subdomain_patch2;
2183                    end
2184                end
2185                if ~strcmp(compare,'stereo PIV')
2186                    [Data,erromsg]=civ_uvmat(Param,filecell.nc.civ1{ifile,j});
2187                    if isempty(errormsg)
2188                        display([filecell.nc.civ1{ifile,j} ' written'])
2189                    else
2190                        msgbox_uvmat('ERROR',errormsg)
2191                    end
2192
2193                end
2194        end
2195    end
2196end
2197
2198if batch
2199    switch batch_mode                       
2200        case 'sge'
2201            for p=1:length(batch_file_list)
2202                cmd=['!qsub -p ' pvalue ' -q civ.q -e ' flname '.errors -o ' flname '.log' ' ' batch_file_list{p}];
2203                display(cmd);eval(cmd);
2204            end
2205        case 'oar_old'
2206                for p=1:length(batch_file_list)
2207                    oar_command=['!oarsub -n CIVX -q nicejob '...
2208                   '-E ' regexprep(batch_file_list{p},'.bat','.errors') ' -O ' regexprep(batch_file_list{p},'.bat','.log ')...
2209                    '-l "/core=1+{type = ''smalljob''}/licence=1,walltime=00:60:00"   ' batch_file_list{p}];
2210                display(oar_command);eval(oar_command);
2211                end
2212       
2213           
2214       case 'oar_perl'
2215                filename_joblist=fullfile(Rootbat,'job_list.txt');
2216                fid=fopen(filename_joblist,'w');
2217
2218                for p=1:length(batch_file_list)
2219                    oar_command=['oarsub -n CIVX '...
2220                        '-l "/core=1,walltime=00:10:00"   ' batch_file_list{p}];
2221                    fprintf(fid,[oar_command '\n']);
2222                end
2223                fclose(fid)
2224                oar_command=['oarsub -t container -n civx-container -l /core=24,walltime=00:35:00 "/fsnet/data/legi/calcul9/home/gostiaux/Documents/MATLAB/uvmat_dev/oar-dispatch -f '...
2225                    filename_joblist '"'];
2226                filename_oarcommand=fullfile(Rootbat,'oar_command');
2227                fid=fopen(filename_oarcommand,'w');
2228                fprintf(fid,[oar_command '\n']);
2229                fclose(fid);
2230%                 display(oar_command);
2231                eval(['! . ' filename_oarcommand]);
2232
2233        case 'oar'%'oar_mpi'
2234                filename_joblist=fullfile(Rootbat,'job_list.txt');
2235                fid=fopen(filename_joblist,'w');
2236
2237                for p=1:length(batch_file_list)
2238                    fprintf(fid,[batch_file_list{p} '\n']);
2239                end
2240                fclose(fid)
2241               
2242               
2243%                 oarsub -S ./oar.sub
2244
2245               
2246               
2247
2248               
2249            %             for p=0:floor(length(batch_file_list)/6);               
2250%                 filename_batch_group=fullfile(Rootbat,['job_list_' num2str(p) '.bat']);
2251%                 fid=fopen(filename_batch_group,'w');
2252%                 if fid==-1
2253%                     msgbox_uvmat('ERROR',['cannot create the command file ' filename_superbat])
2254%                     return
2255%                 end
2256%                 if p==floor(length(batch_file_list)/6)
2257%                     kmax=mod(length(batch_file_list),6);
2258%                 else
2259%                     kmax=6;
2260%                 end
2261%                 for k=1:kmax
2262%                     fprintf(fid,['sh ' batch_file_list{p*6+k} '\n']);
2263%                 end
2264%                 fclose(fid);
2265%                 system(['chmod +x ' filename_batch_group]);
2266%                 eval(  ['!oarsub -n CIVX -q nicejob '...
2267%                     '-E '  flname '.errors -O ' flname '.log '...
2268%                     '-l "/core=1+{type = ''smalljob''}/licence=1,walltime=00:60:00"   ' filename_batch_group]);
2269%             end
2270        case 'oar_new' % to be develloped with Patrick Begou
2271                filename_joblist=fullfile(Rootbat,'job_list.txt');
2272                fid=fopen(filename_superbat,'w');
2273                if fid==-1
2274                    msgbox_uvmat('ERROR',['cannot create the command file ' filename_superbat])
2275                    return
2276                end
2277                for p=1:length(batch_file_list)
2278                    fprintf(fid,[batch_file_list{p} '\n']);
2279                end
2280                fclose(fid);
2281                walltime=datestr(length(super_cmd)*10/24/60,13);
2282                eval(  ['!oarsub -n CIVX -q nicejob -l "/core=1+{type = ''smalljob''}/licence=1,walltime=' walltime '"   ' filename_superbat]);
2283    end
2284else
2285    if ~isequal(CivMode,'Matlab')
2286        filename_superbat=fullfile(Rootbat,'job_list.bat');
2287        fid=fopen(filename_superbat,'w');
2288        if fid==-1
2289            msgbox_uvmat('ERROR',['cannot create the command file ' filename_superbat])
2290            return
2291        end
2292        for p=1:length(batch_file_list)
2293            if isunix
2294                fprintf(fid,['sh ' batch_file_list{p} '\n']);
2295            else
2296                fprintf(fid,['@call "' regexprep(filename_bat,'\\','\\\\') '"' '\n']);
2297            end
2298        end
2299        fclose(fid);
2300        if(isunix)
2301            system(['chmod +x ' filename_superbat]);
2302        end
2303        system([filename_superbat ' &']);% execute main commmand
2304    end
2305   
2306end
2307
2308
2309%% save interface state
2310if isfield(filecell,'nc')
2311    if isfield(filecell.nc,'civ2')
2312        fileresu=filecell.nc.civ2{1,1};
2313    else
2314        fileresu=filecell.nc.civ1{1,1};
2315    end
2316end
2317[RootPath,RootFile,field_count,str2,str_a,str_b,ext,nom_type,subdir]=name2display(fileresu);
2318namedoc=fullfile(RootPath,subdir,RootFile);
2319detect=1;
2320while detect==1
2321    namefigfull=[namedoc '.fig'];
2322    hh=dir(namefigfull);
2323    if ~isempty(hh)
2324        detect=1;
2325        namedoc=[namedoc '.0'];
2326    else
2327        detect=0;
2328    end
2329end
2330saveas(gcbf,namefigfull);%save the interface with name namefigfull (A CHANGER EN FICHIER  .xml)
2331
2332%Save info in personal profile (initiate browser next time) TODO
2333MenuFile={};
2334dir_perso=prefdir;
2335profil_perso=fullfile(dir_perso,'uvmat_perso.mat');
2336if exist(profil_perso,'file')
2337    hh=load (profil_perso);
2338      if isfield(hh,'MenuFile')
2339          MenuFile=hh.MenuFile;
2340      end
2341      MenuFile=[filecell.ima1.civ1(1,1); MenuFile];
2342      save (profil_perso,'MenuFile','-append'); %store the file names for future opening of uvmat
2343else
2344    MenuFile=filecell.ima1.civ1(1,1);
2345    save (profil_perso,'MenuFile')
2346end
2347
2348
2349%------------------------------------------------------------------------
2350% --- determine the list of reference indices of processing file
2351function [ref_i,ref_j,errormsg]=find_ref_indices(handles)
2352%------------------------------------------------------------------------
2353errormsg=''; %default error message
2354first_i=str2double(get(handles.first_i,'String'));%first index i
2355last_i=str2double(get(handles.last_i,'String'));%last index i
2356incr_i=str2double(get(handles.incr_i,'String'));% increment
2357if isequal(get(handles.first_j,'Visible'),'on')
2358    first_j=str2double(get(handles.first_j,'String'));%first index j
2359    last_j=str2double(get(handles.last_j,'String'));%last index j
2360    incr_j=str2double(get(handles.incr_j,'String'));% increment
2361else
2362    first_j=1;
2363    last_j=1;
2364    incr_j=1;
2365end
2366ref_i=first_i:incr_i:last_i;% list of i indices (reference values for each pair)
2367ref_j=first_j:incr_j:last_j;% list of j indices (reference values for each pair)
2368if isnan(first_i)||isnan(first_j)
2369    errormsg='first field number not defined';
2370elseif isnan(last_i)||isnan(last_j)
2371    errormsg='last field number not defined';
2372elseif isnan(incr_i)||isnan(incr_j)
2373    errormsg='increment in field number not defined';
2374elseif last_i < first_i || last_j < first_j
2375    errormsg='last field number must be larger than the first one';
2376end
2377
2378%------------------------------------------------------------------------
2379% --- determine the list of filenames and indices needed for launch_job
2380function [filecell,num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2,nom_type_nc,file_ref_fix1,file_ref_fix2,compare]=...
2381    set_civ_filenames(handles,ref_i,ref_j,box_test)
2382%------------------------------------------------------------------------
2383filecell=[];%default
2384
2385%% get the root names nomenclature and numbers
2386filebase=get(handles.RootName,'String');
2387
2388if isempty(filebase)||isequal(filebase,'')
2389    msgbox_uvmat('ERROR','no input files')
2390    return
2391end
2392
2393%filebase=regexprep(filebase,'\.fsnet','fsnet');% temporary fix for cluster Coriolis
2394filecell.filebase=filebase;
2395
2396browse=get(handles.RootName,'UserData');
2397compare_list=get(handles.compare,'String');
2398val=get(handles.compare,'Value');
2399compare=compare_list{val};
2400if strcmp(compare,'displacement')
2401    mode='displacement';
2402else
2403    mode_list=get(handles.CivMode,'String');
2404    mode_value=get(handles.CivMode,'Value');
2405    mode=mode_list{mode_value};
2406end
2407%time=get(handles.RootName,'UserData'); %get the set of times
2408ext_ima=get(handles.ImaExt,'String');
2409nom_type_nc=browse.nom_type_nc;
2410if isfield(browse,'nom_type_ima')
2411    nom_type_ima2=browse.nom_type_ima;
2412end
2413if isempty(nom_type_ima2),nom_type_ima2='1';end; %default
2414if isempty(nom_type_nc),nom_type_nc='_i1-i2';end; %default
2415[num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2]=...
2416    find_pair_indices(handles,ref_i,ref_j,mode);
2417%determine the new filebase for 'displacement' CivMode (comparison of two series)
2418filebase_B=filebase;% root name of the second field series for stereo
2419if strcmp(compare,'displacement') || strcmp(compare,'stereo PIV')
2420%     test_disp=1;
2421    nom_type_ima1=browse.nom_type_ima_1; %nomenclature type of the second file series
2422    [Path2,Name2]=fileparts(filebase_B);
2423    Path1=Path2;
2424    Name1=get(handles.RootName_1,'String');% root name of the first field series for stereo
2425    filebase_A=fullfile(Path1,Name1);
2426    if length(Name1)>6
2427        Name1=Name1(end-5:end);
2428    end
2429    if length(Name2)>6
2430        Name2=Name2(end-5:end);
2431    end
2432    filebase_AB=fullfile(Path2,[Name2 '-' Name1]);
2433else
2434%     test_disp=0;
2435    filebase_A=filebase;
2436    nom_type_ima1=nom_type_ima2;
2437    filebase_AB=filebase;
2438end
2439if strcmp(compare,'displacement')
2440    filebase_ima1=filebase_A;
2441    filebase_ima2=filebase_B;
2442    filebase_nc=filebase_AB; %root name for the result of civ2
2443else
2444    filebase_ima1=filebase_B;
2445    filebase_ima2=filebase_B;
2446    filebase_nc=filebase_B;
2447end
2448
2449%determine reference files for fix:
2450file_ref_fix1={};%default
2451file_ref_fix2={};
2452nbfield=length(num1_civ1);
2453nbslice=length(num_a_civ1);
2454if box_test(2)==1% fix1 performed
2455    ref=get(handles.ref_fix1,'UserData');%read data on the ref file stored by get_ref_fix1_Callback
2456    if ~isempty(ref)
2457        first_i=str2double(get(handles.first_i,'String'));
2458        last_i=str2double(get(handles.last_i,'String'));
2459        incr_i=str2double(get(handles.incr_i,'String'));
2460        first_j=str2double(get(handles.first_j,'String'));
2461        last_j=str2double(get(handles.last_j,'String'));
2462        incr_j=str2double(get(handles.incr_j,'String'));
2463        num_i_ref=first_i:incr_i:last_i;
2464        num_j_ref=first_j:incr_j:last_j;
2465        if isequal(mode,'displacement')
2466            num_i1=num_i_ref;
2467            num_i2=num_i_ref;
2468            num_j1=num_j_ref;
2469            num_j2=num_j_ref;
2470        elseif isequal(mode,'pair j1-j2')% isequal(mode,'st_pair j1-j2')
2471            num_i1=num_i_ref;
2472            num_i2=num_i1;
2473            num_j1=ref.num_a*ones(size(num_i_ref));
2474            num_j2=ref.num_b*ones(size(num_i_ref));
2475        elseif isequal(mode,'series(Di)') % isequal(mode,'st_series(Di)')
2476            delta1=floor((ref.num2-ref.num1)/2);
2477            delta2=ceil((ref.num2-ref.num1)/2);
2478            num_i1=num_i_ref-delta1*ones(size(num_i_ref));
2479            num_i2=num_i_ref+delta2*ones(size(num_i_ref));
2480            if isempty(ref.num_a)
2481                ref.num_a=1;
2482            end
2483            num_j1=ref.num_a*ones(size(num_i1));
2484            num_j2=num_j1;
2485        elseif isequal(mode,'series(Dj)')%| isequal(mode,'st_series(Dj)')
2486            delta1=floor((ref.num_b-ref.num_a)/2);
2487            delta2=ceil((ref.num_b-ref.num_a)/2);
2488            num_i1=ref.num1*ones(size(num_i_ref));
2489            num_i2=num_i1;
2490            num_j1=num_j_ref-delta1*ones(size(num_j_ref));
2491            num_j2=num_j_ref+delta2*ones(size(num_j_ref));
2492        end
2493        for ifile=1:nbfield
2494            for j=1:nbslice
2495                file_ref=name_generator(ref.filebase,num_i1(ifile),num_j1(j),'.nc',ref.nom_type,1,num_i2(ifile),num_j2(j),ref.subdir);%
2496                file_ref_fix1(ifile,j)={file_ref};
2497                if ~exist(file_ref,'file')
2498                    msgbox_uvmat('ERROR',['reference file ' file_ref ' not found for fix1'])
2499                    filecell=[];
2500                    return
2501                end
2502            end
2503        end
2504    end
2505end
2506
2507%determine reference files for fix2:
2508if box_test(5)==1% fix2 performed
2509    ref=get(handles.ref_fix2,'UserData');
2510    if ~isempty(ref)
2511        first_i=str2double(get(handles.first_i,'String'));
2512        last_i=str2double(get(handles.last_i,'String'));
2513        incr_i=str2double(get(handles.incr_i,'String'));
2514        first_j=str2double(get(handles.first_j,'String'));
2515        last_j=str2double(get(handles.last_j,'String'));
2516        incr_j=str2double(get(handles.incr_j,'String'));
2517        num_i_ref=first_i:incr_i:last_i;
2518        num_j_ref=first_j:incr_j:last_j;
2519        if isequal(mode,'displacement')
2520            num_i1=num_i_ref;
2521            num_i2=num_i_ref;
2522            num_j1=num_j_ref;
2523            num_j2=num_j_ref;
2524        elseif isequal(mode,'pair j1-j2')
2525            num_i1=num_i_ref;
2526            num_i2=num_i1;
2527            num_j1=ref.num_a;
2528            num_j2=ref.num_b;
2529        elseif isequal(mode,'series(Di)')
2530            delta1=floor((ref.num2-ref.num1)/2);
2531            delta2=ceil((ref.num2-ref.num1)/2);
2532            num_i1=num_i_ref-delta1*ones(size(num_i_ref));
2533            num_i2=num_i_ref+delta2*ones(size(num_i_ref));
2534            num_j1=ref.num_a*ones(size(num_i1));
2535            num_j2=num_j1;
2536        elseif isequal(mode,'series(Dj)')
2537            delta1=floor((ref.num_b-ref.num_a)/2);
2538            delta2=ceil((ref.num_b-ref.num_a)/2);
2539            num_i1=ref.num1*ones(size(num_i_ref));
2540            num_i2=num_i1;
2541            num_j1=num_j_ref-delta1*ones(size(num_j_ref));
2542            num_j2=num_j_ref+delta2*ones(size(num_j_ref));
2543        end
2544        for ifile=1:nbfield
2545            for j=1:nbslice
2546                file_ref=name_generator(ref.filebase,num_i1(ifile),num_j1(j),'.nc',ref.nom_type,1,num_i2(ifile),num_j2(j),ref.subdir);%
2547                file_ref_fix2(ifile,j)={file_ref};
2548                if ~exist(file_ref,'file')
2549                    msgbox_uvmat('ERROR',['reference file ' file_ref ' not found for fix2'])
2550                    filecell={};
2551                    return
2552                end
2553            end
2554        end
2555    end
2556end
2557
2558%check dir
2559subdir_civ1=get(handles.subdir_civ1,'String');%subdirectory subdir_civ1 for the netcdf output data
2560subdir_civ2=get(handles.subdir_civ2,'String');
2561if isequal(subdir_civ1,''),subdir_civ1='CIV'; end% put default subdir
2562if isequal(subdir_civ2,''),subdir_civ2=subdir_civ1; end% put default subdir
2563% currentdir=pwd;%store the current working directory
2564[Path_ima,Name]=fileparts(filebase);%Path of the image files (.civ)
2565if ~exist(Path_ima,'dir')
2566    msgbox_uvmat('ERROR',['path to images ' Path_ima ' not found'])
2567    filecell={};
2568    return
2569end
2570[xx,message]=fileattrib(Path_ima);
2571if ~isempty(message) && ~isequal(message.UserWrite,1)
2572    msgbox_uvmat('ERROR',['No writting access to ' Path_ima])
2573    filecell={};
2574%     cd(currentdir);
2575    return
2576end
2577
2578%check the existence of the netcdf and image files involved
2579% %%%%%%%%%%%%  case CIV1 activated   %%%%%%%%%%%%%
2580if box_test(1)==1;
2581    detect=1;
2582    vers=0;
2583    subdir_civ1_new=subdir_civ1;
2584    while detect==1 %create a new subdir if the netcdf files already exist
2585        for ifile=1:nbfield
2586            for j=1:nbslice
2587                filename=name_generator(filebase_nc,num1_civ1(ifile),num_a_civ1(j),'.nc',nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1_new);
2588                detect=exist(filename,'file')==2;
2589                if detect% if a netcdf file already exists
2590                    indstr=regexp(subdir_civ1_new,'\D');
2591                    if indstr(end)<length(subdir_civ1_new) %subdir_civ1 ends by a number
2592                        vers=str2double(subdir_civ1_new(indstr(end)+1:end))+1;
2593                        subdir_civ1_new=[subdir_civ1_new(1:indstr(end)) num2str(vers)];
2594                    else
2595                        vers=vers+1;
2596                        subdir_civ1_new=[subdir_civ1_new(1:indstr(end)) '_' num2str(vers)];       
2597                    end
2598                    subdir_civ2=subdir_civ1_new;
2599                    break
2600                end
2601                filecell.nc.civ1(ifile,j)={filename};
2602            end
2603            if detect% if a netcdf file already exists
2604                break
2605            end
2606        end
2607 
2608        %create the new subdir_civ1
2609        if ~exist(fullfile(Path_ima,subdir_civ1_new),'dir')
2610%             cd(Path_ima);         
2611            [xx,msg1]=mkdir(fullfile(Path_ima,subdir_civ1_new));
2612
2613            if ~strcmp(msg1,'')
2614                msgbox_uvmat('ERROR',['cannot create ' subdir_civ1_new ': ' msg1])%error message for directory creation
2615                filecell={};
2616                return
2617            elseif isunix         
2618                [xx,msg2] = fileattrib(fullfile(Path_ima,subdir_civ1_new),'+w','g'); %yield writing access (+w) to user group (g)
2619                if ~strcmp(msg2,'')
2620                    msgbox_uvmat('ERROR',['pb of permission for  ' fullfile(Path_ima,subdir_civ1_new) ': ' msg2])%error message for directory creation
2621                    filecell={};
2622                    return
2623                end
2624            end
2625%             cd(currentdir);
2626        end
2627        if strcmp(compare,'stereo PIV')&&(strcmp(mode,'pair j1-j2')||strcmp(mode,'series(Dj)')||strcmp(mode,'series(Di)'))%check second nc series
2628            for ifile=1:nbfield
2629                for j=1:nbslice
2630                    filename=name_generator(filebase_A,num1_civ1(ifile),num_a_civ1(j),'.nc',nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1_new);%
2631                    detect=exist(filename,'file')==2;
2632                    if detect% if a netcdf file already exists
2633                       indstr=regexp(subdir_civ1_new,'\D');
2634                       if indstr(end)<length(subdir_civ1_new) %subdir_civ1 ends by a number
2635                           vers=str2double(subdir_civ1_new(indstr(end)+1:end))+1;
2636                           subdir_civ1_new=[subdir_civ1_new(1:indstr(end)) num2str(vers)];
2637                       else
2638                           vers=vers+1;
2639                           subdir_civ1_new=[subdir_civ1_new '_' num2str(vers)];
2640                       end
2641                       subdir_civ2=subdir_civ1;
2642                       break
2643                    end
2644                    filecell.ncA.civ1(ifile,j)={filename};
2645                end
2646                if detect% if a netcdf file already exists
2647                    break
2648                end
2649            end
2650            %create the new subdir_civ1
2651            if ~exist(fullfile(Path_ima,subdir_civ1_new),'dir')
2652%                    cd(Path_ima);         
2653                [xx,msg1]=mkdir(fullfile(Path_ima,subdir_civ1_new));
2654%                             cd(currentdir);
2655                if ~strcmp(msg1,'')
2656                    msgbox_uvmat('ERROR',['cannot create ' subdir_civ1_new ': ' msg1])
2657%                     cd(currentdir)
2658                    filecell={};
2659                    return
2660                else
2661                    [xx,msg2] = fileattrib(fullfile(Path_ima,subdir_civ1_new),'+w','g'); %yield writing access (+w) to user group (g)
2662                    if ~strcmp(msg2,'')
2663                        msgbox_uvmat('ERROR',['pb of permission for ' subdir_civ1_new ': ' msg2])%error message for directory creation
2664%                         cd(currentdir)
2665                        filecell={};
2666                        return
2667                    end
2668                end
2669            end
2670        end
2671    end
2672    subdir_civ1=subdir_civ1_new;
2673    % get image names
2674    for ifile=1:nbfield
2675        for j=1:nbslice
2676            filename=name_generator(filebase_ima1, num1_civ1(ifile),num_a_civ1(j),ext_ima,nom_type_ima1);
2677            idetect(j)=exist(filename,'file')==2;
2678            filecell.ima1.civ1(ifile,j)={filename}; %first image
2679            filename=name_generator(filebase_ima2, num2_civ1(ifile),num_b_civ1(j),ext_ima,nom_type_ima2);
2680            idetect_1(j)=exist(filename,'file')==2;
2681            filecell.ima2.civ1(ifile,j)={filename};%second image
2682        end
2683        [idetectmin,indexj]=min(idetect);
2684        if idetectmin==0,
2685            msgbox_uvmat('ERROR',[filecell.ima1.civ1{ifile,indexj} ' not found'])
2686            filecell={};
2687           % cd(currentdir)
2688            return
2689        end
2690        [idetectmin,indexj]=min(idetect_1);
2691        if idetectmin==0,
2692            msgbox_uvmat('ERROR',[filecell.ima2.civ1{ifile,indexj} ' not found'])
2693            filecell={};
2694            %cd(currentdir)
2695            return
2696        end
2697    end
2698    if strcmp(compare,'stereo PIV') && (strcmp(mode,'pair j1-j2') || strcmp(mode,'series(Dj)') || strcmp(mode,'series(Di)'))
2699        for ifile=1:nbfield
2700            for j=1:nbslice
2701                filename=name_generator(filebase_A, num1_civ1(ifile),num_a_civ1(j),ext_ima,nom_type_ima1);
2702                idetect(j)=exist(filename,'file')==2;
2703                filecell.imaA1.civ1(ifile,j)={filename} ;%first image
2704                filename=name_generator(filebase_A, num2_civ1(ifile),num_b_civ1(j),ext_ima,nom_type_ima2);
2705                idetect_1(j)=exist(filename,'file')==2;
2706                filecell.imaA2.civ1(ifile,j)={filename};%second image
2707            end
2708            [idetectmin,indexj]=min(idetect);
2709            if idetectmin==0,
2710                msgbox_uvmat('ERROR',[filecell.imaA1.civ1{ifile,indexj} ' not found'])
2711                filecell={};
2712               % cd(currentdir)
2713                return
2714            end
2715            [idetectmin,indexj]=min(idetect_1);
2716            if idetectmin==0,
2717                msgbox_uvmat('ERROR',[filecell.imaA2.civ1{ifile,indexj} ' not found'])
2718                filecell={};
2719               % cd(currentdir)
2720                return
2721            end
2722        end
2723    end
2724   
2725    %%%%%%%%%%%%%  fix1 or patch1 activated but no civ1   %%%%%%%%%%%%%
2726elseif (box_test(2)==1 || box_test(3)==1);
2727    for ifile=1:nbfield
2728        for j=1:nbslice
2729            filename=name_generator(filebase_nc,num1_civ1(ifile),num_a_civ1(j),'.nc',...
2730                nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1);%
2731            detect=exist(filename,'file')==2;
2732            if detect==0
2733                msgbox_uvmat('ERROR',[filename ' not found'])
2734                filecell={};
2735               % cd(currentdir)
2736                return
2737            end
2738            filecell.nc.civ1(ifile,j)={filename};
2739        end
2740    end
2741    if strcmp(compare,'stereo PIV')
2742        for ifile=1:nbfield
2743            for j=1:nbslice
2744                filename=name_generator(filebase_A,num1_civ1(ifile),num_a_civ1(j),'.nc',nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1);%
2745                filecell.ncA.civ1(ifile,j)={filename};
2746                if ~exist(filename,'file')
2747                    msgbox_uvmat('ERROR',['input file ' filename ' not found'])
2748                    set(handles.RUN, 'Enable','On')
2749                    set(handles.RUN,'BackgroundColor',[1 0 0])
2750                    filecell={};
2751                    %cd(currentdir)
2752                    return
2753                end
2754            end
2755        end
2756    end
2757end
2758
2759%%%%%%%%%%%%%  if civ2 performed with pairs different than civ1  %%%%%%%%%%%%%
2760testdiff=0;
2761if (box_test(4)==1)&&...
2762        ((get(handles.list_pair_civ1,'Value')~=get(handles.list_pair_civ2,'Value'))||~strcmp(subdir_civ2,subdir_civ1))
2763    testdiff=1;
2764    detect=1;
2765    vers=0;
2766    subdir_civ2_new=subdir_civ2;
2767    while detect==1 %create a new subdir if the netcdf files already exist
2768        for ifile=1:nbfield
2769            for j=1:nbslice
2770                filename=name_generator(filebase_nc,num1_civ2(ifile),num_a_civ2(j),'.nc',nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2_new);%
2771                detect=exist(filename,'file')==2;
2772                if detect% if a netcdf file already exists
2773                    indstr=regexp(subdir_civ2,'\D');
2774                    if indstr(end)<length(subdir_civ2) %subdir_civ1 ends by a number
2775                        vers=str2double(subdir_civ2(indstr(end)+1:end))+1;
2776                        subdir_civ2_new=[subdir_civ2(1:indstr(end)) num2str(vers)];
2777                    else
2778                        vers=vers+1;
2779                        subdir_civ2_new=[subdir_civ1 '_' num2str(vers)];
2780                    end
2781                    break
2782                end
2783                filecell.nc.civ2(ifile,j)={filename};
2784            end
2785            if detect% if a netcdf file already exists
2786                break
2787            end
2788        end
2789        %create the new subdir_civ2_new
2790        if ~exist(fullfile(Path_ima,subdir_civ2_new),'dir')
2791            [xx,m2]=mkdir(fullfile(Path_ima,subdir_civ2_new));
2792            [xx,msg2] = fileattrib(fullfile(Path_ima,subdir_civ2_new),'+w','g'); %yield writing access (+w) to user group (g)
2793            if ~isequal(m2,'')
2794                msgbox_uvmat('ERROR',['cannot create ' fullfile(Path_ima,subdir_civ2_new) ': ' m2])
2795                filecell={};
2796               % cd(currentdir)
2797                return
2798            end
2799        end
2800        if strcmp(compare,'stereo PIV')%check second nc series
2801            for ifile=1:nbfield
2802                for j=1:nbslice
2803                    filename=name_generator(filebase_A,num1_civ2(ifile),num_a_civ2(j),'.nc',...
2804                        nom_type_nc,1,num2_civ2(ifile),num_b_civ1(j),subdir_civ2_new);%
2805                    detect=exist(filename,'file')==2;
2806                    if detect% if a netcdf file already exists
2807                        indstr=regexp(subdir_civ2,'\D');
2808                        if indstr(end)<length(subdir_civ2) %subdir_civ1 ends by a number
2809                           vers=str2double(subdir_civ2(indstr(end)+1:end))+1;
2810                           subdir_civ2_new=[subdir_civ2(1:indstr(end)) num2str(vers)];
2811                        else
2812                           vers=vers+1;
2813                           subdir_civ2_new=[subdir_civ1 '_' num2str(vers)];
2814                        end
2815                        break
2816                    end
2817                    filecell.ncA.civ2(ifile,j)={filename};
2818                end
2819                if detect% if a netcdf file already exists
2820                    break
2821                end
2822            end
2823            subdir_civ2=subdir_civ2_new;
2824            %create the new subdir_civ1
2825            if ~exist(fullfile(Path_ima,subdir_civ2_new),'dir')
2826                [xx,m2]=mkdir(subdir_civ2_new);
2827                 [xx,msg2] = fileattrib(fullfile(Path_ima,subdir_civ2_new),'+w','g'); %yield writing access (+w) to user group (g)
2828                if ~isequal(m2,'')
2829                    msgbox_uvmat('ERROR', ['cannot create ' fullfile(Path_ima,subdir_civ2_new) ': ' m2])%error message for directory creation
2830                  %  cd(currentdir)
2831                    filecell={};
2832                    return
2833                end
2834            end
2835        end
2836    end
2837    subdir_civ2=subdir_civ2_new;
2838end
2839%cd(currentdir);%come back to the current working directory
2840
2841%%%%%%%%%%%%%  if civ2 results are obtained or used  %%%%%%%%%%%%%
2842if box_test(4)==1 || box_test(5)==1 || box_test(6)==1 %civ2
2843    %check source netcdf file of civ1 estimates
2844    if box_test(1)==0; %no civ1 performed
2845        for ifile=1:nbfield
2846            for j=1:nbslice
2847                filename=name_generator(filebase_nc,num1_civ1(ifile),num_a_civ1(j),'.nc',...
2848                    nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1);%
2849                filecell.nc.civ1(ifile,j)={filename};% name of the civ1 file
2850                if ~exist(filename,'file')
2851                    msgbox_uvmat('ERROR',['input file ' filename ' not found'])
2852                    filecell={};
2853                    return
2854                end
2855                if ~testdiff % civ2 or patch2 are written in the same file as civ1
2856                    if box_test(4)==0 ; %check the existence of civ2 if it is not calculated
2857                        Data=nc2struct(filename,'ListGlobalAttribute','CivStage','civ2');
2858                        if ~isempty(Data.CivStage) && Data.CivStage<4 %test for civ files
2859                            msgbox_uvmat('ERROR',['no civ2 data in ' filename])
2860                            filecell=[];
2861                            return
2862                        elseif isempty(Data.civ2)||isequal(Data.civ2,0)
2863                            msgbox_uvmat('ERROR',['no civ2 data in ' filename])
2864                            filecell=[];
2865                            return
2866                        end
2867                    elseif box_test(3)==0; %check the existence of patch if it is not calculated
2868                        Data=nc2struct(filename,'ListGlobalAttribute','CivStage','patch');
2869                        if ~isempty(Data.CivStage)
2870                            if Data.CivStage<3 %test for civ files
2871                                msgbox_uvmat('ERROR',['no patch data in ' filename])
2872                                filecell=[];
2873                                return
2874                            end
2875                        elseif isempty(Data.patch)||isequal(Data.patch,0)
2876                            msgbox_uvmat('ERROR',['no patch data in ' filename])
2877                            filecell=[];
2878                            return
2879                        end
2880                    end
2881                end
2882            end
2883        end
2884        if strcmp(compare,'stereo PIV')
2885            for ifile=1:nbfield
2886                for j=1:nbslice
2887                    filename=name_generator(filebase_A,num1_civ2(ifile),num_a_civ2(j),'.nc',...
2888                        nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
2889                    filecell.ncA.civ2(ifile,j)={filename};
2890                    if ~exist(filename,'file')
2891                        msgbox_uvmat('ERROR',['input file ' filename ' not found'])
2892                        set(handles.RUN, 'Enable','On')
2893                        set(handles.RUN,'BackgroundColor',[1 0 0])
2894                        return
2895                    end
2896                end
2897            end
2898        end
2899    end
2900   
2901    detect=1;
2902    %     while detect==1%creates a new subdir if the netcdf files already contain civ2 data
2903    for ifile=1:nbfield
2904        for j=1:nbslice
2905            filename=name_generator(filebase_nc,num1_civ2(ifile),num_a_civ2(j),'.nc',...
2906                nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);
2907            detect=exist(filename,'file')==2;
2908            filecell.nc.civ2(ifile,j)={filename};
2909        end
2910    end
2911    %get first image names for civ2
2912    if box_test(1)==1 & isequal(num1_civ1,num1_civ2) & isequal(num_a_civ1,num_a_civ2)
2913        filecell.ima1.civ2=filecell.ima1.civ1;
2914    elseif box_test(4)==1
2915        for ifile=1:nbfield
2916            for j=1:nbslice
2917                filename=name_generator(filebase_ima1, num1_civ2(ifile),num_a_civ2(j),ext_ima,nom_type_ima1);
2918                idetect_2(j)=exist(filename,'file')==2;
2919                filecell.ima1.civ2(ifile,j)={filename};%first image
2920            end
2921            [idetectmin,indexj]=min(idetect_2);
2922            if idetectmin==0,
2923                msgbox_uvmat('ERROR',['input image ' filecell.ima1.civ2{ifile,indexj} ' not found'])
2924                filecell=[];
2925                return
2926            end
2927        end
2928    end
2929   
2930    %get second image names for civ2
2931    if box_test(1)==1 & isequal(num2_civ1,num2_civ2) & isequal(num_b_civ1,num_b_civ2)
2932        filecell.ima2.civ2=filecell.ima2.civ1;
2933    elseif box_test(4)==1
2934        for ifile=1:nbfield
2935            for j=1:nbslice
2936                filename=name_generator(filebase_ima2, num2_civ2(ifile),num_b_civ2(j),ext_ima,nom_type_ima2);
2937                idetect_3(j)=exist(filename,'file')==2;
2938                filecell.ima2.civ2(ifile,j)={filename};%first image
2939            end
2940            [idetectmin,indexj]=min(idetect_3);
2941            if idetectmin==0,
2942                msgbox_uvmat('ERROR',['input image ' filecell.ima2.civ2{ifile,indexj} ' not found'])
2943                filecell=[];
2944                return
2945            end
2946        end
2947    end
2948end
2949if (box_test(5)==1 || box_test(6)==1 ) && box_test(4)==0  % need to read an existing netcdf civ2 file
2950    if ~testdiff
2951        filecell.nc.civ2=filecell.nc.civ1;% file already checked
2952    else     % check the civ2 files
2953        for ifile=1:nbfield
2954            for j=1:nbslice
2955                filename=name_generator(filebase_nc,num1_civ2(ifile),num_a_civ2(j),'.nc',...
2956                    nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
2957                filecell.nc.civ2(ifile,j)={filename};
2958                if ~exist(filename,'file')
2959                    msgbox_uvmat('ERROR',['input file ' filename ' not found'])
2960                    filecell=[];
2961                    return
2962                else
2963                    Data=nc2struct(filename,'ListGlobalAttribute','CivStage','civ2');
2964                    if ~isempty(Data.CivStage) && Data.CivStage<4 %test for civ files
2965                            msgbox_uvmat('ERROR',['no civ2 data in ' filename])
2966                            filecell=[];
2967                            return
2968                    elseif isempty(Data.civ2)||isequal(Data.civ2,0)
2969                        msgbox_uvmat('ERROR',['no civ2 data in ' filename])
2970                        filecell=[];
2971                        return
2972                    end
2973                end
2974            end
2975        end
2976    end
2977end
2978
2979%%%%%%%%%%%%%  if stereo fields are calculated by PATCH %%%%%%%%%%%%%
2980if strcmp(compare,'stereo PIV')
2981    if  box_test(3)==1 && isequal(get(handles.test_stereo1,'Value'),1)
2982        for ifile=1:nbfield
2983            for j=1:nbslice
2984                filename=name_generator(filebase_AB,num1_civ1(ifile),num_a_civ1(j),'.nc',...
2985                    nom_type_nc,1,num2_civ1(ifile),num_b_civ1(j),subdir_civ1);%
2986                filecell.st(ifile,j)={filename};
2987            end
2988        end
2989    end
2990    if  box_test(6)==1 && isequal(get(handles.check_Stereo,'Value'),1)
2991        for ifile=1:nbfield
2992            for j=1:nbslice
2993                filename=name_generator(filebase_AB,num1_civ2(ifile),num_a_civ2(j),'.nc',...
2994                    nom_type_nc,1,num2_civ2(ifile),num_b_civ2(j),subdir_civ2);%
2995                filecell.st(ifile,j)={filename};
2996            end
2997        end
2998    end
2999end
3000set(handles.subdir_civ1,'String',subdir_civ1);%update the edit box
3001set(handles.subdir_civ2,'String',subdir_civ2);%update the edit box
3002browse.nom_type_nc=nom_type_nc;
3003set(handles.RootName,'UserData',browse); %update the nomenclature type for uvmat
3004
3005
3006%COPY IMAGES TO THE FORMAT .png IF NEEDED
3007if isequal(nom_type_ima1,'*')%case of movie files
3008    nom_type_imanew1='_i';
3009else
3010    nom_type_imanew1=nom_type_ima1;
3011end
3012if isequal(nom_type_ima2,'*')%case of movie files
3013    nom_type_imanew2='_i';
3014else
3015    nom_type_imanew2=nom_type_ima2;
3016end
3017if ~isequal(ext_ima,'.png')
3018    %%type of image file
3019    type_ima1='none';%default
3020    movieobject1=[];%default
3021    if strcmpi(ext_ima,'.avi')
3022        hhh=which('mmreader');
3023        if ~isequal(hhh,'')&& mmreader.isPlatformSupported()% if the mmreader function is found (recent version of matlab)
3024            type_ima1='movie';
3025            movieobject1=mmreader([filebase_ima2 ext_ima]);
3026        else
3027            type_ima1='avi';
3028        end
3029    elseif ischar(ext_ima) && ~isempty(ext_ima(2:end))
3030        form=imformats(ext_ima(2:end));
3031        if ~isempty(form)% if the extension corresponds to an image format recognized by Matlab
3032            if isequal(nom_type_ima1,'*');
3033                type_ima1='multimage';%image series in a single image file
3034            else
3035                type_ima1='image';
3036            end
3037        end
3038    end
3039    type_ima2='none';%default
3040    movieobject2=[];
3041    if strcmpi(ext_ima,'.avi')
3042        hhh=which('mmreader');
3043        if ~isequal(hhh,'')&& mmreader.isPlatformSupported()% if the mmreader function is found (recent version of matlab)
3044            type_ima2='movie';
3045            movieobject2=mmreader([filebase_ima2 ext_ima]);
3046        else
3047            type_ima2='avi';
3048        end
3049    elseif ischar(ext_ima) && ~isempty(ext_ima(2:end))
3050        form=imformats(ext_ima(2:end));
3051        if ~isempty(form)% if the extension corresponds to an image format recognized by Matlab
3052            if isequal(nom_type_ima1,'*');
3053                type_ima2='multimage';%image series in a single image file
3054            else
3055                type_ima2='image';
3056            end
3057        end
3058    end
3059    %npxy=get(handles.ImaExt,'UserData');
3060    % %     if numel(npxy)<2
3061    %
3062    %         filename=name_generator(filebase_ima1,num1_civ1(1),num_a_civ1(1),ImaExt,nom_type_ima1);
3063    %         A=imread(filename);
3064    %         npxy=size(A);
3065    % %     end
3066    %     npy=npxy(1);
3067    %     npx=npxy(2);
3068    if box_test(1)==1 %if civ1 is performed
3069        h = waitbar(0,'copy images to the .png format for civ1');% display a wait bar
3070        for ifile=1:nbfield
3071            waitbar(ifile/nbfield);
3072            for j=1:nbslice
3073                filename=name_generator(filebase_ima1,num1_civ1(ifile),num_a_civ1(j),'.png',nom_type_imanew1);
3074                if ~exist(filename,'file')
3075                    A=read_image(filecell.ima1.civ1{ifile,j},type_ima1,num1_civ1(ifile),movieobject1);
3076                    imwrite(A,filename,'BitDepth',16);
3077                end
3078                filecell.ima1.civ1(ifile,j)={filename};
3079                filename=name_generator(filebase_ima2, num2_civ1(ifile),num_b_civ1(j),'.png',nom_type_imanew2);
3080                if ~exist(filename,'file')
3081                    A=read_image(filecell.ima2.civ1{ifile,j},type_ima2,num2_civ1(ifile),movieobject2);
3082                    imwrite(A,filename,'BitDepth',16);
3083                end
3084                filecell.ima2.civ1(ifile,j)={filename};
3085            end
3086        end
3087        close(h)
3088    end
3089    if box_test(4)==1 %if civ2 is performed
3090        h = waitbar(0,'copy images to the .png format for civ2');% display a wait bar
3091        for ifile=1:nbfield
3092            waitbar(ifile/nbfield);
3093            for j=1:nbslice
3094                filename=name_generator(filebase_ima1,num1_civ2(ifile),num_a_civ2(j),'.png',nom_type_imanew1);
3095                if ~exist(filename,'file')
3096                    A=read_image(cell2mat(filecell.ima1.civ2(ifile,j)),type_ima2,num1_civ2(ifile));
3097                    imwrite(A,filename,'BitDepth',16);
3098                end
3099                filecell.ima1.civ2(ifile,j)={filename};
3100                filename=name_generator(filebase_ima2, num2_civ2(ifile),num_b_civ2(j),'.png',nom_type_imanew2);
3101                if ~exist(filename,'file')
3102                    A=read_image(cell2mat(filecell.ima2.civ2(ifile,j)),type_ima2,num2_civ2(ifile));
3103                    imwrite(A,filename,'BitDepth',16);
3104                end
3105                filecell.ima2.civ2(ifile,j)={filename};
3106            end
3107        end
3108        close(h);
3109    end
3110end
3111
3112%------------------------------------------------------------------------
3113% --- determine the list of index pairs of processing file
3114function [num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2]=...
3115    find_pair_indices(handles,ref_i,ref_j,mode)
3116%------------------------------------------------------------------------
3117
3118list_civ1=get(handles.list_pair_civ1,'String');
3119index_civ1=get(handles.list_pair_civ1,'Value');
3120str_civ1=list_civ1{index_civ1};%string defining the image pairs for civ1
3121if isempty(str_civ1)||isequal(str_civ1,'')
3122    msgbox_uvmat('ERROR','no image pair selected for civ1')
3123    return
3124end
3125list_civ2=get(handles.list_pair_civ2,'String');
3126index_civ2=get(handles.list_pair_civ2,'Value');
3127if index_civ2>length(list_civ2)
3128    list_civ2=list_civ1;
3129    index_civ2=index_civ1;
3130end
3131str_civ2=list_civ2{index_civ2};%string defining the image pairs for civ2
3132
3133if isequal (mode,'series(Di)')
3134    lastfield=str2double(get(handles.nb_field,'String'));
3135    num1_civ1=ref_i-floor(index_civ1/2)*ones(size(ref_i));% set of first image numbers
3136    num2_civ1=ref_i+ceil(index_civ1/2)*ones(size(ref_i));
3137    num_a_civ1=ref_j;
3138    num_b_civ1=ref_j;
3139    num1_civ2=ref_i-floor(index_civ2/2)*ones(size(ref_i));
3140    num2_civ2=ref_i+ceil(index_civ2/2)*ones(size(ref_i));
3141    num_a_civ2=ref_j;
3142    num_b_civ2=ref_j;   
3143   
3144    % adjust the first and last field number
3145    lastfield=str2double(get(handles.nb_field,'String'));
3146    if isnan(lastfield)
3147        indsel=find((num1_civ1 >= 1)&(num1_civ2 >= 1));
3148    else
3149        indsel=find((num2_civ1 <= lastfield)&(num2_civ2 <= lastfield)&(num1_civ1 >= 1)&(num1_civ2 >= 1));
3150    end
3151    if length(indsel)>=1
3152        firstind=indsel(1);
3153        lastind=indsel(end);
3154        set(handles.first_i,'String',num2str(ref_i(firstind)))%update the display of first and last fields
3155        set(handles.last_i,'String',num2str(ref_i(lastind)))
3156        ref_i=ref_i(indsel);
3157        num1_civ1=num1_civ1(indsel);
3158        num1_civ2=num1_civ2(indsel);
3159        num2_civ1=num2_civ1(indsel);
3160        num2_civ2=num2_civ2(indsel);
3161    end
3162elseif isequal (mode,'series(Dj)')
3163    lastfield_j=str2double(get(handles.nb_field2,'String'));
3164    num1_civ1=ref_i;% set of first image numbers
3165    num2_civ1=ref_i;
3166    num_a_civ1=ref_j-floor(index_civ1/2)*ones(size(ref_j));
3167    num_b_civ1=ref_j+ceil(index_civ1/2)*ones(size(ref_j));
3168    num1_civ2=ref_i;
3169    num2_civ2=ref_i;
3170    num_a_civ2=ref_j-floor(index_civ2/2)*ones(size(ref_j));
3171    num_b_civ2=ref_j+ceil(index_civ2/2)*ones(size(ref_j));
3172    % adjust the first and last field number
3173    if isnan(lastfield_j)
3174        indsel=find((num_a_civ1 >= 1)&(num_a_civ2 >= 1));
3175    else
3176        indsel=find((num_b_civ1 <= lastfield_j)&(num_b_civ2 <= lastfield_j)&(num_a_civ1 >= 1)&(num_a_civ2 >= 1));
3177    end
3178    if length(indsel)>=1
3179        firstind=indsel(1);
3180        lastind=indsel(end);
3181        set(handles.first_j,'String',num2str(ref_j(firstind)))%update the display of first and last fields
3182        set(handles.last_j,'String',num2str(ref_j(lastind)))
3183        ref_j=ref_j(indsel);
3184        num_a_civ1=num_a_civ1(indsel);
3185        num_b_civ1=num_b_civ1(indsel);
3186        num_a_civ2=num_a_civ2(indsel);
3187        num_b_civ2=num_b_civ2(indsel);
3188    end
3189elseif isequal(mode,'pair j1-j2') %case of bursts (png_old or png_2D)
3190    displ_num=get(handles.list_pair_civ1,'UserData');
3191    num1_civ1=ref_i;
3192    num2_civ1=ref_i;
3193    num_a_civ1=displ_num(1,index_civ1);
3194    num_b_civ1=displ_num(2,index_civ1);
3195    num1_civ2=ref_i;
3196    num2_civ2=ref_i;
3197    num_a_civ2=displ_num(1,index_civ2);
3198    num_b_civ2=displ_num(2,index_civ2);
3199elseif isequal(mode,'displacement')
3200    num1_civ1=ref_i;
3201    num2_civ1=ref_i;
3202    num_a_civ1=ref_j;
3203    num_b_civ1=ref_j;
3204    num1_civ2=ref_i;
3205    num2_civ2=ref_i;
3206    num_a_civ2=ref_j;
3207    num_b_civ2=ref_j;
3208end
3209
3210
3211%------------------------------------------------------------------------
3212% --- PATCH
3213function cmd=cmd_patch(filename_nc,Param,PatchBin)
3214%------------------------------------------------------------------------
3215namelog=[filename_nc(1:end-3) '_patch.log'];
3216
3217% if test_interp==0
3218    if isunix
3219    cmd=[PatchBin...
3220        ' -f ' filename_nc ' -m ' num2str(Param.Nx)...
3221        ' -n ' num2str(Param.Ny) ' -ro ' num2str(Param.SmoothingParam)...
3222        ' -nopt ' num2str(Param.SubdomainSize) ...
3223        '  > ' namelog ' 2>&1']; % redirect standard output to the log file
3224    else
3225      cmd=['"' param.global.PatchBin...
3226          '" -f "' filename_nc '" -m ' param.Patch1.Nx...
3227          ' -n ' param.Patch1.Ny ' -ro ' param.Patch1.SmoothParam...
3228          ' -nopt ' Param.Patch1.SubdomainSize ...
3229        '  > "' namelog '" 2>&1']; % redirect standard output to the log file
3230    end
3231% else %nouveau programme patch
3232%     cmd=[PatchBin ' -f ' filename_nc ' -m ' nx_patch  ' -n ' ny_patch ' -ro ' rho_patch ...
3233%         ' -max ' thresh_value ' -nopt ' subdomain_patch  '  > ' namelog ' 2>&1']; % redirect standard output to the log file
3234% end
3235cmd=regexprep(cmd,'\\','\\\\');
3236
3237%------------------------------------------------------------------------
3238% --- STEREO Interp
3239function cmd=RUN_STINTERP(stinterpBin,filename_A_nc,filename_B_nc,filename_nc,nx_patch,ny_patch,rho_patch,subdomain_patch,thresh_value,xmlA,xmlB)
3240%------------------------------------------------------------------------
3241namelog=[filename_nc(1:end-3) '_stinterp.log'];
3242cmd=[stinterpBin ' -f1 ' filename_A_nc  ' -f2 ' filename_B_nc ' -f  ' filename_nc ...
3243    ' -m ' nx_patch  ' -n ' ny_patch ' -ro ' rho_patch ' -nopt ' subdomain_patch ' -c1 ' xmlA ' -c2 ' xmlB '  -xy  x -Nfy 1024 > ' namelog ' 2>&1']; % redirect standard output to the log file
3244
3245%------------------------------------------------------------------------
3246% --- Executes on button press in CIV1.
3247function CIV1_Callback(hObject, eventdata, handles)
3248%------------------------------------------------------------------------
3249state=get(handles.CIV1,'Value');
3250enable_civ1(handles,state)
3251if state
3252    enable_pair1(handles,'on')
3253end
3254find_netcpair_civ1(hObject, eventdata, handles);
3255
3256%------------------------------------------------------------------------
3257% --- Executes on button press in FIX1.
3258function FIX1_Callback(hObject, eventdata, handles)
3259%------------------------------------------------------------------------
3260enable_fix1(handles,get(handles.FIX1,'Value'))
3261
3262%------------------------------------------------------------------------
3263% --- Executes on button press in PATCH1.
3264function PATCH1_Callback(hObject, eventdata, handles)
3265%------------------------------------------------------------------------
3266enable_patch1(handles,get(handles.PATCH1,'Value'))
3267
3268%------------------------------------------------------------------------
3269% --- Executes on button press in CIV2.
3270function CIV2_Callback(hObject, eventdata, handles)
3271%------------------------------------------------------------------------
3272state=get(handles.CIV2,'Value');
3273enable_civ2(handles,state)
3274if state
3275    find_netcpair_civ2(hObject, eventdata, handles)
3276    enable_pair1(handles,'on')
3277end
3278
3279%------------------------------------------------------------------------
3280% --- Executes on button press in FIX2.
3281function FIX2_Callback(hObject, eventdata, handles)
3282%------------------------------------------------------------------------
3283state=get(handles.FIX2,'Value');
3284enable_fix2(handles,state)
3285if state
3286    find_netcpair_civ2(hObject, eventdata, handles) % select the available netcdf files
3287end
3288
3289%------------------------------------------------------------------------
3290% --- Executes on button press in PATCH2.
3291function PATCH2_Callback(hObject, eventdata, handles)
3292%------------------------------------------------------------------------
3293state=get(handles.PATCH2,'Value');
3294enable_patch2(handles,state)
3295if state
3296    find_netcpair_civ2(hObject, eventdata, handles) % select the available netcdf files
3297end
3298
3299%------------------------------------------------------------------------
3300function first_i_Callback(hObject, eventdata, handles)
3301%------------------------------------------------------------------------
3302% last_i_Callback(hObject, eventdata, handles)
3303first_i=str2double(get(handles.first_i,'String'));
3304% last_i=str2num(get(handles.last_i,'String'));
3305% ref_i=ceil((first_i+last_i)/2);
3306set(handles.ref_i,'String', num2str(first_i))% reference index for pair dt = first index
3307%set(handles.ref_i_civ2,'String', num2str(first_i))% reference index for pair dt = first index
3308ref_i_Callback(hObject, eventdata, handles)%refresh dispaly of dt for pairs (in case of non constant dt)
3309
3310%------------------------------------------------------------------------
3311function first_j_Callback(hObject, eventdata, handles)
3312%------------------------------------------------------------------------
3313first_j=str2num(get(handles.first_j,'String'));
3314set(handles.ref_j,'String', num2str(first_j))% reference index for pair dt = first index
3315ref_j_Callback(hObject, eventdata, handles)%refresh dispaly of dt for pairs (in case of non constant dt)
3316
3317%------------------------------------------------------------------------
3318% --- Executes on button press in SearchRange: determine the search range isx,isy
3319function SearchRange_Callback(hObject, eventdata, handles)
3320%------------------------------------------------------------------------
3321%determine pair numbers
3322if strcmp(get(handles.umin,'Visible'),'off')
3323    set(handles.u_title,'Visible','on')
3324    set(handles.v_title,'Visible','on')
3325    set(handles.umin,'Visible','on')
3326    set(handles.umax,'Visible','on')
3327    set(handles.vmin,'Visible','on')
3328    set(handles.vmax,'Visible','on')
3329    set(handles.CoordUnit,'Visible','on')
3330    set(handles.TimeUnit,'Visible','on')
3331    set(handles.slash_title,'Visible','on')
3332    set(handles.min_title,'Visible','on')
3333    set(handles.max_title,'Visible','on')
3334    set(handles.unit_title,'Visible','on')
3335else
3336    get_search_range(hObject, eventdata, handles)
3337end
3338
3339%------------------------------------------------------------------------
3340% ---  determine the search range isx,isy and shift
3341function get_search_range(hObject, eventdata, handles)
3342umin=str2double(get(handles.umin,'String'));
3343umax=str2double(get(handles.umax,'String'));
3344vmin=str2double(get(handles.umin,'String'));
3345vmax=str2double(get(handles.vmax,'String'));
3346%switch min_title and max_title in case of error
3347if umax<=umin
3348    umin_old=umin;
3349    umin=umax;
3350    umax=umin_old;
3351    set(handles.umin,'String', num2str(umin))
3352    set(handles.umax,'String', num2str(umax))
3353end
3354if vmax<=vmin
3355    vmin_old=vmin;
3356    vmin=vmax;
3357    vmax=vmin_old;
3358    set(handles.vmin,'String', num2str(vmin))
3359    set(handles.vmax,'String', num2str(vmax))
3360end   
3361if ~(isnan(umin)||isnan(umax)||isnan(vmin)||isnan(vmax))
3362    list_pair=get(handles.list_pair_civ1,'String');%get the menu of image pairs
3363    index=get(handles.list_pair_civ1,'Value');
3364    displ_num=get(handles.list_pair_civ1,'UserData');
3365    time=get(handles.ImaDoc,'UserData'); %get the set of times
3366    pxcm_xy=get(handles.SearchRange,'UserData');
3367    pxcmx=pxcm_xy(1);
3368    pxcmy=pxcm_xy(2);
3369    mode_list=get(handles.CivMode,'String');
3370    mode_value=get(handles.CivMode,'Value');
3371    mode=mode_list{mode_value};
3372    if isequal (mode, 'series(Di)' )
3373        ref_i=str2double(get(handles.ref_i,'String'));
3374        num1=ref_i-floor(index/2);%  first image numbers
3375        num2=ref_i+ceil(index/2);
3376        num_a=1;
3377        num_b=1;
3378    elseif isequal (mode, 'series(Dj)')
3379        num1=1;
3380        num2=1;
3381        ref_j=str2double(get(handles.ref_j,'String'));
3382        num_a=ref_j-floor(index/2);%  first image numbers
3383        num_b=ref_j+ceil(index/2);
3384    elseif isequal(mode,'pair j1-j2') %case of bursts (png_old or png_2D)
3385        ref_i=str2double(get(handles.ref_i,'String'));
3386        num1=ref_i;
3387        num2=ref_i;
3388        num_a=displ_num(1,index);
3389        num_b=displ_num(2,index);
3390    end
3391    dt=time(num2,num_b)-time(num1,num_a);
3392    ibx=str2double(get(handles.ibx,'String'));
3393    iby=str2double(get(handles.iby,'String'));
3394    umin=dt*pxcmx*umin;
3395    umax=dt*pxcmx*umax;
3396    vmin=dt*pxcmy*vmin;
3397    vmax=dt*pxcmy*vmax;
3398    shiftx=round((umin+umax)/2);
3399    shifty=round((vmin+vmax)/2);
3400    isx=(umax+2-shiftx)*2+ibx;
3401    isx=2*ceil(isx/2)+1;
3402    isy=(vmax+2-shifty)*2+iby;
3403    isy=2*ceil(isy/2)+1;
3404    set(handles.shiftx,'String',num2str(shiftx));
3405    set(handles.shifty,'String',num2str(shifty));
3406    set(handles.isx,'String',num2str(isx));
3407    set(handles.isy,'String',num2str(isy));
3408end
3409
3410%------------------------------------------------------------------------
3411% --- Executes on carriage return on the subdir civ1 edit window
3412function subdir_civ1_Callback(hObject, eventdata, handles)
3413%------------------------------------------------------------------------
3414subdir=get(handles.subdir_civ1,'String');
3415set(handles.subdir_civ2,'String',subdir);% set civ2 directory the same as civ1 by default
3416menu_str=get(handles.list_subdir_civ1,'String');% read the list of subdirectories for update
3417ichoice=find(strcmp(subdir,menu_str),1);
3418if isempty(ichoice)
3419    ilist=numel(menu_str); %select 'new...' in the menu
3420else
3421    ilist=ichoice;
3422end
3423set(handles.list_subdir_civ1,'Value',ilist)% select the selected subdir in the menu
3424if get(handles.CIV1,'Value')==0
3425    find_netcpair_civ1(hObject, eventdata, handles); %update the list of available pairs from netcdf files in the new directory
3426end
3427
3428%------------------------------------------------------------------------
3429% --- Executes on carriage return on the subdir civ1 edit window
3430function subdir_civ2_Callback(hObject, eventdata, handles)
3431%------------------------------------------------------------------------
3432subdir=get(handles.subdir_civ1,'String');
3433menu_str=get(handles.list_subdir_civ2,'String');% read the list of subdirectories for update
3434ichoice=find(strcmp(subdir,menu_str),1);
3435if isempty(ichoice)
3436    ilist=numel(menu_str); %select 'new...' in the menu
3437else
3438    ilist=ichoice;
3439end
3440set(handles.list_subdir_civ2,'Value',ilist)% select the selected subdir in the menu
3441%update the list of available pairs from netcdf files in the new directory
3442if ~get(handles.CIV2,'Value') && ~get(handles.CIV1,'Value') && ~get(handles.FIX1,'Value') && ~get(handles.PATCH1,'Value')
3443    find_netcpair_civ2(hObject, eventdata, handles);
3444end
3445
3446% %------------------------------------------------------------------------
3447% % --- Executes on button press in check_Mask: select box for mask option
3448% function check_Mask_Callback(hObject, eventdata, handles)
3449% %------------------------------------------------------------------------
3450% maskval=get(handles.check_Mask,'Value');
3451% if isequal(maskval,0)
3452%     set(handles.txt_MaskName,'Visible','off')
3453% %     set(handles.txt_MaskName,'String','')
3454% else
3455%     mask_displ='no mask'; %default
3456%     filebase=get(handles.RootName,'String');
3457%     [ nbslice_mask, flag_mask]=get_mask(filebase,handles);
3458%     if isequal(flag_mask,1)
3459%         mask_displ=[num2str(nbslice_mask) 'mask'];
3460%     elseif get(handles.compare,'Value')>1 & ~isequal(mask_displ,'no mask')% look for the second mask series
3461%         common_path=fileparts(filebase);
3462%         filebase_a=fullfile(common_path,get(handles.RootName_1,'String'));
3463%         [nbslice_a, flag_mask_a]=get_mask(filebase_a,handles);
3464%         if isequal(flag_mask_a,0) || ~isequal(nbslice_a,nbslice_mask)
3465%             mask_displ='no mask';
3466%         end
3467%     end
3468%     if isequal(mask_displ,'no mask')
3469%         [FileName, PathName, filterindex] = uigetfile( ...
3470%             {'*.png', ' (*.png)';
3471%             '*.png',  '.png files '; ...
3472%             '*.*', 'All Files (*.*)'}, ...
3473%             'Pick a mask file *.png',filebase);
3474%         mask_displ=fullfile(PathName,FileName);
3475%         if exist(mask_displ,'file')
3476%             set(handles.txt_MaskName,'Visible','on')
3477%             set(handles.txt_MaskName,'String',mask_displ)
3478% %             mask_displ='no mask';
3479%         end
3480%     end
3481%     if isequal(mask_displ,'no mask')
3482%         set(handles.check_Mask,'Value',0)
3483%         set(handles.get_mask_fix1,'Value',0)
3484%         set(handles.check_Mask,'Value',0)
3485%         set(handles.get_mask_fix2,'Value',0)
3486%     else
3487%         set(handles.get_mask_fix1,'Value',1)
3488%         set(handles.get_mask_fix2,'Value',1)
3489%     end
3490%     set(handles.txt_MaskName,'String',mask_displ)
3491%     set(handles.mask_fix1,'String',mask_displ)
3492%     set(handles.txt_Mask,'String',mask_displ)
3493%     set(handles.mask_fix2,'String',mask_displ)
3494% end
3495% set(handles.check_Mask,'Value',maskval)%update the civ2 mask with the same option as civ1
3496
3497%------------------------------------------------------------------------
3498% --- Executes on button press in get_mask_fix1.
3499function get_mask_fix1_Callback(hObject, eventdata, handles)
3500%------------------------------------------------------------------------
3501maskval=get(handles.get_mask_fix1,'Value');
3502if isequal(maskval,0)
3503    set(handles.mask_fix1,'String','')
3504else
3505    mask_displ='no mask'; %default
3506    filebase=get(handles.RootName,'String');
3507    [nbslice, flag_mask]=get_mask(filebase,handles);
3508    if isequal(flag_mask,1)
3509        mask_displ=[num2str(nbslice) 'mask'];
3510    elseif get(handles.compare,'Value')>1 & ~isequal(mask_displ,'no mask')% look for the second mask series
3511        filebase_a=get(handles.RootName_1,'String');
3512        [nbslice_a, flag_mask_a]=get_mask(filebase_a,handles);
3513        if isequal(flag_mask_a,0) || ~isequal(nbslice_a,nbslice)
3514            mask_displ='no mask';
3515        end
3516    end
3517    if isequal(mask_displ,'no mask')
3518        [FileName, PathName, filterindex] = uigetfile( ...
3519            {'*.png', ' (*.png)';
3520            '*.png',  '.png files '; ...
3521            '*.*', 'All Files (*.*)'}, ...
3522            'Pick a mask file *.png',filebase);
3523        mask_displ=fullfile(PathName,FileName);
3524        if ~exist(mask_displ,'file')
3525            mask_displ='no mask';
3526        end
3527    end
3528    if isequal(mask_displ,'no mask')
3529        set(handles.get_mask_fix1,'Value',0)
3530        set(handles.check_Mask,'Value',0)
3531        set(handles.get_mask_fix2,'Value',0)
3532    else
3533        %set(handles.check_Mask,'Value',1)
3534        set(handles.get_mask_fix2,'Value',1)
3535    end
3536    set(handles.mask_fix1,'String',mask_displ)
3537    set(handles.txt_Mask,'String',mask_displ)
3538    set(handles.mask_fix2,'String',mask_displ)
3539end
3540
3541%------------------------------------------------------------------------
3542% --- Executes on button press in check_Mask: select box for mask option
3543function get_mask_civ2_Callback(hObject, eventdata, handles)
3544%------------------------------------------------------------------------
3545maskval=get(handles.check_Mask,'Value');
3546if isequal(maskval,0)
3547    set(handles.txt_Mask,'String','')
3548else
3549    mask_displ='no mask'; %default
3550    filebase=get(handles.RootName,'String');
3551    [nbslice, flag_mask]=get_mask(filebase,handles);
3552    if isequal(flag_mask,1)
3553        mask_displ=[num2str(nbslice) 'mask'];
3554    elseif get(handles.compare,'Value')>1 & ~isequal(mask_displ,'no mask')% look for the second mask series
3555        filebase_a=get(handles.RootName_1,'String');
3556        [nbslice_a, flag_mask_a]=get_mask(filebase_a,handles);
3557        if isequal(flag_mask_a,0) || ~isequal(nbslice_a,nbslice)
3558            mask_displ='no mask';
3559        end
3560    end
3561    if isequal(mask_displ,'no mask')
3562        [FileName, PathName, filterindex] = uigetfile( ...
3563            {'*.png', ' (*.png)';
3564            '*.png',  '.png files '; ...
3565            '*.*', 'All Files (*.*)'}, ...
3566            'Pick a mask file *.png',filebase);
3567        mask_displ=fullfile(PathName,FileName);
3568        if ~exist(mask_displ,'file')
3569            mask_displ='no mask';
3570        end
3571    end
3572    if isequal(mask_displ,'no mask')
3573        set(handles.check_Mask,'Value',0)
3574        set(handles.get_mask_fix2,'Value',0)
3575    else
3576        set(handles.get_mask_fix2,'Value',1)
3577    end
3578    set(handles.txt_Mask,'String',mask_displ)
3579    set(handles.mask_fix2,'String',mask_displ)
3580end
3581
3582%------------------------------------------------------------------------
3583% --- Executes on button press in get_mask_fix2.
3584function get_mask_fix2_Callback(hObject, eventdata, handles)
3585%------------------------------------------------------------------------
3586maskval=get(handles.get_mask_fix2,'Value');
3587if isequal(maskval,0)
3588    set(handles.mask_fix2,'String','')
3589else
3590    mask_displ='no mask'; %default
3591    filebase=get(handles.RootName,'String');
3592    [nbslice, flag_mask]=get_mask(filebase,handles);
3593    if isequal(flag_mask,1)
3594        mask_displ=[num2str(nbslice) 'mask'];
3595    elseif get(handles.compare,'Value')>1 & ~isequal(mask_displ,'no mask')% look for the second mask series
3596        filebase_a=get(handles.RootName_1,'String');
3597        [nbslice_a, flag_mask_a]=get_mask(filebase_a,handles);
3598        if isequal(flag_mask_a,0) || ~isequal(nbslice_a,nbslice)
3599            mask_displ='no mask';
3600        end
3601    end
3602    if isequal(mask_displ,'no mask')
3603        [FileName, PathName, filterindex] = uigetfile( ...
3604            {'*.png', ' (*.png)';
3605            '*.png',  '.png files '; ...
3606            '*.*', 'All Files (*.*)'}, ...
3607            'Pick a mask file *.png',filebase);
3608        mask_displ=fullfile(PathName,FileName);
3609        if ~exist(mask_displ,'file')
3610            mask_displ='no mask';
3611        end
3612    end
3613    if isequal(mask_displ,'no mask')
3614        set(handles.get_mask_fix2,'Value',0)
3615    end
3616    set(handles.mask_fix2,'String',mask_displ)
3617end
3618
3619%------------------------------------------------------------------------
3620% --- function called to look for mask files
3621function [nbslice, flag_mask]=get_mask(filebase,handles)
3622%------------------------------------------------------------------------
3623%detect mask files, images with appropriate file base
3624%[filebase '_' xx 'mask'], xx=nbslice
3625%flag_mask=1 indicates detection
3626
3627flag_mask=0;%default
3628nbslice=1;
3629
3630% subdir=get(handles.subdir_civ1,'String');
3631[Path,Name]=fileparts(filebase);
3632if ~isdir(Path)
3633    msgbox_uvmat('ERROR','no path for input files')
3634    return
3635end
3636% currentdir=pwd;
3637% cd(Path);%move in the dir of the root name filebase
3638maskfiles=dir(fullfile(Path,[Name '_*mask_*.png']));%look for mask files
3639% cd(currentdir);%come back to the current working directory
3640if ~isempty(maskfiles)
3641    %     msgbox_uvmat('ERROR','no mask available, to create it use Tools/Make mask in the upper menu bar of uvmat')
3642    % else
3643    flag_mask=1;
3644    maskname=maskfiles(1).name;% take the first mask file in the list
3645    [Path2,Name,ext]=fileparts(maskname);
3646    Namedouble=double(Name);
3647    val=(48>Namedouble)|(Namedouble>57);% select the non-numerical characters
3648    ind_mask=findstr('mask',Name);
3649    i=ind_mask-1;
3650    while val(i)==0 && i>0
3651        i=i-1;
3652    end
3653    nbslice=str2double(Name(i+1:ind_mask-1));
3654    if ~isnan(nbslice) && Name(i)=='_'
3655        flag_mask=1;
3656    else
3657        msgbox_uvmat('ERROR',['bad mask file ' Name ext ' found in ' Path2])
3658        return
3659        nbslice=1;
3660    end
3661end
3662
3663%------------------------------------------------------------------------
3664% --- function called to look for grid files
3665function [nbslice, flag_mask]=get_grid(filebase,handles)
3666%------------------------------------------------------------------------
3667flag_mask=0;%default
3668nbslice=1;
3669[Path,Name]=fileparts(filebase);
3670currentdir=pwd;
3671cd(Path);%move in the dir of the root name filebase
3672maskfiles=dir([Name '_*grid_*.grid']);%look for mask files
3673cd(currentdir);%come back to the current working directory
3674if ~isempty(maskfiles)
3675    flag_mask=1;
3676    maskname=maskfiles(1).name;% take the first mask file in the list
3677    [Path2,Name,ext]=fileparts(maskname);
3678    Namedouble=double(Name);
3679    val=(48>Namedouble)|(Namedouble>57);% select the non-numerical characters
3680    ind_mask=findstr('grid',Name);
3681    i=ind_mask-1;
3682    while val(i)==0 && i>0
3683        i=i-1;
3684    end
3685    nbslice=str2double(Name(i+1:ind_mask-1));
3686    if ~isnan(nbslice) && Name(i)=='_'
3687        flag_mask=1;
3688    else
3689        msgbox_uvmat('ERROR',['bad grid file ' Name ext ' found in ' Path2])
3690        return
3691        nbslice=1;
3692    end
3693end
3694
3695%------------------------------------------------------------------------
3696% --- transform numbers to letters
3697function str=num2stra(num,nom_type)
3698%------------------------------------------------------------------------
3699if isempty(nom_type)
3700    str='';
3701elseif strcmp(nom_type(end),'a')
3702    str=char(96+num);
3703elseif strcmp(nom_type(end),'A')
3704    str=char(96+num);
3705elseif isempty(nom_type(2:end))%a single index
3706    str='';
3707else
3708    str=num2str(num);
3709end
3710
3711%------------------------------------------------------------------------
3712% --- Executes on button press in list_subdir_civ1.
3713function list_subdir_civ1_Callback(hObject, eventdata, handles)
3714%------------------------------------------------------------------------
3715list_subdir_civ1=get(handles.list_subdir_civ1,'String');
3716val=get(handles.list_subdir_civ1,'Value');
3717subdir=list_subdir_civ1{val};
3718if strcmp(subdir,'new...')
3719    subdir='CIV'; %default subdirectory
3720end
3721set(handles.subdir_civ1,'String',subdir);
3722find_netcpair_civ1(hObject, eventdata, handles)
3723% end
3724
3725%------------------------------------------------------------------------
3726% --- Executes on button press in list_subdir_civ2.
3727function list_subdir_civ2_Callback(hObject, eventdata, handles)
3728%------------------------------------------------------------------------
3729list_subdir_civ2=get(handles.list_subdir_civ2,'String');
3730val=get(handles.list_subdir_civ2,'Value');
3731subdir=list_subdir_civ2{val};
3732if strcmp(subdir,'new...')
3733    subdir='CIV'; %default subdirectory
3734end
3735set(handles.subdir_civ2,'String',subdir);
3736%     set(handles.list_subdir_civ2,'Value',1);
3737
3738
3739%------------------------------------------------------------------------
3740% --- Executes on button press in check_Grid.
3741function check_Grid_Callback(hObject, eventdata, handles)
3742%------------------------------------------------------------------------
3743value=get(hObject,'Value');
3744hparent=get(hObject,'parent');
3745hchildren=get(hparent,'children');
3746handle_txtbox=findobj(hchildren,'tag','txt_GridName');
3747handle_dx=findobj(hchildren,'tag','num_Dx');
3748handle_dy=findobj(hchildren,'tag','num_Dy');
3749testgrid=0;
3750filegrid='';
3751if value
3752    filebase=get(handles.RootName,'String');
3753    [nbslice, flag_grid]=get_grid(filebase,handles);% look for a grid with appropriate name
3754    if isequal(flag_grid,1)
3755        filegrid=[num2str(nbslice) 'grid'];
3756        testgrid=1;
3757    else % browse for a grid
3758        filegrid=get(hObject,'UserData');%look for previous grid name stored as UserData
3759        if exist(filegrid,'file')
3760            filebase=filegrid;
3761        end
3762        [FileName, PathName, filterindex] = uigetfile( ...
3763            {'*.grid', ' (*.grid)';
3764            '*.grid',  '.grid files '; ...
3765            '*.*', 'All Files (*.*)'}, ...
3766            'Pick a file',filebase);
3767        filegrid=fullfile(PathName,FileName);
3768        set(hObject,'UserData',filegrid);%store for future use
3769        if ~(isempty(FileName)||isempty(PathName)||isequal(FileName,0)||~exist(filegrid,'file'))
3770            testgrid=1;
3771        end
3772    end
3773end
3774if testgrid
3775    set(handle_dx,'Visible','off');
3776    set(handle_dy,'Visible','off');
3777    set(handle_txtbox,'Visible','on')
3778    set(handle_txtbox,'String',filegrid)
3779else
3780    set(hObject,'Value',0);
3781    set(handle_dx,'Visible','on');
3782    set(handle_dy,'Visible','on');
3783    set(handle_txtbox,'Visible','off')
3784end
3785
3786%% if hObject is on the civ1 frame, duplicate action for civ2 frame
3787PanelName=get(hparent,'tag');
3788if strcmp(PanelName,'panel_Civ1')
3789    hchildren=get(handles.panel_Civ2,'children');
3790    handle_checkbox=findobj(hchildren,'tag','check_Grid');
3791    handle_txtbox=findobj(hchildren,'tag','txt_GridName');
3792    handle_dx=findobj(hchildren,'tag','num_Dx');
3793    handle_dy=findobj(hchildren,'tag','num_Dy');
3794    set(handle_checkbox,'UserData',filegrid);%store for future use
3795    if testgrid
3796        set(handle_checkbox,'Value',1);
3797        set(handle_dx,'Visible','off');
3798        set(handle_dy,'Visible','off');
3799        set(handle_txtbox,'Visible','on')
3800        set(handle_txtbox,'String',filegrid)
3801    else
3802        set(handle_checkbox,'Value',0);
3803        set(handles.check_Grid,'Value',0);
3804        set(handle_dx,'Visible','on');
3805        set(handle_dy,'Visible','on');
3806        set(handle_txtbox,'Visible','off')
3807    end
3808end
3809%------------------------------------------------------------------------
3810% --- Executes on button press in check_Mask.
3811function check_Mask_Callback(hObject, eventdata, handles)
3812%------------------------------------------------------------------------
3813value=get(hObject,'Value');
3814testmask=0;
3815if value
3816    filebase=get(handles.RootName,'String');
3817    [nbslice, flag_mask]=get_mask(filebase,handles);% look for a mask with appropriate name
3818    if isequal(flag_mask,1)
3819        filemask=[num2str(nbslice) 'mask'];
3820        testmask=1;
3821    else % browse for a mask
3822        filemask=get(handles.check_Mask,'UserData');%look for previous mask name stored as UserData
3823        if exist(filemask,'file')
3824            filebase=filemask;
3825        end
3826        [FileName, PathName, filterindex] = uigetfile( ...
3827            {'*.png', ' (*.png)';
3828            '*.png',  '.png files '; ...
3829            '*.*', 'All Files (*.*)'}, ...
3830            'Pick a mask file *.png',filebase);
3831        filemask=fullfile(PathName,FileName);
3832        set(handles.check_Mask,'UserData',filemask);%store for future use
3833        if ~(isempty(FileName)||isempty(PathName)||isequal(FileName,0)||~exist(filemask,'file'))
3834            testmask=1;
3835        end
3836    end
3837end
3838if testmask
3839    set(handles.num_Dx,'Visible','off');
3840    set(handles.num_Dy,'Visible','off');
3841    set(handles.num_Dx,'Visible','off');
3842    set(handles.num_Dy,'Visible','off');
3843    set(handles.txt_MaskName,'Visible','on')
3844    set(handles.txt_MaskName,'String',filemask)
3845else
3846    set(handles.check_Mask,'Value',0);
3847    set(handles.check_Grid,'Value',0);
3848    set(handles.num_Dx,'Visible','on');
3849    set(handles.num_Dy,'Visible','on');
3850    set(handles.num_Dx,'Visible','on');
3851    set(handles.num_Dy,'Visible','on');
3852    set(handles.txt_MaskName,'Visible','off')
3853end
3854
3855%------------------------------------------------------------------------
3856% --- Executes on button press in check_Grid.
3857function browse_gridciv2_Callback(hObject, eventdata, handles)
3858%------------------------------------------------------------------------
3859value=get(handles.check_Grid,'Value');
3860if value
3861    filebase=get(handles.RootName,'String');
3862    [nbslice, flag_grid]=get_grid(filebase,handles);
3863    if isequal(flag_grid,1)
3864        mask_displ=[num2str(nbslice) 'grid'];
3865        set(handles.txt_GridName,'String',mask_displ)
3866        set(handles.num_Dx,'Visible','off');
3867        set(handles.num_Dy,'Visible','off');
3868    else
3869        [FileName, PathName, filterindex] = uigetfile( ...
3870            {'*.grid', ' (*.grid)';
3871            '*.grid',  '.grid files '; ...
3872            '*.*', 'All Files (*.*)'}, ...
3873            'Pick a file',filebase);
3874        filegrid=fullfile(PathName,FileName);
3875        if isempty(FileName)||isempty(PathName)||isequal(FileName,0)||~exist(filegrid,'file')
3876            set(handles.check_Grid,'Value',0);
3877            set(handles.txt_GridName,'string','');
3878            set(handles.num_Dx,'Visible','on');
3879            set(handles.num_Dy,'Visible','on');
3880            set(handles.txt_GridName,'string','');
3881        else
3882            set(handles.txt_GridName,'string',filegrid);
3883            set(handles.num_Dx,'Visible','off');
3884            set(handles.num_Dy,'Visible','off');
3885            set(handles.txt_GridName,'string',filegrid);
3886        end
3887    end
3888else
3889    set(handles.txt_GridName,'string','');
3890    set(handles.num_Dx,'Visible','on');
3891    set(handles.num_Dy,'Visible','on');
3892    set(handles.txt_GridName,'string','');
3893end
3894
3895% % --- Executes on button press in check_Grid.
3896% function browse_gridciv2_Callback(hObject, eventdata, handles)
3897%
3898% filebase=get(handles.RootName,'String');
3899% [FileName, PathName, filterindex] = uigetfile( ...
3900%        {'*.grid', ' (*.grid)';
3901%         '*.grid',  '.grid files '; ...
3902%         '*.*', 'All Files (*.*)'}, ...
3903%         'Pick a file',filebase);
3904% filegrid=fullfile(PathName,FileName);
3905% set(handles.txt_GridName,'string',filegrid);
3906% set(handles.num_Dx,'String',' ');
3907% set(handles.num_Dy,'String',' ');
3908% % set(handles.grid_patch2,'string',filegrid);
3909
3910% --- Executes on button press in get_gridpatch1.
3911function get_gridpatch1_Callback(hObject, eventdata, handles)
3912% hObject    handle to get_gridpatch1 (see GCBO)
3913% eventdata  reserved - to be defined in a future version of MATLAB
3914% handles    structure with handles and user data (see GUIDATA)
3915
3916filebase=get(handles.RootName,'String');
3917[FileName, PathName, filterindex] = uigetfile( ...
3918    {'*.grid', ' (*.grid)';
3919    '*.grid',  '.grid files '; ...
3920    '*.*', 'All Files (*.*)'}, ...
3921    'Pick a file',filebase);
3922filegrid=fullfile(PathName,FileName);
3923set(handles.grid_patch1,'string',filegrid);
3924% set(handles.grid_patch2,'string',filegrid
3925
3926%------------------------------------------------------------------------
3927% --- Executes on button press in get_gridpatch2.
3928function get_gridpatch2_Callback(hObject, eventdata, handles)
3929%------------------------------------------------------------------------
3930
3931%------------------------------------------------------------------------
3932function enable_civ1(handles,state)
3933%------------------------------------------------------------------------
3934if state
3935    RootName=get(handles.RootName,'String');
3936    if isempty(RootName)
3937         msgbox_uvmat('ERROR','No input file')
3938        return
3939    end
3940    set(handles.panel_Civ1,'Visible','on')   
3941    set(handles.panel_PairIndices,'Visible','on')
3942%     set(handles.frame_civ1,'BackgroundColor',[1 1 0])
3943%     set(handles.frame_para_civ1,'BackgroundColor',[1 1 0])
3944%     set(handles.frame_grid_civ1,'BackgroundColor',[1 1 0])
3945else
3946    set(handles.panel_Civ1,'Visible','off') 
3947%     set(handles.frame_civ1,'BackgroundColor',[0.831 0.816 0.784])
3948%     set(handles.frame_para_civ1,'BackgroundColor',[0.831 0.816 0.784])
3949%     set(handles.frame_grid_civ1,'BackgroundColor',[0.831 0.816 0.784])
3950end
3951return
3952set(handles.ibx,'Visible',state)
3953set(handles.iby,'Visible',state)
3954set(handles.isx,'Visible',state)
3955set(handles.isy,'Visible',state)
3956set(handles.shiftx,'Visible',state)
3957set(handles.shifty,'Visible',state)
3958set(handles.rho,'Visible',state)
3959set(handles.num_Dx,'Visible',state)
3960set(handles.num_Dy,'Visible',state)
3961set(handles.SearchRange,'Visible',state)
3962set(handles.u_title,'Visible',state)
3963set(handles.v_title,'Visible',state)
3964set(handles.min_title,'Visible',state)
3965set(handles.max_title,'Visible',state)
3966set(handles.umin,'Visible',state)
3967set(handles.umax,'Visible',state)
3968set(handles.vmin,'Visible',state)
3969set(handles.vmax,'Visible',state)
3970set(handles.txt_GridName,'Visible',state)
3971set(handles.txt_MaskName,'Visible',state)
3972set(handles.check_Grid,'Visible',state)
3973set(handles.check_Mask,'Visible',state)
3974set(handles.parameters,'Visible',state)
3975set(handles.grid,'Visible',state)
3976set(handles.num_Dx,'Visible',state)
3977set(handles.num_Dy,'Visible',state)
3978set(handles.check_Threshold,'Visible',state)
3979if isequal(state,'off')
3980    set(handles.MinIma,'Visible','off')
3981    set(handles.MaxIma,'Visible','off')
3982    set(handles.check_Threshold,'Value',0)
3983end
3984set(handles.dx_civ1_title,'Visible',state)
3985set(handles.dy_civ1_title,'Visible',state)
3986set(handles.ImaThreshold_title,'Visible',state)
3987set(handles.ib_title,'Visible',state)
3988set(handles.is_title,'Visible',state)
3989set(handles.shift_title,'Visible',state)
3990set(handles.rho_title,'Visible',state)
3991set(handles.TestCiv1,'Visible',state)
3992%set(handles.CivMode,'Visible',state)
3993
3994%------------------------------------------------------------------------
3995function enable_fix1(handles,state)
3996%------------------------------------------------------------------------
3997
3998if isequal(state,0)
3999    state='off';
4000end
4001if isequal(state,1)
4002    state='on';
4003    RootName=get(handles.RootName,'String');
4004    if isempty(RootName)
4005         msgbox_uvmat('ERROR','No input file')
4006        return
4007    end
4008end
4009if isequal(state,'on')
4010    set(handles.panel_Fix1,'Visible','on')
4011%     set(handles.frame_fix1,'BackgroundColor',[1 1 0])
4012else
4013    set(handles.panel_Fix1,'Visible','off')
4014    %set(handles.frame_fix1,'BackgroundColor',[0.7 0.7 0.7])
4015end
4016% set(handles.REMOVE,'Visible',state)
4017set(handles.vec_Fmin2,'Visible',state)
4018set(handles.vec_F2,'Visible',state)
4019set(handles.vec_F3,'Visible',state)
4020set(handles.thresh_vecC,'Visible',state)
4021set(handles.thresh_vecC_title,'Visible',state)
4022set(handles.thresh_vel,'Visible',state)
4023set(handles.thresh_vel_text,'Visible',state)
4024set(handles.mask_fix1,'Visible',state)
4025set(handles.get_mask_fix1,'Visible',state)
4026set(handles.get_ref_fix1,'Visible',state)
4027set(handles.ref_fix1,'Visible',state)
4028set(handles.inf_sup1,'Visible',state)
4029set(handles.field_ref1,'Visible',state)
4030
4031%------------------------------------------------------------------------
4032function enable_patch1(handles,state)
4033%------------------------------------------------------------------------
4034if state
4035    RootName=get(handles.RootName,'String');
4036    if isempty(RootName)
4037        msgbox_uvmat('ERROR','No input file')
4038        return
4039    end
4040    set(handles.panel_Patch1,'Visible','on')
4041else
4042    set(handles.panel_Patch1,'Visible','off')
4043end
4044return
4045set(handles.frame_patch1,'BackgroundColor',[1 1 0])
4046set(handles.rho_patch1,'Visible','on')
4047set(handles.rho_text1,'Visible','on')
4048if get(handles.CivMode,'Value')==2
4049    set(handles.thresh_patch1,'Visible','on')
4050    set(handles.thresh_text1,'Visible','on')
4051end
4052set(handles.subdomain_patch1,'Visible','on')
4053set(handles.subdomain_text1,'Visible','on')
4054set(handles.nx_patch1,'Visible','on')
4055set(handles.num_Ny,'Visible','on')
4056set(handles.nx_patch1_title,'Visible','on')
4057set(handles.ny_patch1_title,'Visible','on')
4058% if ~isempty(patch_newBin)
4059set(handles.test_interp,'Visible','off');
4060stereo_test=get(handles.compare,'Value');
4061if stereo_test==3
4062    set(handles.test_stereo1,'Visible','on')
4063end
4064% end
4065%set(handles.get_gridpatch1,'Visible','on')
4066%set(handles.grid_patch1,'string','none');
4067%set(handles.grid_patch1,'Visible','on')
4068
4069% %------------------------------------------------------------------------
4070% function desable_patch1(handles)
4071% %------------------------------------------------------------------------
4072% return
4073% set(handles.frame_patch1,'BackgroundColor',[0.831 0.816 0.784])
4074% set(handles.rho_patch1,'Visible','off')
4075% set(handles.rho_text1,'Visible','off')
4076% set(handles.thresh_patch1,'Visible','off')
4077% set(handles.thresh_text1,'Visible','off')
4078% set(handles.subdomain_patch1,'Visible','off')
4079% set(handles.subdomain_text1,'Visible','off')
4080% set(handles.nx_patch1,'Visible','off')
4081% set(handles.num_Ny,'Visible','off')
4082% set(handles.nx_patch1_title,'Visible','off')
4083% set(handles.ny_patch1_title,'Visible','off')
4084% set(handles.test_stereo1,'Visible','off')
4085% %set(handles.test_interp,'Visible','off')
4086% %set(handles.get_gridpatch1,'Visible','off')
4087% %set(handles.grid_patch1,'Visible','off')
4088
4089%------------------------------------------------------------------------
4090function enable_civ2(handles,state)
4091%------------------------------------------------------------------------
4092if state
4093    RootName=get(handles.RootName,'String');
4094    if isempty(RootName)
4095         msgbox_uvmat('ERROR','No input file')
4096        return
4097    end
4098    set(handles.panel_Civ2,'Visible','on')
4099else
4100    set(handles.panel_Civ2,'Visible','off')
4101end
4102return
4103
4104set(handles.ibx_civ2,'Visible',state)
4105set(handles.iby_civ2,'Visible',state)
4106set(handles.decimal,'Visible',state)
4107set(handles.deformation,'Visible',state)
4108set(handles.rho_civ2,'Visible',state)
4109set(handles.num_Dx,'Visible',state)
4110set(handles.num_Dy,'Visible',state)
4111set(handles.check_Grid,'Visible',state)
4112set(handles.check_Mask,'Visible',state)
4113set(handles.parameters,'Visible',state)
4114set(handles.grid,'Visible',state)
4115set(handles.parameters_text,'Visible',state)
4116set(handles.grid_text,'Visible',state)
4117set(handles.txt_GridName,'Visible',state)
4118set(handles.txt_Mask,'Visible',state)
4119set(handles.dx_civ2_title,'Visible',state)
4120set(handles.dy_civ2_title,'Visible',state)
4121set(handles.ibx_civ2_text,'Visible',state)
4122set(handles.rho_civ2_title,'Visible',state)
4123set(handles.ImaThreshold2,'Visible',state)
4124set(handles.ImaThreshold_title2,'Visible',state)
4125if isequal(state,'off')
4126    set(handles.MinIma2,'Visible','off')
4127    set(handles.MaxIma2,'Visible','off')
4128    set(handles.ImaThreshold2,'Value',0)
4129    if isequal(get(handles.FIX2,'Value'),0) & isequal(get(handles.PATCH2,'Value'),0)
4130        set(handles.list_pair_civ2,'Visible','off')
4131        set(handles.subdir_civ2,'Visible','off')
4132        set(handles.subdir_civ2_text,'Visible','off')
4133        set(handles.dt_unit_civ2,'Visible','off')
4134        %set(handles.ref_i_civ2,'Visible','off')
4135        set(handles.i_ref_civ2_title,'Visible','off')
4136        set(handles.j_ref_civ2_title,'Visible','off')
4137        set(handles.ref_j_civ2,'Visible','off')
4138    end
4139else
4140    set(handles.list_pair_civ2,'Visible','on')
4141    set(handles.subdir_civ2,'Visible','on')
4142    set(handles.subdir_civ2_text,'Visible','on')
4143    set(handles.dt_unit_civ2,'Visible','on')
4144  %  set(handles.ref_i_civ2,'Visible','on')
4145    set(handles.i_ref_civ2_title,'Visible','on')
4146    set(handles.j_ref_civ2_title,'Visible','on')
4147    set(handles.ref_j_civ2,'Visible','on')
4148end
4149set(handles.rho_civ2_title,'Visible',state)
4150
4151%------------------------------------------------------------------------
4152function enable_fix2(handles,state)
4153%------------------------------------------------------------------------
4154% if isequal(state,'on')
4155%     set(handles.panel_Fix2,'Visible','on') 
4156%     
4157% %     set(handles.frame_civ2,'BackgroundColor',[1 1 0])
4158% %     set(handles.frame_para_civ2,'BackgroundColor',[1 1 0])
4159% %     set(handles.frame_grid_civ2,'BackgroundColor',[1 1 0])
4160% %     set(handles.frame_subdirciv2,'BackgroundColor',[1 1 0])
4161% else
4162if state
4163    RootName=get(handles.RootName,'String');
4164    if isempty(RootName)
4165         msgbox_uvmat('ERROR','No input file')
4166        return
4167    end
4168    set(handles.panel_Fix2,'Visible','on')
4169else
4170    set(handles.panel_Fix2,'Visible','off')
4171end
4172return
4173set(handles.frame_fix2,'BackgroundColor',[1 1 0])
4174set(handles.REMOVE2,'Visible','on')
4175set(handles.vec_Fmin2_2,'Visible','on')
4176set(handles.vec_F4,'Visible','on')
4177set(handles.vec_F3_2,'Visible','on')
4178set(handles.thresh_vec2C,'Visible','on')
4179set(handles.thresh_vec2C_text,'Visible','on')
4180set(handles.thresh_vel2,'Visible','on')
4181set(handles.thresh_vel2_text,'Visible','on')
4182set(handles.mask_fix2,'Visible','on')
4183set(handles.get_mask_fix2,'Visible','on')
4184set(handles.list_pair_civ2,'Visible','on')
4185set(handles.subdir_civ2,'Visible','on')
4186set(handles.subdir_civ2_text,'Visible','on')
4187set(handles.get_ref_fix2,'Visible','on')
4188set(handles.ref_fix2,'Visible','on')
4189set(handles.inf_sup2,'Visible','on')
4190set(handles.field_ref2,'Visible','on')
4191
4192% %------------------------------------------------------------------------
4193% function desable_fix2(handles)
4194% %------------------------------------------------------------------------
4195% set(handles.frame_fix2,'BackgroundColor',[0.831 0.816 0.784])
4196% set(handles.REMOVE2,'Visible','off')
4197% set(handles.vec_Fmin2_2,'Visible','off')
4198% set(handles.vec_F4,'Visible','off')
4199% set(handles.vec_F3_2,'Visible','off')
4200% set(handles.thresh_vec2C,'Visible','off')
4201% set(handles.thresh_vec2C_text,'Visible','off')
4202% set(handles.thresh_vel2,'Visible','off')
4203% set(handles.thresh_vel2_text,'Visible','off')
4204% set(handles.mask_fix2,'Visible','off')
4205% set(handles.get_mask_fix2,'Visible','off')
4206% set(handles.get_ref_fix2,'Visible','off')
4207% set(handles.ref_fix2,'Visible','off')
4208% set(handles.inf_sup2,'Visible','off')
4209% set(handles.field_ref2,'Visible','off')
4210% if isequal(get(handles.CIV2,'Value'),0) & isequal(get(handles.PATCH2,'Value'),0)
4211%     set(handles.list_pair_civ2,'Visible','off')
4212%     set(handles.subdir_civ2,'Visible','off')
4213%     set(handles.subdir_civ2_text,'Visible','off')
4214% end
4215
4216%------------------------------------------------------------------------
4217function enable_patch2(handles,state)
4218%------------------------------------------------------------------------
4219if state
4220RootName=get(handles.RootName,'String');
4221    if isempty(RootName)
4222         msgbox_uvmat('ERROR','No input file')
4223        return
4224    end
4225    set(handles.panel_Patch2,'Visible','on')
4226else
4227set(handles.panel_Patch2,'Visible','off')
4228end
4229% set(handles.frame_patch2,'BackgroundColor',[1 1 0])
4230% set(handles.num_SmoothParam,'Visible','on')
4231% set(handles.num_SmoothingParam,'Visible','on')
4232% set(handles.num_MaxDiff,'Visible','on')
4233% set(handles.thresh_text2,'Visible','on')
4234% set(handles.num_SubdomainSize,'Visible','on')
4235% set(handles.subdomain_text2,'Visible','on')
4236% set(handles.num_Nx,'Visible','on')
4237% set(handles.num_Ny,'Visible','on')
4238% set(handles.nx_patch2_title,'Visible','on')
4239% set(handles.ny_patch2_title,'Visible','on')
4240% % set(handles.get_gridpatch2,'Visible','on')
4241% % set(handles.grid_patch2,'Visible','on')
4242% set(handles.list_pair_civ2,'Visible','on')
4243% set(handles.subdir_civ2,'Visible','on')
4244% set(handles.subdir_civ2_text,'Visible','on')
4245% stereo_test=get(handles.compare,'Value');
4246% if stereo_test==3
4247%     set(handles.check_Stereo,'Visible','on')
4248% end
4249
4250% %------------------------------------------------------------------------
4251% function desable_patch2(handles)
4252% %------------------------------------------------------------------------
4253% %set(handles.panel_Patch2,'Visible','off')
4254% return
4255% set(handles.frame_patch2,'BackgroundColor',[0.831 0.816 0.784])
4256% set(handles.num_SmoothParam,'Visible','off')
4257% set(handles.num_SmoothingParam,'Visible','off')
4258% set(handles.num_MaxDiff,'Visible','off')
4259% set(handles.thresh_text2,'Visible','off')
4260% set(handles.num_SubdomainSize,'Visible','off')
4261% set(handles.subdomain_text2,'Visible','off')
4262% set(handles.num_Nx,'Visible','off')
4263% set(handles.num_Ny,'Visible','off')
4264% set(handles.nx_patch2_title,'Visible','off')
4265% set(handles.ny_patch2_title,'Visible','off')
4266% % set(handles.get_gridpatch2,'Visible','off')
4267% % set(handles.grid_patch2,'Visible','off')
4268% if isequal(get(handles.CIV2,'Value'),0) & isequal(get(handles.FIX2,'Value'),0)
4269%     set(handles.list_pair_civ2,'Visible','off')
4270%     set(handles.subdir_civ2,'Visible','off')
4271%     set(handles.subdir_civ2_text,'Visible','off')
4272% end
4273% set(handles.check_Stereo,'Visible','off')
4274%------------------------------------------------------------------------
4275function enable_pair1(handles,state)
4276%------------------------------------------------------------------------
4277set(handles.subdir_civ1,'Visible',state)
4278set(handles.list_subdir_civ1,'Visible',state)
4279set(handles.SUBDIR_CIV1_txt,'Visible',state)
4280%set(handles.frame_subdirciv1,'Visible',state)
4281set(handles.list_pair_civ1,'Visible',state)
4282set(handles.PairCiv1_title,'Visible',state)
4283%set(handles.dt_unit,'Visible',state)
4284%set(handles.PAIR_frame,'Visible',state)
4285
4286%------------------------------------------------------------------------
4287% --- Read the parameters for civ1 on the interface
4288function par=read_param_civ1(handles,filecell)
4289%------------------------------------------------------------------------
4290ibx_val=str2double(get(handles.ibx,'String'));
4291par.ibx=num2str(ibx_val);
4292iby_val=str2double(get(handles.iby,'String'));
4293par.iby=num2str(iby_val);
4294isx=get(handles.isx,'String');
4295if isnan(str2double(isx)), isx='41'; set(handles.isx,'String','41'), end; %default
4296if str2double(isx)<ibx_val+8,isx=num2str(ibx_val+8); set(handles.isx,'String',num2str(ibx_val+8)); end
4297isy=get(handles.isy,'String');
4298if isnan(str2double(isy)), isy='41'; set(handles.isy,'String','41'), end;%default
4299if str2double(isy)<iby_val+8,isy=num2str(iby_val+8); set(handles.isy,'String',num2str(iby_val+8)); end
4300par.isx=get(handles.isx,'String');
4301par.isy=get(handles.isy,'String');
4302par.shiftx=get(handles.shiftx,'String');
4303par.shifty=get(handles.shifty,'String');
4304if isnan(str2double(par.isx))
4305    par.isx='41';%default
4306    set(handles.isx,'String','41');
4307end
4308if isnan(str2double(par.isy))
4309    par.isy='41'; %default
4310    set(handles.isy,'String','41');
4311end
4312if isnan(str2double(par.shiftx))
4313    par.shiftx='0';%default
4314    set(handles.shiftx,'String','0');
4315end
4316if isnan(str2double(par.shifty))
4317    par.shifty='0'; %default
4318    set(handles.shifty,'String','0');
4319end
4320par.rho=get(handles.rho,'String');
4321if isequal(get(handles.rho,'Style'),'popupmenu')
4322    index=get(handles.rho,'Value');
4323    par.rho=par.rho{index};
4324end
4325dummy=get(handles.num_Dx,'String');
4326par.dx=dummy{1};
4327dummy=get(handles.num_Dy,'String');
4328par.dy=dummy{1};
4329if isnan(str2double(par.dx))
4330    if isempty(get(handles.txt_GridName,'String'));
4331        par.dx='0'; %just read by civ program, not used
4332    else
4333        par.dx='20';%default
4334        set(handles.num_Dx,'String','20');
4335    end
4336end
4337if isnan(str2double(par.dy))
4338    if isempty(get(handles.txt_GridName,'String'));
4339        par.dy='0';%just read by civ program, not used
4340    else
4341        par.dy='20';%default
4342        set(handles.dy_civ1_title,'String','20');
4343    end
4344end
4345par.pxcmx='1'; %velocities are expressed in pixel dispalcement
4346par.pxcmy='1';
4347% if exist('file_ima','var')
4348A=imread(filecell.ima1.civ1{1,1});%read the first image to get the size
4349sizim=size(A);
4350par.npx=num2str(sizim(2));
4351par.npy=num2str(sizim(1));
4352%TODO : civ should not need npx and npy
4353
4354
4355% end
4356%time=get(handles.RootName,'UserData'); %get the set of times
4357dummy=get(handles.txt_GridName,'String');
4358par.gridname=dummy{1};
4359par.gridflag='y';
4360if strcmp(par.gridname,'')|| isempty(par.gridname)
4361    par.gridname='nogrid';
4362    par.gridflag='n';
4363end
4364
4365%------------------------------------------------------------------------
4366function par=read_param_fix1(handles,filecell)
4367%------------------------------------------------------------------------
4368    par.flagindex1(1)=get(handles.vec_Fmin2, 'Value');
4369    par.flagindex1(2)=get(handles.vec_F3, 'Value');
4370    par.flagindex1(3)=get(handles.vec_F2, 'Value');
4371    par.thresh_vecC1=str2double(get(handles.thresh_vecC,'String'));%threshold on image correlation vec_C
4372    par.thresh_vel1=str2double(get(handles.thresh_vel,'String'));%threshold on velocity modulus
4373    par.test_mask=get(handles.get_mask_fix1,'Value');
4374    par.nbslice_mask=get(handles.mask_fix1,'UserData'); % get the number of slices (= number of masks)
4375    %%%%%%%%%%%%%COMPLETER LE PROGRAMME FIX
4376    %     inf_sup=get(handles.inf_sup1,'Value');80
4377    %     fileref=get(handles.ref_fix1,'String');
4378    %     refpath=get(handles.ref_fix1,'UserData');
4379    %     fileref=fullfile(refpath,fileref);
4380    par.menu=get(handles.field_ref1,'String');
4381    par.index=get(handles.field_ref1,'Value');
4382    if isempty(par.menu)
4383        par.fieldchoice='';
4384    else
4385        par.fieldchoice=menu{index};
4386        msgbox_uvmat('WARNING','reference field is not used presently with batch, use RUN option')
4387    end
4388           if par.test_mask==0
4389                par.maskname='';
4390            else
4391                maskdispl=get(handles.mask_fix1,'String');
4392                nbslice_mask=str2double(maskdispl(1:end-4)); %
4393                num1_mask=mod(num1_civ1(ifile)-1,nbslice_mask)+1;
4394                maskbase=[filecell.filebase '_' maskdispl];
4395                par.maskname=name_generator(maskbase,num1_mask,1,'.png','_i');
4396           end
4397 
4398%------------------------------------------------------------------------
4399function par=read_param_patch1(handles)
4400%------------------------------------------------------------------------
4401
4402par.rho_patch=str2double(get(handles.rho_patch1,'String'));
4403if isnan(par.rho_patch)
4404    par.rho_patch='1000';
4405    set(handles.rho_patch1,'String','1')
4406else
4407    par.rho_patch=num2str(1000*par.rho_patch);
4408end
4409par.nx_patch=get(handles.nx_patch1,'String');
4410par.ny_patch=get(handles.ny_patch1,'String');
4411if isnan(str2double(par.nx_patch))
4412    par.nx_patch='50' ;%default
4413    set(handles.nx_patch1,'String','50');
4414end
4415if isnan(str2double(par.ny_patch))
4416    par.ny_patch='50' ;%default
4417    set(handles.ny_patch1,'String','50');
4418end
4419par.subdomain_patch=get(handles.subdomain_patch1,'String');
4420par.thresh_patch=get(handles.thresh_patch1,'String');
4421
4422           
4423%------------------------------------------------------------------------
4424function par=read_param_civ2(handles,file_ima)
4425%------------------------------------------------------------------------
4426par.ibx=get(handles.ibx_civ2,'String');
4427par.iby=get(handles.iby_civ2,'String');
4428par.rho=get(handles.rho_civ2,'String');
4429par.decimal=int2str(get(handles.decimal,'Value'));
4430par.deformation=int2str(get(handles.deformation,'Value'));
4431par.dx=get(handles.num_Dx,'String');
4432par.dy=get(handles.num_Dy,'String');
4433if isnan(str2double(par.dx))
4434    if isempty(get(handles.txt_GridName,'String'));
4435        par.dx='0'; %just read by civ program, not used
4436    else
4437        par.dx='20';%default
4438        set(handles.num_Dx,'String','20');
4439    end
4440end
4441if isnan(str2double(par.dy))
4442    if isempty(get(handles.txt_GridName,'String'));
4443        par.dy='0';%just read by civ program, not used
4444    else
4445        par.dy='20';%default
4446        set(handles.num_Dy,'String','20');
4447    end
4448end
4449par.pxcmx='1';
4450par.pxcmy='1';
4451A=imread(file_ima);%read the first image to get the size
4452sizim=size(A);
4453par.npx=num2str(sizim(2));
4454par.npy=num2str(sizim(1));
4455%time=get(handles.RootName,'UserData'); %get the set of times
4456par.gridname=get(handles.txt_GridName,'String');
4457par.gridflag='y';
4458if strcmp(par.gridname,'')|| isempty(par.gridname)
4459    par.gridname='nogrid';
4460    par.gridflag='n';
4461end
4462
4463function cmd_CIV1=CIV1_CMD(filename,param)
4464%TODO : include filename in par_civ1
4465%------------------------------------------------------------------------
4466%pixels per cm and matrix of the image times, read from the .civ file by uvmat
4467
4468%changes : filename_cmx -> filename ( no extension )
4469
4470filename=regexprep(filename,'.nc','');
4471
4472if isequal(param.civ1.Dt,'0')
4473    param.civ1.Dt='1' ;%case of 'displacement' mode
4474end
4475param.civ1.filename_ima_a=regexprep(param.civ1.filename_ima_a,'.png','');
4476param.civ1.filename_ima_b=regexprep(param.civ1.filename_ima_b,'.png','');
4477fid=fopen([filename '.civ1.cmx'],'w');
4478fprintf(fid,['##############   CMX file' '\n' ]);
4479fprintf(fid,   ['FirstImage ' regexprep(param.civ1.filename_ima_a,'\\','\\\\') '\n' ]);% for windows compatibility
4480fprintf(fid,   ['LastImage  ' regexprep(param.civ1.filename_ima_b,'\\','\\\\') '\n' ]);% for windows compatibility
4481fprintf(fid,  ['XX' '\n' ]);
4482fprintf(fid,  ['Mask ' param.civ1.maskflag '\n' ]);
4483fprintf(fid,  ['MaskName ' regexprep(param.civ1.maskname,'\\','\\\\') '\n' ]);
4484fprintf(fid,   ['ImageSize ' param.civ1.npx ' ' param.civ1.npy '\n' ]);   %VERIFIER CAS GENERAL ?
4485fprintf(fid,   ['CorrelationBoxesSize ' param.civ1.ibx ' ' param.civ1.iby '\n' ]);
4486fprintf(fid,   ['SearchBoxeSize ' param.civ1.isx ' ' param.civ1.isy '\n' ]);
4487fprintf(fid,   ['RO ' param.civ1.rho '\n' ]);
4488fprintf(fid,   ['GridSpacing ' param.civ1.dx ' ' param.civ1.dy '\n' ]);
4489fprintf(fid,   ['XX 1.0' '\n' ]);
4490fprintf(fid,   ['Dt_TO ' param.civ1.Dt ' ' param.civ1.T0 '\n' ]);
4491fprintf(fid,  ['PixCmXY ' param.civ1.pxcmx ' ' param.civ1.pxcmy '\n' ]);
4492fprintf(fid,  ['XX 1' '\n' ]);
4493fprintf(fid,   ['ShiftXY ' param.civ1.shiftx ' '  param.civ1.shifty '\n' ]);
4494fprintf(fid,  ['Grid ' param.civ1.gridflag '\n' ]);
4495fprintf(fid,   ['GridName ' regexprep(param.civ1.gridname,'\\','\\\\') '\n' ]);
4496fprintf(fid,   ['XX 85' '\n' ]);
4497fprintf(fid,   ['XX 1.0' '\n' ]);
4498fprintf(fid,   ['XX 1.0' '\n' ]);
4499fprintf(fid,   ['Hart 1' '\n' ]);
4500fprintf(fid,  [ 'DecimalShift 0' '\n' ]);
4501fprintf(fid,   ['Deformation 0' '\n' ]);
4502fprintf(fid,  ['CorrelationMin 0' '\n' ]);
4503fprintf(fid,   ['IntensityMin 0' '\n' ]);
4504fprintf(fid,  ['SeuilImage n' '\n' ]);
4505fprintf(fid,   ['SeuilImageValues 0 4096' '\n' ]);
4506fprintf(fid,   ['ImageToUse ' param.civ1.term_a ' ' param.civ1.term_b '\n' ]); % VERIFIER ?
4507fprintf(fid,   ['ImageUsedBefore null null' '\n' ]);
4508fclose(fid);
4509
4510% cmd_CIV1=[sparam.Civ1Bin ' -f ' filename '.cmx >' filename '.log' ]; % redirect standard output to the log file
4511% cmd_CIV1=regexprep(cmd_CIV1,'\\','\\\\');
4512% namelog=regexprep(namelog,'\\','\\\\');
4513if(isunix)
4514    cmd_CIV1=['cp -f ' filename '.civ1.cmx ' filename '.cmx'];
4515    cmd_CIV1=[cmd_CIV1 '\n'...
4516        param.global.Civ1Bin ' -f ' filename '.cmx >' filename '.log' ]; % redirect standard output to the log file, the result file is named [filename '.nc'] by CIVx
4517    cmd_CIV1=[cmd_CIV1 '\n' 'mv ' filename '.log' ' ' filename '.civ1.log' '\n' 'chmod g+w ' filename '.civ1.log' '\n' 'chmod g+w ' filename '.nc'];%rename .log as .civ1.log and set the netcdf result file for group user writting
4518   % cmd_CIV1=[cmd_CIV1 '\n' 'mv ' filename '.cmx' ' ' filename '.civ1.cmx' '\n'];%rename .cmx as .civ1.cmx
4519else %Windows system
4520%                     flname=regexprep(flname,'\\','\\\\');
4521%                     cmd=[cmd 'copy /Y "' flname '.civ1.cmx" "' flname '.cmx"\n'];
4522%     filename=regexprep(filename,'\\','\\\\');
4523    cmd_CIV1=['copy /Y "' filename '.civ1.cmx" "' filename '.cmx"'];% copy the .civ1.cmx parameter file to .cmx
4524    cmd_CIV1=[cmd_CIV1 '\n "' regexprep(param.global.Civ1Bin,'\\','\\\\') '" -f "' filename '.cmx" >"' filename '.log"' ]; % redirect standard output to the log file
4525%     namelog=regexprep(namelog,'\\','\\\\');
4526    cmd_CIV1=[cmd_CIV1 '\n ' 'copy /Y "' filename '.log' '" "' filename '.civ1.log"']; %preserve the log file as .civ1.log
4527
4528    %  cmd_CIV1=[cmd_CIV1 '\n' 'copy /Y "' filename '.cmx' '" "' filename '.civ1.cmx"'];
4529end
4530
4531%------------------------------------------------------------------------
4532% --- CIV1  Unified
4533function xml_civ1_parameters=CIV1_CMD_Unified(filename,namelog,par)
4534%------------------------------------------------------------------------
4535%pixels per cm and matrix of the image times, read from the .civ file by uvmat
4536%global CivBin%name of the executable for civ1 calculation
4537
4538civ1.image1=par.filename_ima_a;
4539civ1.image2=par.filename_ima_b;
4540civ1.imageSize_X=par.npx;
4541civ1.imageSize_Y=par.npy;
4542civ1.outputFileName=[filename '.nc'];
4543civ1.correlationBoxesSize_X=par.ibx;
4544civ1.correlationBoxesSize_Y=par.iby;
4545civ1.searchBoxesSize_X=par.isx;
4546civ1.searchBoxesSize_Y=par.isy;
4547civ1.globalShift_X=par.shiftx;
4548civ1.globalShift_Y=par.shifty;
4549civ1.ro=par.rho;
4550civ1.hart='y';
4551if isequal(par.gridflag,'y')
4552    civ1.grid=par.gridname;
4553else
4554    civ1.grid='n';
4555    civ1.gridSpacing_X=par.dx;
4556    civ1.gridSpacing_Y=par.dy;
4557end
4558if isequal(par.maskflag,'y')
4559    civ1.mask=par.maskname;
4560end
4561civ1.dt=par.Dt;
4562civ1.unit='pixel';
4563civ1.absolut_time_T0=par.T0;
4564civ1.pixcmx=par.pxcmx;
4565civ1.pixcmy=par.pxcmy;
4566civ1.convectFlow='n';
4567
4568xml_civ1_parameters=civ1;
4569
4570%------------------------------------------------------------------------
4571% --- CIV2  Unified
4572function civ2=CIV2_CMD_Unified(filename,namelog,par)
4573%------------------------------------------------------------------------
4574%pixels per cm and matrix of the image times, read from the .civ file by uvmat
4575%global CivBin%name of the executable for civ1 calculation
4576
4577filename=regexprep(filename,'.nc','');
4578
4579civ2.image1=par.filename_ima_a;
4580civ2.image2=par.filename_ima_b;
4581civ2.imageSize_X=par.npx;
4582civ2.imageSize_Y=par.npy;
4583civ2.inputFileName=[par.filename_nc1 '.nc'];
4584civ2.outputFileName=[filename '.nc'];
4585civ2.correlationBoxesSize_X=par.ibx;
4586civ2.correlationBoxesSize_Y=par.iby;
4587civ2.ro=par.rho;
4588%civ2.decimalShift=par.decimal;
4589%civ2.deformation=par.deformation;
4590if isequal(par.decimal,'1')
4591    civ2.decimalShift='y';
4592else
4593    civ2.decimalShift='n';
4594end
4595if isequal(par.deformation,'1')
4596    civ2.deformation='y';
4597else
4598    civ2.deformation='n';
4599end
4600if isequal(par.gridflag,'y')
4601    civ2.grid=par.gridname;
4602else
4603    civ2.grid='n';
4604    civ2.gridSpacing_X=par.dx;
4605    civ2.gridSpacing_Y=par.dy;
4606end
4607civ2.gridSpacing_X='10';
4608civ2.gridSpacing_Y='10';%NOTE: faut mettre gridSpacing pourque ca tourne, meme si c'est la grille qui est utilisee
4609if isequal(par.maskflag,'y')
4610    civ2.mask=par.maskname;
4611else
4612    civ2.mask='n';
4613end
4614civ2.dt=par.Dt;
4615civ2.unit='pixel';
4616civ2.absolut_time_T0=par.T0;
4617civ2.pixcmx=par.pxcmx;
4618civ2.pixcmy=par.pxcmy;
4619civ2.convectFlow='n';
4620civ2.pixcmx=par.pxcmx;
4621civ2.pixcmy=par.pxcmy;
4622civ2.convectFlow='n';
4623
4624%------------------------------------------------------------------------
4625% --- CIV2  CIV2  CIV2 CIV2
4626function cmd_CIV2=CIV2_CMD(filename,param)
4627%------------------------------------------------------------------------
4628%pixels per cm and matrix of the image times, read from the .civ file by uvmat
4629% global civ2Bin sge%name of the executable for civ1 calculation
4630filename=regexprep(filename,'.nc','');
4631if isequal(param.civ2.Dt,'0')
4632    param.civ2.Dt='1' ;%case of 'displacement' mode
4633end
4634param.civ2.filename_ima_a=regexprep(param.civ2.filename_ima_a,'.png','');
4635param.civ2.filename_ima_b=regexprep(param.civ2.filename_ima_b,'.png','');% bug : .png appears two times ?
4636[fid,errormsg]=fopen([filename '.civ2.cmx'],'w');
4637if isequal(fid,-1)
4638    msgbox_uvmat('ERROR',errormsg)
4639    cmd_CIV2='';
4640    return
4641end
4642fprintf(fid,['##############   CMX file' '\n' ]);
4643fprintf(fid,   ['FirstImage ' regexprep(param.civ2.filename_ima_a,'\\','\\\\') '\n' ]);% for windows compatibility
4644fprintf(fid,   ['LastImage  ' regexprep(param.civ2.filename_ima_b,'\\','\\\\') '\n' ]);% for windows compatibility
4645fprintf(fid,  ['XX' '\n' ]);
4646fprintf(fid, ['Mask ' param.civ2.maskflag '\n' ]);
4647fprintf(fid, ['MaskName ' regexprep(param.civ2.maskname,'\\','\\\\') '\n' ]);% for windows compatibility
4648fprintf(fid, ['ImageSize ' param.civ2.npx ' ' param.civ2.npy '\n' ]);   %VERIFIER CAS GENERAL ?
4649fprintf(fid, ['CorrelationBoxesSize ' param.civ2.ibx ' ' param.civ2.iby '\n' ]);
4650fprintf(fid, ['SearchBoxeSize ' param.civ2.ibx ' ' param.civ2.iby '\n']);
4651fprintf(fid, ['RO ' param.civ2.rho '\n']);
4652fprintf(fid, ['GridSpacing ' param.civ2.dx ' ' param.civ2.dy '\n']);
4653fprintf(fid, ['XX 1.0' '\n' ]);
4654fprintf(fid, ['Dt_TO ' param.civ2.Dt ' ' param.civ2.T0 '\n' ]);
4655fprintf(fid, ['PixCmXY ' param.civ2.pxcmx ' ' param.civ2.pxcmy '\n' ]);
4656fprintf(fid, ['XX 1' '\n' ]);
4657fprintf(fid, 'ShiftXY 0 0\n');
4658fprintf(fid, ['Grid ' param.civ2.gridflag '\n' ]);
4659fprintf(fid, ['GridName ' regexprep(param.civ2.gridname,'\\','\\\\') '\n']);
4660fprintf(fid, ['XX 85' '\n' ]);
4661fprintf(fid, ['XX 1.0' '\n' ]);
4662fprintf(fid, ['XX 1.0' '\n' ]);
4663fprintf(fid, ['Hart 1' '\n' ]);
4664fprintf(fid, ['DecimalShift ' param.civ2.decimal '\n']);
4665fprintf(fid, ['Deformation ' param.civ2.deformation '\n']);
4666fprintf(fid,  ['CorrelationMin 0' '\n' ]);
4667fprintf(fid,   ['IntensityMin 0' '\n' ]);
4668fprintf(fid,  ['SeuilImage n' '\n' ]);
4669fprintf(fid,   ['SeuilImageValues 0 4096' '\n' ]);
4670fprintf(fid,   ['ImageToUse ' param.civ2.term_a ' ' param.civ2.term_b '\n' ]); % VERIFIER ?
4671fprintf(fid, ['ImageUsedBefore ' regexprep(param.civ2.filename_nc1,'\\','\\\\') '\n']);
4672fclose(fid);
4673
4674if(isunix)
4675    cmd_CIV2=['cp -f ' filename '.civ2.cmx ' filename '.cmx\n'];
4676    cmd_CIV2=[cmd_CIV2 param.global.Civ2Bin ' -f ' filename  '.cmx >' filename '.log' ]; % redirect standard output to the log file, the result file is named [filename '.nc'] by CIVx
4677    cmd_CIV2=[cmd_CIV2 '\n' 'mv ' filename '.log' ' ' filename '.civ2.log' '\n' 'chmod g+w ' filename '.nc'];%preserve the log file as .civ2.log
4678%    cmd_CIV2=[cmd_CIV2 '\n' 'mv ' filename '.cmx' ' ' filename '.civ2.cmx' '\n'];%rename .cmx as .civ2.cmx, the result file is named [filename '.nc'] by CIVx
4679
4680else
4681    filename=regexprep(filename,'\\','\\\\');
4682    cmd_CIV2=['copy /Y "' filename '.civ2.cmx" "' filename '.cmx"'];
4683    cmd_CIV2=[cmd_CIV2 '\n "' regexprep(param.global.Civ2Bin,'\\','\\\\') '" -f "' filename  '.cmx" >"' filename '.log"' ]; % redirect standard output to the log file
4684    cmd_CIV2=[cmd_CIV2 '\n ' 'copy /Y "' filename '.log' '" "' filename '.civ2.log"'];
4685 %    cmd_CIV2=[cmd_CIV2 '\n' 'copy /Y "' filename '.cmx' '" "' filename '.civ2.cmx"'];
4686end
4687
4688
4689%------------------------------------------------------------------------
4690%--read images and convert them to the uint16 format used for PIV
4691function A=read_image(filename,type_ima,num,movieobject)
4692%------------------------------------------------------------------------
4693%num is the view number needed for an avi movie
4694switch type_ima
4695    case 'movie'
4696        A=read(movieobject,num);
4697    case 'avi'
4698        mov=aviread(filename,num);
4699        A=frame2im(mov(1));
4700    case 'multimage'
4701        A=imread(filename,num);
4702    case 'image'
4703        A=imread(filename);
4704end
4705siz=size(A);
4706if length(siz)==3;%color images
4707    A=sum(double(A),3);
4708    A=uint16(A);
4709end
4710
4711%------------------------------------------------------------------------
4712function ref_i_Callback(hObject, eventdata, handles)
4713%------------------------------------------------------------------------
4714mode_list=get(handles.CivMode,'String');
4715mode_value=get(handles.CivMode,'Value');
4716mode=mode_list{mode_value};
4717find_netcpair_civ1(hObject, eventdata, handles);% update the menu of pairs depending on the available netcdf files
4718if isequal(mode,'series(Di)') || ...% we do patch2 only
4719        (get(handles.CIV2,'Value')==0 && get(handles.CIV1,'Value')==0 && get(handles.FIX1,'Value')==0 && get(handles.PATCH1,'Value')==0)
4720    find_netcpair_civ2(hObject, eventdata, handles);
4721end
4722
4723%------------------------------------------------------------------------
4724function ref_j_Callback(hObject, eventdata, handles)
4725%------------------------------------------------------------------------
4726mode_list=get(handles.CivMode,'String');
4727mode_value=get(handles.CivMode,'Value');
4728mode=mode_list{mode_value};
4729if isequal(get(handles.CIV1,'Value'),0)|| isequal(mode,'series(Dj)')
4730    find_netcpair_civ1(hObject, eventdata, handles);% update the menu of pairs depending on the available netcdf files
4731end
4732if isequal(mode,'series(Dj)') || ...
4733        (get(handles.CIV2,'Value')==0 && get(handles.CIV1,'Value')==0 && get(handles.FIX1,'Value')==0 && get(handles.PATCH1,'Value')==0)
4734    find_netcpair_civ2(hObject, eventdata, handles);
4735end
4736
4737%------------------------------------------------------------------------
4738function ref_i_civ2_Callback(hObject, eventdata, handles)
4739%------------------------------------------------------------------------
4740mode_list=get(handles.CivMode,'String');
4741mode_value=get(handles.CivMode,'Value');
4742mode=mode_list{mode_value};
4743find_netcpair_civ2(hObject, eventdata, handles);% update the menu of pairs depending on the available netcdf files
4744
4745%------------------------------------------------------------------------
4746function ref_j_civ2_Callback(hObject, eventdata, handles)
4747%------------------------------------------------------------------------
4748mode_list=get(handles.CivMode,'String');
4749mode_value=get(handles.CivMode,'Value');
4750mode=mode_list{mode_value};
4751if  isequal(mode,'series(Dj)')
4752    find_netcpair_civ2(hObject, eventdata, handles);% update the menu of pairs depending on the available netcdf files
4753end
4754
4755%------------------------------------------------------------------------
4756% --- Executes on button press in compare.
4757function compare_Callback(hObject, eventdata, handles)
4758%------------------------------------------------------------------------
4759test=get(handles.compare,'Value');
4760if test==2 || test==3 % case 'dispalcemen' or 'stereo PIV'
4761    filebase=get(handles.RootName,'String');
4762    browse=get(handlesRootName,'Userdata');
4763    browse.nom_type_ima1=browse.nom_type_ima;
4764    set(handlesRootName,'UserData',browse);
4765    set(handles.sub_txt,'Visible','on')
4766    set(handles.RootName_1,'Visible','On');%mkes the second file input window visible
4767    mode_store=get(handles.CivMode,'String');%get the present 'mode'
4768    set(handles.compare,'UserData',mode_store);%store the mode display
4769    set(handles.CivMode,'Visible','off')
4770    if test==2
4771        set(handles.CivMode,'Visible','off')
4772        set(handles.CivMode,'Value',1) % mode 'civX' selected by default
4773    else
4774        set(handles.CivMode,'Visible','on')
4775        set(handles.CivMode,'Value',3) % mode 'Matlab' selected for stereo
4776    end
4777   
4778    %% menuopen an image file with the browser
4779    ind_opening=1;%default
4780    browse.incr_pair=[0 0]; %default
4781    oldfile=get(handles.RootName,'String');
4782     menu={'*.xml;*.civ;*.png;*.jpg;*.tif;*.avi;*.AVI;*.nc;', ' (*.xml,*.civ,*.png,*.jpg ,.tif, *.avi,*.nc)';
4783       '*.xml',  '.xml files '; ...
4784        '*.civ',  '.civ files '; ...
4785        '*.png','.png image files'; ...
4786        '*.jpg',' jpeg image files'; ...
4787        '*.tif','.tif image files'; ...
4788        '*.avi;*.AVI','.avi movie files'; ...
4789        '*.nc','.netcdf files'; ...
4790        '*.*',  'All Files (*.*)'};
4791    [FileName, PathName, filtindex] = uigetfile( menu, 'Pick a file of the second series',oldfile);
4792    fileinput=[PathName FileName];%complete file name
4793    sizf=size(fileinput);
4794    if (~ischar(fileinput)||~isequal(sizf(1),1)),return;end %stop if fileinput not a character string
4795    [path,name,ext]=fileparts(fileinput);
4796    [path1]=fileparts(filebase);
4797    if isunix
4798        [status,path]=system(['readlink ' path])
4799        [status,path1]=system(['readlink ' path1])% look for the true path in case of symbolic paths
4800    end
4801    if ~strcmp(path1,path)
4802        msgbox_uvmat('ERROR','The second image series must be in the same directory as the first one')
4803        return
4804     end
4805%     set(handles.RootName_1,'String',name);
4806    [RootPath,RootFile,field_count,str2,str_a,str_b,xx,nom_type,subdir]=name2display(name);
4807    set(handles.RootName_1,'String',RootFile);
4808    browse=get(handlesRootName,'UserData');
4809    browse.nom_type_ima_1=nom_type;
4810    set(handlesRootName,'UserData',browse)
4811   
4812    %check image extension
4813    if ~strcmp(ext,get(handles.ImaExt,'String'))
4814        msgbox_uvmat('ERROR','The second image series must have the same extension name as the first one')
4815        return
4816    end
4817   
4818    %% check coincidence of image sizes
4819%     ref_i=get(handles.ref_i,'string');
4820%     ref_j=get(handles.ref_j,'string');
4821%     [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]);
4822%     A=imread(filecell.ima1.civ1{1});
4823%     A_1=imread(fileinput);
4824%     npxy=size(A);
4825%     npxy_1=size(A_1);
4826%     if ~isequal(size(A),size(A_1))
4827%         msgbox_uvmat('ERROR','The two input image series do not have the same size')
4828%         return
4829%     end
4830else
4831    set(handles.CivMode,'Visible','on')
4832    set(handles.RootName_1,'Visible','Off');
4833    set(handles.sub_txt,'Visible','off')
4834    set(handles.RootName_1,'String',[]);
4835    mode_store=get(handles.compare,'UserData');
4836    set(handles.CivMode,'Value',1)
4837    set(handles.CivMode,'String',mode_store)
4838    set(handles.test_stereo1,'Value',0)
4839    set(handles.check_Stereo,'Value',0)
4840    set(handles.CivMode,'Value',1) % mode 'civX' selected by default
4841end
4842if test==3 && get(handles.PATCH1,'Value')
4843    set(handles.test_stereo1,'Visible','on')
4844else
4845    set(handles.test_stereo1,'Visible','off')
4846end
4847if test==3 && get(handles.PATCH2,'Value')
4848    set(handles.check_Stereo,'Visible','on')
4849else
4850    set(handles.check_Stereo,'Visible','off')
4851end
4852mode_Callback(hObject, eventdata, handles)
4853
4854%------------------------------------------------------------------------
4855% --- Executes on button press in get_ref_fix1.
4856function get_ref_fix1_Callback(hObject, eventdata, handles)
4857%------------------------------------------------------------------------
4858filebase=get(handles.RootName,'String');
4859[FileName, PathName, filterindex] = uigetfile( ...
4860    {'*.nc', ' (*.nc)';
4861    '*.nc',  'netcdf files '; ...
4862    '*.*', 'All Files (*.*)'}, ...
4863    'Pick a file',filebase);
4864
4865fileinput=[PathName FileName];
4866sizf=size(fileinput);
4867if (~ischar(fileinput)||~isequal(sizf(1),1)),return;end %stop if fileinput not a character string
4868[Path,File,field_count,str2,str_a,str_b,ref.ext,ref.nom_type,ref.subdir]=name2display(fileinput);
4869ref.filebase=fullfile(Path,File);
4870ref.num_a=stra2num(str_a);
4871ref.num_b=stra2num(str_b);
4872ref.num1=str2double(field_count);
4873ref.num2=str2double(str2);
4874browse=[];%initialisation
4875if ~isequal(ref.ext,'.nc')
4876    msgbox_uvmat('ERROR','the reference file must be in netcdf format (*.nc)')
4877    return
4878end
4879set(handles.ref_fix1,'String',[fullfile(ref.subdir,File) '....nc']);
4880set(handles.ref_fix1,'UserData',ref)
4881menu_field{1}='civ1';
4882Data=nc2struct(fileinput,[]);
4883if isfield(Data,'patch') && isequal(Data.patch,1)
4884    menu_field{2}='filter1';
4885end
4886if isfield(Data,'civ2') && isequal(Data.civ2,1)
4887    menu_field{3}='civ2';
4888end
4889if isfield(Data,'patch2') && isequal(Data.patch2,1)
4890    menu_field{4}='filter2';
4891end
4892set(handles.field_ref1,'String',menu_field);
4893set(handles.field_ref1,'Value',length(menu_field));
4894set(handles.inf_sup1,'Value',2);
4895set(handles.thresh_vel,'String','1');%default threshold
4896set(handles.ref_fix1,'Enable','on')
4897
4898%------------------------------------------------------------------------
4899% --- Executes on button press in get_ref_fix2.
4900function get_ref_fix2_Callback(hObject, eventdata, handles)
4901%------------------------------------------------------------------------
4902if isequal(get(handles.get_ref_fix2,'Value'),1)
4903    filebase=get(handles.RootName,'String');
4904    [FileName, PathName, filterindex] = uigetfile( ...
4905        {'*.nc', ' (*.nc)';
4906        '*.nc',  'netcdf files '; ...
4907        '*.*', 'All Files (*.*)'}, ...
4908        'Pick a file',filebase);
4909    fileinput=[PathName FileName];
4910    sizf=size(fileinput);
4911    if (~ischar(fileinput)||~isequal(sizf(1),1)),return;end %stop if fileinput not a character string
4912    [Path,File,field_count,str2,str_a,str_b,ref.ext,ref.nom_type,ref.subdir]=name2display(fileinput);
4913    ref.filebase=fullfile(Path,File);
4914    ref.num_a=stra2num(str_a);
4915    ref.num_b=stra2num(str_b);
4916    ref.num1=str2num(field_count);
4917    ref.num2=str2num(str2);
4918    browse=[];%initialisation
4919    if ~isequal(ref.ext,'.nc')
4920        msgbox_uvmat('ERROR','the reference file must be in netcdf format (*.nc)')
4921        return
4922    end
4923    set(handles.ref_fix2,'String',[fullfile(ref.subdir,File) '....nc']);
4924    set(handles.ref_fix2,'UserData',ref)
4925    menu_field{1}='civ1';
4926    Data=nc2struct(fileinput,[]);
4927    if isfield(Data,'patch') & isequal(Data.patch,1)
4928        menu_field{2}='filter1';
4929    end
4930    if isfield(Data,'civ2') & isequal(Data.civ2,1)
4931        menu_field{3}='civ2';
4932    end
4933    if isfield(Data,'patch2') & isequal(Data.patch2,1)
4934        menu_field{4}='filter2';
4935    end
4936    set(handles.field_ref2,'String',menu_field);
4937    set(handles.field_ref2,'Value',length(menu_field));
4938    set(handles.inf_sup2,'Value',2);
4939    set(handles.thresh_vel2,'String','1');%default threshold
4940    set(handles.ref_fix2,'Enable','on')
4941    set(handles.ref_fix2,'Visible','on')
4942    set(handles.field_ref2,'Visible','on')
4943else
4944    set(handles.ref_fix2,'Visible','off')
4945    set(handles.field_ref2,'Visible','off')
4946end
4947
4948%------------------------------------------------------------------------
4949function ref_fix1_Callback(hObject, eventdata, handles)
4950%------------------------------------------------------------------------
4951set(handles.inf_sup1,'Value',1);
4952set(handles.field_ref1,'Value',1)
4953set(handles.field_ref1,'String',{' '})
4954set(handles.ref_fix1,'UserData',[]);
4955set(handles.ref_fix1,'String','');
4956set(handles.thresh_vel1,'String','0');
4957
4958%------------------------------------------------------------------------
4959function ref_fix2_Callback(hObject, eventdata, handles)
4960%------------------------------------------------------------------------
4961set(handles.inf_sup2,'Value',1);
4962set(handles.field_ref2,'Value',1)
4963set(handles.field_ref2,'String',{' '})
4964set(handles.ref_fix2,'UserData',[]);
4965set(handles.ref_fix2,'String','');
4966set(handles.thresh_vel2,'String','0');
4967
4968%------------------------------------------------------------------------
4969% --- Executes on button press in test_stereo1.
4970function test_stereo1_Callback(hObject, eventdata, handles)
4971%------------------------------------------------------------------------
4972if isequal(get(handles.test_stereo1,'Value'),0)
4973    set(handles.subdomain_patch1,'Visible','on')
4974    set(handles.rho_patch1,'Visible','on')
4975else
4976    set(handles.subdomain_patch1,'Visible','off')
4977    set(handles.rho_patch1,'Visible','off')
4978end
4979
4980%------------------------------------------------------------------------
4981% --- Executes on button press in check_Stereo.
4982function StereoCheck_Callback(hObject, eventdata, handles)
4983%------------------------------------------------------------------------
4984if isequal(get(handles.check_Stereo,'Value'),0)
4985    set(handles.num_SubdomainSize,'Visible','on')
4986    set(handles.num_SmoothParam,'Visible','on')
4987else
4988    set(handles.num_SubdomainSize,'Visible','off')
4989    set(handles.num_SmoothParam,'Visible','off')
4990end
4991
4992%------------------------------------------------------------------------
4993% --- Executes on button press in check_Threshold.
4994function ImaThreshold_Callback(hObject, eventdata, handles)
4995%------------------------------------------------------------------------
4996if isequal(get(handles.check_Threshold,'Value'),1)
4997    set(handles.MinIma,'Visible','on')
4998    set(handles.MaxIma,'Visible','on')
4999else
5000    set(handles.MinIma,'Visible','off')
5001    set(handles.MaxIma,'Visible','off')
5002end
5003
5004%------------------------------------------------------------------------
5005% --- Executes on button press in ImaThreshold2.
5006function ImaThreshold2_Callback(hObject, eventdata, handles)
5007%------------------------------------------------------------------------
5008if isequal(get(handles.ImaThreshold2,'Value'),1)
5009    set(handles.MinIma2,'Visible','on')
5010    set(handles.MaxIma2,'Visible','on')
5011else
5012    set(handles.MinIma2,'Visible','off')
5013    set(handles.MaxIma2,'Visible','off')
5014end
5015
5016%------------------------------------------------------------------------
5017% --- Executes on button press in TestCiv1: display image correlation function
5018function TestCiv1_Callback(hObject, eventdata, handles)
5019%------------------------------------------------------------------------
5020set(handles.TestCiv1,'BackgroundColor',[1 1 0])
5021drawnow
5022test_civ1=get(handles.TestCiv1,'Value');
5023if test_civ1
5024    ref_i=str2double(get(handles.ref_i,'String'));
5025    if strcmp(get(handles.ref_j,'Visible'),'on')
5026        ref_j=str2double(get(handles.ref_j,'String'));
5027    else
5028        ref_j=1;%default
5029    end
5030    [filecell,num1_civ1,num2_civ1,num_a_civ1,num_b_civ1,num1_civ2,num2_civ2,num_a_civ2,num_b_civ2,nom_type_nc,file_ref_fix1,file_ref_fix2]=...
5031        set_civ_filenames(handles,ref_i,ref_j,[1 0 0 0 0 0]);
5032    Data.ListVarName={'ny','nx','A'};
5033    Data.VarDimName={'ny','nx',{'ny','nx'}};
5034    Data.A=imread(filecell.ima1.civ1{1});
5035    Data.ny=[size(Data.A,1) 1];
5036    Data.nx=[1 size(Data.A,2)];
5037    par_civ1=read_param_civ1(handles,filecell.ima1.civ1{1});
5038    par_civ1.filename_ima_a=filecell.ima1.civ1{1};
5039    par_civ1.filename_ima_b=filecell.ima2.civ1{1};
5040    par_civ1.T0=0;
5041    par_civ1.Dt=1;
5042    Param.Civ1=par_civ1;
5043    Data=civ_uvmat(Param);
5044    Data.ListVarName=[Data.ListVarName {'ny','nx','A'}];
5045    Data.VarDimName=[Data.VarDimName {'ny','nx',{'ny','nx'}}];
5046    Data.A=imread(filecell.ima1.civ1{1});
5047    Data.ny=[size(Data.A,1) 1];
5048    Data.nx=[1 size(Data.A,2)];
5049    hview_field=view_field(Data);
5050    set(0,'CurrentFigure',hview_field)
5051    hhview_field=guihandles(hview_field);
5052    set(hview_field,'CurrentAxes',hhview_field.axes3)
5053    ViewData=get(hview_field,'UserData');
5054    ViewData.CivHandle=handles.civ;% indicate the handle of the civ GUI in view_field
5055    ViewData.axes3.B=imread(filecell.ima2.civ1{1});%store the second image in the UserData of the GUI view_field
5056    ViewData.axes3.X=Data.Civ1_X; %keep the set of points in memeory
5057    ViewData.axes3.Y=Data.Civ1_Y;
5058    set(hview_field,'UserData',ViewData)
5059    corrfig=findobj(allchild(0),'tag','corrfig');% look for a current figure for image correlation display
5060    if isempty(corrfig)
5061        corrfig=figure;
5062        set(corrfig,'tag','corrfig')
5063        set(corrfig,'name','image correlation')
5064        set(corrfig,'DeleteFcn',{@closeview_field})%
5065    end
5066    set(handles.TestCiv1,'BackgroundColor',[1 0 0])
5067else
5068    corrfig=findobj(allchild(0),'tag','corrfig');% look for a current figure for image correlation display
5069    if ~isempty(corrfig)
5070        delete(corrfig)
5071    end
5072    hview_field=findobj(allchild(0),'tag','view_field');% look for view_field   
5073    if ~isempty(hview_field)
5074        delete(hview_field)
5075    end
5076end
5077
5078function closeview_field(gcbo,eventdata)
5079hview_field=findobj(allchild(0),'tag','view_field');% look for view_field   
5080    if ~isempty(hview_field)
5081        delete(hview_field)
5082    end
5083%-------------------------------------------------------------------
5084% --- Executes on button press in status.
5085function status_Callback(hObject, eventdata, handles)
5086%-------------------------------------------------------------------
5087val=get(handles.status,'Value');
5088if val==0
5089    set(handles.status,'BackgroundColor',[0 1 0])
5090    hfig=findobj(allchild(0),'name','civ_status');
5091    if ~isempty(hfig)
5092        delete(hfig)
5093    end
5094    return
5095end
5096set(handles.status,'BackgroundColor',[1 1 0])
5097drawnow
5098listtype={'civ1','fix1','patch1','civ2','fix2','patch2'};
5099box_test(1)=get(handles.CIV1,'Value');
5100box_test(2)=get(handles.FIX1,'Value');
5101box_test(3)=get(handles.PATCH1,'Value');
5102box_test(4)=get(handles.CIV2,'Value');
5103box_test(5)=get(handles.FIX2,'Value');
5104box_test(6)=get(handles.PATCH2,'Value');
5105option_civ=find(box_test,1,'last');%last selected option (non-zero index of box_test)
5106filecell=get(handles.civ,'UserData');%retrieve the list of output files expected for PIV
5107test_new=0;
5108if ~isfield(filecell,'nc')
5109    test_new=1;
5110    [ref_i,ref_j,errormsg]=find_ref_indices(handles);
5111    if ~isempty(errormsg)
5112        msgbox_uvmat('ERROR',errormsg)
5113        return
5114    end
5115    filecell=set_civ_filenames(handles,ref_i,ref_j,box_test);%determine the output file expected from the GUI status
5116end
5117if ~isequal(box_test(4:6),[0 0 0])
5118    civ_files=filecell.nc.civ2;%case of civ2 operations
5119else
5120    civ_files=filecell.nc.civ1;
5121end
5122[root,filename,ext]=fileparts(civ_files{1});
5123[rootroot,subdir,extdir]=fileparts(root);
5124hfig=findobj(allchild(0),'name','civ_status');
5125if isempty(hfig)
5126    hfig=figure('DeleteFcn',@stop_status);
5127    set(hfig,'name','civ_status')
5128    hlist=uicontrol('Style','listbox','Units','normalized', 'Position',[0.05 0.09 0.9 0.71], 'Callback', @open_view_field,'tag','list');
5129    uicontrol('Style','edit','Units','normalized', 'Position', [0.05 0.87 0.9 0.1],'tag','msgbox','Max',2,'String','checking files...');
5130    uicontrol('Style','frame','Units','normalized', 'Position', [0.05 0.81 0.9 0.05]);
5131    uicontrol('Style','pushbutton','Units','normalized', 'Position', [0.7 0.01 0.2 0.07],'String','OK','FontWeight','bold','FontUnits','normalized','FontSize',0.9,'Callback',@close_GUI);
5132    BarPosition=[0.05 0.81 0.01 0.05];
5133    hwaitbar=uicontrol('Style','frame','Units','normalized', 'Position',BarPosition ,'BackgroundColor',[1 0 0],'tag','waitbar');
5134    drawnow
5135end
5136% datnum=[];
5137Tabchar={};
5138nbfiles=numel(civ_files);
5139count=0;
5140testrecent=0;
5141while count<nbfiles
5142    count=0;
5143    datnum=zeros(1,nbfiles);
5144    for ifile=1:nbfiles
5145        detect=exist(civ_files{ifile},'file'); % check the existence of the file
5146        option=0;
5147        if detect==0
5148            option_str='not created';
5149        else
5150            datfile=dir(civ_files{ifile});
5151            if isfield(datfile,'datenum')
5152                datnum(ifile)=datfile.datenum;%only available in recent matlab versions
5153                testrecent=1;
5154            end
5155            filefound(ifile)={datfile.name};
5156            lastfield='';
5157            % check the content  netcdf file
5158            Data=nc2struct(civ_files{ifile},'ListGlobalAttribute','patch2','fix2','civ2','patch','fix');
5159            if ~isempty(Data.patch2) && isequal(Data.patch2,1)
5160                option=6;
5161                option_str='patch2';
5162            elseif ~isempty(Data.fix2) && isequal(Data.fix2,1)
5163                option=5;
5164                option_str='fix2';
5165            elseif ~isempty(Data.civ2) && isequal(Data.civ2,1);
5166                option=4;
5167                option_str='civ2';
5168            elseif ~isempty(Data.patch) && isequal(Data.patch,1);
5169                option=3;
5170                option_str='patch1';
5171            elseif ~isempty(Data.fix) && isequal(Data.fix,1);
5172                option=2;
5173                option_str='fix1';
5174            else
5175                option=1;
5176                option_str='civ1';
5177            end
5178        end
5179        if option >= option_civ
5180            count=count+1;
5181        end
5182        [rr,filename,ext]=fileparts(civ_files{ifile});
5183        Tabchar{ifile,1}=[fullfile([subdir extdir],filename) ext  '...' option_str];
5184    end
5185    datnum=datnum(datnum~=0);%keep the non zero values corresponding to existing files
5186    if isempty(datnum)
5187        if testrecent
5188            message='no civ result created yet';
5189        else
5190            message='';
5191        end
5192    else
5193        datnum=datnum(datnum~=0);%keep the non zero values corresponding to existing files
5194        [first,ind]=min(datnum);
5195        [last,indlast]=max(datnum);
5196        if test_new
5197            message='existing file status, no processing launched yet';
5198        else
5199        message={[num2str(count) ' file(s) done over ' num2str(nbfiles)] ;['oldest modification:  ' cell2mat(filefound(ind)) ' : ' datestr(first)];...
5200            ['latest modification:  ' cell2mat(filefound(indlast)) ' : ' datestr(last)]};
5201        end
5202    end
5203    hfig=findobj(allchild(0),'name','civ_status');
5204    if isempty(hfig)% the status list has been deleted
5205        return
5206    else
5207        hlist=findobj(hfig,'tag','list');
5208        hmsgbox=findobj(hfig,'tag','msgbox');
5209        hwaitbar=findobj(hfig,'tag','waitbar');
5210        set(hlist,'String',Tabchar)
5211        set(hmsgbox,'String', message)
5212        if count>0 && ~test_new
5213            BarPosition(3)=0.9*count/nbfiles;
5214            set(hwaitbar,'Position',BarPosition)
5215        end
5216    end
5217    set(hlist,'UserData',rootroot)
5218    pause(10)% wait 10 seconds for next check
5219end
5220
5221   
5222%------------------------------------------------------------------------   
5223% call 'view_field.fig' to display the  field selected in the list of 'status'
5224function open_view_field(hObject, eventdata)
5225%------------------------------------------------------------------------
5226list=get(hObject,'String');
5227index=get(hObject,'Value');
5228rootroot=get(hObject,'UserData');
5229filename=list{index};
5230ind_dot=findstr(filename,'...');
5231filename=filename(1:ind_dot-1);
5232filename=fullfile(rootroot,filename);
5233delete(get(hObject,'parent'))%delete the display figure to stop the check process
5234if exist(filename,'file')%visualise the vel field if it exists
5235    uvmat(filename)
5236    set(gcbo,'Value',1)
5237end
5238
5239%------------------------------------------------------------------------   
5240% launched by pressing OK on the status figure
5241function close_GUI(hObject, eventdata)
5242%------------------------------------------------------------------------
5243    delete(gcbf)
5244   
5245%------------------------------------------------------------------------   
5246% launched by deleting the status figure
5247function stop_status(hObject, eventdata)
5248%------------------------------------------------------------------------
5249hciv=findobj(allchild(0),'tag','civ');
5250hhciv=guidata(hciv);
5251set(hhciv.status,'value',0) %reset the status uicontrol in the GUI civ
5252set(hhciv.status,'BackgroundColor',[0 1 0])
5253
5254%------------------------------------------------------------------------
5255% % --- Executes on button press in CivMode.
5256% function CivMode_Callback(hObject, eventdata, handles)
5257% %------------------------------------------------------------------------
5258% Listprog=get(handles.CivMode,'String');
5259% index=get(handles.CivMode,'Value');
5260% prog=Listprog{index};
5261% switch prog
5262%     case 'CivX'
5263%         set(handles.thresh_patch1,'Visible','off')
5264%         set(handles.thresh_text1,'Visible','off')
5265%         set(handles.num_MaxDiff,'Visible','off')
5266%         set(handles.thresh_text2,'Visible','off')
5267%         set(handles.rho,'Style','edit')
5268%         set(handles.rho,'String','1')
5269%         set(handles.BATCH,'Enable','on')
5270%     case 'CivAll'
5271%         if get(handles.PATCH1,'Value')
5272%             set(handles.thresh_patch1,'Visible','on')
5273%             set(handles.thresh_text1,'Visible','on')
5274%         end
5275%         set(handles.rho,'Style','edit')
5276%         set(handles.rho,'String','1')
5277%         set(handles.BATCH,'Enable','on')
5278%     case 'CivUvmat'
5279%       
5280% end
5281
5282
5283% --- Executes on button press in check_Stereo.
5284function check_Stereo_Callback(hObject, eventdata, handles)
5285% hObject    handle to check_Stereo (see GCBO)
5286% eventdata  reserved - to be defined in a future version of MATLAB
5287% handles    structure with handles and user data (see GUIDATA)
5288
5289% Hint: get(hObject,'Value') returns toggle state of check_Stereo
5290
5291
5292
5293function num_SubdomainSize_Callback(hObject, eventdata, handles)
5294% hObject    handle to num_SubdomainSize (see GCBO)
5295% eventdata  reserved - to be defined in a future version of MATLAB
5296% handles    structure with handles and user data (see GUIDATA)
5297
5298% Hints: get(hObject,'String') returns contents of num_SubdomainSize as text
5299%        str2double(get(hObject,'String')) returns contents of num_SubdomainSize as a double
5300
5301
5302
5303function num_SmoothingParam_Callback(hObject, eventdata, handles)
5304% hObject    handle to num_SmoothingParam (see GCBO)
5305% eventdata  reserved - to be defined in a future version of MATLAB
5306% handles    structure with handles and user data (see GUIDATA)
5307
5308% Hints: get(hObject,'String') returns contents of num_SmoothingParam as text
5309%        str2double(get(hObject,'String')) returns contents of num_SmoothingParam as a double
5310
5311
5312
5313function num_MaxDiff_Callback(hObject, eventdata, handles)
5314% hObject    handle to num_MaxDiff (see GCBO)
5315% eventdata  reserved - to be defined in a future version of MATLAB
5316% handles    structure with handles and user data (see GUIDATA)
5317
5318% Hints: get(hObject,'String') returns contents of num_MaxDiff as text
5319%        str2double(get(hObject,'String')) returns contents of num_MaxDiff as a double
5320
5321
5322function num_Nx_Callback(hObject, eventdata, handles)
5323% hObject    handle to num_Nx (see GCBO)
5324% eventdata  reserved - to be defined in a future version of MATLAB
5325% handles    structure with handles and user data (see GUIDATA)
5326
5327% Hints: get(hObject,'String') returns contents of num_Nx as text
5328%        str2double(get(hObject,'String')) returns contents of num_Nx as a double
5329
5330
5331function num_Ny_Callback(hObject, eventdata, handles)
5332% hObject    handle to num_Ny (see GCBO)
5333% eventdata  reserved - to be defined in a future version of MATLAB
5334% handles    structure with handles and user data (see GUIDATA)
5335
5336% Hints: get(hObject,'String') returns contents of num_Ny as text
5337%        str2double(get(hObject,'String')) returns contents of num_Ny as a double
5338
5339
5340% --------------------------------------------------------------------
5341function MenuHelp_Callback(hObject, eventdata, handles)
5342path_civ=fileparts(which ('civ'));
5343helpfile=fullfile(path_civ,'uvmat_doc','uvmat_doc.html');
5344if isempty(dir(helpfile))
5345    msgbox_uvmat('ERROR','Please put the help file uvmat_doc.html in the sub-directory /uvmat_doc of the UVMAT package')
5346else
5347    addpath (fullfile(path_civ,'uvmat_doc'))
5348    web([helpfile '#civ'])
5349end
5350
5351% --------------------------------------------------------------------
5352function CivX_Callback(hObject, eventdata, handles)
5353%set(handles.thresh_patch1,'Visible','off')
5354set(handles.thresh_text1,'Visible','off')
5355set(handles.num_MaxDiff,'Visible','off')
5356set(handles.thresh_text2,'Visible','off')
5357set(handles.rho,'Style','edit')
5358set(handles.rho,'String','1')
5359set(handles.BATCH,'Enable','on')
5360
5361% --------------------------------------------------------------------
5362function Matlab_Callback(hObject, eventdata, handles)
5363set(handles.Matlab,'checked','on')
5364set(handles.CivX,'checked','off')
5365if get(handles.PATCH1,'Value')
5366    set(handles.thresh_patch1,'Visible','on')
5367    set(handles.thresh_text1,'Visible','on')
5368end
5369if get(handles.PATCH2,'Value')
5370    set(handles.num_MaxDiff,'Visible','on')
5371    set(handles.thresh_text2,'Visible','on')
5372end
5373set(handles.rho,'Style','popupmenu')
5374set(handles.rho,'Value',1)
5375set(handles.rho,'String',{'1';'2'})
5376set(handles.BATCH,'Enable','off')
5377
5378% --------------------------------------------------------------------
5379% --- read a panel with handle 'handle' producing a structure 'struct'
5380function struct=read_panel(handle)
5381hchild=get(handle,'children');
5382for ichild=1:numel(hchild)
5383    object_style=get(hchild(ichild),'Style');
5384    tag=get(hchild(ichild),'tag');
5385    check_input=1;%default
5386    switch object_style
5387        case 'edit'
5388            switch(tag(1:4))
5389                case 'num_'
5390                    input=str2double(get(hchild(ichild),'String'));
5391                    %deal with undefined input: retrieve the default value stored as UserData
5392                    if isnan(input)
5393                        input=get(hchild(ichild),'UserData');
5394                        set(hchild(ichild),'String',num2str(input))
5395                    end
5396                case 'txt_'
5397                    input=get(hchild(ichild),'String');
5398            end
5399            key=tag(5:end);
5400        case 'checkbox'
5401            input=get(hchild(ichild),'Value');
5402            key=tag(7:end);
5403        otherwise
5404            check_input=0;         
5405    end
5406    if check_input
5407        eval(['struct.' key '=input;'])
5408    end
5409end
Note: See TracBrowser for help on using the repository browser.