Coverage for src/km3modules/fit.py: 20%
20 statements
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-08 03:14 +0000
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-08 03:14 +0000
1# Filename: fit.py
2# -*- coding: utf-8 -*-
3# pylint: disable=locally-disabled
4"""
5A collection of fit functions and modules.
7"""
8import numpy as np
9import km3pipe.extras
12def fit_delta_ts(data, time_s):
13 """Fits gaussians to delta t for each PMT pair.
15 Parameters
16 ----------
17 data: 2d np.array: x = PMT combinations (465), y = time, entry = frequency
18 time_s: length of data taking in seconds
20 Returns
21 -------
22 numpy arrays with rates and means for all PMT combinations
23 """
24 scipy = km3pipe.extras.scipy()
25 from scipy import optimize
27 data = data / time_s
29 xs = np.arange(-20, 21)
31 def gaussian(x, mean, sigma, rate, offset):
32 return (
33 rate / np.sqrt(2 * np.pi) / sigma * np.exp(-((x - mean) ** 2) / sigma**2)
34 + offset
35 )
37 rates = []
38 means = []
39 for combination in data:
40 try:
41 popt, _ = optimize.curve_fit(gaussian, xs, combination, p0=[0, 2, 1000, 20])
42 except RuntimeError:
43 popt = (0, 0, 0, 0)
44 rates.append(popt[2])
45 means.append(popt[0])
46 return np.array(rates), np.array(means)