def recalculate(self, parent, updates):
        """Re-calculate the value of parent sensor.

        Parent's value is the boolean AND of all child sensors.

        Parameters
        ----------
        parent : :class:`katcp.Sensor` object
            The sensor that needs to be updated.
        updates : sequence of :class:`katcp.Sensor` objects
            The child sensors which triggered the update.

        """
        not_ok = self._parent_to_not_ok[parent]
        children = self.children(parent) if parent in self else set()
        for sensor in updates:
            if sensor not in children or sensor.value():
                not_ok.discard(sensor)
            else:
                not_ok.add(sensor)
        parent.set_value(not not_ok)