Esempio n. 1
0
    def _plot_data(self):
        df = densiometry.calc_mean_change(self.df)
        df = densiometry.sort_by_activity(df, self.select_designs)

        if self.designs:
            designs = self.designs
        elif self.show_all_designs:
            designs = self.all_designs
        else:
            designs = self.select_designs

        data = np.vstack(
            [df[df.design == x].mean_change.values for x in designs])

        spacers = df['spacer'].unique()
        num_spacers = len(spacers)
        spacers_per_row = int(np.ceil(num_spacers / self.rows))

        for i in range(self.rows):
            j0 = spacers_per_row * (i + 0)
            j1 = spacers_per_row * (i + 1)

            self.ax[i].pcolor(data[:, j0:j1], cmap=self.cmap, norm=self.norm)
            self.ax[i].set_yticks(0.5 + np.arange(len(self.designs)))
            self.ax[i].set_yticklabels(self.designs)
            self.ax[i].set_xticks(0.5 + np.arange(spacers_per_row))
            self.ax[i].set_xticklabels(
                spacers[j0:j1] if self.label_spacers else [])
            self.ax[i].axis('image')
Esempio n. 2
0
    def _plot_data(self):
        # For dot plots:
        dots = densiometry.calc_percent_change(self.df)

        # For bar plots:
        bars = densiometry.calc_mean_change(self.df)
        bars = densiometry.sort_by_activity(bars, self.designs)

        for i, design in enumerate(self.designs):
            x_from_spacer = {}
            success_count = 0

            for x, row in bars[bars.design == design].reset_index().iterrows():
                x_from_spacer[row.spacer] = x
                success_count += self._plot_bar(
                    self.axes[i],
                    x,
                    row.mean_change,
                    None,  # Don't plot error bars, since we're plotting every point.
                    self.colors[design],
                )

            dots_i = dots.xs(design, level='design')
            for spacer, group in dots_i.groupby(['spacer']):
                self._plot_dots(
                    self.axes[i],
                    x_from_spacer[spacer],
                    group.percent_change.values,
                    self.dot_colors[design],
                )

            # If a figure size was given, also try to take some steps to ensure
            # a more regular/representative size.  In particular, use shorter
            # labels and don't label redundant axes.

            y_max = self.y_max[design]
            self.axes[i].set_ylabel(
                'Δ cleavage (%)' if not self.fig_size else 'Δ (%)')
            self.axes[i].set_ylim((0, y_max))
            self.axes[i].set_yticks([0, y_max // 2, y_max])

            self.axes[i].set_xlabel('spacer' if i == 1 else '')
            self.axes[i].set_xlim((-3, x + 1))
            self.axes[i].set_xticks(range(-2, x + 1))
            self.axes[i].set_xticklabels(['on', 'off'] +
                                         [str(x) for x in range(1, x + 2)],
                                         rotation='vertical')
            self.axes[i].axhline(
                self.success_cutoff,
                color=ucsf.light_grey[0],
                linestyle='--',
            )

            print(f'{design}: {success_count}/{x+1}')
Esempio n. 3
0
def load_rational_designs():
    df = densiometry.load_cleavage_data_from_xlsx_dir('densiometry')
    df = densiometry.calc_mean_change(df)

    df = df.apply(name_to_strategy, axis='columns')
    df['strategy'] = pd.Categorical(df.strategy, [e.value for e in Strategy])
    df['domain'] = pd.Categorical(df.domain, [e.value for e in Domain])
    df['active'] = abs(df.mean_change) > 0.15
    df['sequence'] = df.apply(name_to_sequence, axis='columns')
    #df['aligned_sequence'] = align_sequences(df.sequence)

    df = discard_modified_aptamers(df)
    df = get_pretty_sequences(df)

    priority = [
        'align_group', 'strategy', 'algorithm', 'domain', 'earliest_date',
        'earliest_order'
    ]
    df = df.sort_values(priority).reset_index(drop=True)
    df['id'] = df.index.values + 1

    return df
Esempio n. 4
0
def get_construct(x):
    names = {
        'on': 'pos',
        'off': 'neg',
        'mhf 30': r'\ligrnaF{}',
        'rxb 11,1': r'\ligrnaB{}',
    }
    return names[x]


args = docopt.docopt(__doc__)

# Parse the densiometry data.
df = densiometry.load_cleavage_data_from_xlsx_dir(DATA_DIR)
df = densiometry.calc_mean_change(df)

# Add NaNs for the experiments that didn't work.
df = df.append({'spacer': 'd9', 'design': 'on'}, ignore_index=True)

# Add a column for the names I want to display.
df = df[df.design.isin(DESIGN_ORDER)]
df['construct'] = df.design.apply(get_construct)

# Put the rows in the order I want to display them in.
spacer_order = densiometry.sort_spacers_by_activity(df, ['mhf 30', 'rxb 11,1'])
df['spacer'] = pd.Categorical(df.spacer, spacer_order)
df['design'] = pd.Categorical(df.design, DESIGN_ORDER)
df = df.sort_values(['spacer', 'design']).reset_index()

n = len(df) // 2