First image of a Black Hole built using Python

First image of a supermassive black hole candidate at the center of the radio galaxy M87 and the quasar 3C 279 was created from Event Horizon Telescope (EHT) 1.3 mm radio wavelength observations by using Python and related data science libraries like numpy, scipy, pandas, matplotlib.


First M87 Event Horizon Telescope Results. III. Data Processing and Calibration


We present the calibration and reduction of Event Horizon Telescope (EHT) 1.3 mm radio wavelength observations of the supermassive black hole candidate at the center of the radio galaxy M87 and the quasar 3C 279, taken during the 2017 April 5–11 observing campaign. These global very long baseline interferometric observations include for the first time the highly sensitive Atacama Large Millimeter/submillimeter Array (ALMA); reaching an angular resolution of 25 μas, with characteristic sensitivity limits of ~1 mJy on baselines to ALMA and ~10 mJy on other baselines. The observations present challenges for existing data processing tools, arising from the rapid atmospheric phase fluctuations, wide recording bandwidth, and highly heterogeneous array. In response, we developed three independent pipelines for phase calibration and fringe detection, each tailored to the specific needs of the EHT. The final data products include calibrated total intensity amplitude and phase information. They are validated through a series of quality assurance tests that show consistency across pipelines and set limits on baseline systematic errors of 2% in amplitude and 1° in phase. The M87 data reveal the presence of two nulls in correlated flux density at ~3.4 and ~8.3 Gλ and temporal evolution in closure quantities, indicating intrinsic variability of compact structure on a timescale of days, or several light-crossing times for a few billion solar-mass black hole. These measurements provide the first opportunity to image horizon-scale structure in M87.

AIPS (Greisen 2003) is the most widely used software package for VLBI data reduction and processing at frequencies at or below ~86 GHz. It is commonly used in the VLBI community and was built to process low-S/N data from fairly homogeneous centimeter-wave observatories at low recording bandwidths. The EHT, however, falls in a different category: its high recording bandwidth and heterogeneous array produce data with a wide range of S/N, often dominated by systematic effects instead of thermal noise. These properties required the development of a custom pipeline based on AIPS, deviating from standard fringe-fitting procedures for lower frequency data processing as outlined in e.g., the AIPS Cookbook.111

The custom AIPS pipeline is an automated Python-based script using functions implemented in the eatpackage. It makes use of ParselTongue (Kettenis et al. 2006), which provides a platform to manipulate AIPS tasks and data outside of the AIPS interface. The pipeline is summarized in Figure 7 and shows individual tasks used for calibration. A suite of diagnostic plots, using tasks VPLOT and POSSM, are also generated at each calibration step within the pipeline.

Software: DiFX (Deller et al. 2011), CALC, PolConvert (Martí-Vidal et al. 2016), HOPS (Whitney et al. 2004), CASA (McMullin et al. 2007), AIPS (Greisen 2003), ParselTongue (Kettenis et al. 2006), GNU Parallel (Tange 2011), GILDAS, eht-imaging (Chael et al. 20162018), Numpy (van der Walt et al. 2011), Scipy (Jones et al. 2001), Pandas (McKinney 2010), Astropy (The Astropy Collaboration et al. 20132018), Jupyter (Kluyver et al. 2016), Matplotlib (Hunter 2007).