teareduce 0.4.2__py3-none-any.whl → 0.4.4__py3-none-any.whl
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.
- teareduce/__init__.py +3 -1
- teareduce/histogram1d.py +85 -0
- teareduce/imshow.py +18 -1
- teareduce/tests/test_version.py +8 -0
- teareduce/version.py +1 -1
- {teareduce-0.4.2.dist-info → teareduce-0.4.4.dist-info}/METADATA +24 -7
- {teareduce-0.4.2.dist-info → teareduce-0.4.4.dist-info}/RECORD +10 -8
- {teareduce-0.4.2.dist-info → teareduce-0.4.4.dist-info}/WHEEL +0 -0
- {teareduce-0.4.2.dist-info → teareduce-0.4.4.dist-info}/licenses/LICENSE.txt +0 -0
- {teareduce-0.4.2.dist-info → teareduce-0.4.4.dist-info}/top_level.txt +0 -0
teareduce/__init__.py
CHANGED
|
@@ -14,6 +14,8 @@ from .ctext import ctext
|
|
|
14
14
|
from .draw_rectangle import draw_rectangle
|
|
15
15
|
from .elapsed_time import elapsed_time
|
|
16
16
|
from .elapsed_time import elapsed_time_since
|
|
17
|
+
from .histogram1d import hist_step
|
|
18
|
+
from .histogram1d import plot_hist_step
|
|
17
19
|
from .imshow import imshow
|
|
18
20
|
from .imshow import imshowme
|
|
19
21
|
from .numsplines import AdaptiveLSQUnivariateSpline
|
|
@@ -21,9 +23,9 @@ from .peaks_spectrum import find_peaks_spectrum, refine_peaks_spectrum
|
|
|
21
23
|
from .polfit import polfit_residuals, polfit_residuals_with_sigma_rejection
|
|
22
24
|
from .robust_std import robust_std
|
|
23
25
|
from .sdistortion import fit_sdistortion
|
|
26
|
+
from .simulateccdexposure import SimulateCCDExposure
|
|
24
27
|
from .sliceregion import SliceRegion1D, SliceRegion2D, SliceRegion3D
|
|
25
28
|
from .statsummary import ifc_statsummary, statsummary
|
|
26
|
-
from .simulateccdexposure import SimulateCCDExposure
|
|
27
29
|
from .version import VERSION
|
|
28
30
|
from .wavecal import TeaWaveCalibration, apply_wavecal_ccddata
|
|
29
31
|
from .write_array_to_fits import write_array_to_fits
|
teareduce/histogram1d.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2025 Universidad Complutense de Madrid
|
|
3
|
+
#
|
|
4
|
+
# This file is part of teareduce
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
7
|
+
# License-Filename: LICENSE.txt
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
"""Auxiliary function to display 1D histograms computed with numpy"""
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def plot_hist_step(ax, bins, h, color='C0', alpha=1.0, fill_color=None, fill_alpha=0.4):
|
|
16
|
+
"""Plot histogram already computed.
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
ax : matplotlib.axes.Axes
|
|
21
|
+
Axes to plot on.
|
|
22
|
+
bins : np.ndarray
|
|
23
|
+
Array of bin edges.
|
|
24
|
+
h : np.ndarray
|
|
25
|
+
Array of histogram values.
|
|
26
|
+
color : str, optional
|
|
27
|
+
Color of the histogram line, by default 'C0'.
|
|
28
|
+
alpha : float, optional
|
|
29
|
+
Transparency of the histogram line, by default 1.0.
|
|
30
|
+
fill_color : str, optional
|
|
31
|
+
Color to fill the histogram area, by default None (no fill).
|
|
32
|
+
fill_alpha : float, optional
|
|
33
|
+
Transparency of the filled area, by default 0.4.
|
|
34
|
+
"""
|
|
35
|
+
# bin centers
|
|
36
|
+
xdum = (bins[:-1] + bins[1:]) / 2
|
|
37
|
+
ax.step(xdum, h, where='mid')
|
|
38
|
+
# draw vertical lines at the edges
|
|
39
|
+
ax.plot([bins[0], bins[0], xdum[0]], [0, h[0], h[0]], alpha=alpha, color=f'{color}', linestyle='-')
|
|
40
|
+
ax.plot([xdum[-1], bins[-1], bins[-1]], [h[-1], h[-1], 0], alpha=alpha, color=f'{color}', linestyle='-')
|
|
41
|
+
# fill area under the histogram
|
|
42
|
+
if fill_color is not None:
|
|
43
|
+
ax.fill_between(np.concatenate((np.array([bins[0]]), xdum, np.array([bins[-1]]))),
|
|
44
|
+
np.concatenate((np.array([h[0]]), h, np.array([h[-1]]))),
|
|
45
|
+
step='mid', alpha=fill_alpha, color=f'{fill_color}')
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def hist_step(ax, data, bins, color='C0', alpha=1.0, fill_color=None, fill_alpha=0.4):
|
|
49
|
+
"""Compute and plot histogram of data.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
ax : matplotlib.axes.Axes
|
|
54
|
+
Axes to plot on.
|
|
55
|
+
data : np.ndarray
|
|
56
|
+
Data to compute the histogram from.
|
|
57
|
+
bins : int or np.ndarray
|
|
58
|
+
Number of bins or array of bin edges.
|
|
59
|
+
color : str, optional
|
|
60
|
+
Color of the histogram line, by default 'C0'.
|
|
61
|
+
alpha : float, optional
|
|
62
|
+
Transparency of the histogram line, by default 1.0.
|
|
63
|
+
fill_color : str, optional
|
|
64
|
+
Color to fill the histogram area, by default None (no fill).
|
|
65
|
+
fill_alpha : float, optional
|
|
66
|
+
Transparency of the filled area, by default 0.4.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
h : np.ndarray
|
|
71
|
+
Histogram values.
|
|
72
|
+
edges : np.ndarray
|
|
73
|
+
Bin edges of the histogram.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
if isinstance(bins, int):
|
|
77
|
+
bins = np.linspace(np.min(data), np.max(data), bins + 1)
|
|
78
|
+
elif isinstance(bins, np.ndarray):
|
|
79
|
+
pass
|
|
80
|
+
else:
|
|
81
|
+
raise ValueError(f'Unexpected {bins=}')
|
|
82
|
+
h, edges = np.histogram(data, bins=bins)
|
|
83
|
+
plot_hist_step(ax, bins, h, color=color, alpha=alpha, fill_color=fill_color, fill_alpha=fill_alpha)
|
|
84
|
+
|
|
85
|
+
return h, edges
|
teareduce/imshow.py
CHANGED
|
@@ -101,6 +101,7 @@ def imshow(fig=None, ax=None, data=None,
|
|
|
101
101
|
if ylabel is None:
|
|
102
102
|
ylabel = 'Y axis (array index)'
|
|
103
103
|
|
|
104
|
+
wavecalib = False
|
|
104
105
|
if crpix1 is not None and crval1 is not None and cdelt1 is not None and cunit1 is not None:
|
|
105
106
|
if 'extent' in kwargs:
|
|
106
107
|
raise ValueError('extent parameter can not be used with a wavelength calibration scale')
|
|
@@ -112,9 +113,12 @@ def imshow(fig=None, ax=None, data=None,
|
|
|
112
113
|
u_pixel = Unit('pixel')
|
|
113
114
|
xminwv = crval1 + (xmin * u_pixel - crpix1 + 1 * u_pixel) * cdelt1
|
|
114
115
|
xmaxwv = crval1 + (xmax * u_pixel - crpix1 + 1 * u_pixel) * cdelt1
|
|
115
|
-
|
|
116
|
+
xminwv = xminwv.to(cunitx).value
|
|
117
|
+
xmaxwv = xmaxwv.to(cunitx).value
|
|
118
|
+
extent = [xminwv, xmaxwv, ymin, ymax]
|
|
116
119
|
xlabel = f'Wavelength ({cunitx})'
|
|
117
120
|
aspect = 'auto'
|
|
121
|
+
wavecalib = True
|
|
118
122
|
else:
|
|
119
123
|
if 'extent' in kwargs:
|
|
120
124
|
extent = kwargs['extent']
|
|
@@ -143,6 +147,19 @@ def imshow(fig=None, ax=None, data=None,
|
|
|
143
147
|
if title is not None:
|
|
144
148
|
ax.set_title(title)
|
|
145
149
|
|
|
150
|
+
# if a wavelength calibration is provided, display the index scale
|
|
151
|
+
# on the top horizontal axis
|
|
152
|
+
if wavecalib:
|
|
153
|
+
|
|
154
|
+
def index2coord(i):
|
|
155
|
+
return xminwv + (xmaxwv - xminwv) * i / (naxis1 - 1)
|
|
156
|
+
|
|
157
|
+
def coord2index(x):
|
|
158
|
+
return (naxis1 - 1) * (x - xminwv) / (xmaxwv - xminwv)
|
|
159
|
+
|
|
160
|
+
ax_top = ax.secondary_xaxis('top', functions=(coord2index, index2coord))
|
|
161
|
+
ax_top.set_xlabel('X axis (array index)')
|
|
162
|
+
|
|
146
163
|
if colorbar:
|
|
147
164
|
divider = make_axes_locatable(ax)
|
|
148
165
|
cax = divider.append_axes("right", size="5%", pad=0.05, axes_class=Axes)
|
teareduce/version.py
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: teareduce
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Utilities for astronomical data reduction
|
|
5
5
|
Author-email: Nicolás Cardiel <cardiel@ucm.es>
|
|
6
6
|
License: GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/nicocardiel/teareduce
|
|
8
8
|
Project-URL: Repository, https://github.com/nicocardiel/teareduce.git
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.10
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -14,16 +13,16 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
13
|
Classifier: Development Status :: 3 - Alpha
|
|
15
14
|
Classifier: Environment :: Console
|
|
16
15
|
Classifier: Intended Audience :: Science/Research
|
|
17
|
-
Classifier: License :: OSI Approved :: GNU General Public License (
|
|
16
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
18
17
|
Classifier: Operating System :: OS Independent
|
|
19
18
|
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
20
|
-
Requires-Python: >=3.
|
|
19
|
+
Requires-Python: >=3.10
|
|
21
20
|
Description-Content-Type: text/markdown
|
|
22
21
|
License-File: LICENSE.txt
|
|
23
22
|
Requires-Dist: astropy
|
|
24
23
|
Requires-Dist: lmfit
|
|
25
24
|
Requires-Dist: matplotlib
|
|
26
|
-
Requires-Dist: numpy>=1.
|
|
25
|
+
Requires-Dist: numpy>=1.22
|
|
27
26
|
Requires-Dist: scipy
|
|
28
27
|
Requires-Dist: tqdm
|
|
29
28
|
Provides-Extra: test
|
|
@@ -31,7 +30,24 @@ Requires-Dist: pytest; extra == "test"
|
|
|
31
30
|
Dynamic: license-file
|
|
32
31
|
|
|
33
32
|
# teareduce
|
|
34
|
-
|
|
33
|
+
|
|
34
|
+
Utilities for astronomical data reduction.
|
|
35
|
+
|
|
36
|
+
This package is not intended to be a general-purpose image reduction code. It
|
|
37
|
+
only includes specific operations required in certain steps of the traditional
|
|
38
|
+
astronomical image reduction process that, at the time of its creation, were
|
|
39
|
+
not available in more established packages such as
|
|
40
|
+
[ccdproc](https://ccdproc.readthedocs.io/en/latest/). In addition, it also
|
|
41
|
+
offers alternative ways to perform certain tasks that we have found to be more
|
|
42
|
+
practical for use in Master’s level classes.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Documentation
|
|
46
|
+
|
|
47
|
+
The documentation for this package is available at [this
|
|
48
|
+
link](https://guaix.fis.ucm.es/~tea/teareduce-cookbook/_build/html/intro.html).
|
|
49
|
+
It includes Juypter notebooks that can be easily downloaded and demonstrate the
|
|
50
|
+
practical use of the defined functionality.
|
|
35
51
|
|
|
36
52
|
## Installing the code
|
|
37
53
|
|
|
@@ -73,5 +89,6 @@ The latest development version is available through [GitHub](https://github.com/
|
|
|
73
89
|
(venv_teareduce) $ ipython
|
|
74
90
|
In [1]: import teareduce as tea
|
|
75
91
|
In [2]: print(tea.__version__)
|
|
76
|
-
0.
|
|
92
|
+
0.4.3
|
|
77
93
|
```
|
|
94
|
+
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
teareduce/__init__.py,sha256=
|
|
1
|
+
teareduce/__init__.py,sha256=u-6eZ9oz2reoSWxm1kf-9uj2VB4yERhh7fuE5gd4-RA,1304
|
|
2
2
|
teareduce/avoid_astropy_warnings.py,sha256=2YgQ47pxsKYWDxUtzyEOfh3Is3aAHHmjJkuOa1JCDN4,648
|
|
3
3
|
teareduce/correct_pincushion_distortion.py,sha256=Xpt03jtmJMyqik4ta95zMRE3Z6dVfzzHI2z5IDbtnMk,1685
|
|
4
4
|
teareduce/cosmicrays.py,sha256=gLHgq9LdfNHmZ5n_FYxvxcGI2245TXGV-rFHSIogxPE,26877
|
|
5
5
|
teareduce/ctext.py,sha256=8QP_KW7ueJ34IUyduVpy7nk-x0If5eilawf87icDMJA,2084
|
|
6
6
|
teareduce/draw_rectangle.py,sha256=xlwcKIkl7e0U6sa9zWZr8t_WuWAte_UKIqCwZQ41x4Q,1922
|
|
7
7
|
teareduce/elapsed_time.py,sha256=QWakPeiOUA__WpjjFREnodKqW1FZzVGWstab0N3Ro6k,1418
|
|
8
|
-
teareduce/
|
|
8
|
+
teareduce/histogram1d.py,sha256=3hlvcI8XPRmZ27H_sFmyL26gIcbJozk07ELBKWtngQk,2835
|
|
9
|
+
teareduce/imshow.py,sha256=P-TzdB8pOBnbFIMLu3MvKfBgSN91GsHTSh_02B0HsKI,5418
|
|
9
10
|
teareduce/numsplines.py,sha256=1PpG-frdc9Qz3VRbC7XyZFWKmhus05ID4REtFnWDmUo,8049
|
|
10
11
|
teareduce/peaks_spectrum.py,sha256=YPCJz8skJmIjWYqT7ZhBJGhnqPayFwy5xb7I9OHlUZI,9890
|
|
11
12
|
teareduce/polfit.py,sha256=CGsrRsz_Du2aKxOcgXi36lpAZO04JyqCCUaxhC0C-Mk,14281
|
|
@@ -14,14 +15,15 @@ teareduce/sdistortion.py,sha256=5ZsZn4vD5Sw2aoqO8-NIOH7H89Zmh7ZDkow6YbAotHU,5916
|
|
|
14
15
|
teareduce/simulateccdexposure.py,sha256=cdbpca6GVuM3d7R1LGzlIZZvjTq_jzrlkk_Cli7aouQ,24636
|
|
15
16
|
teareduce/sliceregion.py,sha256=0h1xYcNG4mkJhR6bdaDe9pF2_MCuGeLJC7WVbbMZy8E,14977
|
|
16
17
|
teareduce/statsummary.py,sha256=mtaM21d5aHvtLjCt_SSDMvD_fjI5nK21ZqxuDtcvldI,5426
|
|
17
|
-
teareduce/version.py,sha256=
|
|
18
|
+
teareduce/version.py,sha256=lKO2PdR2DtjUkH9hJBtVk-385YTx5NNIRltW67sZ0dk,419
|
|
18
19
|
teareduce/wavecal.py,sha256=iiKG_RPW2CllwZxG5fTsyckE0Ec_IeZ6v7v2cQt6OeU,68706
|
|
19
20
|
teareduce/write_array_to_fits.py,sha256=kWDrEH9coJ1yIu56oQJpWtDqJL4c8HGmssE9jle4e94,617
|
|
20
21
|
teareduce/zscale.py,sha256=HuPYagTW55D7RtjPGc7HcibQlCx5oqLYHKoM6WEHG2g,1161
|
|
21
22
|
teareduce/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
23
|
teareduce/tests/test_sliceregion.py,sha256=25dhS7yJ1z_3tgFLw21uOkNKuugyVA-8L1ehafSQjFg,1769
|
|
23
|
-
teareduce
|
|
24
|
-
teareduce-0.4.
|
|
25
|
-
teareduce-0.4.
|
|
26
|
-
teareduce-0.4.
|
|
27
|
-
teareduce-0.4.
|
|
24
|
+
teareduce/tests/test_version.py,sha256=mKLnbXyvVNc1pATq5PxR8qeoFMPAFL_GilFV6IHLOi0,172
|
|
25
|
+
teareduce-0.4.4.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
26
|
+
teareduce-0.4.4.dist-info/METADATA,sha256=5njKTz4asc-xYbvhZwu8hZ2kFbjeLsfKnUVY6H8JTqo,3017
|
|
27
|
+
teareduce-0.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
28
|
+
teareduce-0.4.4.dist-info/top_level.txt,sha256=7OkwtX9zNRkGJ7ACgjk4ESgC74qUYcS5O2qcO0v-Si4,10
|
|
29
|
+
teareduce-0.4.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|