Example M4: Finding overlapping particles¶
This example shows how to write a user-defined modifier function that searches for pairs of particles
whose distance of separation is within the specified cutoff distance. Then one of the two particles in the pair is selected by the modifier.
Subsequently, the user may apply the
DeleteSelectedModifier to remove these selected particles from the system
and eliminate any potential overlaps among particles.
The modifier function below makes use of the
CutoffNeighborFinder utility class, which allows finding
neighboring particles that are within a certain range of a central particles. The modifier produces the standard output particle property
from ovito.data import CutoffNeighborFinder # Control parameter: overlap_distance = 2.5 # The user-defined modifier function: def modify(frame, data): # Show this text in the status bar while the modifier function executes yield "Selecting overlapping particles" # Create 'Selection' output particle property selection = data.particles_.create_property('Selection') # Prepare neighbor finder finder = CutoffNeighborFinder(overlap_distance, data) # Iterate over all particles for index in range(data.particles.count): # Update progress display in the status bar yield (index / data.particles.count) # Iterate over all nearby particles around the current center particle for neigh in finder.find(index): # Once we find a neighbor which hasn't been marked yet, # mark the current center particle. This test is to ensure that we # always select only one of the particles in a close pair. if selection[neigh.index] == 0: selection[index] = 1 break