#!/usr/bin/env pyscript
# $Id: detector.py,v 1.4 2006/02/14 14:23:09 paultcochrane Exp $
"""
A quantum circuit diagram of a detection setup in optical quantum computing.
"""
# import the pyscript libraries
from pyscript import *
# set up the default units for the diagram
defaults.units=UNITS['cm']
# define some helpful LaTeX macros
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}
"""
# import helpful objects from the optics and quantumcircuits libraries
from pyscript.lib.optics import BS
from pyscript.lib.quantumcircuits import detector,classicalpath
# distance between the two "rails" of the quantum circuit
h = 1.7
# define the phase plate
pp2 = P(2,0)
phase = Rectangle(width=.1, height=.4, c=pp2, bg=Color(.8) )
# define the beam splitter
pp = P(1.5,0)
bs = Rectangle(width=.1, height=1, c=pp, bg=Color(1) ).rotate(-45, pp)
# define detectors
d1 = detector()(c=P(1.5+h/2.,0))
d2 = detector()(c=P(1.5,-h/2.)).rotate(90, P(1.5,-h/2.))
# render the diagram
render(
# the rails of the quantum circuit
Path(P(1.5,h/2.), P(1.5,-h/2.)),
Path(P(3.5,h), P(0,h), P(-.5,h/2.), P(0,0), P(1.5+h/2.,0)),
# the state at one output port
TeX(r'$\ket{p}$', s=P(1.5,h/2.)),
# beam splitter and label
bs,
TeX(r'$\omega$', se=bs.n),
# labels of paths through system
TeX('$a$', sw=P(.1,h+.1)),
TeX('$b$', sw=P(.1,0.1)),
TeX('$c$', w=P(1.6,h/2.4)),
# phase plate and label
phase,
TeX(r'$\lambda$', s=phase.n+P(0,.1)),
# detectors and label
d1,
d2,
TeX('$y$', w=d1.e),
TeX('$x$', n=d2.e),
# box highlighting part of the circuit
Rectangle(width=h+.6, height=h+1, dash=Dash(2), e=d1.e+P(.4,0)),
# the input state
Dot(P(-.5,h/2.), r=.05),
TeX(r'$\ket{\psi}$', e=P(-.5,h/2.)),
# the output file name
file="detector.eps",
)
# vim: expandtab shiftwidth=4:
|