Source code for pygimli.utils.units

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Collection of frequently used physical quantities with units and
there abbreviations."""

import pygimli as pg
from ..core.config import rc

quants = {
    'rhoa': {
        'name': 'Apparent resistivity',
        'unit': r'$\Omega$m',
        'ger': 'scheinbarer spez. elektr. Widerstand',
        'cMap': 'Spectral_r',
    'res': {
        'name': 'Resistivity',
        'unit': r'$\Omega$m',
        'ger': 'spez. elektr. Widerstand',
        'cMap': 'Spectral_r',
    'ip': {
        'name': 'Phase',
        'unit': 'mrad',
        'ger': 'Phasenwinkel',
        'cMap': 'viridis',
   'ip_n': {
        'name': 'neg. Phase',
        'unit': 'mrad',
        'ger': 'neg. Phasenwinkel',
        'cMap': 'viridis',
    'ipa': {
        'name': 'Apparent phase',
        'unit': 'mrad',
        'ger': 'scheinbarer Phasenwinkel',
        'cMap': 'viridis',
    'ipa_n': {
        'name': 'neg. Apparent phase',
        'unit': 'mrad',
        'ger': 'neg. scheinbarer Phasenwinkel',
        'cMap': 'viridis',
    'u': {
        'name': 'Voltage',
        'unit': 'V',
        'ger': 'Spannung',
    'i': {
        'name': 'Current',
        'unit': 'A',
        'ger': 'Stromstärke',
    'err': {
        'name': 'Error',
        'unit': '-',
        'ger': 'Fehler',
    'e': {
        'name': 'electric field',
        'unit': 'V/m',
        'ger': 'elektrisches Feld',
    'b': {
        'name': 'magnetic flux',
        'unit': 'V/m²',
        'ger': 'magnetische Flussdichte',
    'h': {
        'name': 'magnetic field',
        'unit': 'A/m',
        'ger': 'magnetische Feldstärke',
    'va': {
        'name': 'Apparent velocity',
        'unit': 'm/s',
        'ger': 'Scheingeschwindigkeit',
    'vel': {
        'name': 'Velocity',
        'unit': 'm/s',
        'ger': 'Geschwindigkeit',
    'slo': {
        'name': 'Slowness',
        'unit': 's/m',
        'ger': 'Slowness',
    'por': {
        'name': 'Porosity',
        'unit': None,
        'ger': 'Porosität',
        'cMap': 'pink_r',

rc['quants'] = quants

def quantity(name):
    """Return quantity for given name."""
    quantity = None

    if name.lower() not in quants:
        for k, v in quants.items():
            if v['name'].lower() == name.lower():
                quantity = v
        quantity = quants[name.lower()]
    return quantity

[docs]def cmap(name): """Return default colormap for physical quantity name.""" q = quantity(name) if q is None: pg.warn('No information about quantity name', name) return 'viridis' return q.get('cMap', 'viridis')
[docs]def unit(name, unit='auto'): """ Return the name of a physical quantity with its unit. TODO ---- * example * localization Parameters ---------- """ q = quantity(name) if unit == 'auto' and q is None: pass # fall back if the name is given instead of the abbreviation # print(quants) # pg.error('Please give abbreviation or full name ' # 'for the quantity name: {0}'.format(name)) else: if rc['lang'] == 'german' or rc['lang'] == 'de' or rc['lang'] == 'ger': name = q['ger'] else: name = q['name'] if unit == 'auto': unit = q['unit'] if unit is None: return '{0}'.format(name) if rc['unitStyle'] == 1 or rc['lang'] == 'german' or \ rc['lang'] == 'de' or rc['lang'] == 'ger': return '{0} in {1}'.format(name, unit) elif rc['unitStyle'] == 2: return '{0} ({1})'.format(name, unit) elif rc['unitStyle'] == 3: return '{0} [{1}]'.format(name, unit)