Example M4: Finding overlapping particles — OVITO Python Reference 3.15.3-dev-HEAD-b1e9512d documentation

# 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 particle. The modifier produces the standard output particle property `Selection`.

    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', data=0)

        # 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