Description
The C++ core of d-SEAMS, a molecular dynamics trajectory analysis engine. Published in JCIM.
The wiki (https://wiki.dseams.info) describes the examples and how to obtain
the data-sets (trajectories) from figshare.
If you are unwilling to use the nix build system, then please note that you must manage the dependencies MANUALLY, including the compiler versions.
d-SEAMS alternatives and similar libraries
Based on the "Scientific Computing" category.
Alternatively, view d-SEAMS alternatives based on common mentions on social networks and blogs.
-
Kratos Multiphysics
Kratos Multiphysics (A.K.A Kratos) is a framework for building parallel multi-disciplinary simulation software. Modularity, extensibility and HPC are the main objectives. Kratos has BSD license and is written in C++ with extensive Python interface. -
preCICE
A coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations. -
Units
A run-time C++ library for working with units of measurement and conversions between them and with string representations of units and measurements -
itpp
IT++ library mirror/fork. C++ library of mathematical, signal processing and communication classes and functions. -
perf-cpp
Lightweight recording and sampling of performance counters for specific code segments directly from your C++ application. -
Dimwits
A compact C++ header-only library providing compile-time dimensional analysis and unit awareness
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of d-SEAMS or a related project?
Popular Comparisons
README
d-SEAMS
Deferred Structural Elucidation Analysis for Molecular Simulations
- Check our build status here.
- The docs themselves are here and development is ongoing on GitHub
- We also have a Zenodo community for user-contributions like reviews, testimonials and tutorials
- Trajectories are hosted on figshare.
- Our wiki is here
\brief The C++ core of d-SEAMS, a molecular dynamics trajectory analysis engine.
\note The wiki describes the examples and how to obtain the data-sets (trajectories) from figshare.
\warning If you are unwilling to use the nix
build system, then please note that you must manage the dependencies MANUALLY, including the compiler versions.
Citation
This has been published at the Journal of Chemical Information and Modeling (JCIM)
You may also read the preprint on arXiv
If you use this software please cite the following:
Goswami, R., Goswami, A., & Singh, J. K. (2020). d-SEAMS: Deferred Structural Elucidation Analysis for Molecular Simulations. Journal of Chemical Information and Modeling. https://doi.org/10.1021/acs.jcim.0c00031
The corresponding bibtex
entry is:
@Article{Goswami2020,
author={Goswami, Rohit and Goswami, Amrita and Singh, Jayant Kumar},
title={d-SEAMS: Deferred Structural Elucidation Analysis for Molecular Simulations},
journal={Journal of Chemical Information and Modeling},
year={2020},
month={Mar},
day={20},
publisher={American Chemical Society},
issn={1549-9596},
doi={10.1021/acs.jcim.0c00031},
url={https://doi.org/10.1021/acs.jcim.0c00031}
}
Compilation with Nix
We use a deterministic build system to generate both bug reports and uniform
usage statistics. This also handles the lua
scripting engine.
\note The lua functions are documented on the wiki
Build
Since this project is built with nix
, we can simply do the following from the
root directory (longer method):
# Make sure there are no artifacts
rm -rf build
# This will take a long time the first time as it builds the dependencies
nix-build . # Optional
# Install into your path
nix-env -if . # Required
# Run the command anywhere
yodaStruct -c lua_inputs/config.yml
A faster method of building the software is by using the cachix binary cache as shown:
# Install cachix
nix-env -iA cachix -f https://cachix.org/api/v1/install
# Use the binary cache
cachix use dseams
# Faster with the cache than building from scratch
nix-build . # Optional
# Install into your path
nix-env -if . # Required
# Run the command anywhere
yodaStruct -c lua_inputs/config.yml
\note The paths in the .yml
should be relative to the folder from which the binary is called.
If you're confused about how to handle the relative paths, run the command yodaStruct -c lua_inputs/config.yml
in the top-level directory, and set the paths relative to the top-level directory. This is the convention used in the examples as well.
Language Server Support
To generate a compile_commands.json
file for working with a language server
like ccls use the following commands:
# Pure environment
nix-shell --run 'bash' --pure
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=YES ../
cp compile_commands.json ../
Note that there is no need to actually compile the project if you simply need to get the compiler database for the language server.
Do Not commit the .json
file.
Development
We can simply use the nix
environment:
# From the project root
nix-shell
Running
This is built completely with nix:
# Install systemwide
nix-env -if .
To run the sample inputs, simply install the software, and ensure that input/
is a child directory.
# Assuming you are in the src directory
# Check help with -h
yodaStruct -c lua_inputs/config.yml
Tests
Apart from the examples, the test-suite
can be run with the yodaStruct_test
binary, which will drop into the
nix
environment before building and executing gdb
:
# Just run this
./testBuild.sh
# quit gdb with quit
# Go run the test binary
cd shellBuild
./yodaStruct_test
Do note that the regular installation via nix-env
runs the tests before the installation
Developer Documentation
<!-- TODO: Move this to some other location. -->
While developing, it is sometimes expedient to update the packages used. It is then useful to note that we use niv to handle our pinned packages (apart from the ones built from Github). Thus, one might need, say:
niv update nixpkgs -b nixpkgs-unstable
Test the build with nix:
nix-build .
# Outputs are in ./result
# If you get a CMake error
rm -rf build
nix-store --delete /nix/store/$whatever # $whatever is the derivation complaining
nix-collect-garbage # then try again [worst case scenario]
Leaks and performance
While testing for leaks, use clang
(for
AddressSanitizer
and
LeakSanitizer)
and the following:
# From the developer shell
export CXX=/usr/bin/clang++ && export CC=/usr/bin/clang
cmake .. -DCMAKE_CXX_FLAGS="-pg -fsanitize=address " -DCMAKE_EXE_LINKER_FLAGS=-pg -DCMAKE_SHARED_LINKER_FLAGS=-pg
Overview
As of Mon Jan 20 15:57:18 2020, the lines of code calculated by cloc are as follows:
[Cloc Lines](images/cloc-2020-01-20_15-56.png)
Contributing
Please ensure that all contributions are formatted according to the [clang-format](./clang-format) configuration file.
Specifically, consider using the following:
Sublime Plugin for users of Sublime Text
format-all for Emacs
vim-clang-format for Vim
Visual Studio: http://llvm.org/builds/, or use the integrated support in Visual Studio 2017
Where some of the above suggestions are derived from this depreciated githook.
Also, do note that we have a CONTRIBUTING
file you need to read to
contribute, for certain reasons, like, common sense.
Acknowledgements
The following tools are used in this project:
- CMake for compilation (cmake-init was used as a reference)
- Clang because it is more descriptive with better tools
- Conan and [https://pipenv.readthedocs.io/en/latest/](pipenv) for dependency management
- Doxygen for the developer API
- clang-format for code formatting
- lua for the scripting engine
- yaml for the configuration
Third Party Libraries
The libraries used are:
- backward-cpp for better stacktraces without
gdb
- cxxopts for parsing command line options
- rang for terminal styles (ANSI)
- sol2 for interfacing with lua
- yaml-cpp for working with
yaml
- fmt for safe and fast formatting
- Linear Algebra PACKage (LAPACK)
- Basic Linear Algebra Subprograms (BLAS)
- Spectra
- Boost Geometry for working with different coordinates
- Boost Math for spherical harmonics
- Blaze for very fast modern linear algebra
- nanoflann to calculate nearest neighbors