NanoShaper is a framework to analyze an arbitrary surface; a particular attention is given to molecular surfaces. NanoShaper presents several features:
-
Loading of a triangulated mesh in OFF, PLY or MSMS format
-
Analytical build and triangulation of the Skin surface, the Blobby surface and the Connolly surface
-
Colour with in/out info of a 3D grid
-
Pockets and cavities detection.
-
Easy to plug a new surface: it is sufficient to expand Surface class, no other modifications are required, just writing the .h and .cpp. The surface registration is automatically managed by a template based mechanism.
-
It can be compiled as a Standalone, python lib or as a DelPhi plug-in.
History:
-
Version 0.3.1:
-
Much faster Skin Surface build-up. Acceleration grid 2d also for the mesh ray casting.
-
Version 0.3.2:
-
Version 0.4:
-
Using octrees to reduce memory requirements for triangulation and using an improved multi-threading strategy.
-
Atom based Multi-dielectric is supported (DelPhi).
-
Stern Layer (DelPhi).
-
An efficient, ray-casting based algorithm to convert a set of surface samples to a set of balls whose envelope approximatess the surface.
-
Atoms in the neighboroud of a detected cavity are returned.
-
Version 0.5:
-
"-=" Filtered Operator to support difference map to detect pockets not detectable by cavity detector
-
Operative_Mode keyword. Values = normal, difference, membrane
-
Introduced experimental Fast Van Der Waals surface. Analytical for FD PDE, not analytical triangulation
-
Introduced experimental Coulombic surface
-
From DelPhi atinf and atsurf are imported. atsurf is filled (DelPhi)
-
Fast projection flag to switch between fast (approximate) and slow (accurate) SkinSurface bgp projections
-
Output for pocket detection in ProShape style added when used with DelPhi
-
Improved threads load balancing
-
Every vertex has its own reference atoms (OFF+A format defined)
-
Faster flood fill algorithm
-
Analytical normals computation or approximation by triangulation
-
OFF+N, OFF+N+A, MSMS formats
-
Vertex normals are computed, analytically if possible.
-
Version 0.6:
-
Refactoring using metaprogramming to instantiate surfaces. To introduce a new surface, just define that class and register it using the registration macro. Now surface constructors access directly the configuration file structure. Any new surface thus can define each own keywords.
-
Version 0.7
-
Parallel Marching Cubes: 2 steps MC, cache friendly and trivially paralel
-
Dangling vertices now are removed a priori. Dangling vertices are those that were sampled, gave an in/out map that is in contrast with another ray for numerical reasons. If this happen these vertices, after ray tracing, are identified and removed before marching cubes. In this way the exact number of MC vertices is known a priori. Another pathological situation that may happen on previous versions is that two vertices are false vertices on the same edge (let's say an high frequency) now these vertices are removed. The previous version of NanoShaper had this added spurious vertices in memory; however they are not present in the mesh, so the previous meshes are still correct. Moreover now a slightly faster way to color the grid in ray tracing is defined.
-
If a normal cannot be computed analytically due to any kind of problem, than this is approximated in a subsequent step such that any file with normals will have all the normals computed. Most of them will be analytical (usually less than 1 over 10000 are not analytical).
-
High accuracy timing boost::chrono is optionally available
-
Bug fix in blobby surface due to surface factory refactoring
-
Introduced the ExampleSurface to let the user better understand how to add a surface
-
Using templates instead of macros for memory access/write, check bounds and added p=NULL semantic on deletion. from now on vectors of primitive types should be allocated, accessed, written, deleted with the given template functions
-
Refactoring of main method.
-
Introduced pure virtuals init/clear methods to force the Developer to write clean C++ code for the Surfaces
-
Optimization on the floodfill. Ping pong to get as much as possible cache friendly.
- Author:
- Sergio Decherchi
- Date:
- 28-10-2013
- Version:
- 0.7.2