Changeset 1112 for trunk/src/uvmat.m


Ignore:
Timestamp:
Jan 26, 2022, 7:37:21 PM (2 years ago)
Author:
sommeria
Message:

set_slice separated from geometrey_calib

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/uvmat.m

    r1110 r1112  
    12081208
    12091209UvData=get(handles.uvmat,'UserData');%read UvData properties stored on the uvmat interface
    1210 % check=0;
    1211 if isfield(UvData,'XmlData')&&isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord')
    1212     GeometryCalib=UvData.XmlData{1}.GeometryCalib;
    1213 else
    1214     msgbox_uvmat('ERROR','3D geometric calibration needed before defining slices')
    1215     return
    1216 end
    1217 SliceCoord=GeometryCalib.SliceCoord;
    1218 InterfaceCoord=min(SliceCoord(:,3));
    1219 if isfield(GeometryCalib,'InterfaceCoord')
    1220     InterfaceCoord=GeometryCalib.InterfaceCoord(1,3);
    1221 end
    1222 NbSlice=size(SliceCoord,1);
     1210Slice=[];
     1211if isfield(UvData,'XmlData')
     1212    if isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord')
     1213        Slice=UvData.XmlData{1}.GeometryCalib;%old convention < 2022
     1214    elseif isfield(UvData.XmlData{1},'Slice')
     1215        Slice=UvData.XmlData{1}.Slice;% new convention ( 2022)
     1216    end
     1217end
     1218% default input
     1219if ~(isfield(Slice,'SliceCoord') && size(Slice.SliceCoord,2)==3)
     1220    Slice.SliceCoord=[0 0 0];
     1221end
     1222InterfaceCoord=min(Slice.SliceCoord(:,3));
     1223if isfield(Slice,'InterfaceCoord')
     1224    InterfaceCoord=Slice.InterfaceCoord(1,3);
     1225end
     1226NbSlice=size(Slice.SliceCoord,1);
    12231227CheckVolumeScan=0;
    1224 if isfield(GeometryCalib,'CheckVolumeScan')
    1225     CheckVolumeScan=GeometryCalib.CheckVolumeScan;
     1228if isfield(Slice,'CheckVolumeScan')
     1229    CheckVolumeScan=Slice.CheckVolumeScan;
    12261230end
    12271231RefractionIndex=1.33;
    12281232CheckRefraction=0;% default value of the check box refraction
    1229 if isfield(GeometryCalib,'RefractionIndex')
    1230     RefractionIndex=GeometryCalib.RefractionIndex;
     1233if isfield(Slice,'RefractionIndex')
     1234    RefractionIndex=Slice.RefractionIndex;
    12311235    CheckRefraction=1;
    12321236end
    12331237SliceAngle=[0 0 0];
    1234 if isfield(GeometryCalib,'SliceAngle')
    1235     SliceAngle=GeometryCalib.SliceAngle;
     1238if isfield(Slice,'SliceAngle')
     1239    SliceAngle=Slice.SliceAngle;
    12361240end
    12371241
     
    12441248Bottom=ScreenSize(4)-Height-40; %put fig at top right
    12451249hfig=findobj(allchild(0),'Tag','set_slice');
    1246 if ~isempty(hfig),delete(hfig), end; %delete existing version of the GUI
    1247 hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData',GeometryCalib);
     1250if ~isempty(hfig),delete(hfig), end %delete existing version of the GUI
     1251hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData',Slice);
    12481252BackgroundColor=get(hfig,'Color');
    12491253hh=0.14; % box height (relative)
     
    12621266    'String','Z','FontUnits','points','FontSize',12,'FontWeight','bold','ForegroundColor','blue','HorizontalAlignment','right');%title
    12631267uicontrol('Style','edit','Units','normalized', 'Position', [2*ii+ww 0.95-2*ii-hh ww hh],'tag','num_Z_1','BackgroundColor',[1 1 1],...
    1264     'String',num2str(SliceCoord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box
     1268    'String',num2str(Slice.SliceCoord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box
    12651269uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+2*ww 0.95-2*ii-hh ww hh],'tag','num_Z_2','BackgroundColor',[1 1 1],...
    1266     'String',num2str(SliceCoord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box
     1270    'String',num2str(Slice.SliceCoord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box
    12671271uicontrol('Style','edit','Units','normalized', 'Position', [4*ii+3*ww 0.95-2*ii-hh ww hh],'tag','num_H','BackgroundColor',[1 1 1],...
    12681272    'String',num2str(InterfaceCoord),'Visible','off','FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_H'': z position of the water surface (=Z_1 in air)');%edit box
     
    12911295
    12921296uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-5*ii-4.2*hh ww hh],'tag','num_SliceCoord_1','BackgroundColor',[1 1 1],...
    1293     'String',num2str(SliceCoord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box
     1297    'String',num2str(Slice.SliceCoord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box
    12941298uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-6*ii-5.2*hh ww hh],'tag','num_SliceCoord_2','BackgroundColor',[1 1 1],...
    1295     'String',num2str(SliceCoord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box
     1299    'String',num2str(Slice.SliceCoord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box
    12961300
    12971301uicontrol('Style','text','Units','normalized', 'Position', [ii 0.95-5*ii-4*hh 1.3*ww hh/2],'BackgroundColor',BackgroundColor,'Tag','Angle_title_1',...
     
    13491353[RootPath,SubDir,RootFile,tild,tild,tild,tild,FileExt]=fileparts_uvmat(FileName);
    13501354XmlFile=find_imadoc(RootPath,SubDir,RootFile,FileExt);%find name of the relevant xml file
    1351 [s,errormsg]=imadoc2struct(XmlFile,'GeometryCalib');%read the xml file
    1352 if~isempty(errormsg)
    1353     msgbox_uvmat('ERROR',errormsg)
    1354     return
    1355 end
    1356 GeometryCalib=s.GeometryCalib;% get thegeometric calibration data
     1355% [s,errormsg]=imadoc2struct(XmlFile,'Slice');%read the xml file
     1356% if~isempty(errormsg)
     1357%     msgbox_uvmat('ERROR',errormsg)
     1358%     return
     1359% end
     1360% Slice=s.Slice;% get thegeometric calibration data
    13571361
    13581362%% read the content of the GUI set_slice
     
    13611365Z_plane=str2num(get(hZ,'String'));% set of Z positions explicitly entered as a Matlab vector
    13621366SliceData=read_GUI(hset_slice);
    1363 GeometryCalib.NbSlice=SliceData.NbSlice;
    1364 GeometryCalib.CheckVolumeScan=SliceData.CheckVolumeScan;
     1367Slice.NbSlice=SliceData.NbSlice;
     1368Slice.CheckVolumeScan=SliceData.CheckVolumeScan;
    13651369if numel(Z_plane)<=2
    13661370    Z_plane=linspace(SliceData.Z(1),SliceData.Z(2),SliceData.NbSlice);
     
    13681372    set(hZ,'String',num2str(Z_plane))% restitute the display qfter reqding by read_GUI
    13691373end
    1370 GeometryCalib.SliceCoord=Z_plane'*[0 0 1];
    1371 GeometryCalib.SliceCoord(:,1)=SliceData.SliceCoord(1);
    1372 GeometryCalib.SliceCoord(:,2)=SliceData.SliceCoord(2);
    1373 GeometryCalib.SliceAngle=zeros(GeometryCalib.NbSlice,3);
     1374Slice.SliceCoord=Z_plane'*[0 0 1];
     1375Slice.SliceCoord(:,1)=SliceData.SliceCoord(1);
     1376Slice.SliceCoord(:,2)=SliceData.SliceCoord(2);
     1377Slice.SliceAngle=zeros(Slice.NbSlice,3);
    13741378Angle_1=linspace(SliceData.SliceAngle_1(1),SliceData.SliceAngle_1(2),SliceData.NbSlice);
    13751379Angle_2=linspace(SliceData.SliceAngle_2(1),SliceData.SliceAngle_2(2),SliceData.NbSlice);
    1376 GeometryCalib.SliceAngle(:,1)=Angle_1';%rotation angle around x axis
    1377 GeometryCalib.SliceAngle(:,2)=Angle_2';%rotation angle around y axis
    1378 GeometryCalib.SliceAngle(:,3)=0;
     1380Slice.SliceAngle(:,1)=Angle_1';%rotation angle around x axis
     1381Slice.SliceAngle(:,2)=Angle_2';%rotation angle around y axis
     1382Slice.SliceAngle(:,3)=0;
    13791383if SliceData.CheckRefraction
    1380     GeometryCalib.InterfaceCoord=[0 0 SliceData.H];
    1381     GeometryCalib.RefractionIndex=SliceData.RefractionIndex;
    1382 elseif isfield(GeometryCalib,'RefractionIndex')
    1383     GeometryCalib=rmfield(GeometryCalib,'RefractionIndex');
    1384     GeometryCalib=rmfield(GeometryCalib,'InterfaceCoord');
     1384    Slice.InterfaceCoord=[0 0 SliceData.H];
     1385    Slice.RefractionIndex=SliceData.RefractionIndex;
     1386elseif isfield(Slice,'RefractionIndex')
     1387    Slice=rmfield(Slice,'RefractionIndex');
     1388    Slice=rmfield(Slice,'InterfaceCoord');
    13851389end
    13861390
     
    14301434                check_update=0;
    14311435            end
    1432             errormsg=update_imadoc(GeometryCalib,XmlName,'GeometryCalib');% introduce the calibration data in the xml file
     1436            errormsg=update_imadoc(Slice,XmlName,'Slice');% introduce the calibration data in the xml file
    14331437            if ~strcmp(errormsg,'')
    14341438                msgbox_uvmat('ERROR',errormsg);
     
    14461450   
    14471451    %% store the result in the xml file used for calibration
    1448     errormsg=update_imadoc(GeometryCalib,XmlFile,'GeometryCalib');% introduce the calibration data in the xml file
     1452    errormsg=update_imadoc(Slice,XmlFile,'Slice');% introduce the calibration data in the xml file
    14491453    if strcmp(errormsg,'')
    14501454        msgbox_uvmat('CONFIRMATION',['slice positions saved in ' XmlFile]);
     
    19251929                            pos(:,3)=pos(:,3)+Calib.SliceCoord(3);
    19261930                        end
    1927                         [X,Y]=px_XYZ(Calib,pos(:,1),pos(:,2),pos(:,3));
     1931                        [X,Y]=px_XYZ(Calib,Slice,pos(:,1),pos(:,2),pos(:,3));
    19281932                    end
    19291933                    flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside
     
    24792483        drawnow
    24802484        if isfield(XmlDataRead, 'GeometryCalib') && ~isempty(XmlDataRead.GeometryCalib)
    2481             XmlData.GeometryCalib=XmlDataRead.GeometryCalib;
    2482             if isfield(XmlData.GeometryCalib,'CheckVolumeScan') && isequal(XmlData.GeometryCalib.CheckVolumeScan,1)
     2485            XmlData.GeometryCalib=XmlDataRead.GeometryCalib;     
     2486        end
     2487        XmlData.Slice=XmlData.GeometryCalib;%default
     2488        if isfield(XmlDataRead, 'Slice') && ~isempty(XmlDataRead.Slice)
     2489            XmlData.Slice=XmlDataRead.Slice;
     2490            % check whether the GUI geometry_calib is opened
     2491%             hgeometry_calib=findobj('tag','geometry_calib');
     2492%             if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param
     2493%                 GUserData=get(hgeometry_calib,'UserData');
     2494%                 if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName))
     2495%                     answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?');
     2496%                     if strcmp(answer,'Yes')
     2497%                         geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib
     2498%                     end
     2499%                 end
     2500%             end
     2501        end
     2502        if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1)
    24832503                set (handles.slices,'String','volume')
    24842504            end
    2485             % check whether the GUI geometry_calib is opened
    2486             hgeometry_calib=findobj('tag','geometry_calib');
    2487             if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param
    2488                 GUserData=get(hgeometry_calib,'UserData');
    2489                 if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName))
    2490                     answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?');
    2491                     if strcmp(answer,'Yes')
    2492                         geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib
    2493                     end
    2494                 end
    2495             end
    2496         end
    24972505        if isfield(XmlDataRead, 'LIFCalib')
    24982506            XmlData.LIFCalib=XmlDataRead.LIFCalib;
     
    25712579            set(handles.TransformName,'Value',3); % phys transform by default if fixedLimits is off
    25722580        end
    2573         if isfield(GeometryCalib,'SliceCoord')
    2574            siz=size(GeometryCalib.SliceCoord);
     2581        if isfield(XmlData.Slice,'SliceCoord')
     2582           siz=size(XmlData.Slice.SliceCoord);
    25752583           if siz(1)>1
    25762584               NbSlice=siz(1);
     
    25782586               set(handles.slices,'Value',1)
    25792587           end
    2580            if isfield(GeometryCalib,'CheckVolumeScan') && isequal(GeometryCalib.CheckVolumeScan,1)
     2588           if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1)
    25812589               set(handles.num_NbSlice,'Visible','off')
    25822590           else
     
    51835191                    Y=ObjectData.Coord(:,2);
    51845192                    if testphys
    5185                         [X,Y]=px_XYZ(Calib,X,Y,0);% to generalise with 3D cases
     5193                        [X,Y]=px_XYZ(Calib,[],X,Y,0);% to generalise with 3D cases
    51865194                    end
    51875195                    flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside
Note: See TracChangeset for help on using the changeset viewer.