From 198bb31a2c1edee0ed87991b95bf398fcccfce20 Mon Sep 17 00:00:00 2001 From: Jack Christopher Hutchinson Rolph <jack.rolph@desy.de> Date: Tue, 17 May 2022 17:07:54 +0200 Subject: [PATCH] Created function to return total afterpulse probability. This may now be returned as a fit result. --- Model.py | 21 +++++++++++++++++++++ PeakOTron.py | 18 +++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/Model.py b/Model.py index a6b703f..ef43e9c 100644 --- a/Model.py +++ b/Model.py @@ -133,6 +133,27 @@ def PH_max(t_gate, tau): def Alpha(tau_R, tau_Ap, t_gate, p_Ap): return (p_Ap/(tau_Ap + tau_R))*(tau_Ap - np.exp(-t_gate/tau_Ap)*(tau_Ap + tau_R*(1 - np.exp(-t_gate/tau_R)))) + +######################################################################################################## +## dAlpha(tau_R, tau_Ap, t_gate, p_Ap) +######################################################################################################## +## +## Returns error on total afterpulse probability, α, occuring between 0 and t_gate. +## +######################################################################################################## + + +@njit +def dAlpha(tau_R, tau_Ap, t_gate, p_Ap, dtau_Ap, dp_Ap): + dalphadtauAp = p_Ap*((t_gate*(-tau_Ap - tau_R*(1 - np.exp(-t_gate/tau_R)))*np.exp(-t_gate/tau_Ap))/tau_Ap**2 + 1 - np.exp(-t_gate/tau_Ap))/(tau_Ap+tau_R) - p_Ap*(tau_Ap - (tau_Ap + tau_R*(1 - exp(-t_gate/tau_R)))*np.exp(-t_gate/tau_Ap))/(tau_Ap + tau_R)**2 + + dalphadpAp = (tau_Ap - (tau_Ap + tau_R*(1 - np.exp(-t_gate/tau_R)))*np.exp(-t_gate/tau_Ap))/(tau_Ap + tau_R) + + dalpha = np.sqrt((dalphadtauAp**2)*(dtau_Ap**2) + (dalphadpAp**2)*(dp_Ap**2)) + + return dalpha + + ######################################################################################################## ## DiracDelta(length, idx_0, dx) ######################################################################################################## diff --git a/PeakOTron.py b/PeakOTron.py index 3678387..2d520c0 100644 --- a/PeakOTron.py +++ b/PeakOTron.py @@ -2,7 +2,7 @@ from Bootstrapping import BootstrapKDE, Bootstrap from HelperFunctions import GP_gain, GP_lbda, GP_muGP, GetStats from HelperFunctions import LatexFormat, Linear, SelectRangeNumba from LossFunctions import * -from Model import DRM +from Model import DRM, Alpha, dAlpha from iminuit import Minuit from scipy.signal import find_peaks, peak_widths from scipy.integrate import cumtrapz, quad @@ -16,6 +16,7 @@ import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from matplotlib.ticker import MaxNLocator, ScalarFormatter from itertools import chain +from copy import deepcopy import warnings warnings.filterwarnings('ignore') @@ -232,12 +233,23 @@ class PeakOTron: ## ######################################################################################################## - def GetFitResults(self): + def GetFitResults(self, return_alpha=False): if(self._m_DRM is None): raise Exception ("Fit has not yet been performed. Please first perform a fit.") else: - return self._fit_values, self._fit_errors + if(return_alpha): + temp_values = deepcopy(self._fit_values) + temp_errors = deepcopy(self._fit_errors) + + temp_values["alpha"] = Alpha(self._fit_values["tau_R"], self._fit_values["tau_Ap"], self._fit_values["t_gate"], self._fit_values["pAp"]) + temp_errors["alpha"] = dAlpha(self._fit_values["tau_R"], self._fit_values["tau_Ap"], self._fit_values["t_gate"], self._fit_values["pAp"], self._fit_errors["tau_Ap"], self._fit_errors["p_Ap"]) + + return temp_values, temp_errors + + else: + return self._fit_values, self._fit_errors + ######################################################################################################## -- GitLab