fit_distortion_pointing#

esis.flights.f1.optics.fit_distortion_pointing(instrument=None, num_scene=401, grids=None, sigma_psf=1.0, seed=0, path=None, directory=None, workers=1)[source]#

Fit the per-frame payload pointing of the whole flight.

Reproduces (and lets anyone verify) the time series stored in _data/distortion_pointing.ecsv: for every frame of esis.flights.f1.data.level_1(), a coherent pitch/yaw/roll offset from the reference model is fit with esis.optics.fit_distortion_series() under a rigid-payload model (the same offset for all four channels).

Expect roughly a hundred merit evaluations per frame at a few seconds each; the frames are independent, so workers parallelizes them perfectly. Requires the ESIS Level-1 data and the AIA synthetic scene (downloaded and cached on first use).

Parameters:
  • instrument (None | Instrument) – The reference instrument model whose pointing is offset. If None, esis.flights.f1.optics.distortion_fit() is used, idealized for raytracing speed.

  • num_scene (int) – The number of samples along each axis of the resampled AIA scenes.

  • grids (None | list[dict]) – The per-frame scan schedule. If None, the production schedule (coarse \(\\pm 10''\), fine \(\\pm 1''\)) is used.

  • sigma_psf (None | float) – The standard deviation, in detector pixels, of the Gaussian point-spread function convolved with the modeled images.

  • seed (int) – The seed used to make each evaluation deterministic.

  • path (None | str | Path) – If given, the fitted offsets are written to this path as an ECSV table, in the format of _data/distortion_pointing.ecsv.

  • directory (None | str | Path) – A directory under which each frame’s fit is logged. If None, the fits are not logged.

  • workers (int) – The number of processes used to fit frames concurrently.

Return type:

QTable

Examples

import esis

pointing = esis.flights.f1.optics.fit_distortion_pointing(
    path="distortion_pointing.ecsv",
    workers=8,
)