Why PANORAMA
Massive stars often spin fast and live in binaries. Rotation flattens them into a Roche shape, makes temperature and gravity depend on latitude, and broadens and reshapes their spectral lines, so standard 1D, non-rotating analyses fall short.
I wrote PANORAMA from scratch to keep the whole analysis in one consistent place: planning the observations, reading and measuring the spectra, modelling the rotating star in 3D, and preparing the results for publication. At its core it computes the Roche shape of the star and derives gravity, temperature, gravity darkening (von Zeipel 1924; Espinosa Lara & Rieutord 2011) and brightness across the surface. Those surfaces go directly into SPAMMS for spectra, and PANORAMA predicts interferometric observables from the same brightness map, so both kinds of data can be fitted together.
That joint approach is being applied to the Be star γ Cas with the MAGIC + CTAO LST-1 intensity interferometer. Radiation pressure and differential rotation are being added, the focus of my 2027 research stay at IRAP, Toulouse.
Each module is independent, exposes a few public functions and has its own README and demo script.
rot
Physics of rotating stars
Polar, equatorial, volume- and surface-equivalent radii of Roche-distorted stars, critical velocities and rotation rates with error propagation, and full 3D models with gravity darkening and optional radiation pressure.
rpole_to_requator, rpole_to_requiv, vrot_crit, rot_rate, rot_params
iacob_broad
Line broadening (IACOB-BROAD)
Python port of IACOB-BROAD (Simón-Díaz & Herrero 2014): v sin i and macroturbulence from the Fourier transform and goodness-of-fit methods combined.
iacob_broad
fitline
Spectral line fitting
Iterative fits with Gaussian, Lorentzian, Voigt and rotation + macroturbulence profiles; equivalent width, FWHM, radial velocity, MCMC uncertainties and an automatic PASS / WARN / FAIL assessment.
fitline
spec
Spectra handling
Read 1D spectra in common ASCII and FITS layouts, overplot them, remove artefacts interactively and normalise the continuum IRAF-style.
readspec, plotspec, rmvspec, normspec
obs
Observation planning
Exposure times and SNR, upcoming eclipses and orbital phases per night, telescope pointing, FITS observing logs, and BinarAlt, a browser-based planner with live observatory weather.
periodic_event, obs_phase_night, telescope_pointing, binaralt
units
Physical conversions
Classical and relativistic Doppler shifts, vacuum–air wavelengths, resolving power to velocity, and Eddington-limit quantities.
wl2kmps, vac2air, R2kmps, eddington
tex
Manuscript utilities
Find uncited BibTeX entries, query VizieR for a list of targets, and reopen pickled matplotlib figures.
nobib, queryviz, read_pkl
broad
Spectral degradation (in development)
SNR degradation, resampling, resolution degradation, and rotational and macroturbulent broadening.
planned
Quick start
git clone https://github.com/DGalanDieguez/PANORAMA
cd PANORAMA
pip install -e . # editable install, Python 3.10+
import panorama
panorama.functions() # every public function, by module
from panorama import vrot_crit, rot_params, iacob_broad
vrot_crit(mass=15., r_pole=5.0)["vrot_crit"] # break-up velocity [km/s]
star = rot_params(teff=25000, mass=15., r_pole=5.0, # 3D model of the star
rot_rate=0.8, inclination=60., plot=True)
star["teff_pole"], star["teff_equator"]
res = iacob_broad("data/HD37042", res=46000., line="SiIII")
res["vft"], res["vsgof"], res["vmgof"] # vsini and vmac
Every public function checks its inputs, has a NumPy-style docstring (help(panorama.fitline)) and has a demo in Demos/.
How to cite
The PANORAMA paper (Galán-Diéguez et al.) is in preparation. Until it is out, please cite the GitHub repository and contact me. Modules that implement published methods, such as IACOB-BROAD, list the original papers to cite in their README.