---
title: "Project frozen JPL dust geometry onto a real HST image of ISON"
description: "Reproduce a real HST direction measurement with exact UTC–TDB conversion, light time, TAN/CD projection and explicit relative-force checks."
canonical_url: "https://sandboxphysics.com/stories/comet-dust/ison-image-projection-tutorial/"
language: "en"
page_type: "story"
alternate_languages:
  zh-CN: "https://sandboxphysics.com/zh/stories/comet-dust/ison-image-projection-tutorial/"
last_modified: "2026-10-28"
---

[Comet dust, from light pressure to real images](https://sandboxphysics.com/stories/comet-dust/)

L3 · Comet dust dynamics

# Project frozen JPL dust geometry onto a real HST image of ISON

Sandbox Physics · 2026-10-28

This tutorial compares an observed outer-tail direction with calculated release geometry. You will recover the broad tail from real HST pixels, orient the image with its archived WCS, and find that several release histories share almost the same direction. The runnable calculation uses Python's standard library and public files below.

## Before you begin

Read the release-state chapter first. You should know that a synchrone fixes age and a syndyne fixes beta. The tutorial introduces the time and image-coordinate conventions as they are needed.

## Download one observation, not a press-image date

Use HST/WFC3 F606W dataset ic7301ooq from program 13198, PI J.-Y. Li. Its single drizzled exposure began at UTC MJD 56392.21727116 and ended at 56392.22041947, with 272 seconds of exposure. The arithmetic midpoint is 2013-04-10 05:15:08.235216 UTC. That is the geometry epoch used here.

The frozen archive FITS was calibrated on 2026-06-01 with CAL\_VER 3.7.3, dated Jan-07-2026. This processing date is distinct from the 2013 exposure and from any public-image release date. Li et al.'s original combined HST analysis used a different reduction and a longer observation sequence. We reproduce our declared single-frame diagnostic, not their full paper analysis.

The source FITS is 13,579,200 bytes; its SHA-256 and direct MAST URL appear in the provenance download. MAST public-mission data use allows this scientific reuse with HST/MAST attribution. The untouched archive JPEG is linked beside the generated comparison figure. Neither image is a rendered Lab particle cloud.

Reading: MAST HST program 13198 and public data-use policy · Li et al.

## Run the detached calculation

Create an empty directory, download the five required inputs and scripts, then run the command below. No site source, Lab Engine, Python packages or account are needed. The script verifies both input hashes before calculating and writes the complete numeric results plus an SVG whose grayscale pixels come from the measured image. The saved outputs used Python 3.12.14. Python 3.9 and later can replay the calculation; summation, math-library and PNG-compression differences may change final digits or file bytes across environments.

For the optional relative-force check, also download ison-perturbers.json and relative\_release\_reference.py and add --force-check. That step integrates the sampled differential planetary and nucleus-outgassing terms; it takes longer than the basic direction comparison. The reference output includes this step.

```
            mkdir ison-tutorial
cd ison-tutorial
curl --fail --remote-name https://sandboxphysics.com/stories/comet-dust/reproduce-ison.py
curl --fail --remote-name https://sandboxphysics.com/stories/comet-dust/comet_orbits.py
curl --fail --remote-name https://sandboxphysics.com/stories/comet-dust/svg_figure.py
curl --fail --remote-name https://sandboxphysics.com/stories/comet-dust/ison-image.json
curl --fail --remote-name https://sandboxphysics.com/stories/comet-dust/ison-ephemeris.json
python3 reproduce-ison.py --directory . --output result.json --figure comparison.svg
          
```

Reading: MAST HST program 13198 and public data-use policy · JPL Horizons API and observer/vector conventions

## Put reception and emission on the right clock

Horizons observer quantity 30 gives TDB minus UTC as 67.185633 seconds at the exposure midpoint. Add that interval before querying TDB vector epochs. Observer quantity 21 gives the geocentric light time, 35.28174224 minutes. The comet is seen at an earlier emission epoch, while Earth is at the reception epoch.

All frozen vectors use ICRF axes and the FRAME reference plane. Comet release vectors are heliocentric, geometric and uncorrected for light time. To compare them with Earth at reception, form the observer position from barycentric Earth at reception minus barycentric Sun at emission. Subtracting a same-time heliocentric Earth without checking the moving origin would mix epochs. The reconstructed comet direction agrees with the separately queried light-time-corrected Horizons astrometric direction to the stored precision.

$$
JD_{\rm obs,TDB}=2456392.7196229263,\qquad JD_{\rm emit,TDB}=2456392.6951217162
$$

The midpoint starts on UTC; the offset comes from Horizons, not a guessed leap-second count. The difference between these TDB epochs is the one-way light time.

$$
\boldsymbol R_{\rm obs}=\boldsymbol x_{E,\rm bary}(t_{\rm obs})-\boldsymbol x_{\odot,\rm bary}(t_{\rm emit}),\quad \boldsymbol\ell=\boldsymbol r_{c,\rm helio}(t_{\rm emit})-\boldsymbol R_{\rm obs}
$$

The observer vector is expressed relative to the Sun's emission-epoch position. The line-of-sight vector gives right ascension about 99.300821641 degrees and declination about 30.239219227 degrees.

Reading: JPL Horizons API and observer/vector conventions · MAST HST program 13198 and public data-use policy

## Use a relative release model with a matching parent

For each release state, propagate two solar conics: the grain under reduced gravity and a matching parent under ordinary solar gravity. Add their relative displacement to the JPL nucleus at the emission epoch. This is a solar relative-release approximation anchored to JPL geometry. It is not a full JPL dust trajectory.

The matching-parent subtraction matters. A solar-only parent released 120 days earlier misses the JPL nucleus by about 28,577 kilometres. Subtracting JPL directly would turn this parent-model mismatch into a false beta-zero dust tail. The relative construction returns exactly zero displacement when beta and launch velocity are zero.

The independent force check follows the actual daily JPL comet path and adds differential accelerations from eight planetary systems, together with the negative of the nucleus's unshared Marsden A1/A2 outgassing acceleration. Planetary acceleration has common and differential parts; nucleus outgassing is not automatically shared by dust. Over sixteen tested age/beta combinations, the largest offset change is 2.80 millionths and the largest position-angle change is 0.000074 degrees. Isolated nucleus outgassing changes the offset by less than 0.010 kilometres. These are sampled sensitivities, with step refinement, not a bound for all release parameters. Planetary multipoles, asteroid perturbers and relativistic terms remain outside this check.

$$
\boldsymbol r_{d,\rm approx}(t)=\boldsymbol r_{c,\rm JPL}(t)+\left[\boldsymbol r_{d,\rm solar}(t)-\boldsymbol r_{p,\rm solar}(t)\right]
$$

Both solar trajectories begin from the same JPL release position and velocity. The tutorial uses zero ejection speed for these geometry families. Optional force comparisons cover ages 30, 60, 90 and 120 days and beta 0.005, 0.03, 0.1 and 0.3.

Reading: JPL Horizons API and observer/vector conventions · Finson & Probstein · Burns

## Map directions into native pixels without mirroring

Project the line of sight onto a tangent plane about the archived reference sky position. For a target direction q and reference east, north and centre unit vectors, the tangent coordinates are $\xi=(\boldsymbol q\cdot\boldsymbol e)/(\boldsymbol q\cdot\boldsymbol n_0)$ and $\eta=(\boldsymbol q\cdot\boldsymbol n)/(\boldsymbol q\cdot\boldsymbol n_0)$. Convert radians to degrees, apply the inverse archived CD matrix and add CRPIX. The supplied script implements this full TAN projection.

FITS reference pixels are one-based. Native image rows increase along positive pixel y; only the display reverses rows. The archived CD determinant is negative, so copying a generic north-up, east-left shortcut into native pixel coordinates can mirror the result. Its positive image-y direction is −42.821 degrees east of north, agreeing with the archived ORIENTAT metadata.

As another orientation check, independently project the Sun–comet vector and negative heliocentric velocity and compare their position angles with Horizons quantity 27. They give 92.187 degrees and 79.277 degrees, respectively. A deliberately mirrored compass moves the measured tail peak from ninety degrees to about 185 degrees. The corrected JPL nucleus projects near native zero-based pixel (514.48, 528.54), consistent with the central source at this coarse scale.

$$
\begin{bmatrix}\xi\\\eta\end{bmatrix}_{\rm deg}=\begin{bmatrix}-8.07234108&-7.48061280\\-7.48061280&8.07234108\end{bmatrix}10^{-6}\begin{bmatrix}x_{\rm FITS}-515\\y_{\rm FITS}-543.5\end{bmatrix}
$$

The matrix is in degrees per native pixel. Keep its signs and handedness. It determines both the compass and the scale bar in the comparison figure.

Reading: MAST HST program 13198 and public data-use policy · JPL Horizons API and observer/vector conventions

## Measure the broad tail and keep the alternatives

The frozen image input contains medians of finite, positive-coverage native eight-by-eight blocks, with the coverage fractions saved separately. Negative calibrated backgrounds remain in the file. This robust reduction suppresses isolated bright pixels; it is not flux-conserving aperture photometry. Choosing the brightest native pixel would pick pixel (201, 803), far from the nucleus.

Measure median brightness in twenty-degree-wide sectors on a five-degree angular grid. Four overlapping radial ranges, two–six, four–ten, six–twelve and eight–fifteen arcseconds, each peak at ninety degrees. These ranges test sensitivity to the chosen radius. They share pixels and correlated drizzle noise; four matching peaks are not four independent detections, and the grid spacing is not a formal error bar. The inner two arcseconds are excluded because the inner coma contains a sunward jet.

Compare two actual model outputs below. Thirty-day grains with beta 0.1 and sixty-day grains with beta 0.03 reach nearly eight arcseconds and point within about half a degree of one another. Both are compatible with this coarse broad-tail direction. A size or outburst date would require a brightness model, production history and additional observations. The calculation also uses a common emission epoch for all dust; the saved differential-light-time displacement estimate stays below ten kilometres for sampled points within fifteen arcseconds, sufficient for this coarse comparison but not a precision astrometric fit.

| Release age (days) | Beta | Separation (arcseconds) | PA east of north (degrees) |
| --- | --- | --- | --- |
| 30 | 0.1 | 7.92 | 91.558 |
| 60 | 0.03 | 8.58 | 91.007 |
| 120 | 0.005 | 4.79 | 90.081 |
| Observed sector peak | Several compatible | 2–15 tested | 90, on a 5-degree grid |

Reading: Li et al. · MAST HST program 13198 and public data-use policy · Finson & Probstein

## Download the exact inputs and results

The first five files run the basic comparison with Python standard library only. The relative-force module and perturber data enable --force-check. The final extraction scripts optionally rebuild the frozen inputs from MAST and Horizons; image extraction requires NumPy.

- [reproduce-ison.py](https://sandboxphysics.com/stories/comet-dust/reproduce-ison.py)
- [comet\_orbits.py](https://sandboxphysics.com/stories/comet-dust/comet_orbits.py)
- [svg\_figure.py](https://sandboxphysics.com/stories/comet-dust/svg_figure.py)
- [ison-image.json](https://sandboxphysics.com/stories/comet-dust/ison-image.json)
- [ison-ephemeris.json](https://sandboxphysics.com/stories/comet-dust/ison-ephemeris.json)
- [ison-results.json](https://sandboxphysics.com/stories/comet-dust/ison-results.json)
- [provenance.json](https://sandboxphysics.com/stories/comet-dust/provenance.json)
- [public-reproduction.json](https://sandboxphysics.com/stories/comet-dust/public-reproduction.json)
- [relative\_release\_reference.py](https://sandboxphysics.com/stories/comet-dust/relative_release_reference.py)
- [ison-perturbers.json](https://sandboxphysics.com/stories/comet-dust/ison-perturbers.json)
- [relative-force-sensitivity.json](https://sandboxphysics.com/stories/comet-dust/relative-force-sensitivity.json)
- [horizons-source-queries.json](https://sandboxphysics.com/stories/comet-dust/horizons-source-queries.json)
- [freeze-observation.py](https://sandboxphysics.com/stories/comet-dust/freeze-observation.py)
- [fetch-horizons.py](https://sandboxphysics.com/stories/comet-dust/fetch-horizons.py)

Optional: rebuild the small inputs from the frozen archive responses

Download the two extraction scripts and horizons-source-queries.json. Restore the exact saved Horizons response bytes, then parse them and extract the original FITS. The original MAST product must match its saved hash; a later archive recalibration will fail that check. The five-file calculation above remains independent of a future archive update.

```
mkdir source
python3 -c "import json,pathlib; p=pathlib.Path('source'); [p.joinpath(n).write_text(t) for n,t in json.load(open('horizons-source-queries.json')).items()]"
curl --fail -o source/ic7301ooq_drz.fits 'https://mast.stsci.edu/api/v0.1/Download/file?uri=mast:HST/product/ic7301ooq_drz.fits'
curl --fail -o source/ic7301ooq_drz.jpg 'https://mast.stsci.edu/api/v0.1/Download/file?uri=mast:HST/product/ic7301ooq_drz.jpg'
python3 fetch-horizons.py --directory source
python3 freeze-observation.py --source-directory source --output-directory rebuilt --documentation-directory rebuilt-docs
```

![Measured HST ISON pixels with projected dust families and a WCS compass](https://sandboxphysics.com/stories/comet-dust/ison-projection.svg)

Measured pixels use a median reduction and logarithmic display. Colored curves are the declared solar relative-release model; arrows show antisolar and opposite-velocity directions. [Open the untouched MAST preview](https://sandboxphysics.com/_astro/ic7301ooq_drz.Bh-7PpJQ.jpg)

## Try the observation

### [Relate the projection to the three-dimensional picture](https://sandboxphysics.com/labs/comet-dust-tails/)

1. Compare the burst and single-size families, then rotate the view near the orbital plane.
2. Return to the observed comparison figure. Identify which features are measured pixels, which are reference directions and which are calculated release curves.

## Exercises and explained answers

Change the code to use the brightest native pixel or mirror the x axis. What changes, and which check reveals the mistake?

The brightest native pixel selects a contaminating feature far from the nucleus. Mirroring gives sector peaks around 185 degrees and reverses the expected compass handedness. Check the JPL nucleus position, the CD determinant, ORIENTAT and the independently projected Horizons position angles before interpreting a tail curve.

Why are the tiny sampled force corrections not evidence that the model recovers precise ISON grain sizes?

They compare a few dynamical approximations at fixed assumed release states. The observation still has broad overlapping sectors, drizzle correlations, launch-speed uncertainty and size–age degeneracy. The calculation supplies a geometrical direction comparison, without a calibrated surface-brightness likelihood or a unique grain population.

[Previous: Why Poynting–Robertson drag takes away orbital energy](https://sandboxphysics.com/stories/comet-dust/slow-loss-of-orbital-energy/) [Next: Read PR drag and thermal recoil without mixing their clocks](https://sandboxphysics.com/stories/comet-dust/reading-slow-radiation-forces/)

## Sources and calculation scope

1. [Finson & Probstein, A Theory of Dust Comets I (1968)](https://adsabs.harvard.edu/pdf/1968ApJ...154..327F)

   ApJ 154, 327–352, DOI 10.1086/149761. Sections I–III, especially pp. 329 and 334–335 / Figure 4: post-gas-drag dust motion, reduced solar gravity, synchrones and syndynes. We add an explicitly assumed launch law for the teaching scene.

2. [Burns, Lamy & Soter, Radiation Forces on Small Particles (1979)](https://ntrs.nasa.gov/citations/19790070469)

   Icarus 40, 1–48, DOI 10.1016/0019-1035(79)90050-2. Sections III–IV derive the first-order radiation force; section VI, equation (19) / Figure 7 discuss pressure efficiency; sections VII–VIII, equations (47)–(50) give reduced-gravity orbits and orbit-averaged PR evolution. The paper was read in the author-hosted 48-page PDF.

3. [Li et al., HST observations of Comet ISON, arXiv:1311.0826v1](https://arxiv.org/abs/1311.0826v1)

   Section 2 gives the April 2013 HST observation sequence and original reduction; the sunward inner jet and extended tail motivate excluding the inner two arcseconds in our coarse direction diagnostic. Our 2026 archive single-frame reduction is different from the paper's combined images.

4. [MAST HST program 13198 and public data-use policy](https://archive.stsci.edu/proposal_search.php?id=13198&mission=hst)

   HST/WFC3 F606W dataset ic7301ooq. The tutorial freezes ic7301ooq\_drz.fits, 13,579,200 bytes, SHA-256 bd436ea87d7ab05ba8e10280e03ea04887db7055841260fb8b4bdf0b547e33f7. MAST public-mission data-use policy permits use with attribution: HST/MAST, program 13198, PI J.-Y. Li; STScI operated by AURA under NASA NAS5-26555.

5. [JPL Horizons API and observer/vector conventions](https://ssd.jpl.nasa.gov/horizons/manual.html)

   API response version 1.2; API documentation version 1.3. Frozen comet record 90004196, solution JPL#57 dated 2025-Nov-21\_13:42:48, DE441. Read TIME\_TYPE, TLIST, ICRF/FRAME vector conventions and observer quantities 1, 19, 20, 21, 24, 27, 30. The saved requests and responses preserve the adopted time scale and geometry.
