diff --git a/src/PointProcessDecoder.Core/Likelihood/ClusterlessLikelihood.cs b/src/PointProcessDecoder.Core/Likelihood/ClusterlessLikelihood.cs index 2a561b1..d27f525 100644 --- a/src/PointProcessDecoder.Core/Likelihood/ClusterlessLikelihood.cs +++ b/src/PointProcessDecoder.Core/Likelihood/ClusterlessLikelihood.cs @@ -52,10 +52,13 @@ IEnumerable intensities .unsqueeze(1) .exp(); } - + likelihood = likelihood - .sum(dim: 0) - .exp(); + .sum(dim: 0); + + likelihood -= likelihood.max(dim: -1, keepdim: true).values; + + likelihood = likelihood.exp(); likelihood /= likelihood .sum(dim: -1, keepdim: true); diff --git a/src/PointProcessDecoder.Core/Likelihood/PoissonLikelihood.cs b/src/PointProcessDecoder.Core/Likelihood/PoissonLikelihood.cs index 71f535b..264e943 100644 --- a/src/PointProcessDecoder.Core/Likelihood/PoissonLikelihood.cs +++ b/src/PointProcessDecoder.Core/Likelihood/PoissonLikelihood.cs @@ -50,11 +50,16 @@ IEnumerable intensities * intensity; if (!_ignoreNoSpikes) { - likelihood -= intensity.exp(); + likelihood -= intensity + .exp(); } likelihood = likelihood - .sum(dim: 1) + .sum(dim: 1); + + likelihood -= likelihood.max(dim: -1, keepdim: true).values; + + likelihood = likelihood .exp(); likelihood /= likelihood