Source code for pyspedas.tplot_tools.data_att_getters_setters

import logging
from pyspedas.tplot_tools import get_data
from pyspedas.tplot_tools import tplot_wildcard_expand


def get_any(name,tag_name):
    """

    This function returns an arbitrary value from the data_att dictionary within the metdata of a tplot variable.
    It is intended to be called by other tag-specific getters and setters.

    Parameters
    ----------
        name: str
            name of the tplot variable

        tag_name: str
            The name of the attribute to be returned

    Notes
    ----------
        The metadata values are stored in the variable's metadata at:
            metadata['data_att'][tag_name]

    Returns
    ----------
        Contents of specified tag name in the data_att structure, or None if not present.

    Examples
    ----------
        >>> import pyspedas
        >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a')
        >>> pyspedas.get_any('tha_pos', 'coord_sys')

    """
    metadata = get_data(name, metadata=True)
    if metadata is None:
        return None

    if metadata.get('data_att'):
        if metadata['data_att'].get(tag_name):
            return metadata['data_att'][tag_name]

    logging.debug('Tag name ' + tag_name + ' not found for variable ' + name)
    return None


def set_any(name, tag_name, tag_value):

    """

    This function sets an arbitrary attribute in the data_att dictionary within the metadata of a tplot variable.
    It is intended to be called by other tag-specific getters and setters.

    Parameters
    ----------
        name: str
            name of the tplot variable

        tag_name: str
            The name of the attribute to be stored

        tag_value: Any
            The value of the attribute to be stored

    Notes
    ----------
        The metadata values are stored in the variable's metadata at:
            metadata['data_att'][tag_name]

    Returns
    ----------
        Contents of specified tag name in the data_att structure, or None if not present.

    Examples
    ----------
        >>> import pyspedas
        >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a')
        >>> pyspedas.set_any('tha_pos', 'coord_sys', 'GSE')

    """
    # check that the variable exists
    data = get_data(name)
    if data is None:
        return False

    metadata = get_data(name, metadata=True)

    # note: updating the metadata dict directly updates
    # the variable's metadata in memory, so there's
    # no need to update the variable with store_data

    data_att = metadata.get('data_att')
    if data_att is None:
        metadata['data_att'] = {tag_name:tag_value}
    else:
        data_att[tag_name] = tag_value

    return True


[docs] def get_coords(name): """ This function returns the coordinate system of a tplot variable Parameters ---------- name: str name of the tplot variable Notes ---------- The coordinate system is stored in the variable's metadata at: metadata['data_att']['coord_sys'] See pyspedas.get_coords() to update the coordinate system Returns ---------- Coordinate system of the tplot variable or None if the coordinate system isn't set Examples ---------- >>> import pyspedas >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a') >>> pyspedas.get_coords('tha_pos') """ return get_any(name,'coord_sys')
[docs] def set_coords(name, coords): """ This function sets the coordinate system of a tplot variable, and updates legend names and axis labels if they include the coordinate system. Parameters ---------- name: str or list[str] names of tplot variables to update (wildcards accepted) coord: str Abbreviated name of the coordinate system (upper case recommended) Notes ---------- The coordinate system is stored in the variable's metadata at: metadata['data_att']['coord_sys'] See pyspedas.get_coords() to return the coordinate system Returns ---------- bool: True/False depending on if the operation was successful Examples ---------- >>> import pyspedas >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a') >>> pyspedas.set_coords('tha_pos', 'GEI') """ namelist = tplot_wildcard_expand(name) if len(namelist) == 0: logging.warning("set_coords: No valid tplot variables were found, returning.") return False for name in namelist: logging.info("Setting coordinate system for " + name) # Get the current value of the coordinate system, if present coord_in = get_coords(name) # Set the new coordinate system set_any(name,'coord_sys',coords) # Update other related metadata fields, if needed metadata=get_data(name,metadata=True) # should also update the legend, if it includes the coordinate system # for this to work, the coordinate system should be in all upper case if (coord_in is not None) and (metadata.get('plot_options') is not None): if metadata['plot_options'].get('yaxis_opt') is not None: if metadata['plot_options']['yaxis_opt'].get('legend_names') is not None: legend = metadata['plot_options']['yaxis_opt'].get('legend_names') updated_legend = [item.replace(coord_in.upper(), coords.upper()) for item in legend] metadata['plot_options']['yaxis_opt']['legend_names'] = updated_legend if metadata['plot_options']['yaxis_opt'].get('axis_label') is not None: ytitle = metadata['plot_options']['yaxis_opt'].get('axis_label') metadata['plot_options']['yaxis_opt']['axis_label'] = ytitle.replace(coord_in.upper(), coords.upper()) return True
[docs] def get_units(name): """ This function returns the units of a tplot variable Parameters ---------- name: str name of the tplot variable Notes ---------- The units string is stored in the variable's metadata at: metadata['data_att']['units'] See set_units to update the coordinate system Returns ---------- Units of the tplot variable or None if the coordinate system isn't set Examples ---------- >>> import pyspedas >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a') >>> pyspedas.get_units('tha_pos') """ return get_any(name,'units')
[docs] def set_units(name, units): """ This function sets the units of a tplot variable, and updates legend names and axis labels if they include the units. Parameters ---------- name: str or list[str] names of the tplot variables to update (wildcards accepted) coord: str Units Notes ---------- The units are stored in the variable's metadata at: metadata['data_att']['units'] See get_units to return the units Returns ---------- bool: True/False depending on if the operation was successful Examples ---------- >>> import pyspedas >>> pyspedas.projects.themis.state(trange=['2007-06-23', '2007-06-24'], probe='a') >>> pyspedas.set_units('tha_pos', 're') """ namelist = tplot_wildcard_expand(name) if len(namelist) == 0: logging.warning("set_units: No valid tplot variables were found, returning.") return False for name in namelist: logging.info("Setting units for " + name) # Get the current units value, if present units_in = get_units(name) # Set the new value set_any(name,'units',units) # Update any other related metadata fields metadata = get_data(name, metadata=True) # should also update the legend, if it includes the coordinate system # for this to work, the coordinate system should be in all upper case if units is None: units = 'None' if (units_in is not None) and (metadata.get('plot_options') is not None): if metadata['plot_options'].get('yaxis_opt') is not None: if metadata['plot_options']['yaxis_opt'].get('legend_names') is not None: legend = metadata['plot_options']['yaxis_opt'].get('legend_names') updated_legend = [item.replace(units_in, units) for item in legend] metadata['plot_options']['yaxis_opt']['legend_names'] = updated_legend if metadata['plot_options']['yaxis_opt'].get('axis_label') is not None: ytitle = metadata['plot_options']['yaxis_opt'].get('axis_label') metadata['plot_options']['yaxis_opt']['axis_label'] = ytitle.replace(units_in, units) return True