Skip to main content

Generate Mol* views using this simple Python library, which allows you to compose complex scenes in a step-wise manner.

Project description

PyPI version Changelog

MolViewSpec

MolViewSpec (*.msvj) is a JSON-based file format that is used to describe visual scenes or views used in molecular visualization. It adopts declarative data-driven approach to describe, load, render, and visually deliver molecular structures, along with 3D representations, coloring schemes, and associated structural, biological, or functional annotations. This Python toolkit allows for describing the information required for representing a molecular view state as data in a nested tree format that can be consumed by visualization software tools such as Mol*.

When using MolViewSpec, please cite:

Sebastian Bittrich, Adam Midlik, Mihaly Varadi, Sameer Velankar, Stephen K. Burley, Jasmine Y. Young, David Sehnal, Brinda Vallat: Describing and Sharing Molecular Visualizations Using the MolViewSpec Toolkit, Current Protocols, 2024; https://doi.org/10.1002/cpz1.1099.

The Idea behind MolViewSpec

In the long run, MolViewSpec aims to re-imagine how users define molecular scenes by detaching this process from any concrete 3D viewer.

MolViewSpec's workflow is:

  1. define scene using MolViewSpec
  2. generic state description as .msvj
  3. open in any MolViewSpec-compatible 3D viewer

Opposed to the traditional workflow that locks users into using a specific 3D viewer, such as:

  1. define scene in Mol*
  2. Mol*-specific state format
  3. open only in Mol*

See the MolViewSpec in Action

Colab Notebook: https://colab.research.google.com/drive/1O2TldXlS01s-YgkD9gy87vWsfCBTYuz9

Access Type Definitions

All type definitions can be found here:

Description of the MolViewSpec State Tree

MolViewSpec provides a generic description of typical visual scenes that may occur as part of molecular visualizations. A tree format allows the composition of complex scene descriptors by combining reoccurring nodes that serve as building blocks.

Nodes can be nested to allow chaining of operations as child nodes will be applied to the result of the operation described by its parent node.

The corresponding MolViewSpec tree is provided in JSON and may look like this:

{
  "root": {
    "kind": "root",
    "children": [
      {
        "kind": "download",
        "params": {
          "url": "https://files.wwpdb.org/download/1cbs.cif"
        },
        "children": [
          {
            "kind": "parse",
            "params": {
              "format": "mmcif"
            },
            "children": [
              {
                "kind": "structure",
                "params": {
                  "type": "model"
                },
                "children": [
                  {
                    "kind": "component",
                    "params": {
                      "selector": "all"
                    },
                    "children": [
                      {
                        "kind": "representation",
                        "params": {
                          "type": "cartoon"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "metadata": {
    "version": "0.1",
    "timestamp": "2023-11-16T11:41:07.421220"
  }
}

Mol* is the reference implementation for reading MolViewSpec files.

The Tree Root

Every tree starts with a single root node, which contains all nodes in a structure fashion, and a metadata node, which can hold additional information such as a version tag as well as the timestamp when a view was created.

{
  "root": {},
  "metadata": {
    "version": "0.1",
    "timestamp": "2023-11-16T11:41:07.421220"
  }
}

The root Node

All nodes of the tree must define their kind and may have 0 or more child nodes (children). The root is a special node with a kind of root that contains a collection of children.

{
  "kind": "root",
  "children": []
}

The download Node

Node types other than the root may contain an optional params property. A common action is loading of 3D structure data. This is done using a node of kind download. In this context, params can for example provide the url from which data will be loaded from.

{
  "kind": "download",
  "children": [],
  "params": {
    "url": "https://files.wwpdb.org/download/1cbs.cif"
  }
}

The parse Node

The previous download operation merely obtains the resources from the specified URL. To make it available to the viewer, the data must be parsed. This operation expects that the format is defined (in this case mmCIF is parsed).

{
  "kind": "parse",
  "children": [],
  "params": {
    "format": "mmcif"
  }
}

The structure Node

There are different ways to load the content of a mmCIF file. Common actions are loading the 1st biological assembly or loading the deposited coordinates (also called "asymmetric unit" or "model coordinates"). The action is defined as kind. In this example, the model coordinates are loaded.

{
  "kind": "structure",
  "children": [],
  "params": {
    "kind": "model"
  }
}

The component Node

At this point, the loaded file is available in the viewer but nothing is visualized yet. Several selection (called "components") can be created. The example creates a component that includes everything using a selector set to all. Other options could be a selection for protein chains, nucleic acids, ligands etc. Components are reusable groups of atoms, residues, or chains, which can be interacted with programmatically.

{
  "kind": "component",
  "children": [],
  "params": {
    "selector": "all"
  }
}

The representation Node

The representation nodes applies to previously created components, which is provided by the parent node of a representation node. Representations are dedicated visuals that constitute a component. In this example, the selection from above -- which selects the entire structure -- and depicts it as cartoon by specifying cartoon as type.

{
    "kind": "representation",
    "params": {
      "type": "cartoon"
    }
}

Expanding the Tree

Nodes can have 0 or more nodes as children. It is, for example, possible to create multiple component nodes based on a particular structure node to create different representations for different types of molecules.

Development

Install from PyPI

pip install molviewspec

Find the package at: https://pypi.org/project/molviewspec/

Setting up the environment

micromamba env create -f ./environment.yaml
micromamba activate mol-view-spec-dev

Running the server

cd molviewspec
python serve.py # or make serve

will run the server on localhost:9000 with reload mode on.

  • API Docs: http://localhost:9000/docs
  • Example: http://localhost:9000/api/v1/examples/load?id=1tqn

Testing API examples

Start the server and run

cd molviewspec
python test_server.py

Will call all API endpoint that can be called without arguments.

Formatting the Project

cd molviewspec
make format
make mypy

Publishing the Python Library

Mol* Extension

MolViewSpec is supported in Mol* via an official extension.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

molviewspec-1.4.0.tar.gz (30.0 kB view details)

Uploaded Source

Built Distribution

molviewspec-1.4.0-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file molviewspec-1.4.0.tar.gz.

File metadata

  • Download URL: molviewspec-1.4.0.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for molviewspec-1.4.0.tar.gz
Algorithm Hash digest
SHA256 d62d50b67da0bc7c3aafc59505dd69ee74341772605f2d9d4f68b54a8d8d35c1
MD5 9bf0724ab82ca4c7053c16414dbbd7ea
BLAKE2b-256 bf67d07508a7a39af99d561f12f0f903e79ab55f718565fc2f74aed1a6955ef2

See more details on using hashes here.

File details

Details for the file molviewspec-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: molviewspec-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for molviewspec-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d2a29066f9bf01f9f3c7a4275a998bea9fa4c66adf33b061272e742fca5dc2c4
MD5 e939be3dd2b74179214094ad83d30b66
BLAKE2b-256 b9f04c260b693e3e550f8da6ce2167efdb7edc8593f42ac749028f2c7b04c716

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page