pyreduce-astro 0.7a5__tar.gz → 0.7a7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.gitignore +1 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/CHANGELOG.md +21 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/CLAUDE.md +58 -8
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/PKG-INFO +3 -3
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/README.md +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/aj_example.py +43 -3
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/crires_plus_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/custom_instrument_example.py +3 -3
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harpn_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harps_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harps_gridsearch.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/just_one_swath.py +1 -1
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/jwst_miri_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/jwst_niriss_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/lick_apf_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/mcdonald_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/metis_ifu_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/metis_lss_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/micado_example.py +5 -5
- pyreduce_astro-0.7a7/examples/neid_example.py +65 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/nirspec_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/toes_example.py +12 -12
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/uves_callfunc.py +5 -5
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/uves_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/xshooter_example.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyproject.toml +1 -1
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/__main__.py +114 -20
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/cli.py +1 -1
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/combine_frames.py +8 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/configuration.py +20 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/estimate_background_scatter.py +8 -8
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/extract.py +126 -126
- pyreduce_astro-0.7a5/pyreduce/extraction_width.py → pyreduce_astro-0.7a7/pyreduce/extraction_height.py +4 -4
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/common.py +201 -15
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harpn.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harps.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/models.py +24 -0
- pyreduce_astro-0.7a7/pyreduce/instruments/neid.py +128 -0
- pyreduce_astro-0.7a7/pyreduce/instruments/neid.yaml +60 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nirspec.py +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/make_shear.py +12 -12
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/pipeline.py +6 -6
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/rectify.py +10 -10
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/reduce.py +14 -14
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_AJ.json +2 -2
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_ANDES.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_CRIRES_PLUS.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_HARPN.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_HARPS.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_JWST_MIRI.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_JWST_NIRISS.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_LICK_APF.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_MCDONALD.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_METIS_IFU.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_METIS_LSS.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_MICADO.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NEID.json +15 -24
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NIRSPEC.json +7 -7
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NTE.json +6 -6
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_UVES.json +4 -4
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_XSHOOTER.json +5 -5
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_pyreduce.json +8 -8
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_schema.json +10 -10
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/uv.lock +1 -1
- pyreduce_astro-0.7a5/.pyup.yml +0 -4
- pyreduce_astro-0.7a5/codemeta.json +0 -56
- pyreduce_astro-0.7a5/environment.yml +0 -19
- pyreduce_astro-0.7a5/examples/neid_example.py +0 -56
- pyreduce_astro-0.7a5/plots_for_paper/dimensionality.py +0 -172
- pyreduce_astro-0.7a5/plots_for_paper/settings_HARPS.json +0 -47
- pyreduce_astro-0.7a5/plots_for_paper/wavecal_plot.py +0 -137
- pyreduce_astro-0.7a5/pyproject.toml.sav +0 -77
- pyreduce_astro-0.7a5/pyreduce/instruments/neid.py +0 -156
- pyreduce_astro-0.7a5/pyreduce/instruments/neid.yaml +0 -61
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.gitattributes +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.pre-commit-config.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.python-version +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.readthedocs.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/AGENTS.md +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/LICENSE +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/hatch_build.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/__init__.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/__init__.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/build_extract.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_2d_xi_zeta_bd.c +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_2d_xi_zeta_bd.h +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_bd.c +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_bd.h +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clipnflip.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/continuum_normalization.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/cwrappers.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/datasets.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/echelle.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/__init__.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/aj.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/aj.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/andes.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/andes.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/common.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/crires_plus.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/crires_plus.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/filters.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harpn.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harps.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/instrument_info.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_miri.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_miri.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_niriss.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_niriss.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/lick_apf.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/lick_apf.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/mcdonald.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/mcdonald.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_ifu.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_ifu.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_lss.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_lss.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/micado.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/micado.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nirspec.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nte.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nte.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/uves.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/uves.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/xshooter.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/xshooter.yaml +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det1.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det2.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det3.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_ctio_chiron.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_elodie.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_feros3.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_flames_giraffe.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_harps_blue.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_harps_red.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_hds_blue.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_hds_red.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_het_hrs_2x5.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_jwst_miri_lrs_slitless.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_jwst_niriss_gr700xd.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_lick_apf_.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_mcdonald.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_nes.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_nirspec_nirspec.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg_2x2a.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg_2x2b.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_subaru_hds_red.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_blue.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_blue_binned_2_2.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle_2x2_split.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle_binned_2_2.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_2x2.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_2x2_split.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_binned_2_2.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_xshooter_nir.fits.gz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/tools/__init__.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/tools/combine.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/trace.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/util.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/MICADO_HK_3arcsec_chip5.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/thar.fits +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/thar_list.txt +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/une.fits +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/convert.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det1.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det2.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det3.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harpn_harpn_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_blue_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_blue_pol_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_red_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_red_pol_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/mcdonald.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/metis_lss_l_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/metis_lss_m_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/nirspec_K2.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_360nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_390nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_437nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_2x2_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_565nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_580nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_600nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_665nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_860nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_580nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_600nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_665nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_760nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_860nm_2D.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/xshooter_nir.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavelength_calibration.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/argon.line +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/bpm_creator.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/create_wavelength_guess.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/download_files.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7/tools}/ipy_startup.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/neon.lin +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/neon.line +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/pymultispec.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/thar.npz +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/wavecal_creator.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/wavecal_creator_from_existing.py +0 -0
- {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/xshooter_nir.json +0 -0
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [0.7a7] - 2026-01-04
|
|
5
|
+
|
|
6
|
+
### Added
|
|
7
|
+
- `--settings` option for CLI to override reduction parameters from JSON file
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- Rename `extraction_width` to `extraction_height` in settings (clarifies coordinate system)
|
|
11
|
+
- Rename `orders` to `traces` in extract.py internal API
|
|
12
|
+
|
|
13
|
+
## [0.7a6] - 2026-01-03
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- `--file` option for CLI step commands to bypass file discovery
|
|
17
|
+
- NEID instrument with multi-amplifier support
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Rename `orders` step to `trace` throughout codebase (CLI, API, configs)
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- test_normflat to use column_range returned by extract
|
|
24
|
+
|
|
4
25
|
## [0.7a5] - 2025-12-30
|
|
5
26
|
|
|
6
27
|
### Changed
|
|
@@ -19,7 +19,7 @@ uv run reduce download UVES
|
|
|
19
19
|
PYREDUCE_PLOT=0 uv run python examples/uves_example.py
|
|
20
20
|
|
|
21
21
|
# Or use CLI
|
|
22
|
-
uv run reduce run UVES HD132205 --steps bias,flat,
|
|
22
|
+
uv run reduce run UVES HD132205 --steps bias,flat,trace,science
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## Package Structure
|
|
@@ -54,6 +54,16 @@ pyreduce/
|
|
|
54
54
|
└── slit_func_2d_xi_zeta_bd.c
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
## Image Coordinate Convention
|
|
58
|
+
|
|
59
|
+
PyReduce uses the convention that **dispersion runs horizontally (along x-axis)** and **cross-dispersion runs vertically (along y-axis)**. The `clipnflip()` function in `instruments/common.py` rotates and flips raw images to ensure this orientation.
|
|
60
|
+
|
|
61
|
+
This means:
|
|
62
|
+
- **Columns (x)** = wavelength/dispersion direction
|
|
63
|
+
- **Rows (y)** = spatial/cross-dispersion direction
|
|
64
|
+
- **Traces** are polynomial functions of x, giving y-position
|
|
65
|
+
- **`extraction_height`** refers to pixels above/below each trace (in y)
|
|
66
|
+
|
|
57
67
|
## Pipeline Steps
|
|
58
68
|
|
|
59
69
|
The reduction pipeline consists of these steps (in typical order):
|
|
@@ -63,7 +73,7 @@ The reduction pipeline consists of these steps (in typical order):
|
|
|
63
73
|
| `mask` | `Mask` | Load bad pixel mask for detector |
|
|
64
74
|
| `bias` | `Bias` | Combine bias frames into master bias |
|
|
65
75
|
| `flat` | `Flat` | Combine flat frames, subtract bias |
|
|
66
|
-
| `
|
|
76
|
+
| `trace` | `OrderTracing` | Trace echelle order positions on flat |
|
|
67
77
|
| `curvature` | `SlitCurvatureDetermination` | Measure slit tilt/shear from arc lamp |
|
|
68
78
|
| `scatter` | `BackgroundScatter` | Model inter-order scattered light |
|
|
69
79
|
| `norm_flat` | `NormalizeFlatField` | Normalize flat, extract blaze function |
|
|
@@ -138,14 +148,14 @@ Defines HOW to reduce - algorithm parameters per step:
|
|
|
138
148
|
"bias": {
|
|
139
149
|
"degree": 0
|
|
140
150
|
},
|
|
141
|
-
"
|
|
151
|
+
"trace": {
|
|
142
152
|
"degree": 4,
|
|
143
153
|
"noise": 100,
|
|
144
154
|
"min_cluster": 500,
|
|
145
155
|
"filter_size": 120
|
|
146
156
|
},
|
|
147
157
|
"norm_flat": {
|
|
148
|
-
"
|
|
158
|
+
"extraction_height": 0.5,
|
|
149
159
|
"smooth_slitfunction": 1,
|
|
150
160
|
"oversampling": 10
|
|
151
161
|
},
|
|
@@ -156,7 +166,7 @@ Defines HOW to reduce - algorithm parameters per step:
|
|
|
156
166
|
},
|
|
157
167
|
"science": {
|
|
158
168
|
"extraction_method": "optimal",
|
|
159
|
-
"
|
|
169
|
+
"extraction_height": 0.5,
|
|
160
170
|
"oversampling": 10
|
|
161
171
|
}
|
|
162
172
|
}
|
|
@@ -176,7 +186,7 @@ result = Pipeline.from_instrument(
|
|
|
176
186
|
target="HD132205",
|
|
177
187
|
night="2010-04-01",
|
|
178
188
|
channel="middle",
|
|
179
|
-
steps=("bias", "flat", "
|
|
189
|
+
steps=("bias", "flat", "trace", "science"),
|
|
180
190
|
base_dir="/data",
|
|
181
191
|
plot=1,
|
|
182
192
|
).run()
|
|
@@ -221,11 +231,11 @@ pyreduce.reduce.main(
|
|
|
221
231
|
|
|
222
232
|
```bash
|
|
223
233
|
# Full pipeline
|
|
224
|
-
uv run reduce run UVES HD132205 --steps bias,flat,
|
|
234
|
+
uv run reduce run UVES HD132205 --steps bias,flat,trace
|
|
225
235
|
|
|
226
236
|
# Individual steps (top-level commands)
|
|
227
237
|
uv run reduce bias UVES HD132205
|
|
228
|
-
uv run reduce
|
|
238
|
+
uv run reduce trace UVES HD132205
|
|
229
239
|
uv run reduce wavecal UVES HD132205
|
|
230
240
|
|
|
231
241
|
# Combine reduced spectra
|
|
@@ -283,3 +293,43 @@ uv run ruff check --fix . # Lint and fix
|
|
|
283
293
|
| `pyreduce/instruments/models.py` | Pydantic config models |
|
|
284
294
|
| `pyreduce/clib/*.c` | C code for slit function decomposition |
|
|
285
295
|
| `hatch_build.py` | CFFI extension build hook |
|
|
296
|
+
|
|
297
|
+
## Release Process
|
|
298
|
+
|
|
299
|
+
To release a new version (e.g., `0.7a6`):
|
|
300
|
+
|
|
301
|
+
1. **Update documentation** for any renamed steps, new CLI options, etc:
|
|
302
|
+
- `README.md` - Quick start examples
|
|
303
|
+
- `docs/cli.md` - CLI reference
|
|
304
|
+
- `docs/index.md`, `docs/howto.md`, `docs/examples.md` - Usage examples
|
|
305
|
+
- `docs/configuration_file.md` - Config key names
|
|
306
|
+
|
|
307
|
+
2. **Update CHANGELOG.md** with release date and changes
|
|
308
|
+
|
|
309
|
+
3. **Update version** in `pyproject.toml`
|
|
310
|
+
|
|
311
|
+
3a. **sync** - run `uv sync` to get the new version into uv.lock
|
|
312
|
+
|
|
313
|
+
4. **Update example headers** - all `examples/*.py` have PEP 723 metadata:
|
|
314
|
+
```python
|
|
315
|
+
# /// script
|
|
316
|
+
# dependencies = ["pyreduce-astro>=0.7a6"]
|
|
317
|
+
# ///
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
5. **Commit, tag, and push**:
|
|
321
|
+
```bash
|
|
322
|
+
git add -A && git commit -m "Release v0.7a6"
|
|
323
|
+
git tag v0.7a6
|
|
324
|
+
git push && git push --tags
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
6. **Monitor GitHub Actions** - the tag push triggers:
|
|
328
|
+
- Tests on Python 3.13
|
|
329
|
+
- Wheel builds (Linux, Windows, macOS)
|
|
330
|
+
- PyPI upload
|
|
331
|
+
- GitHub Release creation
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
gh run watch # watch the triggered workflow
|
|
335
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyreduce-astro
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7a7
|
|
4
4
|
Summary: A data reduction package for echelle spectrographs
|
|
5
5
|
Project-URL: Homepage, https://github.com/ivh/PyReduce
|
|
6
6
|
Project-URL: Documentation, https://pyreduce-astro.readthedocs.io
|
|
@@ -76,7 +76,7 @@ uv sync
|
|
|
76
76
|
uv run reduce download UVES
|
|
77
77
|
|
|
78
78
|
# Run reduction
|
|
79
|
-
uv run reduce run UVES HD132205 --steps bias,flat,
|
|
79
|
+
uv run reduce run UVES HD132205 --steps bias,flat,trace,science
|
|
80
80
|
|
|
81
81
|
# Or run individual steps
|
|
82
82
|
uv run reduce bias UVES HD132205
|
|
@@ -101,4 +101,4 @@ Full documentation at [ReadTheDocs](https://pyreduce-astro.readthedocs.io/).
|
|
|
101
101
|
|
|
102
102
|
## Output
|
|
103
103
|
|
|
104
|
-
PyReduce creates `.
|
|
104
|
+
PyReduce creates `.fits` files (standard FITS with binary table extension). Headers include original keywords plus PyReduce-specific ones prefixed with `e_`.
|
|
@@ -34,7 +34,7 @@ uv sync
|
|
|
34
34
|
uv run reduce download UVES
|
|
35
35
|
|
|
36
36
|
# Run reduction
|
|
37
|
-
uv run reduce run UVES HD132205 --steps bias,flat,
|
|
37
|
+
uv run reduce run UVES HD132205 --steps bias,flat,trace,science
|
|
38
38
|
|
|
39
39
|
# Or run individual steps
|
|
40
40
|
uv run reduce bias UVES HD132205
|
|
@@ -59,4 +59,4 @@ Full documentation at [ReadTheDocs](https://pyreduce-astro.readthedocs.io/).
|
|
|
59
59
|
|
|
60
60
|
## Output
|
|
61
61
|
|
|
62
|
-
PyReduce creates `.
|
|
62
|
+
PyReduce creates `.fits` files (standard FITS with binary table extension). Headers include original keywords plus PyReduce-specific ones prefixed with `e_`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
AJ instrument example: Fiber bundle tracing with direct function calls.
|
|
@@ -26,6 +26,7 @@ import os
|
|
|
26
26
|
|
|
27
27
|
import numpy as np
|
|
28
28
|
|
|
29
|
+
from pyreduce.extract import extract
|
|
29
30
|
from pyreduce.instruments.instrument_info import load_instrument
|
|
30
31
|
from pyreduce.trace import group_and_refit, merge_traces, trace
|
|
31
32
|
|
|
@@ -41,6 +42,7 @@ orders_file = os.path.join(raw_dir, "ANDES_75fibre_J_orders.npz")
|
|
|
41
42
|
# Output
|
|
42
43
|
output_dir = os.path.expanduser("~/REDUCE_DATA/AJ/reduced")
|
|
43
44
|
output_file = os.path.join(output_dir, "fiber_traces.npz")
|
|
45
|
+
output_blaze = os.path.join(output_dir, "fiber_blaze.npz")
|
|
44
46
|
|
|
45
47
|
# Load order centers from npz file
|
|
46
48
|
orders_data = np.load(orders_file)
|
|
@@ -65,7 +67,7 @@ trace_params = {
|
|
|
65
67
|
"border_width": 0,
|
|
66
68
|
"manual": False,
|
|
67
69
|
"auto_merge_threshold": 1.0,
|
|
68
|
-
"merge_min_threshold": 0.
|
|
70
|
+
"merge_min_threshold": 1.0, # 1.0 disables merging entirely
|
|
69
71
|
"sigma": 0,
|
|
70
72
|
"plot": 1,
|
|
71
73
|
}
|
|
@@ -90,6 +92,10 @@ print(f" Shape: {img_even.shape}, dtype: {img_even.dtype}")
|
|
|
90
92
|
print(f"Loading {file_odd}...")
|
|
91
93
|
img_odd, head_odd = instrument.load_fits(file_odd, channel=channel, extension=0)
|
|
92
94
|
|
|
95
|
+
# Combine even and odd flats for extraction
|
|
96
|
+
img_combined = img_even.astype(np.float64) + img_odd.astype(np.float64)
|
|
97
|
+
print(f"Combined flat shape: {img_combined.shape}")
|
|
98
|
+
|
|
93
99
|
# --- Step 2: Trace each flat independently ---
|
|
94
100
|
print("\nTracing even-illuminated fibers...")
|
|
95
101
|
traces_even, cr_even = trace(
|
|
@@ -166,4 +172,38 @@ else:
|
|
|
166
172
|
save_dict["column_range"] = all_cr
|
|
167
173
|
|
|
168
174
|
np.savez(output_file, **save_dict)
|
|
169
|
-
print(f"\nSaved to: {output_file}")
|
|
175
|
+
print(f"\nSaved traces to: {output_file}")
|
|
176
|
+
|
|
177
|
+
# --- Step 6: Extract spectra from all fiber traces ---
|
|
178
|
+
# Flatten all traces into a single orders array for extraction
|
|
179
|
+
all_traces = np.vstack([traces_by_order[k] for k in sorted(traces_by_order.keys())])
|
|
180
|
+
all_cr = np.vstack([cr_by_order[k] for k in sorted(cr_by_order.keys())])
|
|
181
|
+
print(f"\nExtracting {len(all_traces)} fiber traces...")
|
|
182
|
+
|
|
183
|
+
# Extraction parameters
|
|
184
|
+
extract_params = {
|
|
185
|
+
"extraction_height": 0.5,
|
|
186
|
+
"lambda_sf": 0.1, # smooth_slitfunction
|
|
187
|
+
"lambda_sp": 0, # smooth_spectrum
|
|
188
|
+
"osample": 10, # oversampling
|
|
189
|
+
"swath_width": 200,
|
|
190
|
+
"plot": 1,
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
norm, spec, blaze, unc = extract(
|
|
194
|
+
img_combined,
|
|
195
|
+
all_traces,
|
|
196
|
+
column_range=all_cr,
|
|
197
|
+
extraction_type="normalize",
|
|
198
|
+
gain=1.0,
|
|
199
|
+
readnoise=0.0,
|
|
200
|
+
dark=0.0,
|
|
201
|
+
**extract_params,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
print(f" Extracted blaze shape: {blaze.shape}")
|
|
205
|
+
print(f" Normalized flat shape: {norm.shape}")
|
|
206
|
+
|
|
207
|
+
# Save extraction results
|
|
208
|
+
np.savez(output_blaze, blaze=blaze, norm=norm, spec=spec, unc=unc)
|
|
209
|
+
print(f"Saved blaze to: {output_blaze}")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -20,7 +20,7 @@ channel = "J1228_det1"
|
|
|
20
20
|
steps = (
|
|
21
21
|
# "bias",
|
|
22
22
|
# "flat",
|
|
23
|
-
# "
|
|
23
|
+
# "trace",
|
|
24
24
|
# "curvature",
|
|
25
25
|
# "scatter",
|
|
26
26
|
# "norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -32,7 +32,7 @@ instrument.info["prescan_x"] = "PRESCAN X"
|
|
|
32
32
|
# For loading the config we specify pyreduce as the source, since this is the default
|
|
33
33
|
config = get_configuration_for_instrument("pyreduce")
|
|
34
34
|
# Define your own configuration
|
|
35
|
-
config["
|
|
35
|
+
config["trace"]["degree"] = 5
|
|
36
36
|
|
|
37
37
|
# Since we can't find the files ourselves (at least not without defining the criteria we are looking for)
|
|
38
38
|
# We need to manually define which files go where
|
|
@@ -53,7 +53,7 @@ channel = ""
|
|
|
53
53
|
steps = (
|
|
54
54
|
"bias",
|
|
55
55
|
"flat",
|
|
56
|
-
"
|
|
56
|
+
"trace",
|
|
57
57
|
"curvature",
|
|
58
58
|
"scatter",
|
|
59
59
|
"norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -20,7 +20,7 @@ channel = "HARPN"
|
|
|
20
20
|
steps = (
|
|
21
21
|
# "bias",
|
|
22
22
|
# "flat",
|
|
23
|
-
# "
|
|
23
|
+
# "trace",
|
|
24
24
|
# "norm_flat",
|
|
25
25
|
# "wavecal_master",
|
|
26
26
|
"wavecal",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -18,7 +18,7 @@ channel = "red"
|
|
|
18
18
|
steps = (
|
|
19
19
|
"bias",
|
|
20
20
|
"flat",
|
|
21
|
-
"
|
|
21
|
+
"trace",
|
|
22
22
|
"curvature",
|
|
23
23
|
"scatter",
|
|
24
24
|
"norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
import os.path
|
|
6
6
|
|
|
@@ -71,7 +71,7 @@ kwargs_comb["nstep"] = 0
|
|
|
71
71
|
kwargs["plot"] = False
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
for key in ["extraction_method", "
|
|
74
|
+
for key in ["extraction_method", "extraction_height", "extraction_cutoff"]:
|
|
75
75
|
del kwargs_comb[key]
|
|
76
76
|
del kwargs[key]
|
|
77
77
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -18,7 +18,7 @@ channel = "LRS_SLITLESS"
|
|
|
18
18
|
steps = (
|
|
19
19
|
"bias",
|
|
20
20
|
"flat",
|
|
21
|
-
"
|
|
21
|
+
"trace",
|
|
22
22
|
"norm_flat",
|
|
23
23
|
# "wavecal",
|
|
24
24
|
# "curvature",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -18,7 +18,7 @@ channel = "GR700XD"
|
|
|
18
18
|
steps = (
|
|
19
19
|
"bias",
|
|
20
20
|
"flat",
|
|
21
|
-
"
|
|
21
|
+
"trace",
|
|
22
22
|
"norm_flat",
|
|
23
23
|
# "wavecal",
|
|
24
24
|
# "curvature",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -18,7 +18,7 @@ channel = ""
|
|
|
18
18
|
steps = (
|
|
19
19
|
"bias",
|
|
20
20
|
# "flat",
|
|
21
|
-
# "
|
|
21
|
+
# "trace",
|
|
22
22
|
# "norm_flat",
|
|
23
23
|
# "wavecal",
|
|
24
24
|
# "curvature",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -19,7 +19,7 @@ channel = "CS23"
|
|
|
19
19
|
steps = (
|
|
20
20
|
# "bias",
|
|
21
21
|
# "flat",
|
|
22
|
-
# "
|
|
22
|
+
# "trace",
|
|
23
23
|
# "curvature",
|
|
24
24
|
"scatter",
|
|
25
25
|
# "norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -20,7 +20,7 @@ channel = "IFU_NOMINAL"
|
|
|
20
20
|
steps = (
|
|
21
21
|
# "bias",
|
|
22
22
|
# "flat",
|
|
23
|
-
"
|
|
23
|
+
"trace",
|
|
24
24
|
"curvature",
|
|
25
25
|
# "scatter",
|
|
26
26
|
# "norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -20,7 +20,7 @@ channel = "LSS_M"
|
|
|
20
20
|
steps = (
|
|
21
21
|
# "bias",
|
|
22
22
|
"flat",
|
|
23
|
-
"
|
|
23
|
+
"trace",
|
|
24
24
|
"curvature",
|
|
25
25
|
# "scatter",
|
|
26
26
|
# "norm_flat",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -17,7 +17,7 @@ channel = ""
|
|
|
17
17
|
steps = (
|
|
18
18
|
# "bias",
|
|
19
19
|
"flat",
|
|
20
|
-
"
|
|
20
|
+
"trace",
|
|
21
21
|
"curvature",
|
|
22
22
|
# # "scatter",
|
|
23
23
|
# "norm_flat",
|
|
@@ -47,12 +47,12 @@ config = pyreduce.configuration.get_configuration_for_instrument(instrument)
|
|
|
47
47
|
# Once you are satisfied with a certain parameter, you can update it in settings_MICADO.json.
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
# config["
|
|
51
|
-
# config["curvature"]["
|
|
50
|
+
# config["trace"]["noise"] = 100
|
|
51
|
+
# config["curvature"]["extraction_height"] = 350 # curvature can still be improved with this and the following parameters
|
|
52
52
|
# config["curvature"]["peak_threshold"] =10
|
|
53
53
|
# config["curvature"]["peak_width"] =2 #CHECK 6 also works and detects one less line
|
|
54
54
|
# config["curvature"]["window_width"] = 5
|
|
55
|
-
# config["wavecal"]["
|
|
55
|
+
# config["wavecal"]["extraction_height"] = 350
|
|
56
56
|
|
|
57
57
|
# NOTE: micado.thar_master.fits (created and controlled by wavecal_master) is NOT overwritten if any parameter in the steps in or before it are changed. Thus it has to be deleted before running PyReduce again.
|
|
58
58
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# /// script
|
|
2
|
+
# requires-python = ">=3.13"
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
|
+
# ///
|
|
5
|
+
"""
|
|
6
|
+
NEID reduction example
|
|
7
|
+
|
|
8
|
+
NEID is a fiber-fed, high-resolution (R~110,000) spectrograph on the
|
|
9
|
+
WIYN 3.5m telescope at Kitt Peak. L0 data has 16 amplifiers that are
|
|
10
|
+
automatically assembled during loading.
|
|
11
|
+
|
|
12
|
+
This example reduces HD 4628 observations from night 2024-09-19.
|
|
13
|
+
Note: Observations before 12:00 UTC belong to the previous night.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
from pyreduce.configuration import get_configuration_for_instrument
|
|
19
|
+
from pyreduce.pipeline import Pipeline
|
|
20
|
+
|
|
21
|
+
# Define parameters
|
|
22
|
+
instrument = "NEID"
|
|
23
|
+
target = "HD 4628"
|
|
24
|
+
night = "2024-09-19" # Observations before 12:00 UTC belong to previous night
|
|
25
|
+
channel = "HR"
|
|
26
|
+
|
|
27
|
+
# Reduction steps to run
|
|
28
|
+
# Start with basic steps; add wavecal/science once calibration files are set up
|
|
29
|
+
steps = (
|
|
30
|
+
"flat",
|
|
31
|
+
"trace",
|
|
32
|
+
# "curvature",
|
|
33
|
+
# "norm_flat",
|
|
34
|
+
# "wavecal_master",
|
|
35
|
+
# "wavecal_init",
|
|
36
|
+
# "wavecal",
|
|
37
|
+
# "science",
|
|
38
|
+
# "continuum",
|
|
39
|
+
# "finalize",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Data paths
|
|
43
|
+
# Set REDUCE_DATA environment variable or modify base_dir
|
|
44
|
+
base_dir = os.environ.get("REDUCE_DATA", os.path.expanduser("~/REDUCE_DATA"))
|
|
45
|
+
base_dir = os.path.join(base_dir, "NEID")
|
|
46
|
+
input_dir = "" # Files directly in base_dir
|
|
47
|
+
output_dir = "reduced"
|
|
48
|
+
|
|
49
|
+
# Load default configuration
|
|
50
|
+
config = get_configuration_for_instrument(instrument)
|
|
51
|
+
|
|
52
|
+
# Run the pipeline
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
Pipeline.from_instrument(
|
|
55
|
+
instrument,
|
|
56
|
+
target,
|
|
57
|
+
night=night,
|
|
58
|
+
channel=channel,
|
|
59
|
+
steps=steps,
|
|
60
|
+
base_dir=base_dir,
|
|
61
|
+
input_dir=input_dir,
|
|
62
|
+
output_dir=output_dir,
|
|
63
|
+
configuration=config,
|
|
64
|
+
plot=1,
|
|
65
|
+
).run()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
"""
|
|
6
6
|
Simple usage example for PyReduce
|
|
@@ -18,7 +18,7 @@ channel = "NIRSPEC"
|
|
|
18
18
|
steps = (
|
|
19
19
|
"bias",
|
|
20
20
|
"flat",
|
|
21
|
-
"
|
|
21
|
+
"trace",
|
|
22
22
|
"norm_flat",
|
|
23
23
|
"wavecal",
|
|
24
24
|
"freq_comb",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.13"
|
|
3
|
-
# dependencies = ["pyreduce-astro>=0.
|
|
3
|
+
# dependencies = ["pyreduce-astro>=0.7a7"]
|
|
4
4
|
# ///
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
@@ -81,16 +81,16 @@ instrument.info["wavelength_range"] = [
|
|
|
81
81
|
# For loading the config we specify pyreduce as the source, since this is the default
|
|
82
82
|
config = get_configuration_for_instrument("pyreduce")
|
|
83
83
|
# Define your own configuration
|
|
84
|
-
config["
|
|
85
|
-
config["
|
|
86
|
-
config["
|
|
87
|
-
config["
|
|
88
|
-
config["
|
|
89
|
-
config["
|
|
90
|
-
config["
|
|
84
|
+
config["trace"]["filter_y"] = 20 # smoothing along cross-dispersion
|
|
85
|
+
config["trace"]["degree"] = 4
|
|
86
|
+
config["trace"]["degree_before_merge"] = 2
|
|
87
|
+
config["trace"]["noise"] = 5.5
|
|
88
|
+
config["trace"]["min_cluster"] = 3000
|
|
89
|
+
config["trace"]["min_width"] = 200
|
|
90
|
+
config["trace"]["manual"] = True
|
|
91
91
|
config["norm_flat"]["oversampling"] = 8 # Subpixel scale for slit function modelling
|
|
92
92
|
config["norm_flat"]["swath_width"] = 400 # Extraction swath width (columns)
|
|
93
|
-
config["wavecal_master"]["
|
|
93
|
+
config["wavecal_master"]["extraction_height"] = 2
|
|
94
94
|
config["wavecal_master"]["collapse_function"] = "sum"
|
|
95
95
|
config["wavecal_master"]["bias_scaling"] = "number_of_files"
|
|
96
96
|
config["wavecal"]["medium"] = "vac"
|
|
@@ -102,7 +102,7 @@ config["science"]["oversampling"] = 8 # Subpixel scale for slit function modell
|
|
|
102
102
|
config["science"]["swath_width"] = 400 # Extraction swath width (columns)
|
|
103
103
|
config["science"]["smooth_slitfunction"] = 1.0 # Smoothing of the slit function
|
|
104
104
|
config["science"]["smooth_spectrum"] = 1.0e-6 # Smoothing in spectral direction
|
|
105
|
-
config["science"]["
|
|
105
|
+
config["science"]["extraction_height"] = [5, 5] # Extraction slit height (rows)
|
|
106
106
|
config["science"]["bias_scaling"] = "number_of_files"
|
|
107
107
|
|
|
108
108
|
# Since we can't find the files ourselves (at least not without defining the criteria we are looking for)
|
|
@@ -110,7 +110,7 @@ config["science"]["bias_scaling"] = "number_of_files"
|
|
|
110
110
|
files = {
|
|
111
111
|
"bias": ["Bias_0s_20240621_221716-%d.fit" % i for i in np.arange(1, 11)],
|
|
112
112
|
"flat": ["Flat_5s_20240621_222912-%d.fit" % i for i in np.arange(1, 5)],
|
|
113
|
-
"
|
|
113
|
+
"trace": [flat_file],
|
|
114
114
|
"science": ["Vega_Object_25s_20240621_224908-%d.fit" % i for i in np.arange(1, 2)],
|
|
115
115
|
"wavecal_master": [
|
|
116
116
|
"Sun_Calibration_35s_20240621_184136-%d.fit" % i for i in np.arange(1, 2)
|
|
@@ -138,7 +138,7 @@ channel = ""
|
|
|
138
138
|
steps = (
|
|
139
139
|
# "bias",
|
|
140
140
|
# "flat",
|
|
141
|
-
# "
|
|
141
|
+
# "trace",
|
|
142
142
|
# "norm_flat",
|
|
143
143
|
"wavecal_master",
|
|
144
144
|
"wavecal",
|