Skip to content

Commit 7ae457d

Browse files
added option for separate snr range for coarse scale in get_wtl1_sphere
1 parent b2ffa12 commit 7ae457d

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

pycs/astro/wl/hos_peaks_l1.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,8 @@ def get_wtl1_sphere(
667667
min_snr=None,
668668
max_snr=None,
669669
noise_std=None,
670+
min_snr_coarse=None,
671+
max_snr_coarse=None,
670672
):
671673
"""
672674
Computes L1 norms of normalized wavelet transform coefficients at different scales for a HEALPix map.
@@ -693,6 +695,13 @@ def get_wtl1_sphere(
693695
noise_std : float, optional
694696
Noise standard deviation. If provided, coefficients are divided by this value
695697
to compute an SNR before binning. Default is None.
698+
min_snr_coarse : float, optional
699+
Minimum value for binning the coarse (last) scale coefficients.
700+
If None, uses `min_snr` or the minimum value in the coefficients for the coarse scale.
701+
The coarse scale typically contains only positive values.
702+
max_snr_coarse : float, optional
703+
Maximum value for binning the coarse (last) scale coefficients.
704+
If None, uses `max_snr` or the maximum value in the coefficients for the coarse scale.
696705
697706
Returns
698707
-------
@@ -736,8 +745,26 @@ def get_wtl1_sphere(
736745
ScaleCoeffs = ScaleCoeffs[Mask != 0]
737746

738747
# Set the minimum and maximum values based on inputs or defaults
739-
current_min_val = min_snr if min_snr is not None else np.min(ScaleCoeffs)
740-
current_max_val = max_snr if max_snr is not None else np.max(ScaleCoeffs)
748+
# For the last (coarse) scale, use coarse-specific parameters if provided
749+
is_coarse_scale = (i == nscales - 1)
750+
if is_coarse_scale:
751+
# Use coarse scale parameters, falling back to regular parameters, then to data
752+
if min_snr_coarse is not None:
753+
current_min_val = min_snr_coarse
754+
elif min_snr is not None:
755+
current_min_val = min_snr
756+
else:
757+
current_min_val = np.min(ScaleCoeffs)
758+
759+
if max_snr_coarse is not None:
760+
current_max_val = max_snr_coarse
761+
elif max_snr is not None:
762+
current_max_val = max_snr
763+
else:
764+
current_max_val = np.max(ScaleCoeffs)
765+
else:
766+
current_min_val = min_snr if min_snr is not None else np.min(ScaleCoeffs)
767+
current_max_val = max_snr if max_snr is not None else np.max(ScaleCoeffs)
741768

742769
# Define thresholds and bins
743770
thresholds = np.linspace(current_min_val, current_max_val, nbins + 1)

0 commit comments

Comments
 (0)