Statistics over a 200-sensor array without notebook drift
Turn long-run logs from a 200-sensor array into windowed stats with uncertainty — cleaned, aligned, and delivered as a per-sensor summary anyone can re-run.
Drag a season of spectrometer runs — 900 CSVs — onto the canvas beside the day's calibration NetCDF, and reduce them all in one pipeline. Dark and flat correction, wavelength calibration, then stacking run as live nodes with every intermediate cached. The result is a set of publication-ready spectra and a dataset export anyone can re-run against next season's runs.
Nine hundred exposures come off the instrument over a run season, and the science lives in their stacked average — not in any one frame. The usual reduction is a folder of Python that grew a new flag every observing night, until nobody can say whether last month's spectra used the old flat or the new one. The frames hold the answer; the reduction has just become unauditable.
Darks and flats change with temperature, and the wavelength solution drifts as lamps age, so the right calibration is the one taken that day — not the one hard-coded three months ago. Loading the calibration NetCDF as its own node makes that explicit. Swap the file, and every corrected frame, every stacked spectrum, and the exported dataset recompute from it, with the provenance sitting right there in the graph.
Any per-exposure CSVs with a wavelength or pixel axis and a counts column will load, plus a calibration set with darks, flats, and a wavelength solution. This walkthrough uses a season of long-slit runs and a nightly calibration NetCDF, but the pipeline doesn't care which instrument wrote the frames — point it at next season's folder and the same nodes reduce it.
Drag the folder of 900 instrument CSVs onto the canvas. The @load node groups them into one runs entity keyed by timestamp, infers the wavelength and counts columns, and previews the first rows. Nothing parses fully until a step downstream asks for it, so the whole season opens in seconds.
Drag the day's calibration NetCDF next to the runs. Dark frames, the flat-field response, and the wavelength solution appear as named variables straight from the file headers. A second @load node keeps them separate, so you can swap in a different calibration later and rerun the whole reduction.
Add a @shape node that subtracts the matched dark frame and divides by the flat-field response for every run. The corrected preview updates live as you choose which dark to pair by exposure time. The full corrected stack becomes a cached intermediate, so every step after it stays instant.
Chain a calibration node that applies the NetCDF wavelength solution, turning pixel index into nanometres for every run at once. Drop a couple of known emission lines on the plot to check the fit, and nudge the solution if a lamp drifted overnight. Every run recolors onto the same wavelength axis.
Add a stacking node and choose a robust mean with outlier rejection across the 900 corrected, calibrated runs. Because each upstream step is cached, changing the rejection threshold restacks in a blink instead of rereading a single CSV. The combined spectrum and its per-wavelength spread appear together.
Finish with a @deliver node. Render the stacked spectrum as a publication figure with labelled axes and the uncertainty band, then export the corrected, calibrated dataset as NetCDF alongside it. The pipeline file travels with the export, so a reviewer can rebuild every spectrum from the raw CSVs.
Read 900 instrument CSVs and the day's calibration NetCDF as separate, lazily-parsed entities.
Apply dark/flat correction and the wavelength solution, then stack every run with cached intermediates.
Render publication-ready spectra and export the reduced dataset with its pipeline attached.
Turn long-run logs from a 200-sensor array into windowed stats with uncertainty — cleaned, aligned, and delivered as a per-sensor summary anyone can re-run.
Model post-closure pit-lake rebound in LSD — krige borehole heads against a NetCDF recharge grid and deliver a live 3D drawdown model plus report.
Validate 63 LAS drillhole logs against collar surveys, krige a lithology block model, and export one glTF the whole team can open.
Build churn features from Postgres events and Parquet snapshots, catch a leaky window visually, and score the holdout with ONNX — on one canvas.
Score a million-row Parquet batch with an ONNX model — training-identical normalization, live previews, scored Parquet and metrics out.
Turn raw LAS/LAZ sweeps from a mobile robot into a nav-ready occupancy grid and 3D map — registration to export with zero scripts.
Sync CSV sensor logs with live REST telemetry, flag outliers and dropouts, and score every robot pass/fail before the field trial.
Turn folders of line-scan images and a label CSV into an ONNX defect-segmentation pipeline with overlay QA and a per-coil defect report.
Turn GeoTIFF orthomosaics into a stitched land-cover raster with per-class area stats, using tiled ONNX segmentation you can preview at every step.
Align CMM measurement points to a nominal CAD mesh, compute point-to-surface deviation, and export a color-mapped glTF model with a pass/fail report.
Resample a week of machine sensor logs, baseline each tag, and flag drift and step changes on a live dashboard with a ranked maintenance shortlist.
Join a live meter feed to 85 campus building meshes, aggregate it hourly, and paint a 3D heat-map that repaints as energy use shifts, plus a weekly report.
Drag the folder of 900 instrument CSVs onto the canvas. The @load node groups them into one runs entity keyed by timestamp, infers the wavelength and counts columns, and previews the first rows. Nothing parses fully until a step downstream asks for it, so the whole season opens in seconds.
Add a @shape node that subtracts the matched dark frame and divides by the flat-field response for every run. The corrected preview updates live as you choose which dark to pair by exposure time. The full corrected stack becomes a cached intermediate, so every step after it stays instant.
Add a stacking node and choose a robust mean with outlier rejection across the 900 corrected, calibrated runs. Because each upstream step is cached, changing the rejection threshold restacks in a blink instead of rereading a single CSV. The combined spectrum and its per-wavelength spread appear together.
Finish with a @deliver node. Render the stacked spectrum as a publication figure with labelled axes and the uncertainty band, then export the corrected, calibrated dataset as NetCDF alongside it. The pipeline file travels with the export, so a reviewer can rebuild every spectrum from the raw CSVs.