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
A raw spectrum frame: two faint horizontal streaks, the pulsar's companion and a neighboring star, across a dark field speckled with cosmic rays
One of the twelve exposures, before anything is done to it. Wavelength runs left to right, from about 3,600 Å (violet) to 4,900 Å (blue-green), and the slit runs up and down. The bright streak is the pulsar's companion. The fainter streak just above it is an unrelated star 3.6 arcseconds away, and the specks are cosmic rays.
All twelve frames added together after shifting each one to the white dwarf's own frame. The dips are hydrogen's Balmer lines, Hβ through H9. How wide they are depends on the star's temperature and surface gravity.

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)

Twelve velocities over 5.2 hours, about two-thirds of the orbit. Phase 0 is when the white dwarf comes toward us fastest.
The numbers
Hours from first framePhaseVelocity (km/s)±Cross-correlationNeighbor
0.000.60815035139+19
0.390.656663458+6
0.910.722-2633-23+7
1.250.763-14434-130-6
1.760.827-20034-204+5
2.100.869-26934-253-10
2.720.946-25634-245-2
3.060.988-27737-270+4
3.550.050-34942-354+7
3.890.092-29838-307-4
4.490.166-19041-190-6
4.830.208-16842-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°.

The shaded band is the white dwarf masses the models and the distance allow (68%).

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
A raw spectrum frame: one faint horizontal streak, the pulsar's companion, crossed by bright vertical lines of night-sky emission
One exposure from 22 January 2023, from about 3,800 Å on the left to 7,800 Å on the right. The bright vertical lines are the night sky glowing: oxygen at 5,577 and 6,300 Å, and bands of OH toward the red.

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
Three nights, folded on the orbit the radio timing predicts. Phase 0 is when the companion comes toward us fastest. Only the speed and the system's own velocity are fitted.
The numbers
NightPhaseVelocity (km/s)±Temperature (K)
21 Jan0.16527195040
21 Jan0.240144194970
22 Jan0.668332195090
22 Jan0.735175195110
22 Jan0.82048185120
22 Jan0.887-94175070
22 Jan0.973-150175060
22 Jan0.040-126185040
22 Jan0.125-76224960
22 Jan0.292259185010
22 Jan0.359412185000
1 Mar0.660341225120
1 Mar0.729216225120
1 Mar0.80978245160
1 Mar0.879-30225070

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 same frames, measured one part of the spectrum at a time.

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
Temperature from each frame's line shapes, matched to model K-star spectra (Coelho 2005).

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