Skip to content
Snippets Groups Projects
README.md 5.92 KiB
Newer Older
Lukas Pravda's avatar
Lukas Pravda committed
# PDBe interactions component

This is a web-component to display ligand structure in 2D along with its interactions. Ligand can be perceived as a set of covalently linked pdb residues (refered to as bound molecule) or a single pdb residue. This depiction can be enriched with a substructure highlight and binding site interactions.

Nurul Nadzirin's avatar
Nurul Nadzirin committed
## Step after cloning (use local server to see demo pages)

```shell
npm run-script build
Nurul Nadzirin's avatar
Nurul Nadzirin committed
cp demo* build/ (this copies demo_component.html and demo_plugin.html to build folder)
Nurul Nadzirin's avatar
Nurul Nadzirin committed
cd build
python3 -m http.server
```

Lukas Pravda's avatar
Lukas Pravda committed
## Component modes

Lukas Pravda's avatar
Lukas Pravda committed
* Mode A: Display bound molecule and its interactions
* Mode B: Display ligand and its interactions
* Mode C: Display ligand (chemical component) only
Lukas Pravda's avatar
Lukas Pravda committed

Lukas Pravda's avatar
Lukas Pravda committed
| Mode A | Mode B | Mode C |
Lukas Pravda's avatar
Lukas Pravda committed
|:------------------: | :-------: | :-------: |
Lukas Pravda's avatar
Lukas Pravda committed
| <img src="https://www.ebi.ac.uk/~lpravda/imgs/1cbs_REA_200_A.png"/>| <img src="https://www.ebi.ac.uk/~lpravda/imgs/3d12_bm1.png"/> | <img src="https://www.ebi.ac.uk/pdbe-srv/pdbechem/image/showNew?code=VIA&size=500"/> |
Lukas Pravda's avatar
Lukas Pravda committed
| [1cbs REA 200 A](https://www.ebi.ac.uk/pdbe/entry/pdb/1cbs/bound/REA) | 3D12 bm1 (`2xGLC-2xBGC-LXZ-NGA-GL0`)| [wwPDB CCD - VIA](https://pdbe.org/chem/VIA)
Lukas Pravda's avatar
Lukas Pravda committed

Lukas Pravda's avatar
Lukas Pravda committed
## How to use it
Lukas Pravda's avatar
Lukas Pravda committed

Lukas Pravda's avatar
Lukas Pravda committed
The component can be inserted into the pages by two different ways. Either as a `web-component` using html tag, or directly by using javascript as a `plugin`.
Lukas Pravda's avatar
Lukas Pravda committed

Lukas Pravda's avatar
Lukas Pravda committed
### Web-component
Lukas Pravda's avatar
Lukas Pravda committed

Lukas Pravda's avatar
Lukas Pravda committed
A few files needs to be imported in the page before the component is attempted to be loaded:
Lukas Pravda's avatar
Lukas Pravda committed

```html

Nurul Nadzirin's avatar
Nurul Nadzirin committed
<!-- D3 -->
<script src="https://d3js.org/d3.v5.min.js"></script>

Lukas Pravda's avatar
Lukas Pravda committed
<!-- CSS style to be used for scene drawing (required for saving SVGs.) -->
<link rel="stylesheet" href="pdbe-interactions-svg.css" />

<!-- UI icons -->
<link rel="stylesheet" href="https://ebi.emblstatic.net/web_guidelines/EBI-Icon-fonts/v1.3/fonts.css" /> 

<!-- Web component polyfill (only loads what it needs) -->
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs/webcomponents-lite.js" charset="utf-8"></script>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"
    charset="utf-8"></script>

<!--PDBe interactions component-->
<script type="module" src="pdbe-interactions-component-0.1.0.js"></script>
```

Lukas Pravda's avatar
Lukas Pravda committed
#### A) Ligand interactions
Lukas Pravda's avatar
Lukas Pravda committed

```html
Nurul Nadzirin's avatar
Nurul Nadzirin committed
<pdb-interactions pdb-id="1cbs" pdb-res-id="200" pdb-chain-id="A"></pdb-interactions>
Lukas Pravda's avatar
Lukas Pravda committed
```

Lukas Pravda's avatar
Lukas Pravda committed
#### B) Bound molecule interactions
Lukas Pravda's avatar
Lukas Pravda committed

```html
Nurul Nadzirin's avatar
Nurul Nadzirin committed
<pdb-interactions pdb-id="3d12" bound-molecule-id="bm1"></pdb-interactions>
Lukas Pravda's avatar
Lukas Pravda committed
```

Lukas Pravda's avatar
Lukas Pravda committed
#### C) Ligand/chemical component
Lukas Pravda's avatar
Lukas Pravda committed

```html
Nurul Nadzirin's avatar
Nurul Nadzirin committed
<pdb-interactions pdb-res-name="CLR" zoom-on ></pdb-interactions>
Lukas Pravda's avatar
Lukas Pravda committed
```

Lukas Pravda's avatar
Lukas Pravda committed
The component contains a number of properties that can be set, in order to change data that are being displayed. First you need to define a component on the page:
Lukas Pravda's avatar
Lukas Pravda committed

```html
<ligand-display id='SIA-component'></ligand-display>
```

Lukas Pravda's avatar
Lukas Pravda committed
and then inject data you want to display e.g.:
Lukas Pravda's avatar
Lukas Pravda committed

```javascript
let chemUrl = `https://www.ebi.ac.uk/pdbe/static/files/pdbechem_v2/SIA/annotation`;
Lukas Pravda's avatar
Lukas Pravda committed
let interactionsURL = "https://wwwdev.ebi.ac.uk/pdbe/graph-api/pdb/bound_ligand_interactions/4yy1/A/604";
Lukas Pravda's avatar
Lukas Pravda committed
let component = document.getElementById('SIA-component');

const depiction = await (await fetch(chemUrl)).json();
const interactionsData = await (await fetch(interactionsURL)).json();
const atomsToHighlight = ['C10', 'C11', 'O10'];

component.depiction = depiction;
component.ligandHighlight = atomsToHighlight;
component.interactions = interactionsData;
```

Lukas Pravda's avatar
Lukas Pravda committed
### Plugin

The component can be also added to DOM directly from JavaScript. There are some requirements

```html
Nurul Nadzirin's avatar
Nurul Nadzirin committed

<!-- D3 -->
<script src="https://d3js.org/d3.v5.min.js"></script>

Lukas Pravda's avatar
Lukas Pravda committed
<!-- CSS style to be used for scene drawing (required for saving SVGs.) -->
<link rel="stylesheet" href="pdbe-interactions-svg.css" />

<!-- UI icons -->
<link rel="stylesheet" href="https://ebi.emblstatic.net/web_guidelines/EBI-Icon-fonts/v1.3/fonts.css" />

Nurul Nadzirin's avatar
Nurul Nadzirin committed
<!--PDBe interactions plugin-->
<script src="pdbe-interactions-plugin.js"></script>
<link rel="stylesheet" href="pdbe-interactions.css" />

Lukas Pravda's avatar
Lukas Pravda committed
```

and then the component can be instantiated as simply as:

```javascript
let component = document.getElementById('SIA-component');
Lukas Pravda's avatar
Lukas Pravda committed
let uiParams = {
    reinitialize: true, // allow reinitialize option in the component menu
    zoom: true, // allow scene zoom
    fullScreen: true, // allow allow full screen option in the component menu
    downloadImage: true, // allow image download from  the component menu
    downloadData: true, // allow interactions data download from compoment menu
    center: true, // allow scene centering option from the component menu
    help: false, // allow help option from the component menu
    residueLabel: true, // show residue label
    tooltip: true // show residue tooltip on mouse hover
};

Lukas Pravda's avatar
Lukas Pravda committed
this.display = new Visualization(this, uiParams);

// to display bound molecule interactions
Lukas Pravda's avatar
Lukas Pravda committed
this.display.initBoundMoleculeInteractions('3d12', 'bm1');
Lukas Pravda's avatar
Lukas Pravda committed
// to display ligand interactions
this.display.initLigandInteractions('1cbs', 200, 'A');

// to display chemical component only
Lukas Pravda's avatar
Lukas Pravda committed
this.display.initLigandDisplay('HEM');
Lukas Pravda's avatar
Lukas Pravda committed
````

Lukas Pravda's avatar
Lukas Pravda committed
## Parameters

| Parametr            | Type      | Required | Description |
|-------------------- | --------- | -------- | -------     |
| pdb-id              | string    | No       | PDB id of a protein to retrieve interactions from. `(mode A and B only)` |
| bound-molecule-id   | string    | No       | PDB bound molecule id `(mode A only)` |
| pdb-res-name        | string    | No       | PDB residue name aka: *auth_comp_id* `(mode C only)`
| pdb-res-id          | number    | No       | PDB residue id aka: *auth_seq_id* `(mode B only)`
| pdb-chain-id        | string    | No       | PDB residue chain aka: *auth_asym_id*  `(mode B only)`|
| substructure        | string[]  | No       | List of atom names to be highlighted on the ligand structure |
| color               | string    | No       | HEX representation of the color highlight. `(Default: #D3D3D3)` |
| zoom-on             | boolean   | No       | Allow zoom functionality on the component level. |