def plot_fit1d(res, fit_xvals=None,fit_num_points=100,ax=None, ret=None, **kw): ''' function to plot a fitresult as returned by analysis.lib.fitting.fit.fit1d(). ''' # know keywords: print_info = kw.pop('print_info', True) info_xy = kw.pop('info_xy', 'auto') plot_data = kw.pop('plot_data', True) if res == None: return False if ax == None: fig = plt.figure() ax = fig.add_subplot(111) if plot_data: if 'yerr' in res.keys(): ax.errorbar(res['x'],res['y'],fmt='o',yerr=res['yerr']) else: ax.plot(res['x'], res['y'], 'o') if fit_xvals == None: fit_xvals=np.linspace(res['x'][0],res['x'][-1],fit_num_points) ax.plot(fit_xvals, res['fitfunc'](fit_xvals), '-', lw=2) if print_info: params_str = res['fitfunc_str'] + '\n' + fit.str_fit_params(res) if info_xy == 'auto': info_x = ax.get_xlim()[0] + (ax.get_xlim()[-1]-ax.get_xlim()[0])*0.02 info_y = ax.get_ylim()[0] + (ax.get_ylim()[-1]-ax.get_ylim()[0])*0.02 else: info_x = info_xy[0] info_y = info_xy[1] ax.text(info_x, info_y, params_str, size='x-small', color='k', ha='left', va='bottom', bbox=dict(facecolor='white', alpha=0.5)) if ret == None: return if ret == 'ax': return ax return
def fit_tail(fp, **kw): (h0, b0), (h1, b1) = get_photon_hist(fp, **kw) _x0 = (b0[:-1] + b0[1:]) / 2. _x1 = (b1[:-1] + b1[1:]) / 2. binwidth = _x0[1] - _x0[0] tail0 = (_x0 >= settings.CH0_START) & ( _x0 <= settings.CH0_START + settings.FIT_TAIL_LENGTH) tail1 = (_x1 >= settings.CH1_START) & ( _x1 <= settings.CH1_START + settings.FIT_TAIL_LENGTH) x0, y0 = _x0[tail0], h0[tail0] x1, y1 = _x1[tail1], h1[tail1] fitres0 = _fit_tail(y0, x0) fitres1 = _fit_tail(y1, x1) starts = stats.get_sequence_starts(fp) * settings.SEQREPS tcpsh0 = fitres0['params_dict']['A'] * fitres0['params_dict'][ 'T'] / binwidth / starts tcpsh1 = fitres1['params_dict']['A'] * fitres1['params_dict'][ 'T'] / binwidth / starts _x0 = np.linspace(x0[0], x0[-1], 201) ret0 = { 'params': fitres0['params_dict'], 'errors': fitres0['error_dict'], 'data_x': x0, 'data_y': y0, 'fit_x': _x0, 'fit_y': fitres0['fitfunc'](_x0 - _x0[0]), 'info': fitres0['fitfunc_str'] + '\n' + fit.str_fit_params(fitres0), 'tcpsh': tcpsh0, } _x1 = np.linspace(x1[0], x1[-1], 201) ret1 = { 'params': fitres1['params_dict'], 'errors': fitres1['error_dict'], 'data_x': x1, 'data_y': y1, 'fit_x': _x1, 'fit_y': fitres1['fitfunc'](_x1 - _x1[0]), 'info': fitres1['fitfunc_str'] + '\n' + fit.str_fit_params(fitres1), 'tcpsh': tcpsh1, } keys0 = [] params0 = np.empty((0, 2)) for k in ret0['params']: keys0.append(k) params0 = np.vstack( (params0, np.array([ret0['params'][k], ret0['errors'][k]]))) files.set_analysis_data(fp, 'ch0_fitparams', params0, subgroup='tail', info=ret0['info'], columns=('fitvalue', 'error'), rows=keys0) files.set_analysis_data(fp, 'ch0_fit_data', np.vstack( (ret0['data_x'], ret0['data_y'])).transpose(), subgroup='tail', columns=('time bin center (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch0_fit_curve', np.vstack( (ret0['fit_x'], ret0['fit_y'])).transpose(), subgroup='tail', columns=('time (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch0_tcpsh', ret0['tcpsh'], subgroup='tail', starts=starts) keys1 = [] params1 = np.empty((0, 2)) for k in ret1['params']: keys1.append(k) params1 = np.vstack( (params1, np.array([ret1['params'][k], ret1['errors'][k]]))) files.set_analysis_data(fp, 'ch1_fitparams', params1, subgroup='tail', info=ret1['info'], columns=('fitvalue', 'error'), rows=keys1) files.set_analysis_data(fp, 'ch1_fit_data', np.vstack( (ret1['data_x'], ret1['data_y'])).transpose(), subgroup='tail', columns=('time bin center (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch1_fit_curve', np.vstack( (ret1['fit_x'], ret1['fit_y'])).transpose(), subgroup='tail', columns=('time (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch1_tcpsh', ret1['tcpsh'], subgroup='tail', starts=starts) return ret0, ret1
def fit_tail(fp, **kw): (h0, b0), (h1, b1) = get_photon_hist(fp, **kw) _x0 = (b0[:-1]+b0[1:])/2. _x1 = (b1[:-1]+b1[1:])/2. binwidth = _x0[1] - _x0[0] tail0 = (_x0 >= settings.CH0_START) & (_x0 <= settings.CH0_START + settings.FIT_TAIL_LENGTH) tail1 = (_x1 >= settings.CH1_START) & (_x1 <= settings.CH1_START + settings.FIT_TAIL_LENGTH) x0, y0 = _x0[tail0], h0[tail0] x1, y1 = _x1[tail1], h1[tail1] fitres0 = _fit_tail(y0, x0) fitres1 = _fit_tail(y1, x1) starts = stats.get_sequence_starts(fp) * settings.SEQREPS tcpsh0 = fitres0['params_dict']['A'] * fitres0['params_dict']['T'] / binwidth / starts tcpsh1 = fitres1['params_dict']['A'] * fitres1['params_dict']['T'] / binwidth / starts _x0 = np.linspace(x0[0], x0[-1], 201) ret0 = { 'params' : fitres0['params_dict'], 'errors' : fitres0['error_dict'], 'data_x' : x0, 'data_y' : y0, 'fit_x' : _x0, 'fit_y' : fitres0['fitfunc'](_x0-_x0[0]), 'info' : fitres0['fitfunc_str'] + '\n' + fit.str_fit_params(fitres0), 'tcpsh' : tcpsh0, } _x1 = np.linspace(x1[0], x1[-1], 201) ret1 = { 'params' : fitres1['params_dict'], 'errors' : fitres1['error_dict'], 'data_x' : x1, 'data_y' : y1, 'fit_x' : _x1, 'fit_y' : fitres1['fitfunc'](_x1-_x1[0]), 'info' : fitres1['fitfunc_str'] + '\n' + fit.str_fit_params(fitres1), 'tcpsh' : tcpsh1, } keys0 = [] params0 = np.empty((0,2)) for k in ret0['params']: keys0.append(k) params0 = np.vstack((params0, np.array([ret0['params'][k], ret0['errors'][k]]))) files.set_analysis_data(fp, 'ch0_fitparams', params0, subgroup='tail', info=ret0['info'], columns=('fitvalue', 'error'), rows=keys0) files.set_analysis_data(fp, 'ch0_fit_data', np.vstack((ret0['data_x'], ret0['data_y'])).transpose(), subgroup='tail', columns=('time bin center (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch0_fit_curve', np.vstack((ret0['fit_x'], ret0['fit_y'])).transpose(), subgroup='tail', columns=('time (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch0_tcpsh', ret0['tcpsh'], subgroup='tail', starts = starts) keys1 = [] params1 = np.empty((0,2)) for k in ret1['params']: keys1.append(k) params1 = np.vstack((params1, np.array([ret1['params'][k], ret1['errors'][k]]))) files.set_analysis_data(fp, 'ch1_fitparams', params1, subgroup='tail', info=ret1['info'], columns=('fitvalue', 'error'), rows=keys1) files.set_analysis_data(fp, 'ch1_fit_data', np.vstack((ret1['data_x'], ret1['data_y'])).transpose(), subgroup='tail', columns=('time bin center (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch1_fit_curve', np.vstack((ret1['fit_x'], ret1['fit_y'])).transpose(), subgroup='tail', columns=('time (ns)', 'counts per bin')) files.set_analysis_data(fp, 'ch1_tcpsh', ret1['tcpsh'], subgroup='tail', starts = starts) return ret0, ret1