MASER is a tool I developed for computing the visibility windows of radio emission generated by magnetic interactions between stars and their orbiting planets. These signatures are transient, and this tool predicts when they will appear based on the underlying system geometry. The emission is emitted in a hollow cone shape from the Northern and Southern magnetic hemispheres of the host star, as illustrated below:
MASER is written in Python, and is described in the publication Kavanagh & Vedantham (2023). While it was developed for studying star-planet interactions, MASER can be applied to any magnetised body that interacts with an orbiting satellite (e.g. planets, brown dwarfs, white dwarfs).
The installation steps for MASER are listed below. I also recommend you try out the dedicated web app!
MASER can be installed via pip, and depends solely on NumPy (>2.42):
pip install git+https://github.com/robkavanagh/maser.git
Once installed, you can utilise it in your Python workflow via:
from maser import maser
The function maser requires the vector params, which contains the system parameters required to compute the visibility of the radio emission, and the NumPy array times, which contains the observing times in days. The elements of params are as follows:
Star:
M_s: Mass (solar masses)R_s: Radius (solar radii)P_s: Rotation period (days)i_s: Inclination of the rotation axis relative to the line of sight (radians)B_s: Dipole field strength at the magnetic poles (Gauss)beta: Magnetic obliquity (radians)phi_s0: Rotation phase attimes = 0(0 – 1)
Planet:
a: Orbital distance (stellar radii)i_p: Inclination of the orbital axis relative to the line of sight (radians)lam: Projected spin-orbit angle (radians)phi_p0: Orbital phase attimes = 0(0 – 1)
Emission:
f: Observing frequency (MHz)alpha: Cone opening angle (radians)dalpha: Cone thickness (radians)
Two optional parameters Lmax and tol can also be set when calling maser, which set the maximum size of the magnetic field loops and the tolerance of the numerical solver implemented (see the associated publication for details).
Calling maser(params, times) returns two arrays corresponding to the visibility of the emission from the Northern and Southern magnetic hemispheres of the star at each time in times (see sketch above). Visible emission is represented with the value True, whereas emission that is either not visible or cannot be generated is represented with the value False. The script examples/example lightcurve.py provides an example of using MASER to compute the visibility of radio emission from a star-planet system observed over two days. The computed time series should resemble the following figure when plotted, where the visibility windows of the emission from the North and South are coloured in red and blue respectively:
MASER has been utilised for a variety of science cases. The published use cases as of March 2026 are as follows:
- Assessing the geometric dependence of pulse durations from long period radio transients (Zhong & Most 2026)
- Interpreting the non-detection of magnetic star-planet interactions (Peña-Moñino et al. 2025)
While it is not a requirement for MASER, the underlying code was written to benefit from the enhanced performance offered by Numba. With Numba, the function maser computes about 70 times faster. See the script examples/numba speedup.py for a demonstration.
If you use MASER in your own work, please cite Kavanagh & Vedantham (2023).

