Skip to main content

Energy level diagram plotting from graphs

Project description

leveldiagram

PyPI Python Version License Docs

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()

Simple 3-level diagram with default options

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()

3-level diagram with some custom options

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()

Hyperfine states with Clebsh-Gordon Coefficients

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


Download files

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

Source Distribution

leveldiagram-0.3.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

leveldiagram-0.3.0-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file leveldiagram-0.3.0.tar.gz.

File metadata

  • Download URL: leveldiagram-0.3.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for leveldiagram-0.3.0.tar.gz
Algorithm Hash digest
SHA256 bbf807d9e0ddb1476ee177a1d806f12f1bd9928ac4edc7d8d3afc37a95f52356
MD5 f3a2e74a459461d9cb1250246e963f7a
BLAKE2b-256 dc814c50d99a8248865898f82cd2a2df6799cdca75d55d2baa7cd625ef33ef37

See more details on using hashes here.

File details

Details for the file leveldiagram-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: leveldiagram-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for leveldiagram-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b26cee8f5a7c259b2188578f8b465803128f7f3bd4a8662cf177c14d0df2488
MD5 76a3725d7686492d88f9478ee8d09c64
BLAKE2b-256 f1a4392c9126d2d16cda7c69fa2ff50dac3f79836872c2adf5697e111182e8f2

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