Data Collection from ZTF Observatory
Past data calibrated from the ZTF observatory is collected before anything else can happen.
- Telescope
- 48-inch Oschin Schmidt
- Archive
- IRSA / NASA-IPAC
- Cadence
- ~2 visits / night
This page opens fine from the filesystem, but the survey, the sky cells and the viewer
fetch FITS and catalogue files — and browsers block fetch() over
file://. Serve the project once and every page works:
./serve.shThen open http://localhost:8765/showcase/
Real ZTF survey images, run through a machine-learning pipeline that aligns them, subtracts the static sky, and tries to say honestly what is left. The observatory below is invented. The pipeline, the data and every number badged REAL are not.
Figures from the repository REAL
There is no observatory called NOCTIS ARRAY. The name, the mark, the eighteen tubes, the Atacama ridge and the 2031 dates are a design demonstration. What runs underneath is a real difference-imaging and classification pipeline built on public Zwicky Transient Facility data from Palomar, using pretrained models published by other people — braai, ALeRCE and DeepStreaks.
It has recovered a known asteroid blind, produced classifier verdicts on real detections, and flagged unconfirmed candidates. It has made zero novel discoveries and does not claim any. Every section on this page carries a badge: REAL where the numbers come out of the repository, SIMULATION where the visual is a design piece.
The honest project page → How it actually works, in nine tutorials → Open the real data →
Past data calibrated from the ZTF observatory is collected before anything else can happen.
We take the reference image, which is our sharpest, best image visual and align it with the candidate images to be on the exact same coordinate plane.
Subtract the stars and objects that are not moving or appear to have no change whatsoever. What's left is what's considered changes. Checked against ZTF's own official difference for the same exposure, ours carries roughly twelve times the residual noise — a reference-depth limit, not a broken method.
Then, the detected candidates are analyzed by braai to see whether the candiate is a real detection or a bogus one. Afterward, it runs through the rest of the pipeline to classify what kind of object it is.
Nine pages, read in order, each one assuming the one before it. The first seven walk the pipeline start to finish; the last two are full guides to the object types it actually classifies. Nothing in them is invented.
Why one photograph is never enough, and where the images come from.
02Pinning every epoch to one pixel grid so a fixed star never reads as motion.
03Match the blur, then the flux, then subtract. Order is not negotiable.
04One row per blob above the noise, both signs, deliberately over-inclusive.
05Real or bogus first, then what kind of object — and where it gets that wrong.
06A fast asteroid is a streak, not a dot. Three gates, then a linker.
07What every layer, marker and label in the real tool means.
08Stars that change brightness on a clock, and how the pipeline types one.
09A feeding black hole that flickers without a period.
Start at the beginning → the tutorial index
The detector is deliberately credulous; the classifier is not. Each residual is cut into a 63×63 triplet — science, reference, difference — and pushed through a convolutional gate. The rows below are a simulation of that flow, generated in your browser. The real ones are in the survey browser.
Three pretrained ensembles in series — this is DeepStreaks, published by ZTF, used as-is. Each gate is an argument the candidate has to survive, and every rejection is written down with the score that caused it. The counts below are one real exposure.
Is this a source at all, or a cosmic ray, a dead column, a dipole from imperfect registration?
The cosmic-ray filter proper. Permissive upstream on purpose; this is where the sharp edges go.
A short trail is a fast asteroid. A long one is somebody’s satellite. The array knows the difference.
630 routed bogus · 0 false positives in 636 stamps
A candidate is not a discovery. Both of those two candidates resolved to 2019 BE5, an asteroid already in the minor-planet catalogue. That is a recovery. Candidates that resolve to nothing stay candidates, and a catalogue lookup that fails to complete is reported as unchecked — never as a find. How the three gates work →
A single streak is unfalsifiable. The linker fuses detections across exposures — and across adjacent fields, because a fast body leaves the frame between visits — into one track with a measured rate and position angle. Two points always make a line. The third is what makes it true.
Found blind — no ephemeris was supplied to the detector. Matched afterwards against the minor-planet centre by motion vector, not position: the catalogue’s own short-arc solution was 430″ off, and only the measured rate confirmed identity. Detection was never told where to look. That is what makes it a recovery rather than a check. The motion branch, in full →
The streak branch is one half. The other half asks a harder question of a source that sits perfectly still and simply changes brightness: is it real, and what is it? A pretrained gate scores the science/reference/difference triplet, then a second pass guesses the type.
45 bogus · 36 variable star · 12 AGN · 21 uncertain.
On our own shallower cutouts it reaches only 0.05–0.14 — a registration dipole, not a broken model. We publish both.
Across the whole harvest: 13,224 variable stars, 163 AGN, 11 supernovae, 3 asteroids, 1,225 uncertain.
A star that changes brightness on a clock — pulsating, erupting, or eclipsed by a companion. The largest astrophysical class this pipeline reports: 36 of 114.
Object guideA supermassive black hole feeding, flickering without a period. Twelve of 114 — and the class the stamp classifier most often confuses with a variable star, at about 0.55.
Every one of these was already catalogued. The pipeline classified known ZTF sources with documented, published uncertainty. It did not find any of them for the first time.
Here's a visual showing the real sky cells we've actually harvested from ZTF's archive — 29 quadrants of real data across five UT nights between 2018 and 2020, plotted at their true coordinates. This is a bounded, resumable harvest of chosen sky, not a live nightly survey; tile brightness is epoch depth — how many times that patch was revisited and stacked against a shared reference.
29 cells · 209 exposures · 288,953 raw detections · 0 discoveries
Everything above this line is a page about a pipeline. These four are the pipeline's actual output, rendering real ZTF observations in your browser. They need a local server — the viewer fetches about 144 MB of FITS.
One field in depth. Science frame, change overlay and deep template as stackable layers, with every detection marked in sky coordinates and clickable.
02Every control, panel and label in that viewer, with real screenshots of the live interface — not a redrawn mockup.
03Every exposure the pipeline has processed and how it classified each one. Recoveries, candidates and verdicts stay in separate categories.
04One patch of sky at a time. Step or blink through every repeat visit, aligned on a shared grid, with that visit's detections overlaid.
Everything above is an invented instrument wrapped around a real pipeline. The two views behind these buttons are the pipeline itself, rendering real ZTF observations from field 468 and every other patch of sky it has processed.