-
-
Save GeauxEric/99629ddece72d1221c37 to your computer and use it in GitHub Desktop.
How to align two PDB structures using the Bio.PDB module in Biopython
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import Bio.PDB | |
| # Select what residues numbers you wish to align | |
| # and put them in a list | |
| start_id = 1 | |
| end_id = 70 | |
| atoms_to_be_aligned = range(start_id, end_id + 1) | |
| # Start the parser | |
| pdb_parser = Bio.PDB.PDBParser(QUIET = True) | |
| # Get the structures | |
| ref_structure = pdb_parser.get_structure("reference", "1D3Z.pdb") | |
| sample_structure = pdb_parser.get_structure("samle", "1UBQ.pdb") | |
| # Use the first model in the pdb-files for alignment | |
| # Change the number 0 if you want to align to another structure | |
| ref_model = ref_structure[0] | |
| sample_model = sample_structure[0] | |
| # Make a list of the atoms (in the structures) you wish to align. | |
| # In this case we use CA atoms whose index is in the specified range | |
| ref_atoms = [] | |
| sample_atoms = [] | |
| # Iterate of all chains in the model in order to find all residues | |
| for ref_chain in ref_model: | |
| # Iterate of all residues in each model in order to find proper atoms | |
| for ref_res in ref_chain: | |
| # Check if residue number ( .get_id() ) is in the list | |
| if ref_res.get_id()[1] in atoms_to_be_aligned: | |
| # Append CA atom to list | |
| ref_atoms.append(ref_res['CA']) | |
| # Do the same for the sample structure | |
| for sample_chain in sample_model: | |
| for sample_res in sample_chain: | |
| if sample_res.get_id()[1] in atoms_to_be_aligned: | |
| sample_atoms.append(sample_res['CA']) | |
| # Now we initiate the superimposer: | |
| super_imposer = Bio.PDB.Superimposer() | |
| super_imposer.set_atoms(ref_atoms, sample_atoms) | |
| super_imposer.apply(sample_model.get_atoms()) | |
| # Print RMSD: | |
| print super_imposer.rms | |
| # Save the aligned version of 1UBQ.pdb | |
| io = Bio.PDB.PDBIO() | |
| io.set_structure(sample_structure) | |
| io.save("1UBQ_aligned.pdb") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment