function out = ArenaPathsSim(numSims,simSteps,headingDrift,bias,visualizationFlag) bodyLength = 2.5; % convert units to body length R=25.4/bodyLength; out.X=zeros(simSteps,numSims); out.Y=zeros(simSteps,numSims); out.inROI=zeros(simSteps,numSims); out.tmd=zeros(simSteps,numSims); speed=1/bodyLength; reflectEpsilon=0.05*2*pi; for i=1:numSims r=Inf; while r>R x=(rand()*2*R-R); y=(rand()*2*R-R); [~, r]=cart2pol(x,y); end heading=rand()*2*pi; for t=1:simSteps [th, ~]=cart2pol(x,y); th=mod(th,2*pi); deltaHeading=randn()*2*pi*headingDrift+bias; heading=mod(heading+deltaHeading,2*pi); newPosX=x+speed*cos(heading); newPosY=y+speed*sin(heading); [~, newr]=cart2pol(newPosX,newPosY); if newr>R %wall colision deltaThetas=linspace(-pi,pi,200); deltaThetaPDF=normpdf(deltaThetas,0,headingDrift); thetaBool=abs(angdiff(deltaThetas,th-heading)) 10^-100; deltaThetaCDF=cumsum(deltaThetaPDF); deltaThetaIndex=sum(rand > [0 , deltaThetaCDF(1:end-1)]); heading=heading+deltaThetas(deltaThetaIndex); elseif rand()0),out.Y(out.tmdMasked>0),'r.'); scatter(out.X(out.tmdMasked<0),out.Y(out.tmdMasked<0),'b.'); figure bar(out.binCenters,out.histogramFrequencyMasked) end end end