A Jupyter widget to plot band structures and density of states. The widget is using the mc-react-bands Javascript package and is turned into a Jupyter widget with anywidget.
pip install widget-bandsplot
Minimal usage example of the widget is the following:
widget = BandsPlotWidget(
bands = [bands_data],
dos = dos_data,
energy_range = [-10.0, 10.0],
format_settings = {
"showFermi": True,
"showLegend": True,
}
)
display(widget)
where bands_data
and dos_data
are contain the band structure and density of states data, respectively. The format for these data objects is the following:
- Band structure data follows the AiiDA CLI export format that can be generated from an AiiDA BandsData node with the following command:
verdi data band export <PK> --format=json
- The density of states data uses a custom format, with a a valid example being:
dos_data = { "fermi_energy": -7.0, "dos": [ { "label": "Total DOS", # required "x": [0.0, 0.1, 0.2], # required "y": [1.2, 3.2, 0.0], # required "lineStyle": "dash", # optional "borderColor": "#41e2b3", # optional "backgroundColor": "#51258b", # optional }, { "label": "Co", "x": [0.0, 0.1, 0.2], "y": [1.2, 3.2, 0.0], "lineStyle": "solid", "borderColor": "#43ee8b", "backgroundColor": "#59595c", }, ], }
For more detailed usage, see example/example.ipynb
and for more example input files see example/data
.
Install the python code:
pip install -e .[dev]
You then need to install the JavaScript dependencies and run the development server.
npm install
npm run dev
Open examples/example.ipynb
in Jupyter notebook or lab to start developing. Changes made in js/
will be reflected in the notebook.
In order to make a new release of the library and publish to PYPI, run
bumpver update --major/--minor/--patch
This will
- update version numbers, make a corresponding
git commit
and agit tag
; - push this commit and tag to Github, which triggers the Github Action that makes a new Github Release and publishes the package to PYPI.
The screenshot comparison
test will generate images of the widget using selenium
and chrome-driver
, and compares them to the reference image in test/widget-sample.png
.
To update the reference image: download the generated image from the Github Workflow step called "Upload screenshots" and replace test/widget-sample.png
.
When using the content of this repository, please cite the following two articles:
-
D. Du, T. J. Baird, S. Bonella and G. Pizzi, OSSCAR, an open platform for collaborative development of computational tools for education in science, Computer Physics Communications, 282, 108546 (2023). https://doi.org/10.1016/j.cpc.2022.108546
-
D. Du, T. J. Baird, K. Eimre, S. Bonella, G. Pizzi, Jupyter widgets and extensions for education and research in computational physics and chemistry, Computer Physics Communications, 305, 109353 (2024). https://doi.org/10.1016/j.cpc.2024.109353
We acknowledge support from the EPFL Open Science Fund via the OSSCAR project.