Source code for omfit_classes.omfit_cdb

try:
    # framework is running
    from .startup_choice import *
except ImportError as _excp:
    # class is imported by itself
    if (
        'attempted relative import with no known parent package' in str(_excp)
        or 'No module named \'omfit_classes\'' in str(_excp)
        or "No module named '__main__.startup_choice'" in str(_excp)
    ):
        from startup_choice import *
    else:
        raise

if 'CDB_PATH' in os.environ:
    _pycdb_pythonpath = os.path.abspath(os.environ['CDB_PATH'])
    if _pycdb_pythonpath not in [os.path.abspath(_path) for _path in sys.path]:
        sys.path.insert(1, _pycdb_pythonpath)
        print('* Path to CDB has been added: ' + _pycdb_pythonpath)
    else:
        print('* Path to CDB was found' + _pycdb_pythonpath)
    if 'PYTHONPATH' in os.environ and os.environ['PYTHONPATH']:
        if _pycdb_pythonpath not in os.environ['PYTHONPATH']:
            os.environ['PYTHONPATH'] = _pycdb_pythonpath + ':' + os.environ['PYTHONPATH']
    else:
        os.environ['PYTHONPATH'] = _pycdb_pythonpath
try:
    import pyCDB
    from pyCDB.client import CDBClient
except Exception as _excp:
    pyCDB = None
    CDBClient = None

__all__ = ['OMFITcdb', 'OMFITcdbValue', 'pyCDB']


[docs]class OMFITcdbValue(object): def __init__(self, **kw): self.alias = kw.pop('alias', None) if 'shot' in kw: kw['record_number'] = kw.pop('shot') self.user_kw = kw self._kw = kw self._data = None def __getattr__(self, attr): attr_list = [ 'axes', 'daq_attachment', 'daq_parameters', 'data', 'description', 'file_ref', 'get_axes_info', 'get_log_level', 'get_ndim', 'gs_parameters', 'gs_ref', 'info', 'log_level', 'name', 'ndim', 'plot', 'ref', 'set_log_level', 'set_ndim', 'time_axis', 'units', 'url', ] if attr in attr_list + ['axis%d' % k for k in range(1, 7)]: self.fetch() return getattr(self._data, attr)
[docs] def fetch(self): if self._data is None: if 'CDBclient' not in OMFITaux: OMFITaux['CDBclient'] = CDBClient() client = OMFITaux['CDBclient'] if 'CDB_cache' not in OMFIT['scratch']: OMFIT['scratch']['CDB_cache'] = {} if tuple(self.user_kw.values()) not in OMFIT['scratch']['CDB_cache']: OMFIT['scratch']['CDB_cache'][tuple(self.user_kw.values())] = client.get_signal(**self.user_kw) self._data = OMFIT['scratch']['CDB_cache'][tuple(self.user_kw.values())] self._kw = self._data.__dict__
@property def _description(self): if 'description' in self._kw and self._kw['description']: return self._kw['description'] elif 'generic_signal_name' in self._kw and self._kw['generic_signal_name']: return re.sub('_', ' ', self._kw['generic_signal_name']) elif 'generic_signal_id' in self._kw and self._kw['generic_signal_id']: return 'signal id: %d' % self._kw['generic_signal_id']
[docs] def plot(self): self.fetch() tmp = self._data.plot(fig=pyplot.gcf()) pyplot.gcf().suptitle(self._description) return tmp
def __str__(self): description = self._description tmp = [description, '=' * 21] tmp.append('%s: %s' % ('alias'.ljust(20), self.alias)) for k in self._kw: if k in ['ref', 'data', 'axes']: continue if isinstance(self._kw[k], pyCDB.client.CDBSignal): tmp.append('%s: %s' % (k.ljust(20), 'CDB signal --> ' + str(self._kw[k].name))) elif isinstance(self._kw[k], pyCDB.pyCDBBase.OrderedDict): continue else: tmp.append('%s: %s' % (k.ljust(20), self._kw[k])) return '\n'.join(tmp) def __repr__(self): return '%s(%s)' % (self.__class__.__name__, repr(self._kw)[1:-1]) @property def help(self): units = '' if 'units' in self._kw and self._kw['units']: units = '[%s] ' % self._kw['units'] return units + self._description def __tree_repr__(self): if self._data is not None: values = [self.data, ['MDSactive']] else: values = [self.help, []] return values
class OMFITcdb(SortedDict): def __init__(self, shot): SortedDict.__init__(self, sorted=True) self.shot = shot self.dynaLoad = True @dynaLoad def load(self): if 'CDBclient' not in OMFITaux: OMFITaux['CDBclient'] = CDBClient() client = OMFITaux['CDBclient'] tmp = client.get_generic_signal_references(record_number=self.shot) groups = {k.data_source_id: k for k in client.get_data_source_references()} for k in tmp: group_name = groups[k.data_source_id].name self.setdefault(group_name, {}) self[group_name][k.generic_signal_name] = OMFITcdbValue(record_number=self.shot, **k) def __str__(self): return self.__repr__() def __repr__(self): return '%s(%s)' % (self.__class__.__name__, 'shot=%d' % self.shot) def __tree_repr__(self): return '#%d @ COMPASS' % self.shot, []
[docs]class OMFITcdb(SortedDict): def __init__(self, shot): SortedDict.__init__(self, sorted=True) self.shot = shot self.dynaLoad = True
[docs] @dynaLoad def load(self): if 'CDBclient' not in OMFITaux: OMFITaux['CDBclient'] = CDBClient() client = OMFITaux['CDBclient'] tmp = client.get_generic_signal_references(record_number=self.shot) groups = {k.data_source_id: k for k in client.get_data_source_references()} for k in tmp: group_name = groups[k.data_source_id].name self.setdefault(group_name, {}) self[group_name][k.generic_signal_name] = OMFITcdbValue(record_number=self.shot, **k)
def __str__(self): return self.__repr__() def __repr__(self): return '%s(%s)' % (self.__class__.__name__, 'shot=%d' % self.shot) def __tree_repr__(self): return '#%d @ COMPASS' % self.shot, []