---
title: "Replay a measured CHIME radio flash offline"
description: "Check the axes, masks and hash of FRB20180725A, compare residual dedispersion, and diagnose a fragile tail fit."
canonical_url: "https://sandboxphysics.com/stories/interstellar-radio/chime-intensity/"
language: "en"
page_type: "story"
alternate_languages:
  zh-CN: "https://sandboxphysics.com/zh/stories/interstellar-radio/chime-intensity/"
last_modified: "2026-10-28"
---

[Follow a radio pulse across the plasma](https://sandboxphysics.com/stories/interstellar-radio/)

AC06 · L3

# Replay a measured CHIME radio flash offline

Sandbox Physics · 2026-10-28

Open the frozen FRB20180725A intensity cutout from the first CHIME/FRB catalog, DOI 10.11570/21.0007. You will verify its frequency ordering, rerun three residual-dispersion trials and see why a short bright tail can give an unreliable scattering estimate. Python’s standard library is enough.

## Before you begin

Read the electron-column chapter. The input is processed intensity, already dedispersed at the archive reference DM. For polarization fitting, use the separate Q/U chapter and synthetic replay script.

## Start with the product you actually have

The archive HDF5 contains several arrays with different purposes. We extract only frb/wfall and its axis and quality information. The fitted model\_wfall is a separate product and contributes no pixels to this exercise. The similarly named calibrated\_wfall has 192 time bins in this source, so it cannot be paired with the 38-point plot\_time axis.

The source intensity array contains 16,384 native frequency rows and 38 time samples. Our compact file averages groups of 256 adjacent rows using only finite measured values, producing 64 by 38 cells. It retains the finite native-channel count in every cell, the full native frequency axis and the indices of usable native channels. Ten coarse rows are completely masked and remain null.

The input JSON has SHA-256 dbaad39016765b834f2aa8dcb69e659aa19f5563abcf8e87ed18987f0cc62047. The extractor reads about five megabytes of byte ranges from a 35.5-megabyte source file. The source advertises an MD5 in its HTTP metadata; we record it as advertised, since the full parent file was not downloaded and independently hashed.

Reading: CHIME/FRB first catalog data and waterfall documentation · CHIME/FRB official public-data tutorials

## Resolve the axes before shifting anything

For this file, intensity row zero belongs at the high-frequency end. The stored plot\_freq array is ascending, but wfall rows correspond to its reverse. The extractor checks that the mean row spectrum matches the archive spectrum when this reversal is applied. Sorting a frequency array without applying the same permutation to the data would invent a different sweep.

Time centers run from 0.49152 to 36.864 milliseconds, with a spacing of 0.98304 milliseconds. A historical documentation label says microseconds. Its numeric axis and the current official tutorial use milliseconds; we freeze the numerical interpretation explicitly. This is a short processed window, not a fresh uncorrected arrival-time series.

The archive reference DM is 715.8092661658914 parsecs per cubic centimeter. That column would produce about 13.92 seconds of raw delay from four hundred to eight hundred megahertz. Applying that entire shift to a 37-millisecond cutout would discard the signal. We instead test small residual corrections around the archive’s existing dedispersion.

Reading: CHIME/FRB first catalog data and waterfall documentation · CHIME/FRB official public-data tutorials · Condon & Ransom, Essential Radio Astronomy, Chapter 6

## Shift the measured samples with their masks

For each residual DM, calculate the frequency-dependent delay relative to eight hundred megahertz and divide by the sample interval. The result is usually a fractional sample index. Linearly interpolate the two neighboring intensity values; require both to be finite. Any index outside the saved window contributes nothing. There is no circular wrap from one edge to the other.

Combine channels with a weight equal to the smaller of their two contributing native-channel counts. This preserves the distinction between an average based on a few good channels and one based on a full coarse bin. It is an explicit count-weighting rule, not a calibrated inverse-variance likelihood. Correlated noise introduced by earlier archive processing is not reconstructed.

The script verifies the input hash before computing and writes all profiles, masks-as-weights and summary choices to a new JSON result. It uses no network connection.

$$
\frac{\delta t_\nu}{\mathrm{ms}}=4.149\,\frac{\delta\mathrm{DM}}{\mathrm{pc}\,\mathrm{cm}^{-3}}\left[\left(\frac{\nu}{\mathrm{GHz}}\right)^{-2}-0.8^{-2}\right]
$$

This is the rounded cold-plasma coefficient used by the replay. Frequencies in the formula are in gigahertz; the reference is eight hundred megahertz. A positive residual correction reads later low-frequency samples before combining the channels.

```
python3 -W error replay-chime.py
python3 -W error replay-polarization.py
```

Reading: CHIME/FRB first catalog data and waterfall documentation · CHIME/FRB official public-data tutorials

## Read the replayed profiles

Residual DM zero puts the largest sample at 13.271 milliseconds. Estimate a baseline and RMS from the first six and last six bins; the peak rises about 29.4 RMS above that baseline. A residual correction of minus one gives about 8.12, and plus one about 8.81. The broadening after a wrong shift is visible without assuming a fitted pulse template.

These numbers compare three chosen transformations of the same measured pixels. The edge bins, interpolation and changing channel coverage influence the RMS, so the quoted ratios are descriptive signal-to-noise estimates. This exercise does not optimize a new catalog DM or assign it a confidence interval.

The gray profile below uses zero residual correction. Blue and pink apply minus one and plus one. The measured waterfall shows the unshifted processed cutout. All panels are generated from the intensity values in the downloaded package.

Measured processed intensity, FRB20180725A; linear blue-white display, masked frequency rows gray. Input has already been dedispersed at the archive reference DM.

Gray: residual DM zero. Blue: minus one. Pink: plus one. The vertical scale is archive-normalized intensity, not a flux calibration in janskys.

Reading: CHIME/FRB first catalog data and waterfall documentation · CHIME/FRB official public-data tutorials

## Change the band and the time bins

The saved replay also repeats zero residual DM using only the lower or upper half of the band. Their peak-to-edge-RMS estimates are 12.53 and 22.64, compared with 29.41 for the full band. Each half contains thirty-two coarse frequency rows with its original mask. The source spectrum, masked channels and noise all affect the difference, so these values are not a direct measure of telescope sensitivity per unit bandwidth.

A second comparison averages pairs of neighboring time samples with their finite-channel counts. The input becomes sixty-four by nineteen, with 1.96608-millisecond spacing. The baseline uses three bins at each edge, preserving approximately the original baseline duration. Its peak-to-RMS estimate rises to 36.58, but the pulse peak is now assigned to 12.780 milliseconds and fewer sample centers describe its shape. Smoothing can increase a peak-to-noise ratio while reducing timing detail.

The two half-bands give apparent three-point tail times of 2.06 and about 420 milliseconds under the same crude regression. Their extreme disagreement is another reason to diagnose the short-window fit before interpreting a physical scattering time.

Reading: CHIME/FRB first catalog data and waterfall documentation · CHIME/FRB official public-data tutorials · Geyer & Karastergiou (2016), revisiting pulsar scattering

## Try a tail fit and watch it fail gracefully

After the peak, keep positive baseline-subtracted bins above three edge RMS. Fit the logarithm of those points against time. A straight decaying tail would have slope minus one over its e-folding time. Only three points survive for residual DM zero, giving an apparent 19.73-millisecond e-folding time. The two wrong-DM trials leave only two points each, so the script reports no tail estimate.

Three selected samples from a short processed window cannot separate intrinsic pulse width, baseline uncertainty, unresolved structure and scattering. The baseline itself uses late bins that may contain a tail. The large apparent time is a diagnostic of this fragile procedure; it is not a new scattering measurement of FRB20180725A.

To infer a physical scattering time, return to wider calibrated data, model the source profile and instrumental response jointly, retain the frequency dependence and test alternative tail shapes. The synthetic exponential experiment in the previous chapter supplies a controlled place to check causality and fluence conservation before attempting that fit.

Reading: Geyer & Karastergiou (2016), revisiting pulsar scattering · Condon & Ransom, Essential Radio Astronomy, Chapter 6

## Keep intensity and polarization analyses distinct

The frozen CHIME cutout has no Q or U. The downloaded synthetic-results.json is a separate detector experiment with seed 606. Run replay-polarization.py to fit its saved integrated channels independently, then compare the result with polarization-replay.json and the RM chapter’s worked example. This replay reads the saved noise realization rather than generating new detector noise.

The official polarimetric release instead begins with calibrated voltage data, corrects instrumental phase and delay, and constructs Stokes spectra. A tiny calibrated Q/U table was not located in that release. We therefore provide the primary-source route to those products without relabeling an intensity image as polarization.

For the next file, write down the product name, processing DM, axis order, time unit, mask rule and channel response before fitting. Keep the source hash and distinguish a fitted reference array from the detector data.

Reading: CHIME/FRB official public-data tutorials · Pandhi et al. (2024), CHIME/FRB polarimetry, arXiv v2

## Try the prediction

### [Compare the measured replay with a controlled injection](https://sandboxphysics.com/labs/interstellar-radio-propagation/)

1. Use the empty-path preset, then add electron column while keeping scattering zero. Explain how an incorrect residual correction would broaden that pulse.
2. Export one synthetic record. Verify that its seed and settings match the visible readouts, then run the fixed-seed Q/U replay to compare the same inference method.

[Previous: Fit the rotating polarization vector](https://sandboxphysics.com/stories/interstellar-radio/polarization-vectors/) [Next: Read a Faraday spectrum without turning it into a distance map](https://sandboxphysics.com/stories/interstellar-radio/faraday-depth/)

[Download the reproducible exercise](https://sandboxphysics.com/tutorials/interstellar-radio/materials.zip) · [Run instructions and provenance](https://sandboxphysics.com/tutorials/interstellar-radio/README.md) · [File checksums](https://sandboxphysics.com/tutorials/interstellar-radio/manifest.json)

## Sources and calculation scope

1. [Pandhi et al. (2024), CHIME/FRB polarimetry, arXiv v2](https://arxiv.org/html/2401.17378v2)

   Version 2, 2 May 2024. Sections I.1, II.1–II.2: Stokes data, redshift weighting and calibration. The text of equation 2 lists kpc alongside coefficient 0.812; this course uses the dimensionally consistent pc normalization from NRAO.

2. [Condon & Ransom, Essential Radio Astronomy, Chapter 6](https://www.cv.nrao.edu/~sransom/web/Ch6.html)

   Section 6.2, equations 6.44–6.46 and Figure 6.5: dispersion and pulse broadening. The inverse-fourth-power scattering law is a model choice here.

3. [CHIME/FRB first catalog data and waterfall documentation](https://chime-frb-open-data.github.io/waterfall/)

   The public FRB20180725A example distinguishes wfall from model\_wfall. DOI 10.11570/21.0007, catalog version 210806.vFINAL; input range extraction and all array conventions are frozen in the companion provenance file. The historical time-unit label conflicts with the actual millisecond axis; the current tutorial and numerical sample spacing resolve it.

4. [CHIME/FRB official public-data tutorials](https://chime-frb.ca/tutorials)

   Current public-data products, processed intensity and millisecond time axis. Intensity products contain no Q/U. Public data-use statement requests the relevant CHIME citation; no explicit Creative Commons grant was located.

5. [Geyer & Karastergiou (2016), revisiting pulsar scattering](https://academic.oup.com/mnras/article/462/3/2587/2589386)

   Section 2.1, equations 1–3: the one-sided exponential assumes an infinite isotropic thin screen with a Gaussian angular distribution. Finite and anisotropic screens alter the response.
