fFRI algorithm.
Input: atoms(N) | ▷ XYZ coordinates from PDB file |
mincoor ← minval(atoms) | ▷ Compute dimensions of bounding box |
maxcoor ← maxval(atoms) | |
R ← boxsize | ▷ Set size of grid |
Nbox ← ceiling((maxcoor − mincoor)/R) | ▷ Compute number of boxes in each direction |
for ii ← 1, Natoms do | |
i, j, k ← ceiling((atoms(ii) − mincoor)/R) | ▷ Count the number of atoms in each box |
Natoms(i, j, k) ← Natoms(i, j, k) + 1 | |
end for | |
for k ← 1, Nbox[3] do | |
for j ← 1, Nbox[2] do | |
for i ← 1, Nbox[1] do | |
allocate(box(i, j, k)) | ▷ Allocate space for each box |
end for | |
end for | |
end for | |
for ii ← 1, Natoms do | ▷ Copy coordinates to appropriate box based on 3D coordinates |
i, j, k ← ceiling((atoms(ii) − mincoor)/R) | |
box(i, j, k) ← atoms(ii) | |
end for | |
for k ← 1, Nbox[3] do | ▷ Iterate over boxes |
for j ← 1, Nbox[2] do | |
for i ← 1, Nbox[1] do | |
for na ← 1, Natoms(i, j, k) do | ▷ Iterate over atoms in current box |
for n ← k − 1, k + 1 do | ▷ Iterate over adjacent boxes |
for m ← j − 1, j + 1 do | |
for l ← i − 1, i + 1 do | |
for nb ← 1, Natoms(l, m, n) do | ▷ Iterate over atoms in adjacent boxes |
dist ← distance(box(i, j, k)(na), box(l, m, n)(nb)) | |
FRI(na) ← kernel(dist) | |
end for | |
end for | |
end for | |
end for | |
end for | |
end for | |
end for | |
end for |