from .load import load
import numpy as np
import pandas as pd
from pytplot import store_data, options
from pytplot import time_double
from pyspedas.cotrans.xyz_to_polar import xyz_to_polar
[docs]
def pws(trange=['2012-10-01', '2012-10-02'],
datatype='ne',
level='h1',
suffix='',
get_support_data=False,
varformat=None,
varnames=[],
downloadonly=False,
notplot=False,
no_update=False,
time_clip=False):
"""
This function loads data from the ACE Plasma Waves and Sounder experiment (PWS)
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: ['2012-10-01', '2012-10-02']
datatype: str
Data type; Valid options:
'ne', 'npw-ds', 'npw-py', 'spw'
Default: 'ne'
level: str
Data level; options: 'h1' (default: h1)
Default: 'h1'
suffix: str
The tplot variable names will be given this suffix. By default,
no suffix is added.
Default: ''
get_support_data: bool
Data with an attribute "VAR_TYPE" with a value of "support_data"
will be loaded into tplot. By default, only loads in data with a
"VAR_TYPE" attribute of "data".
Default: False
varformat: str
The file variable formats to load into tplot. Wildcard character
"*" is accepted. By default, all variables are loaded in.
Default: None
varnames: list of str
List of variable names to load (if not specified,
all data variables are loaded)
Default: []
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 tplot variables created.
Example:
----------
>>> import pyspedas
>>> from pytplot import tplot
>>> pws_vars = pyspedas.akebono.pws(trange=['2012-10-01', '2012-10-02'])
>>> tplot(['akb_pws_RX1', 'akb_pws_RX2'])
"""
tvars = load(instrument='pws', trange=trange, level=level, datatype=datatype, suffix=suffix, get_support_data=get_support_data, varformat=varformat, varnames=varnames, downloadonly=downloadonly, notplot=notplot, time_clip=time_clip, no_update=no_update)
if tvars is None or notplot or downloadonly:
return tvars
return pws_postprocessing(tvars)
def pws_postprocessing(variables):
"""
Placeholder for PWS post-processing
"""
return variables
[docs]
def rdm(trange=['2012-10-01', '2012-10-02'],
suffix='',
get_support_data=False,
varformat=None,
varnames=[],
downloadonly=False,
notplot=False,
no_update=False,
time_clip=False):
"""
This function loads data from the ACE Radiation Moniter (RDM)
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: ['2012-10-01', '2012-10-02']
suffix: str
The tplot variable names will be given this suffix. By default,
no suffix is added.
Default: ''
get_support_data: bool
Data with an attribute "VAR_TYPE" with a value of "support_data"
will be loaded into tplot. By default, only loads in data with a
"VAR_TYPE" attribute of "data".
Default: False
varformat: str
The file variable formats to load into tplot. Wildcard character
"*" is accepted. By default, all variables are loaded in.
Default: None
varnames: list of str
List of variable names to load (if not specified,
all data variables are loaded)
Default: []
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 tplot variables created.
Example:
----------
>>> import pyspedas
>>> from pytplot import tplot
>>> rdm_vars = pyspedas.akebono.rdm(trange=['2012-10-01', '2012-10-02'])
>>> tplot('akb_rdm_FEIO')
"""
files = load(instrument='rdm', trange=trange, suffix=suffix, get_support_data=get_support_data, varformat=varformat, varnames=varnames, downloadonly=downloadonly, notplot=notplot, time_clip=time_clip, no_update=no_update)
if files is None or notplot or downloadonly:
return files
return rdm_postprocessing(files)
def rdm_postprocessing(files):
"""
Load the RDM ASCII files into tplot variables
"""
data = load_csv_file(files)
values = data.to_numpy()
unix_times = time_double([ymd + '/' + hms for ymd, hms in zip(values[:, 0], values[:, 1])])
L = np.float64(values[:, 2])
INV = np.float64(values[:, 3])
FMLAT = np.float64(values[:, 4])
MLAT = np.float64(values[:, 5])
MLT = np.float64(values[:, 6])
ALT = np.float64(values[:, 7])
GLAT = np.float64(values[:, 8])
GLON = np.float64(values[:, 9])
RDM_E3 = np.float64(values[:, 10])
Energy = np.zeros(len(RDM_E3))
Energy[:] = 2.5
prefix_project = 'akb_'
prefix_descriptor = 'rdm_'
prefix = prefix_project + prefix_descriptor
store_data(prefix_project+'L', data={'x': unix_times, 'y': L})
store_data(prefix_project+'INV', data={'x': unix_times, 'y': INV})
store_data(prefix_project+'FMLAT', data={'x': unix_times, 'y': FMLAT})
store_data(prefix_project+'MLAT', data={'x': unix_times, 'y': MLAT})
store_data(prefix_project+'MLT', data={'x': unix_times, 'y': MLT})
store_data(prefix_project+'ALT', data={'x': unix_times, 'y': ALT})
store_data(prefix_project+'GLAT', data={'x': unix_times, 'y': GLAT})
store_data(prefix_project+'GLON', data={'x': unix_times, 'y': GLON})
store_data(prefix+'FEIO', data={'x': unix_times, 'y': RDM_E3})
store_data(prefix+'FEIO_Energy', data={'x': unix_times, 'y': Energy})
options(prefix+'FEIO', 'spec', True)
options(prefix_project+'L', 'ytitle', 'L-value')
options(prefix_project+'INV', 'ytitle', 'Invariant Latitude [deg]')
options(prefix_project+'FMLAT', 'ytitle', 'Footprint Latitude [deg]')
options(prefix_project+'MLAT', 'ytitle', 'Magnetic Latitude [deg]')
options(prefix_project+'MLT', 'ytitle', 'Magnetic Local Time [hour]')
options(prefix_project+'ALT', 'ytitle', 'Altitude [km]')
options(prefix_project+'GLAT', 'ytitle', 'Geographic Latitude [deg]')
options(prefix_project+'GLON', 'ytitle', 'Geographic Longitude [deg]')
options(prefix+'FEIO', 'ytitle', 'Omni-directional Integral Electron Flux')
options(prefix+'FEIO', 'ysubtitle', '[/cm^22 sec str]')
options(prefix+'FEIO_Energy', 'ytitle', 'Elctron energy [MeV]')
return [prefix_project+'L',
prefix_project+'INV',
prefix_project+'FMLAT',
prefix_project+'MLAT',
prefix_project+'MLT',
prefix_project+'ALT',
prefix_project+'GLAT',
prefix_project+'GLON',
prefix+'FEIO',
prefix+'FEIO_Energy']
[docs]
def orb(trange=['2012-10-01', '2012-10-02'],
suffix='',
get_support_data=False,
varformat=None,
varnames=[],
downloadonly=False,
notplot=False,
no_update=False,
time_clip=False):
"""
This function loads data from the ACE Akebono orbit data (orb)
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: ['2012-10-01', '2012-10-02']
suffix: str
The tplot variable names will be given this suffix. By default,
no suffix is added.
Default: ''
get_support_data: bool
Data with an attribute "VAR_TYPE" with a value of "support_data"
will be loaded into tplot. By default, only loads in data with a
"VAR_TYPE" attribute of "data".
Default: False
varformat: str
The file variable formats to load into tplot. Wildcard character
"*" is accepted. By default, all variables are loaded in.
Default: None
varnames: list of str
List of variable names to load (if not specified,
all data variables are loaded)
Default: []
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 tplot variables created.
Example:
----------
>>> import pyspedas
>>> from pytplot import tplot
>>> orb_vars = pyspedas.akebono.orb(trange=['2012-10-01', '2012-10-02'])
>>> tplot(['akb_orb_geo', 'akb_orb_MLT'])
"""
files = load(instrument='orb', trange=trange, suffix=suffix, get_support_data=get_support_data, varformat=varformat, varnames=varnames, downloadonly=downloadonly, notplot=notplot, time_clip=time_clip, no_update=no_update)
if files is None or notplot or downloadonly:
return files
return orb_postprocessing(files)
def orb_postprocessing(files):
"""
Load the orbit CSV files and create the tplot variables
"""
prefix_project = 'akb_'
prefix_descriptor = 'orb_'
prefix = prefix_project + prefix_descriptor
cols = ['pass','ut', 'ksc_azm', 'ksc_elv', 'ksc_dis', 'ksc_ang', 'syo_azm', 'syo_elv', 'syo_dis', 'syo_ang',
'pra_azm', 'pra_elv', 'pra_dis', 'pra_ang', 'esr_azm', 'esr_elv', 'esr_dis', 'esr_ang', 'gclat','gclon',
'inv', 'fmlat', 'mlat', 'mlt', 'bmdl_x', 'bmdl_y', 'bmdl_z', 'xxlon_sc', 'xxlat_sc', 'aheight','lsun',
's_direc_x', 's_direc_y', 's_direc_z', 'sc_pos_x', 'sc_pos_y', 'sc_pos_z', 'sc_vel_x', 'sc_vel_y', 'sc_vel_z']
data = load_csv_file(files, cols=cols)
values = data.to_numpy()
unix_times = time_double([date[2:4] + '-' + date[4:6] + '-' + date[0:2] + '/' + date[6:8] + ':' + date[8:10] + ':' + date[10:12] for date in data['ut']])
km_in_re = 6374.4
xyz = np.array([[data['sc_pos_x']], [data['sc_pos_y']], [data['sc_pos_z']]]).transpose([2, 0, 1]).squeeze()
xyz = np.float64(xyz)
xyz_re = xyz/km_in_re
r_theta_phi = xyz_to_polar(xyz)
rr = r_theta_phi[:, 0]
th = r_theta_phi[:, 1]
ph = r_theta_phi[:, 2]
store_data(prefix + 'geo', data={'x': unix_times, 'y': xyz_re})
store_data(prefix + 'gdlat', data={'x': unix_times, 'y': np.float64(data['gclat'])})
store_data(prefix + 'gdlon', data={'x': unix_times, 'y': np.float64(data['gclon'])})
store_data(prefix + 'inv', data={'x': unix_times, 'y': np.float64(data['inv'])})
store_data(prefix + 'fmlat', data={'x': unix_times, 'y': np.float64(data['fmlat'])})
store_data(prefix + 'MLT', data={'x': unix_times, 'y': np.float64(data['mlt'])})
store_data(prefix + 'gcalt', data={'x': unix_times, 'y': rr / km_in_re})
store_data(prefix + 'gclat', data={'x': unix_times, 'y': th})
store_data(prefix + 'gclon', data={'x': unix_times, 'y': ph})
options(prefix + 'geo', 'ytitle', 'GEO')
options(prefix + 'geo', 'ysubtitle', '[Re]')
options(prefix + 'gdlat', 'ytitle', 'Geodetic latitude of the magnetic footprint')
options(prefix + 'gdlat', 'ysubtitle', '(120km altitude) [deg]')
options(prefix + 'gdlon', 'ytitle', 'Geodetic longitude of the magnetic footprint')
options(prefix + 'gdlon', 'ysubtitle', '(120km altitude) [deg]')
options(prefix + 'inv', 'ytitle', 'Invariant Latitude of the magnetic footprint')
options(prefix + 'inv', 'ysubtitle', '(120km altitude) [deg]')
options(prefix + 'fmlat', 'ytitle', 'Geomagnetic Latitude of the magnetic footprint')
options(prefix + 'fmlat', 'ysubtitle', '(120km altitude) [deg]')
options(prefix + 'MLT', 'ytitle', 'Magnetic Local Time')
options(prefix + 'MLT', 'ysubtitle', '[hours]')
options(prefix + 'gcalt', 'ytitle', 'Geocentric Altitude')
options(prefix + 'gcalt', 'ysubtitle', '[Re]')
options(prefix + 'gclat', 'ytitle', 'Geocentric Latitude')
options(prefix + 'gclat', 'ysubtitle', '[deg]')
options(prefix + 'gclon', 'ytitle', 'Geocentric Longitude')
options(prefix + 'gclon', 'ysubtitle', '[deg]')
return [prefix + 'geo',
prefix + 'gdlat',
prefix + 'gdlon',
prefix + 'inv',
prefix + 'fmlat',
prefix + 'MLT',
prefix + 'gcalt',
prefix + 'gclat',
prefix + 'gclon']
def load_csv_file(filenames, cols=None):
"""
Loads a list of CSV/txt files into pandas data frames
"""
if not isinstance(filenames, list):
filenames = [filenames]
df = pd.concat((pd.read_csv(f, header=0, sep=r'\s+', dtype=str, names=cols) for f in filenames), ignore_index=True)
return df