def update_plot_signal_noise(self, temp_norm_hist, decay_params, decay_cov, current_time): decay_error = np.sqrt(np.diag(decay_cov)) signal_amp = decay_params[0] signal_std = decay_error[0] self.signal_std_arr = np.append(self.signal_std_arr, signal_std) # time time_arr = np.append(self.plot_signal_amp.getData()[0], current_time) # signal amplitude self.plot_signal_amp.setData( time_arr, np.append(self.plot_signal_amp.getData()[1], signal_amp)) # confidence bands upper = pg.PlotDataItem( self.plot_signal_amp.getData()[0], self.plot_signal_amp.getData()[1] + 2 * self.signal_std_arr) lower = pg.PlotDataItem( self.plot_signal_amp.getData()[0], self.plot_signal_amp.getData()[1] - 2 * self.signal_std_arr) self.plot_signal_err.setCurves(upper, lower) # last signal amplitude self.plot_signal_line.setValue(signal_amp) # noise amplitude self.plot_noise_amp.setData( time_arr, np.append(self.plot_noise_amp.getData()[1], self.noise_std)) # restrict y range to the maximum amplitude self.ax_signal_noise.setLimits( yMax=np.max(self.plot_signal_amp.getData()[1]) * 1.1) # noise fit to t^(-1/2) if len(time_arr) > 3: noise_data = self.plot_noise_amp.getData()[1] noise_A, noise_A_err = get_noise_fit(noise_data, time_arr) # extrapolate to the time at which the noise amplitude is equal to the max signal (t_1=(A/max_signal)**2) # if there are no data points before init_time = min((noise_A / signal_amp)**2, time_arr[0]) interpolated_meas_time = np.linspace(init_time, time_arr[-1], len(time_arr) * 100) fit_noise_amplitude = noise_amp_fun(interpolated_meas_time, noise_A) # update noise fit self.plot_noise_fit.setData(interpolated_meas_time, fit_noise_amplitude) if self.noise_std < signal_amp: self.ax_signal_noise.setTitle( 'Correlation signal and noise (T={:.0f} s)'.format( (noise_A / signal_amp)**2)) else: self.ax_signal_noise.setTitle('Correlation signal and noise')
def update_plot_signal_noise(self, temp_norm_hist, decay_params, decay_cov, current_time): decay_error = np.sqrt(np.diag(decay_cov)) signal_amp = decay_params[0] signal_std = decay_error[0] self.signal_std_arr = np.append(self.signal_std_arr, signal_std) # time time_arr = np.append(self.plot_signal_amp.get_xdata(), current_time) # signal amplitude self.plot_signal_amp.set_ydata(np.append(self.plot_signal_amp.get_ydata(), signal_amp)) self.plot_signal_amp.set_xdata(time_arr) # confidence bands self.plot_signal_err.remove() self.plot_signal_err = self.ax_signal_noise.fill_between(self.plot_signal_amp.get_xdata(), y1=self.plot_signal_amp.get_ydata()+2*self.signal_std_arr, y2=(self.plot_signal_amp.get_ydata()-2*self.signal_std_arr).clip(min=0), color=FIT_ERROR_COLOR) # last signal amplitude self.plot_signal_line.set_ydata(signal_amp) # noise amplitude self.plot_noise_amp.set_ydata(np.append(self.plot_noise_amp.get_ydata(), self.noise_std)) self.plot_noise_amp.set_xdata(time_arr) # noise fit to t^(-1/2) if len(time_arr) > 3: noise_data = self.plot_noise_amp.get_ydata() noise_A, noise_A_err = get_noise_fit(noise_data, time_arr) # extrapolate to the time at which the noise amplitude is equal to the max signal (t_1=(A/max_signal)**2) # if there are no data points before # max_signal = np.max(noise_data) # init_time = min((noise_A/max_signal)**2, time_arr[0]) interpolated_meas_time = np.linspace(time_arr[0], time_arr[-1], len(time_arr)*100) fit_noise_amplitude = np.interp(interpolated_meas_time, time_arr, noise_amp_fun(time_arr, noise_A)) # update noise fit # self.plot_noise_fit.set_ydata(noise_amp_fun(time_arr, noise_A)) self.plot_noise_fit.set_ydata(fit_noise_amplitude) self.plot_noise_fit.set_xdata(interpolated_meas_time) if self.noise_std < signal_amp: self.ax_signal_noise.set_title('Correlation signal and noise (T={:.0f} s)'.format((noise_A/signal_amp)**2)) else: self.ax_signal_noise.set_title('Correlation signal and noise') self.ax_signal_noise.relim() self.ax_signal_noise.autoscale()
fit_function_name=fit_function_name, expected_tau=expected_tau) decay_error = np.sqrt(np.diag(decay_cov)) signal_amplitude = decay_params[0] signal_amplitude_std = decay_error[0] signal_decay_tau = decay_params[1] signal_decay_std = decay_error[1] if len(decay_params) > 2: signal_time_offset = decay_params[2] signal_time_offset_std = decay_error[2] signal_noise_amplitudes = np.array(amplitudes) experimental_time = signal_noise_amplitudes[:, 0] noise_amplitudes = signal_noise_amplitudes[:, 4] noise_A, noise_A_err = get_noise_fit(noise_amplitudes, experimental_time) if noise_amplitudes[-1] < signal_amplitude: crossing_time = (noise_A / signal_amplitude)**2 crossing_time_std = crossing_time * np.sqrt( (signal_amplitude_std / signal_amplitude)**2 + (noise_A_err / noise_A)**2) else: crossing_time = crossing_time_std = 0.0 # experimental time in the header, it should be the same as total_time exp_time = header['TTResult_StopAfter'] * 1e-3 # in s # log some info to file logger.info("Counts on SYNC: {}.".format(synccnt)) logger.info("Counts on INPUT: {}.".format(inputcnt)) logger.info("Average counts on SYNC: {:.0f} cps.".format(synccnt /