def get_charge_profile(self, conformation='AVR', grid=[0., 14., .1]): """Get charge profile for conformation as function of pH. Args: conformation: conformation to test grid: grid of pH values [min, max, step] Returns: list of charge state values """ charge_profile = [] for ph in make_grid(*grid): conf = self.conformations[conformation] q_unfolded, q_folded = conf.calculate_charge( self.version.parameters, ph=ph) charge_profile.append([ph, q_unfolded, q_folded]) return charge_profile
def get_folding_profile(self, conformation='AVR', reference="neutral", grid=[0., 14., 0.1]): """Get a folding profile. Args: conformation: conformation to select reference: reference state direction: folding direction (folding) grid: the grid of pH values [min, max, step_size] options: options object Returns: TODO - figure out what these are 1. profile 2. opt 3. range_80pct 4. stability_range """ # calculate stability profile profile = [] for ph in make_grid(*grid): conf = self.conformations[conformation] ddg = conf.calculate_folding_energy(ph=ph, reference=reference) profile.append([ph, ddg]) # find optimum opt = [None, 1e6] for point in profile: opt = min(opt, point, key=lambda v: v[1]) # find values within 80 % of optimum range_80pct = [None, None] values_within_80pct = [p[0] for p in profile if p[1] < 0.8 * opt[1]] if len(values_within_80pct) > 0: range_80pct = [min(values_within_80pct), max(values_within_80pct)] # find stability range stability_range = [None, None] stable_values = [p[0] for p in profile if p[1] < 0.0] if len(stable_values) > 0: stability_range = [min(stable_values), max(stable_values)] return profile, opt, range_80pct, stability_range