source: trunk/src/name_generator.m @ 114

Last change on this file since 114 was 89, checked in by sommeria, 14 years ago

many bug corrections and cleaning. Activation of the BW option in uvmat. Improvement of the interaction of get_field with uvmat.

File size: 15.2 KB
Line 
1%'name_generator': creates a file name from a root name and indices.
2%------------------------------------------------------------------------
3% [filename,idetect,num_i1_out,num_j1_out,num_i2_out,num_j2_out,subdir_out]=...
4%        name_generator(filebase,num_i1,num_j1,ext,nom_type,comp_input,num_i2,num_j2,subdir);
5%------------------------------------------------------------------------           
6% This function detects the existence the constructed file name and it can
7% find indices according to file existence if they are not specified
8% rmq: this function is related to the reverse functions display2name and name2diplay
9%------------------------------------------------------------------------
10% OUTPUT:
11% filename: string representing the file name (including path)
12% idetect: =1 if the file is detected, 0 otherwise
13% num_i1_out,num_j1_out,num_i2_out,num_j2_out,subdir_out: index numbers and subdirectory detected
14%            for free input (= to the corresponding input indices when comp_input=1)
15%------------------------------------------------------------------------
16% INPUT:
17% 'filebase': the root name,
18% 'num_i1: first labelling index i
19% 'num_j1', first labelling index j
20% 'ext': file name extension (e.g. '.png' or '.nc')
21% 'nom_type': string defining the kind of nomenclature used:
22%       nom_type='': constant name [filebase ext] (default output if 'nom_type' is undefined)
23%       nom_type='*': the same  file [filebase ext] contains successive fields (ex avi movies)
24%       nom_type='%03d' or '%04d', series of indexed images with numbers completed with zeros to 3 or 4 digits, e.g.'aa045.tif'
25%       nom_type='_i': series of files with a single index i preceded by '_'(e.g. 'aa_45.png').
26%       nom_type='_%03d', '_%04d', or '_%05d', series of indexed images with _ and numbers completed with zeros to 3, 4 or 5 digits, e.g.'aa_045.tif'
27%       nom_type='#' series of indexed images wich is not series_i [filebase index ext], e.g. 'aa045.jpg' or 'aa45.tif'
28%       nom_type='_i_j' matrix of files with two indices i and j separated by '_'(e.g. 'aa_45_2.png')
29%       nom_type='_i1-i2' from pairs from a single index (e.g. 'aa_45-47.nc')
30%       nom_type='_i_j1-j2'pairs of j indices (e.g. 'aa_45_2-3.nc')
31%       nom_type='_i1-i2_j' pairs of i indices (e.g. 'aa_45-46_2.nc')
32%       nom_type='%3da','%3dA' with a numerical index and an index letter(e.g.'aa045b.png'),
33%       nom_type='#a','#A' with a numerical index and an index letter(e.g.'aa045b.png'), OBSOLETE (replaced by 'series_i_j')
34%       nom_type='#_ab' from pairs of '#a' images (e.g. 'aa045bc.nc'),
35%       nom_type='%3d_ab' from pairs of '%3da' images (e.g. 'aa045bc.nc')
36%'comp_input' (for nom_type involving index pairs (e.g. netc))
37%       comp_input=1: the index pair is imposed,
38%       comp_input=0: the index pair is automatically searched, choosing the most recent  file in case of multiple choice
39% 'num_i2': second index i (for nom_type involving index pairs (e.g. netc))
40% 'num_j2': second index j (for nom_type involving index pairs (e.g. netc))
41% 'subdir': (used for nom_type=netc...) string representing the name of the subdirectory 'subdir' containing file.
42%       subdir='': no subdirectory,
43%       subdir='?', the file is first searched with no subdirectory, then in the most recently modified subdirectory if not detected.
44
45% A FAIRE: si comp_inpu=0, si _i_j n'existe pas, chercher _i,
46function [filename,num_i1_out,num_j1_out,num_i2_out,num_j2_out,subdir_out]=...
47           name_generator(filebase,num_i1,num_j1,ext,nom_type,comp_input,num_i2,num_j2,subdir);
48sizf=size(filebase);
49if (~ischar(filebase)||~isequal(sizf(1),1)),filebase='';end
50if ~exist('ext','var')
51    ext='';
52end
53if ~exist('nom_type','var')
54    nom_type='';
55end
56if ~ischar(ext),ext='';end
57idetect=0;
58if ~exist('num_i1','var') || isempty(num_i1) || isnan(num_i1)
59    num_i1=1; %default
60end
61if ~exist('num_j1','var') ||  isempty(num_j1) || isnan(num_j1)
62    num_j1=1; %default
63end
64if ~exist('num_i2','var') ||  isempty(num_i2) || isnan(num_i2)
65    num_i2=num_i1; %default
66end
67if ~exist('num_j2','var') || isempty(num_j2) || isnan(num_j2)
68    num_j2=num_j1; %default
69end
70if ~exist('subdir','var')|| isempty(subdir)
71    subdir='' ; %default
72end
73num_i1_out=num_i1;%default output
74num_j1_out=num_j1;%default output
75num_i2_out=num_i2;%default output
76num_j2_out=num_j2;%default output
77
78test_pairs=strcmp(nom_type,'netc_old')| strcmp(nom_type,'netc_2D') | strcmp(nom_type,'netc_3D')| strcmp(nom_type,'_i1-i2_j1-j2')| ...
79  strcmp(nom_type,'netc_series')| strcmp(nom_type,'#_ab')| strcmp(nom_type,'_i_j1-j2')| strcmp(nom_type,'_i1-i2_j')| strcmp(nom_type,'_i1-i2');
80test_2D= strcmp(nom_type,'netc_old') |strcmp(nom_type,'netc_2D')|strcmp(nom_type,'#_ab') |strcmp(nom_type,'_i_j1-j2');
81test_3D=strcmp(nom_type,'netc_3D') |strcmp(nom_type,'netc_series')| strcmp(nom_type,'_i1-i2_j')| strcmp(nom_type,'_i1-i2');
82if strcmp(nom_type,'series_i')| strcmp(nom_type,'_i');
83        filename=[filebase '_' num2str(num_i1) ext];
84        num_i2_out=num_i1;
85        num_j1_out=[];
86        num_j2_out=[];
87elseif length(nom_type)==5 && strcmp(nom_type(1:3),'_%0')&& strcmp(nom_type(5),'d');
88        filename=[filebase '_' num2str(num_i1,nom_type(2:5)) ext];
89        num_i2_out=num_i1;
90        num_j2_out=num_j1;
91elseif strcmp(nom_type,'series_i_j')| strcmp(nom_type,'_i_j')
92        filename=[filebase '_' num2str(num_i1) '_' num2str(num_j1) ext];
93        num_i2_out=num_i1;
94        num_j2_out=num_j1;
95elseif strcmp(nom_type,'png_old')| strcmp(nom_type,'#a')| strcmp(nom_type,'#A')
96        filename=[filebase num2str(num_i1,'%03d') num2stra(num_j1,nom_type) ext];
97        num_i2_out=num_i1;
98        num_j2_out=num_j1;
99elseif  length(nom_type)>=5 & strcmp(nom_type(2:3),'%0') & strcmp(nom_type(5),'d')  %strcmp(nom_type,'_%04dA') %camera PCO Toulouse
100        filename=[filebase nom_type(1) num2str(num_i1,nom_type(2:4)) num2stra(num_j1,nom_type) ext];
101        num_i2_out=num_i1;
102        num_j2_out=num_j1;   
103elseif strcmp(nom_type,'raw_SMD') %suffix a, b, c without extension
104        filename=[filebase num2str(num_i1,'%03d') num2stra(num_j1,nom_type)];
105        num_i2_out=num_i1;
106        num_j2_out=num_j1;
107elseif strcmp(nom_type,'ima_num')| strcmp(nom_type,'#')
108        filename=[filebase num2str(num_i1) ext];
109        num_i2_out=num_i1;
110        num_j1_out=[];
111        num_j2_out=[];
112elseif length(nom_type)>=4 & strcmp(nom_type(1:2),'%0') & strcmp(nom_type(end),'d')
113        filename=[filebase num2str(num_i1,nom_type) ext]; %test number with a 0 before
114        num_i2_out=num_i1;
115        num_j1_out=[];
116        num_j2_out=[];
117
118%case of derived file indexing (e.g. netcdf files)
119elseif test_pairs
120    filebasesub=filebase;
121    % get the root name filebasesub for the netcdf files
122    if  ~strcmp(subdir,'') && ~strcmp(subdir,'?')
123            [Path,Name]=fileparts(filebase);
124            filebasesub=fullfile(Path,subdir,Name);
125    end
126     %inexistant pair if num_i2=0 or num_j2=0
127%     if strcmp(num_i2,0)
128%         filename=[filebasesub '*-*_' num2str(num_i1) ext];
129%         return
130%     end
131%     if strcmp(num_j2,0)
132%         filename=[filebasesub '_' num2str(num_i1) '_*-*' ext];
133%         return
134%     end
135    % case of an imposed image pair (comp_input=1)
136    if  (exist('comp_input','var') & isequal(comp_input,1))
137            if isequal(nom_type,'netc_old')|isequal(nom_type,'#_ab')
138                if isequal(num2str(num_j1),num2str(num_j2))% case of displacements at the same time
139                    filename=[filebasesub num2str(num_i1,'%03d') '_' num2stra(num_j1,nom_type) ext];
140                else
141                    filename=[filebasesub num2str(num_i1,'%03d') '_' num2stra(num_j1,nom_type) num2stra(num_j2,nom_type) ext];
142                end
143                num_i2_out=num_i1;
144            elseif isequal(nom_type,'netc_2D')|isequal(nom_type,'_i_j1-j2')
145                if isequal(num2str(num_j1),num2str(num_j2))% case of displacements at the same time
146                    filename=[filebasesub '_' num2str(num_i1) '_' num2str(num_j1) ext];
147                else
148                    filename=[filebasesub '_' num2str(num_i1) '_' num2str(num_j1) '-' num2str(num_j2) ext];
149                end
150                num_i2_out=num_i1;
151            elseif isequal(nom_type,'netc_3D') || isequal(nom_type,'_i1-i2_j')
152                if isequal(num2str(num_i1),num2str(num_i2))% case of displacements at the same time
153                      filename=[filebasesub '_' num2str(num_i1) '_' num2str(num_j1) ext];
154                else
155                    filename=[filebasesub '_' num2str(num_i1) '-' num2str(num_i2) '_' num2str(num_j1) ext];
156                end
157                num_j2_out=num_j1;
158            elseif isequal(nom_type,'netc_series') || isequal(nom_type,'_i1-i2')
159                if isequal(num2str(num_i1),num2str(num_i2))% case of displacements at the same time
160                     filename=[filebasesub '_' num2str(num_i1) ext];
161                else
162                    filename=[filebasesub '_' num2str(num_i1) '-' num2str(num_i2) ext];
163                end
164                num_j2_out=num_j1;
165            elseif isequal(nom_type,'_i1-i2_j1-j2')
166                if isequal(num2str(num_i1),num2str(num_i2))% case of displacements at the same time
167                    app1= [num2str(num_i1)];
168                else
169                    app1= [num2str(num_i1) '-' num2str(num_i2)];
170                end
171                if isequal(num2str(num_j1),num2str(num_j2))% case of displacements at the same time
172                    app2= [num2str(num_j1)];
173                else
174                    app2= [num2str(num_j1) '-' num2str(num_j2)];
175                end     
176                filename=[filebasesub '_' app1 '_' app2 ext];
177            end
178            idetect=1;
179           % idetect=(exist(filename,'file')==2);
180     % case of an image pair to determine (comp_input=0)
181    else
182            [filename,num_i1_out,num_j1_out,num_i2_out,num_j2_out,idetect]=search_pair(filebasesub,num_i1,num_j1,num_i2,nom_type);
183    end
184   
185     %look for sub-directories containing netcdf files
186    if idetect==0 && isequal(subdir,'?')
187        [pathfile,name]=fileparts(filebase);
188        direct=dir(pathfile);%directory containing filebase
189        datedir=[];%default
190        idir=0;
191        indir=find(cell2mat({direct.isdir}));% find indices of subdirectories
192        direct=direct(indir([3:end]));% keep only the subdirectories,eliminating the two first terms '.' and '..'
193        lengthdir=length(direct);
194        if lengthdir==0
195            subdir='';% no subdirectory found
196        else
197            for idir=1:lengthdir
198                date_str=direct(idir).date;%string of the date of last modification
199                datedir(idir)=0;%default
200                char_code=double(date_str);% code of the date characters
201                special_char=(char_code>127); %non standard Ascii character (e.g. date in french)
202                if isempty(find(special_char))% standard Ascii character
203                    datedir(idir)=datenum(date_str);
204                end                           
205%                 datedir(idir)=datenum(direct(idir).date); %absolute date of last directory modification
206            end
207            [mostrec,indrec]=max(datedir);% most recently modified subdir chosen by default
208            subdir=direct(indrec).name; %chosen directory
209        end
210        filebasesub=fullfile(pathfile,subdir,name);
211        %if the image pair is imposed
212        if (exist('comp_input','var') & isequal(comp_input,1))
213            if isequal(nom_type,'netc_old')|isequal(nom_type,'#_ab')
214                filename=[filebasesub num2str(num_i1,'%03d') '_' num2stra(num_j1,nom_type) num2stra(num_j2,nom_type) ext];
215            elseif isequal(nom_type,'netc_2D')|isequal(nom_type,'_i1_j1-j2')
216                filename=[filebasesub '_' num2str(num_i1) '_' num2str(num_j1) '-' num2str(num_i2) ext];
217            elseif isequal(nom_type,'netc_3D')|isequal(nom_type,'_i1-i2_j')
218                filename=[filebasesub '_' num2str(num_i1) '-' num2str(num_i2) '_' num2str(num_j1) ext];
219            elseif isequal(nom_type,'netc_series')|isequal(nom_type,'_i1-i2')
220                filename=[filebasesub '_' num2str(num_i1) '-' num2str(num_i2) ext];
221            end
222            idetect=(exist(filename,'file')==2);
223        else
224            [filename,num_i1_out,num_j1_out,num_i2_out,num_j2_out,idetect]=search_pair(filebasesub,num_i1,num_j1,num_i2,nom_type);             
225        end
226    end
227% elseif isequal(nom_type,'none')|isequal(nom_type,'')|isequal(nom_type,'*')
228else
229    filebasesub=filebase;
230    if ~isequal(subdir,'') && ~isequal(subdir,'?')
231            [Path,Name]=fileparts(filebase);
232            filebasesub=fullfile(Path,subdir,Name);
233    end
234    filename=[filebasesub ext];
235    idetect=(exist(filename,'file')==2); 
236end
237if ~isequal(subdir,'?'), subdir_out=subdir; else, subdir_out='';end;
238
239%------------------------------------------------------------------------
240% --- search the appropriate image pair (netcdf file) corresponding to a given image number
241function [filename,num_i1,num_j1,num_i2,num_j2,idetect]=search_pair(filebasesub,num_i1,num_j1,num_i2,nom_type)
242%------------------------------------------------------------------------
243% for nom_type=netc_2D or netc_old, it searches all the pairs corresponding
244% to num_i1, and chooses the most recent file.
245%for nom_type=netc_3D or netc_series, it searches all the pairs (num_i1
246%num_i2), with num_i1 as the first  index, and chooses the most recent file.
247
248filename=[];num_j2=[];idetect=0;%default values
249if isequal(nom_type,'netc_old')|isequal(nom_type,'#_ab')
250    dirpair=dir([filebasesub num2str(num_i1,'%03d') '_*.nc']);
251elseif isequal(nom_type,'netc_2D')|isequal(nom_type,'_i_j1-j2')
252    dirpair=dir([filebasesub '_' num2str(num_i1) '_*-*.nc']);
253elseif isequal(nom_type,'netc_3D')|isequal(nom_type,'_i1-i2_j')
254    dirpair=dir([filebasesub '_' num2str(num_i1) '-*_' num2str(num_j1) '.nc']);
255elseif isequal(nom_type,'netc_series')|isequal(nom_type,'_i1-i2')
256    dirpair=dir([filebasesub '_' num2str(num_i1) '-*.nc']);
257    if isempty(dirpair)
258        dirpair=dir([filebasesub '_*-' num2str(num_i2) '.nc']);
259    end
260end
261nbpair=length(dirpair);
262if nbpair >= 1 %choose the most recent file if several are found
263    idetect=1; %detected pair
264    for ipair=1:nbpair
265         date_str=dirpair(ipair).date;%string of the date of last modification
266         datepair(ipair)=0;%default
267         char_code=double(date_str);% code of the date characters
268         special_char=(char_code>127); %non standard Ascii character (e.g. date in french)
269         if isempty(find(special_char))% standard Ascii character
270             datepair(ipair)=datenum(date_str);
271         end   
272      %  datepair(ipair)=datenum(dirpair(ipair).date);
273    end
274    [choice,indpair]=max(datepair);
275%     [filebase,field_count,str2,str_a,str_b,ext,nom_type]=name2display(dirpair(indpair).name);
276    [pathname,file,field_count,str2,str_a,str_b,ext,nom_type]=name2display(dirpair(indpair).name);
277    num_i1=str2num(field_count);
278    num_i2=str2num(str2);
279    num_j1=stra2num(str_a);
280    num_j2=stra2num(str_b);
281     pathname=fileparts(filebasesub);% CORRIGE LE 6 JUIN (ETAIT DESACTIVE)
282    filename=fullfile(pathname,dirpair(indpair).name);
283end
284
285
Note: See TracBrowser for help on using the repository browser.