
Weighing two pulsars
Two stars orbiting millisecond pulsars, weighed from public telescope data.
In 2025, at KIPAC with Maya Beleznay as my mentor, I worked on archival spectra of two millisecond pulsar binaries from the SOAR telescope in Chile. I reduced the frames in IRAF, found that one night's flats came from the wrong camera, and calibrated the wavelengths for one of the two stars, but I didn't get to the velocities. In October 2026 I went back to the same public frames, rebuilt the analysis in Python, and finished both. Below is each one, from the raw frame to the masses.
A millisecond pulsar is a neutron star spinning hundreds of times a second, sped up by taking gas from a companion star. Radio timing measures how the pulsar moves around its orbit. A spectrum of the companion measures how the companion moves. The ratio of the two speeds is the ratio of the two masses, and that's how neutron stars get weighed.
- KIPAC, Stanford's Kavli Institute for Particle Astrophysics and Cosmology, 2025
- Mentor: Maya Beleznay
PSR J1036−8317: a white dwarf on an eight-hour orbit
- SOAR 4.1 m telescope, Goodman spectrograph, 15 January 2016
- Twelve 20-minute exposures, nine arc lamps, 25 flats, 26 biases
- 248 ± 20 km/s
- how fast the white dwarf swings toward and away from us
- 1.21 M☉
- the neutron star (1.10 to 1.33 at 68%)
- 0.16 M☉
- the white dwarf, at about 9,300 K
- 56°
- how far the orbit is tipped from face-on

The arc lamps showed something I missed in 2025. Goodman's camera angle creeps during the night, and the night's operator reset it three times. Each reset moved the whole spectrum by 1.6 to 2.7 Å, which is 110 to 190 km/s at these wavelengths. I fit the arc lines' positions against the camera angle and the hour (145 Å per degree of camera angle, close to the 140 the grating equation predicts) and gave every frame its own zero point. The star 3.6 arcseconds away is the check, since it shouldn't move at all. Its velocity scatters by about 10 km/s around a flat line, and correcting the white dwarf by it changes the white dwarf's speed by 5 km/s.
The neighboring star, same frames (km/s)
The numbers
| Hours from first frame | Phase | Velocity (km/s) | ± | Cross-correlation | Neighbor |
|---|---|---|---|---|---|
| 0.00 | 0.608 | 150 | 35 | 139 | +19 |
| 0.39 | 0.656 | 66 | 34 | 58 | +6 |
| 0.91 | 0.722 | -26 | 33 | -23 | +7 |
| 1.25 | 0.763 | -144 | 34 | -130 | -6 |
| 1.76 | 0.827 | -200 | 34 | -204 | +5 |
| 2.10 | 0.869 | -269 | 34 | -253 | -10 |
| 2.72 | 0.946 | -256 | 34 | -245 | -2 |
| 3.06 | 0.988 | -277 | 37 | -270 | +4 |
| 3.55 | 0.050 | -349 | 42 | -354 | +7 |
| 3.89 | 0.092 | -298 | 38 | -307 | -4 |
| 4.49 | 0.166 | -190 | 41 | -190 | -6 |
| 4.83 | 0.208 | -168 | 42 | -180 | -20 |
Radio timing says the pulsar moves at 32.9 km/s. The white dwarf moves at 248, so it has 0.133 times the neutron star's mass. Fitting its Balmer lines with Koester's white dwarf models gives a temperature of about 9,300 K and a surface gravity below log g 6.5, the edge of that model grid. Helium white dwarf evolution models (Althaus and others, 2013) put a star like that at 0.15 to 0.19 solar masses, and its brightness at the radio distance of about 1 kpc narrows that to about 0.16. Dividing by 0.133 gives the neutron star's mass.
the neutron star weighs 1.20 M☉ and the orbit is tipped 56°.
I couldn't find a published velocity curve or mass for this white dwarf.
PSR J1036−4353: a redback, heated by its pulsar
- SOAR 4.1 m telescope, Goodman spectrograph (red camera), 21 and 22 January and 1 March 2023
- Fifteen 25-minute exposures (a sixteenth came out too faint to use)
- 345 ± 11 km/s
- the companion's speed from its magnesium lines (326 from all lines)
- 1.51 M☉
- the neutron star, with the orbit tipped 86°
- +65 ± 9 K
- how much warmer the companion looks with its heated side toward us
- 1°
- how far, in orbital phase, the velocity curve sits from the radio timing's prediction

These are the frames I was stuck on in 2025. My slides from that spring say the flats looked wrong. They were taken with Goodman's blue camera, and the science frames with the red camera, and so were the biases. This time I skipped the flat, took the bias from each frame's own unexposed strip, and calibrated the wavelengths from the night sky in every frame: its oxygen and OH emission lines, matched to a model of the night sky at Paranal, another Chilean site. Then the oxygen absorption band at 7,600 Å, made in our own atmosphere, catches what's left, like the star sitting a little off center in the slit.
- 21 Jan 2023
- 22 Jan
- 1 Mar
- Phosrisom and others
The numbers
| Night | Phase | Velocity (km/s) | ± | Temperature (K) |
|---|---|---|---|---|
| 21 Jan | 0.165 | 27 | 19 | 5040 |
| 21 Jan | 0.240 | 144 | 19 | 4970 |
| 22 Jan | 0.668 | 332 | 19 | 5090 |
| 22 Jan | 0.735 | 175 | 19 | 5110 |
| 22 Jan | 0.820 | 48 | 18 | 5120 |
| 22 Jan | 0.887 | -94 | 17 | 5070 |
| 22 Jan | 0.973 | -150 | 17 | 5060 |
| 22 Jan | 0.040 | -126 | 18 | 5040 |
| 22 Jan | 0.125 | -76 | 22 | 4960 |
| 22 Jan | 0.292 | 259 | 18 | 5010 |
| 22 Jan | 0.359 | 412 | 18 | 5000 |
| 1 Mar | 0.660 | 341 | 22 | 5120 |
| 1 Mar | 0.729 | 216 | 22 | 5120 |
| 1 Mar | 0.809 | 78 | 24 | 5160 |
| 1 Mar | 0.879 | -30 | 22 | 5070 |
The radio timing predicts exactly when in the orbit the companion should come toward us fastest. The velocity curve lands within 1° of orbital phase of that prediction.
The pulsar's wind heats the side of the companion that faces it. Hα forms mostly on that hot face, which sits closer to the system's center of mass, so it moves the least. The magnesium lines near 5,175 Å come more from the cooler far side and move the most: 345 ± 11 km/s, which matches the 340 km/s Phosrisom and others (2025) found from the same SOAR frames with a full model of the heated star.
- 21 Jan 2023
- 22 Jan
- 1 Mar
The temperature shows the heating too. The companion is 65 ± 9 K warmer when its heated face turns toward us (phase 0.75) than when it faces away (phase 0.25), which is mild for a redback.
The pulsar moves at 55.8 km/s, so the companion has 0.162 times its mass. How tipped the orbit is comes from the light curves Phosrisom and others modeled: 86°, nearly edge-on. With the magnesium speed, the neutron star comes out at 1.51 ± 0.13 solar masses. Their full model gives 1.4 ± 0.1.
What I'd do next
Both stars need more of their orbits. J1036−8317 has no data from the half of the orbit when the white dwarf moves away from us, and a second night would cut the error on its speed in half. A sharper spectrum of its Balmer lines, fit with models that go below log g 6.5, would give the white dwarf's mass from its own light instead of from evolution models. For J1036−4353, the next step is fitting the spectra and the light curve together, so the heating is modeled instead of measured around.
How the numbers work
- The frames are public, from the NOIRLab Astro Data Archive. They were taken with the Goodman spectrograph on the 4.1 m SOAR telescope on Cerro Pachón, Chile.
- The pulsars' orbits come from radio timing, through the ATNF Pulsar Catalogue (Manchester and others, 2005). J1036−8317: period 0.335 days and a pulsar orbit 0.506 light-seconds across (Camilo and others, 2015). J1036−4353: period 0.259621257 days, 0.664789 light-seconds, and the time of the ascending node, from MeerKAT's TRAPUM survey (Clark and others, 2023).
- Cleaning subtracts the bias, divides by a flat that keeps only the pixel-to-pixel changes (J1036−8317 only), and removes cosmic rays with astroscrappy, a version of L.A.Cosmic (van Dokkum, 2001).
- Extraction fits each column of the frame with a Gaussian for each star plus a sloped sky. J1036−8317's companion and its neighbor are 12 pixels apart, so the two are fitted together, which keeps each one's light out of the other's spectrum.
- Wavelengths for J1036−8317 come from its FeCu arc lamps, starting from the 28 lines I identified in IRAF in 2025, at about 2 km/s per lamp; the camera-angle model then gives each frame its zero point to about 3 km/s. For J1036−4353 they come from the sky lines in each frame matched to the Paranal model sky spectrum that the PypeIt project distributes, then corrected by the oxygen A band (frame-to-frame scatter about 25.8 km/s before correction).
- Velocities for the white dwarf come from fitting all six Balmer lines at once, the same line shape in every frame and one velocity per frame; cross-correlation gives 236 km/s, inside the error. For J1036−4353 each frame is cross-correlated against all the frames added together, and the template's zero point comes from a 5,000 K model spectrum. That puts the system's own velocity at +176 km/s; Phosrisom and others' velocities of the same frames give +205, a constant 27 km/s offset between the two calibrations that doesn't change the speeds.
- The orbit fits hold the period at the radio value, which makes the fit linear and gives one answer. Leaving out any one frame of J1036−8317 moves its speed by 26 km/s at most. Each 20-minute exposure blurs the velocity a little; that shrinks the speed by 0.3%, corrected.
- The white dwarf's temperature and gravity come from the shapes of its Balmer lines, matched to Koester's (2010) models from the SVO theory server. Its mass comes from the helium white dwarf models of Althaus and others (2013), with the radius from its Gaia brightness at the distance from the pulsar's dispersion measure (about 1 kpc, taken as uncertain by 40%).
- The code is Python, in my research-programs repository. I used Claude (Anthropic's AI model) to help write and debug it; the choices and checks on this page are mine.
- The masses follow from the two speeds. Their ratio is the mass ratio q. The companion's speed and the period give the mass function, f = P K³ / 2πG, and the neutron star's mass is M = f (1 + q)² / sin³ i.
- J1036−4353's inclination, 86°, is from Phosrisom and others (2025), who modeled ULTRACAM light curves and these same SOAR spectra. The temperatures use Coelho and others' (2005) model spectra at log g 4.5.
This page uses data obtained at the Southern Astrophysical Research (SOAR) telescope, which is a joint project of the Ministério da Ciência, Tecnologia e Inovações do Brasil (MCTI/LNA), the US National Science Foundation's NOIRLab, the University of North Carolina at Chapel Hill (UNC), and Michigan State University (MSU).
I'm happy to talk through any step of this.
Write to me