Skip to main content

A widget to visualize and interact with atomistic structures in Jupyter Notebook.

Project description

Welcome to WEAS Widget!

PyPI version Docs status Unit test

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: Colab

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

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

weas_widget-0.1.13.tar.gz (217.9 kB view details)

Uploaded Source

Built Distribution

weas_widget-0.1.13-py3-none-any.whl (225.2 kB view details)

Uploaded Python 3

File details

Details for the file weas_widget-0.1.13.tar.gz.

File metadata

  • Download URL: weas_widget-0.1.13.tar.gz
  • Upload date:
  • Size: 217.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for weas_widget-0.1.13.tar.gz
Algorithm Hash digest
SHA256 54498dcef2533e6ecfa7ade1e20326ab4e134d0361cf00dca16abc63d781aa7d
MD5 a543a25ea593f549fc4d6dced4538b01
BLAKE2b-256 4663b1c8058369a0de14e072dada049344e5620d1e72f86b9521ef812dd5641e

See more details on using hashes here.

File details

Details for the file weas_widget-0.1.13-py3-none-any.whl.

File metadata

  • Download URL: weas_widget-0.1.13-py3-none-any.whl
  • Upload date:
  • Size: 225.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for weas_widget-0.1.13-py3-none-any.whl
Algorithm Hash digest
SHA256 b8d4ce7fe861491b5780f6b825a8d618fba5f97407d3e769adcc221c03034f78
MD5 abd22e72e176e400840de8ea101bd474
BLAKE2b-256 a7081862c7bfd0a3c68a48967aea8ee9b178beb07c32339f7974203c240812d2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page