I have been given a file from an older mathmatica version and my task is to get it working in mathmatica 13.3. While using the //Echo, I noticed that the code below is not computing the values for the variables, but just passing off a place holder and giving error messages. I am struggling to understand why that is and how to fix it. This module should function as the main algorithm for a heap sorting and fast marching on a rasterized image. I would appreciate any assistance or advice
findDistances {bandheap,len=Length[ll],wid=Length[ll[[1]]],hsize,hindex=0,distancetable,statetable,frozen=-1.,far=300.,band=0.,outofbounds=1000.,dist,maxpixval=255.,minpixval=0.,midpixval,heaptable,j1,j2,nbrs,pt,x,y,x1,y1,x2,y2,next,prev,done}, (Make sure everything in here is intuallzed and called correctlly) (Initializations.)
midpixval=(maxpixval-minpixval); distancetable =Map[If[#>midpixval,maxpixval,minpixval]&,ll,{2}]; statetable=Map[If[#1>1,far,frozen]&,distancetable,{2}]; heaptable=Table[0,{len},{wid}]; hsize=len*wid; bandheap=Table[{0.,0.,0.},{hsize}];
(Initialize the band by placing all neighbors of frozen cells thereon.) Do[ If[statetable[[ii,jj]]=!=frozen,Continue[]]; nbrs={{ii,jj+1},{ii,jj-1},{ii-1,jj},{ii+1,jj}};
Do[ {x,y}=nbrs[[kk]]; If[! (0<x<=len&&0<y<=wid&&Echo[statetable[[x,y]]]==far),Continue[]]; hindex++; statetable[[x,y]]=band; dist=newDistance[x,y,statetable,distancetable]; distancetable[[x,y]]=dist; bandheap[[hindex]]={dist,N[x],N[y]}; j1=hindex;
(Place each neighbor to the frozen cell on the end of the band heap. Then move it upward to the appropriate location.) While[ (j2=Floor[j1/2])>=1&&bandheap[[j2,1]]>bandheap[[j1,1]], bandheap[[{j1,j2}]]=bandheap[[{j2,j1}]]; {x1,y1}=Round[Rest[bandheap[[j1]]]]; heaptable[[x1,y1]]=j1; j1=j2; ]; heaptable[[x,y]]=j1, {kk,Length[nbrs]} ], {ii,len},{jj,wid} ];
While[hindex>0, pt=bandheap[[1]]; (Get smallest element in heap and freeze it.) {x,y}=Round[Rest[pt]]; statetable[[x,y]]=frozen;
(Replace with last element in heap,then rearrange by moving it downward to restore the heap ordering property.) bandheap[[1]]=bandheap[[hindex]]; done=False; prev=1; {j1,j2}=2*prev+{0,1};
While[j1<hindex&&!done, If[j2<hindex, next=If[bandheap[[j1,1]]<=bandheap[[j2,1]],j1,j2], next=j1 ];
If[bandheap[[prev,1]]>bandheap[[next,1]],(Swap? If not, we are done.) bandheap[[{prev,next}]]=bandheap[[{next,prev}]]; {x1,y1}=Round[Rest[bandheap[[prev]]]]; heaptable[[x1,y1]]=prev; prev=next; {j1,j2}=2*prev+{0,1} ,(else) done=True,done=True ]; ]; {x1,y1}=Round[Rest[bandheap[[prev]]]]; heaptable[[x1,y1]]=prev;
(Find neighbors of the removed point that were already in the band, update their distances, and move them to new locations in the band heap as needed.) nbrs={{x,y+1},{x,y-1},{x-1,y},{x+1,y}}; Do[ {x2,y2}=nbrs[[kk]]; If[! (0<x2<=len&&0<y2<=wid&&statetable[[x2,y2]]==band),Continue[]]; dist=newDistance[x2,y2,statetable,distancetable]; distancetable[[x2,y2]]=dist; (Find position of neighbor in heap. Change its value to reflect new distance.) j1=heaptable[[x2,y2]]; bandheap[[j1]]={dist,N[x2],N[y2]};
(The new distance is no larger than the old, so it can only move upward (that is, we iteratively compare to parent and swap if it is smaller).) While[(j2=Floor[j1/2])>=1&&bandheap[[j2,1]]>bandheap[[j1,1]], bandheap[[{j1,j2}]]=bandheap[[{j2,j1}]]; {x1,y1}=Round[Rest[bandheap[[j1]]]]; heaptable[[x1,y1]]=j1; j1=j2; ]; heaptable[[x2,y2]]=j1 , {kk,Length[nbrs]} ];
hindex--;
(Find neighbors of the removed point that are not already in the band, and place them there.) Do[ {x2,y2}=nbrs[[kk]]; If[! (0<x2<=len&&0<y2<=wid&&statetable[[x2,y2]]==far),Continue[]]; hindex++; statetable[[x2,y2]]=band; dist=newDistance[x2,y2,statetable,distancetable]; distancetable[[x2,y2]]=dist; bandheap[[hindex]]={dist,N[x2],N[y2]}; j1=hindex;
(Place each neighbor on the band heap and move upward to the appropriate location.) While[ (j2=Floor[j1/2])>=1&&bandheap[[j2,1]]>bandheap[[j1,1]], bandheap[[{j1,j2}]]=bandheap[[{j2,j1}]]; {x1,y1}=Round[Rest[bandheap[[j1]]]]; heaptable[[x1,y1]]=j1; j1=j2; ]; heaptable[[x2,y2]]=j1, {kk,Length[nbrs]} ];
]; distancetable ]