From 358a82ba9e3435b9a00b69aca0aa408bb7e4d64c Mon Sep 17 00:00:00 2001 From: Severin Magel Date: Sat, 30 May 2026 12:51:44 -0400 Subject: [PATCH 1/2] putting a lower bound on the charge to avoid negative arg in log10 --- src/graphnet/models/detector/icecube.py | 3 ++- src/graphnet/models/detector/nubench.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/graphnet/models/detector/icecube.py b/src/graphnet/models/detector/icecube.py index 877a0bf65..57870421e 100644 --- a/src/graphnet/models/detector/icecube.py +++ b/src/graphnet/models/detector/icecube.py @@ -39,7 +39,8 @@ def _dom_time(self, x: torch.tensor) -> torch.tensor: return (x - 1.0e04) / 3.0e4 def _charge(self, x: torch.tensor) -> torch.tensor: - return torch.log10(x) + # catch negative charges arising from input perturbation/noise + return torch.log10(1 + torch.clamp(x, min=0.0)) def _rde(self, x: torch.tensor) -> torch.tensor: return (x - 1.25) / 0.25 diff --git a/src/graphnet/models/detector/nubench.py b/src/graphnet/models/detector/nubench.py index 64844a230..18253aced 100644 --- a/src/graphnet/models/detector/nubench.py +++ b/src/graphnet/models/detector/nubench.py @@ -38,7 +38,8 @@ def _t(self, x: torch.tensor) -> torch.tensor: return x / 10e5 def _charge(self, x: torch.tensor) -> torch.tensor: - return torch.log10(1 + x) + # catch negative charges arising from input perturbation/noise + return torch.log10(1 + torch.clamp(x, min=0.0)) class FlowerS(NuBenchDetector): From c9012c57432d5cd3d3bc0843dfada73772749183 Mon Sep 17 00:00:00 2001 From: Severin Magel Date: Sun, 21 Jun 2026 14:04:34 -0400 Subject: [PATCH 2/2] Floor charge at 1e-2 before log10 instead of adding +1 Keeps the native log10(x) / log10(1+x) transforms intact for all valid charges and only floors non-positive charge (from input perturbation or inactive-sensor padding) to log10(1e-2), avoiding nan/-inf. Addresses the review on #899 and the add_inactive_sensors -inf reported in #903. Co-Authored-By: Claude Opus 4.8 --- src/graphnet/models/detector/icecube.py | 4 ++-- src/graphnet/models/detector/nubench.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/graphnet/models/detector/icecube.py b/src/graphnet/models/detector/icecube.py index 57870421e..406e56f3a 100644 --- a/src/graphnet/models/detector/icecube.py +++ b/src/graphnet/models/detector/icecube.py @@ -39,8 +39,8 @@ def _dom_time(self, x: torch.tensor) -> torch.tensor: return (x - 1.0e04) / 3.0e4 def _charge(self, x: torch.tensor) -> torch.tensor: - # catch negative charges arising from input perturbation/noise - return torch.log10(1 + torch.clamp(x, min=0.0)) + # floor charge at 1e-2; perturbation/noise can make it non-positive + return torch.log10(torch.clamp(x, min=1e-2)) def _rde(self, x: torch.tensor) -> torch.tensor: return (x - 1.25) / 0.25 diff --git a/src/graphnet/models/detector/nubench.py b/src/graphnet/models/detector/nubench.py index 18253aced..d684fb31c 100644 --- a/src/graphnet/models/detector/nubench.py +++ b/src/graphnet/models/detector/nubench.py @@ -38,8 +38,8 @@ def _t(self, x: torch.tensor) -> torch.tensor: return x / 10e5 def _charge(self, x: torch.tensor) -> torch.tensor: - # catch negative charges arising from input perturbation/noise - return torch.log10(1 + torch.clamp(x, min=0.0)) + # floor charge at 1e-2; perturbation/noise can make it non-positive + return torch.log10(1 + torch.clamp(x, min=1e-2)) class FlowerS(NuBenchDetector):