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, ...
Demo
Please try the widget in the following links:
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
Lattice plane
Draw a plane that is defined by the miller indices and distance from the origin or by selecting the atoms.
viewer.avr.lp.add_plane_from_indices(name = "111",
indices = [1, 1, 1],
distance = 4,
scale = 1.0,
color = [0, 1, 1, 0.5])
viewer.avr.lp.build_plane()
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
File details
Details for the file weas_widget-0.1.10.tar.gz
.
File metadata
- Download URL: weas_widget-0.1.10.tar.gz
- Upload date:
- Size: 210.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63c3e1cea8ef80fc914921926badf42ebeec0c8d76fc8446de96602958c5c70c |
|
MD5 | 5154beac022e8e709a39619ff404bb07 |
|
BLAKE2b-256 | bc94cc505a4b91e5ccc060048d4a462b6465fd29cfa240b415d29c753186233e |
File details
Details for the file weas_widget-0.1.10-py3-none-any.whl
.
File metadata
- Download URL: weas_widget-0.1.10-py3-none-any.whl
- Upload date:
- Size: 217.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1df1e9458abb60c3ff84d51241dbffdf08dcccacd59f5c329ce44279f6d840e0 |
|
MD5 | 778759d7eb095f23cc0f3ee094443e67 |
|
BLAKE2b-256 | 26f564c0db4a5a9b5e6dbff44c3dbd99bf688d25de25f58461a5ee44e4fbd05c |