Source code for pyspedas.projects.themis.spacecraft.fields.fgm


from pyspedas.projects.themis.load import load
from pyspedas.tplot_tools import options

[docs] def fgm(trange=['2007-03-23', '2007-03-24'], probe='c', level='l2', suffix='', get_support_data=False, varformat=None, coord=None, varnames=[], downloadonly=False, notplot=False, no_update=False, time_clip=False): """ This function loads Fluxgate magnetometer (FGM) data 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: ['2007-03-23', '2007-03-24'] probe: str or list of str Spacecraft probe letter(s) ('a', 'b', 'c', 'd' and/or 'e') Default: 'c' level: str Data level; Valid options: 'l1', 'l2' Default: 'l2' suffix: str The tplot variable names will be given this suffix. Default: no suffix get_support_data: bool Data with an attribute "VAR_TYPE" with a value of "support_data" will be loaded into tplot. Default: False; only loads data with a "VAR_TYPE" attribute of "data" varformat: str The file variable formats to load into tplot. Wildcard character "*" is accepted. Default: None; all variables are loaded varnames: list of str List of variable names to load Default: Empty list, so all data variables are 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 time_clip: bool Time clip the variables to exactly the range specified in the trange keyword Default: False Returns ------- List of str List of tplot variables created Empty list if no data Example ------- >>> import pyspedas >>> from pyspedas import tplot >>> fgm_vars = pyspedas.projects.themis.fgm(probe='d', trange=['2013-11-5', '2013-11-6']) >>> tplot(['thd_fgs_btotal', 'thd_fgs_gse']) """ varformat = check_args(varformat=varformat, level=level, coord=coord) loaded_vars = load(instrument='fgm', trange=trange, level=level, suffix=suffix, get_support_data=get_support_data, varformat=varformat, varnames=varnames, downloadonly=downloadonly, notplot=notplot, probe=probe, time_clip=time_clip, no_update=no_update) if loaded_vars is None or loaded_vars == []: return [] if not isinstance(level, list): level = [level] if not isinstance(probe, list): probe = [probe] fgm_types = ['fgs', 'fgl', 'fgh', 'fge'] possible_coords = ['gse', 'gsm', 'dsl', 'ssl'] # set some plot metadata for prb in probe: for lvl in level: if lvl == 'l2': for fgm_type in fgm_types: for coord_sys in possible_coords: if 'th'+prb+'_'+fgm_type+'_'+coord_sys+suffix in loaded_vars: options('th'+prb+'_'+fgm_type+'_'+coord_sys+suffix, 'ytitle', 'TH'+prb.upper()+' '+fgm_type.upper()) options('th'+prb+'_'+fgm_type+'_'+coord_sys+suffix, 'color', ['b', 'g', 'r']) options('th'+prb+'_'+fgm_type+'_'+coord_sys+suffix, 'legend_names', ['Bx '+coord_sys.upper(), 'By '+coord_sys.upper(), 'Bz '+coord_sys.upper()]) if 'th'+prb+'_'+fgm_type+'_btotal'+suffix in loaded_vars: options('th'+prb+'_'+fgm_type+'_btotal'+suffix, 'ytitle', 'TH'+prb.upper()+' '+fgm_type.upper()) options('th'+prb+'_'+fgm_type+'_btotal'+suffix, 'legend_names', 'Bmag') return loaded_vars
def check_args(varformat=None, level='l2', coord=None): """ Return varformat for fgm data Parameters: varformat: str, optional If is not empty return as is level: {'l1', 'l2'}, optional Data level coord: {'ssl', 'dsl', 'gse', 'gsm'}, optional Coordinate system. If set to None all possible values are used. coord is applicable for level='l2' Returns: str varformat for themis.load """ # DEV COMMENTS: # If varformat is set to None then assign default value # We construct regular expression that covers the fgm variable format # IDL thm_load_xxx function has the following input: # vsnames = 'a b c d e', $ # type_sname = 'probe', $ # vdatatypes = 'fgl fgh fge', $ # vlevels = 'l1 l2', $ - This input is inherited # vL2datatypes = 'fgs fgl fgh fge fgs_btotal fgl_btotal fgh_btotal fge_btotal', $ # vL2coord = 'ssl dsl gse gsm none', $ # Resulted "varformat" for 'l2' and default coodr ('dsl') is: # th?_fgs_dsl th?_fgl_dsl th?_fgh_dsl th?_fge_dsl # th?_fgs_btotal_dsl th?_fgl_btotal_dsl th?_fgh_btotal_dsl th?_fge_btotal_dsl # th?_fgs th?_fgl th?_fgh th?_fge # th?_fgs_btotal th?_fgl_btotal th?_fgh_btotal th?_fge_btotal # Resulted "varformat" for 'l1' is: # *fgl* *fgh* *fge* import re if varformat is None: if level == 'l2': # Prepare coordinates, we reuse the same regex to check the coord variable coord_regexp = '(ssl|dsl|gse|gsm){1}' coord_str = coord_regexp # If coord is set and it matches the pattern, then include it into varformat if coord is not None and re.search(coord_regexp, coord, re.IGNORECASE): coord_str = '(' + coord.lower() + '){1}' varformat = '^th[a-e]{1}_(fgs|fgl|fgh|fge){1}(_btotal)?(_{1}' + coord_str + ')?$' else: # This case must be 'l1' varformat = '^th[a-e]{1}_(fgl|fgh|fge){1}*' # keep right end open with '*' (wildcard) return varformat