Changeset 1045 for trunk/src/get_field.m


Ignore:
Timestamp:
May 21, 2018, 7:06:45 PM (6 years ago)
Author:
sommeria
Message:

find field cells improved

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/get_field.m

    r1040 r1045  
    135135    return
    136136end
    137 [Field.MaxDim,imax]=max(NbDim);
     137if isempty(CellInfo)
     138    Field.MaxDim=max(cellfun(@numel,Field.Display.VarDimName));
     139    check_cellinfo=false;
     140else
     141    [Field.MaxDim,imax]=max(NbDim);
     142    check_cellinfo=true;
     143end
    138144
    139145%% set time mode
     
    210216%% set default field options
    211217checknbdim=cellfun('size',Field.Display.VarDimName,2);
    212 if max(checknbdim)<=1
    213     Field.MaxDim=1;% only 1D fields, considered as a time series by default
    214 end
     218% if max(checknbdim)<=1
     219%     Field.MaxDim=1;% only 1D fields, considered as a time series by default
     220% end
    215221if Field.MaxDim>=2 && ~checkseries% case of 2D (or 3D) fields
    216222    check_vec_input=0;
     223    % case of vector initially selected from uvmat input
    217224    if isfield(ParamIn,'vector_x')&& isfield(ParamIn,'vector_y')
    218225        ichoice_x=find(strcmp(ParamIn.vector_x,Field.Display.ListVarName),1);
     
    224231        end
    225232    end
    226     if ~check_vec_input && isfield(CellInfo{imax},'VarIndex_vector_x') &&  isfield(CellInfo{imax},'VarIndex_vector_y')
     233    % otherwise select vectors marked as attributes in the input field
     234    if check_cellinfo && ~check_vec_input && isfield(CellInfo{imax},'VarIndex_vector_x') &&  isfield(CellInfo{imax},'VarIndex_vector_y')
    227235        set(handles.vector_x,'UserData',CellInfo{imax}.VarIndex_vector_x(1))
    228236        set(handles.vector_y,'UserData',CellInfo{imax}.VarIndex_vector_y(1))
     
    252260
    253261%% Make choices of coordinates from input
    254 if isfield(CellInfo{imax},'CoordIndex')
    255     CoordIndex=CellInfo{imax}.CoordIndex;
    256     if numel(CoordIndex)==2
    257         if isfield(ParamIn,'Coord_x')&& isfield(ParamIn,'Coord_y')
    258             YName=ParamIn.Coord_y;
    259             XName=ParamIn.Coord_x;
    260         else
    261         YName=Field.ListVarName{CoordIndex(1)};
    262         XName=Field.ListVarName{CoordIndex(2)};
    263         end
    264         ListCoord=get(handles.Coord_x,'String');
    265         XIndex=find(strcmp(XName,ListCoord));
    266         if ~isempty(XIndex)
    267             set(handles.Coord_x,'Value',XIndex)
    268         end
    269         YIndex=find(strcmp(YName,ListCoord));
    270         if ~isempty(YIndex)
    271             set(handles.Coord_y,'Value',YIndex)
    272         end
    273     end
    274 end
     262%     check_menu=false(1,numel(Data.ListVarName));
     263%     ListCoordMenu=1:numel(Data.ListVarName);
     264%     CoordIndex=CellInfo{icell}.CoordIndex(CellInfo{icell}.CoordIndex~=0);
     265%
     266%             for ivar=find(check_coord_names)
     267%                 check_dim=strcmp(Data.VarDimName{ivar},DimCell_var);
     268%                 if ~isempty(find(check_dim))
     269%                     check_menu(ivar)=true;
     270%                 end
     271%             end
     272%             CellInfo{icell}.CoordMenu=[CoordIndex find(check_menu)];
     273%             ListCoordMenu(CoordIndex)=[];
     274%             for ivar=ListCoordMenu
     275%                 DimCell=Data.VarDimName{ivar};
     276%                 if isequal(DimCell,DimCell_var)
     277%                     check_menu(ivar)=true;
     278%                 end
     279%             end
     280%             CellInfo{icell}.CoordMenu=[CellInfo{icell}.CoordMenu find(check_menu)];
     281%
     282% if isfield(CellInfo{imax},'CoordIndex')
     283%     CoordIndex=CellInfo{imax}.CoordIndex;
     284%     if numel(CoordIndex)==2
     285%         if isfield(ParamIn,'Coord_x')&& isfield(ParamIn,'Coord_y')
     286%             YName=ParamIn.Coord_y;
     287%             XName=ParamIn.Coord_x;
     288%         else
     289%         YName=Field.ListVarName{CoordIndex(1)};
     290%         XName=Field.ListVarName{CoordIndex(2)};
     291%         end
     292%         ListCoord=get(handles.Coord_x,'String');
     293%         XIndex=find(strcmp(XName,ListCoord));
     294%         if ~isempty(XIndex)
     295%             set(handles.Coord_x,'Value',XIndex)
     296%         end
     297%         YIndex=find(strcmp(YName,ListCoord));
     298%         if ~isempty(YIndex)
     299%             set(handles.Coord_y,'Value',YIndex)
     300%         end
     301%     end
     302% end
    275303
    276304%% put the GUI on the lower right of the sceen
     
    304332% --- Activated by selection in the list of variables
    305333% ----------------------------------------------------------------------
    306 function variables_Callback(hObject, eventdata, handles)
     334function variables_Callback(hObject, VarName, handles)
    307335
    308336Tabchar={''};%default
     
    388416end
    389417
    390 %% propose a plot by default if a variable has been selected
    391 if ~isequal(index,1)
     418%% propose a plot by default if variables_Callback has not been already called by FieldOption_Callback (VarName is not a char string)
     419if ~ischar(VarName) && ~isequal(index,1)
    392420    if numel(DimCell)==1
    393421        set(handles.FieldOption,'Value',1)%propose 1D plot
     
    412440FieldOption=FieldList{get(handles.FieldOption,'Value')};
    413441switch FieldOption
    414    
    415442    case '1D plot'
    416443        set(handles.Coordinates,'Visible','on')
     
    423450        set(handles.PanelScalar,'Visible','off')
    424451        set(handles.PanelVectors,'Visible','off')
    425         set(handles.Coord_y,'Visible','off')
    426         set(handles.Y_title,'Visible','off')
     452        set(handles.Coord_y,'Visible','on')
     453        set(handles.Y_title,'Visible','on')
    427454        set(handles.Coord_z,'Visible','off')
    428455        set(handles.Z_title,'Visible','off')
    429         ordinate_Callback(hObject, VarName, handles)
    430        
     456        %ordinate_Callback(hObject, VarName, handles)       
    431457    case {'scalar'}
    432458        set(handles.Coordinates,'Visible','on')
     
    440466        set(handles.PanelScalar,'Position',pos)
    441467        set(handles.Coord_y,'Visible','on')
    442         set(handles.Y_title,'Visible','on')
    443        
    444         if ~ischar(VarName)
    445            
    446         %default scalar selection
    447         test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante
    448         for ilist=1:numel(Field.Display.VarDimName)
    449             if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ilist && isfield(Field.Display.VarAttribute{ilist},'Role')
    450                 Role=Field.Display.VarAttribute{ilist}.Role;
    451                 if strcmp(Role,'coord_x')||strcmp(Role,'coord_y')
     468        set(handles.Y_title,'Visible','on')     
     469        if ~ischar(VarName)     
     470            %default scalar selection
     471            test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante
     472            for ilist=1:numel(Field.Display.VarDimName)
     473                if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ilist && isfield(Field.Display.VarAttribute{ilist},'Role')
     474                    Role=Field.Display.VarAttribute{ilist}.Role;
     475                    if strcmp(Role,'coord_x')||strcmp(Role,'coord_y')
     476                        test_coord(ilist)=1;
     477                    end
     478                end
     479                dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist
     480                if numel(dimnames)==1 && strcmp(dimnames{1},Field.Display.ListVarName{ilist})%dimension variable
    452481                    test_coord(ilist)=1;
    453482                end
    454483            end
    455             dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist
    456             if numel(dimnames)==1 && strcmp(dimnames{1},Field.Display.ListVarName{ilist})%dimension variable
    457                 test_coord(ilist)=1;
    458             end
    459         end
    460         scalar_index=find(~test_coord,1);%get the first variable not a coordinate
    461         if isempty(scalar_index)
    462             set(handles.scalar,'Value',1)
    463         else
    464             set(handles.scalar,'Value',scalar_index)
    465         end     
    466         end
    467         scalar_Callback(hObject,VarName, handles)
    468        
    469              
     484            scalar_index=find(~test_coord,1);%get the first variable not a coordinate
     485            if isempty(scalar_index)
     486                set(handles.scalar,'Value',1)
     487            else
     488                set(handles.scalar,'Value',scalar_index)
     489            end
     490        end
     491        scalar_Callback(hObject,VarName, handles)       
    470492    case 'vectors'
    471493        set(handles.PanelVectors,'Visible','on')
     
    509531            end
    510532        end
    511         vector_Callback(handles)
    512        
     533        vector_Callback(handles)     
    513534    case 'civdata...'
    514535        set(handles.PanelOrdinate,'Visible','off')
     
    576597        end
    577598    end
    578     set(handles.Coord_x,'Value',coord_val)
    579 end
    580 set(handles.Coord_x,'String',ListCoord)
     599    set(handles.Coord_x,'Value',coord_val+1)
     600end
     601set(handles.Coord_x,'String',[{''}; ListCoord])
    581602
    582603
     
    611632function scalar_Callback(hObject, VarName, handles)
    612633
    613 Field=get(handles.get_field,'UserData');
    614 scalar_menu=get(handles.scalar,'String');
    615 if ischar(VarName)
     634Field=get(handles.get_field,'UserData');% get the input field info stored in UserData of the GUI
     635scalar_menu=get(handles.scalar,'String');% read the menu for scalar selection
     636if ischar(VarName)% case of a call with input variable
    616637    ScalarName=VarName;
    617638    scalar_index=find(strcmp(VarName,scalar_menu));
    618     set(handles.scalar,'Value',scalar_index)
    619 else
     639    set(handles.scalar,'Value',scalar_index)% select the input variable field in the menu
     640else % no input variable, the variable ScalarName is selected from the menu
    620641    scalar_index=get(handles.scalar,'Value');
    621642        ScalarName=scalar_menu{scalar_index};
     
    626647test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante
    627648dim_var=Field.Display.VarDimName{scalar_index};%list of dimensions of the selected variable
    628 if ~get(handles.CheckDimensionX,'Value') 
     649%if ~get(handles.CheckDimensionX,'Value') 
    629650    %look for coordinate variables among the other variables
    630651    for ilist=1:numel(Field.Display.VarDimName)
     
    636657        end
    637658    end
    638 end
     659%end
    639660var_component=find(test_component);% list of variable indices elligible as unstructured coordinates
    640 var_coord=find(test_coord);% % list of variable indices elligible as structured coordinates
     661var_coord=find(test_coord);% % list of variable indices elligible as gridded coordinates
    641662var_coord(var_coord==scalar_index)=[];
    642663var_component(var_component==scalar_index)=[];
     
    664685        elseif strcmp(Role,'coord_y')
    665686            coord_val(2)=ilist;
    666             elseif strcmp(Role,'coord_z')
     687        elseif strcmp(Role,'coord_z')
    667688            coord_val(3)=ilist;
     689            Check3D=1;
    668690        end
    669691    end
     
    679701    end
    680702end
    681 if  get(handles.CheckDimensionX,'Value')
    682     set(handles.Coord_x,'Value',2)
    683     set(handles.Coord_x,'String',dim_var')
    684 else
     703% if  get(handles.CheckDimensionX,'Value')
     704%     set(handles.Coord_x,'Value',2)
     705%     set(handles.Coord_x,'String',dim_var')
     706% else
    685707    set(handles.Coord_x,'Value',coord_val(1))
    686708    set(handles.Coord_x,'String',ListCoord)
    687 end
    688 if  get(handles.CheckDimensionX,'Value')
    689     set(handles.Coord_y,'Value',1)
    690     set(handles.Coord_y,'String',dim_var')
    691 else
     709% end
     710% if  get(handles.CheckDimensionX,'Value')
     711%     set(handles.Coord_y,'Value',1)
     712%     set(handles.Coord_y,'String',dim_var')
     713% else
    692714    set(handles.Coord_y,'Value',coord_val(2))
    693715    set(handles.Coord_y,'String',ListCoord)
    694 end
    695 if  get(handles.CheckDimensionX,'Value')
    696     set(handles.Coord_z,'Value',1)
    697     set(handles.Coord_z,'String',dim_var')
    698 else
     716% end
     717% if  get(handles.CheckDimensionX,'Value')
     718%     set(handles.Coord_z,'Value',1)
     719%     set(handles.Coord_z,'String',dim_var')
     720% else
     721if numel(test_coord)>=3
    699722    set(handles.Coord_z,'Value',coord_val(2))
    700723    set(handles.Coord_z,'String',ListCoord)
     724    set(handles.Coord_z,'Visible','on')
     725    set(handles.Check3D,'Value', 1)
    701726end
    702727
     
    911936string=get(handles.Coord_y,'String');
    912937VarName=string{index};
     938
    913939if ~ischar(DimCell)
    914940update_field(handles,VarName)
     
    9921018if ~isempty(index)
    9931019    set(handles.variables,'Value',index+1)
    994     variables_Callback(handles.variables, [], handles)
     1020    variables_Callback(handles.variables, VarName, handles)
    9951021end
    9961022
     
    10221048
    10231049% --- Executes on button press in CheckDimensionY.
    1024 function CheckDimensionX_Callback(hObject, eventdata, handles)
    1025 CheckDimensionX=get(handles.CheckDimensionX,'value')
    1026 if CheckDimensionX
    1027     set(handles.Coordinates,'visible','off')
    1028 else
    1029     set(handles.Coordinates,'visible','on')
    1030 end
     1050% function CheckDimensionX_Callback(hObject, eventdata, handles)
     1051% CheckDimensionX=get(handles.CheckDimensionX,'value')
     1052% if CheckDimensionX
     1053%     set(handles.Coordinates,'visible','off')
     1054% else
     1055%     set(handles.Coordinates,'visible','on')
     1056% end
    10311057% FieldList=get(handles.FieldOption,'String');
    10321058% FieldOption=FieldList{get(handles.FieldOption,'Value')};
Note: See TracChangeset for help on using the changeset viewer.