Skip to main content

Fast computation of traditional summary statistics for neutrino telescopes

Project description

NT Summary Stats

Fast computation of traditional summary statistics for neutrino telescopes.

Install

pip install nt_summary_stats

Usage

import numpy as np
from nt_summary_stats import compute_summary_stats

# Basic usage
times = np.array([10.0, 15.0, 25.0, 100.0])      # shape: (N,), dtype: float
charges = np.array([1.0, 2.0, 1.5, 0.5])         # shape: (N,), dtype: float
stats = compute_summary_stats(times, charges)     # returns: np.ndarray, shape (9,)

print(stats[0])  # total_charge: 5.0
print(stats[3])  # first_pulse_time: 10.0
print(stats[7])  # charge_weighted_mean_time: 26.0

Process Prometheus events:

from nt_summary_stats import process_prometheus_event

# Input: Prometheus event dictionary
event_data = {
    'photons': {
        'sensor_pos_x': [0.0, 0.0, 100.0],  # list[float], length M
        'sensor_pos_y': [0.0, 0.0, 0.0],    # list[float], length M
        'sensor_pos_z': [0.0, 0.0, 50.0],   # list[float], length M
        'string_id': [1, 1, 2],             # list[int], length M
        'sensor_id': [1, 1, 1],             # list[int], length M
        't': [10.0, 15.0, 20.0]             # list[float], length M
    }
}

# Default: no grouping (uses all hits as-is)
sensor_positions, sensor_stats = process_prometheus_event(event_data)

# Optional: group hits within time windows
sensor_positions, sensor_stats = process_prometheus_event(event_data, grouping_window_ns=2.0)
# sensor_positions: np.ndarray, shape (N_sensors, 3), dtype: float64
# sensor_stats: np.ndarray, shape (N_sensors, 9), dtype: float64
# Arrays are aligned: sensor_positions[i] corresponds to sensor_stats[i]

Process individual sensor data:

from nt_summary_stats import process_sensor_data

# Input: sensor hit data
sensor_times = [10.0, 10.5, 15.0, 100.0]    # list[float] or np.ndarray(N,)
sensor_charges = [1.0, 0.5, 2.0, 1.0]       # list[float] or np.ndarray(N,), optional

# Default: no grouping (uses all hits as-is)
stats = process_sensor_data(sensor_times, sensor_charges)  # returns: np.ndarray, shape (9,)

# Optional: group hits within time windows
stats = process_sensor_data(sensor_times, sensor_charges, grouping_window_ns=2.0)

Summary Statistics

Computes 9 traditional summary statistics for neutrino telescope sensors as described in the IceCube paper. All functions return numpy arrays with statistics in the following order:

stats = compute_summary_stats(times, charges)  # shape: (9,)

# Array indices:
stats[0]  # total_charge: Total charge collected
stats[1]  # charge_100ns: Charge within 100ns of first pulse
stats[2]  # charge_500ns: Charge within 500ns of first pulse
stats[3]  # first_pulse_time: Time of first pulse
stats[4]  # last_pulse_time: Time of last pulse
stats[5]  # charge_20_percent_time: Time at which 20% of charge is collected
stats[6]  # charge_50_percent_time: Time at which 50% of charge is collected
stats[7]  # charge_weighted_mean_time: Charge-weighted mean time
stats[8]  # charge_weighted_std_time: Charge-weighted standard deviation

API

compute_summary_stats(times, charges)

Args:

  • times: np.ndarray or list, shape (N,) - pulse arrival times in ns
  • charges: np.ndarray or list, shape (N,) - pulse charges

Returns: np.ndarray, shape (9,) - array with 9 summary statistics in order shown above

process_prometheus_event(event_data, grouping_window_ns=None)

Args:

  • event_data: dict or awkward.Array - Prometheus event data. Supports:
    • Dictionary with photons key containing sensor data
    • Awkward array with photons field (requires awkward package)
    • Direct photon data structure with required fields
  • grouping_window_ns: float or None - time window for grouping hits (default: None, no grouping)

Returns: tuple[np.ndarray, np.ndarray]

  • sensor_positions: np.ndarray, shape (N_sensors, 3) - sensor positions
  • sensor_stats: np.ndarray, shape (N_sensors, 9) - statistics for each sensor (aligned with positions)

process_sensor_data(sensor_times, sensor_charges=None, grouping_window_ns=None)

Args:

  • sensor_times: np.ndarray or list, shape (N,) - hit times for sensor
  • sensor_charges: np.ndarray or list, shape (N,) - hit charges (optional, defaults to 1.0)
  • grouping_window_ns: float or None - time window for grouping hits (default: None, no grouping)

Returns: np.ndarray, shape (9,) - array with 9 summary statistics in order shown above

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nt_summary_stats-0.1.2.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nt_summary_stats-0.1.2-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file nt_summary_stats-0.1.2.tar.gz.

File metadata

  • Download URL: nt_summary_stats-0.1.2.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.6

File hashes

Hashes for nt_summary_stats-0.1.2.tar.gz
Algorithm Hash digest
SHA256 cf70957a8fe1908e98b91305bd3ef4b0e6d4ce7be0b8058e6dbf343678932751
MD5 3a0a780d129d980cb710c47e8d2be62d
BLAKE2b-256 d67ec7b2c2f327dacbf050c935798e8274eda317122ee8ab5daecb307591112b

See more details on using hashes here.

File details

Details for the file nt_summary_stats-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for nt_summary_stats-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5325245304feadfbfe8185c0a2c3ac25ebb2c01ecbb66489370d1b16a4099a15
MD5 e1d9da492607e536855de5031ce7feac
BLAKE2b-256 cacbc5f86be8404877ab3eb701dde3545ffe628e64218c8b523a1acfa0cd6b17

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page