teareduce 0.5.4__py3-none-any.whl → 0.5.5__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/cleanest/__main__.py +57 -8
- teareduce/cleanest/centerchildparent.py +46 -0
- teareduce/cleanest/cleanest.py +16 -19
- teareduce/cleanest/cosmicraycleanerapp.py +262 -170
- teareduce/cleanest/definitions.py +30 -29
- teareduce/cleanest/imagedisplay.py +8 -9
- teareduce/cleanest/interpolation_a.py +5 -9
- teareduce/cleanest/interpolationeditor.py +156 -35
- teareduce/cleanest/modalprogressbar.py +182 -0
- teareduce/cleanest/parametereditor.py +98 -76
- teareduce/cleanest/reviewcosmicray.py +90 -62
- teareduce/version.py +1 -1
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/METADATA +1 -1
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/RECORD +18 -16
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/WHEEL +0 -0
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/entry_points.txt +0 -0
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/licenses/LICENSE.txt +0 -0
- {teareduce-0.5.4.dist-info → teareduce-0.5.5.dist-info}/top_level.txt +0 -0
|
@@ -19,6 +19,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolb
|
|
|
19
19
|
import numpy as np
|
|
20
20
|
from rich import print
|
|
21
21
|
|
|
22
|
+
from .centerchildparent import center_on_parent
|
|
22
23
|
from .definitions import MAX_PIXEL_DISTANCE_TO_CR
|
|
23
24
|
from .imagedisplay import ImageDisplay
|
|
24
25
|
from .interpolation_a import interpolation_a
|
|
@@ -30,15 +31,27 @@ from ..sliceregion import SliceRegion2D
|
|
|
30
31
|
from ..zscale import zscale
|
|
31
32
|
|
|
32
33
|
import matplotlib
|
|
34
|
+
|
|
33
35
|
matplotlib.use("TkAgg")
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
class ReviewCosmicRay(ImageDisplay):
|
|
37
39
|
"""Class to review suspected cosmic ray pixels."""
|
|
38
40
|
|
|
39
|
-
def __init__(
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
def __init__(
|
|
42
|
+
self,
|
|
43
|
+
root,
|
|
44
|
+
data,
|
|
45
|
+
auxdata,
|
|
46
|
+
cleandata_lacosmic,
|
|
47
|
+
cr_labels,
|
|
48
|
+
num_features,
|
|
49
|
+
first_cr_index=1,
|
|
50
|
+
single_cr=False,
|
|
51
|
+
last_dilation=None,
|
|
52
|
+
last_npoints=None,
|
|
53
|
+
last_degree=None,
|
|
54
|
+
):
|
|
42
55
|
"""Initialize the review window.
|
|
43
56
|
|
|
44
57
|
Parameters
|
|
@@ -153,22 +166,25 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
153
166
|
self.last_dilation = last_dilation
|
|
154
167
|
# Make a copy of the original labels to allow pixel re-marking
|
|
155
168
|
self.cr_labels_original = self.cr_labels.copy()
|
|
156
|
-
|
|
157
|
-
print(f"Number of cosmic
|
|
169
|
+
sdum = str(np.sum(self.cr_labels > 0))
|
|
170
|
+
print(f"Number of cosmic ray pixels detected..: {sdum}")
|
|
171
|
+
print(f"Number of cosmic rays (grouped pixels): {self.num_features:>{len(sdum)}}")
|
|
158
172
|
if self.num_features == 0:
|
|
159
|
-
print(
|
|
173
|
+
print("No CR hits found!")
|
|
160
174
|
else:
|
|
161
175
|
self.cr_index = first_cr_index
|
|
162
176
|
self.single_cr = single_cr
|
|
163
177
|
self.create_widgets()
|
|
178
|
+
center_on_parent(child=self.root, parent=self.root.master, offset_x=50, offset_y=50)
|
|
164
179
|
|
|
165
180
|
def create_widgets(self):
|
|
166
181
|
"""Create the GUI widgets for the review window."""
|
|
167
182
|
# Row 1 of buttons
|
|
168
183
|
self.button_frame1 = tk.Frame(self.root)
|
|
169
184
|
self.button_frame1.pack(pady=5)
|
|
170
|
-
self.ndeg_label = tk.Button(
|
|
171
|
-
|
|
185
|
+
self.ndeg_label = tk.Button(
|
|
186
|
+
self.button_frame1, text=f"Npoints={self.npoints}, Degree={self.degree}", command=self.set_ndeg
|
|
187
|
+
)
|
|
172
188
|
self.ndeg_label.pack(side=tk.LEFT, padx=5)
|
|
173
189
|
self.remove_crosses_button = tk.Button(self.button_frame1, text="remove all x's", command=self.remove_crosses)
|
|
174
190
|
self.remove_crosses_button.pack(side=tk.LEFT, padx=5)
|
|
@@ -194,14 +210,13 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
194
210
|
# the function is trying to deactivate the buttons before they are created, which
|
|
195
211
|
# would lead to an error; in addition, since I have two buttons calling the same function
|
|
196
212
|
# with different arguments, using lambda allows to differentiate them)
|
|
197
|
-
self.interp_s_button = tk.Button(
|
|
198
|
-
|
|
213
|
+
self.interp_s_button = tk.Button(
|
|
214
|
+
self.button_frame2, text="[s]urface interp.", command=lambda: self.interp_a("surface")
|
|
215
|
+
)
|
|
199
216
|
self.interp_s_button.pack(side=tk.LEFT, padx=5)
|
|
200
|
-
self.interp_d_button = tk.Button(self.button_frame2, text="me[d]ian",
|
|
201
|
-
command=lambda: self.interp_a('median'))
|
|
217
|
+
self.interp_d_button = tk.Button(self.button_frame2, text="me[d]ian", command=lambda: self.interp_a("median"))
|
|
202
218
|
self.interp_d_button.pack(side=tk.LEFT, padx=5)
|
|
203
|
-
self.interp_m_button = tk.Button(self.button_frame2, text="[m]ean",
|
|
204
|
-
command=lambda: self.interp_a('mean'))
|
|
219
|
+
self.interp_m_button = tk.Button(self.button_frame2, text="[m]ean", command=lambda: self.interp_a("mean"))
|
|
205
220
|
self.interp_m_button.pack(side=tk.LEFT, padx=5)
|
|
206
221
|
self.interp_l_button = tk.Button(self.button_frame2, text="[l]acosmic", command=self.use_lacosmic)
|
|
207
222
|
self.interp_l_button.pack(side=tk.LEFT, padx=5)
|
|
@@ -229,8 +244,7 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
229
244
|
|
|
230
245
|
# Figure
|
|
231
246
|
if self.auxdata is not None:
|
|
232
|
-
self.fig, (self.ax_aux, self.ax) = plt.subplots(
|
|
233
|
-
ncols=2, figsize=(11, 5.5), constrained_layout=True)
|
|
247
|
+
self.fig, (self.ax_aux, self.ax) = plt.subplots(ncols=2, figsize=(11, 5.5), constrained_layout=True)
|
|
234
248
|
else:
|
|
235
249
|
self.fig, self.ax = plt.subplots(figsize=(8, 5.5), constrained_layout=True)
|
|
236
250
|
self.canvas = FigureCanvasTkAgg(self.fig, master=self.root)
|
|
@@ -263,16 +277,17 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
263
277
|
ycr_list, xcr_list = np.where(self.cr_labels == self.cr_index)
|
|
264
278
|
ycr_list_original, xcr_list_original = np.where(self.cr_labels_original == self.cr_index)
|
|
265
279
|
if self.first_plot:
|
|
266
|
-
print(
|
|
267
|
-
|
|
268
|
-
|
|
280
|
+
print(
|
|
281
|
+
f"Cosmic ray {self.cr_index}: "
|
|
282
|
+
f"Number of pixels = {len(xcr_list)}, "
|
|
283
|
+
f"Centroid = ({np.mean(xcr_list)+1:.2f}, {np.mean(ycr_list)+1:.2f})"
|
|
284
|
+
)
|
|
269
285
|
# Use original positions to define the region to display in order
|
|
270
286
|
# to avoid image shifts when some pixels are unmarked or new ones are marked
|
|
271
287
|
i0 = int(np.mean(ycr_list_original) + 0.5)
|
|
272
288
|
j0 = int(np.mean(xcr_list_original) + 0.5)
|
|
273
289
|
max_distance_from_center = np.max(
|
|
274
|
-
[np.max(np.abs(ycr_list_original - i0)),
|
|
275
|
-
np.max(np.abs(xcr_list_original - j0))]
|
|
290
|
+
[np.max(np.abs(ycr_list_original - i0)), np.max(np.abs(xcr_list_original - j0))]
|
|
276
291
|
)
|
|
277
292
|
semiwidth = int(np.max([max_distance_from_center, MAX_PIXEL_DISTANCE_TO_CR]))
|
|
278
293
|
jmin = j0 - semiwidth if j0 - semiwidth >= 0 else 0
|
|
@@ -288,22 +303,35 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
288
303
|
imax = np.min([2 * semiwidth, self.data.shape[0] - 1])
|
|
289
304
|
elif imax == self.data.shape[0] - 1:
|
|
290
305
|
imin = np.max([0, self.data.shape[0] - 1 - 2 * semiwidth])
|
|
291
|
-
self.region = SliceRegion2D(f
|
|
306
|
+
self.region = SliceRegion2D(f"[{jmin+1}:{jmax+1}, {imin+1}:{imax+1}]", mode="fits").python
|
|
292
307
|
self.ax.clear()
|
|
293
308
|
vmin = self.get_vmin()
|
|
294
309
|
vmax = self.get_vmax()
|
|
295
|
-
xlabel =
|
|
296
|
-
ylabel =
|
|
297
|
-
self.image, _, _ = imshow(
|
|
298
|
-
|
|
299
|
-
|
|
310
|
+
xlabel = "X pixel (from 1 to NAXIS1)"
|
|
311
|
+
ylabel = "Y pixel (from 1 to NAXIS2)"
|
|
312
|
+
self.image, _, _ = imshow(
|
|
313
|
+
self.fig,
|
|
314
|
+
self.ax,
|
|
315
|
+
self.data[self.region],
|
|
316
|
+
colorbar=False,
|
|
317
|
+
xlabel=xlabel,
|
|
318
|
+
ylabel=ylabel,
|
|
319
|
+
vmin=vmin,
|
|
320
|
+
vmax=vmax,
|
|
321
|
+
)
|
|
300
322
|
self.image.set_extent([jmin + 0.5, jmax + 1.5, imin + 0.5, imax + 1.5])
|
|
301
323
|
if self.auxdata is not None:
|
|
302
324
|
self.ax_aux.clear()
|
|
303
|
-
self.image_aux, _, _ = imshow(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
325
|
+
self.image_aux, _, _ = imshow(
|
|
326
|
+
self.fig,
|
|
327
|
+
self.ax_aux,
|
|
328
|
+
self.auxdata[self.region],
|
|
329
|
+
colorbar=False,
|
|
330
|
+
xlabel=xlabel,
|
|
331
|
+
ylabel=ylabel,
|
|
332
|
+
vmin=vmin,
|
|
333
|
+
vmax=vmax,
|
|
334
|
+
)
|
|
307
335
|
self.image_aux.set_extent([jmin + 0.5, jmax + 1.5, imin + 0.5, imax + 1.5])
|
|
308
336
|
self.ax_aux.set_title("Auxiliary data")
|
|
309
337
|
# Overplot cosmic ray pixels
|
|
@@ -313,10 +341,10 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
313
341
|
xcr += 1 # from index to pixel
|
|
314
342
|
ycr += 1 # from index to pixel
|
|
315
343
|
if cleaned:
|
|
316
|
-
self.ax.plot(xcr, ycr,
|
|
344
|
+
self.ax.plot(xcr, ycr, "C1o", markersize=4)
|
|
317
345
|
else:
|
|
318
|
-
self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr + 0.5, ycr - 0.5],
|
|
319
|
-
self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr - 0.5, ycr + 0.5],
|
|
346
|
+
self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr + 0.5, ycr - 0.5], "r-")
|
|
347
|
+
self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr - 0.5, ycr + 0.5], "r-")
|
|
320
348
|
self.ax.set_xlim(xlim)
|
|
321
349
|
self.ax.set_ylim(ylim)
|
|
322
350
|
self.ax.set_title(f"Cosmic ray #{self.cr_index}/{self.num_features}")
|
|
@@ -326,12 +354,12 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
326
354
|
|
|
327
355
|
def set_ndeg(self):
|
|
328
356
|
"""Set the number of points and degree for interpolation."""
|
|
329
|
-
new_npoints = simpledialog.askinteger("Set Npoints", "Enter Npoints:",
|
|
330
|
-
initialvalue=self.npoints, minvalue=1)
|
|
357
|
+
new_npoints = simpledialog.askinteger("Set Npoints", "Enter Npoints:", initialvalue=self.npoints, minvalue=1)
|
|
331
358
|
if new_npoints is None:
|
|
332
359
|
return
|
|
333
|
-
new_degree = simpledialog.askinteger(
|
|
334
|
-
|
|
360
|
+
new_degree = simpledialog.askinteger(
|
|
361
|
+
"Set degree", "Enter Degree (min=0):", initialvalue=self.degree, minvalue=0
|
|
362
|
+
)
|
|
335
363
|
if new_degree is None:
|
|
336
364
|
return
|
|
337
365
|
self.degree = new_degree
|
|
@@ -362,14 +390,14 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
362
390
|
cr_labels=self.cr_labels,
|
|
363
391
|
cr_index=self.cr_index,
|
|
364
392
|
npoints=self.npoints,
|
|
365
|
-
degree=self.degree
|
|
393
|
+
degree=self.degree,
|
|
366
394
|
)
|
|
367
395
|
if interpolation_performed:
|
|
368
396
|
self.num_cr_cleaned += 1
|
|
369
397
|
self.set_buttons_after_cleaning_cr()
|
|
370
398
|
self.update_display(cleaned=interpolation_performed)
|
|
371
399
|
if len(xfit_all) > 0:
|
|
372
|
-
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1,
|
|
400
|
+
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
|
|
373
401
|
self.canvas.draw_idle()
|
|
374
402
|
|
|
375
403
|
def interp_y(self):
|
|
@@ -384,14 +412,14 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
384
412
|
cr_labels=self.cr_labels,
|
|
385
413
|
cr_index=self.cr_index,
|
|
386
414
|
npoints=self.npoints,
|
|
387
|
-
degree=self.degree
|
|
415
|
+
degree=self.degree,
|
|
388
416
|
)
|
|
389
417
|
if interpolation_performed:
|
|
390
418
|
self.num_cr_cleaned += 1
|
|
391
419
|
self.set_buttons_after_cleaning_cr()
|
|
392
420
|
self.update_display(cleaned=interpolation_performed)
|
|
393
421
|
if len(xfit_all) > 0:
|
|
394
|
-
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1,
|
|
422
|
+
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
|
|
395
423
|
self.canvas.draw_idle()
|
|
396
424
|
|
|
397
425
|
def interp_a(self, method):
|
|
@@ -409,14 +437,14 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
409
437
|
cr_labels=self.cr_labels,
|
|
410
438
|
cr_index=self.cr_index,
|
|
411
439
|
npoints=self.npoints,
|
|
412
|
-
method=method
|
|
440
|
+
method=method,
|
|
413
441
|
)
|
|
414
442
|
if interpolation_performed:
|
|
415
443
|
self.num_cr_cleaned += 1
|
|
416
444
|
self.set_buttons_after_cleaning_cr()
|
|
417
445
|
self.update_display(cleaned=interpolation_performed)
|
|
418
446
|
if len(xfit_all) > 0:
|
|
419
|
-
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1,
|
|
447
|
+
self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
|
|
420
448
|
self.canvas.draw_idle()
|
|
421
449
|
|
|
422
450
|
def use_lacosmic(self):
|
|
@@ -515,39 +543,39 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
515
543
|
|
|
516
544
|
def on_key(self, event):
|
|
517
545
|
"""Handle key press events."""
|
|
518
|
-
if event.key ==
|
|
546
|
+
if event.key == "q":
|
|
519
547
|
pass # Ignore the "q" key to prevent closing the window
|
|
520
|
-
elif event.key ==
|
|
548
|
+
elif event.key == "r":
|
|
521
549
|
if self.restore_cr_button.cget("state") != "disabled":
|
|
522
550
|
self.restore_cr()
|
|
523
|
-
elif event.key ==
|
|
551
|
+
elif event.key == "x":
|
|
524
552
|
if self.interp_x_button.cget("state") != "disabled":
|
|
525
553
|
self.interp_x()
|
|
526
|
-
elif event.key ==
|
|
554
|
+
elif event.key == "y":
|
|
527
555
|
if self.interp_y_button.cget("state") != "disabled":
|
|
528
556
|
self.interp_y()
|
|
529
|
-
elif event.key ==
|
|
557
|
+
elif event.key == "s":
|
|
530
558
|
if self.interp_s_button.cget("state") != "disabled":
|
|
531
|
-
self.interp_a(
|
|
532
|
-
elif event.key ==
|
|
559
|
+
self.interp_a("surface")
|
|
560
|
+
elif event.key == "d":
|
|
533
561
|
if self.interp_d_button.cget("state") != "disabled":
|
|
534
|
-
self.interp_a(
|
|
535
|
-
elif event.key ==
|
|
562
|
+
self.interp_a("median")
|
|
563
|
+
elif event.key == "m":
|
|
536
564
|
if self.interp_m_button.cget("state") != "disabled":
|
|
537
|
-
self.interp_a(
|
|
538
|
-
elif event.key ==
|
|
565
|
+
self.interp_a("mean")
|
|
566
|
+
elif event.key == "l":
|
|
539
567
|
if self.interp_l_button.cget("state") != "disabled":
|
|
540
568
|
self.use_lacosmic()
|
|
541
|
-
elif event.key ==
|
|
569
|
+
elif event.key == "a":
|
|
542
570
|
if self.interp_aux_button.cget("state") != "disabled":
|
|
543
571
|
self.use_auxdata()
|
|
544
|
-
elif event.key ==
|
|
572
|
+
elif event.key == "right" or event.key == "c":
|
|
545
573
|
self.continue_cr()
|
|
546
|
-
elif event.key ==
|
|
574
|
+
elif event.key == ",":
|
|
547
575
|
self.set_minmax()
|
|
548
|
-
elif event.key ==
|
|
576
|
+
elif event.key == "/":
|
|
549
577
|
self.set_zscale()
|
|
550
|
-
elif event.key ==
|
|
578
|
+
elif event.key == "e":
|
|
551
579
|
self.exit_review()
|
|
552
580
|
return # important: do not remove (to avoid errors)
|
|
553
581
|
else:
|
|
@@ -557,8 +585,8 @@ class ReviewCosmicRay(ImageDisplay):
|
|
|
557
585
|
"""Handle mouse click events on the image."""
|
|
558
586
|
if event.inaxes == self.ax:
|
|
559
587
|
x, y = event.xdata, event.ydata
|
|
560
|
-
ix = int(x+0.5) - 1 # from pixel to index
|
|
561
|
-
iy = int(y+0.5) - 1 # from pixel to index
|
|
588
|
+
ix = int(x + 0.5) - 1 # from pixel to index
|
|
589
|
+
iy = int(y + 0.5) - 1 # from pixel to index
|
|
562
590
|
if int(self.cr_labels[iy, ix]) == self.cr_index:
|
|
563
591
|
self.cr_labels[iy, ix] = 0
|
|
564
592
|
print(f"Pixel ({ix+1}, {iy+1}) unmarked as cosmic ray.")
|
teareduce/version.py
CHANGED
|
@@ -15,33 +15,35 @@ teareduce/sdistortion.py,sha256=5ZsZn4vD5Sw2aoqO8-NIOH7H89Zmh7ZDkow6YbAotHU,5916
|
|
|
15
15
|
teareduce/simulateccdexposure.py,sha256=cdbpca6GVuM3d7R1LGzlIZZvjTq_jzrlkk_Cli7aouQ,24636
|
|
16
16
|
teareduce/sliceregion.py,sha256=Jdf8XvmGaY_vaY1cneTaRtSOYPxpUsJm9cXJDDMa0YM,18626
|
|
17
17
|
teareduce/statsummary.py,sha256=VTNAnBV8z6suqiyB2Lhw3YjUUOjlmwUPX3enkOKRF54,5422
|
|
18
|
-
teareduce/version.py,sha256=
|
|
18
|
+
teareduce/version.py,sha256=x8qFVHj0LWtGzf-qBtcwzyAnbALRdsIJ4c4C_GQISJc,419
|
|
19
19
|
teareduce/wavecal.py,sha256=2MewWz5Y3ms41c305UtWOM_LaLNdk1mugDXCtzf-fSw,68586
|
|
20
20
|
teareduce/write_array_to_fits.py,sha256=kWDrEH9coJ1yIu56oQJpWtDqJL4c8HGmssE9jle4e94,617
|
|
21
21
|
teareduce/zscale.py,sha256=SDgmcDD2N5GvDn46JADCgTQJPBF_N_jSKMHoeTz9Nsw,1152
|
|
22
22
|
teareduce/cleanest/__init__.py,sha256=3O-eptEAQareN504tLALMrJVQPGCuBx7YTfQGqMKjmc,205
|
|
23
|
-
teareduce/cleanest/__main__.py,sha256=
|
|
24
|
-
teareduce/cleanest/
|
|
25
|
-
teareduce/cleanest/
|
|
26
|
-
teareduce/cleanest/
|
|
23
|
+
teareduce/cleanest/__main__.py,sha256=_wXGgwq62ete5-DlNDsKkZP0kATAVFVwTVrG9EspkU8,3298
|
|
24
|
+
teareduce/cleanest/centerchildparent.py,sha256=wHxOvNrrQ-KBLZAbtQ9bJAxYhGOzqYBF4LgdIQk7UF8,1285
|
|
25
|
+
teareduce/cleanest/cleanest.py,sha256=hDC_3jF9ovHCX8IRAPe9eEGFWt_LeVI5rzS7atK7oWI,5025
|
|
26
|
+
teareduce/cleanest/cosmicraycleanerapp.py,sha256=C-lGOREVXrlaqJsjEuJ66xVNx0z8axXq5f5GQh9dpMA,41226
|
|
27
|
+
teareduce/cleanest/definitions.py,sha256=HLv41cuhUOUyEicRHea0LRTv4Wagm24miSxFt4cZN3g,2546
|
|
27
28
|
teareduce/cleanest/dilatemask.py,sha256=I5tHAv5VEO6V0Wed8Ar20uLt4F9P-tgjmLL5BAaFvgM,1276
|
|
28
29
|
teareduce/cleanest/find_closest_true.py,sha256=mWdIvhipzAXDRKfePDrP7f0lP4U48cckpHiKwiB4jHI,1320
|
|
29
|
-
teareduce/cleanest/imagedisplay.py,sha256=
|
|
30
|
-
teareduce/cleanest/interpolation_a.py,sha256=
|
|
30
|
+
teareduce/cleanest/imagedisplay.py,sha256=820Vn-Q0bJyHicOBsxDmfAZxuGOFepEEsm0LTxlPJjc,5848
|
|
31
|
+
teareduce/cleanest/interpolation_a.py,sha256=zE4VIrC41vapf0Vx9qmh1oacw2qkJwcuMnV3JpSDW8Y,4007
|
|
31
32
|
teareduce/cleanest/interpolation_x.py,sha256=D5hKbobT6lJk18XktP3PXhzEN12zqed6U18yfQ-reLQ,3744
|
|
32
33
|
teareduce/cleanest/interpolation_y.py,sha256=O6yw5nKKlTdV6qsP1Ku6CwGhXB6o3j0_YQirXyILi8c,3759
|
|
33
|
-
teareduce/cleanest/interpolationeditor.py,sha256=
|
|
34
|
-
teareduce/cleanest/
|
|
35
|
-
teareduce/cleanest/
|
|
34
|
+
teareduce/cleanest/interpolationeditor.py,sha256=EksuNwKOM79MyGlAgxb9j-v7pIFXV8QOcyZDLVQlQjU,13221
|
|
35
|
+
teareduce/cleanest/modalprogressbar.py,sha256=9anz3js_y_9JLjPyA7XxEsLpVwuMN_CTlnQnhf7m3uo,6355
|
|
36
|
+
teareduce/cleanest/parametereditor.py,sha256=IdaX6_VPicwnYw3dvRA0tKoTZYb6Gp-AZB5ksFClv1o,13390
|
|
37
|
+
teareduce/cleanest/reviewcosmicray.py,sha256=_qO9ifkAMqB4Wuvq2wIYZ8_DUniB2lWcxn9l404hXnY,28210
|
|
36
38
|
teareduce/cookbook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
39
|
teareduce/cookbook/get_cookbook_file.py,sha256=vde-iNii2lm1QII8GmLRsFsKNxkdsd7njCBE-8Z7io0,1088
|
|
38
40
|
teareduce/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
41
|
teareduce/tests/test_cleanest.py,sha256=0uiun1Uloh3rt5ppkv1aG04KUbOJvYZ9C5BvqNizLuI,5562
|
|
40
42
|
teareduce/tests/test_sliceregion.py,sha256=S7Zoh2eEBFIEbfsXgWBEMCf7pottjw2oLhqlZJQkAwg,3785
|
|
41
43
|
teareduce/tests/test_version.py,sha256=mKLnbXyvVNc1pATq5PxR8qeoFMPAFL_GilFV6IHLOi0,172
|
|
42
|
-
teareduce-0.5.
|
|
43
|
-
teareduce-0.5.
|
|
44
|
-
teareduce-0.5.
|
|
45
|
-
teareduce-0.5.
|
|
46
|
-
teareduce-0.5.
|
|
47
|
-
teareduce-0.5.
|
|
44
|
+
teareduce-0.5.5.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
45
|
+
teareduce-0.5.5.dist-info/METADATA,sha256=MIifKnlyWPEQyuxUG3OaqqRnydUaE7JYhcBIB-XDu7Q,3113
|
|
46
|
+
teareduce-0.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
47
|
+
teareduce-0.5.5.dist-info/entry_points.txt,sha256=6yBvig5jTL2ugqz5SF767AiszzrHKGRASsX1II84kqA,66
|
|
48
|
+
teareduce-0.5.5.dist-info/top_level.txt,sha256=7OkwtX9zNRkGJ7ACgjk4ESgC74qUYcS5O2qcO0v-Si4,10
|
|
49
|
+
teareduce-0.5.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|