A widget to visualize and interact with atomistic structures in Jupyter Notebook.
Project description
Welcome to WEAS Widget!
A widget to visualize and edit atomic structures in Jupyter Notebooks. It uses WEAS (Web Environment For Atomistic Structure) in the backend.
Features:
- Model: space-filling, ball-stick, polyhedral.
- Supports importing data from ASE and Pymatgen.
- Edit structure: move, rotate, delete and replace atoms.
- Supports periodic boundary conditions
- Animations
- Isosurfaces
- Vector fields, e.g., magnetic moments, phonons, ...
Installation
With pip
:
pip install weas-widget
To install the latest version from source, first clone the repository and then install using pip
:
git clone https://github.com/superstar54/weas-widget
cd weas-widget
npm install
npm run build
pip install -e .
How to use
from ase.build import molecule
from weas_widget import WeasWidget
atoms = molecule("C2H6SO")
viewer = WeasWidget()
viewer.from_ase(atoms)
viewer
Full documentation at: https://weas-widget.readthedocs.io/en/latest/index.html
Reporting issues
If you encounter any problems, please first update the widget to the latest version.
pip install weas-widget --upgrade
If the problem persists, please open a GitHub issue
Features
Select Atoms
- Pick Selection: Click directly on an atom to select it.
- Range Selection: Hold the
Shift
key and drag the right mouse button to select a group of atoms.
Move, Rotate selected atoms
Press the keyboard shortcut, and move your mouse.
Operation | Shortcut |
---|---|
Move | g |
Rotate | r |
Duplicate | d |
Delete selected atoms
Press the Delete
key
Export
- Export the modified atomic structure to ASE or Pymatgen
atoms = viewer.to_ase()
- Save image to a path by:
viewer.save_image("/home/xing/filename.png")
- Download image by:
viewer.download_image("filename.png")
Visualizing crystal structures
For a nice visualization of a crystal, show
- unit cell
- bonded atoms outside the cell
- polyhedra
from weas_widget import WeasWidget
viewer1 = WeasWidget()
viewer1.load_example("tio2.cif")
viewer1.avr.model_style = 2
viewer1.avr.boundary = [[-0.1, 1.1], [-0.1, 1.1], [-0.1, 1.1]]
viewer1.avr.show_bonded_atoms = True
viewer1.avr.color_type = "VESTA"
viewer1
Isosurfaces
from ase.build import molecule
from weas_widget import WeasWidget
from ase.io.cube import read_cube_data
volume, atoms = read_cube_data("h2o-homo.cube")
viewer = WeasWidget()
viewer.from_ase(atoms)
viewer.avr.iso.volumetric_data = {"values": volume}
viewer.avr.iso.settings = [{"isovalue": 0.0001, "mode": 0}]
viewer
Magnetic moments
Show the magnetic moments as a vector field.
from ase.build import bulk
from weas_widget import WeasWidget
import numpy as np
atoms = bulk("Fe", cubic=True)
atoms*=[2, 2, 1]
atoms.set_array("moment", np.ones(len(atoms)))
viewer = WeasWidget()
viewer.from_ase(atoms)
viewer.avr.model_style = 1
viewer
Phonons
Animate vibrational (phonon) modes (computed with external software).
import numpy as np
from ase.build import bulk
from weas_widget import WeasWidget
from weas_widget.utils import generate_phonon_trajectory
atoms = bulk("Fe", cubic=True)
eigenvector = np.array([[0, -0.0, 0.5], [0, 0.0, -0.5]])
trajectory = generate_phonon_trajectory(atoms, eigenvector, repeat=[4, 4, 1])
viewer = WeasWidget()
viewer.from_ase(trajectory)
# set a vector field to show the arrow
viewer.avr.vf.settings = [{"origins": "positions", "vectors": "movement", "radius": 0.1}]
viewer.avr.vf.show = True
viewer
Test
Unit test
pytest
End-to-end test
The e2e test is similar to ipywidgets.
For the first time, one needs to install the dependence.
cd tests/notebooks/
yarn install
Then run in a terminal:
yarn start
In another terminal:
yarn test
If the snapshots need to be updated:
yarn test:update
Contact
- Xing Wang xingwang1991@gmail.com
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for weas_widget-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ad65cbd2ef2b7479242135daf7913331c56b5751d8c4b940867ed9aa384c211 |
|
MD5 | 2effd63cce6b2f6cb0c520d8f2f79984 |
|
BLAKE2b-256 | 991944ab27b57ed9ad0b983514ea6ed96572324d1b89686587a1e5c4efec3397 |