Given the pipeline topology disconnects ``Pipers`` in the order output 
        -> input. This also disconnects inputs. See ``Dagger.connect``,
        ``Piper.connect`` and ``Piper.disconnect``. If "forced" is ``True``
        ``NuMap`` instances will be emptied.
        
        Arguments:
        
          - forced(``bool``) [default: ``False``] If set ``True`` all tasks from
            all ``NuMaps`` instances used in the ``Dagger`` will be removed even
            if they did not belong to this ``Dagger``.

def disconnect(self, forced=False):
        """
        Given the pipeline topology disconnects ``Pipers`` in the order output 
        -> input. This also disconnects inputs. See ``Dagger.connect``,
        ``Piper.connect`` and ``Piper.disconnect``. If "forced" is ``True``
        ``NuMap`` instances will be emptied.
        
        Arguments:
        
          - forced(``bool``) [default: ``False``] If set ``True`` all tasks from
            all ``NuMaps`` instances used in the ``Dagger`` will be removed even
            if they did not belong to this ``Dagger``.
        
        """
        reversed_postorder = reversed(self.postorder())
        self.log.debug('%s trying to disconnect in the order %s' % \
                      (repr(self), repr(reversed_postorder)))
        for piper in reversed_postorder:
            if piper.connected:
                # we don't want to trigger an exception
                piper.disconnect(forced)
        self.log.debug('%s succesfuly disconnected' % repr(self))