Exemplo n.º 1
0
class MinimizationTestCase(unittest.TestCase):
    def setUp(self):
        self.molecule = Molecule(pdb_file_location='tests/data/ref01.pdb')
        self.parameters = Parameters()
        self.molecule.set_force_field_parameters(self.parameters)
        self.optimization = GradientDescent(self.atom_energy_function)
        self.optimization.dimensions_number = 3
        self.optimization.iterations = 40
        self.optimization.precision = 0.01
        self.optimization.small_step = 0.00015
        self.optimization.smallest_step = self.optimization.small_step / 128
        self.force_field = ForceField(self.parameters)
        self.atom_index = 0

    def test_gradient_descent(self):
        self.atom_index = 0
        for j in range(5):
            self.optimization.run()
            atom = self.molecule.atoms[self.atom_index]
            atom.translate_starting_point(
                self.optimization.best_particle.dimensions)
            self.atom_index += 1

        energy = self.force_field.calculate_energy(self.molecule)
        # self.force_field.print_energy()
        self.assertEqual(energy, 599.882043366674)

    def atom_energy_function(self, particle):
        a = self.molecule.atoms[self.atom_index]
        a.translate_starting_point(particle.dimensions)
        return self.force_field.calculate_energy(self.molecule,
                                                 atom=a,
                                                 protect_bonds=False)
Exemplo n.º 2
0
 def setUp(self):
     self.molecule = Molecule(pdb_file_location='tests/data/ref01.pdb')
     self.parameters = Parameters()
     self.molecule.set_force_field_parameters(self.parameters)
     self.optimization = GradientDescent(self.atom_energy_function)
     self.optimization.dimensions_number = 3
     self.optimization.iterations = 40
     self.optimization.precision = 0.01
     self.optimization.small_step = 0.00015
     self.optimization.smallest_step = self.optimization.small_step / 128
     self.force_field = ForceField(self.parameters)
     self.atom_index = 0
Exemplo n.º 3
0
    def _populate_molecule(self):
        pointer = np.array([0, 0, 0])
        c_n_separator = np.array([1.3350, 0, 0])
        i = 0
        for a in self.sequence:
            i += 1
            abbreviation = code_map[a]
            residue = Molecule(pdb_file_location='data/catalog/' +
                               abbreviation + '.pdb')
            if i == 1:
                Fasta._add_n_terminal_hydrogen(residue)

            if i == len(self.sequence):
                Fasta._add_c_terminal_oxygen(residue)

            n_terminal = residue.amino_acids[0].atoms_map['N']
            c_terminal = residue.amino_acids[0].atoms_map['C']
            delta = np.array(n_terminal.point) - np.array(pointer)
            residue.translate(-delta)
            for a in residue.atoms:
                a.res_seq = i
                self.molecule.atoms.append(a.copy())
            pointer = np.array(c_terminal.point) + c_n_separator
Exemplo n.º 4
0
    def test_rotation(self):
        parameters = Parameters()
        self.generated.set_force_field_parameters(parameters)
        topology = self.generated.get_topology()

        phi = []
        psi = []
        for i in range(len(input_phi_psi)):
            phi.append(input_phi_psi[i][1])
            psi.append(input_phi_psi[i][2])
        topology.rotate_backbone('PHI', phi)
        topology.rotate_backbone('PSI', psi)

        expected = Molecule(pdb_file_location='tests/data/rotated.pdb')
        rmsd = self.generated.rmsd(expected)
        self.assertLess(rmsd, 0.05)
Exemplo n.º 5
0
 def __init__(self, sequence):
     self.sequence = sequence
     self.molecule = Molecule()
Exemplo n.º 6
0
class Fasta:
    def __init__(self, sequence):
        self.sequence = sequence
        self.molecule = Molecule()

    def to_pdb(self):
        self._populate_molecule()
        self.molecule.add_sequential_ids()
        self.molecule.update_internal_state()
        parameters = Parameters()
        self.molecule.set_force_field_parameters(parameters)
        self._rotate_to_default_position()
        return self.molecule

    def _populate_molecule(self):
        pointer = np.array([0, 0, 0])
        c_n_separator = np.array([1.3350, 0, 0])
        i = 0
        for a in self.sequence:
            i += 1
            abbreviation = code_map[a]
            residue = Molecule(pdb_file_location='data/catalog/' +
                               abbreviation + '.pdb')
            if i == 1:
                Fasta._add_n_terminal_hydrogen(residue)

            if i == len(self.sequence):
                Fasta._add_c_terminal_oxygen(residue)

            n_terminal = residue.amino_acids[0].atoms_map['N']
            c_terminal = residue.amino_acids[0].atoms_map['C']
            delta = np.array(n_terminal.point) - np.array(pointer)
            residue.translate(-delta)
            for a in residue.atoms:
                a.res_seq = i
                self.molecule.atoms.append(a.copy())
            pointer = np.array(c_terminal.point) + c_n_separator

    def _rotate_to_default_position(self):
        topology = self.molecule.get_topology()
        for i in range(len(self.molecule.amino_acids)):
            amino_acid = self.molecule.amino_acids[i]
            backbone_torsions_map = topology.backbone_torsions_map[
                amino_acid.sequence]

            if not amino_acid.is_last():
                topology.fix_nitrogen(amino_acid,
                                      self.molecule.amino_acids[i + 1])
                topology.fix_alpha_carbon(amino_acid,
                                          self.molecule.amino_acids[i + 1])

            if 'PSI' in backbone_torsions_map:
                topology.rotate_proper_dihedral(backbone_torsions_map['PSI'],
                                                180.0)
            if 'PHI' in backbone_torsions_map:
                topology.rotate_proper_dihedral(backbone_torsions_map['PHI'],
                                                180.0)
            if 'OMEGA' in backbone_torsions_map:
                topology.rotate_proper_dihedral(backbone_torsions_map['OMEGA'],
                                                180.0)

            # if not amino_acid.is_first(): topology.set_side_chain_torsion(amino_acid, 0)

        for i in range(len(self.molecule.amino_acids)):
            amino_acid = self.molecule.amino_acids[i]

            if not amino_acid.is_last():
                topology.fix_oxygen(amino_acid,
                                    self.molecule.amino_acids[i + 1])
                topology.fix_amine_hydrogen_torsion(
                    amino_acid, self.molecule.amino_acids[i + 1])
                topology.fix_amine_hydrogen(amino_acid,
                                            self.molecule.amino_acids[i + 1])
            topology.fix_amine_hydrogen_angle_to_ca(amino_acid)

    @staticmethod
    def _add_n_terminal_hydrogen(residue):
        n = residue.amino_acids[0].atoms_map['N']
        h1 = residue.amino_acids[0].atoms_map['H']
        h1.name = 'H1'
        # ATOM      9  H1  ASN A   1      -8.330   3.957   0.261  1.00  0.00           H
        # ATOM     10  H2  ASN A   1      -8.740   5.068  -0.889  1.00  0.00           H
        # ATOM     11  H3  ASN A   1      -9.877   4.041  -0.293  1.00  0.00           H
        h2 = h1.copy().translate([-0.3, -0.5, -1.3])
        h3 = h1.copy().translate([0, -1.1, -0.3])
        h2.name = 'H2'
        h3.name = 'H3'
        residue.atoms.append(h2)
        residue.atoms.append(h3)
        residue.update_internal_state()

    @staticmethod
    def _add_c_terminal_oxygen(residue):
        o_atom = residue.amino_acids[0].atoms_map['O']
        oxt_atom = o_atom.copy().translate([-1.5, +0.0, 1.7])
        oxt_atom.name = 'OXT'
        residue.atoms.append(oxt_atom)
        residue.update_internal_state()
Exemplo n.º 7
0
 def test_generate_molecule(self):
     expected = Molecule(pdb_file_location='tests/data/generated.pdb')
     rmsd = self.generated.rmsd(expected)
     self.assertLess(rmsd, 0.0006)
Exemplo n.º 8
0
 def setUp(self):
     self.parameters = Parameters()
     self.ligand = Molecule(pdb_file_location='tests/data/ligand.pdb')
Exemplo n.º 9
0
	def test_read_molecule(self):
		molecule = Molecule(pdb_file_location='tests/data/1l2y-01.pdb')
		self.assertEqual(len(molecule.amino_acids), 20)