@staticmethod
def calculate_order(order_function, system, xyz=None, vel=None, box=None):
    """Return the order parameter.

        This method is just to help to calculate the order parameter
        in cases where only the engine can do it.

        Parameters
        ----------
        order_function : object like :py:class:`.OrderParameter`
            The object used for calculating the order parameter(s).
        system : object like :py:class:`.System`
            The system containing the current positions and velocities.
        xyz : numpy.array, optional
            The positions to use. Typically for internal engines, this
            is not needed. It is included here as it can be used for
            testing and also to be compatible with the generic function
            defined by the parent.
        vel : numpy.array, optional
            The velocities to use.
        box : numpy.array, optional
            The current box vectors.

        Returns
        -------
        out : list of floats
            The calculated order parameter(s).

        """
    if any((xyz is None, vel is None, box is None)):
        return order_function.calculate(system)
    system.particles.pos = xyz
    system.particles.vel = vel
    system.box.update_size(box)
    return order_function.calculate(system)
