Residue depths


MSMS computes solvent excluded surfaces on a protein structure. Generally, MSMS is used to calculate residue depths (in Angstroms) from the surface of a protein, using a PDB file as an input. ssbio provides wrappers through Biopython to run MSMS as well as store the depths in an associated StructProp object.

Installation instructions (Unix)


These instructions were created on an Ubuntu 17.04 system.

  1. Head to the Download page, and under the header “MSMS 2.6.X - Current Release” download the “Unix/Linux i86_64” version - if this doesn’t work though you’ll want to try the “Unix/Linux i86” version later.

  2. Download it, unarchive it to your library path:

    sudo mkdir /usr/local/lib/msms
    cd /usr/local/lib/msms
    tar zxvf /path/to/your/downloaded/file/msms_i86_64Linux2_2.6.1.tar.gz
  3. Symlink the binaries (or alternatively, add the two locations to your PATH):

    sudo ln -s /usr/local/lib/msms/msms.x86_64Linux2.2.6.1 /usr/local/bin/msms
    sudo ln -s /usr/local/lib/msms/pdb_to_xyzr* /usr/local/bin
  4. Fix a bug in the pdb_to_xyzr file (see:

    sudo vi /usr/local/lib/msms/pdb_to_xyzr

    at line 34, change:

    numfile = "./atmtypenumbers"


    numfile = "/usr/local/lib/msms/atmtypenumbers"
  5. Repeat step 5 for the file /usr/local/lib/msms/pdb_to_xyzrn

  6. Now try running msms in the terminal, it should say:

    $ msms
    MSMS 2.6.1 started on structure
    Copyright M.F. Sanner (1994)
    Compilation flags -O2 -DVERBOSE -DTIMING
    MSMS: No input stream specified

Program execution

In the shell

To run the program on its own in the shell…


With ssbio

To run the program using the ssbio Python wrapper, see:


  • How do I cite MSMS?

  • How long does it take to run?

    • Depending on the size of the protein structure, the program can take up to a couple minutes to execute.
  • I’m having issues running MSMS…

    • See the ssbio wiki for (hopefully) some solutions - or add yours in when you find the answer!

API, pdb_id, outfile=None, outdir=None, outext='_msms.df', force_rerun=False)[source]

Run MSMS (using Biopython) on a Biopython Structure Model.

Depths are in units Angstroms. 1A = 10^-10 m = 1nm. Returns a dictionary of:

                resnum1_id: (res_depth, ca_depth),
                resnum2_id: (res_depth, ca_depth)
Parameters:model – Biopython Structure Model
Returns:ResidueDepth property_dict, reformatted
Return type:Pandas DataFrame, outfile=None, outdir=None, outext='_msms.df', force_rerun=False)[source]

Run MSMS (using Biopython) on a PDB file.

Saves a CSV file of:
chain: chain ID resnum: residue number (PDB numbering) icode: residue insertion code res_depth: average depth of all atoms in a residue ca_depth: depth of the alpha carbon atom

Depths are in units Angstroms. 1A = 10^-10 m = 1nm

  • pdb_file – Path to PDB file
  • outfile – Optional name of output file (without extension)
  • outdir – Optional output directory
  • outext – Optional extension for the output file
  • outext – Suffix appended to json results file
  • force_rerun – Rerun MSMS even if results exist already

ResidueDepth property_dict, reformatted

Return type:

Pandas DataFrame