Internal:GPCD: Difference between revisions

From crtc.cs.odu.edu
Jump to navigation Jump to search
Angelos (talk | contribs)
No edit summary
Nikos (talk | contribs)
m Reverted edits by Spyridon97 (talk) to last revision by Angelos
 
(529 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[File:underConstruction.png|center|500px]]
== Introduction ==
== Introduction ==


Line 11: Line 9:


# '''Void''': A cavity that looks like internal "hole" in a protein with no connection to the surface.
# '''Void''': A cavity that looks like internal "hole" in a protein with no connection to the surface.
# '''Cleft''': A pocket that looks like a small "dent" in the surface of a protein. Can also be found as part of a tunnel or channel.
# '''Cleft''': A pocket that looks like a "dent" in the surface of a protein. Can also be found as part of a tunnel or channel.
# '''Invagination''': A pocket that looks like a "cove". It has a small opening on the surface of a protein and leads to a larger interior. Can also be found as part of a tunnel or after a cleft.
# '''Invagination''': A pocket that looks like a "cove". It has a small opening on the surface of a protein and leads to a larger interior. Can also be found as part of a tunnel or after a cleft.
# '''Tunnel''': A pocket that has an opening on the surface of a protein and leads to somewhere in the interior. Has no opening on the other side.
# '''Tunnel''': A pocket that has an opening on the surface of a protein and leads to somewhere in the interior. Has no opening on the other side.
Line 29: Line 27:




== New Parallel Methods ==
== Literature Review ==
 
=== MOLE ===
 
==== Method ====
The MOLE algorithm is specifically designed to identify tunnels and channels. Finding superficial cavities is a secondary concern and does so as part of the surface approximation step. MOLE utilizes the surface obtained by the refinement of the convex hull to find superficial cavities such as clefts and invaginations. In essence, the approximation of a more accurate surface and the detection of these superficial cavities are closely related. As tetrahedra are removed from the convex hull to get a more accurate surface approximation, a parameter called ''interior threshold'' controls how many superficial cavities are found. For example, if the number of tetrahedra removed from a specific part of the molecule exceeds this threshold, the algorithm marks these tetrahedra as part of a superficial cavity.
 
 
[[File:moleVoronoiTunnelPath.jpg|center|frame| Figure 4: Shows in 2D the Voronoi diagram (thin lines) and the convex hull (dotted line) of molecule represented by atoms (circles). Each Voronoi edge is evaluated by the cost function (numbers). The thick line represents the optimal path found by the Dijkstra's algorithm from the given starting point (black circle), i.e., centerline of found tunnel. [1]]]
 
 
For the more complicated types of cavities, tunnels and channels, MOLE uses the Voronoi diagram to identify them. Start and end points are defined as the centers of the deepest tetrahedra in each cavity. The depth of the tetrahedron is defined as the number of Voronoi edges from the closest boundary tetrahedron (on the surface). Tunnels/channels are computed as the shortest paths between all pairs of start and end points in the same cavity diagram.
 
[[File:MoleDijkstraWeightFunction.png|center|frame| Figure 5: Shows the weight function used to estimate the weight of each Voronoi edge for Dijkstra's algorihtm. l(e) is the length of the edge, d(e) is the distance of the edge to the closest atom Van der Waals sphere and ϵ is a small number to avoid division by zero [1]]]
 
==== Complexity ====
* Worst-case: O(N^2 log N), where N is the number of atoms in the molecule.
* Average: O(M log M), where M is the number of vertices in the Voronoi diagram (in the worst case, M = N^2, but in most cases M = O(N)). As a result of the use of the incremental algorithm and Hilbert curve ordering, the complexity of calculating the Delaunay triangulation of most molecular structures is O(N log N). Finally, the complexity of all the remaining steps of the algorithm is at most O(M log M).
 
 
=== MolAxis ===
 
==== Method ====
The MolAxis algorithm relies on Voronoi and Dijkstra's algorithm to find channels, similarly to MOLE. The algorithm consists of the following high-level steps:
 
# Approximate the molecule using a collection of '''fixed-size spheres'''. The number of balls needed depends on the required quality of the approximation. In the extreme case, where the user is interested in a high resolution, each atom is approximated using a single sphere.
# Compute the '''Voronoi diagram''' of the centers of the fixed-sized spheres. The diagram is intersected with a user-defined bounding sphere. This defines the area of interest.
# Discard the parts of the Voronoi diagram that intersect the molecule.
# Define a '''graph''', using the Voronoi vertices and edges. A weight is given to each edge, which depends on its length and on its distance from the surface of the molecule.
# Define a '''source point (root vertex)'''. The user can either supply a source point or allow MolAxis to automatically choose the source point to be the '''center of the largest cavity in the molecule''' (basically detect channels inside-out).
# Apply a shortest path optimization algorithm ('''Dijktra's algorithm''') on the graph, computing a tree called the "corridor tree".
# The desired channels are paths in the corridor tree. Duplicate channels are avoided by using the split distance parameter. The split distance bounds the distance to the least common ancestor of the channel and all previously reported channels.
 
 
[[File:MolAxisVoronoi.png|center|frame| Figure 6: Shows an example of fixed-size circles (light-blue) approximating varying-size circles and the pathway diagram of their centers. The discarded portion of the Voronoi diagram of their centers is depicted using dotted lines [2]. This figure also helps illustrate the usefulness of the Voronoi tessellation in computing pathways.]]


=== 1. PODM Tessellation Using Van der Waals Surface Image Input ===
== Protein Energetics ==
=== Metrics ===
# '''Hydrophobicity''': Physical property of a molecule that is seemingly repelled from a mass of water. Hydrophilic molecules are attracted to water. Hydrophobicity plays a major role in protein folding. Hydrophobic molecules also tend to be nonpolar and prefer other neutral molecules and nonpolar solvents. Hydrophobicity is the most widely used metric.
# '''Hydrogen Bonds''': Weak bonds between two molecules resulting from an electrostatic attraction between a proton in one molecule and an electronegative atom in the other. We often see these bonds between oxygen and hydrogen.
# '''Van der Waals Interactions''': Also known as Van der Waals forces, they are forces driven by induced electrical interactions between two or more atoms or molecules that are very close to each other. Van der Waals interaction is the weakest of all intermolecular attractions between molecules. These forces are distance-dependent.
# '''Salt Bridges''': Non-covalent (no sharing of eletrons; electromagnetic) interaction between two ionized sites. It has two components: a hydrogen bond and an electrostatic interaction.
# '''Disulfide Bridges''': Strong bonds that can form between two cysteines (an amino acid). The strength of disulfide bridges helps stabilize a protein. Disulfide bridges are especially common in proteins that are secreted from cells.
# '''Charge''': Plays a role in strength of bonds. A higher charge means that an atom will have stronger forces in an electromagnetic field.
# '''Polarity''': Separation of electric charge leading to a molecule or its chemical groups having an electric dipole moment, with a negatively charged end and a positively charged end. Indicates the existence of polar bonds, which are covalent (sharing of electrons) and are quite strong. About [https://chem.libretexts.org/Bookshelves/Inorganic_Chemistry/Book%3A_Introduction_to_Inorganic_Chemistry/01%3A_Review_of_Chemical_Bonding/1.04%3A_Bond_Polarity_and_Bond_Strength bond polarity].


The first method that could be used for detecting protein cavities in parallel involves using PODM to create a tessellation of an image representation of the Van der Waals surface of a protein. The Van der Waals surface is an accurate representation of the surface of a protein and represents each atom as a sphere of a radius corresponding to its Van der Waals radius.
== Candidate Method: Geometric Protein Cavities Detection ('''GPCD''') ==
The Pipeline contains the following high-level algorithmic steps:


The steps for this method are outlined below:
=== (Angelos/Spiros) Read protein ===
# Input: PDB file
# Output: A Polydata of the protein
# Algorithmic Step:
## Using vtkPDBReader, read the PDB file that included the protein. [<span style="color:green">DONE</span>]
# Challenges:
## Upgrade vtkPDBReader to be able to manage multimodel proteins [<span style="color:green">DONE</span>]
## Fix VTKPDBReader error of setting wrong atom numbers [<span style="color:green">DONE</span>]
## Set up vtkPDBReader to utilize [https://sourceforge.net/projects/bodr/ The Blue Obelisk Dataset] for the Covalent radius and Van-der-Waals radius [<span style="color:green">DONE</span>]
# Ideas that might be used:
## Improve [https://sourceforge.net/projects/bodr/ The Blue Obelisk Dataset] by using: [<span style="color:orange">TODO</span>]
### updated Van-der-Waals radius values provided by Los Alamos National Laboratory
### updated Covalent radius values provided by Cambridge Structural Database


# '''Compute the Van der Waals surface''': This polygonal surface can be computed using UCSF Chimera. However, because the implementation is sequential, this step can present a major bottleneck in the overall method. In order to speed the process up, a custom parallel implementation to generate this surface is necessary.
=== (Spiros/Angelos) Remove Het Atoms ===
# '''Generate image of the Van der Waals surface''': Because PODM requires an image as input, the polygonal Van der Waals surface needs to be converted to an image. This is done by "filling" the polygonal surface with a constant value. The segmentation module of 3D Slicer can be used for doing this, but as before, this step can present a major bottleneck because the implementation is sequential. A custom parallel implementation is once again necessary.
# Input: A Polydata of the protein
# '''Compute Delaunay tessellation using PODM''': Once we have the image of the Van der Waals surface, we use PODM to compute the Delaunay tessellation in parallel. A low enough delta should be used to ensure that the surface is as accurately captured as possible.
# Output: A Polydata of the protein without Het atoms
# '''Compute Voronoi tessellation using PODM''': The next step is to compute the Voronoi tessellation as the dual of the Delaunay tessellation in parallel. The Voronoi tessellation is useful for quickly identifying tunnels using Dijkstra's algorithm.
# Algorithmic step:
# '''Identify cavities in parallel''': With the Delaunay and Voronoi tessellations computed, the cavities now need to identified in parallel. It is crucial that this step is done in parallel as no other method implements "proper" parallelization. This is by far the most challenging step.
## Using vtkSelectionFilter, we extract all the non-Het atoms. [<span style="color:green">DONE</span>]
# '''Output detected cavities as tessellations''': The last step is to output the detected cavities as a tessellated mesh. It is important to only include the identified cavities in this mesh by representing them as tetrahedra. This way, researchers can overlay the normal protein structure with the tessellations of the cavities and easily see where they are.


=== (Spiros/Angelos) Sort Atoms By Radius ===
# Input: A Polydata of the protein without Het atoms
# Output: A Polydata of the protein without Het atoms sorted by radius in descending order
# Algorithmic step:
## Using vtkSortFieldData we sort the non-Het atoms by radius in descending order. [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]


[[File:COVID-19-Spike-Glycoprotein-6vxx,d=5.png|center|thumb|800px| Figure 4: A tessellation based on the Van der Waals surface of the COVID-19 spike glycoprotein (6vxx)]]
=== (Spiros) Extract protein Chains ===
# Input: A Polydata of the protein without Het atoms sorted by radius in descending order
# Output: A vector of Polydata of the protein chains without Het atoms sorted by radius in descending order
# Algorithmic step:
## Using vtkSelectionFilter, we extract all the protein-chains. [<span style="color:green">DONE</span>]
### Note: This way we can mesh each chain individually


=== 2. PODM Tessellation Using Point Cloud of Atoms ===
=== (Spiros/Αngelos) Compute the Solvent Excluded Image ===
# Input: A Polydata of a chain of the protein without Het atoms sorted by radius in descending order, probe radius, spacing
# Output: Solvent Excluded Image of chain
# Algorithmic steps:
## Create the Solvent Accessible image by creating spheres for each atom that their radius is: Van der Waals radius + probe radius. [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]
## Perform Euclidean Distance Transform on the Solvent Accessible image. [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]
## Extract Solvent Excluded image from the EDT result by setting: [<span style="color:green">DONE</span>]
### All pixel values < probe-radius - truncationError[atomType] - paddingDistance = 0
### All pixel values >= probe-radius - truncationError[atomType] - paddingDistance = 1
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]
# Challenges:
## Handle the calculation of truncationError[atomType] in a thread-safe way by sorting the atoms by radius in descending order [<span style="color:green">DONE</span>]
### Truncation error is caused because of the spacing of the image.
## Select a paddingDistance value to help PODM3D produce an accurate surface [<span style="color:green">DONE</span>]
## Close holes that should not exist (based on other surfaces) [<span style="color:green">DONE</span>]


The second method involves giving PODM a point cloud of atoms and creating a tessellation from that. This would require that the Delaunay triangulation is generated and a method for computing an accurate surface for the point cloud is employed. Computing this surface is one of the most challenging steps of this method. A method that could be employed is α-shapes, but this has the disadvantage of not guaranteeing connectivity between tetrahedra. A custom method might need to be devised.
=== (Spiros) Compute the Solvent Excluded Surface ('''SES''')===
# Input: Solvent Excluded Image of chain
# Output: Solvent Excluded Surface of chain
# Algorithmic steps:
## Using '''PODM3D''', produce a volumetric mesh of the image. [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]
## Using '''PODM3D''', extract the surface of the volumetric mesh. [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be employed [<span style="color:green">DONE</span>]
# Advantages:
## Can control the number of elements on the surface
## the edge lengths bounds are relatively small which helps in the clustering.
# Challenges:
## Using vtkDataSetSurfaceFilter, fix the issue of surface triangles being oriented the wrong way. [<span style="color:green">DONE</span>]
## Select a default delta value. [<span style="color:green">DONE</span>]
## Surface needs to be smoothed. [<span style="color:orange">TODO</span>]


The steps for this method are outlined below:
=== (Spiros/Angelos) Merge Protein Chain SESs ===
# Input: A vector of the Solvent Excluded Surface of chains
# Output: Solvent Excluded Surface
# Algorithmic step:
## Using vtkAppendPolyData, we merge all the protein-chains surfaces polydata. [<span style="color:green">DONE</span>]


# '''Read PDB file and make point cloud of atoms''': The first step would be to read an input PDB file for a protein and create a point cloud of atoms.
=== (Angelos/Spiros) Compute ambient occlusion of the SES ===
# '''Compute Delaunay triangulation using PODM''': The second step is to compute the Delaunay triangulation from the point cloud in parallel. This will produce an inaccurate surface that needs to be refined.
# Input: Solvent Excluded Surface
# '''Compute accurate surface''': The Delaunay triangulation on a point cloud of atoms produces a surface that does not reflect the actual surface of the protein. As a result, an accurate surface needs to computed by refining the triangulation. This would involve removing tetrahedra until an accurate surface is found. This should be done in parallel.
# Output: Ambient Occlusion values of surface points, normals of surface points
# '''Compute Voronoi tesselation''': Once the accurate surface is determined the Voronoi tessellation must be computed. This step could be done before the accurate surface is computed, but we would also have to refine the Voronoi if that is to happen.
# Algorithmic step:
# '''Identify cavities in parallel''': With the Delaunay and Voronoi tessellations computed, the cavities now need to identified in parallel. It is crucial that this step is done in parallel as no other method implements "proper" parallelization. This is by far the most challenging step.
## Using IGL Library, which uses [https://www.embree.org/ Embree] and [https://eigen.tuxfamily.org/dox/ Eigen], calculate normals of surface points and then calculate Ambient occlusion values for all the surface points [<span style="color:green">DONE</span>]
# '''Output detected cavities as tessellations''': The last step is to output the detected cavities as a tessellated mesh. It is important to only include the identified cavities in this mesh by representing them as tetrahedra. This way, researchers can overlay the normal protein structure with the tessellations of the cavities and easily see where they are.
### '''Note''': Shared memory parallelism can be used [<span style="color:green">DONE</span>]
### '''Note''': GPU parallelism can be used [<span style="color:orange">TODO</span>]
# Ideas that might be used:
## Assign the ambient occlusion value of a triangle by calculating the average of its points. [<span style="color:orange">TODO</span>]
### This can be used for a cell-based clustering method in order to eliminate the noise values caused by the '''PODM3D''''s solvent accessible surface.


===(Spiros) Compute Surface Statistics ===
# Input: Solvent Excluded Surface
# Output: Statistics of Surface Triangles' Edges
# Algoritmic step:
## Compute min/mean/median/max edge lengths of the surface triangles [<span style="color:green">DONE</span>]
### '''Note''': Shared memory parallelism can be used [<span style="color:green">DONE</span>]


[[File:6vxxPointCloud.jpeg|center|thumb|800px| Figure 5: The atomic point cloud of the COVID-19 spike glycoprotein (6vxx)]]
=== (Angelos) Detect protein cavities ===
# Input: Solvent Excluded Surface, Ambient Occlusion values of surface points, Surface Statistics
# Output: Atomic Cavities
# Algorithmic step:
## Using a modified version of the clustering method '''DBSCAN''', that finds neighbors based on their density '''and''' ambient occlusion values, form clusters that define protein cavities. [<span style="color:green">DONE</span>]
### '''Note''': shared memory parallelism can be employed, see [https://link.springer.com/article/10.1023/A:1009884809343 A Fast Parallel Clustering Algorithm for Large Spatial Databases PDBSCAN] [<span style="color:orange">TODO</span>]
# Challenges:
## Tune the clustering parameters '''eps / search-radius''' using the surface statistics. [<span style="color:green">DONE</span>]
## Handle non-deterministic Solvent Excluded Surface of '''PODM3D'''. [<span style="color:orange">TODO</span>]
# Ideas that might be used:
## [https://pdfs.semanticscholar.org/f730/194462fb6bfcd0b90d7f22a960ed58d77199.pdf A Novel Spatial Clustering Algorithm Based on Delaunay Triangulation]  [<span style="color:orange">TODO</span>]
## [https://dl.acm.org/doi/abs/10.1145/304181.304187 OPTICS: ordering points to identify the clustering structure] [<span style="color:orange">TODO</span>]


== Challenges ==
=== (Angelos/Spiros) Classify clusters based on the type of cavity they are: ===
# Input: Solvent Excluded Surface, Atomic Cavities, Atom Types of surface points
# Output: Labeled atomic Cavities
# Algorithm steps:
# Ideas that might be used:
## Ambient occlusion values based classification using mean distance cluster value [<span style="color:orange">TODO</span>]
### '''Note''': Shared memory parallelism can be used [<span style="color:orange">TODO</span>]
## Analyze the shape of clusters to identify what type of cavity they are. [<span style="color:orange">TODO</span>]
### This can potentially be done using machine learning.
### '''Note''': Shared memory parallelism can be used [<span style="color:orange">TODO</span>]


There are several challenges that need to be addressed if we are to have a good parallel solution for detecting protein cavities.
===(Spiros) Classify Atom Types of surface points ===
# Input: Solvent Excluded Surface, a Polydata of the protein without Het atoms sorted by radius in descending order
# Output: Atom Types of surface points
# Algorithmic step:
## Using a KD-tree, for each surface point, find the closest atom: [<span style="color:green">DONE</span>]
### If the surface point is within the radius of the closest atom, assign the atom type of the closest point to the surface point
### Else, assign '''0''', which means the surface point is part of the re-entrance surface.
### '''Note''': Shared memory parallelism can be used [<span style="color:green">DONE</span>]
# Challenges:
## Find an ideal offset distance value between the surface points and their closest atoms to improve accuracy. [<span style="color:orange">TODO</span>]
### Idea: use the truncationError[AtomType]
# Ideas that might be used:
## create a different kd-tree for each protein chain [<span style="color:orange">TODO</span>]


=== 1. Expensive Pre-Processing ===
=== (Spiros/Angelos) Map Electrostatics Potentials on Surface Points ===
# Input: Solvent Excluded Surface, Electrostatic Potentials Image '''ESP''' of [http://www.poissonboltzmann.org/ APBS], normals of surface points, probe radius, lowerThreshold-upperThreshold
# Output: Electrostatic values of surface points
# Algorithmic steps:
## For each surface point: [<span style="color:green">DONE</span>]
### Scale the point using normals, and probe radius to the solvent-accessible surface,
### Get the value of the closest pixel from the '''ESP''' to the scaled point:
#### If value > upperThreshold, set electrostatic value of point = upperThreshold
#### Else if, value < lowerThreshold, set electrostatic value of point = lowerThreshold
#### Else get the interpolated value of the scaled points from the image:
##### If interpolated value > upperThreshold, set electrostatic value of point = upperThreshold
##### Else if, interpolated value < lowerThreshold, set electrostatic value of point = lowerThreshold
### '''Note''': Shared memory parallelism can be used [<span style="color:green">DONE</span>]
# Challenges:
## Create reader of the [https://www.ics.uci.edu/~dock/manuals/apbs/html/user-guide/x2674.html OpenDx] file format that is used as output by APBS [<span style="color:green">DONE</span>]


The parallel methods involving the Van der Waals surface, especially the one with the image input have expensive pre-processing. For large molecules, getting this surface can be slow because existing implementations are sequential and written in Python. We need to come up with a way quickly generate this surface and its image representation.
=== (Angelos/Spiros) Write Labeled Solvent Surface Surface:  ===
# Input: Labeled Solvent Surface Surface
# Output: solventSurfaceSurface.vtp
# Algorithmic step:
## Using a vtkXMLPolyDataWriter, write the output file. [<span style="color:green">DONE</span>]
# Ideas that might be used:
## Note: a Paraview plugin may be developed for visualization purposes. [<span style="color:orange">TODO</span>]


=== GPCD vs MOLE ===
{| class="wikitable"
|-
! scope="col" | Feature
! scope="col"| GPCD
! scope="col"| MOLE
|-
! scope="row"| Detect Surface Cavities
| style="background-color: green; color: white;" | YES (more)
| style="background-color: green; color: white;" | YES (less)
|-
! scope="row"| Detect Interior Cavities
| style="background-color: green; color: white;" | YES
| style="background-color: green; color: white;" | YES
|-
! scope="row"| Visualize Exact Channel Shape
| style="background-color: red; color: white;" | NO
| style="background-color: green; color: white;" | YES
|-
! scope="row"| Works on Very Large Molecules
| style="background-color: green; color: white;" | YES
| style="background-color: red; color: white;" | NO (very slow)
|-
! scope="row"| Works on Multi-Model Files
| style="background-color: green; color: white;" | YES
| style="background-color: red; color: white;" | NO
|-
! scope="row"| Parallelization
| style="background-color: green; color: white;" | YES
| style="background-color: red; color: white;" | NO
|-
! scope="row"| Relative Performance
| style="background-color: green; color: white;" | VERY FAST
| style="background-color: red; color: white;" | SLOW
|-
! scope="row"| Intuitive Visualization
| style="background-color: green; color: white;" | YES
| style="background-color: green; color: white;" | YES
|-
! scope="row"| False Positives
| style="background-color: orange; color: white;" | YES (more)
| style="background-color: green; color: white;" | YES (less)
|-
! scope="row"| Quantify Major Structural Features
| style="background-color: green; color: white;" | YES
| style="background-color: red; color: white;" | NO
|}


[[File:6vxxVanDerWaalsSurface.png|center|thumb|800px| Figure 6: The Van der Waals surface of the COVID-19 spike glycoprotein (6vxx)]]
=== Resources ===
* [https://blog.kitware.com/what-is-interpolatescalarsbeforemapping-in-vtk/ ParaView vertex colors]


=== 2. Massive Parallelism ===
== Resources ==


The solution we will implement may need to support massive parallelism, ideally using MPI. The reason for this is that molecular dynamics simulations can potentially involve a massive number of atoms. If we consider the 200 million coronavirus model, then a simulation containing 5000 frames, would involve a total of 1 trillion atoms. If we are to detect the cavities in every frame in real-time, a massively parallel solution is necessary. There is no doubt about why 250,000 CPU cores were required for the COVID-19 simulation.
=== Software ===


* '''[https://www.rbvi.ucsf.edu/chimerax/ UCSF ChimeraX]''': Next-generation molecular visualization program from the Resource for Biocomputing, Visualization, and Informatics (RBVI).
* '''[https://www.ks.uiuc.edu/Research/vmd/ VMD]''': Molecular visualization program for displaying, animating, and analyzing large biomolecular systems using 3D graphics and built-in scripting. Used in conjunction with NAMD for visualizing molecular dynamics simulations.
* '''[https://www.ks.uiuc.edu/Research/namd/ NAMD]''': Parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems. Scales to hundreds of cores for typical simulations and beyond 500,000 cores for the largest simulations.
* '''[https://webchem.ncbr.muni.cz/Platform/App/Mole MOLE]''': Universal toolkit for rapid location and characterization of channels and pores in biomacromolecules.
* '''[https://caver.cz/ CAVER]''': Software tool for the analysis and visualization of tunnels and channels in protein structures.
* '''[https://www.rcsb.org/ RCSB PDB Protein Data Bank]''': The largest and most popular database of protein structures.


[[File:molecularDynamicsSimulation1.gif|center|frame| Figure 7: An animation produced by a molecular dynamics simulation]]
=== Papers ===


[[File:molecularDynamicsSimulation2.gif|center|frame| Figure 8: An animation produced by the COVID-19 molecular dynamics simulation]]
* '''[https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5839519/ Survey: Geometric Protein Cavity Detection Algorithms]''': Paper surveying the current geometric algorithms for protein cavity detection. This is a great resource for understanding this project.
* '''[https://jcheminf.biomedcentral.com/articles/10.1186/1758-2946-5-39 MOLE 2.0]''': Paper describing the MOLE 2.0 protein cavity detection software. Contains a good algorithm that can be used for extracting a good approximation of the surface of a point cloud of atoms.
* '''[https://reader.elsevier.com/reader/sd/pii/S0969212607003759?token=4D0F6192E971D4406E8F7CBA047B0490C8715EBD67579D26427E0E63BD0298BEBF948DB238A28E4EAE2D17EBC6DF4E50 MOLE 1.0]''': Paper describing the MOLE 1.0 algorithm.
* '''[https://onlinelibrary-wiley-com.proxy.lib.odu.edu/doi/epdf/10.1002/prot.22052 MolAxis]''': Paper describing the MolAxis protein cavity detection software.
* '''[https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002708 CAVER 3.0]''': Paper describing the CAVER 3.0 protein cavity detection software. This algorithm specializes in identifying tunnels.
* '''[https://www.sciencedirect.com/science/article/abs/pii/S0022283606008746 Travel Depth]''': Paper describing the "travel depth" algorithm for protein cavity visualization.
* '''[https://onlinelibrary-wiley-com.proxy.lib.odu.edu/doi/full/10.1111/cgf.12120 GPU Protein Cavity Detection using Ambient Occlusion]''': Paper describing a GPU-based protein cavity detection algorithm that utilizes Ambient Occlusion.
* '''[https://www.aaai.org/Papers/KDD/1996/KDD96-037.pdf DBSCAN]''': Paper describing the DBSCAN clustering algorithm.
* '''[https://link.springer.com/article/10.1023/A:1009884809343 PDBSCAN]''': Paper describing a parallel version of DBSCAN.
* '''[https://pubmed.ncbi.nlm.nih.gov/31133031/ Coronavirus envelope protein]''': Paper describing research on the envelope protein of coronaviruses.
* '''[https://www.cell.com/biophysj/fulltext/S0006-3495(20)33168-4 COVID-19 virion model]''': Paper describing a detail model of the SARS-CoV-2 virus particle.
* '''[https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7685317/pdf/nihpp-2020.11.19.390187.pdf COVID-19 simulation]''': Paper describing large-scale COVID-19 simulations.


=== Organizations/Groups ===
* '''[https://www.ks.uiuc.edu/ University of Illinois at Urbana-Champaign: Theoretical and Computational Biophysics Group]''': Perhaps the most important group in molecular dynamics. Developers of VMD and NAMD. Ran the simulation for the 200 million atom model of COVID-19.
* '''[https://www.ornl.gov/ Oak Ridge National Laboratory (ORNL)]''': Major national lab with active involvement in drug discovery and design using supercomputers.
* '''[http://rbvi.ucsf.edu/ Resource for Biocomputing, Visualization, and Informatics (RBVI)]''': Developers of UCSF Chimera and UCSF ChimeraX.
* '''[https://ist.ac.at/en/research/edelsbrunner-group/ IST Austria: Edelsbrunner Group]''': Important group in algorithms, computational geometry, and computational topology. Involved with protein cavity detection in the past and potentially involved now. The head of the group, Edelsbrunner created alpha shapes.
* '''[https://www.tacc.utexas.edu/systems/frontera Texas Advanced Computing Center]''': Maintainers of the Frontera supercomputer, the fifth fastest supercomputer in the world (2020). The simulation for the 200 million atom model of COVID-19 was executed on this supercomputer.
* '''[https://webchem.ncbr.muni.cz/ WebChemistry]''': Developed MOLE and many other software tools related to molecular analysis.
=== Important Links ===
* '''[https://www.hpcwire.com/off-the-wire/coronavirus-massive-simulations-completed-on-frontera-supercomputer/ COVID-19 200 million atom NAMD simulation]'''
* '''[https://www.ornl.gov/news/early-research-existing-drug-compounds-supercomputing-could-combat-coronavirus/ ORNL COVID-19 spike drug identification]'''
=== Proteins ===
* '''[https://www.rcsb.org/structure/1jj2 Large Ribosomal Subunit (98,693 atoms)]'''
* '''[https://www.rcsb.org/structure/6VXX COVID-19 Spike Glycoprotein, Closed State (23,694 atoms)]'''
* '''[https://www.rcsb.org/structure/6Y2E COVID-19 Main Protease (5,370 atoms)]'''
* '''[https://www.rcsb.org/structure/6VWW COVID-19 NSP15 Endoribonuclease (24,036 atoms)]'''


== References ==
== References ==
[1] Simões, T., Lopes, D., Dias, S., Fernandes, F., Pereira, J., Jorge, J., Bajaj, C., & Gomes, A. (2017). Geometric Detection Algorithms for Cavities on Protein Surfaces in Molecular Graphics: A Survey. Computer graphics forum : journal of the European Association for Computer Graphics, 36(8), 643–683. https://doi.org/10.1111/cgf.13158
[1] Simões, T., Lopes, D., Dias, S., Fernandes, F., Pereira, J., Jorge, J., Bajaj, C., & Gomes, A. (2017). Geometric Detection Algorithms for Cavities on Protein Surfaces in Molecular Graphics: A Survey. Computer graphics forum : journal of the European Association for Computer Graphics, 36(8), 643–683. https://doi.org/10.1111/cgf.13158
[2] Yaffe, Fishelovitch, Wolfson, Halperin, & Nussinov. (2008). MolAxis: Efficient and accurate identification of channels in macromolecules. Proteins: Structure, Function, and Bioinformatics, 73(1), 72-86.
[3] Coleman, R. G., & Sharp, K. A. (2006). Travel depth, a new shape descriptor for macromolecules: application to ligand binding. Journal of molecular biology, 362(3), 441–458. https://doi.org/10.1016/j.jmb.2006.07.022

Latest revision as of 21:09, 9 September 2021

Introduction

Protein Cavities

Cavities are structural features of proteins and they are often important for drug discovery and design. There are different kinds of cavities, including pockets, voids, tunnels, and channels. The types of cavities are listed in more detail in figure 1.


Figure 1: The basic types of protein cavities [1]


  1. Void: A cavity that looks like internal "hole" in a protein with no connection to the surface.
  2. Cleft: A pocket that looks like a "dent" in the surface of a protein. Can also be found as part of a tunnel or channel.
  3. Invagination: A pocket that looks like a "cove". It has a small opening on the surface of a protein and leads to a larger interior. Can also be found as part of a tunnel or after a cleft.
  4. Tunnel: A pocket that has an opening on the surface of a protein and leads to somewhere in the interior. Has no opening on the other side.
  5. Channel: A cavity that has an opening on one side of the surface of a protein and leads to another opening in another location on the surface of the protein.


Of course, the types of cavities listed in figure 1 are only the basic ones. Combinations of these are also possible as shown in figure 2.


Figure 2: Combination types of protein cavities [1]

Protein Cavity Detection Methods

There are several methods for detecting protein cavities. There are sphere based methods, grid based methods, grid-and-sphere based methods, surface based methods, grid-and-surface based methods, time-varying methods, GPU based methods, consensus based methods, and finally tessellation based methods. These algorithms are shown in more detail in figure 3. Tessellation based methods mainly rely on Voronoi tessellation. Some methods rely on weighted Voronoi tessellation because of its ability to more accurately represent the volume of atoms. The Voronoi tessellation in these methods is computed from a set of points representing the atomic centers of the underlying protein.


Figure 3: A hierarchy of protein cavity detection algorithms [1]


Literature Review

MOLE

Method

The MOLE algorithm is specifically designed to identify tunnels and channels. Finding superficial cavities is a secondary concern and does so as part of the surface approximation step. MOLE utilizes the surface obtained by the refinement of the convex hull to find superficial cavities such as clefts and invaginations. In essence, the approximation of a more accurate surface and the detection of these superficial cavities are closely related. As tetrahedra are removed from the convex hull to get a more accurate surface approximation, a parameter called interior threshold controls how many superficial cavities are found. For example, if the number of tetrahedra removed from a specific part of the molecule exceeds this threshold, the algorithm marks these tetrahedra as part of a superficial cavity.


Figure 4: Shows in 2D the Voronoi diagram (thin lines) and the convex hull (dotted line) of molecule represented by atoms (circles). Each Voronoi edge is evaluated by the cost function (numbers). The thick line represents the optimal path found by the Dijkstra's algorithm from the given starting point (black circle), i.e., centerline of found tunnel. [1]


For the more complicated types of cavities, tunnels and channels, MOLE uses the Voronoi diagram to identify them. Start and end points are defined as the centers of the deepest tetrahedra in each cavity. The depth of the tetrahedron is defined as the number of Voronoi edges from the closest boundary tetrahedron (on the surface). Tunnels/channels are computed as the shortest paths between all pairs of start and end points in the same cavity diagram.

Figure 5: Shows the weight function used to estimate the weight of each Voronoi edge for Dijkstra's algorihtm. l(e) is the length of the edge, d(e) is the distance of the edge to the closest atom Van der Waals sphere and ϵ is a small number to avoid division by zero [1]

Complexity

  • Worst-case: O(N^2 log N), where N is the number of atoms in the molecule.
  • Average: O(M log M), where M is the number of vertices in the Voronoi diagram (in the worst case, M = N^2, but in most cases M = O(N)). As a result of the use of the incremental algorithm and Hilbert curve ordering, the complexity of calculating the Delaunay triangulation of most molecular structures is O(N log N). Finally, the complexity of all the remaining steps of the algorithm is at most O(M log M).


MolAxis

Method

The MolAxis algorithm relies on Voronoi and Dijkstra's algorithm to find channels, similarly to MOLE. The algorithm consists of the following high-level steps:

  1. Approximate the molecule using a collection of fixed-size spheres. The number of balls needed depends on the required quality of the approximation. In the extreme case, where the user is interested in a high resolution, each atom is approximated using a single sphere.
  2. Compute the Voronoi diagram of the centers of the fixed-sized spheres. The diagram is intersected with a user-defined bounding sphere. This defines the area of interest.
  3. Discard the parts of the Voronoi diagram that intersect the molecule.
  4. Define a graph, using the Voronoi vertices and edges. A weight is given to each edge, which depends on its length and on its distance from the surface of the molecule.
  5. Define a source point (root vertex). The user can either supply a source point or allow MolAxis to automatically choose the source point to be the center of the largest cavity in the molecule (basically detect channels inside-out).
  6. Apply a shortest path optimization algorithm (Dijktra's algorithm) on the graph, computing a tree called the "corridor tree".
  7. The desired channels are paths in the corridor tree. Duplicate channels are avoided by using the split distance parameter. The split distance bounds the distance to the least common ancestor of the channel and all previously reported channels.


Figure 6: Shows an example of fixed-size circles (light-blue) approximating varying-size circles and the pathway diagram of their centers. The discarded portion of the Voronoi diagram of their centers is depicted using dotted lines [2]. This figure also helps illustrate the usefulness of the Voronoi tessellation in computing pathways.

Protein Energetics

Metrics

  1. Hydrophobicity: Physical property of a molecule that is seemingly repelled from a mass of water. Hydrophilic molecules are attracted to water. Hydrophobicity plays a major role in protein folding. Hydrophobic molecules also tend to be nonpolar and prefer other neutral molecules and nonpolar solvents. Hydrophobicity is the most widely used metric.
  2. Hydrogen Bonds: Weak bonds between two molecules resulting from an electrostatic attraction between a proton in one molecule and an electronegative atom in the other. We often see these bonds between oxygen and hydrogen.
  3. Van der Waals Interactions: Also known as Van der Waals forces, they are forces driven by induced electrical interactions between two or more atoms or molecules that are very close to each other. Van der Waals interaction is the weakest of all intermolecular attractions between molecules. These forces are distance-dependent.
  4. Salt Bridges: Non-covalent (no sharing of eletrons; electromagnetic) interaction between two ionized sites. It has two components: a hydrogen bond and an electrostatic interaction.
  5. Disulfide Bridges: Strong bonds that can form between two cysteines (an amino acid). The strength of disulfide bridges helps stabilize a protein. Disulfide bridges are especially common in proteins that are secreted from cells.
  6. Charge: Plays a role in strength of bonds. A higher charge means that an atom will have stronger forces in an electromagnetic field.
  7. Polarity: Separation of electric charge leading to a molecule or its chemical groups having an electric dipole moment, with a negatively charged end and a positively charged end. Indicates the existence of polar bonds, which are covalent (sharing of electrons) and are quite strong. About bond polarity.

Candidate Method: Geometric Protein Cavities Detection (GPCD)

The Pipeline contains the following high-level algorithmic steps:

(Angelos/Spiros) Read protein

  1. Input: PDB file
  2. Output: A Polydata of the protein
  3. Algorithmic Step:
    1. Using vtkPDBReader, read the PDB file that included the protein. [DONE]
  4. Challenges:
    1. Upgrade vtkPDBReader to be able to manage multimodel proteins [DONE]
    2. Fix VTKPDBReader error of setting wrong atom numbers [DONE]
    3. Set up vtkPDBReader to utilize The Blue Obelisk Dataset for the Covalent radius and Van-der-Waals radius [DONE]
  5. Ideas that might be used:
    1. Improve The Blue Obelisk Dataset by using: [TODO]
      1. updated Van-der-Waals radius values provided by Los Alamos National Laboratory
      2. updated Covalent radius values provided by Cambridge Structural Database

(Spiros/Angelos) Remove Het Atoms

  1. Input: A Polydata of the protein
  2. Output: A Polydata of the protein without Het atoms
  3. Algorithmic step:
    1. Using vtkSelectionFilter, we extract all the non-Het atoms. [DONE]

(Spiros/Angelos) Sort Atoms By Radius

  1. Input: A Polydata of the protein without Het atoms
  2. Output: A Polydata of the protein without Het atoms sorted by radius in descending order
  3. Algorithmic step:
    1. Using vtkSortFieldData we sort the non-Het atoms by radius in descending order. [DONE]
      1. Note: Shared memory parallelism can be employed [DONE]

(Spiros) Extract protein Chains

  1. Input: A Polydata of the protein without Het atoms sorted by radius in descending order
  2. Output: A vector of Polydata of the protein chains without Het atoms sorted by radius in descending order
  3. Algorithmic step:
    1. Using vtkSelectionFilter, we extract all the protein-chains. [DONE]
      1. Note: This way we can mesh each chain individually

(Spiros/Αngelos) Compute the Solvent Excluded Image

  1. Input: A Polydata of a chain of the protein without Het atoms sorted by radius in descending order, probe radius, spacing
  2. Output: Solvent Excluded Image of chain
  3. Algorithmic steps:
    1. Create the Solvent Accessible image by creating spheres for each atom that their radius is: Van der Waals radius + probe radius. [DONE]
      1. Note: Shared memory parallelism can be employed [DONE]
    2. Perform Euclidean Distance Transform on the Solvent Accessible image. [DONE]
      1. Note: Shared memory parallelism can be employed [DONE]
    3. Extract Solvent Excluded image from the EDT result by setting: [DONE]
      1. All pixel values < probe-radius - truncationError[atomType] - paddingDistance = 0
      2. All pixel values >= probe-radius - truncationError[atomType] - paddingDistance = 1
      3. Note: Shared memory parallelism can be employed [DONE]
  4. Challenges:
    1. Handle the calculation of truncationError[atomType] in a thread-safe way by sorting the atoms by radius in descending order [DONE]
      1. Truncation error is caused because of the spacing of the image.
    2. Select a paddingDistance value to help PODM3D produce an accurate surface [DONE]
    3. Close holes that should not exist (based on other surfaces) [DONE]

(Spiros) Compute the Solvent Excluded Surface (SES)

  1. Input: Solvent Excluded Image of chain
  2. Output: Solvent Excluded Surface of chain
  3. Algorithmic steps:
    1. Using PODM3D, produce a volumetric mesh of the image. [DONE]
      1. Note: Shared memory parallelism can be employed [DONE]
    2. Using PODM3D, extract the surface of the volumetric mesh. [DONE]
      1. Note: Shared memory parallelism can be employed [DONE]
  4. Advantages:
    1. Can control the number of elements on the surface
    2. the edge lengths bounds are relatively small which helps in the clustering.
  5. Challenges:
    1. Using vtkDataSetSurfaceFilter, fix the issue of surface triangles being oriented the wrong way. [DONE]
    2. Select a default delta value. [DONE]
    3. Surface needs to be smoothed. [TODO]

(Spiros/Angelos) Merge Protein Chain SESs

  1. Input: A vector of the Solvent Excluded Surface of chains
  2. Output: Solvent Excluded Surface
  3. Algorithmic step:
    1. Using vtkAppendPolyData, we merge all the protein-chains surfaces polydata. [DONE]

(Angelos/Spiros) Compute ambient occlusion of the SES

  1. Input: Solvent Excluded Surface
  2. Output: Ambient Occlusion values of surface points, normals of surface points
  3. Algorithmic step:
    1. Using IGL Library, which uses Embree and Eigen, calculate normals of surface points and then calculate Ambient occlusion values for all the surface points [DONE]
      1. Note: Shared memory parallelism can be used [DONE]
      2. Note: GPU parallelism can be used [TODO]
  4. Ideas that might be used:
    1. Assign the ambient occlusion value of a triangle by calculating the average of its points. [TODO]
      1. This can be used for a cell-based clustering method in order to eliminate the noise values caused by the PODM3D's solvent accessible surface.

(Spiros) Compute Surface Statistics

  1. Input: Solvent Excluded Surface
  2. Output: Statistics of Surface Triangles' Edges
  3. Algoritmic step:
    1. Compute min/mean/median/max edge lengths of the surface triangles [DONE]
      1. Note: Shared memory parallelism can be used [DONE]

(Angelos) Detect protein cavities

  1. Input: Solvent Excluded Surface, Ambient Occlusion values of surface points, Surface Statistics
  2. Output: Atomic Cavities
  3. Algorithmic step:
    1. Using a modified version of the clustering method DBSCAN, that finds neighbors based on their density and ambient occlusion values, form clusters that define protein cavities. [DONE]
      1. Note: shared memory parallelism can be employed, see A Fast Parallel Clustering Algorithm for Large Spatial Databases PDBSCAN [TODO]
  4. Challenges:
    1. Tune the clustering parameters eps / search-radius using the surface statistics. [DONE]
    2. Handle non-deterministic Solvent Excluded Surface of PODM3D. [TODO]
  5. Ideas that might be used:
    1. A Novel Spatial Clustering Algorithm Based on Delaunay Triangulation [TODO]
    2. OPTICS: ordering points to identify the clustering structure [TODO]

(Angelos/Spiros) Classify clusters based on the type of cavity they are:

  1. Input: Solvent Excluded Surface, Atomic Cavities, Atom Types of surface points
  2. Output: Labeled atomic Cavities
  3. Algorithm steps:
  4. Ideas that might be used:
    1. Ambient occlusion values based classification using mean distance cluster value [TODO]
      1. Note: Shared memory parallelism can be used [TODO]
    2. Analyze the shape of clusters to identify what type of cavity they are. [TODO]
      1. This can potentially be done using machine learning.
      2. Note: Shared memory parallelism can be used [TODO]

(Spiros) Classify Atom Types of surface points

  1. Input: Solvent Excluded Surface, a Polydata of the protein without Het atoms sorted by radius in descending order
  2. Output: Atom Types of surface points
  3. Algorithmic step:
    1. Using a KD-tree, for each surface point, find the closest atom: [DONE]
      1. If the surface point is within the radius of the closest atom, assign the atom type of the closest point to the surface point
      2. Else, assign 0, which means the surface point is part of the re-entrance surface.
      3. Note: Shared memory parallelism can be used [DONE]
  4. Challenges:
    1. Find an ideal offset distance value between the surface points and their closest atoms to improve accuracy. [TODO]
      1. Idea: use the truncationError[AtomType]
  5. Ideas that might be used:
    1. create a different kd-tree for each protein chain [TODO]

(Spiros/Angelos) Map Electrostatics Potentials on Surface Points

  1. Input: Solvent Excluded Surface, Electrostatic Potentials Image ESP of APBS, normals of surface points, probe radius, lowerThreshold-upperThreshold
  2. Output: Electrostatic values of surface points
  3. Algorithmic steps:
    1. For each surface point: [DONE]
      1. Scale the point using normals, and probe radius to the solvent-accessible surface,
      2. Get the value of the closest pixel from the ESP to the scaled point:
        1. If value > upperThreshold, set electrostatic value of point = upperThreshold
        2. Else if, value < lowerThreshold, set electrostatic value of point = lowerThreshold
        3. Else get the interpolated value of the scaled points from the image:
          1. If interpolated value > upperThreshold, set electrostatic value of point = upperThreshold
          2. Else if, interpolated value < lowerThreshold, set electrostatic value of point = lowerThreshold
      3. Note: Shared memory parallelism can be used [DONE]
  4. Challenges:
    1. Create reader of the OpenDx file format that is used as output by APBS [DONE]

(Angelos/Spiros) Write Labeled Solvent Surface Surface:

  1. Input: Labeled Solvent Surface Surface
  2. Output: solventSurfaceSurface.vtp
  3. Algorithmic step:
    1. Using a vtkXMLPolyDataWriter, write the output file. [DONE]
  4. Ideas that might be used:
    1. Note: a Paraview plugin may be developed for visualization purposes. [TODO]

GPCD vs MOLE

Feature GPCD MOLE
Detect Surface Cavities YES (more) YES (less)
Detect Interior Cavities YES YES
Visualize Exact Channel Shape NO YES
Works on Very Large Molecules YES NO (very slow)
Works on Multi-Model Files YES NO
Parallelization YES NO
Relative Performance VERY FAST SLOW
Intuitive Visualization YES YES
False Positives YES (more) YES (less)
Quantify Major Structural Features YES NO

Resources

Resources

Software

  • UCSF ChimeraX: Next-generation molecular visualization program from the Resource for Biocomputing, Visualization, and Informatics (RBVI).
  • VMD: Molecular visualization program for displaying, animating, and analyzing large biomolecular systems using 3D graphics and built-in scripting. Used in conjunction with NAMD for visualizing molecular dynamics simulations.
  • NAMD: Parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems. Scales to hundreds of cores for typical simulations and beyond 500,000 cores for the largest simulations.
  • MOLE: Universal toolkit for rapid location and characterization of channels and pores in biomacromolecules.
  • CAVER: Software tool for the analysis and visualization of tunnels and channels in protein structures.
  • RCSB PDB Protein Data Bank: The largest and most popular database of protein structures.

Papers

  • Survey: Geometric Protein Cavity Detection Algorithms: Paper surveying the current geometric algorithms for protein cavity detection. This is a great resource for understanding this project.
  • MOLE 2.0: Paper describing the MOLE 2.0 protein cavity detection software. Contains a good algorithm that can be used for extracting a good approximation of the surface of a point cloud of atoms.
  • MOLE 1.0: Paper describing the MOLE 1.0 algorithm.
  • MolAxis: Paper describing the MolAxis protein cavity detection software.
  • CAVER 3.0: Paper describing the CAVER 3.0 protein cavity detection software. This algorithm specializes in identifying tunnels.
  • Travel Depth: Paper describing the "travel depth" algorithm for protein cavity visualization.
  • GPU Protein Cavity Detection using Ambient Occlusion: Paper describing a GPU-based protein cavity detection algorithm that utilizes Ambient Occlusion.
  • DBSCAN: Paper describing the DBSCAN clustering algorithm.
  • PDBSCAN: Paper describing a parallel version of DBSCAN.
  • Coronavirus envelope protein: Paper describing research on the envelope protein of coronaviruses.
  • COVID-19 virion model: Paper describing a detail model of the SARS-CoV-2 virus particle.
  • COVID-19 simulation: Paper describing large-scale COVID-19 simulations.

Organizations/Groups

Proteins

References

[1] Simões, T., Lopes, D., Dias, S., Fernandes, F., Pereira, J., Jorge, J., Bajaj, C., & Gomes, A. (2017). Geometric Detection Algorithms for Cavities on Protein Surfaces in Molecular Graphics: A Survey. Computer graphics forum : journal of the European Association for Computer Graphics, 36(8), 643–683. https://doi.org/10.1111/cgf.13158

[2] Yaffe, Fishelovitch, Wolfson, Halperin, & Nussinov. (2008). MolAxis: Efficient and accurate identification of channels in macromolecules. Proteins: Structure, Function, and Bioinformatics, 73(1), 72-86.

[3] Coleman, R. G., & Sharp, K. A. (2006). Travel depth, a new shape descriptor for macromolecules: application to ligand binding. Journal of molecular biology, 362(3), 441–458. https://doi.org/10.1016/j.jmb.2006.07.022