def retrieve(self, dataset_id="", query=None, delivery_format=None, module="", cls="", kwargs=None):
        """
        Retrieves a dataset.
        @param dataset_id      Dataset identifier
        @param query           Query parameters (start_time, end_time, stride_time, parameters)
        @param delivery_format The stream definition identifier for the outgoing granule (stream_defintinition_id)
        @param module          Module to chain a transform into
        @param cls             Class of the transform
        @param kwargs          Keyword Arguments to pass into the transform.

        """
        if query is None:
            query = {}
        if delivery_format is None:
            delivery_format = {}

        validate_is_instance(query, dict, "Query was improperly formatted.")
        validate_true(dataset_id, "No dataset provided")

        replay_instance = ReplayProcess()

        replay_instance.dataset = self.clients.dataset_management.read_dataset(dataset_id)
        replay_instance.dataset_id = dataset_id
        replay_instance.start_time = query.get("start_time", None)
        replay_instance.end_time = query.get("end_time", None)
        replay_instance.stride_time = query.get("stride_time", None)
        replay_instance.parameters = query.get("parameters", None)
        replay_instance.tdoa = query.get("tdoa", None)
        replay_instance.stream_def_id = delivery_format
        replay_instance.container = self.container

        if replay_instance.tdoa is not None:
            validate_is_instance(replay_instance.tdoa, slice)

        retrieve_data = replay_instance.execute_retrieve()

        if module and cls:
            return self._transform_data(retrieve_data, module, cls, kwargs or {})

        return retrieve_data