Usage examples

Python library

For full documentation of the functions, see Reference → aacgmv2.

For simple examples on converting between AACGM and geographic coordinates and AACGM and MLT, see Overview → Quick Start.

Command-line interface

The Python package also installs a command called aacgmv2 with several sub-commands that allow conversion between geographic/geodetic and AACGM-v2 magnetic coordinates (mlat, mlon, and mlt). The Command-Line Interface (CLI) allows you to make use of the Python library even if you don’t know or use Python. See Reference → Command-line interface for a list of arguments to the commands. Below are some simple usage examples.

Convert geographic/magnetic coordinates

Produce a file called e.g. input.txt with the input latitudes, longitudes and altitudes on each row separated by whitespace:

# lat lon alt
# comment lines like these are ignored
60 15 300
61 15 300
62 15 300

To convert this to AACGM-v2 for the date 2015-02-24, run the command python -m aacgmv2 convert -i input.txt -o output.txt -d 20150224. The output file will look like this:

57.47612194 93.55719875 1.04566346
58.53323704 93.96069212 1.04561304
59.58522105 94.38968625 1.04556369

Alternatively, you can skip the files and just use command-line piping:

$ echo 60 15 300 | python -m aacgmv2 convert -d 20150224
57.47612194 93.55719875 1.04566346

Convert MLT

This works in much the same way as calling the CLI with the convert flag. The file should only contain a single column of numbers (MLTs or magnetic longitudes, depending on which way you’re converting):

1
12
23

To convert these MLTs to magnetic longitudes at 2015-02-24 14:00:15, run e.g. python aacgmv2 convert_mlt 20150224140015 -i input.txt -o output.txt -v (note that the date/time is a required parameter). The output file will then look like this:

-120.34354125
44.65645875
-150.34354125

As with the convert flag, you can use stdin/stdout instead of input and output files:

$ echo 12 | python -m aacgmv2 convert_mlt 20150224140015 -v
44.65645875

Module Function Examples

The purpose of aacgmv2 is to convert between geographic or geodetic coordinates and magnetic coordinates at a known location. It does not perform field-line tracing from one location for another, since this requires making assumptions about the shape of the magnetic field lines. We recommend using apexpy for this purpose.

Convert coordinates

There are several functions that convert between geographic/detic and magnetic coordinates. Which one to use on what you want. To convert latitude and longitude for a single value, use convert_latlon(). For multiple values at the same time, use convert_latlon_arr(). The times can’t be vectorized because the C code needs to be re-initialized for every new time. You can see how these two functions perform differently using the timeit package:

import timeit

# The array version takes less than a second per run: ~0.99892
array_command = "".join(["import aacgmv2; import datetime as dt; ",
                         "import numpy as np; rando_lon = ",
                         "np.random.uniform(low=-180, high=180, size=100);",
                         "rando_lat = np.random.uniform(low=-90, high=90, ",
                         "size=100); aacgmv2.convert_latlon_arr(rando_lat, ",
                         "rando_lon, 300.0, dt.datetime(2015, 5, 5), ",
                         "method_code='G2A')"])
timeit.timeit(array_command, number=1000)

# The single value version run using list compression takes longer: ~2.36
# It also raises a warning every time there is a measurement near the
# magnetic equator (where AACGMV2 coordinates are undefined).
list_command = "".join(["import aacgmv2; import datetime as dt; ",
                         "import numpy as np; rando_lon = ",
                         "np.random.uniform(low=-180, high=180, size=100);",
                         "rando_lat = np.random.uniform(low=-90, high=90, ",
                         "size=100); [aacgmv2.convert_latlon(rando_lat[i], ",
                         "lon, 300.0, dt.datetime(2015, 5, 5), ",
                         "method_code='G2A') for i, lon in ",
                         "enumerate(rando_lon)]"])
timeit.timeit(list_command, number=1000)

To convert between magnetic longitude and local time, use convert_mlt(). This function examines the data and uses different C wrappers for array or single valued inputs.:

import aacgmv2
import datetime as dt

# Convert MLT to longitude and back again
dtime = dt.datetime(2020, 1, 1)
mlon = aacgmv2.convert_mlt(24.0, dtime, m2a=True)
mlt = aacgmv2.convert_mlt(mlon, dtime, m2a=False)

# This yields: 78.405 E = 24.000 h
print("{:.3f} E = {:.3f} h".format(mlon[0], mlt[0]))

If you want magnetic latitude, longitude, and local time at a given location, you can use get_aacgm_coord() for a single location or get_aacgm_coord_arr() for several locations at a given time. These functions combine the latitude, longitude, and local time conversion functions to allow the user to access all magnetic coordinates in a single call. However, they do not allow the user to convert from magnetic to geodetic coordinates.:

import aacgmv2
import datetime as dt

dtime = dt.datetime(2020, 1, 1)
mlat, mlon, mlt = aacgmv2.get_aacgm_coord(45.0, 0.0, 300.0, dtime,
                                          method='ALLOWTRACE')

# This yeilds: 40.749 E, 76.177 N, 23.851 h
print("{:.3f} E, {:.3f} N, {:.3f} h".format(mlat, mlon, mlt))

Utilities

There are additional utilities available in aacgmv2.utils that may prove useful to users. The example below demonstrates how to convert between geographic and geodetic coordinates.:

import aacgmv2

# This will yield a geodetic lat of 45.192 degrees
gd_lat = aacgmv2.utils.gc2gd_lat(45.0)
print("{:.3f}".format(gd_lat))

Another utility provides the subsolar point in geocentric coordinates.:

import aacgmv2

# This will yield geocentric values of: -179.233 E, -23.059 N
ss_gc_lon, ss_gc_lat = aacgmv2.utils.subsol(2020, 1, 1)
print("{:.3f} E, {:.3f} N".format(ss_gc_lon, ss_gc_lat))

Finally, you can retrieve a Cartesian unit vector that points to the dipolar International Geomagnetic Reference Field (IGRF) northern pole.:

import aacgmv2
import datetime as dt

# For IGRF-13 this will yield an array with values of:
# array([ 0.04867761, -0.1560909 ,  0.98654251])
aacgmv2.utils.igrf_dipole_axis(dt.datetime(2020, 1, 1))