Example #1
0
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
Example #2
0
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
Example #3
0
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