Remote imaging, processing pipeline, and observing plans. Merged from itelescope + astro-pipeline.
Find a file
laurence 3eb5ab6a03 Produce the four deliverable images and the science outputs for every session
The four-image set worked out on Centaurus A is now generated for any
target, because its value is the comparison: the same data at four levels
of treatment, so a viewer can see what processing did and did not add.
colour.py's assembly is driven by flags - gradient, neutralise, denoise,
saturation, hdr, protect-compact - so the baseline and the fully
corrected version come from ONE code path and the only differences
between them are the ones named.

Image 3 applies what the measurements justify rather than a house style.
Each item is there because measuring the first session caught the
conventional version getting something wrong: a plane fit that had
absorbed 17.9 ADU/px of galaxy halo, a core flattened by a white point
set by field stars, deconvolution ringing around every bright star, and
denoising erasing faint compact sources that turned out to be globular
clusters. Compact sources are now explicitly protected from smoothing -
2374 of them on NGC 2030.

The close-up revealed a real design error, caught by its own assertion.
Forcing a square crop cannot contain a target wider than the frame is
tall, which is the normal case for a nebula in a wide field, and the
assertion fired rather than silently cutting the subject in half. Crops
are no longer square, and when a target genuinely fills the field the
close-up is skipped with that said plainly - re-saving image 3 under a
name claiming to be a close-up would be worse than producing nothing.

science.py adds the measurements that generalise to any target:
photometric calibration from the field's own Gaia stars, the limiting
magnitude actually reached, a source catalogue with calibrated
magnitudes, an annotated field placed by the plate solution, and a radial
surface-brightness profile. Object-specific analyses stay hand-driven,
because a cluster survey suits a galaxy and is meaningless for a nebula.

All of it depends on astrometry, so an unsolved session gets no science
and says so instead of quietly producing less. NGC 2030 calibrates to a
zero point of 24.794 with 0.202 mag scatter on 917 stars, 3470 sources,
limiting G of 18.2.
2026-07-21 22:18:35 +01:00
docs Bootstrap: Default Workflow scaffold 2026-07-17 14:20:36 +01:00
itelescope Make the merged repository coherent: README, state, and internal links 2026-07-21 17:16:20 +01:00
observing/eclipse-2026-menorca Add the field plan for the 12 August 2026 total eclipse from Menorca 2026-07-21 17:10:01 +01:00
pipeline Produce the four deliverable images and the science outputs for every session 2026-07-21 22:18:35 +01:00
state Add the plate solve stage; it works on two sessions of four 2026-07-21 21:27:33 +01:00
.gitignore Merge the astro-pipeline repository, history intact 2026-07-21 17:14:28 +01:00
CLAUDE.md Bootstrap: Default Workflow scaffold 2026-07-17 14:20:36 +01:00
README.md Make the merged repository coherent: README, state, and internal links 2026-07-21 17:16:20 +01:00

astrophotography

Everything to do with taking, processing and understanding astronomical images: the remote telescopes, the code that turns their frames into pictures and measurements, and the plans for observing in person.

Formed by merging the itelescope and astro-pipeline repositories, with the history of both preserved.

Layout

Directory What it is
itelescope/ The iTelescope.net remote telescope network: a review of every scope, a southern-target guide, the observing plans, and the points drain campaign
pipeline/ The processing and analysis code. Calibration, stacking, plate solving, rendering and the science analyses
observing/ Plans for observing in person. Currently the total solar eclipse of 12 August 2026 from Menorca
state/ Project state under the Default Workflow: objective, current work, decisions, working notes
docs/ The Default Workflow itself: branching, commits, documentation policy, cost control

Start here

Where the image data lives

Not in this repository. A single calibrated frame is 61 MB and a session runs to several gigabytes, so sessions stay on disk and the code finds them through the ASTRO_SESSION environment variable:

set ASTRO_SESSION=...\NGC5128\20260721
python pipeline/stack.py

Each session directory carries its own METHODS.md describing what was done to that data and what was found, written for a reader who was not there. The code lives here; the pixels and the account of them live with the data.

Things learned the hard way

Recorded because each cost real time or real money, and because each is a requirement for anything built next rather than a curiosity:

  • Measure whether a core is saturated before buying time to fix it. A foreground star 69 arcsec from Centaurus A's nucleus was mistaken for the galaxy, and a telescope booking was made to solve a problem that did not exist. Filter the stars out of the measurement first.
  • Vet moving-object candidates in detector coordinates. Registration holds the sky still, so it drags sensor defects across the frame on perfectly straight, constant-rate tracks. Hot pixels are better-behaved asteroids than real asteroids. One cut took 141 confident spurious detections to zero.
  • Never compare an aperture magnitude against a point-source catalogue without checking the source is a point. A resolved object looks exactly like a 2.8 magnitude outburst.
  • Never fit a sky background to a field the target fills. A plane fitted around a large galaxy eats its halo, measured at -17.9 ADU/px. Fit the background and a source model together.
  • A photographic ND filter is not a solar filter. It passes the infrared that carries the heat.