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
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()
def calc_energy_from_row(row): spacer = sgrna_sensor.spacer(row.spacer).seq insert = inserts[row.design] return calc_energy(spacer, insert) if args['<spacer>'] and args['<design>']: spacer = sgrna_sensor.spacer(args['<spacer>'], species=args['--species']).rna insert = inserts[args['<design>']] print(f"Spacer: {spacer}") print(f"Insert: {insert}") print(f"ΔG: {calc_energy(spacer, insert)}") else: df = densiometry.load_cleavage_data_from_xlsx_dir('densiometry') df = densiometry.calc_mean_change(df) # Drop all the controls df = df[df.design.isin(inserts.keys())] # Calculate the minimum free energy (MFE) for binding between the spacer # and the aptamer insert. df['binding_energy'] = df.apply(calc_energy_from_row, axis='columns') def plot_design(design, label, color): # i = df.design == design x = 100 * abs( df[i].max_change if args['--max-change'] else df[i].mean_change) y = df[i].binding_energy m, b, R, p, err = linregress(x, y)