# /// pyproject
# run.requirements = [
# "pyyaml",
# "pydantic",
# "pyspedas",
# "pytplot",
# "matplotlib",
# "scienceplots",
# ]
# /
import sys
import yaml
from pydantic import constr, BaseModel
from datetime import datetime
from xarray import DataArray
import pyspedas
from pyspedas.cotrans.minvar_matrix_make import minvar_matrix_make
from pyspedas import tvector_rotate
from pyspedas.analysis.tvectot import tvectot
from pytplot import join_vec, split_vec, get_data
from pytplot import tplot, options
import matplotlib.pyplot as plt
import scienceplots
"science", "nature", "notebook"])
plt.style.use(["savefig", dpi=300)
plt.rc(# plt.rc('svg', fonttype='none')
In [14]:
In [1]:
class TplotConfig(BaseModel):
str
tvar: list[str] = None
trans:
class PanelConfig(BaseModel):
=True)
satellite: constr(to_lower=True)
instrument: constr(to_lower
start: datetime
end: datetimestr = None
datatype: str = None
probe: tplot: TplotConfig
In [2]:
= sys.argv[1]
file_path = yaml.load(open(file_path), Loader=yaml.FullLoader)
config
= config["panels"][0]
_p_config
= PanelConfig(**_p_config)
panel_config = panel_config.tplot
tplot_config
= getattr(pyspedas, panel_config.satellite)
mod = getattr(mod, panel_config.instrument)
func
= tplot_config.tvar tvar
In [3]:
= {
args "trange": [panel_config.start.isoformat(), panel_config.end.isoformat()],
"time_clip": True,
}
# Conditionally add the 'datatype' and 'probe' argument
if panel_config.datatype is not None:
"datatype"] = panel_config.datatype
args[if panel_config.probe is not None:
"probe"] = panel_config.probe
args[
= func(**args) loaded_tvars
In [9]:
r"$B_l$", r"$B_m$", r"$B_n$"][0:2] [
['$B_l$', '$B_m$']
In [4]:
if "slice-3" in tplot_config.trans:
= join_vec(split_vec(tvar)[:3])
tvar if "mva" in tplot_config.trans:
minvar_matrix_make(tvar)= tvector_rotate(tvar + "_mva_mat", tvar)[0]
tvar = "[nT LMN]"
ysubtitle = [r"$B_l$", r"$B_m$", r"$B_n$"]
legend_names
= tvectot(tvar, join_component=True)
tvar2plot = legend_names + [r"$B_{total}$"]
legend_names
# tvars_splitted = split_vec(tvar)
# tvar2plot = join_vec(tvars_splitted[0:2] + [tvars_splitted[-1]])
# legend_names = legend_names[0:2] + [legend_names[-1]]
"ytitle", "$B$")
options(tvar2plot, "ysubtitle", ysubtitle)
options(tvar2plot, "legend_names", legend_names)
options(tvar2plot,
"thick", 2)
options(tvar2plot, "char_size", 16) options(tvar2plot,
In [5]:
= config["output"]
output = output["path"]
path = output.get("display", False)
display
if "png" in output["formats"]:
=path, display=display)
tplot(tvar2plot, save_pngif "svg" in output["formats"]:
=path, display=display)
tplot(tvar2plot, save_svgif "csv" in output["formats"]:
= get_data(tvar2plot, xarray=True)
da : DataArray +".csv") da.to_pandas().to_csv(path