diff --git a/PeakOTron.py b/PeakOTron.py index 0731dcd172bc79be238616b3a7137fa7d3f692b1..04cc17e1e29d79775213c3a78d586388134cd62e 100644 --- a/PeakOTron.py +++ b/PeakOTron.py @@ -60,11 +60,13 @@ class BandWidthOptimiser: try: x_kde, y_kde = FFTKDE(kernel = self.kernel, bw=bw).fit(self.data).evaluate(self.n_kde_samples) - loss = np.log((self.N-1)*bw) - np.sum(np.log(y_kde)) + loss = np.log((self.N-1)*bw) - np.sum(np.log(y_kde)) - return loss except: - return np.nan + + loss = np.log((self.N-1)*bw) + self.eps_inv + + return loss def _PPF(self, data): """ Compute ECDF """ @@ -89,6 +91,7 @@ class BandWidthOptimiser: self.last_arg = None self.func_code = FakeFuncCode(self._Dummy, dock=True) self.eps = np.finfo(np.float64).eps * 10 + self.eps_inv = 1/self.eps def __call__(self, *arg): @@ -493,14 +496,9 @@ class PeakOTron: minuit_kde.migrad(ncall= self._n_call_minuit, iterate =self._n_iterations_minuit) - if(minuit_kde.valid): - bw = minuit_kde.values["bw"] - if(self._verbose): - print("KDE Bandwidth optimised to: {0}".format(bw)) - else: - if(self._verbose): - print("KDE Bandwidth optimisation failed. Defaulting to Improved Sheather Jones.") - bw = "ISJ" + bw = minuit_kde.values["bw"] + if(self._verbose): + print("KDE Bandwidth optimised to: {0}".format(bw)) except: if(self._verbose): print("KDE Bandwidth optimisation failed. Defaulting to Improved Sheather Jones.")