Freeze the observation before fitting it
The file SR1_M87_2017_100_lo_hops_netcal_StokesI.csv contains actual low-band EHT-HOPS SR1 Stokes I observations of M87 on 10 April 2017. The channel frequency in its header is 227.0707 GHz. “Network-calibrated” identifies a released calibration stage; it does not say that every station’s atmospheric phase has become a known sky phase.
Our copy has 194,347 bytes. The script checks its SHA-256 against the pinned source and then checks that the three-row excerpt reproduces source lines 1272, 1274 and 1283 byte for byte, with the two header lines retained. All three rows have UTC 04.90972209 hours. The data repository places these measurements under PDDL 1.0; the tutorial reader and fitter were written independently.
python3 fit-eht-triangle.py --data-dir . --output reproduced-eht.json
# Compare reproduced-eht.json with eht-triangle-results.json
# Publisher CSV SHA-256:
# 1dc51e3e31a840ec34de5b5ff4d8a6af0cbb73cd8c6db85e917366ed3ec7924a
# Three-row excerpt SHA-256:
# 62ffea8dadaae26aa7fb3788c0456c4625d0e13eaad61e57529ba20311d86502Reading: EHT 2019-D01-01 M87 data release, pinned commit 27ae76a
Read one simultaneous triangle
AA is ALMA, AZ is the Submillimeter Telescope in Arizona, and LM is the Large Millimeter Telescope in Mexico. The rows below list UTC hour, first station, second station, eastward spatial frequency, northward spatial frequency, amplitude, phase and thermal amplitude uncertainty. Spatial frequencies are already in wavelengths. Amplitudes and uncertainties are in jansky; phases are in degrees.
The publisher stores AA to AZ, AA to LM, and AZ to LM. To walk AA to AZ to LM to AA, the AA-to-LM edge must be reversed. Conjugating its complex visibility keeps the amplitude and negates the phase. The exported spatial frequencies close to within a few thousand wavelengths, tiny beside the billion-wavelength baselines; retain that rounding residual instead of editing the published numbers.
04.90972209,AA,AZ,3028965632.0000,-4496652800.0000,0.10473071,179.9880,0.00501226
04.90972209,AA,LM,2296739584.0000,-3319742720.0000,0.07996017,59.4402,0.00309308
04.90972209,AZ,LM,-732228224.0000,1176914944.0000,0.51672293,-62.7827,0.04022401Reading: EHT 2019-D01-01 M87 data release, pinned commit 27ae76a · EHT Collaboration, First M87 Results IV, arXiv:1906.11241v1
Calculate the phase and its thermal approximation
Add the phase on AA–AZ to the phase on AZ–LM, then subtract the stored AA–LM phase. Wrapping the answer into a single cycle gives . The script independently forms the three complex numbers and takes the argument of their directed product; the two calculations agree.
For high signal-to-noise ratio, a small transverse complex-noise perturbation changes a visibility phase by approximately noise divided by amplitude. Assuming independent thermal errors, add those phase variances. The minimum amplitude signal-to-noise ratio here is ; the resulting closure uncertainty is . Amplitude-calibration errors, correlated errors and nonclosing systematics are outside this estimate.
Reading: EHT Collaboration, First M87 Results IV, arXiv:1906.11241v1
Choose an empirical family that can be asymmetric
Use two circular Gaussian components with equal full width at half maximum . Put the primary at the origin and a secondary with flux ratio at displacement . Its separation is ; the angle is measured from east toward north. Write for the Gaussian standard deviation in radians.
A normalized circular Gaussian transforms to a Gaussian in spatial frequency. Multiplying that envelope by the two-component phasor gives the model below. The total flux multiplies every amplitude and cancels from closure phase. A common translation also cancels from closure, so fixing the primary at the origin removes an unmeasurable position here.
Reading: NRAO Essential Radio Astronomy, Chapter 3, aperture synthesis
Solve the flux analytically, then search the shapes
For a candidate shape let be its unit-total-flux visibility amplitude on edge . The amplitude residual is . Divide by , square, and add. Differentiating this sum with respect to gives a single linear equation and the weighted solution below. Thus the numerical search needs only the four shape parameters.
The script searches separations from ten to one hundred microarcseconds, five-degree angles, six flux ratios and five starting widths. It refines eight separated starting candidates by successively smaller coordinate steps. The output lists the search choices so it can be repeated exactly. This finite search demonstrates multiple good fits; it does not guarantee a global optimum.
Compare the actual saved fits
One refined fit has separation , angle , flux ratio , width and total flux . It predicts amplitudes in the stored row order, and closure . Its approximate objective is .
A distinctly different fit has separation , angle , ratio and width . Its objective is . Both fit much more closely than the stated thermal errors require. We supplied only three amplitudes and one closure angle for five free quantities, so a tiny objective is expected to leave considerable freedom.
For comparison, imposing zero closure gives a phase-only contribution of about under this thermal approximation. The measured angle carries strong asymmetric-shape information, even though it leaves many asymmetric shapes available. Report the objective together with the parameter count: five free quantities for four data constraints.
Keep the real triangle and synthetic imaging separate
The real-data calculation never inverse-transforms the released raw station phases into an asserted sky image. It fits quantities that survive unknown station phases: amplitudes and a directed closure. A realistic image requires many triangles, more calibration information and a treatment of errors shared between measurements.
The interactive array instead uses a known synthetic finite-pixel sky and saves an independent ideal calibrator and total-power value. That controlled experiment lets us compare dirty images with two regularized inversions and the separate known source. The real triangle and synthetic image answer complementary questions: what the published measurements say, and how sparse sampling affects a reconstruction when the truth is known.
Reading: EHT 2019-D01-01 M87 data release, pinned commit 27ae76a · EHT Collaboration, First M87 Results IV, arXiv:1906.11241v1
What to preserve in the next triangle
Keep the release version, original rows, station ordering, timestamp definition, frequency and uncertainty columns. Derive the directed product before adding phases. Check that every edge belongs to the same integration, propagate the stated uncertainty model and compare more than one candidate shape. Preserve the predictions as well as the fitted parameters: another baseline can then test where the candidates disagree.