def test_calculate_interface(self): atoms, residues, chains = parse_complex_from_file( self.golden_data_path + '1PPErec.pdb') receptor = Complex(chains, atoms) atoms, residues, chains = parse_complex_from_file( self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = DFIREAdapter(receptor, ligand) receptor_residue_indexes, ligand_residue_indexes, dist_matrix, atom_indexes = get_interface_residues( adapter.receptor_model, adapter.ligand_model, max_cutoff=1.) receptor_residues = [] for residue_index in receptor_residue_indexes: residue = receptor.residues[residue_index] receptor_residues.append("%s.%d" % (residue.name, residue.number)) ligand_residues = [] for residue_index in ligand_residue_indexes: residue = ligand.residues[residue_index] ligand_residues.append("%s.%d" % (residue.name, residue.number)) # Checked according to UCSF chimera expected_receptor = [ 'SER.61', 'ALA.56', 'TYR.59', 'TYR.94', 'GLY.62', 'ILE.63', 'MET.104', 'ILE.106' ] expected_ligand = [ 'LEU.7', 'LEU.8', 'GLU.24', 'HIS.25', 'GLY.26', 'TYR.27', 'CYS.28' ] assert len(set(expected_receptor) & set(receptor_residues)) == 8 assert len(set(expected_ligand) & set(ligand_residues)) == 7
def test_calculate_DFIRE_1AY7(self): atoms, residues, chains = parse_complex_from_file( self.golden_data_path + '1AY7rec.pdb') receptor = Complex(chains, atoms) atoms, residues, chains = parse_complex_from_file( self.golden_data_path + '1AY7lig.pdb') ligand = Complex(chains, atoms) adapter = DFIREAdapter(receptor, ligand) assert_almost_equal( -20.7486309727, self.dfire(adapter.receptor_model, adapter.receptor_model.coordinates[0], adapter.ligand_model, adapter.ligand_model.coordinates[0]))
def test_calculate_DFIRE_1EAW(self): atoms, _, chains = parse_complex_from_file(self.golden_data_path / '1EAWrec.pdb') receptor = Complex(chains, atoms) atoms, _, chains = parse_complex_from_file(self.golden_data_path / '1EAWlig.pdb') ligand = Complex(chains, atoms) adapter = DFIREAdapter(receptor, ligand) assert_almost_equal( -16.2182794457, self.dfire(adapter.receptor_model, adapter.receptor_model.coordinates[0], adapter.ligand_model, adapter.ligand_model.coordinates[0]))
def usage(): print("Usage: %s receptor.pdb ligand.pdb" % sys.argv[0]) if __name__ == "__main__": if len(sys.argv[1:]) != 2: usage() raise SystemExit('Wrong command line') atoms, residues, chains = parse_complex_from_file(sys.argv[1]) receptor = Complex(chains, atoms) atoms, residues, chains = parse_complex_from_file(sys.argv[2]) ligand = Complex(chains, atoms) adapter = DFIREAdapter(receptor, ligand) # 5A of cutoff to be in the same line as the ASA value used in the original paper receptor_residue_indexes, ligand_residue_indexes, dist_matrix, atom_indexes = get_interface_residues( adapter.receptor_model, adapter.ligand_model, max_cutoff=5.) rotamer_library = InterfaceSurfaceLibrary() print("%d receptor interface residues" % len(receptor_residue_indexes)) receptor_residues = [] for residue_index in receptor_residue_indexes: residue = receptor.residues[residue_index] chi_angles = calculate_chi_angles(residue) for chi, angle in chi_angles.items(): try: chi_angles[chi] = math.degrees(angle) except TypeError: