Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions package/MDAnalysis/lib/_cutil.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ def make_whole(atomgroup, reference_atom=None):
.. versionadded:: 0.11.0
"""
cdef intset agset, refpoints, todo, done
cdef int i, nloops, ref, atom, other
cdef int i, nloops, ref, atom, other, first
cdef intmap bonding
cdef int[:, :] bonds
cdef float[:, :] oldpos, newpos
Expand All @@ -176,8 +176,9 @@ def make_whole(atomgroup, reference_atom=None):
cdef float inverse_box[3]
cdef double vec[3]

first = atomgroup[0].index
if reference_atom is None:
ref = atomgroup[0].index
ref = first
else:
# Sanity check
if not reference_atom in atomgroup:
Expand Down Expand Up @@ -228,7 +229,7 @@ def make_whole(atomgroup, reference_atom=None):
# initially we have one starting atom whose position we trust
refpoints.insert(ref)
for i in range(3):
newpos[ref, i] = oldpos[ref, i]
newpos[ref - first, i] = oldpos[ref - first, i]

nloops = 0
while refpoints.size() < agset.size() and nloops < agset.size():
Expand All @@ -244,15 +245,15 @@ def make_whole(atomgroup, reference_atom=None):
continue
# Draw vector from atom to other
for i in range(3):
vec[i] = oldpos[other, i] - oldpos[atom, i]
vec[i] = oldpos[other - first, i] - oldpos[atom - first, i]
# Apply periodic boundary conditions to this vector
if ortho:
minimum_image(&vec[0], &box[0], &inverse_box[0])
else:
minimum_image_triclinic(&vec[0], <coordinate*>&tri_box[0])
# Then define position of other based on this vector
for i in range(3):
newpos[other, i] = newpos[atom, i] + vec[i]
newpos[other - first, i] = newpos[atom - first, i] + vec[i]

# This other atom can now be used as a reference point
refpoints.insert(other)
Expand Down