Code covered by the BSD License  

Highlights from
Digital Karma: State Graphing

image thumbnail
from Digital Karma: State Graphing by Aman Siddiqi
Evolutionary Simulation, Interaction Graph

structure_search.m
findandreplacevalues=inputdlg(...
{'Enter find parameters.  Read ''Find Help'' for explanation','To set search size enter one of above matrices. Not a scalar if mixed.'},...
        'Structure Search',1,{'findarea==[ ]','[ ]'});
if isempty(findandreplacevalues)==0; % means you entered something in the boxes
findexpression=findandreplacevalues{1};
findingmatrix=eval(findandreplacevalues{2});

analysis_area; changerfailed=0;
if exist('analysisarea');

save_undo;
% Keep in order
foundvaluelocations=0; foundvaluelocations2=0;
finding=multi_dimension_transpose(analysisarea);
findingmatrix2=multi_dimension_transpose(findingmatrix);
findingtemp=finding;
[findingrows, findingcolumns, findingplanes]=size(analysisarea);
findingplanessize=findingrows*findingcolumns;
[finding2rows, finding2columns, finding2planes]=size(finding);
[findingmatrixrows, findingmatrixcols, findingmatrixplanes]=size(findingmatrix2);

    
% This computes the find.  There was a one-line find for values.
% This complicated version does matricies or values.
% Rows & columns are reversed since the matrix was transposed!
% Its fixed again during selection at bottom.
% The transpose is because foundvaluelocations goes by element number,
% left to right.  And I want the search to go top to bottom. So we
% transpose everything.

for findcheckingplanes=1:finding2planes-(findingmatrixplanes-1);
    for findcheckingcol=1:finding2columns-(findingmatrixcols-1);
        for findcheckingrows=1:finding2rows-(findingmatrixrows-1);
            findarea=multi_dimension_transpose(finding(findcheckingrows:findcheckingrows+findingmatrixrows-1, findcheckingcol:findcheckingcol+findingmatrixcols-1,findcheckingplanes:findcheckingplanes+findingmatrixplanes-1));
            if findfeedbackdisplay==1; currentlyfindandselecting=1; CA_Display; end;
            for findarea3elementnum=coordinate2element_num(finding,findcheckingrows,findcheckingcol,findcheckingplanes)+findingmatrixrows:prod(size(finding));        
                findarea2coordinates=element_num2coordinate(finding,findarea3elementnum);
                findcheckingrows2=findarea2coordinates(1); findcheckingcol2=findarea2coordinates(2);
                if prod(size(findarea2coordinates))==2; findcheckingplanes2=1; else; findcheckingplanes2=findarea2coordinates(3); end;
                if (findcheckingrows2-findingmatrixrows+1>=1) & (findcheckingcol2+findingmatrixcols-1<=finding2columns) & (findcheckingplanes2+findingmatrixplanes-1<=finding2planes);
                    findarea2=multi_dimension_transpose(finding(findcheckingrows2-findingmatrixrows+1:findcheckingrows2, findcheckingcol2:findcheckingcol2+findingmatrixcols-1,findcheckingplanes2:findcheckingplanes2+findingmatrixplanes-1));
                    if eval(findexpression);
                        % section checking against
                        %findarea, findarea2, [findcheckingcol,findcheckingrows,findcheckingplanes;findcheckingcol2,findcheckingrows2,findcheckingplanes2]
                        foundvalues=multi_dimension_transpose(finding(findcheckingrows:findcheckingrows+findingmatrixrows-1, findcheckingcol:findcheckingcol+findingmatrixcols-1,findcheckingplanes:findcheckingplanes+findingmatrixplanes-1));
                        evaluate_changer;
                        if exist('changer');
                            findingtemp(findcheckingrows:findcheckingrows+findingmatrixrows-1, findcheckingcol:findcheckingcol+findingmatrixcols-1,findcheckingplanes:findcheckingplanes+findingmatrixplanes-1)=multi_dimension_transpose(changer);
                        else; changerfailed=1;
                        end;
                        % found match
                        foundvalues=multi_dimension_transpose(finding(findcheckingrows2-findingmatrixrows+1:findcheckingrows2, findcheckingcol2:findcheckingcol2+findingmatrixcols-1,findcheckingplanes2:findcheckingplanes2+findingmatrixplanes-1));
                        evaluate_changer;
                        if exist('changer');
                            findingtemp(findcheckingrows2-findingmatrixrows+1:findcheckingrows2, findcheckingcol2:findcheckingcol2+findingmatrixcols-1,findcheckingplanes2:findcheckingplanes2+findingmatrixplanes-1)=multi_dimension_transpose(changer);
                        else; changerfailed=1;
                        end;
                    end;
                end;
            end;
        end;
    end;
end;
finding=findingtemp; finding=multi_dimension_transpose(finding);


if strcmp(analysisarealabel,'matrix'); a=finding;
elseif strcmp(analysisarealabel,'selection'); 
    a(selectedoriginrow2:selectedendrow2,selectedorigincol2:selectedendcol2,selectedoriginiteration2:selectedenditeration2)=finding;
elseif strcmp(analysisarealabel,'graphed');
    if dimension==2;
        a(firstrow:firstrow+rowsshown-1,firstcolumn:firstcolumn+columnsshown-1,(currentiteration+1))=finding;
    elseif dimension==1;
        if agraphingrows<=rows;
            a(1:currentiteration+1,firstcolumn:firstcolumn+columnsshown-1)=finding;
        else;
            a(currentiteration-rows+2:currentiteration+1,firstcolumn:firstcolumn+columnsshown-1)=finding;
        end;
    end;
end;
opening_iteration; CA_Display;

else;
    errordlg('Analysis area is Selection, but nothing selected','Error');
end;

if changerfailed==1;
    errordlg('Enter ''replace with'' value or matrix in Input Box','Error');
end;

end;

Contact us at files@mathworks.com