function rsim=ConnLocGaussian(n,distfunc,sigmaG)
% Calculates whole connectivity matrix
%this is a version that is slightly quicker than the  GaussianLocConnFunc
%at higher n>100...does the same though!
% ARGS:
% n = length and width of the grid;
% distfunc = @distSheet (to calculate euclidian dist)
% steepness = steepness of the function #conn/#all.possible.conn over
% distance
% RETURNS:
% rsim = sparse connectivity matrix

%check if matlabpool is open and if not then open it
if  matlabpool('size') == 0
    matlabpool
end

% width of the square
nsub=n^2;


%lay out coordinates
[coordx,coordy] = meshgrid(1:n,1:n);
coorx=reshape(coordx,nsub,1);
coory=reshape(coordy,nsub,1);

% Calculate the locations of the sparse elements
%for i=1:nsub
% make sparse matrix

rsim=sparse(nsub,nsub);
for i=1:nsub
    % call distfinc (i.e. sheet, torus etc
    distM=(distfunc([coorx(i) coory(i)],[coorx coory]));                    %gets all the distances from all other points to current point
    p=exp(-distM.^2./(2*sigmaG^2));%generate gaussian
    p(distM==0)=0;%no self connection
    p=p/max(p);%renormalise
    pindex=find(p>0.022);%cut off unconnected ones
    pV=rand(size(pindex));
    pConn=p(pindex)>pV;
    
    
    indTo=pindex(pConn);
    indTo=indTo(indTo~=i);
    
    rsim=rsim+sparse(indTo,i,1,nsub,nsub);

    
end

rsim(rsim>0)=1;

end