source: trunk/src/read_field.m @ 397

Last change on this file since 397 was 397, checked in by sommeria, 12 years ago

civ_matlab and patch improved, changes in the management of interpolation (still in progress).
adapatation to movies (use of VideoReader?)

File size: 9.2 KB
RevLine 
[379]1
[181]2%'read_field': read input fields in different formats
3%--------------------------------------------------------------------------
4%  function [Field,ParamOut,errormsg] = read_field(ObjectName,FileType,ParamIn)
5%
6% OUTPUT:
7% Field: matlab structure representing the field
8% ParamOut: structure representing parameters:
9%        .FieldName; field name
10%        .FieldList: menu of possible fields
11%        .VelType
12%        .CivStage: stage of civx processing (=0, not Civx, =1 (civ1), =2  (fix1)....     
13%        .Npx,.Npy: for images, nbre of pixels in x and y
14% errormsg: error message, ='' by default
15%
16%INPUT
17% ObjectName: name of the input file, or movie object when the Matlab function mmreader is used
18% FileType: type of file
19%     = netcdf : netcdf file
20%     = image : usual image as recognised by Matlab
21%     = multimage: image series stored in a single file
22%     = movie: movie read with mmreader
23%     = avi: avi movie read with aviread (OBSOLETE, used only when mmreader is not available, old versions of Matlab)
24%     = vol: images representing scanned volume (images concatened in the y direction)
25% ParamIn: Matlab structure of input parameters
26%     .FieldName: name of the input field (for Civx data)
27%     .VelType: type of velocity data ('civ1', 'filter1', 'civ2'...)
28%     .ColorVar: variable used for vector color
29%     .Npx, .Npy: nbre of pixels along x and y (used for .vol input files)
[183]30function [Field,ParamOut,errormsg] = read_field(ObjectName,FileType,ParamIn,num)
[181]31Field=[];
[354]32if ~exist('num','var')
33    num=1;
34end
35if ~exist('ParamIn','var')
36    ParamIn=[];
37end
38ParamOut=ParamIn;%default
[181]39errormsg='';
[254]40if isfield(ParamIn,'VelType')
[181]41VelType=ParamIn.VelType;
[254]42end
[334]43A=[];
44%% distingush different input file types
45switch FileType
46    case {'civx','civdata','netcdf'}  %read the first nc field
[354]47%         ParamOut.FieldName=ParamIn.FieldName;
[334]48        GUIName='get_field'; %default name of the GUI get_field
49        if isfield(ParamIn,'GUIName')
50            GUIName=ParamIn.GUIName;
51        end
52        test_civx=0;
53        if ~strcmp(ParamIn.FieldName,'get_field...')% if get_field is not requested, look for Civx data
54            FieldList=calc_field;%list of possible fields for Civx data
55            ParamOut.ColorVar='';%default
56            field_index=strcmp(ParamIn.FieldName,FieldList);%look for ParamIn.FieldName in the list of possible fields for Civx data
57            if isempty(find(field_index,1))% ParamIn.FieldName is not in the list, check whether Civx data exist
[380]58                Data=nc2struct(ObjectName,'ListGlobalAttribute','Conventions','absolut_time_T0','civ','CivStage');
[334]59                % case of new civdata conventions
60                if isequal(Data.Conventions,'uvmat/civdata')
61                    ParamOut.FieldName='velocity';%Civx data found, set .FieldName='velocity' by default
62                    ParamOut.ColorVar='ima_cor';
63                    InputField=[{ParamOut.FieldName} {ParamOut.ColorVar}];
[380]64                    [Field,ParamOut.VelType,errormsg]=read_civdata(ObjectName,InputField,ParamIn.VelType,Data.CivStage);
[334]65                    test_civx=Field.CivStage;
66                    %case of old civx conventions
67                elseif ~isempty(Data.absolut_time_T0)&& ~isequal(Data.civ,0)
68                    ParamOut.FieldName='velocity';%Civx data found, set .FieldName='velocity' by default
69                    ParamOut.ColorVar='ima_cor';
70                    InputField=[{ParamOut.FieldName} {ParamOut.ColorVar}];
71                    [Field,ParamOut.VelType]=read_civxdata(ObjectName,InputField,ParamIn.VelType);
72                    test_civx=Field.CivStage;
73                    ParamOut.CivStage=Field.CivStage;
74                    % not cvix file, fields will be chosen through the GUI get_field
75                else
76                    ParamOut.FieldName='get_field...';
77                    hget_field=findobj(allchild(0),'Name',GUIName);%find the get_field... GUI
78                    if ~isempty(hget_field)
79                        delete(hget_field)%delete  get_field for reinitialisation
80                    end
81                end
82            else
83                InputField={ParamOut.FieldName};
84                if isfield(ParamIn,'ColorVar')
85                    ParamOut.ColorVar=ParamIn.ColorVar;
86                    InputField=[InputField {ParamOut.ColorVar}];
87                end
88                [Field,ParamOut.VelType,errormsg]=read_civxdata(ObjectName,InputField,ParamIn.VelType);
89                if ~isempty(errormsg)
90                    return
91                end
[236]92                test_civx=Field.CivStage;
[181]93                ParamOut.CivStage=Field.CivStage;
94            end
[334]95        end
96        if ~test_civx% read the field names on the interface get_field.
97            hget_field=findobj(allchild(0),'Name',GUIName);%find the get_field... GUI
98            if isempty(hget_field)% open the GUI get_field if it is not found
99                hget_field= get_field(ObjectName);%open the get_field GUI
100                set(hget_field,'Name',GUIName)%update the name of get_field (e.g. get_field_1)
[181]101            end
[334]102            hhget_field=guidata(hget_field);
103            %% update  the get_field GUI
104            set(hhget_field.inputfile,'String',ObjectName)
105            set(hhget_field.list_fig,'Value',1)
106            if exist('num','var')&&~isnan(num)
107                set(hhget_field.TimeIndexValue,'String',num2str(num))
[236]108            end
[334]109            funct_list=get(hhget_field.ACTION,'UserData');
110            funct_index=get(hhget_field.ACTION,'Value');
111            funct=funct_list{funct_index};%select  the current action in get_field, e;g. PLOT
112            Field=funct(hget_field); %%activate the current action selected in get_field, e;g.read the names of the variables to plot
113            Tabchar={''};%default
114            Tabcell=[];
115            set(hhget_field.inputfile,'String',ObjectName)
116            if isfield(Field,'ListGlobalAttribute')&& ~isempty(Field.ListGlobalAttribute)
117                for iline=1:length(Field.ListGlobalAttribute)
118                    Tabcell{iline,1}=Field.ListGlobalAttribute{iline};
119                    if isfield(Field, Field.ListGlobalAttribute{iline})
120                        eval(['val=Field.' Field.ListGlobalAttribute{iline} ';'])
121                        if ischar(val);
122                            Tabcell{iline,2}=val;
123                        else
124                            Tabcell{iline,2}=num2str(val);
125                        end
[181]126                    end
127                end
[334]128                if ~isempty(Tabcell)
129                    Tabchar=cell2tab(Tabcell,'=');
130                    Tabchar=[{''};Tabchar];
131                end
[181]132            end
[334]133            %set(hhget_field.attributes,'String',Tabchar);%update list of global attributes in get_field
134            ParamOut.CivStage=0;
135            ParamOut.VelType=[];
136            if isfield(Field,'TimeIndex')
137                ParamOut.TimeIndex=Field.TimeIndex;
[181]138            end
[334]139            if isfield(Field,'TimeValue')
140                ParamOut.TimeValue=Field.TimeValue;
141            end
[181]142        end
[334]143        if test_civx
144            ParamOut.FieldList=[{'image'};FieldList;{'get_field...'}];
145        else
146            ParamOut.FieldList={'get_field...'};
[227]147        end
[334]148       
[354]149    case 'video'
[334]150        try
151            A=read(ObjectName,num);
152        catch ME
[354]153            errormsg=ME.message
[334]154            return
[227]155        end
[334]156        FieldName='image';
157    case 'vol'
158        A=imread(ObjectName);
159        Npz=size(A,1)/ParamIn.Npy;
160        A=reshape(A',ParamIn.Npx,ParamIn.Npy,Npz);
161        A=permute(A,[3 2 1]);
162        FieldName='image';
163    case 'multimage'
164        A=imread(ObjectName,num);
165        FieldName='image';
166    case 'image'
167        A=imread(ObjectName);
168        FieldName='image';
169end
170%% case of image
171if ~isempty(A)
[181]172    ParamOut.FieldName='image';
173    ParamOut.FieldList={'image'};
[182]174    Npz=1;%default
[181]175    npxy=size(A);
[397]176%     Rangx=[0.5 npxy(2)-0.5]; % coordinates of the first and last pixel centers
177%     Rangy=[npxy(1)-0.5 0.5]; %
[181]178    Field.NbDim=2;%default
179    Field.AName='image';
180    Field.ListVarName={'AY','AX','A'}; %
181    if ndims(A)==3
182        if Npz==1;%color
183            Field.VarDimName={'AY','AX',{'AY','AX','rgb'}}; %
184            Field.AY=[npxy(1)-0.5 0.5];
185            Field.AX=[0.5 npxy(2)-0.5]; % coordinates of the first and last pixel centers
[182]186            ParamOut.Npx=npxy(2);% display image size on the interface
187            ParamOut.Npy=npxy(1);
[186]188            Field.VarAttribute{3}.Mesh=1;
[181]189        else
190            Field.NbDim=3;
191            Field.ListVarName=['AZ' Field.ListVarName];
192            Field.VarDimName={'AZ','AY','AX',{'AZ','AY','AX'}};
193            Field.AZ=[npxy(1)-0.5 0.5];
194            Field.AY=[npxy(2)-0.5 0.5];
195            Field.AX=[0.5 npxy(3)-0.5]; % coordinates of the first and last pixel centers
[182]196            ParamOut.Npx=npxy(3);% display image size on the interface
197            ParamOut.Npy=npxy(2);
[186]198            Field.VarAttribute{4}.Mesh=1;
[181]199        end
200    else
201        Field.VarDimName={'AY','AX',{'AY','AX'}}; %
202        Field.AY=[npxy(1)-0.5 0.5];
203        Field.AX=[0.5 npxy(2)-0.5]; % coordinates of the first and last pixel centers
[182]204        ParamOut.Npx=npxy(2);% display image size on the interface
205        ParamOut.Npy=npxy(1);
[186]206        Field.VarAttribute{3}.Mesh=1;
[181]207    end
208    Field.A=A;
209    Field.CoordUnit='pixel'; %used for mouse_motion
210end
211
212
[334]213
Note: See TracBrowser for help on using the repository browser.