def plot_tail(fp, **kw): ret = kw.pop('ret', 'subplots') (h0, b0), (h1, b1) = events.get_photon_hist(fp, **kw) fig, (ax0, ax1) = plt.subplots(2,1, figsize=(12,8)) _plot_photon_hist(ax0, h0, b0) _plot_photon_hist(ax1, h1, b1) ax0.set_xlim(settings.CH0_START-5, settings.CH0_START + 100) ax1.set_xlim(settings.CH1_START-5, settings.CH1_START + 100) ax0.set_title('tail channel 0') ax1.set_title('tail channel 1') fitres0, fitres1 = events.fit_tail(fp) ax0.plot(fitres0['fit_x'], fitres0['fit_y'], lw=2) ax1.plot(fitres1['fit_x'], fitres1['fit_y'], lw=2) ax0.text(settings.CH0_START, 1, fitres0['info'], va='bottom', ha='left', color='k', size='x-small', bbox = {'facecolor' : 'white', 'alpha' : 0.5}) ax1.text(settings.CH1_START, 1, fitres1['info'], va='bottom', ha='left', color='k', size='x-small', bbox = {'facecolor' : 'white', 'alpha' : 0.5}) starts = stats.get_sequence_starts(fp) ax0.text(settings.CH0_START+5, max(h0)/5., 'tailcounts / shot: {:.2e} ({} x {} starts)'.format(fitres0['tcpsh'], starts, settings.SEQREPS)) ax1.text(settings.CH1_START+5, max(h1)/5., 'tailcounts / shot: {:.2e} ({} x {} starts)'.format(fitres1['tcpsh'], starts, settings.SEQREPS)) fig.suptitle(files.get_msmt_header(fp) + ' -- Tail') if ret=='subplots': return fig, (ax0, ax1)
def plot_tail(fp, **kw): ret = kw.pop('ret', 'subplots') (h0, b0), (h1, b1) = events.get_photon_hist(fp, **kw) fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(12, 8)) _plot_photon_hist(ax0, h0, b0) _plot_photon_hist(ax1, h1, b1) ax0.set_xlim(settings.CH0_START - 5, settings.CH0_START + 100) ax1.set_xlim(settings.CH1_START - 5, settings.CH1_START + 100) ax0.set_title('tail channel 0') ax1.set_title('tail channel 1') fitres0, fitres1 = events.fit_tail(fp) ax0.plot(fitres0['fit_x'], fitres0['fit_y'], lw=2) ax1.plot(fitres1['fit_x'], fitres1['fit_y'], lw=2) ax0.text(settings.CH0_START, 1, fitres0['info'], va='bottom', ha='left', color='k', size='x-small', bbox={ 'facecolor': 'white', 'alpha': 0.5 }) ax1.text(settings.CH1_START, 1, fitres1['info'], va='bottom', ha='left', color='k', size='x-small', bbox={ 'facecolor': 'white', 'alpha': 0.5 }) starts = stats.get_sequence_starts(fp) ax0.text( settings.CH0_START + 5, max(h0) / 5., 'tailcounts / shot: {:.2e} ({} x {} starts)'.format( fitres0['tcpsh'], starts, settings.SEQREPS)) ax1.text( settings.CH1_START + 5, max(h1) / 5., 'tailcounts / shot: {:.2e} ({} x {} starts)'.format( fitres1['tcpsh'], starts, settings.SEQREPS)) fig.suptitle(files.get_msmt_header(fp) + ' -- Tail') if ret == 'subplots': return fig, (ax0, ax1)
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