In [1]:
## This notebook is sometimes best run with JupyterLab (see upper right) and Python 3.11
# If not run in JupyterLab, all should be ok but then %matplotlib widget (which allows interactivity) 
# might not display the full set of the cursor coordinates.
In [2]:
import radyn_xtools.radyn_xtools as radx
import numpy as np
import matplotlib.pyplot as plt
import os
In [3]:
radx # run this cell to see where radyn_xtools is located in your site-packages (in case you want to edit or 
# ...   see how the .fits files are read in)
Out[3]:
<module 'radyn_xtools.radyn_xtools' from '/home/adamkowalski/anaconda3/envs/python311/lib/python3.11/site-packages/radyn_xtools/radyn_xtools.py'>
In [4]:
## Optional cell:  Load in some decent-looking fonts and colors
import matplotlib.font_manager as font_manager
import matplotlib as mpl
mpl.rcParams['font.family']='serif'
cmfont = font_manager.FontProperties(fname=mpl.get_data_path() + '/fonts/ttf/cmr10.ttf')
mpl.rcParams['font.serif']=cmfont.get_name()
mpl.rcParams['mathtext.fontset']='cm'
mpl.rcParams['axes.unicode_minus']=False
mpl.rcParams['axes.formatter.use_mathtext']=True
# Load in some good color schemes (from Paul Tol's color schemes:  https://personal.sron.nl/~pault/)
bright = radx.color_bright()
rnbw14 = radx.color_rainbow14()
In [5]:
# Tell the notebook where you unpacked all the radyn_out.<model_id>.fits files.
# This directory should have subdirectories called lcontribf/, ccontribf/, spectra/, and modelvals/
# Here, the default is to set an environment variable in a notebook cell, but you can also send grid_dir= '...' to all routine calls, or set this in your .bash_profile
os.environ['grid_dir'] = '/home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/'
In [6]:
# Choose a model_id
your_model_id = 'mF13-85-3' # the .dMe is optional here.
In [7]:
## Load in the atmos class (with temperature, electron density, etc...  see analysis_tools_mdwarfgrid.pdf for all class attributes)
atmos = radx.load_atmos(model_id=your_model_id)
# Note:  it's ok if it says cannot load in rjit and rijt (these were not saved in the original CDF output)
Read in ...  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/radyn_out.mF13-85-3.dMe.fits
Could not read in rjit, rijt.
In [8]:
## Make a movie with Plotly for incrementing through time
atmos_df = radx.make_dataframe(atmos.timet, np.log10(atmos.cmass1t), atmos.tg1t) # see analysis_tools_mdwarfgrid.pdf for other class attributes
radx.make_movie(atmos_df,xlim=(1.5,-5),ylim=(3000,25000), save_movie=False, xlabel='log10 colmass (g/cm2)',ylabel='Temperature')
In [9]:
## Display a contribution function to the emergent intensity at mu=0.95
#   (default is hydrogen Balmer gamma;  to see options just set line='??')
%matplotlib widget
wl1 = -40.0 # will plot from lam0 - wl1 to lam0 + wl2 in delta Angstroms
wl2 = 40.0
ci_dict = radx.ci_image1(atmos, model_id = your_model_id, line='Hg', time=1.0, \
        vmin=-2,vmax=1.5,xlim=[wl1, wl2],ylim=[-100,500], \
        savefig=True,user_figsize=(8,6),ci_log=True,user_fontsize=14,\
        user_cmap = 'Greys',oplot_vel=True,vel_color=bright[3], \
        ci_prime=(0.05,0.95),ci_zlim=(-100,-100),Ilam_color = bright[4],\
        ciprime_color=bright[1], oplot_tau1=True,tau_color=bright[1],\
        tlim0=0,tlim1=60, oplot_t0=False, oplot_nel=True,flip_wl=False,\
        labcolor='k',ZFIND=150)  # ZFIND tells the plot in the margin on the right
          # at which height to put the label for the electron density, n_e (default 150km)

# Will also create a .pdf of the plot in the working directory.
Lambda Rest (Vac) is  4341.84423828125  Ang
Plotting contribution function (erg/s/cm3/sr/Ang) for  H$\gamma$  at mu= 0.953 at time = 1.000  sec for model ['/home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/lcontribf/lcontribf-Hg.mF13-85-3.dMe.fits'] .
The maximum emergent I_lam (erg/s/cm2/sr/Ang) for this profile is 1.779e+08
created plot:  contrib_fn_plot.pdf
The map value range is [ -2 1.5 ] erg/s/cm3/sr/Ang.
Returned height (km), wl (Ang), and contribution function with dimensions: (250,) (31,) (250, 31, 50)
Figure
No description has been provided for this image
In [10]:
# load contribution functions to the emergent intensity (mu=0.95) at continuum wavelengths
contci_dict = radx.load_contci(model_id='mF13-85-3')
print(contci_dict['wlci'])
Returning a dictionary of contribution function (nw, ndep, ntime) for  ['/home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/ccontribf/ccontribf.mF13-85-3.dMe.fits']
dict_keys(['timesci', 'wlci', 'zci_t', 'ciz_t', 'mci_t', 'cim_t', 'tau_ci_t', 'cip_t'])
Shapes:
time:   (50,)
wl:   (53,)
z:   (250, 50)
ci:   (53, 250, 50)
ciprime:   (53, 250, 50)
tauci:   (53, 250, 50)
[  700.    750.    800.    850.    911.7  1300.   1332.   1358.   1389.
  1407.   1435.   1519.   1610.   1680.   1800.   2069.   2350.   2513.
  2519.   2539.   2671.   2780.   2830.   2992.   3080.   3200.   3300.
  3400.   3500.   3550.   3615.   3870.   4000.   4170.   4300.   4700.
  5130.   5790.   6010.   6690.   7000.   7400.   7800.   8205.7  8760.
 10000.  12150.  13500.  14422.  15400.  16700.  17300.  20900. ]
In [11]:
# Plot contribution function at 4170Ang, time=2s in mF13-85-3
%matplotlib widget
f,ax1=plt.subplots()
time_ind = 10
i4170 = radx.findind(contci_dict['wlci'], 4170.0)
ax1.plot(contci_dict['zci_t'][:, time_ind], contci_dict['ciz_t'][i4170, :, time_ind],color=bright[1],marker='+',label='Contribution function (continuum)')
ax1.legend(loc='lower right')
ax1.set_ylabel('Contribution function (erg/s/cm2/sr/Ang/cm)')
ax1.set_xlabel('Height (cm)')
ax2 = ax1.twinx()
ax2.plot(atmos.z1t[:,time_ind], np.log10(atmos.tg1t[:,time_ind]),color='k',ls='dashed')
ax2.set_ylabel('log T')
ax2.set_title('time = '+str(contci_dict['timesci'][time_ind])+' s')
plt.tight_layout()
Figure
No description has been provided for this image
In [12]:
help(radx.load_spec)
Help on function load_spec in module radyn_xtools.radyn_xtools:

load_spec(model_id='mF13-85-3.dMe', time=-9.0, stype='cont_flx', norm_wl=-99.0, silent=False, model_dir='envvar')
    defaults:       load_spec(model_id='mF13-85-3.dMe', time = -9.0, stype = 'cont_flx', norm_wl = -99.0, silent=False)
      time = -9.0:  returns time-averaged spectrum
      time = -99.0: returns spectra at all times
      time >=0:     returns spectrum at time = t
      stype options:  'cont_flx', 
                      'cont_i95', 
                      'cont_i77', 
                      'cont_i50', 
                      'cont_i23', 
                      'cont_i05', 
                      'Hg_flx', (H Balmer gamma flux)
                      'Ha_flx', (H Balmer alpha flux)
                      'Hb_flx', (H Balmer beta flux)
                      'merged_flx', 
                      'Hg_flx_VCS', (H Balmer gamma flux at nlambda = 327 points)
                      'Paa_flx' (H Paschen alpha flux), 
                      'Pab_flx' (H Paschen beta flux), 
                      'CaIIK_flx', 
                      'CaIIH_flx', 
                      'CaII8542_flx', 
                      'HeI10830_flx' 
                    Note:  The intensity spectra at mu=0.95 for the emission lines, instead of radiative flux spectra, 
                           can be directly obtained by the user from the .fits files.
    returns a dict: {'wl':wl_ret, 'Flam_t0':t0_ret, 'Flam':spec_ret, 'Flam_prime':prime_spectrum, 'time':t_spec, 'wl0':lam0_air}
                    Note:  Wavelengths for emission lines in air, for continuum in vaccuum

In [13]:
# Read in detailed continuum spectrum from the model at time t;  time=-99 returns all times; time=-9 returns time-averaged.
cont_dict = radx.load_spec(model_id='mF13-85-3', time=-9,  stype='cont_flx' ,silent=False)
Reading in spectra from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/spectra/spec.mF13-85-3.dMe.fits
Returning time-averaged spectrum.
Time average from 0.200-0.100 s to 9.800+0.100 s with dt = 0.200 s
  
Returned a dictionary with: wl [Ang], Flam_t0 [erg/s/cm2/Ang], Flam [erg/s/cm2/Ang], Flam_prime [= Flam - Flam_t0],  time [s], wl0 [Ang]
Spectra in units of erg/s/cm2/Ang/steradian if requested continuum intensity:  icont95, icont77, icont50, icont23, icont05
Spectra are surface flux spectra (Flam) in units of erg/s/cm2/Ang if requested cont_flx
Rest wavelength [Ang] =  -999
Air wavelengths? Yes for emission lines.  No for continuum.
  
In [14]:
print(cont_dict.keys()) # See KAC24 paper for meaning of Flam and Flam_prime
dict_keys(['wl', 'Flam_t0', 'Flam', 'Flam_prime', 'time', 'wl0'])
In [15]:
%matplotlib widget
f,ax1=plt.subplots()
ax1.plot(cont_dict['wl'], cont_dict['Flam'], marker='+',color='k')
ax1.set_xlabel(r'Wavelength ($\rm{\AA}$)')
ax1.set_ylabel(r'Radiative Surface Flux (erg cm$^{-1}$ s$^{-1}$ $\rm{\AA}^{-1}$)')
ax1.set_title('time = '+str(cont_dict['time']))
plt.tight_layout()
Figure
No description has been provided for this image
In [16]:
# Load in a spectrum of Balmer H-gamma
# time = -9 gives time-averaged surface flux
# time = -99 returns flux spectra at all times (ntime, nlam = 31 for Hgamma, 51 for Halpha)
Hg_flx = radx.load_spec(model_id='mF13-85-3',stype='Hg_flx',time=2.0,silent=False)
print(Hg_flx.keys())
Reading in spectra from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/spectra/spec.mF13-85-3.dMe.fits
Returning spectrum at time =  2.0  s
  
Returned a dictionary with: wl [Ang], Flam_t0 [erg/s/cm2/Ang], Flam [erg/s/cm2/Ang], Flam_prime [= Flam - Flam_t0],  time [s], wl0 [Ang]
Spectra in units of erg/s/cm2/Ang/steradian if requested continuum intensity:  icont95, icont77, icont50, icont23, icont05
Spectra are surface flux spectra (Flam) in units of erg/s/cm2/Ang if requested cont_flx
Rest wavelength [Ang] =  4340.623979937782
Air wavelengths? Yes for emission lines.  No for continuum.
  
dict_keys(['wl', 'Flam_t0', 'Flam', 'Flam_prime', 'time', 'wl0'])
In [17]:
import matplotlib.pyplot as plt
%matplotlib widget
f,ax1=plt.subplots()
ax1.plot(Hg_flx['wl'], Hg_flx['Flam'], marker='+',color='k')
ax1.set_xlabel(r'Wavelength ($\rm{\AA}$)')
ax1.set_ylabel(r'Radiative Surface Flux  (erg cm$^{-1}$ s$^{-1}$ $\rm{\AA}^{-1}$)')
ax1.set_title('time = '+str(Hg_flx['time'])+' s')
plt.tight_layout()
Figure
No description has been provided for this image
In [18]:
# Make a movie of Balmer Hgamma spectra:
hgamma_dict_t = radx.load_spec(model_id='mF13-85-3', time=-99, stype='Hg_flx' ) # time=-99 returns all times in the model
hg_df = radx.make_dataframe(atmos.timet, hgamma_dict_t['wl'].transpose(), hgamma_dict_t['Flam'].transpose())
Reading in spectra from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/spectra/spec.mF13-85-3.dMe.fits
Returning all spectra at all times with shapes for (Flam(t0), Flam(t), wl): (50, 31) (50, 31) (50, 31)  -> (ntime, nwl)
  
Returned a dictionary with: wl [Ang], Flam_t0 [erg/s/cm2/Ang], Flam [erg/s/cm2/Ang], Flam_prime [= Flam - Flam_t0],  time [s], wl0 [Ang]
Spectra in units of erg/s/cm2/Ang/steradian if requested continuum intensity:  icont95, icont77, icont50, icont23, icont05
Spectra are surface flux spectra (Flam) in units of erg/s/cm2/Ang if requested cont_flx
Rest wavelength [Ang] =  4340.623979937782
Air wavelengths? Yes for emission lines.  No for continuum.
  
In [19]:
radx.make_movie(hg_df,xlim=(4300,4390),ylim=(0,.75e9), save_movie=False, xlabel='Wave (Ang)',ylabel='Flux (erg/s/cm2/Ang)')
In [20]:
# Make a movie of the continuum flux around the Balmer jump region
cont_dict = radx.load_spec(model_id='mF13-85-3', time=-99, stype='cont_flx' )
cont_df = radx.make_dataframe(atmos.timet, cont_dict['wl'].transpose(), cont_dict['Flam'].transpose())
radx.make_movie(cont_df,xlim=(3200,5200),ylim=(0,.75e9), save_movie=False, xlabel='Wave (Ang)',\
                 ylabel='Flux (erg/s/cm2/Ang)')
Reading in spectra from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/spectra/spec.mF13-85-3.dMe.fits
Returning all spectra at all times with shapes for (Flam(t0), Flam(t), wl): (50, 95) (50, 95) (50, 95)  -> (ntime, nwl)
  
Returned a dictionary with: wl [Ang], Flam_t0 [erg/s/cm2/Ang], Flam [erg/s/cm2/Ang], Flam_prime [= Flam - Flam_t0],  time [s], wl0 [Ang]
Spectra in units of erg/s/cm2/Ang/steradian if requested continuum intensity:  icont95, icont77, icont50, icont23, icont05
Spectra are surface flux spectra (Flam) in units of erg/s/cm2/Ang if requested cont_flx
Rest wavelength [Ang] =  -999
Air wavelengths? Yes for emission lines.  No for continuum.
  
In [21]:
# Return a profile of Balmer Hgamma with higher wavelength sampling
Hg_flx_highres = radx.load_spec(model_id='mF13-85-3',stype='Hg_flx_VCS',time=2.0,silent=False)
Reading in spectra from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/spectra/spec.mF13-85-3.dMe.fits
Returning spectrum at time =  2.0  s
  
Returned a dictionary with: wl [Ang], Flam_t0 [erg/s/cm2/Ang], Flam [erg/s/cm2/Ang], Flam_prime [= Flam - Flam_t0],  time [s], wl0 [Ang]
Spectra in units of erg/s/cm2/Ang/steradian if requested continuum intensity:  icont95, icont77, icont50, icont23, icont05
Spectra are surface flux spectra (Flam) in units of erg/s/cm2/Ang if requested cont_flx
Rest wavelength [Ang] =  4340.623980814968
Air wavelengths? Yes for emission lines.  No for continuum.
  
In [22]:
# Note:  The overall gentle slope from the blue-most point to the red-most point across the entire wavelength range here is mostly artificial.
#  It is a result of constant source function Snu across the line, while the emergent intensity and flux is converted to Flam.
%matplotlib widget
f,ax1=plt.subplots()
ax1.plot(Hg_flx_highres['wl'], Hg_flx_highres['Flam'],color='k')
ax1.set_xlabel(r'Wavelength ($\rm{\AA}$)')
ax1.set_ylabel(r'Radiative Surface Flux  (erg cm$^{-1}$ s$^{-1}$ $\rm{\AA}^{-1}$)')
plt.tight_layout()
Figure
No description has been provided for this image
In [24]:
## Now use rad2plot with interactivity !
%matplotlib widget
# send the atmosphere class that was read in with radx.load_atmos()
radx.rad2plot(atmos, 'Height', 'Temp', 'Velocity', time=2.0, y1log=True, oplot_t0=True, \
             y1lim=(3,8),y2log=False,y2lim=(-100,2e3),xlim=(-100,1e4)) 
# positive velocities = upflows
# Height is displayed in km in this routine
time =  2.0
min max of y1: 3.5127278642571733 7.15563850581271
min max of y2: -11.51117373983824 359.27608977148145
Dotted linestyles are the t=0s atmospheric parameters.
Figure
No description has been provided for this image
In [25]:
# Here are the possible variables to plot with rad2plot:
radx.rad2plot_help()
The options for rad2plot are the following: 
Height : z1t/1e5 [km]
Col Mass : log10 cmass1t [g/cm2]
Temp : tg1t [K]
Density : d1t [g/cm3]
Nel : ne1t [electrons/cm3]
Beam Heating : bheat1t [erg/s/cm3]
Pressure : pg1t [dyn/cm2]
Velocity : vz1t/1e5 [km/s], positive=up
In [25]:
# Make a two panel mp4 of 2 panels with temp, density, beam heating...
#  in current working directory.
# You must have ffmpeg installed (it's not installed in the dependencies)
#  conda install -c conda-forge ffmpeg
radx.make_movie_2panels(model_id='mF13-85-3', tend=10.0)
#  Will print out times in seconds as the movie is being made.
Read in ...  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/radyn_out.mF13-85-3.dMe.fits
Could not read in rjit, rijt.
0.0 0.0
0.2 0.2
0.4 0.4
0.6000000000000001 0.6000000000000001
0.8 0.8
1.0 1.0
1.2000000000000002 1.2000000000000002
1.4000000000000001 1.4000000000000001
1.6 1.6
1.8 1.8
2.0 2.0
2.2 2.2
2.4000000000000004 2.4000000000000004
2.6 2.6
2.8000000000000003 2.8000000000000003
3.0 3.0
3.2 3.2
3.4000000000000004 3.4000000000000004
3.6 3.6
3.8000000000000003 3.8000000000000003
4.0 4.0
4.2 4.2
4.4 4.4
4.6000000000000005 4.6000000000000005
4.800000000000001 4.800000000000001
5.0 5.0
5.2 5.2
5.4 5.4
5.6000000000000005 5.6000000000000005
5.800000000000001 5.800000000000001
6.0 6.0
6.2 6.2
6.4 6.4
6.6000000000000005 6.6000000000000005
6.800000000000001 6.800000000000001
7.0 7.0
7.2 7.2
7.4 7.4
7.6000000000000005 7.6000000000000005
7.800000000000001 7.800000000000001
8.0 8.0
8.200000000000001 8.200000000000001
8.4 8.4
8.6 8.6
8.8 8.8
9.0 9.0
9.200000000000001 9.200000000000001
9.4 9.4
9.600000000000001 9.600000000000001
9.8 9.8
Figure
No description has been provided for this image
In [ ]:
 
In [27]:
# This reads in model-averaged calculated values from Table 2 of KAC24, like Balmer jump ratio, blackbody color temperature, H gamma line flux, ... 
# These values are calculated from flare-only, time-averaged flux spectra.
# Group keyword selects on either main, Ec37, sol, auxiliary, thermal, const, N+20
BalmerJumpRatioAll, model_id, group, fnum, ecut_keV = radx.load_modelvals_ave(field = 'FcolBp_ave')
BlueRedRatioAll, model_id, group, fnum, ecut_keV = radx.load_modelvals_ave(field = 'FcolRp_ave')
In [ ]:
 
In [30]:
# Plot balmer jump ratios vs. optical continuum flux ratios (both from flare-only spectra) for the ``main'' group of models.  
%matplotlib widget
f,ax1=plt.subplots()

# One can select models based on group, injected energy flux density, low-energy cutoff (keV) which are all strings
main = np.all([group == 'main'],axis=0)

ax1.plot( BlueRedRatioAll[main], BalmerJumpRatioAll[main], marker='o', color='k', ls='none')
ax1.set_xlim(0, 3)
ax1.set_ylim(0, 12)
ax1.set_ylabel(r'C3500$^{\prime}$/C4170$^{\prime}$')
ax1.set_xlabel(r'C4170$^{\prime}$/C6010$^{\prime}$')
from matplotlib.ticker import MultipleLocator
ax1.grid(axis='both',alpha=0.35,which='both')  # axis='y'
ax1.xaxis.set_minor_locator(MultipleLocator(0.25))
ax1.yaxis.set_minor_locator(MultipleLocator(0.25))
plt.tight_layout()
Figure
No description has been provided for this image
In [31]:
# Read in a file in temporal evolution of optical color temperatures stored in ascii files in modelvals/
times, TBB = radx.load_modelvals_t(model_id='m5F11-25-4', field='Tbbp') # TFcolorRp or Tbbp
print(TBB)
Calculated spectral quantities from  /home/adamkowalski/Dropbox/0-Final_Products/ModelOutput/RADYN_Mdwarf_Grid_v1.0/modelvals/modelvals.m5F11-25-4.dMe.dat
[6560. 6390. 6240. 6120. 6030. 5980. 5940. 5920. 5890. 5900. 5920. 5950.
 5980. 6000. 6000. 5960. 5880. 5770. 5640. 5560. 5500. 5450. 5400. 5340.
 5270. 5200. 5150. 5110. 5080. 5060. 5040. 5020. 5010. 4990. 4980. 4960.
 4950. 4930. 4920. 4900. 4890. 4870. 4850. 4840. 4820. 4800. 4780. 4760.]
In [32]:
# Load in flare-only C3615(t) and flare-only C4170(t)
lc_C3615 = radx.load_contlc(model_id = 'mF13-85-3', wave=3615., stype='cont_flx')
lc_C4170 = radx.load_contlc(model_id = 'mF13-85-3', wave=4170., stype='cont_flx')
lc_C4170_i95 = radx.load_contlc(model_id = 'mF13-85-3', wave=4170., stype='cont_i95', calcTrad=True) # return also the radiation temperature at lambda = 4170 Ang as a function of time.
lc_C4170_i95.keys()
Out[32]:
dict_keys(['time_s', 'lc', 'lc_t0', 'wl', 'Trad', 'units'])
In [33]:
f,ax1=plt.subplots()
ax1.plot(lc_C3615['time_s'], lc_C3615['lc'] - lc_C3615['lc_t0'],color=bright[5],marker='+',label=r'C3615$^{\prime}(t)$') # subtract pre-flare level
ax1.plot(lc_C4170['time_s'], lc_C4170['lc'] - lc_C4170['lc_t0'], color=bright[1],marker='o', label=r'C4170$^{\prime}(t)$')
ax1.set_xlabel('time (s)')
ax1.set_ylabel('Continuum Flux (pre-flare subd)')
ax1.legend(loc='upper right',fontsize=12)
ax2 = ax1.twinx()
ax2.plot(lc_C4170_i95['time_s'], lc_C4170_i95['Trad'],ls='dashed')
ax2.set_ylabel(r'Brightness temperature [K] from $I_{\lambda}$ at $\lambda=4170 \rm{\AA}$ (dashed)',fontsize=12)
plt.tight_layout()
Figure
No description has been provided for this image
In [34]:
## Lastly, one can read in an .atmos file in the RH_input/ directory.
# The format is appropriate for a statistical-equilibrium, 
#    NLTE calculation using the RH code (Uitenbroek 2001)
#   (RH is available on Han Uitenbroek's github 
#     -- if a version that includes all the updates from Kowalski
#     et al. 2017 is desired, please email adam.f.kowalski@colorado.edu).
In [35]:
rh_dict = radx.read_rh('radyn_mF10-200-3.dMe.t7.60.atmos')
In [36]:
rh_dict.keys()
Out[36]:
dict_keys(['lgmass', 'T', 'n_el', 'vkms', 'vturbkms', 'n1_H', 'n2_H', 'n3_H', 'n4_H', 'n5_H', 'n_p'])
In [ ]: