Skip to content

biotite-dev/springcraft

Repository files navigation

Springcraft

Springcraft is a Biotite extension package, that allows the analysis of AtomArray objects via Elastic Network Models (ENMs). An ENM can be thought of as a system that connects residues via springs: Interaction of nearby residues is governed by a harmonic potential, with the native (input) conformation representing the energy minimum. Normal mode analysis allows the researcher to investigate global functional movements of a protein in a fast coarse-grained manner.

Note

Springcraft is still in alpha stage. Although most implemented functionalities should already work as expected, some features are not well tested, yet.

Installation

Springcraft can be installed via

$ pip install springcraft

or

$ conda install -c conda-forge springcraft

You can also install Springcraft from source. The package uses Poetry for building distributions. Via PEP 517 it is possible to install the package from local source code via pip:

$ git clone https://github.com/biotite-dev/springcraft.git
$ pip install ./springcraft

A development conda environment with all required dependencies for testing can be installed from environment.yml

Scripts to generate reference files for tests are stored in tests/data; a separate environment to rerun these locally can be found in test_create_data_env.yml. BioPhysConnectoR has to be installed separately.

Example

import numpy as np
import biotite.structure.io.pdbx as pdbx
import springcraft


pdbx_file = pdbx.PDBxFile.read("path/to/1l2y.cif")
atoms = pdbx.get_structure(pdbx_file, model=1)
ca = atoms[(atoms.atom_name == "CA") & (atoms.element == "C")]
ff = springcraft.InvariantForceField(cutoff_distance=7.0)
gnm = springcraft.GNM(ca, ff)
kirchhoff = gnm.kirchhoff

np.set_printoptions(linewidth=100)
print(kirchhoff)

Output:

[[ 4. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [-1.  6. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  0.]
 [-1. -1.  7. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  0.]
 [-1. -1. -1.  7. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [-1. -1. -1. -1.  8. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0. -1. -1. -1. -1.  9. -1. -1. -1.  0. -1.  0.  0.  0.  0.  0.  0. -1.  0.  0.]
 [ 0.  0. -1. -1. -1. -1.  8. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0. -1. -1. -1. -1.  7. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0. -1. -1. -1. -1.  7. -1. -1.  0.  0. -1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0. -1. -1. -1.  7. -1. -1. -1. -1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0. -1. -1. -1. -1. -1.  8. -1. -1. -1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1.  7. -1. -1. -1. -1. -1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1.  5. -1. -1.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1. -1. -1.  7. -1. -1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1.  4. -1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  0. -1. -1.  5. -1. -1.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1.  0.  0.  0. -1.  4. -1. -1.  0.]
 [ 0.  0.  0.  0.  0. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1.  5. -1. -1.]
 [ 0. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1.  5. -1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1.  2.]]