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')
Exemplo n.º 2
0
    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 /