Source code for smlmlp.modules.block_LP._functions.globdetection.globdet_snr

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author        : Lancelot PINCET
# GitHub        : https://github.com/LancelotPincet

from smlmlp import block, detect_snr
import numpy as np


[docs] @block() def globdet_snr( signals, bkgds, /, noise_corrections=None, channels_gains=0.25, globdet_groups=None, *, cuda=False, parallel=False, ): """Convert merged global-detection signals to SNR using group-average gains.""" n_globdet_channels = len(signals) channels_gains = _normalize_channels_gains(channels_gains) globdet_groups = _normalize_globdet_groups( globdet_groups, n_globdet_channels, len(channels_gains), ) globdet_channels_gains = [ float(np.mean([channels_gains[index] for index in group])) for group in globdet_groups ] snrs, info = detect_snr( signals, bkgds, noise_corrections=noise_corrections, channels_gains=globdet_channels_gains, cuda=cuda, parallel=parallel, ) info["globdet_groups"] = [list(group) for group in globdet_groups] info["globdet_channels_gains"] = globdet_channels_gains return snrs, info
def _normalize_channels_gains(channels_gains): """Return channel gains as a flat list of floats.""" try: gains = [float(gain) for gain in channels_gains] except TypeError: gains = [float(channels_gains)] if len(gains) == 0: raise ValueError("channels_gains must contain at least one value") return gains def _normalize_globdet_groups(globdet_groups, n_globdet_channels, n_input_channels): """Normalize group definitions into 0-based input-channel indices.""" if globdet_groups is None: if n_globdet_channels == n_input_channels: return [[index] for index in range(n_input_channels)] if n_globdet_channels == 1: return [list(range(n_input_channels))] raise ValueError("globdet_groups is required when outputs do not match input channels") if len(globdet_groups) != n_globdet_channels: raise ValueError("globdet_groups does not have the same length as global channels") normalized = [] for group in globdet_groups: if len(group) == 0: raise ValueError("globdet_groups cannot contain empty groups") indices = [int(index) for index in group] if min(indices) < 0 or max(indices) >= n_input_channels: raise ValueError("globdet_groups contains channel indices out of bounds") normalized.append(indices) return normalized