getframes 2.0.0__tar.gz → 2.1.0__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 (92) hide show
  1. {getframes-2.0.0 → getframes-2.1.0}/.gitignore +2 -0
  2. {getframes-2.0.0 → getframes-2.1.0}/CHANGELOG.md +54 -3
  3. {getframes-2.0.0 → getframes-2.1.0}/PKG-INFO +6 -1
  4. {getframes-2.0.0 → getframes-2.1.0}/README.md +5 -0
  5. getframes-2.1.0/examples/14_keck_lgs_ttf_trade_study.ipynb +1867 -0
  6. {getframes-2.0.0 → getframes-2.1.0}/examples/README.md +1 -0
  7. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/__about__.py +1 -1
  8. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/analysis/__init__.py +3 -2
  9. getframes-2.1.0/src/getframes/analysis/apertures.py +180 -0
  10. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/camera.py +38 -2
  11. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/config.py +20 -0
  12. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/frame.py +44 -0
  13. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/noise.py +62 -4
  14. getframes-2.1.0/src/getframes/presets/data/andor_cb1_0_5mp.toml +34 -0
  15. getframes-2.1.0/src/getframes/presets/data/andor_marana_4_2b_11.toml +38 -0
  16. getframes-2.1.0/src/getframes/presets/data/andor_ocam2k.toml +33 -0
  17. getframes-2.1.0/src/getframes/presets/data/hamamatsu_orca_quest_2.toml +47 -0
  18. getframes-2.1.0/src/getframes/presets/data/nuvu_hnu_128_omega.toml +29 -0
  19. getframes-2.1.0/src/getframes/presets/data/nuvu_hnu_240.toml +33 -0
  20. getframes-2.1.0/src/getframes/presets/data/photometrics_prime_95b.toml +54 -0
  21. getframes-2.1.0/src/getframes/presets/data/princeton_instruments_kuro_1200b.toml +55 -0
  22. getframes-2.1.0/src/getframes/presets/data/qhy530_pro_ii.toml +49 -0
  23. getframes-2.1.0/src/getframes/presets/data/scimeasure_little_joe_ccd39.toml +50 -0
  24. getframes-2.1.0/src/getframes/presets/data/tucsen_aries_6504_pro.toml +78 -0
  25. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/photometry.py +1 -1
  26. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/psf.py +1 -1
  27. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/thermal.py +2 -2
  28. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/spectral.py +4 -4
  29. getframes-2.1.0/tests/test_analysis.py +112 -0
  30. {getframes-2.0.0 → getframes-2.1.0}/tests/test_calibrate.py +9 -0
  31. {getframes-2.0.0 → getframes-2.1.0}/tests/test_detector.py +75 -0
  32. getframes-2.1.0/tests/test_frame.py +46 -0
  33. getframes-2.1.0/tests/test_presets.py +114 -0
  34. {getframes-2.0.0 → getframes-2.1.0}/tests/test_spectral.py +15 -0
  35. getframes-2.0.0/src/getframes/analysis/apertures.py +0 -92
  36. getframes-2.0.0/tests/test_analysis.py +0 -56
  37. getframes-2.0.0/tests/test_presets.py +0 -37
  38. {getframes-2.0.0 → getframes-2.1.0}/LICENSE +0 -0
  39. {getframes-2.0.0 → getframes-2.1.0}/benchmarks/run.py +0 -0
  40. {getframes-2.0.0 → getframes-2.1.0}/examples/01_basic_dark_frame.py +0 -0
  41. {getframes-2.0.0 → getframes-2.1.0}/examples/02_custom_camera.py +0 -0
  42. {getframes-2.0.0 → getframes-2.1.0}/examples/03_master_dark.py +0 -0
  43. {getframes-2.0.0 → getframes-2.1.0}/examples/04_browse_presets.py +0 -0
  44. {getframes-2.0.0 → getframes-2.1.0}/examples/05_visualise.py +0 -0
  45. {getframes-2.0.0 → getframes-2.1.0}/examples/06_photon_transfer_curve.py +0 -0
  46. {getframes-2.0.0 → getframes-2.1.0}/examples/07_star_field_exposure.py +0 -0
  47. {getframes-2.0.0 → getframes-2.1.0}/examples/08_ao_limiting_magnitude.py +0 -0
  48. {getframes-2.0.0 → getframes-2.1.0}/examples/09_transit_photometry.py +0 -0
  49. {getframes-2.0.0 → getframes-2.1.0}/examples/10_detector_realism.py +0 -0
  50. {getframes-2.0.0 → getframes-2.1.0}/examples/11_radiometry_and_ir.py +0 -0
  51. {getframes-2.0.0 → getframes-2.1.0}/examples/12_ml_dataset.py +0 -0
  52. {getframes-2.0.0 → getframes-2.1.0}/examples/13_crowded_field.py +0 -0
  53. {getframes-2.0.0 → getframes-2.1.0}/examples/_common.py +0 -0
  54. {getframes-2.0.0 → getframes-2.1.0}/pyproject.toml +0 -0
  55. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/__init__.py +0 -0
  56. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/analysis/ptc.py +0 -0
  57. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/calibrate.py +0 -0
  58. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/cli.py +0 -0
  59. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/dataset.py +0 -0
  60. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/observation.py +0 -0
  61. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/__init__.py +0 -0
  62. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/__init__.py +0 -0
  63. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/andor_ikon_m934.toml +0 -0
  64. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/andor_ixon_ultra_888.toml +0 -0
  65. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/generic_ccd.toml +0 -0
  66. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/generic_cmos.toml +0 -0
  67. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/generic_eapd.toml +0 -0
  68. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/generic_emccd.toml +0 -0
  69. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/generic_scmos.toml +0 -0
  70. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/hamamatsu_orca_fusion.toml +0 -0
  71. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/leonardo_saphira.toml +0 -0
  72. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/presets/data/zwo_asi2600mm.toml +0 -0
  73. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/py.typed +0 -0
  74. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/__init__.py +0 -0
  75. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/optics.py +0 -0
  76. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/scene.py +0 -0
  77. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/sources.py +0 -0
  78. {getframes-2.0.0 → getframes-2.1.0}/src/getframes/scene/wcs.py +0 -0
  79. {getframes-2.0.0 → getframes-2.1.0}/tests/test_camera.py +0 -0
  80. {getframes-2.0.0 → getframes-2.1.0}/tests/test_cli.py +0 -0
  81. {getframes-2.0.0 → getframes-2.1.0}/tests/test_config.py +0 -0
  82. {getframes-2.0.0 → getframes-2.1.0}/tests/test_dataset.py +0 -0
  83. {getframes-2.0.0 → getframes-2.1.0}/tests/test_gain.py +0 -0
  84. {getframes-2.0.0 → getframes-2.1.0}/tests/test_noise.py +0 -0
  85. {getframes-2.0.0 → getframes-2.1.0}/tests/test_observation.py +0 -0
  86. {getframes-2.0.0 → getframes-2.1.0}/tests/test_radiometry.py +0 -0
  87. {getframes-2.0.0 → getframes-2.1.0}/tests/test_realism.py +0 -0
  88. {getframes-2.0.0 → getframes-2.1.0}/tests/test_scale.py +0 -0
  89. {getframes-2.0.0 → getframes-2.1.0}/tests/test_scene.py +0 -0
  90. {getframes-2.0.0 → getframes-2.1.0}/tests/test_scene_enrich.py +0 -0
  91. {getframes-2.0.0 → getframes-2.1.0}/tests/test_signal.py +0 -0
  92. {getframes-2.0.0 → getframes-2.1.0}/tests/test_validation.py +0 -0
@@ -222,3 +222,5 @@ __marimo__/
222
222
 
223
223
  # Streamlit
224
224
  .streamlit/secrets.toml
225
+ keck_ttf
226
+ *.png
@@ -6,6 +6,55 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.1.0] - 2026-07-19
10
+
11
+ ### Added
12
+
13
+ - Five scientific-camera presets used by the Keck tip/tilt and low-bandwidth WFS
14
+ detector trade example: KURO 1200B, Prime 95B, Marana 4.2B-11, QHY530 Pro II,
15
+ and Aries 6504 Pro. All five now include a wavelength-resolved `qe_curve`:
16
+ Marana and Aries from Andor's/Gpixel's published data (the Aries
17
+ `QE x fill factor` trace is digitized from Gpixel's graph); KURO 1200B,
18
+ Prime 95B, and QHY530 Pro II are digitized from published manufacturer QE
19
+ plots.
20
+ - A `quantum_efficiency` override on `Camera.expose_series`, matching
21
+ `Camera.expose` and supporting pre-integrated spectral electron-rate series.
22
+ - A Keck/SciMeasure Little Joe CCD39 preset with the manufacturer CCD39-01
23
+ standard-AR/no-window spectral-response curve.
24
+ - `getframes.analysis.matched_filter_centroid`, a background-insensitive
25
+ cross-correlation centroid with sub-pixel peak refinement.
26
+ - `Frame.binned(factor, method=...)`, post-read digital binning of a frame into
27
+ `factor x factor` super-pixels (sum or mean).
28
+ - `CameraConfig.supported_binnings` and `CameraConfig.binning_method` — binning is
29
+ now a first-class config parameter. The Keck-trade presets set these directly and
30
+ drop the `extra.detector_modes` per-binning tables; cameras with more than one
31
+ read-noise operating point keep a slim `extra.read_modes` list instead.
32
+ - Native pixel binning in the signal chain: `Camera.expose`, `Camera.expose_series`,
33
+ and `noise.simulate_frame` accept `binning` and `binning_mode`. `"digital"`
34
+ (post-read, the default) reads each native pixel with its own read noise then sums,
35
+ so binned read noise grows as `binning`; `"on_chip"` (pre-read charge-domain /
36
+ hardware binning) sums the charge before the amplifier, so a single read noise is
37
+ applied per super-pixel. Exposed `noise.block_sum` for the super-pixel summation.
38
+ - `getframes.analysis.centroid` now accepts a per-pixel array `background` (e.g. a
39
+ master sky+dark frame) and an optional `threshold` (scalar or per-pixel noise
40
+ map), making it a calibrated thresholded centre-of-gravity estimator suitable
41
+ for a real-time controller. Both additions are backwards compatible.
42
+ - A Keck LGS tip/tilt and low-bandwidth wavefront-sensor detector trade-study
43
+ example, including physically sampled AO/sub-aperture PSFs, complete detector
44
+ Monte Carlo simulations, blackbody NGS weighting of each camera's QE curve
45
+ (`--ngs-teff`), the 600–950 nm TTS/LBWFS arm bandpass folded into the zero-point
46
+ bands, Monte Carlo standard errors on every point, a per-camera closed-loop
47
+ cadence optimisation (a physical `a·f + b·f²` noise model fitted to the Monte
48
+ Carlo data, saturation-aware, against a Tyler tilt-lag disturbance model), and
49
+ a best/worst-performer frame gallery figure beside the trade curves.
50
+
51
+ ### Fixed
52
+
53
+ - Type-checking compatibility with newer NumPy (2.2): tightened stub types for
54
+ `_stamp_bounds`/`_radial_grid` shape arguments, pinned `float64` on a few
55
+ `np.linspace` constructions, and dropped now-unused `type: ignore` comments
56
+ around the `trapz`/`trapezoid` shim. No behavioural change.
57
+
9
58
  ## [2.0.0] - 2026-06-29
10
59
 
11
60
  The 2.0 cut promotes the full surface grown across 1.1–1.6 to **stable** and lands
@@ -248,6 +297,8 @@ together in 1.0.
248
297
  - Documentation, runnable examples, and CI (lint, type-check, test matrix, PyPI
249
298
  release via Trusted Publishing).
250
299
 
251
- [Unreleased]: https://github.com/jacotay7/getframes/compare/v1.0.0...HEAD
252
- [1.0.0]: https://github.com/jacotay7/getframes/compare/v0.1.0...v1.0.0
253
- [0.1.0]: https://github.com/jacotay7/getframes/releases/tag/v0.1.0
300
+ [Unreleased]: https://github.com/jacotay7/getframes/compare/2.1.0...HEAD
301
+ [2.1.0]: https://github.com/jacotay7/getframes/compare/2.0.0...2.1.0
302
+ [2.0.0]: https://github.com/jacotay7/getframes/compare/1.0.0...2.0.0
303
+ [1.0.0]: https://github.com/jacotay7/getframes/compare/0.1.0...1.0.0
304
+ [0.1.0]: https://github.com/jacotay7/getframes/releases/tag/0.1.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: getframes
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Generate physically realistic synthetic camera frames (CCD/CMOS/EMCCD/eAPD/sCMOS) — dark, bias, flat, and rendered star fields — with auditable noise physics for scientific imaging pipelines.
5
5
  Project-URL: Homepage, https://github.com/jacotay7/getframes
6
6
  Project-URL: Documentation, https://jacotay7.github.io/getframes/
@@ -165,6 +165,11 @@ preset_info() # rich descriptors for each preset
165
165
  | `leonardo_saphira` | EAPD | HgCdTe avalanche IR array (AO wavefront sensing) |
166
166
  | `zwo_asi2600mm` | CMOS | Sony IMX571 cooled CMOS |
167
167
  | `hamamatsu_orca_fusion` | sCMOS | Back-thinned sCMOS with per-pixel read noise |
168
+ | `andor_marana_4_2b_11` | sCMOS | 11 µm-pixel, back-illuminated scientific CMOS |
169
+ | `photometrics_prime_95b` | sCMOS | 11 µm-pixel, 95% peak-QE scientific CMOS |
170
+ | `princeton_instruments_kuro_1200b` | sCMOS | Back-illuminated scientific CMOS |
171
+ | `qhy530_pro_ii` | CMOS | Global-shutter Sony IMX530 scientific camera |
172
+ | `tucsen_aries_6504_pro` | sCMOS | Sub-electron sensitive-mode read noise |
168
173
  | `generic_ccd` / `generic_cmos` / `generic_emccd` / `generic_eapd` / `generic_scmos` | — | Idealised references for teaching/testing |
169
174
 
170
175
  ## How the dark-frame model works
@@ -121,6 +121,11 @@ preset_info() # rich descriptors for each preset
121
121
  | `leonardo_saphira` | EAPD | HgCdTe avalanche IR array (AO wavefront sensing) |
122
122
  | `zwo_asi2600mm` | CMOS | Sony IMX571 cooled CMOS |
123
123
  | `hamamatsu_orca_fusion` | sCMOS | Back-thinned sCMOS with per-pixel read noise |
124
+ | `andor_marana_4_2b_11` | sCMOS | 11 µm-pixel, back-illuminated scientific CMOS |
125
+ | `photometrics_prime_95b` | sCMOS | 11 µm-pixel, 95% peak-QE scientific CMOS |
126
+ | `princeton_instruments_kuro_1200b` | sCMOS | Back-illuminated scientific CMOS |
127
+ | `qhy530_pro_ii` | CMOS | Global-shutter Sony IMX530 scientific camera |
128
+ | `tucsen_aries_6504_pro` | sCMOS | Sub-electron sensitive-mode read noise |
124
129
  | `generic_ccd` / `generic_cmos` / `generic_emccd` / `generic_eapd` / `generic_scmos` | — | Idealised references for teaching/testing |
125
130
 
126
131
  ## How the dark-frame model works