@@ -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