Sphractal
is a package that provides functionalities to estimate the fractal dimension of complex 3D surfaces formed from overlapping spheres via box-counting algorithm.
- Atomic objects in molecular and nanosciences such are often represented as collection of spheres with radii associated with the atomic radius of the individual component.
- Some examples of these objects (inclusive of both fine- and coarse-grained representation of the individual components) are small molecules, proteins, nanoparticles, polymers, and porous materials such as zeolite, metal-organic framework (MOFs).
- The overall properties of these objects are often significantly influenced by their surface properties, in particular the surface area available for interaction with other entities, which is related to the surface roughness.
- Fractal dimension allows the surface complexity/roughness of objects to be measured quantitatively.
- The fractal dimension could be estimated by applying the box-counting algorithm on surfaces represented as either:
- approximated point cloud:
- that are subsequently voxelised:
- or mathematically exact surfaces:
- Representation of the surface as either voxelised point clouds or mathematically exact surfaces.
- Efficient algorithm for 3D box-counting calculations.
- Customisable parameters to control the level of detail and accuracy of the calculation.
Use pip
or conda
to install Sphractal
:
pip install sphractal
conda install -c conda-forge sphractal
Sphractal
requires a file compiled from another freely available repository for the functionalities related to voxelised point clouds surface representation to operate properly.
This could be done by:
- Downloading the source code from the repository to a directory of your choice:
git clone https://github.com/jon-ting/fastbc.git
- Compile the code into an executable file (which works on any operating system) by doing either one of the following compilations according to the instructions on the README.md page. This will decide whether you will be running the box counting algorithm with GPU acceleration. Feel free to rename the output file from the compilation:
g++ 3DbinImBCcpu.cpp bcCPU.cpp -o 3DbinImBCcpu
nvcc -O3 3DbinImBCgpu.cpp bcCUDA3D.cu -o 3DbinImBCgpu
- (Optional) Setting the path to the compiled file as an environment variable accessible by Python (replace
<PATH_TO_FASTBC>
by the absolute path to the executable file you just built), otherwise you could always pass the path to the compiled file to the relevant functions:
export FASTBC=<PATH_TO_FASTBC>
Note that for the environment variable to be persistent (to still exist after the terminal is closed), the line should be added to your ~/.bashrc
.
from sphractal import getExampleDataPath, runBoxCnt
inpFile = getExampleDataPath() # Replace with the path to your xyz or lmp file
boxCntResults = runBoxCnt(inpFile)
Check out the basic demonstration and application demonstration notebooks for further explanations and demonstrations!
Detailed documentations are hosted by Read the Docs
.
Sphractal
appreciates your enthusiasm and welcomes your expertise!
Please check out the contributing guidelines and code of conduct. By contributing to this project, you agree to abide by its terms.
The project is distributed under an MIT License.
The package was created with cookiecutter
using the
py-pkgs-cookiecutter
template.
The speeding up of the inner functions via just-in-time compilations with Numba was inspired by the advice received during the NCI-NVIDIA Open Hackathon 2023.
Email: [email protected]
/[email protected]
Feel free to reach out if you have any questions, suggestions, or feedback.