#!/usr/bin/env pyscript
# $Id: atom.py,v 1.5 2006/02/14 14:23:08 paultcochrane Exp $
"""
Diagram of an energy level diagram for quantum readout of an electronic
state of an atom. (Helpful for quantum computing.)
"""
# import the pyscript libraries
from pyscript import *
# set up the default units for the diagram
defaults.units=UNITS['cm']
# define some helpful definitions for LaTeX
defaults.tex_head=r"""
\documentclass{article}
\pagestyle{empty}
\newcommand{\ket}[1]{\mbox{$|#1\rangle$}}
\newcommand{\bra}[1]{\mbox{$\langle #1|$}}
\newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}}
\newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}}
\newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}}
\begin{document}
"""
# function to define an energy level
def level(x,y,label,**dict):
w = 1
label.w = P(x+w/2., y)
return Group(
apply(Path, (P(x-w/2.,y), P(x+w/2.,y)), dict),
label,
)
# import some functionality from the standard math library
from math import atan2,pi
# function to describe a double-headed arrow
def darrow(s, e, label, **dict):
# don't yet have an arrow object ...
gap = .05
d = e - s
length = d.length
theta = -atan2(e[1]-s[1], e[0]-s[0])/pi*180
label.s = P(length/2., gap)
p00 = P(0,0)
dh = .05
dl = .2
ah1 = apply(Path, (p00, P(dl,dh), P(dl,-dh), p00), dict)
ah2 = apply(Path, (p00, P(-dl,-dh), P(-dl,dh), p00), dict)
ah2.move(length, 0)
g = Group(
apply(Path, (P(0,0), P(length,0)), dict),
ah1, ah2,
label,
)
g.rotate(theta)
g.move(s[0], s[1])
return g
# render the diagram
render(
# four labelled levels
level(0, 0, TeX("$\ket{1}\equiv\ket{g}$")),
level(2, 0.3, TeX("$\ket{2}\equiv\ket{e}$")),
level(.5, 2, TeX("\ket{3}")),
level(2.5, 2.5, TeX("\ket{4}")),
# a dashed level describing the laser detuning
Path(P(0,1.7), P(1,1.7), dash=Dash(2)),
TeX(r'$\Delta\left\{\rule{0cm}{2.75mm}\right.$')(e=P(0,1.85)),
# double-headed arrow for the signal
darrow(P(0,0), P(.3,1.7), TeX('\small signal'),
fg=Color('green'), bg=Color('green')),
# double-headed arrow for the activation
darrow(P(.6,1.7), P(1.8,.3), TeX('\small activation'),
fg=Color('red'), bg=Color('red')),
# double-headed arrow for the read out
darrow(P(2.2,.3), P(2.5,2.5), TeX('\small read out'),
fg=Color('blue'), bg=Color('blue')),
# the output file name
file = "atom.eps",
)
# vim: expandtab shiftwidth=4:
|