Interactions/Stability Evaluation¶
This example shows how to perform Interactions/Stability Evaluation (InSty) analysis for a small protein (<200 residues) called tyrosine phosphatase LMW-PTP (PDB: 5KQM) and visualize the results using Matplotlib library and VMD program. In the tutorial, we will use an already prepared structure for simulation (with hydrogens added). The same structure will be later analyzed with the trajectory file to show how the analysis of interactions in the course of the simulation can change. The file is available in tutorial files.
The tutorial will also include an example of a PDB structure directly downloaded from Protein Data Bank (PDB) which requires adding the missing hydrogen atoms to the protein and ligand structure.
Analysis of interactions for a single PDB structure¶
We start by parsing PDB file with LMW-PTP 5kqm_all_sci.pdb
which is avalable
in the tutorial files. The PDB file contains protein structure with water and
counter ions prepared using VMD program.
Before that import everything from the ProDy packages.
In [1]: from prody import *
In [2]: from pylab import *
In [3]: import matplotlib
In [4]: PDBfile = '5kqm_all_sci.pdb'
In [5]: coords = parsePDB(PDBfile)
In [6]: coords
@> 19321 atoms and 1 coordinate set(s) were parsed in 0.23s.
For the analysis we will use only protein coordinates (atoms
):
In [7]: atoms = coords.select('protein')
In [8]: atoms
@> 19321 atoms and 1 coordinate set(s) were parsed in 0.21s.
Compute all types of interactions¶
In the next step, we instantiate an Interactions
instance:
In [9]: interactions = Interactions()
Now we can compute all available types of interactions (seven types: hydrogen
bonds, salt bridges, repulsive ionic bonding, Pi-cation, Pi-stacking,
hydrophobic interactions, and disulfide bonds) for protein structure by passing
selected atoms (atoms
) to Interactions.calcProteinInteractions()
method:
In [10]: all_interactions = interactions.calcProteinInteractions(atoms)
@> Calculating interations.
@> Calculating hydrogen bonds.
@> DONOR (res chid atom) <---> ACCEPTOR (res chid atom) Distance Angle
@> ARG101 P NH1_1516 <---> ASP98 P OD1_1463 2.0 33.1
@> HSE72 P NE2_1042 <---> ASN15 P OD1_165 2.6 34.8
@> GLN143 P NE2_2192 <---> GLU139 P OE2_2126 2.7 9.2
@> HSE66 P NE2_957 <---> GLU139 P OE1_2125 2.7 6.4
@> ARG40 P N_561 <---> LYS6 P O_37 2.7 17.1
@> ARG58 P N_813 <---> ASP56 P OD1_788 2.7 30.0
@> ALA45 P N_634 <---> ARG75 P O_1097 2.8 35.1
@> ASN53 P ND2_747 <---> GLU50 P OE1_708 2.8 18.2
@> ALA74 P N_1064 <---> ASN53 P O_751 2.8 21.3
@> ASP56 P N_780 <---> ILE16 P O_189 2.8 27.0
@> LYS110 P NZ_1667 <---> THR84 P O_1240 2.8 38.2
@> LEU116 P N_1758 <---> CYS90 P O_1342 2.8 15.0
@> SER103 P N_1546 <---> LEU99 P O_1485 2.8 29.1
@> ASN134 P N_2045 <---> ASP137 P OD2_2091 2.8 22.6
@> PHE152 P N_2321 <---> CYS148 P O_2275 2.8 8.3
@> ASN95 P N_1398 <---> ASP92 P OD1_1368 2.8 12.6
@> LYS6 P N_16 <---> ASN38 P O_536 2.8 25.0
@> ILE77 P N_1115 <---> ALA45 P O_643 2.8 12.2
@> ARG58 P NH2_832 <---> ASP56 P OD2_789 2.8 27.7
@> LEU99 P N_1467 <---> ASN95 P O_1411 2.8 15.5
@> CYS149 P N_2276 <---> CYS145 P O_2224 2.8 9.6
@> GLY52 P N_731 <---> ALA74 P O_1073 2.8 6.6
@> ASP32 P N_435 <---> LYS28 P O_385 2.8 8.8
@> ILE88 P N_1294 <---> LYS112 P O_1704 2.8 17.7
@> GLN143 P N_2180 <---> GLU139 P O_2128 2.8 21.7
@> ARG27 P N_340 <---> GLU23 P O_293 2.8 15.4
@> TYR142 P N_2159 <---> PHE138 P O_2113 2.9 14.2
@> GLY133 P N_2038 <---> PRO130 P O_1995 2.9 25.4
@> PHE26 P N_320 <---> ALA22 P O_278 2.9 4.9
@> ASN15 P ND2_166 <---> SER19 P OG_232 2.9 32.1
@> ARG75 P NH1_1090 <---> ASP81 P OD2_1194 2.9 19.7
@> ARG75 P NH2_1093 <---> ASP42 P OD2_610 2.9 23.5
@> ARG97 P N_1431 <---> GLU93 P O_1386 2.9 22.2
@> ARG65 P NH2_941 <---> GLU139 P OE1_2125 2.9 32.3
@> VAL25 P N_304 <---> ILE21 P O_268 2.9 8.2
@> LEU153 P N_2341 <---> CYS149 P O_2286 2.9 12.5
@> SER7 P N_38 <---> ASP86 P OD2_1270 2.9 39.9
@> ASP86 P N_1261 <---> SER7 P OG_45 2.9 34.7
@> ARG58 P NH2_832 <---> TYR131 P O_2016 2.9 33.1
@> THR46 P N_644 <---> CYS12 P O_130 2.9 36.1
@> GLN144 P N_2197 <---> THR140 P O_2142 2.9 23.3
@> THR78 P N_1134 <---> ASP81 P OD2_1194 2.9 12.4
@> LEU89 P N_1313 <---> LEU9 P O_83 2.9 29.5
@> THR31 P N_421 <---> ARG27 P O_363 2.9 24.1
@> CYS90 P N_1332 <---> GLU114 P O_1738 2.9 24.6
..
..
@> Number of detected hydrogen bonds: 124.
@> Calculating salt bridges.
@> HSE66 P NE2_957 <---> GLU139 P OE1_2125_2126 2.8
@> ASP81 P OD1_1193_1194 <---> ARG75 P NH1_1090_1093 2.9
@> ASP32 P OD1_443_444 <---> LYS28 P NZ_380 3.0
@> ARG101 P NH1_1516_1519 <---> ASP98 P OD1_1463_1464 3.1
@> ARG27 P NH1_356_359 <---> GLU23 P OE1_290_291 3.7
@> GLU139 P OE1_2125_2126 <---> ARG65 P NH1_938_941 3.8
@> LYS102 P NZ_1540 <---> ASP98 P OD1_1463_1464 3.9
@> ARG58 P NH1_829_832 <---> ASP56 P OD1_788_789 3.9
@> ARG18 P NH1_217_220 <---> ASP92 P OD1_1368_1369 4.1
@> GLU114 P OE1_1735_1736 <---> LYS112 P NZ_1699 4.1
@> ASP120 P OD1_1824_1825 <---> ARG147 P NH1_2257_2260 4.2
@> LYS110 P NZ_1667 <---> ASP86 P OD1_1269_1270 4.2
@> GLU114 P OE1_1735_1736 <---> HSE157 P NE2_2418 4.4
@> ARG18 P NH1_217_220 <---> ASP129 P OD1_1978_1979 4.6
@> ARG75 P NH1_1090_1093 <---> ASP42 P OD1_609_610 4.6
@> GLU23 P OE1_290_291 <---> HSE72 P NE2_1042 5.0
@> Number of detected salt bridges: 16.
@> Calculating repulsive ionic bonding.
@> ARG101 P NH1_1516_1519 <---> LYS102 P NZ_1540 4.3
@> Number of detected Repulsive Ionic Bonding interactions: 1.
@> Calculating Pi stacking interactions.
@> HSE66 P 953_954_955_957_959 <---> TYR142 P 2166_2167_2169_2171_2174_2176 3.9 162.1
@> HSE157 P 2414_2415_2416_2418_2420_2423_2424 <---> TYR119 P 1802_1803_1805_1807_1810_1812 4.4 3.0
@> TRP39 P 549_550_551_553_555_557 <---> PHE26 P 327_328_330_332_334_336 4.8 75.5
@> TYR131 P 2003_2004_2006_2008_2011_2013 <---> TYR132 P 2024_2025_2027_2029_2032_2034 4.9 91.4
@> Number of detected Pi stacking interactions: 4.
@> Calculating cation-Pi interactions.
@> PHE85 P 1248_1249_1251_1253_1255_1257 <---> ARG40 P NH1_577_580 3.7
@> HSE66 P 953_954_955_957_959 <---> ARG65 P NH1_938_941 4.5
@> HSE157 P2414_2415_2416_2418_2420_2423_2424 <---> LYS112 P NZ_1699 4.8
@> Number of detected cation-pi interactions: 3.
@> Hydrophobic Overlaping Areas are computed.
@> Calculating hydrophobic interactions.
@> TYR87 P OH_128614s <---> ALA156 P CB_2401 3.0 22.0
@> MET63 P CE_89414s <---> ALA24 P CB_298 3.3 5.2
@> ILE68 P CG2_97614s <---> MET63 P CE_894 3.3 52.4
@> TYR142 P CZ_217114s <---> VAL146 P CG2_2235 3.5 49.7
@> PHE10 P CD1_9214s <---> ALA22 P CB_273 3.5 31.2
@> LYS6 P CD_2614s <---> TRP39 P CZ2_555 3.5 68.7
@> VAL30 P CG1_41114s <---> PHE26 P CE2_336 3.6 21.1
@> ALA111 P CB_167714s <---> ILE88 P CD_1307 3.6 21.2
@> VAL11 P CG2_11414s <---> ILE88 P CG2_1300 3.6 9.3
@> VAL41 P CG2_59514s <---> PHE26 P CD2_334 3.6 16.6
@> PHE152 P CE1_233114s <---> ALA156 P CB_2401 3.7 17.5
@> VAL106 P CG2_159814s <---> LYS79 P CG_1155 3.7 25.1
@> ILE77 P CD_112814s <---> LEU99 P CD2_1480 3.7 12.0
@> PHE82 P CD1_120514s <---> ILE88 P CD_1307 3.7 17.6
@> LEU116 P CD2_177114s <---> ILE127 P CD_1949 3.7 17.4
@> VAL8 P CG1_5514s <---> PHE26 P CE2_336 3.7 12.1
@> LEU96 P CD1_142114s <---> ILE113 P CG2_1711 3.7 17.0
@> LEU9 P CD2_7814s <---> ILE77 P CD_1128 3.7 15.4
@> LEU89 P CD1_132214s <---> VAL8 P CG2_59 3.8 15.9
@> ILE126 P CD_193014s <---> LEU125 P CD1_1907 3.8 54.2
@> VAL141 P CG1_214914s <---> ILE127 P CG2_1942 3.9 11.5
..
..
@> Number of detected hydrophobic interactions: 39.
@> Calculating disulfide bonds.
@> Number of detected disulfide bonds: 0.
All types of interactions will be displayed on the screen with all types of information such as distance or angle (if applied).
Moreover, we will have access to the details of each interaction type using the following methods:
Interactions.getHydrogenBonds()
- hydrogen bonds:
In [11]: interactions.getHydrogenBonds()
[['ARG101', 'NH1_1516', 'P', 'ASP98', 'OD1_1463', 'P', 1.998, 33.1238],
['HSE72', 'NE2_1042', 'P', 'ASN15', 'OD1_165', 'P', 2.5997, 34.752],
['GLN143', 'NE2_2192', 'P', 'GLU139', 'OE2_2126', 'P', 2.7287, 9.1823],
['HSE66', 'NE2_957', 'P', 'GLU139', 'OE1_2125', 'P', 2.7314, 6.3592],
['ARG40', 'N_561', 'P', 'LYS6', 'O_37', 'P', 2.7479, 17.1499],
['ARG58', 'N_813', 'P', 'ASP56', 'OD1_788', 'P', 2.7499, 29.9737],
['ALA45', 'N_634', 'P', 'ARG75', 'O_1097', 'P', 2.7609, 35.0983],
['ASN53', 'ND2_747', 'P', 'GLU50', 'OE1_708', 'P', 2.7702, 18.2336],
['ALA74', 'N_1064', 'P', 'ASN53', 'O_751', 'P', 2.7782, 21.3375],
['ASP56', 'N_780', 'P', 'ILE16', 'O_189', 'P', 2.7793, 27.0481],
['LYS110', 'NZ_1667', 'P', 'THR84', 'O_1240', 'P', 2.7977, 38.2213],
['LEU116', 'N_1758', 'P', 'CYS90', 'O_1342', 'P', 2.8072, 15.0239],
['SER103', 'N_1546', 'P', 'LEU99', 'O_1485', 'P', 2.8075, 29.107],
['ASN134', 'N_2045', 'P', 'ASP137', 'OD2_2091', 'P', 2.8132, 22.562],
['PHE152', 'N_2321', 'P', 'CYS148', 'O_2275', 'P', 2.8141, 8.2562],
['ASN95', 'N_1398', 'P', 'ASP92', 'OD1_1368', 'P', 2.8148, 12.5701],
['LYS6', 'N_16', 'P', 'ASN38', 'O_536', 'P', 2.8178, 25.0305],
['ILE77', 'N_1115', 'P', 'ALA45', 'O_643', 'P', 2.8179, 12.1855],
..
..
Interactions.getSaltBridges()
- salt bridges (residues with oposite
charges):
In [12]: interactions.getSaltBridges()
[['HSE66', 'NE2_957', 'P', 'GLU139', 'OE1_2125_2126', 'P', 2.8359],
['ASP81', 'OD1_1193_1194', 'P', 'ARG75', 'NH1_1090_1093', 'P', 2.9163],
['ASP32', 'OD1_443_444', 'P', 'LYS28', 'NZ_380', 'P', 3.037],
['ARG101', 'NH1_1516_1519', 'P', 'ASP98', 'OD1_1463_1464', 'P', 3.0699],
['ARG27', 'NH1_356_359', 'P', 'GLU23', 'OE1_290_291', 'P', 3.7148],
['GLU139', 'OE1_2125_2126', 'P', 'ARG65', 'NH1_938_941', 'P', 3.7799],
['LYS102', 'NZ_1540', 'P', 'ASP98', 'OD1_1463_1464', 'P', 3.9359],
['ARG58', 'NH1_829_832', 'P', 'ASP56', 'OD1_788_789', 'P', 3.9486],
['ARG18', 'NH1_217_220', 'P', 'ASP92', 'OD1_1368_1369', 'P', 4.0693],
['GLU114', 'OE1_1735_1736', 'P', 'LYS112', 'NZ_1699', 'P', 4.0787],
['ASP120', 'OD1_1824_1825', 'P', 'ARG147', 'NH1_2257_2260', 'P', 4.1543],
['LYS110', 'NZ_1667', 'P', 'ASP86', 'OD1_1269_1270', 'P', 4.1879],
['GLU114', 'OE1_1735_1736', 'P', 'HSE157', 'NE2_2418', 'P', 4.3835],
['ARG18', 'NH1_217_220', 'P', 'ASP129', 'OD1_1978_1979', 'P', 4.5608],
['ARG75', 'NH1_1090_1093', 'P', 'ASP42', 'OD1_609_610', 'P', 4.5612],
['GLU23', 'OE1_290_291', 'P', 'HSE72', 'NE2_1042', 'P', 4.99]]
Interactions.getRepulsiveIonicBonding()
- repulsive ionic bonding
(between residues with the same charges):
In [13]: interactions.getRepulsiveIonicBonding()
[['ARG101', 'NH1_1516_1519', 'P', 'LYS102', 'NZ_1540', 'P', 4.2655]]
Interactions.getPiStacking()
- Pi-stacking interactions (HSE is a histidine
(HIS) type in the CHARMM force field):
In [14]: interactions.getPiStacking()
[['HSE66',
'953_954_955_957_959',
'P',
'TYR142',
'2166_2167_2169_2171_2174_2176',
'P',
3.8882,
162.1245],
['HSE157',
'2414_2415_2416_2418_2420_2423_2424',
'P',
'TYR119',
'1802_1803_1805_1807_1810_1812',
'P',
4.3605,
3.0062],
['TRP39',
'549_550_551_553_555_557',
'P',
'PHE26',
'327_328_330_332_334_336',
'P',
4.8394,
75.4588],
['TYR131',
'2003_2004_2006_2008_2011_2013',
'P',
'TYR132',
'2024_2025_2027_2029_2032_2034',
'P',
4.8732,
91.4358]]
Interactions.getPiCation()
- Pi-cation:
In [15]: interactions.getPiCation()
[['PHE85',
'1248_1249_1251_1253_1255_1257',
'P',
'ARG40',
'NH1_577_580',
'P',
3.6523],
['HSE66', '953_954_955_957_959', 'P', 'ARG65', 'NH1_938_941', 'P', 4.5323],
['HSE157',
'2414_2415_2416_2418_2420_2423_2424',
'P',
'LYS112',
'NZ_1699',
'P',
4.828]]
Interactions.getHydrophohic()
- hydrophobic interactions:
In [16]: interactions.getHydrophohic()
[['TYR87', 'OH_1286', 'P', 'ALA156', 'CB_2401', 'P', 3.0459],
['MET63', 'CE_894', 'P', 'ALA24', 'CB_298', 'P', 3.3105],
['ILE68', 'CG2_976', 'P', 'MET63', 'CE_894', 'P', 3.3306],
['TYR142', 'CZ_2171', 'P', 'VAL146', 'CG2_2235', 'P', 3.4815],
['PHE10', 'CD1_92', 'P', 'ALA22', 'CB_273', 'P', 3.5334],
['LYS6', 'CD_26', 'P', 'TRP39', 'CZ2_555', 'P', 3.5427],
['VAL30', 'CG1_411', 'P', 'PHE26', 'CE2_336', 'P', 3.5603],
['ALA111', 'CB_1677', 'P', 'ILE88', 'CD_1307', 'P', 3.5627],
['VAL11', 'CG2_114', 'P', 'ILE88', 'CG2_1300', 'P', 3.6386],
['VAL41', 'CG2_595', 'P', 'PHE26', 'CD2_334', 'P', 3.6448],
['PHE152', 'CE1_2331', 'P', 'ALA156', 'CB_2401', 'P', 3.6594],
['VAL106', 'CG2_1598', 'P', 'LYS79', 'CG_1155', 'P', 3.6828],
['ILE77', 'CD_1128', 'P', 'LEU99', 'CD2_1480', 'P', 3.6917],
['PHE82', 'CD1_1205', 'P', 'ILE88', 'CD_1307', 'P', 3.692],
['LEU116', 'CD2_1771', 'P', 'ILE127', 'CD_1949', 'P', 3.7057],
['VAL8', 'CG1_55', 'P', 'PHE26', 'CE2_336', 'P', 3.7106],
..
..
Interactions.getDisulfideBonds()
- disulfide bonds (none in the
structure):
In [17]: interactions.getDisulfideBonds()
[]
To display residues with the biggest number of potential interactions and their
types, we can use Interactions.getFrequentInteractions()
method:
In [18]: frequent_interactions = interactions.getFrequentInteractions(contacts_min=3)
In [19]: frequent_interactions
@> The most frequent interactions between:
@> LEU9P <---> hp:ALA44P hp:PHE85P hb:LEU89P
@> CYS12P <---> hb:ASN15P hb:SER19P hb:THR46P
@> ILE16P <---> hb:ASP56P hp:ALA74P hp:TYR131P
@> PHE26P <---> hp:VAL8P hp:VAL30P ps:TRP39P hp:VAL41P
@> TRP39P <---> hp:LYS6P hp:ILE35P hp:LEU153P
@> MET63P <---> hp:ILE21P hp:ILE68P hp:MET70P
@> ASP81P <---> hb:ARG75P hb:THR78P hb:PHE85P
@> THR84P <---> hb:SER7P hb:ARG40P hb:LYS110P
@> ASP86P <---> hb:SER7P sb:LYS110P hb:LYS112P
@> ILE88P <---> hp:VAL11P hp:PHE82P hp:ALA111P hb:GLU114P
@> ASP92P <---> sb:ARG18P hb:ASN95P hb:LEU96P
@> LYS112P <---> hb:ILE88P sb:GLU114P pc:HSE157P
@> ILE127P <---> hb:ARG18P hp:MET91P hp:LEU116P hp:VAL141P
@> Legend: hb-hydrogen bond, sb-salt bridge, rb-repulsive ionic bond, ps-Pi stacking interaction,pc-Cation-Pi interaction, hp-hydrophobic interaction, dibs-disulfide bonds
@> The biggest number of interactions: 4
The value of contacts_min
can be modified to display residues with smaller
or bigger number of interactions.
Visualize interactions in VMD¶
We can generate tcl files for visualizing each type of interaction with VMD
using the showProteinInteractions_VMD()
function in the following way:
In [20]: showProteinInteractions_VMD(atoms, interactions.getHydrogenBonds(),
....: color='blue', filename='HBs.tcl')
....:
In [21]: showProteinInteractions_VMD(atoms, interactions.getSaltBridges(),
....: color='yellow',filename='SBs.tcl')
....:
In [22]: showProteinInteractions_VMD(atoms, interactions.getRepulsiveIonicBonding(),
....: color='red',filename='RIB.tcl')
....:
In [23]: showProteinInteractions_VMD(atoms, interactions.getPiStacking(),
....: color='green',filename='PiStacking.tcl')
....:
In [24]: showProteinInteractions_VMD(atoms, interactions.getPiCation(),
....: color='orange',filename='PiCation.tcl')
....:
In [25]: showProteinInteractions_VMD(atoms, interactions.getHydrophobic(),
....: color='silver',filename='HPh.tcl')
....:
In [26]: showProteinInteractions_VMD(atoms, interactions.getDisulfideBonds(),
....: color='black',filename='DiBs.tcl')
....:
@> TCL file saved
@> TCL file saved
@> TCL file saved
@> TCL file saved
@> TCL file saved
@> TCL file saved
@> Lack of results
@> TCL file saved
A TCL file
will be saved and can be used in VMD after uploading the PDB file
with protein structure 5kqm_all_sci.pdb
and by running the following command
line instruction in the VMD TK Console (via VMD Main)
for Linux, Windows and Mac users:
play HBs.tcl
The tcl file contains a method for drawing lines between selected pairs of
residues. Those residues are also displayed. Now, we uploaded hydrogen
bonds which are displayed in blue as we defined in
showProteinInteractions_VMD()
function.
Salt bridges in yellow (VMD TK Console):
play SBs.tcl
Repulsive ionic bonding in red (VMD TK Console):
play RIB.tcl
Pi-Pi stacking interactions in green (VMD TK Console):
play PiStacking.tcl
Pi-cation interactions in orange (VMD TK Console):
play PiCation.tcl
and hydrophobic interactions in grey (VMD TK Console):
play HPh.tcl
Additional selections¶
From the predicted interactions, we can select only interactions assigned to certain regions, chains, or between different chains (binding interface between two chains in protein complex).
We can compute them by adding additional parameters to the selected function. See examples below:
In [27]: interactions.getSaltBridges(selection='chain P')
[['HSE66', 'NE2_957', 'P', 'GLU139', 'OE1_2125_2126', 'P', 2.8359],
['ASP81', 'OD1_1193_1194', 'P', 'ARG75', 'NH1_1090_1093', 'P', 2.9163],
['ASP32', 'OD1_443_444', 'P', 'LYS28', 'NZ_380', 'P', 3.037],
['ARG101', 'NH1_1516_1519', 'P', 'ASP98', 'OD1_1463_1464', 'P', 3.0699],
['ARG27', 'NH1_356_359', 'P', 'GLU23', 'OE1_290_291', 'P', 3.7148],
['GLU139', 'OE1_2125_2126', 'P', 'ARG65', 'NH1_938_941', 'P', 3.7799],
['LYS102', 'NZ_1540', 'P', 'ASP98', 'OD1_1463_1464', 'P', 3.9359],
['ARG58', 'NH1_829_832', 'P', 'ASP56', 'OD1_788_789', 'P', 3.9486],
['ARG18', 'NH1_217_220', 'P', 'ASP92', 'OD1_1368_1369', 'P', 4.0693],
['GLU114', 'OE1_1735_1736', 'P', 'LYS112', 'NZ_1699', 'P', 4.0787],
['ASP120', 'OD1_1824_1825', 'P', 'ARG147', 'NH1_2257_2260', 'P', 4.1543],
['LYS110', 'NZ_1667', 'P', 'ASP86', 'OD1_1269_1270', 'P', 4.1879],
['GLU114', 'OE1_1735_1736', 'P', 'HSE157', 'NE2_2418', 'P', 4.3835],
['ARG18', 'NH1_217_220', 'P', 'ASP129', 'OD1_1978_1979', 'P', 4.5608],
['ARG75', 'NH1_1090_1093', 'P', 'ASP42', 'OD1_609_610', 'P', 4.5612],
['GLU23', 'OE1_290_291', 'P', 'HSE72', 'NE2_1042', 'P', 4.99]]
In [28]: interactions.getRepulsiveIonicBonding(selection='resid 102')
[['ARG101', 'NH1_1516_1519', 'P', 'LYS102', 'NZ_1540', 'P', 4.2655]]
In [29]: interactions.getPiStacking(selection='chain P and resid 26')
[['TRP39',
'549_550_551_553_555_557',
'P',
'PHE26',
'327_328_330_332_334_336',
'P',
4.8394,
75.4588]]
It can be done for all kinds of interactions is a similar way. The function will return a list of interactions with following order:
- Hydrogen bonds
- Salt Bridges
- RepulsiveIonicBonding
- Pi stacking interactions
- Pi-cation interactions
- Hydrophobic interactions
- Disulfide bonds
In [30]: allRes_20to50 = interactions.getInteractions(selection='resid 20 to 50')
In [31]: allRes_20to50
[[['ARG40', 'N_561', 'P', 'LYS6', 'O_37', 'P', 2.7479, 17.1499],
['ALA45', 'N_634', 'P', 'ARG75', 'O_1097', 'P', 2.7609, 35.0983],
['ASN53', 'ND2_747', 'P', 'GLU50', 'OE1_708', 'P', 2.7702, 18.2336],
['LYS6', 'N_16', 'P', 'ASN38', 'O_536', 'P', 2.8178, 25.0305],
['ILE77', 'N_1115', 'P', 'ALA45', 'O_643', 'P', 2.8179, 12.1855],
['ASP32', 'N_435', 'P', 'LYS28', 'O_385', 'P', 2.8357, 8.8318],
['ARG27', 'N_340', 'P', 'GLU23', 'O_293', 'P', 2.8446, 15.4167],
['PHE26', 'N_320', 'P', 'ALA22', 'O_278', 'P', 2.8541, 4.8732],
['ARG75', 'NH2_1093', 'P', 'ASP42', 'OD2_610', 'P', 2.8649, 23.5083],
['VAL25', 'N_304', 'P', 'ILE21', 'O_268', 'P', 2.8666, 8.2255],
['THR46', 'N_644', 'P', 'CYS12', 'O_130', 'P', 2.883, 36.1279],
['THR31', 'N_421', 'P', 'ARG27', 'O_363', 'P', 2.896, 24.1287],
['GLU23', 'N_279', 'P', 'SER19', 'O_235', 'P', 2.8979, 15.4146],
['PHE10', 'N_84', 'P', 'ASP42', 'O_612', 'P', 2.9026, 22.751],
['ARG27', 'NH2_359', 'P', 'GLU23', 'OE2_291', 'P', 2.9199, 31.5487],
['ASN38', 'N_523', 'P', 'ILE35', 'O_496', 'P', 2.9255, 29.091],
['GLN76', 'NE2_1110', 'P', 'THR46', 'O_657', 'P', 2.9381, 31.3836],
['ARG40', 'NH1_577', 'P', 'THR84', 'OG1_1233', 'P', 2.9482, 8.3748],
['ALA44', 'N_624', 'P', 'PHE10', 'O_103', 'P', 2.9499, 33.1772],
['VAL8', 'N_49', 'P', 'ARG40', 'O_584', 'P', 2.9631, 25.0079],
['ILE35', 'N_478', 'P', 'VAL30', 'O_420', 'P', 2.9811, 23.5092],
['ASN53', 'N_738', 'P', 'GLU50', 'O_711', 'P', 2.995, 28.587],
['ASN34', 'N_464', 'P', 'THR31', 'O_434', 'P', 3.0041, 18.2465],
['ASN15', 'ND2_166', 'P', 'SER43', 'OG_620', 'P', 3.0129, 25.6996],
['ARG27', 'NH1_356', 'P', 'GLU23', 'OE2_291', 'P', 3.0175, 36.9343],
['LEU29', 'N_386', 'P', 'VAL25', 'O_319', 'P', 3.0299, 19.109],
['SER47', 'N_658', 'P', 'LEU13', 'O_149', 'P', 3.0386, 28.8029],
['VAL30', 'N_405', 'P', 'PHE26', 'O_339', 'P', 3.0394, 17.6883],
['ALA24', 'N_294', 'P', 'PRO20', 'O_249', 'P', 3.0751, 29.9487],
['LYS28', 'N_364', 'P', 'ALA24', 'O_303', 'P', 3.0783, 19.9504],
['ALA22', 'N_269', 'P', 'ARG18', 'O_224', 'P', 3.088, 21.873],
['ASP42', 'N_601', 'P', 'VAL8', 'O_64', 'P', 3.1331, 35.5671],
['TRP39', 'N_537', 'P', 'SER36', 'O_507', 'P', 3.1343, 15.1776],
['CYS12', 'N_120', 'P', 'ALA44', 'O_633', 'P', 3.3349, 36.1006]],
[['ASP32', 'OD1_443_444', 'P', 'LYS28', 'NZ_380', 'P', 3.037],
['ARG27', 'NH1_356_359', 'P', 'GLU23', 'OE1_290_291', 'P', 3.7148],
['ARG75', 'NH1_1090_1093', 'P', 'ASP42', 'OD1_609_610', 'P', 4.5612],
['GLU23', 'OE1_290_291', 'P', 'HSE72', 'NE2_1042', 'P', 4.99]],
[],
[['TRP39',
'549_550_551_553_555_557',
'P',
'PHE26',
'327_328_330_332_334_336',
'P',
4.8394,
75.4588]],
[['PHE85',
'1248_1249_1251_1253_1255_1257',
'P',
'ARG40',
'NH1_577_580',
'P',
3.6523]],
[['MET63', 'CE_894', 'P', 'ALA24', 'CB_298', 'P', 3.3105],
['PHE10', 'CD1_92', 'P', 'ALA22', 'CB_273', 'P', 3.5334],
['LYS6', 'CD_26', 'P', 'TRP39', 'CZ2_555', 'P', 3.5427],
['VAL30', 'CG1_411', 'P', 'PHE26', 'CE2_336', 'P', 3.5603],
['VAL41', 'CG2_595', 'P', 'PHE26', 'CD2_334', 'P', 3.6448],
['VAL8', 'CG1_55', 'P', 'PHE26', 'CE2_336', 'P', 3.7106],
['ALA44', 'CB_628', 'P', 'LEU9', 'CD1_74', 'P', 3.8992],
['VAL25', 'CG2_314', 'P', 'TYR142', 'CE1_2169', 'P', 3.92],
['ILE21', 'CG2_256', 'P', 'MET63', 'SD_893', 'P', 3.9614],
['LEU153', 'CD1_2350', 'P', 'TRP39', 'NE1_547', 'P', 3.967],
['ILE35', 'CD_491', 'P', 'TRP39', 'NE1_547', 'P', 4.0172],
['LEU29', 'CD1_395', 'P', 'VAL25', 'CG1_310', 'P', 4.0642],
['ARG75', 'CG_1081', 'P', 'ALA44', 'CB_628', 'P', 4.0853],
['ARG40', 'CG_568', 'P', 'PHE85', 'CE2_1257', 'P', 4.2669],
['LYS28', 'CG_371', 'P', 'ILE68', 'CD_983', 'P', 4.2707],
['PHE138', 'CD2_2108', 'P', 'ILE21', 'CD_263', 'P', 4.3082]],
[]]
The list of hydrogen bonds, salt bridges and other types of interactions can be displayed as follows:
Hydrogen bonds:
In [32]: allRes_20to50[0]
[['ARG40', 'N_561', 'P', 'LYS6', 'O_37', 'P', 2.7479, 17.1499],
['ALA45', 'N_634', 'P', 'ARG75', 'O_1097', 'P', 2.7609, 35.0983],
['ASN53', 'ND2_747', 'P', 'GLU50', 'OE1_708', 'P', 2.7702, 18.2336],
['LYS6', 'N_16', 'P', 'ASN38', 'O_536', 'P', 2.8178, 25.0305],
['ILE77', 'N_1115', 'P', 'ALA45', 'O_643', 'P', 2.8179, 12.1855],
['ASP32', 'N_435', 'P', 'LYS28', 'O_385', 'P', 2.8357, 8.8318],
['ARG27', 'N_340', 'P', 'GLU23', 'O_293', 'P', 2.8446, 15.4167],
['PHE26', 'N_320', 'P', 'ALA22', 'O_278', 'P', 2.8541, 4.8732],
['ARG75', 'NH2_1093', 'P', 'ASP42', 'OD2_610', 'P', 2.8649, 23.5083],
['VAL25', 'N_304', 'P', 'ILE21', 'O_268', 'P', 2.8666, 8.2255],
['THR46', 'N_644', 'P', 'CYS12', 'O_130', 'P', 2.883, 36.1279],
['THR31', 'N_421', 'P', 'ARG27', 'O_363', 'P', 2.896, 24.1287],
['GLU23', 'N_279', 'P', 'SER19', 'O_235', 'P', 2.8979, 15.4146],
['PHE10', 'N_84', 'P', 'ASP42', 'O_612', 'P', 2.9026, 22.751],
['ARG27', 'NH2_359', 'P', 'GLU23', 'OE2_291', 'P', 2.9199, 31.5487],
['ASN38', 'N_523', 'P', 'ILE35', 'O_496', 'P', 2.9255, 29.091],
['GLN76', 'NE2_1110', 'P', 'THR46', 'O_657', 'P', 2.9381, 31.3836],
['ARG40', 'NH1_577', 'P', 'THR84', 'OG1_1233', 'P', 2.9482, 8.3748],
['ALA44', 'N_624', 'P', 'PHE10', 'O_103', 'P', 2.9499, 33.1772],
['VAL8', 'N_49', 'P', 'ARG40', 'O_584', 'P', 2.9631, 25.0079],
['ILE35', 'N_478', 'P', 'VAL30', 'O_420', 'P', 2.9811, 23.5092],
['ASN53', 'N_738', 'P', 'GLU50', 'O_711', 'P', 2.995, 28.587],
['ASN34', 'N_464', 'P', 'THR31', 'O_434', 'P', 3.0041, 18.2465],
['ASN15', 'ND2_166', 'P', 'SER43', 'OG_620', 'P', 3.0129, 25.6996],
['ARG27', 'NH1_356', 'P', 'GLU23', 'OE2_291', 'P', 3.0175, 36.9343],
['LEU29', 'N_386', 'P', 'VAL25', 'O_319', 'P', 3.0299, 19.109],
['SER47', 'N_658', 'P', 'LEU13', 'O_149', 'P', 3.0386, 28.8029],
['VAL30', 'N_405', 'P', 'PHE26', 'O_339', 'P', 3.0394, 17.6883],
['ALA24', 'N_294', 'P', 'PRO20', 'O_249', 'P', 3.0751, 29.9487],
['LYS28', 'N_364', 'P', 'ALA24', 'O_303', 'P', 3.0783, 19.9504],
['ALA22', 'N_269', 'P', 'ARG18', 'O_224', 'P', 3.088, 21.873],
['ASP42', 'N_601', 'P', 'VAL8', 'O_64', 'P', 3.1331, 35.5671],
['TRP39', 'N_537', 'P', 'SER36', 'O_507', 'P', 3.1343, 15.1776],
['CYS12', 'N_120', 'P', 'ALA44', 'O_633', 'P', 3.3349, 36.1006]]
Salt Bridges:
In [33]: allRes_20to50[1]
[['ASP32', 'OD1_443_444', 'P', 'LYS28', 'NZ_380', 'P', 3.037],
['ARG27', 'NH1_356_359', 'P', 'GLU23', 'OE1_290_291', 'P', 3.7148],
['ARG75', 'NH1_1090_1093', 'P', 'ASP42', 'OD1_609_610', 'P', 4.5612],
['GLU23', 'OE1_290_291', 'P', 'HSE72', 'NE2_1042', 'P', 4.99]]
We can also select one particular residue or a region of our interest:
In [34]: interactions.getPiCation(selection='resid 85')
[['PHE85',
'1248_1249_1251_1253_1255_1257',
'P',
'ARG40',
'NH1_577_580',
'P',
3.6523]]
In [35]: interactions.getHydrophobic(selection='resid 26 to 100')
[['TYR87', 'OH_1286', 'P', 'ALA156', 'CB_2401', 'P', 3.0459],
['MET63', 'CE_894', 'P', 'ALA24', 'CB_298', 'P', 3.3105],
['ILE68', 'CG2_976', 'P', 'MET63', 'CE_894', 'P', 3.3306],
['LYS6', 'CD_26', 'P', 'TRP39', 'CZ2_555', 'P', 3.5427],
['VAL30', 'CG1_411', 'P', 'PHE26', 'CE2_336', 'P', 3.5603],
['ALA111', 'CB_1677', 'P', 'ILE88', 'CD_1307', 'P', 3.5627],
['VAL11', 'CG2_114', 'P', 'ILE88', 'CG2_1300', 'P', 3.6386],
['VAL41', 'CG2_595', 'P', 'PHE26', 'CD2_334', 'P', 3.6448],
['VAL106', 'CG2_1598', 'P', 'LYS79', 'CG_1155', 'P', 3.6828],
['ILE77', 'CD_1128', 'P', 'LEU99', 'CD2_1480', 'P', 3.6917],
['PHE82', 'CD1_1205', 'P', 'ILE88', 'CD_1307', 'P', 3.692],
['VAL8', 'CG1_55', 'P', 'PHE26', 'CE2_336', 'P', 3.7106],
['MET70', 'CE_1014', 'P', 'MET63', 'CG_890', 'P', 3.7262],
['LEU96', 'CD1_1421', 'P', 'ILE113', 'CG2_1711', 'P', 3.7263],
['LEU9', 'CD2_78', 'P', 'ILE77', 'CD_1128', 'P', 3.745],
['LEU89', 'CD1_1322', 'P', 'VAL8', 'CG2_59', 'P', 3.7672],
['MET91', 'SD_1353', 'P', 'ILE127', 'CD_1949', 'P', 3.8864],
['ALA44', 'CB_628', 'P', 'LEU9', 'CD1_74', 'P', 3.8992],
['ILE21', 'CG2_256', 'P', 'MET63', 'SD_893', 'P', 3.9614],
['LEU153', 'CD1_2350', 'P', 'TRP39', 'NE1_547', 'P', 3.967],
['PHE85', 'CZ_1253', 'P', 'LEU9', 'CD1_74', 'P', 4.0119],
['ILE35', 'CD_491', 'P', 'TRP39', 'NE1_547', 'P', 4.0172],
['LEU29', 'CD1_395', 'P', 'VAL25', 'CG1_310', 'P', 4.0642],
['ALA74', 'CB_1068', 'P', 'ILE16', 'CG2_177', 'P', 4.0772],
['ARG75', 'CG_1081', 'P', 'ALA44', 'CB_628', 'P', 4.0853],
['LYS102', 'CD_1534', 'P', 'ILE77', 'CG2_1121', 'P', 4.1048],
['TYR119', 'CE1_1805', 'P', 'LEU89', 'CD2_1326', 'P', 4.1435],
['ARG40', 'CG_568', 'P', 'PHE85', 'CE2_1257', 'P', 4.2669],
['LYS28', 'CG_371', 'P', 'ILE68', 'CD_983', 'P', 4.2707],
['LYS112', 'CG_1690', 'P', 'TYR87', 'CE1_1283', 'P', 4.3083],
['ARG58', 'CG_820', 'P', 'PHE138', 'CE1_2104', 'P', 4.4781]]
Change selection criteria for interaction type¶
The Interactions.buildInteractionMatrix()
method computes interactions
using default parameters for interactions. However, it can be changed
according to our needs. To do that, we need to recalculate the selected type
of interactions using the preferable parameters.
We can do it using the following functions: calcHydrogenBonds()
,
calcHydrogenBonds()
, calcSaltBridges()
,
calcRepulsiveIonicBonding()
, calcPiStacking()
,
calcPiCation()
, calcHydrophohic()
,
calcDisulfideBonds()
, and use
Interactions.setNewHydrogenBonds()
,
Interactions.setNewSaltBridges()
,
Interactions.setNewRepulsiveIonicBonding()
,
Interactions.setNewPiStacking()
,
Interactions.setNewPiCation()
,
Interactions.setNewHydrophohic()
,
Interactions.setNewDisulfideBonds()
method to replace it in the main
Instance.
For example: If we want to replace hydrogen bonds:
In [36]: newHydrogenBonds2 = calcHydrogenBonds(atoms, distA=2.8,
....: angle=30, cutoff_dist=15)
....:
In [37]: interactions.setNewHydrogenBonds(newHydrogenBonds2)
@> Calculating hydrogen bonds.
@> DONOR (res chid atom) <---> ACCEPTOR (res chid atom) Distance Angle
@> GLN143 P NE2_2192 <---> GLU139 P OE2_2126 2.7 9.2
@> HSE66 P NE2_957 <---> GLU139 P OE1_2125 2.7 6.4
@> ARG40 P N_561 <---> LYS6 P O_37 2.7 17.1
@> ARG58 P N_813 <---> ASP56 P OD1_788 2.7 30.0
@> ASN53 P ND2_747 <---> GLU50 P OE1_708 2.8 18.2
@> ALA74 P N_1064 <---> ASN53 P O_751 2.8 21.3
@> ASP56 P N_780 <---> ILE16 P O_189 2.8 27.0
@> Number of detected hydrogen bonds: 7.
@> Hydrogen Bonds are replaced
In [38]: interactions.getHydrogenBonds()
[['GLN143', 'NE2_2192', 'P', 'GLU139', 'OE2_2126', 'P', 2.7287, 9.1823],
['HSE66', 'NE2_957', 'P', 'GLU139', 'OE1_2125', 'P', 2.7314, 6.3592],
['ARG40', 'N_561', 'P', 'LYS6', 'O_37', 'P', 2.7479, 17.1499],
['ARG58', 'N_813', 'P', 'ASP56', 'OD1_788', 'P', 2.7499, 29.9737],
['ASN53', 'ND2_747', 'P', 'GLU50', 'OE1_708', 'P', 2.7702, 18.2336],
['ALA74', 'N_1064', 'P', 'ASN53', 'O_751', 'P', 2.7782, 21.3375],
['ASP56', 'N_780', 'P', 'ILE16', 'O_189', 'P', 2.7793, 27.0481]]
If we want to replace salt bridges, repulsive ionic bonding, or Pi-cation interactions:
In [39]: sb2 = calcSaltBridges(atoms, distA=6)
In [40]: interactions.setNewSaltBridges(sb2)
In [41]: rib2 = calcRepulsiveIonicBonding(atoms, distA=9)
In [42]: interactions.setNewRepulsiveIonicBonding(rib2)
In [43]: picat2 = calcPiCation(atoms, distA=7)
In [44]: interactions.setNewPiCation(picat2)
@> Calculating salt bridges.
@> HSE66 P NE2_957 <---> GLU139 P OE1_2125_2126 2.8
@> ASP81 P OD1_1193_1194 <---> ARG75 P NH1_1090_1093 2.9
@> ASP32 P OD1_443_444 <---> LYS28 P NZ_380 3.0
@> ARG101 P NH1_1516_1519 <---> ASP98 P OD1_1463_1464 3.1
@> ARG27 P NH1_356_359 <---> GLU23 P OE1_290_291 3.7
@> GLU139 P OE1_2125_2126 <---> ARG65 P NH1_938_941 3.8
@> LYS102 P NZ_1540 <---> ASP98 P OD1_1463_1464 3.9
@> ARG58 P NH1_829_832 <---> ASP56 P OD1_788_789 3.9
@> ARG18 P NH1_217_220 <---> ASP92 P OD1_1368_1369 4.1
@> GLU114 P OE1_1735_1736 <---> LYS112 P NZ_1699 4.1
@> ASP120 P OD1_1824_1825 <---> ARG147 P NH1_2257_2260 4.2
@> LYS110 P NZ_1667 <---> ASP86 P OD1_1269_1270 4.2
@> GLU114 P OE1_1735_1736 <---> HSE157 P NE2_2418 4.4
@> ARG18 P NH1_217_220 <---> ASP129 P OD1_1978_1979 4.6
@> ARG75 P NH1_1090_1093 <---> ASP42 P OD1_609_610 4.6
@> GLU23 P OE1_290_291 <---> HSE72 P NE2_1042 5.0
@> ASP42 P OD1_609_610 <---> HSE72 P NE2_1042 5.4
@> ASP81 P OD1_1193_1194 <---> ARG40 P NH1_577_580 5.8
@> Number of detected salt bridges: 18.
@> Salt Bridges are replaced
@> Calculating repulsive ionic bonding.
@> ASP42 P OD1_609_610 <---> ASP81 P OD1_1193_1194 6.7
@> GLU80 P OE1_1181_1182 <---> ASP81 P OD1_1193_1194 7.0
@> ASP92 P OD1_1368_1369 <---> ASP129 P OD1_1978_1979 7.6
@> LYS110 P NZ_1667 <---> ARG40 P NH1_577_580 7.8
@> ASP92 P OD1_1368_1369 <---> GLU93 P OE1_1383_1384 8.6
@> GLU128 P OE1_1966_1967 <---> ASP137 P OD1_2090_2091 8.9
@> Number of detected Repulsive Ionic Bonding interactions: 6.
@> Repulsive Ionic Bonding are replaced
@> Calculating cation-Pi interactions.
@> PHE85 P 1248_1249_1251_1253_1255_1257 <---> ARG40 P NH1_577_580 3.7
@> HSE66 P 953_954_955_957_959 <---> ARG65 P NH1_938_941 4.5
@> HSE157 P2414_2415_2416_2418_2420_2423_2424 <---> LYS112 P NZ_1699 4.8
@> PHE138 P 2101_2102_2104_2106_2108_2110 <---> ARG58 P NH1_829_832 5.0
@> TYR131 P 2003_2004_2006_2008_2011_2013 <---> ARG58 P NH1_829_832 5.1
@> PHE85 P 1248_1249_1251_1253_1255_1257 <---> ARG75 P NH1_1090_1093 6.3
@> TRP39 P 549_550_551_553_555_557 <---> LYS6 P NZ_32 6.6
@> TYR87 P 1280_1281_1283_1285_1288_1290 <---> LYS112 P NZ_1699 6.8
@> Number of detected cation-pi interactions: 8.
@> Pi-Cation interactions are replaced
Assess the functional significance of a residue¶
For assessing the functional significance of each residue in protein structure, we counted the number of possible contacts based on:
- Hydrogen bonds (
HBs
)- Salt Bridges (
SBs
)- Repulsive Ionic Bonding (
RIB
)- Pi stacking interactions (
PiStack
)- Pi-cation interactions (
PiCat
)- Hydrophobic interactions (
HPh
)- Disulfide Bonds (
DiBs
)
To compute the weighted interactions use the
Interactions.buildInteractionMatrix()
method:
In [45]: matrix = interactions.buildInteractionMatrix()
@> Calculating interactions
The results can be displayed in the following way:
In [46]: import matplotlib.pylab as plt
In [47]: showAtomicMatrix(matrix, atoms=atoms.ca, cmap='seismic', markersize=8)
In [48]: plt.xlabel('Residue')
In [49]: plt.ylabel('Residue')
In [50]: plt.clim([-3,3])
The total number of interaction for each residue can be displayed on the plot using
showCumulativeInteractionTypes()
function.
In [51]: interactions.showCumulativeInteractionTypes()
@> Calculating interactions
@> Calculating interactions
@> Calculating interactions
@> Calculating interactions
@> Calculating interactions
@> Calculating interactions
@> Calculating interactions
The results with the higest number of possible contacts can be saved in PDB
file. They will be restored in Occupancy
column and display in VMD.
In [52]: interactions.saveInteractionsPDB(filename='5kqm_meanMatrix.pdb')
Visualize number of interactions onto 3D structure¶
The number of the interaction can be saved to a PDB file in the
Occupancy column by using Interactions.saveInteractionsPDB()
method. Then the score would be displayed in color in any available graphical
program, for example, in VMD.
In [53]: interactions.saveInteractionsPDB(filename='5kqm_meanMatrix.pdb')
@> PDB file saved.
A file 5kqm_meanMatrix.pdb
will be saved and can be used in VMD by
uploading PDB structure and displaying it with Coloring Method
Occupancy. By default blue colors correspond to the highest
values but we can change it in .
Exclude some interaction types from calculations¶
For analysis we can exclude some of the interaction types by assigning zero
to the type of interactions (HBs
- hydrogen bonds, SBs
- salt bridges, RIB
-
repulsive ionic bonding, PiCat
- Pi-Cation, PiStack
- Pi-Stacking, HPh
-
hydrophobic interactions and finally DiBs - disulfide bonds).
In [54]: matrix = interactions.buildInteractionMatrix(RIB=0, HBs=0, HPh=0, DiBs=0)
@> Calculating interactions
The results can be displayed in a similar way:
In [55]: showAtomicMatrix(matrix, atoms=atoms.ca, cmap='seismic', markersize=8)
In [56]: plt.xlabel('Residue')
In [57]: plt.ylabel('Residue')
In [58]: plt.clim([-3,3])