def METHOD_NAME(self, center_shift, voxel_size):
    # gets next coordinate from list
    if self.choose_randomly:
        self.local_index = randrange(len(self.coordinates))
    else:
        with IterateLocations.__global_index.get_lock():
            IterateLocations.__global_index.value += 1
            if IterateLocations.__global_index.value == len(self.coordinates) - 1:
                logger.info("After this request, all points have been visited")
                with IterateLocations.visited_all.get_lock():
                    IterateLocations.visited_all.value = True
            if IterateLocations.__global_index.value == len(self.coordinates):
                logger.warning("Ran out of locations, looping list")
            self.local_index = IterateLocations.__global_index.value % len(
                self.coordinates
            )
    next_shift = Coordinate(self.coordinates[self.local_index]) - center_shift
    logger.debug("Shift before rounding: %s" % str(next_shift))
    # make sure shift is a multiple of voxel size (round to nearest)
    next_shift = Coordinate(
        [
            int(vs * round(float(shift) / vs))
            for vs, shift in zip(voxel_size, next_shift)
        ]
    )
    logger.debug("Shift after rounding: %s" % str(next_shift))
    return next_shift