Exemplo n.º 1
0
 def setUp(self):
     self.io = DataSet.default_io
     self.formatter = HDF5Format()
     # Set up the location provider to always store test data in
     # "qc.tests.unittest_data
     cur_fp = os.path.dirname(__file__)
     base_fp = os.path.abspath(os.path.join(cur_fp, '../unittest_data'))
     self.loc_provider = FormatLocation(fmt=base_fp +
                                        '/{date}/#{counter}_{name}_{time}')
     DataSet.location_provider = self.loc_provider
Exemplo n.º 2
0
def load_dataset(location, io=None, verbose=0):
    """ Load a dataset from storage

    An attempt is made to automatically detect the formatter. Supported are currently GNUPlotFormat and HDF5Format

    Args:
        location (str): either the relative or full location
        io (None or qcodes.DiskIO): 
    Returns:
        dataset (DataSet or None)
    """

    if io is None:
        io = qcodes.DataSet.default_io
    formatters = [qcodes.DataSet.default_formatter]

    try:
        from qcodes.data.hdf5_format_hickle import HDF5FormatHickle
        formatters += [HDF5FormatHickle()]
    except:
        pass

    from qcodes.data.hdf5_format import HDF5Format
    formatters += [HDF5Format()]

    from qcodes.data.gnuplot_format import GNUPlotFormat
    formatters += [GNUPlotFormat()]

    data = None
    for ii, hformatter in enumerate(formatters):
        try:
            if verbose:
                print('%d: %s' % (ii, hformatter))
            data = qcodes.load_data(location, formatter=hformatter, io=io)
            if len(data.arrays) == 0:
                data = None
                raise Exception(
                    'empty dataset, probably a HDF5 format misread by GNUPlotFormat'
                )
            logging.debug('load_data: loaded %s with %s' %
                          (location, hformatter))
        except Exception as ex:
            logging.info(
                'load_data: location %s: failed for formatter %d: %s' %
                (location, ii, hformatter))
            if verbose:
                print(ex)
            pass
        finally:
            if data is not None:
                if isinstance(hformatter, GNUPlotFormat):
                    # workaround for bug in GNUPlotFormat not saving the units
                    if '__dataset_metadata' in data.metadata:
                        dataset_meta = data.metadata['__dataset_metadata']
                        for key, array_metadata in dataset_meta[
                                'arrays'].items():
                            if key in data.arrays:
                                if data.arrays[key].unit is None:
                                    if verbose:
                                        print(
                                            'load_dataset: updating unit for %s'
                                            % key)
                                    data.arrays[key].unit = array_metadata[
                                        'unit']

                if verbose:
                    print('succes with formatter %s' % hformatter)
                break
    if verbose:
        if data is None:
            print('could not load data from %s, returning None' % location)
    return data
Exemplo n.º 3
0
def load_dataset(location, io=None, verbose=0):
    """ Load a dataset from storage

    An attempt is made to automatically detect the formatter. Supported are currently qcodes GNUPlotFormat,
    qcodes HDF5Format and json format.

    Args:
        location (str): either the relative or full location
        io (None or qcodes.data.io.DiskIO):
    Returns:
        dataset (DataSet or None)
    """

    if io is None:
        io = DataSet.default_io
    formatters = [DataSet.default_formatter]

    from qcodes.data.hdf5_format import HDF5FormatMetadata
    formatters += [HDF5FormatMetadata()]
    try:
        from qcodes.data.hdf5_format_hickle import HDF5FormatHickle
        formatters += [HDF5FormatHickle()]
    except ImportError as ex:
        logging.info(f'HDF5FormatHickle not available {ex}')

    from qcodes.data.hdf5_format import HDF5Format
    formatters += [HDF5Format()]

    from qcodes.data.gnuplot_format import GNUPlotFormat
    formatters += [GNUPlotFormat()]

    data = None

    if location.endswith('.json'):
        dataset_dictionary = qtt.utilities.json_serializer.load_json(location)
        data = qtt.data.dictionary_to_dataset(dataset_dictionary)
    else:
        # assume we have a QCoDeS dataset
        for ii, hformatter in enumerate(formatters):
            try:
                if verbose:
                    print('%d: %s' % (ii, hformatter))
                data = qcodes.data.data_set.load_data(location,
                                                      formatter=hformatter,
                                                      io=io)
                if len(data.arrays) == 0:
                    data = None
                    raise Exception(
                        'empty dataset, probably a HDF5 format misread by GNUPlotFormat'
                    )
                logging.debug('load_data: loaded %s with %s' %
                              (location, hformatter))
            except Exception as ex:
                logging.info(
                    'load_data: location %s: failed for formatter %d: %s' %
                    (location, ii, hformatter))
                if verbose:
                    print(ex)
            finally:
                if data is not None:
                    if isinstance(hformatter, GNUPlotFormat):
                        # workaround for bug in GNUPlotFormat not saving the units
                        if '__dataset_metadata' in data.metadata:
                            dataset_meta = data.metadata['__dataset_metadata']
                            for key, array_metadata in dataset_meta[
                                    'arrays'].items():
                                if key in data.arrays:
                                    if data.arrays[key].unit is None:
                                        if verbose:
                                            print(
                                                'load_dataset: updating unit for %s'
                                                % key)
                                        data.arrays[key].unit = array_metadata[
                                            'unit']

                    if verbose:
                        print('succes with formatter %s' % hformatter)
                    break
    if verbose:
        if data is None:
            print('could not load data from %s, returning None' % location)
    return data