Expected ZIP Structure
your_data.zip
├──
light/
← required
(*.fits or *.fit)
├──
bias/
←
optional
├──
dark/
←
optional
├──
flat/
←
optional
├──
rotpol/
← optional
(rotating polarizer frames)
├──
standards/
← optional (unpolarized
standard stars)
└──
config.json ←
optional
config.json keys
{
"gain": 1.2,
// e⁻/ADU
"read_noise": 3.5,
// e⁻ RMS
"rotpol_angles": [0,10,20,...,170],
// required when rotpol/ present
"stack": true,
// median-combine light frames
"save_intermediate": false,
// save per-frame cubes
"multi_object": false,
// treat light/ as multiple objects named
<NAME>-<NUM>.fit(s)
"astrometry": false,
// plate-solve Stokes I via nova (requires OBJCTRA+OBJCTDEC in
header)
"sky_subtract": false,
// subtract 2-D background per polarization channel before Stokes
"sky_box_size": 64,
// mesh box size [pixels] for sky estimation (default 64)
"extract_catalog": false,
// run aperture polarimetry on detected point sources; writes
catalog.fits
"catalog_fwhm": 3.0,
// PSF FWHM [pixels] for source detection (default 3.0)
"catalog_threshold": 5.0,
// detection threshold [x sky RMS] (default 5.0)
"snr_i_min": 3.0,
// I/sigma_I threshold for polarimetric masking and catalog
"p_snr_min": 3.0
// P_db/sigma_P threshold for polarimetric masking and catalog
}