def _onResultsOpen(self, filepath):
        logging.debug('controller: resultsOpen')
        if not self.canOpenResults(filepath):
            raise IOError('Results is already opened')

        self._results_reader_thread = _ResultsReaderWrapperThread(filepath)
        func = lambda results, f = filepath: self._onResultsOpenReady(results, f)
        self._results_reader_thread.resultReady.connect(func)
        self._results_reader_thread.progressUpdated.connect(self.resultsOpenProgress)
        self._results_reader_thread.exceptionRaised.connect(self.resultsOpenException)
        self._results_reader_thread.start()
    def _onResultsReload(self, uid):
        logging.debug('controller: resultsReload')
        filepath = self._results_filepath.get(uid)
        if filepath is None:
            return

        self._results_reader_thread = _ResultsReaderWrapperThread(filepath)
        func = lambda results, u = uid: self._onResultsReloadReady(u, results)
        self._results_reader_thread.resultReady.connect(func)
        self._results_reader_thread.progressUpdated.connect(self.resultsOpenProgress)
        self._results_reader_thread.exceptionRaised.connect(self.resultsOpenException)
        self._results_reader_thread.start()