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.
Files changed (207) hide show
  1. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.gitignore +1 -0
  2. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/CHANGELOG.md +21 -0
  3. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/CLAUDE.md +58 -8
  4. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/PKG-INFO +3 -3
  5. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/README.md +2 -2
  6. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/aj_example.py +43 -3
  7. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/crires_plus_example.py +2 -2
  8. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/custom_instrument_example.py +3 -3
  9. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harpn_example.py +2 -2
  10. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harps_example.py +2 -2
  11. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/harps_gridsearch.py +2 -2
  12. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/just_one_swath.py +1 -1
  13. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/jwst_miri_example.py +2 -2
  14. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/jwst_niriss_example.py +2 -2
  15. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/lick_apf_example.py +2 -2
  16. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/mcdonald_example.py +2 -2
  17. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/metis_ifu_example.py +2 -2
  18. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/metis_lss_example.py +2 -2
  19. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/micado_example.py +5 -5
  20. pyreduce_astro-0.7a7/examples/neid_example.py +65 -0
  21. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/nirspec_example.py +2 -2
  22. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/toes_example.py +12 -12
  23. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/uves_callfunc.py +5 -5
  24. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/uves_example.py +2 -2
  25. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/examples/xshooter_example.py +2 -2
  26. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyproject.toml +1 -1
  27. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/__main__.py +114 -20
  28. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/cli.py +1 -1
  29. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/combine_frames.py +8 -0
  30. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/configuration.py +20 -0
  31. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/estimate_background_scatter.py +8 -8
  32. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/extract.py +126 -126
  33. pyreduce_astro-0.7a5/pyreduce/extraction_width.py → pyreduce_astro-0.7a7/pyreduce/extraction_height.py +4 -4
  34. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/common.py +201 -15
  35. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harpn.py +2 -2
  36. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harps.py +2 -2
  37. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/models.py +24 -0
  38. pyreduce_astro-0.7a7/pyreduce/instruments/neid.py +128 -0
  39. pyreduce_astro-0.7a7/pyreduce/instruments/neid.yaml +60 -0
  40. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nirspec.py +2 -2
  41. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/make_shear.py +12 -12
  42. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/pipeline.py +6 -6
  43. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/rectify.py +10 -10
  44. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/reduce.py +14 -14
  45. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_AJ.json +2 -2
  46. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_ANDES.json +7 -7
  47. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_CRIRES_PLUS.json +7 -7
  48. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_HARPN.json +7 -7
  49. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_HARPS.json +7 -7
  50. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_JWST_MIRI.json +7 -7
  51. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_JWST_NIRISS.json +7 -7
  52. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_LICK_APF.json +7 -7
  53. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_MCDONALD.json +7 -7
  54. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_METIS_IFU.json +7 -7
  55. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_METIS_LSS.json +7 -7
  56. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_MICADO.json +7 -7
  57. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NEID.json +15 -24
  58. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NIRSPEC.json +7 -7
  59. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_NTE.json +6 -6
  60. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_UVES.json +4 -4
  61. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_XSHOOTER.json +5 -5
  62. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_pyreduce.json +8 -8
  63. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/settings/settings_schema.json +10 -10
  64. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/uv.lock +1 -1
  65. pyreduce_astro-0.7a5/.pyup.yml +0 -4
  66. pyreduce_astro-0.7a5/codemeta.json +0 -56
  67. pyreduce_astro-0.7a5/environment.yml +0 -19
  68. pyreduce_astro-0.7a5/examples/neid_example.py +0 -56
  69. pyreduce_astro-0.7a5/plots_for_paper/dimensionality.py +0 -172
  70. pyreduce_astro-0.7a5/plots_for_paper/settings_HARPS.json +0 -47
  71. pyreduce_astro-0.7a5/plots_for_paper/wavecal_plot.py +0 -137
  72. pyreduce_astro-0.7a5/pyproject.toml.sav +0 -77
  73. pyreduce_astro-0.7a5/pyreduce/instruments/neid.py +0 -156
  74. pyreduce_astro-0.7a5/pyreduce/instruments/neid.yaml +0 -61
  75. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.gitattributes +0 -0
  76. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.pre-commit-config.yaml +0 -0
  77. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.python-version +0 -0
  78. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/.readthedocs.yaml +0 -0
  79. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/AGENTS.md +0 -0
  80. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/LICENSE +0 -0
  81. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/hatch_build.py +0 -0
  82. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/__init__.py +0 -0
  83. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/__init__.py +0 -0
  84. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/build_extract.py +0 -0
  85. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_2d_xi_zeta_bd.c +0 -0
  86. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_2d_xi_zeta_bd.h +0 -0
  87. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_bd.c +0 -0
  88. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clib/slit_func_bd.h +0 -0
  89. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/clipnflip.py +0 -0
  90. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/continuum_normalization.py +0 -0
  91. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/cwrappers.py +0 -0
  92. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/datasets.py +0 -0
  93. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/echelle.py +0 -0
  94. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/__init__.py +0 -0
  95. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/aj.py +0 -0
  96. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/aj.yaml +0 -0
  97. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/andes.py +0 -0
  98. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/andes.yaml +0 -0
  99. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/common.yaml +0 -0
  100. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/crires_plus.py +0 -0
  101. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/crires_plus.yaml +0 -0
  102. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/filters.py +0 -0
  103. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harpn.yaml +0 -0
  104. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/harps.yaml +0 -0
  105. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/instrument_info.py +0 -0
  106. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_miri.py +0 -0
  107. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_miri.yaml +0 -0
  108. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_niriss.py +0 -0
  109. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/jwst_niriss.yaml +0 -0
  110. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/lick_apf.py +0 -0
  111. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/lick_apf.yaml +0 -0
  112. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/mcdonald.py +0 -0
  113. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/mcdonald.yaml +0 -0
  114. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_ifu.py +0 -0
  115. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_ifu.yaml +0 -0
  116. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_lss.py +0 -0
  117. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/metis_lss.yaml +0 -0
  118. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/micado.py +0 -0
  119. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/micado.yaml +0 -0
  120. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nirspec.yaml +0 -0
  121. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nte.py +0 -0
  122. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/nte.yaml +0 -0
  123. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/uves.py +0 -0
  124. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/uves.yaml +0 -0
  125. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/xshooter.py +0 -0
  126. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/instruments/xshooter.yaml +0 -0
  127. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det1.fits.gz +0 -0
  128. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det2.fits.gz +0 -0
  129. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_crires_plus_det3.fits.gz +0 -0
  130. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_ctio_chiron.fits.gz +0 -0
  131. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_elodie.fits.gz +0 -0
  132. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_feros3.fits.gz +0 -0
  133. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_flames_giraffe.fits.gz +0 -0
  134. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_harps_blue.fits.gz +0 -0
  135. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_harps_red.fits.gz +0 -0
  136. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_hds_blue.fits.gz +0 -0
  137. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_hds_red.fits.gz +0 -0
  138. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_het_hrs_2x5.fits.gz +0 -0
  139. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_jwst_miri_lrs_slitless.fits.gz +0 -0
  140. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_jwst_niriss_gr700xd.fits.gz +0 -0
  141. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_lick_apf_.fits.gz +0 -0
  142. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_mcdonald.fits.gz +0 -0
  143. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_nes.fits.gz +0 -0
  144. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_nirspec_nirspec.fits.gz +0 -0
  145. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg.fits.gz +0 -0
  146. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg_2x2a.fits.gz +0 -0
  147. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_sarg_2x2b.fits.gz +0 -0
  148. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_subaru_hds_red.fits.gz +0 -0
  149. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_blue.fits.gz +0 -0
  150. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_blue_binned_2_2.fits.gz +0 -0
  151. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle.fits.gz +0 -0
  152. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle_2x2_split.fits.gz +0 -0
  153. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_middle_binned_2_2.fits.gz +0 -0
  154. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red.fits.gz +0 -0
  155. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_2x2.fits.gz +0 -0
  156. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_2x2_split.fits.gz +0 -0
  157. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_uves_red_binned_2_2.fits.gz +0 -0
  158. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/masks/mask_xshooter_nir.fits.gz +0 -0
  159. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/tools/__init__.py +0 -0
  160. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/tools/combine.py +0 -0
  161. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/trace.py +0 -0
  162. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/util.py +0 -0
  163. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/MICADO_HK_3arcsec_chip5.npz +0 -0
  164. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/thar.fits +0 -0
  165. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/thar_list.txt +0 -0
  166. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/atlas/une.fits +0 -0
  167. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/convert.py +0 -0
  168. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det1.npz +0 -0
  169. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det2.npz +0 -0
  170. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/crires_plus_J1228_det3.npz +0 -0
  171. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harpn_harpn_2D.npz +0 -0
  172. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_blue_2D.npz +0 -0
  173. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_blue_pol_2D.npz +0 -0
  174. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_red_2D.npz +0 -0
  175. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/harps_red_pol_2D.npz +0 -0
  176. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/mcdonald.npz +0 -0
  177. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/metis_lss_l_2D.npz +0 -0
  178. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/metis_lss_m_2D.npz +0 -0
  179. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/nirspec_K2.npz +0 -0
  180. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_360nm_2D.npz +0 -0
  181. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_390nm_2D.npz +0 -0
  182. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_blue_437nm_2D.npz +0 -0
  183. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_2x2_2D.npz +0 -0
  184. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_565nm_2D.npz +0 -0
  185. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_580nm_2D.npz +0 -0
  186. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_600nm_2D.npz +0 -0
  187. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_665nm_2D.npz +0 -0
  188. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_middle_860nm_2D.npz +0 -0
  189. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_580nm_2D.npz +0 -0
  190. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_600nm_2D.npz +0 -0
  191. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_665nm_2D.npz +0 -0
  192. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_760nm_2D.npz +0 -0
  193. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/uves_red_860nm_2D.npz +0 -0
  194. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavecal/xshooter_nir.npz +0 -0
  195. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/pyreduce/wavelength_calibration.py +0 -0
  196. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/argon.line +0 -0
  197. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/bpm_creator.py +0 -0
  198. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/create_wavelength_guess.py +0 -0
  199. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/download_files.py +0 -0
  200. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7/tools}/ipy_startup.py +0 -0
  201. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/neon.lin +0 -0
  202. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/neon.line +0 -0
  203. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/pymultispec.py +0 -0
  204. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/thar.npz +0 -0
  205. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/wavecal_creator.py +0 -0
  206. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/wavecal_creator_from_existing.py +0 -0
  207. {pyreduce_astro-0.7a5 → pyreduce_astro-0.7a7}/tools/xshooter_nir.json +0 -0
@@ -20,3 +20,4 @@ docs/_build/
20
20
  .claude
21
21
  debug/
22
22
  idl/
23
+ logs/
@@ -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,orders,science
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
- | `orders` | `OrderTracing` | Trace echelle order positions on flat |
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
- "orders": {
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
- "extraction_width": 0.5,
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
- "extraction_width": 0.5,
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", "orders", "science"),
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,orders
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 orders UVES HD132205
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.7a5
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,orders,science
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 `.ech` files (standard FITS with binary table extension). Headers include original keywords plus PyReduce-specific ones prefixed with `e_`.
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,orders,science
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 `.ech` files (standard FITS with binary table extension). Headers include original keywords plus PyReduce-specific ones prefixed with `e_`.
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.7a5"]
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.1,
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.7a5"]
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
- # "orders",
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.7a5"]
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["orders"]["degree"] = 5
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
- "orders",
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.7a5"]
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
- # "orders",
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.7a5"]
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
- "orders",
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.7a5"]
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", "extraction_width", "extraction_cutoff"]:
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.7a5"]
3
+ # dependencies = ["pyreduce-astro>=0.7a7"]
4
4
  # ///
5
5
  import matplotlib.pyplot as plt
6
6
  import numpy as np
@@ -1,6 +1,6 @@
1
1
  # /// script
2
2
  # requires-python = ">=3.13"
3
- # dependencies = ["pyreduce-astro>=0.7a5"]
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
- "orders",
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.7a5"]
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
- "orders",
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.7a5"]
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
- # "orders",
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.7a5"]
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
- # "orders",
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.7a5"]
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
- "orders",
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.7a5"]
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
- "orders",
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.7a5"]
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
- "orders",
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["orders"]["noise"] = 100
51
- # config["curvature"]["extraction_width"] = 350 # curvature can still be improved with this and the following parameters
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"]["extraction_width"] = 350
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.7a5"]
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
- "orders",
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.7a5"]
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["orders"]["filter_y"] = 20 # smoothing along cross-dispersion
85
- config["orders"]["degree"] = 4
86
- config["orders"]["degree_before_merge"] = 2
87
- config["orders"]["noise"] = 5.5
88
- config["orders"]["min_cluster"] = 3000
89
- config["orders"]["min_width"] = 200
90
- config["orders"]["manual"] = True
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"]["extraction_width"] = 2
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"]["extraction_width"] = [5, 5] # Extraction slit height (rows)
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
- "orders": [flat_file],
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
- # "orders",
141
+ # "trace",
142
142
  # "norm_flat",
143
143
  "wavecal_master",
144
144
  "wavecal",