Source code for isambard.specifications.coiledcoil

"""Contains code for modelling coiled coils and collagens."""

from ampal import Assembly
import numpy

from .helix import HelicalHelix, _helix_parameters

basis_set_parameters = {
    2: {'name': 'CC-Di', 'pitch': 225.8, 'radius': 5.07, 'interface_angle': 283.56,
        'sequence': 'EIAALKQEIAALKKENAALKWEIAALKQ'},
    3: {'name': 'CC-Tri', 'pitch': 194.0, 'radius': 6.34, 'interface_angle': 277.12,
        'sequence': 'EIAAIKQEIAAIKKEIAAIKWEIAAIKQ'},
    4: {'name': 'CC-Tet', 'pitch': 213.2, 'radius': 6.81, 'interface_angle': 279.20,
        'sequence': 'ELAAIKQELAAIKKELAAIKWELAAIKQ'},
    5: {'name': 'CC-Pent', 'pitch': 182.8, 'radius': 8.62, 'interface_angle': 271.58,
        'sequence': 'KIEQILQKIEKILQKIEWILQKIEQILQ'},
    6: {'name': 'CC-Hex', 'pitch': 228.4, 'radius': 9.13, 'interface_angle': 273.28,
        'sequence': 'ELKAIAQELKAIAKELKAIAWELKAIAQ'},
    7: {'name': 'CC-Hept', 'pitch': 328.6, 'radius': 9.80, 'interface_angle': 272.24,
        'sequence': 'EIAQALKEIAKALKEIAWALKEIAQALK'},
}


[docs]class CoiledCoil(Assembly): """Models a coiled-coil protein. Notes ----- Instantiating this class using just an oligomeric state is used to create simple reference models. To build more complex models use the `from_parameters` classmethod. Parameters ---------- n : int The oligomeric state of the model to be built. auto_build : bool, optional If `True`, the model will be built as part of instantiation. Attributes ---------- aas : [int] Number of amino acids in each minor helix. basis_set_sequences : [str] Reference sequences for the oligomeric state that has been selected, taken from the basis set of coiled coils. major_radii : [float] Radii of the minor helices relative to the super-helical axis. major_pitches : [float] Pitch values of the minor helices relative to the super-helical axis. phi_c_alphas : Relative rotation values of the minor helices relative to the super-helical axis. minor_helix_types : [str] Helix types of the minor helices. Can be: 'alpha', 'pi', '3-10', 'PPI', 'PP2', 'collagen'. major_handedness : str Handedness of the super helix. orientations : Orientation of helices relative to the super-helical axis. 1 is parallel, -1 is anti-parallel. minor_repeats : [float] Hydrophobic repeats of the minor helices. rotational_offsets : Rotation of the minor helices relative to the super-helical axis. z_shifts : [float] Translation of the minor helices along the super-helical axis. oligomeric_state : int Oligomeric state of the coiled coil. """ def __init__(self, n, auto_build=True): super(CoiledCoil, self).__init__() # parameters for each polypeptide # basis set parameters if known, otherwise educated guesses. if n in basis_set_parameters.keys(): parameters = basis_set_parameters[n] radius = parameters['radius'] else: # calculate radius based on extrapolated straight-line fit # of n Vs radius for basis_set_parameters radius = (n * 0.966) + 3.279 # other default values just copied from largest oligomer # in basis_set_parameters. parameters = basis_set_parameters[max(basis_set_parameters.keys())] self.major_radii = [radius] * n self.major_pitches = [parameters['pitch']] * n self.basis_set_sequences = [parameters['sequence']] * n self.aas = [len(parameters['sequence'])] * n self.phi_c_alphas = [parameters['interface_angle']] * n # alpha-helical barrel with heptad repeat as default. self.major_handedness = ['l'] * n self.minor_helix_types = ['alpha'] * n self.orientations = [1] * n self.minor_repeats = [3.5] * n # parameters for the arrangement of each polypeptide # (evenly distributed, no z-displacement). self.rotational_offsets = [((i * 360.0) / n) for i in range(n)] self.z_shifts = [0.0] * n # parameters for the whole assembly self.oligomeric_state = n if auto_build: self.build()
[docs] @classmethod def from_polymers(cls, polymers): """Creates a `CoiledCoil` from a list of `HelicalHelices`. Parameters ---------- polymers : [HelicalHelix] List of `HelicalHelices`. """ n = len(polymers) instance = cls(n=n, auto_build=False) instance.major_radii = [x.major_radius for x in polymers] instance.major_pitches = [x.major_pitch for x in polymers] instance.major_handedness = [x.major_handedness for x in polymers] instance.aas = [x.num_monomers for x in polymers] instance.minor_helix_types = [x.minor_helix_type for x in polymers] instance.orientations = [x.orientation for x in polymers] instance.phi_c_alphas = [x.phi_c_alpha for x in polymers] instance.minor_repeats = [x.minor_repeat for x in polymers] instance.build()
return instance
[docs] @classmethod def from_parameters(cls, n, aa=28, major_radius=None, major_pitch=None, phi_c_alpha=26.42, minor_helix_type='alpha', auto_build=True): """Creates a `CoiledCoil` from defined super-helical parameters. Parameters ---------- n : int Oligomeric state aa : int, optional Number of amino acids per minor helix. major_radius : float, optional Radius of super helix. major_pitch : float, optional Pitch of super helix. phi_c_alpha : float, optional Rotation of minor helices relative to the super-helical axis. minor_helix_type : float, optional Helix type of minor helices. Can be: 'alpha', 'pi', '3-10', 'PPI', 'PP2', 'collagen'. auto_build : bool, optional If `True`, the model will be built as part of instantiation. """ instance = cls(n=n, auto_build=False) instance.aas = [aa] * n instance.phi_c_alphas = [phi_c_alpha] * n instance.minor_helix_types = [minor_helix_type] * n if major_pitch is not None: instance.major_pitches = [major_pitch] * n if major_radius is not None: instance.major_radii = [major_radius] * n if auto_build: instance.build()
return instance
[docs] @classmethod def tropocollagen( cls, aa=28, major_radius=5.0, major_pitch=85.0, auto_build=True): """Creates a model of a collagen triple helix. Parameters ---------- aa : int, optional Number of amino acids per minor helix. major_radius : float, optional Radius of super helix. major_pitch : float, optional Pitch of super helix. auto_build : bool, optional If `True`, the model will be built as part of instantiation. """ instance = cls.from_parameters( n=3, aa=aa, major_radius=major_radius, major_pitch=major_pitch, phi_c_alpha=0.0, minor_helix_type='collagen', auto_build=False) instance.major_handedness = ['r'] * 3 # default z-shifts taken from rise_per_residue of collagen helix rpr_collagen = _helix_parameters['collagen'][1] instance.z_shifts = [-rpr_collagen * 2, -rpr_collagen, 0.0] instance.minor_repeats = [None] * 3 if auto_build: instance.build()
return instance
[docs] def build(self): """Builds a model of a coiled coil protein using input parameters.""" monomers = [HelicalHelix(major_pitch=self.major_pitches[i], major_radius=self.major_radii[i], major_handedness=self.major_handedness[i], aa=self.aas[i], minor_helix_type=self.minor_helix_types[i], orientation=self.orientations[i], phi_c_alpha=self.phi_c_alphas[i], minor_repeat=self.minor_repeats[i], ) for i in range(self.oligomeric_state)] axis_unit_vector = numpy.array([0, 0, 1]) for i, m in enumerate(monomers): m.rotate(angle=self.rotational_offsets[i], axis=axis_unit_vector) m.translate(axis_unit_vector * self.z_shifts[i]) self._molecules = monomers[:] self.relabel_all() for m in self._molecules: m.ampal_parent = self
return __author__ = 'Andrew R. Thomson, Christopher W. Wood, Jack W. Heal'