Calculate L-Shells

L-shells are the apex heights of specified magnetic field lines in units of Earth radii where L=0 corresponds to the center of the Earth. You can calculate the L-shells seen by a given instrument using the geo2apex() and get_apex() methods. An example of this is shown for a single point along the orbit of the International Space Station (ISS) below.

import apexpy
import datetime as dt

# Set the location of the ISS in geodetic coordinates at a single time
stime = dt.datetime(2021, 3, 15, 15, 6)
iss_lat = 9.8
iss_lon = 142.2
iss_alt = 419.0

# Get the apex lat
apex_iss = apexpy.Apex(stime, refh=iss_alt)
alat, alon = apex_iss.geo2apex(iss_lat, iss_lon, iss_alt)

# Get the apex height
aalt = apex_iss.get_apex(alat, iss_alt)

# Convert from apex height in km to L-shell
L_iss = 1.0 + aalt / apex_iss.RE
print("apex height={:.3f} km, L={:.2f}".format(aalt, L_iss))
apex height=428.007 km, L=1.07

Trace a Field Line

It can be useful to trace a field line with a specified apex height across a range of known latitudes. This can then be useful when plotting field lines at a particular magnetic meridian or used to gather data along the same field line, but measured by different instruments.

import numpy as np

# Continue form the previous example, define the field line at all latitudes
lats = np.linspace(-90, 90, 181)
alts = apex_iss.get_height(lats, aalt)

# Select the locations with positive altitudes (above the Earth's surface)
iline = np.where(alts >= 0.0)[0]

# Print the latitude limits for which the field line is above the surface
# of the Earth
print("lat={:.2f} deg, alt={:.2f} km; lat={:.2f} deg, alt={:.2f} km".format(
    lats[iline[0]], alts[iline[0]], lats[iline[-1]], alts[iline[-1]]))
lat=-14.00 deg, alt=30.09 km; lat=14.00 deg, alt=30.09 km