# Finding contacts between atoms in a protein: contact maps
Contacts are a useful tool to analyse protein structures. They simplify the 3-Dimensional view of the structures into a 2-Dimensional set of contacts between its atoms or its residues. The representation of the contacts in a matrix is known as the contact map. Many protein structure analysis and prediction efforts are done by using contacts. For instance they can be useful for:
+ development of structural alignment algorithms [Holm 1993][] [Caprara 2004][]
+ automatic domain identification [Alexandrov 2003][] [Emmert-Streib 2007][]
+ structural modelling by extraction of contact-based empirical potentials [Benkert 2008][]
+ structure prediction via contact prediction from sequence information [Jones 2012][]
## Getting the contact map of a protein chain
This code snippet will produce the set of contacts between all C alpha atoms for chain A of PDB entry [1SMT](https://www.rcsb.org/structure/1SMT):
```java
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
Structure structure = StructureIO.getStructure("1SMT");
Chain chain = structure.getChainByPDB("A");
// we want contacts between Calpha atoms only
String[] atoms = {" CA "};
// the distance cutoff we use is 8A
AtomContactSet contacts = StructureTools.getAtomsInContact(chain, atoms, 8.0);
System.out.println("Total number of CA-CA contacts: "+contacts.size());
```
The algorithm to find the contacts uses spatial hashing without need to calculate a full distance matrix, thus it scales nicely.
## Getting the contacts between two protein chains
One can also find the contacting atoms between two protein chains. For instance the following code finds the contacts between the first 2 chains of PDB entry [1SMT](http://www.rcsb.org/pdb/explore.do?structureId=1SMT):
```java
AtomCache cache = new AtomCache();
StructureIO.setAtomCache(cache);
Structure structure = StructureIO.getStructure("1SMT");
AtomContactSet contacts =
StructureTools.getAtomsInContact(structure.getChain(0), structure.getChain(1), 5, false);
System.out.println("Total number of atom contacts: "+contacts.size());
// the list of atom contacts can be reduced to a list of contacts between groups:
GroupContactSet groupContacts = new GroupContactSet(contacts);
```
See [DemoContacts](https://github.com/biojava/biojava/blob/master/biojava-structure/src/main/java/demo/DemoContacts.java) for a fully working demo of the examples above.
[Holm 1993]: http://www.biomedcentral.com/pubmed/8377180
[Caprara 2004]: http://www.biomedcentral.com/pubmed/15072687
[Alexandrov 2003]: http://www.biomedcentral.com/pubmed/12584135
[Emmert-Streib 2007]: http://www.biomedcentral.com/pubmed/17608939
[Benkert 2008]: http://www.biomedcentral.com/pubmed/17932912
[Jones 2012]: http://www.ncbi.nlm.nih.gov/pubmed/22101153
---
Navigation:
[Home](../README.md)
| [Book 3: The Structure Modules](README.md)
| Chapter 12 : Contacts Within a Chain and between Chains
Prev: [Chapter 11 : Accessible Surface Areas](asa.md)
Next: [Chapter 13 - Finding all Interfaces in Crystal: Crystal Contacts](crystal-contacts.md)