Changeset 388 for trunk/src/proj_field.m


Ignore:
Timestamp:
Apr 6, 2012, 4:37:12 PM (12 years ago)
Author:
sommeria
Message:

several bugs corrected
file indexing, color images...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/proj_field.m

    r382 r388  
    182182    end
    183183    VarIndex=CellVarIndex{icell};%  indices of the selected variables in the list FieldData.ListVarName
    184     VarType=VarTypeCell{icell};
     184    VarType=VarTypeCell{icell};% structure defining the types of variables in the cell
    185185    ivar_X=VarType.coord_x;
    186186    ivar_Y=VarType.coord_y;
     
    211211    for ivar=VarIndex       
    212212        VarName=FieldData.ListVarName{ivar};
    213         ProjData.ListVarName=[ProjData.ListVarName {VarName}];
    214         ProjData.VarDimName=[ProjData.VarDimName {'nb_points'}];
     213        ProjData.ListVarName=[ProjData.ListVarName {VarName}];% add the current variable to the list of projected variables
     214        ProjData.VarDimName=[ProjData.VarDimName {'nb_points'}]; % projected VarName has a single dimension called 'nb_points' (set of projection points)
    215215    end
    216216    if ~test_grid
     
    236236           if isequal(length(ivar_FF),1)
    237237               FFName=FieldData.ListVarName{ivar_FF};
    238                eval(['FF=FieldData.' FFName '(indsel);'])
    239                %ind_indsel=find(~FF);
     238               FF=FieldData.(FFName)(indsel);
    240239               indsel=indsel(~FF);
    241240           end
     
    244243               VarName=FieldData.ListVarName{ivar};
    245244               if isempty(indsel)
    246                     eval(['ProjData.' VarName '(ipoint,1)=NaN;'])
     245                    ProjData.(VarName)(ipoint,1)=NaN;
    247246               else
    248                     eval(['Var=FieldData.' VarName '(indsel);'])
    249                     eval(['ProjData.' VarName '(ipoint,1)=mean(Var);'])
     247                    Var=FieldData.(VarName)(indsel);
     248                    ProjData.(VarName)(ipoint,1)=mean(Var);
    250249                    if isequal(ObjectData.ProjMode,'interp')
    251250                         ProjData.(VarName)(ipoint,1)=griddata_uvmat(coord_x(indsel),coord_y(indsel),Var,Xpoint(1),Xpoint(2));
     
    254253            end
    255254        end
    256     else
    257         %DimIndices=FieldData.VarDimIndex{VarIndex(1)};%indices of the dimensions of the first variable (common to all variables in the cell)
    258         %case of structured coordinates
     255    else    %case of structured coordinates
    259256        if  numel(VarType.coord)>=2 & VarType.coord(1:2) > 0;
    260257            AYName=FieldData.ListVarName{VarType.coord(1)};
     
    262259            eval(['AX=FieldData.' AXName ';']);% set of x positions
    263260            eval(['AY=FieldData.' AYName ';']);% set of y positions 
    264             AName=FieldData.ListVarName{VarIndex(1)};
     261            AName=FieldData.ListVarName{VarIndex(1)};% a single variable assumed in the current cell
    265262            eval(['A=FieldData.' AName ';']);% scalar
    266             npxy=size(A);
    267 
    268 % %             nbcolor=1; %default
    269 %             for idim=1:length(ListDimName)
    270 %                 DimName=ListDimName{idim};
    271 %                 if isequal(DimName,'rgb')|isequal(DimName,'nb_coord')|isequal(DimName,'nb_coord_i')
    272 %                    nbcolor=npxy(idim);
    273 %                    DimIndices(idim)=[];
    274 %                    npxy(idim)=[];
    275 %                 end
    276 %                 if isequal(DimName,'nb_coord_j')% NOTE: CASE OF TENSOR NOT TREATED
    277 %                     DimIndices(idim)=[];
    278 %                     npxy(idim)=[];
    279 %                 end
    280 %             end 
    281             ind_1=find(npxy==1);
    282             %DimIndices(ind_1)=[]; %suppress singleton dimensions
    283 %             indxy=find(DimVarIndex(DimIndices));%select dimension variables (DimIndices non zero)
    284             %NbDim=length(DimIndices)%number of space dimensions
    285             NbDim=numel(VarType.coord);
    286             Coord_z=[];
    287             Coord_y=[];
    288             Coord_x=[];   
     263            npxy=size(A);       
     264            NbDim=numel(VarType.coord(VarType.coord>0));%number of space dimensions
     265            %update VarDimName in case of components (non coordinate dimensions e;g. color components)
     266            if numel(npxy)>NbDim
     267                ProjData.VarDimName{end}={'nb_points','component'};
     268            end
    289269            for idim=1:NbDim %loop on space dimensions
    290270                test_interp(idim)=0;%test for coordiate interpolation (non regular grid), =0 by default
    291271                test_coord(idim)=0;%test for defined coordinates, =0 by default
    292                 %ivar=DimVarIndex(DimIndices(idim));% index of the variable corresponding to the current dimension
    293272                ivar=VarType.coord(idim);
    294 %                 if ~isequal(ivar,0)%  a variable corresponds to the current dimension
    295                     eval(['Coord{idim}=FieldData.' FieldData.ListVarName{ivar} ';']) ;% position for the first index
    296                     if numel(Coord{idim})==2
    297                        DCoord_min(idim)= (Coord{idim}(2)-Coord{idim}(1))/(npxy(idim)-1);
    298                     else
    299                         DCoord=diff(Coord{idim});
    300                         DCoord_min(idim)=min(DCoord);
    301                         DCoord_max=max(DCoord);
    302                         test_direct(idim)=DCoord_max>0;% =1 for increasing values, 0 otherwise
    303                         test_direct_min=DCoord_min(idim)>0;% =1 for increasing values, 0 otherwise
    304                         if ~isequal(test_direct(idim),test_direct_min)
    305                             errormsg=['non monotonic dimension variable # ' num2str(idim)  ' in proj_field.m'];
    306                                     return
    307                         end               
    308                         test_interp(idim)=(DCoord_max-DCoord_min(idim))> 0.0001*abs(DCoord_max);% test grid regularity
    309                         test_coord(idim)=1;
    310                     end
    311 %                 else  % no variable associated with the first dimension, look fo variable  attributes Coord_1, _2 or _3
    312 %                     Coord_i_str=['Coord_' num2str(idim)];
    313 %                     DCoord_min(idim)=1;%default
    314 %                     Coord{idim}=[0.5 npxy(idim)];
    315 %                     test_direct(idim)=1;
    316 %                 end
     273                Coord{idim}=FieldData.(FieldData.ListVarName{ivar}); % position for the first index
     274                if numel(Coord{idim})==2
     275                    DCoord_min(idim)= (Coord{idim}(2)-Coord{idim}(1))/(npxy(idim)-1);
     276                else
     277                    DCoord=diff(Coord{idim});
     278                    DCoord_min(idim)=min(DCoord);
     279                    DCoord_max=max(DCoord);
     280                    test_direct(idim)=DCoord_max>0;% =1 for increasing values, 0 otherwise
     281                    test_direct_min=DCoord_min(idim)>0;% =1 for increasing values, 0 otherwise
     282                    if ~isequal(test_direct(idim),test_direct_min)
     283                        errormsg=['non monotonic dimension variable # ' num2str(idim)  ' in proj_field.m'];
     284                        return
     285                    end
     286                    test_interp(idim)=(DCoord_max-DCoord_min(idim))> 0.0001*abs(DCoord_max);% test grid regularity
     287                    test_coord(idim)=1;
     288                end
    317289            end
    318290            DX=DCoord_min(2);
     
    343315                    %[I,J]=meshgrid([1:j_int],[1:i_int]);
    344316                    for ivar=VarIndex   
    345                         eval(['Avalue=FieldData.' FieldData.ListVarName{ivar} '(j_int,i_int,:);']);
    346                         eval(['ProjData.' FieldData.ListVarName{ivar} '(ipoint,:)=mean(mean(Avalue));']);
     317                        Avalue=FieldData.(FieldData.ListVarName{ivar})(j_int,i_int,:);
     318                        ProjData.(FieldData.ListVarName{ivar})(ipoint,:)=mean(mean(Avalue));
    347319                    end
    348320                end
     
    445417        eval(['AY=FieldData.' AYName ';'])% y coordinate
    446418        VarName=FieldData.ListVarName{VarIndex(1)};
    447         eval(['DimValue=size(FieldData.' VarName ');'])
     419        DimValue=size(FieldData.(VarName));
    448420       if length(AX)==2
    449421           AX=linspace(AX(1),AX(end),DimValue(2));
     
    460432%         AX=linspace(Coord{2}(1),Coord{2}(2),DimValue(2));
    461433%         AY=linspace(Coord{1}(1),Coord{1}(2),DimValue(1));  %TODO : 3D case
    462         testcolor=find(numel(DimValue)==3);
     434%         testcolor=find(numel(DimValue)==3);
    463435        if length(DimValue)==3
    464436            testcolor=1;
     
    475447        for ivar=1:length(VarIndex)
    476448            VarName=FieldData.ListVarName{VarIndex(ivar)};
    477             eval(['FieldData.' VarName '=reshape(FieldData.' VarName ',npxy(1)*npxy(2),npxy(3));']); % keep only non false vectors
     449            FieldData.(VarName)=reshape(FieldData.(VarName),npxy(1)*npxy(2),npxy(3)); % keep only non false vectors
    478450        end
    479451    end
     
    526498        if testproj(ivar)
    527499            VarName=FieldData.ListVarName{ivar};
    528             eval(['ProjData.' VarName 'Mean=mean(mean(double(FieldData.' VarName '(indsel,:))));']); % keep only non false vectors
    529             eval(['ProjData.' VarName 'Min=min(min(double(FieldData.' VarName '(indsel,:))));']); % keep only non false vectors
    530             eval(['ProjData.' VarName 'Max=max(max(double(FieldData.' VarName '(indsel,:))));']); % keep only non false vectors
     500            ProjData.([VarName 'Mean'])=mean(double(FieldData.(VarName)(indsel,:))); % take the mean in the selected region, for each color component
     501            ProjData.([VarName 'Min'])=min(double(FieldData.(VarName)(indsel,:))); % take the min in the selected region , for each color component 
     502            ProjData.([VarName 'Max'])=max(double(FieldData.(VarName)(indsel,:))); % take the max in the selected region , for each color component
    531503            if isequal(Mesh(ivar),0)
    532                 eval(['[ProjData.' VarName 'Histo,ProjData.' VarName ']=hist(double(FieldData.' VarName '(indsel,:)),100);']); % default histogram with 100 bins
     504                eval(['[ProjData.' VarName 'Histo,ProjData.' VarName ']=hist(double(FieldData.' VarName '(indsel,:,:)),100);']); % default histogram with 100 bins
    533505            else
    534506                eval(['ProjData.' VarName '=(ProjData.' VarName 'Min+Mesh(ivar)/2:Mesh(ivar):ProjData.' VarName 'Max);']); % list of bin values
     
    537509            ProjData.ListVarName=[ProjData.ListVarName {VarName} {[VarName 'Histo']} {[VarName 'Mean']} {[VarName 'Min']} {[VarName 'Max']}];
    538510            if test_Amat && testcolor
    539                  ProjData.VarDimName=[ProjData.VarDimName  {VarName} {{VarName,'rgb'}} {'rgb'}];%{{'nb_point','rgb'}};
     511                 ProjData.VarDimName=[ProjData.VarDimName  {VarName} {{VarName,'rgb'}} {'rgb'} {'rgb'} {'rgb'}];%{{'nb_point','rgb'}};
    540512            else
    541                ProjData.VarDimName=[ProjData.VarDimName {VarName} {VarName} {'nbpoint'} {'nbpoint'} {'nbpoint'}];
     513               ProjData.VarDimName=[ProjData.VarDimName {VarName} {VarName} {'one'} {'one'} {'one'}];
    542514            end
    543515            ProjData.VarAttribute=[ProjData.VarAttribute FieldData.VarAttribute{ivar} {[]} {[]} {[]} {[]}];
Note: See TracChangeset for help on using the changeset viewer.