def frap_pb_correction(pointer_pd: pd.DataFrame, ctrl_pd: pd.DataFrame): """ Photobleaching correction for FRAP :param pointer_pd: pd.DataFrame, dataframe of all the bleach spots :param ctrl_pd: pd.DataFrame, dataframe of control spots :return: """ # calculate photobleaching factor pb_factor = ana.get_pb_factor(ctrl_pd['bg_cor_int']) pointer_pd['pb_factor'] = [pb_factor] * len(pointer_pd) # pb_factor fitting with single exponential decay pb_fit = mat.fitting_single_exp_decay(np.arange(0, len(pb_factor), 1), pb_factor) pointer_pd = dat.add_columns(pointer_pd, [ 'pb_single_exp_decay_fit', 'pb_single_exp_decay_r2', 'pb_single_exp_decay_a', 'pb_single_exp_decay_b', 'pb_single_exp_decay_c' ], [[pb_fit[0]] * len(pointer_pd), [pb_fit[1]] * len(pointer_pd), [pb_fit[2]] * len(pointer_pd), [pb_fit[3]] * len(pointer_pd), [pb_fit[4]] * len(pointer_pd)]) # photobleaching correction if np.isnan(pb_fit[2]): pb = pb_factor else: pb = pb_fit[0] pointer_pd['mean_int'] = ana.pb_correction(pointer_pd['bg_cor_int'], pb) return pointer_pd
# link ctrl spots with corresponding organelle ctrl_pd['%s' % analyze_organelle] = obj.points_in_objects( label_organelle, ctrl_pd['x'], ctrl_pd['y']) print("### Image analysis: background correction ...") # background intensity measurement bg_int_tseries = ana.get_bg_int(pixels_tseries) pointer_pd['bg_int'] = [bg_int_tseries] * len(pointer_pd) # background intensity fitting bg_fit = mat.fitting_linear(np.arange(0, len(bg_int_tseries), 1), bg_int_tseries) pointer_pd = dat.add_columns( pointer_pd, ['bg_linear_fit', 'bg_linear_r2', 'bg_linear_a', 'bg_linear_b'], [[bg_fit[0]] * len(pointer_pd), [bg_fit[1]] * len(pointer_pd), [bg_fit[2]] * len(pointer_pd), [bg_fit[3]] * len(pointer_pd)]) # background correction # use original measurement if fitting does not exist if np.isnan(bg_fit[2]): bg = bg_int_tseries else: bg = bg_fit[0] pointer_pd['bg_cor_int'] = ana.bg_correction(pointer_pd['raw_int'], [bg] * len(pointer_pd)) ctrl_pd['bg_cor_int'] = ana.bg_correction(ctrl_pd['raw_int'], [bg] * len(ctrl_pd)) # filter control traces
ctrl_pd = pd.DataFrame({ 'ctrl_spots': np.arange(0, num_ctrl_spots, 1), 'raw_int': ctrl_spots_int_tseries }) print("### Image analysis: background correction ...") # background intensity measurement bg_int_tseries = ana.get_bg_int(pixels_tseries) pointer_pd['bg_int'] = [bg_int_tseries] * len(pointer_pd) # background intensity fitting bg_fit = mat.fitting_linear(np.arange(0, len(bg_int_tseries), 1), bg_int_tseries) pointer_pd = dat.add_columns( pointer_pd, ['bg_linear_fit', 'bg_linear_r2', 'bg_linear_a', 'bg_linear_b'], [[bg_fit[0]] * len(pointer_pd), [bg_fit[1]] * len(pointer_pd), [bg_fit[2]] * len(pointer_pd), [bg_fit[3]] * len(pointer_pd)]) # background correction # use original measurement if fitting does not exist if np.isnan(bg_fit[2]): bg = bg_int_tseries else: bg = bg_fit[0] pointer_pd['bg_cor_int'] = ana.bg_correction(pointer_pd['raw_int'], bg) ctrl_pd['bg_cor_int'] = ana.bg_correction(ctrl_pd['raw_int'], bg) # filter control traces filter_ctrl = [] for i in range(len(ctrl_pd)):