Energy level diagram plotting from graphs
Project description
leveldiagram
This module creates energy level diagrams common to atomic physics as matplotlib graphics. The level structure is defined using networkx graphs.
Quick Usage
This package takes networkx directional graphs, which can be used to effectively define a system hamiltonian, and creates an energy diagram representing the system. The nodes of the graph represent the energy levels. The edges of the graph represent the couplings between levels.
Passing a simple graph to the basic level diagram constructor will produce a passable output for simple visualization purposes.
nodes = (0,1,2)
edges = ((0,1),(1,2))
graph = nx.DiGraph()
graph.add_nodes_from(nodes)
graph.add_edges_from(edges)
d = ld.LD(graph)
d.draw()
Global settings for the three primitive objects used by leveldiagram can be set by passing keyword argument dictionaries to the LD
constructor.
To control options for a single level or coupling,
save these keyword arguments to the respective node or edge of the supplied graph.
Generally, the levels and couplings take standard matplotlib 2D line configuration arguments.
nodes = ((0,{'bottom_text':'ground'}),
(1,{'right_text':'excited'}),
(2,{'top_text':'rydberg'}))
edges = ((0,1, {'label':'$\\Omega_p$'}),
(1,2, {'label':'$\\Omega_c$'}))
graph = nx.DiGraph()
graph.add_nodes_from(nodes)
graph.add_edges_from(edges)
d = ld.LD(graph, coupling_defaults = {'arrowsize':0.15,'lw':3})
d.draw()
With some basic scripting to create the graph appropriately, much more complicated level diagrams can be made with relative ease.
hf_nodes = [((f,i), {('top' if f==2 else 'bottom') + '_text':'$m_F='+f'{i:d}'+'$',
'energy':f-1,
'xpos':i,
'width':0.75,
'text_kw':{'fontsize':'large'}})
for f in [1,2]
for i in range(-f,f+1)]
lin_couples = [((1,i),(2,i),{'label':l,'color':'C0',
'label_kw':{'fontsize':'medium','color':'C0'}})
for i,l in zip(range(-1,2), ['1/2','2/3','1/2'])]
sp_couples = [((1,i),(2,i+1),{'label':l,'color':'C1',
'label_offset':'right',
'label_kw':{'fontsize':'medium','color':'C1'}})
for i,l in zip(range(-1,2), ['1/6','1/2','1'])]
sm_couples = [((1,i),(2,i-1),{'label':l, 'color':'C2',
'label_offset':'left',
'label_kw':{'fontsize':'medium','color':'C2'}})
for i,l in zip(range(-1,2), ['1','1/2','1/6'])]
hf_edges = lin_couples + sp_couples + sm_couples
hf_graph = nx.DiGraph()
hf_graph.add_nodes_from(hf_nodes)
hf_graph.add_edges_from(hf_edges)
d = ld.LD(hf_graph, default_label = 'none')
d.ax.margins(y=0.2)
d.draw()
Installation
Presently, installation must be done manually using a copy of the repository.
Pure pip installation
To install in an editable way (which allows edits of the source code), run:
pip install -e .
from within the top level leveldiagram
directory (i.e. where the setup.cfg
file resides).
This command will use pip to install all necessary dependencies.
To install normally, run:
pip install .
from the same directory.
Updating an existing installation
Upgrading an existing installation is simple. Simply run the pip installation commands described above with the update flag.
pip install -U .
This command will also install any new dependencies that are required.
If using an editable install, simply replacing the files in the same directory is sufficient. Though it is recommended to also run the appropriate pip update command as well.
pip install -U -e .
Dependencies
Requires matplotlib
, networkx
, and numpy
.
Documentation
A PDF copy of the documentation is avaiable in the docs/build/latex/
directory.
Examples
Example jupyter notebooks that demonstrate leveldiagrams can be found in the examples
subdirectory.
Printouts of these notebooks are available in the docs as well.
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 leveldiagram-0.3.2.tar.gz
.
File metadata
- Download URL: leveldiagram-0.3.2.tar.gz
- Upload date:
- Size: 821.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29a9d335e2c6e56a82b0e2c88b336a8723277ee071cece8b1a8f216ad53fc47c |
|
MD5 | c1f512ea543fc9cff6be317ead83d35d |
|
BLAKE2b-256 | da64ddbb4d0227eb5b54552c072eabed7f2e5723753c537d8f0d32acf65d1e7d |
File details
Details for the file leveldiagram-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: leveldiagram-0.3.2-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0186aad9f7fffa255beb4983af992423e5fbc2b0cbb5570e09d78fcac01920e9 |
|
MD5 | d5396adde54446fd8119cd2cd7874f0a |
|
BLAKE2b-256 | be082a6da470fab488a8a54d5f3a12672872de60e2a7a88bd6e80e0f24044d99 |