Source code for pyspedas.projects.erg.ground.riometer.isee_brio

import cdflib
import numpy as np

from copy import deepcopy
from pyspedas.tplot_tools import get_data, store_data, options, clip, ylim

from ...satellite.erg.load import load
from ...satellite.erg.get_gatt_ror import get_gatt_ror


from typing import List, Optional, Union


[docs] def isee_brio( trange: List[str] = ["2020-08-01", "2020-08-02"], suffix: str = "", site: Union[str, List[str]] = "all", get_support_data: bool = False, varformat: Optional[str] = None, varnames: List[str] = [], downloadonly: bool = False, notplot: bool = False, no_update: bool = False, uname: Optional[str] = None, passwd: Optional[str] = None, time_clip: bool = False, ror: bool = True, force_download: bool = False, ) -> List[str]: """ Load isee_brio riometer data from ERG Science Center Parameters ---------- trange: list of str time range of interest [starttime, endtime] with the format 'YYYY-MM-DD','YYYY-MM-DD'] or to specify more or less than a day ['YYYY-MM-DD/hh:mm:ss','YYYY-MM-DD/hh:mm:ss'] Default: ['2020-08-01', '2020-08-02'] suffix: str The tplot variable names will be given this suffix. Default: '' site: str or list of str The site or list of sites to load. Valid values: 'ath', 'kap', 'gak', 'hus', 'zgn', 'ist', 'all' Default: ['all'] get_support_data: bool If true, data with an attribute "VAR_TYPE" with a value of "support_data" or 'data' will be loaded into tplot. Default: False varformat: str The CDF file variable formats to load into tplot. Wildcard character "*" is accepted. Default: None (all variables will be loaded). varnames: list of str List of variable names to load. Default: [] (all variables will be loaded) downloadonly: bool Set this flag to download the CDF files, but not load them into tplot variables. Default: False notplot: bool Return the data in hash tables instead of creating tplot variables. Default: False no_update: bool If set, only load data from your local cache. Default: False uname: str User name. Default: None passwd: str Password. Default: None time_clip: bool Time clip the variables to exactly the range specified in the trange keyword. Default: False ror: bool If set, print PI info and rules of the road. Default: True force_download: bool Download file even if local version is more recent than server version Default: False Returns ------- Examples ________ >>> import pyspedas >>> brio_vars=pyspedas.projects.erg.isee_brio(trange=['2020-08-01', '2020-08-02'],site='ath') >>> print(brio_vars) """ # ;----- datatype -----; datatype = "64hz" instr = "brio" freq = "30" site_code_all = ["ath", "kap", "gak", "hus", "zgn", "ist"] if isinstance(site, str): site_code = site.lower() site_code = site_code.split(" ") elif isinstance(site, list): site_code = [] for i in range(len(site)): site_code.append(site[i].lower()) if "all" in site_code: site_code = site_code_all site_code = list(set(site_code).intersection(site_code_all)) new_cdflib = False if cdflib.__version__ > "0.4.9": new_cdflib = True else: new_cdflib = False prefix = "iseetmp_" if notplot: loaded_data = {} else: loaded_data = [] for site_input in site_code: fres = datatype file_res = 3600.0 * 24 pathformat = ( "ground/riometer/" + site_input + "/%Y/isee_" + fres + "_" + instr + freq + "_" + site_input + "_%Y%m%d_v??.cdf" ) loaded_data_temp = load( pathformat=pathformat, file_res=file_res, trange=trange, datatype=datatype, prefix=prefix, suffix="_" + site_input + suffix, get_support_data=get_support_data, varformat=varformat, downloadonly=downloadonly, notplot=notplot, time_clip=time_clip, no_update=no_update, uname=uname, passwd=passwd, force_download=force_download, ) if notplot: loaded_data.update(loaded_data_temp) else: loaded_data += loaded_data_temp if (len(loaded_data_temp) > 0) and ror: try: gatt = get_gatt_ror(downloadonly, loaded_data) print( "**************************************************************************" ) print(gatt["Logical_source_description"]) print("") print(f'Information about {gatt["Station_code"]}') print(f'PI {gatt["PI_name"]}') print("") print(f'Affiliations: {gatt["PI_affiliation"]}') print("") print("Rules of the Road for ISEE Riometer Data:") print("") print(gatt["TEXT"]) print(gatt["LINK_TEXT"]) print( "**************************************************************************" ) except: print("printing PI info and rules of the road was failed") if (not downloadonly) and (not notplot): if len(loaded_data_temp) > 0: file_name = get_data(loaded_data_temp[-1], metadata=True)["CDF"][ "FILENAME" ] if isinstance(file_name, list): file_name = file_name[0] cdf_file = cdflib.CDF(file_name) cdf_info = cdf_file.cdf_info() if new_cdflib: all_cdf_variables = cdf_info.rVariables + cdf_info.zVariables else: all_cdf_variables = cdf_info["rVariables"] + cdf_info["zVariables"] for t_plot_name in loaded_data_temp: get_data_vars = get_data(t_plot_name) if get_data_vars is None: store_data(t_plot_name, delete=True) else: t_plot_name_split = t_plot_name.split("_") if len(t_plot_name_split) > 2: # ;----- Find param -----; param = t_plot_name_split[1] if param in ["cna", "qdc", "raw"]: # ;----- Rename tplot variables -----; new_tplot_name = ( "isee_brio" + freq + "_" + site_input + "_" + fres + "_" + param + suffix ) store_data(t_plot_name, newname=new_tplot_name) loaded_data.remove(t_plot_name) loaded_data.append(new_tplot_name) # ;----- Missing data -1.e+31 --> NaN -----; clip(new_tplot_name, -1e5, 1e5) get_data_vars = get_data(new_tplot_name) if param in all_cdf_variables: var_atts = cdf_file.varattsget(param) if ( "FILLVAL" in var_atts ): # removing "FILLVAL", like 999.9000 or 0.0. # removing process of cdf_to_tplot.py may be not working well. var_properties = cdf_file.varinq(param) if new_cdflib: dtdesc = var_properties.Data_Type_Description else: dtdesc = var_properties["Data_Type_Description"] if ( (dtdesc == "CDF_FLOAT") or (dtdesc == "CDF_REAL4") or (dtdesc == "CDF_DOUBLE") or (dtdesc == "CDF_REAL8") ): if isinstance(var_atts["FILLVAL"], str): fill_value = float(var_atts["FILLVAL"]) else: fill_value = deepcopy( var_atts["FILLVAL"] ) new_y = np.where( get_data_vars[1] == fill_value, np.nan, get_data_vars[1], ) get_metadata_vars = get_data( new_tplot_name, metadata=True ) store_data( new_tplot_name, data={ "x": get_data_vars[0], "y": new_y, }, attr_dict=get_metadata_vars, ) ylim( new_tplot_name, np.nanmin(new_y), np.nanmax(new_y), ) else: ylim( new_tplot_name, np.nanmin(get_data_vars[1]), np.nanmax(get_data_vars[1]), ) # ;----- Set options -----; options(new_tplot_name, "ytitle", site_input.upper()) if param == "cna": options(new_tplot_name, "ysubtitle", "[dB]") options(new_tplot_name, "legend_names", ["CNA"]) elif param == "qdc": options(new_tplot_name, "ysubtitle", "[V]") options(new_tplot_name, "legend_names", ["QDC"]) elif param == "raw": options(new_tplot_name, "ysubtitle", "[V]") options( new_tplot_name, "legend_names", ["Raw data"] ) return loaded_data