Coot Interesting Places JSON Format
Coot Interesting Places JSON Format
Coot can display a navigable dialog of “interesting places” in a structure. For example, one might want to see the positions of validation outliers such as clashes, or indeed any noteworthy positions you might want to flag. The data are provided as a JSON file and loaded with:
coot.read_interesting_places_json_file("my_outliers.json")
The dialog is applied to whichever molecule is currently active.
Top-Level Structure
{
"title": "My Validation Results",
"sections": [ ... ]
}
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | No | Title shown in the dialog window. Defaults to "<Title>" if omitted. |
sections |
array | Yes | Array of section objects (see below). |
Sections
Each section becomes a labelled group in the dialog. A section contains a title and an array of items:
{
"title": "Van der Waals Clashes",
"items": [ ... ]
}
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | No | Heading for this group of items. |
items |
array | Yes | Array of item objects. |
Items
Each item represents a single interesting place. When the user clicks it, Coot navigates to the corresponding position in the structure.
Every item must have a position-type field that determines how Coot
locates the place. The supported position types are described below.
Common Fields
| Field | Type | Required | Description |
|---|---|---|---|
position-type |
string | Yes | One of: "by-atom-spec", "by-atom-spec-pair", "by-residue-spec", "by-coordinates". |
label |
string | Yes | Text shown on the button/entry in the dialog. |
badness |
number | No | A numeric severity score (between 0 and 1, where 1 is fully bad). When present, items are colour-coded by badness in the dialog. |
Position Type: by-atom-spec
Navigate to a single atom.
{
"position-type": "by-atom-spec",
"label": "Rotamer outlier: A PHE 42",
"atom-spec": ["A", 42, "", "CA", ""],
"badness": 3.5
}
An atom-spec is a 5-element array:
| Index | Type | Description |
|---|---|---|
| 0 | string | Chain ID |
| 1 | integer | Residue number |
| 2 | string | Insertion code (empty string if none) |
| 3 | string | Atom name |
| 4 | string | Alternate conformation ID (empty string if none) |
Position Type: by-residue-spec
Navigate to a residue (centres on the first atom found).
{
"position-type": "by-residue-spec",
"label": "Missing sidechain: A ARG 105",
"residue-spec": ["A", 105, ""],
"badness": 2.0
}
A residue-spec is a 3-element array:
| Index | Type | Description |
|---|---|---|
| 0 | string | Chain ID |
| 1 | integer | Residue number |
| 2 | string | Insertion code (empty string if none) |
Note: a 5-element array (matching atom-spec format) is also accepted — the last two elements are ignored.
Position Type: by-atom-spec-pair
Navigate to a pair (or more) of atoms. Used for clashes, bond/angle/torsion outliers, or any item that involves an interaction between atoms.
{
"position-type": "by-atom-spec-pair",
"label": "Clash: A GLN 323 O - A ILE 324 HG12, z=-6.2",
"atom-1-spec": ["A", 323, "", "O", ""],
"atom-2-spec": ["A", 324, "", "HG12", ""]
}
For angle outliers (3 atoms) and torsion outliers (4 atoms), additional atom specs can be included:
{
"position-type": "by-atom-spec-pair",
"label": "Torsion outlier: omega, A ALA 55 - A LYS 56, z=-13.9",
"atom-1-spec": ["A", 55, "", "CA", ""],
"atom-2-spec": ["A", 55, "", "C", ""],
"atom-3-spec": ["A", 56, "", "N", ""],
"atom-4-spec": ["A", 56, "", "CA", ""]
}
| Field | Type | Required | Description |
|---|---|---|---|
atom-1-spec |
atom-spec | Yes | First atom. |
atom-2-spec |
atom-spec | Yes | Second atom. |
atom-3-spec |
atom-spec | No | Third atom (for angles/torsions). |
atom-4-spec |
atom-spec | No | Fourth atom (for torsions). |
Position Type: by-coordinates
Navigate to an arbitrary point in space (no atom or residue required).
{
"position-type": "by-coordinates",
"label": "Unmodelled density blob",
"position": [12.5, 34.2, -7.8]
}
| Field | Type | Required | Description |
|---|---|---|---|
position |
array of 3 numbers | Yes | Cartesian coordinates [x, y, z] in Angstroms. |
Complete Example
{
"title": "Servalcat Validation",
"sections": [
{
"title": "Van der Waals Clashes",
"items": [
{
"position-type": "by-atom-spec-pair",
"label": "Clash: A GLN 323 O - A ILE 324 HG12, z=-6.2",
"atom-1-spec": ["A", 323, "", "O", ""],
"atom-2-spec": ["A", 324, "", "HG12", ""]
},
{
"position-type": "by-atom-spec-pair",
"label": "Clash: A LYS 343 CB - A GLU 344 HA, z=-5.6",
"atom-1-spec": ["A", 343, "", "CB", ""],
"atom-2-spec": ["A", 344, "", "HA", ""]
}
]
},
{
"title": "Rotamer Outliers",
"items": [
{
"position-type": "by-residue-spec",
"label": "Rotamer outlier: A PHE 42",
"residue-spec": ["A", 42, ""],
"badness": 3.5
}
]
},
{
"title": "Unmodelled Blobs",
"items": [
{
"position-type": "by-coordinates",
"label": "Blob near A ASP 200 (12.3 sigma)",
"position": [45.2, 12.8, -3.1]
}
]
}
]
}
Notes
- The dialog operates on the currently active molecule. Make sure the relevant model is centered before loading the JSON file.
- Sections can be empty (
"items": []) but will still appear as a group heading. - The
badnessfield is optional. When present, it affects the colour of the entry in the dialog (higher values = worse). - Atom and residue specs must exactly match atoms in the loaded model — if an atom is not found, that item will be silently skipped.
- Insertion codes and alternate conformations should be empty strings
(
"") when not applicable, not omitted from the array.