tikz-palattice - draw particle accelerator lattices with TikZ Jan Schmidt <[email protected]> v2.21 (March 18, 2015) The tikz-palattice package allows for drawing a map of a particle accelerator just by giving a list of elements - similar to lattice files for simulation software. The package includes 12 common element types like dipoles, quadrupoles, cavities or screens, as well as automatic labels with element names, a legend, a rule and an environment to fade out parts of the accelerator. The coordinate of any element can be saved and used for custom tikz drawings or annotations. Thereby, lattices can be connected to draw injection/extraction or even a complete accelerator facility. KV22 QF22 M21 KV21 QD21 M22 QF24 MB1 QN2 KV SD 19 19 QD 19 KV24 QN1 hadron physics experiments M20 M24 MB3 Dipole Quadrupole Sextupole Corrector Kicker Cavity Solenoid Source KV 20 QF2 0 19 QD23 MSE23 M23 MB2 SF QF2 QD1 QD2 SSV2 SSH2 SSV3 SSH3 Tagger SSH1 SSV1 QF1 photon camera BGO-OD M18 SSH3 QD25 QF2 KV18 QF18 SX17 LQ17 SSV3 M25 QD2 Tagger PETRA2 KV25 Crystal Barrel KV17 QD17 TJQD16 QF26 M5 PETRA1 M26 LQ16 SX16 QF16 KV15 KV26 SD26 QD27 ComptonPolarimeter photon camera M15 QD15 M27 KV14 M3 B1 B2 S1 KV27 SF27 QF28 M4 VC1 K1 QF14 S2 KV13 M28 KV28 QD29 S3 INJSEPT irradiation area M12 M2 QT2 QT1 M1 KV1 QA KV2 BoosterSynchrotron 0.5 - 1.2 GeV M1 Q8 M29 M13 QD13 KV12 M6 KV29 M12 KV3 QB QF30 VC2 QF12 B3 SF11 KV11 QC KV30 M7 M11 QD31 Q6Q7 VC3 K2 M31 QD11 SD10 KV10 KV31 Q5 Q4 ELSA Stretcherring 0.5 - 3.2 GeV M5 M2 KD Q3 M11 M8 QF32 SX32 LQ32 KV32 SQ32 LINAC 1 EKS Q7 M10 K3 Q2 Q1 M10 DORIS M9 20 MeV TJQ32 QD1 KV01 QF10 synchrotron light diagnostic area KV09 SQ1 Q6 M9 LQ1 SX1 QF2 QD9 KV02 Q5 M2 Q4 Q3 Q2 Q1 M8 QD3 SD3 KV03 Source of pol. e− M90 QF4 SF KV 4 04 QD5 KV05 QD7 M4 M5 QF6 KV06 3 MSE2 LINAC 2 QD1 MB QF1 M6 26 MeV 0m QD2 QF2 KV08 QF8 M7 5m area for detector tests (under construction) 10 m 15 m Figure 1: The Electron Stretcher Facility ELSA at Bonn University, drawn with tikzpalattice 1 Copyright 2015 Jan Schmidt Permission is granted to distribute and/or modify both the documentation and the code under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of this license is in http://www.latex-project.org/lppl.txt Contents 1 Installation 1.1 Copy tikz-palattice.sty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Required packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 2 Basic Usage 3 3 The lattice Environment 4 4 Within lattice Environment 4.1 Elements . . . . . . . . . 4.2 Orientation of the lattice . 4.3 Rule and Legend . . . . . 4.4 Labels . . . . . . . . . . . 4.5 Colors . . . . . . . . . . . 4.6 Fade Out . . . . . . . . . 4.7 Access lattice Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 5 6 7 7 8 5 Changelog 10 6 TODO 10 1 Installation 1.1 Copy tikz-palattice.sty You just need to copy the lattice.sty file to a place where your LATEX installation can recognize it. This can be • the same folder as your .tex document or • in the LATEX system or user tree. E.g. to add it to the system tree for texlive under ubuntu: sudo mkdir −p /usr/local/share/texmf/tex/latex/lattice/ sudo cp lattice.sty /usr/local/share/texmf/tex/latex/lattice/ sudo mktexlsr For this path there is also a Makefile prepared, so just enter 2 sudo make install Otherwise read the documentation of your LATEX distribution. 1.2 Required packages • tikz • siunitx • ifthen • xargs • etoolbox 2 Basic Usage Basically, an accelerator lattice is drawn by writing element commands one after the other. White spaces and newlines are ignored. Usually you will use one drift and one other element alternately: \begin{lattice} \source{Gun}{0.4} \drift{0.267} \quadrupole{Q1}{0.4} \drift{0.29} \dipole{M1}{0.8}{30} \drift{0.29} \kicker{VC1}{0.1} \drift{0.2} \end{lattice} VC1 Gun Q1 M1 Descriptions of the commands are given in section 4. There are 5 examples coming with this package. Some of the drawings are shown in this document. Please look at the separate tex-files for the source code. Some general remarks: • it is recommended to draw lattices using \documentclass{standalone} especially for larger beamlines. • lengths are set in meter, so you write {1.32} for 1.32 m. • beamline with angle 0° goes to the right, positive angles bend counter clockwise. • some commands use the TikZ north/east/south/west terms. east of an element is always where the beam leaves the element (downstream) and west is where the beam enters the element (upstream). 3 • settings (colors, font, rotatelabel,. . . ) changed within a scope environment are set back to the previous values outside of scope • picture scale: for lattice scale=1 an element of 1m length is plotted with 2 cm length Below, the arguments of commands are given in angle brackets. The values after an equal sign are default values of optional arguments. E.g. hscale=1 i indicates that the default value of "scale" is 1. 3 The lattice Environment To draw a lattice just add \usepackage{tikz−palattice} to your preambel and use the lattice environment with \begin{lattice}[hscale=1 i][htikz options=i] ... \end{lattice} The lattice environment contains a tikzpicture environment in which the lattice is drawn using usual tikz commands. The lattice environment has 2 optional arguments: 1. hscale=1 i scales whole picture (default is 1). 2. htikz options=i gives any options for the tikzpicture (e.g. overlay, default is none). 4 Within lattice Environment 4.1 Elements Here is a list of all implemented element types. The element names are self-explanatory: \drift{hlength/mi}[hname=i] \dipole{hnamei}{harc length/mi}{hbending angle/degi}[htype=si][hthickness/m=0.6 i] \quadrupole{hnamei}{hlength/mi}[hthickness/m=0.5 i] \sextupole{hnamei}{hlength/mi}[hthickness/m=0.3 i] \corrector{hnamei}{hlength/mi}[hthickness/m=0.25 i] \kicker{hnamei}{hlength/mi}[hthickness/m=0.25 i] \cavity{hnamei}{hlength/mi}[hthickness/m=0.45 i] \solenoid{hnamei}{hlength/mi}[hthickness/m=0.2 i] \beamdump{hnamei}{hlength/mi}[hthickness/m=0.5 i] \source{hnamei}{hlength/mi}[hthickness/m=0.5 i] \screen{hnamei}[hlength/m=0.2 i] \valve{hnamei} \marker{hnamei}[hlength/m=0.35 i] % a line perpendicular to the beamline, see Fig. 2 The dipole option htype=si allows to select different dipole shapes. It is shown in example 2. Possible values are: 4 • s for a sector magnet (entrance/exit surface 90 degree to beampipe) • br for a bend rectangle magnet (parallel entrance/exit surfaces) • r for a rectangle magnet If you use any other letters, also the default (s) is used. marker 1 marker 2 Q42 M1 MySource Q1 VC1 S1 Q2 Space left! Acceleration? Figure 2: Example 1 4.2 Orientation of the lattice \start{hcoordinate/mi} sets starting point of the lattice. Use it before the first element. hcoordinate/mi is of form (x,y) or any tikz label, e.g. (mylabel.east) You can use this with \savecoordinate (section 4.7) to connect lattices, but it is recommended to do this via \goto (see below). Both are shown in example 3. \rotate{hangle/degi} bends the beamline by the given angle. \setangle{hangle/degi} sets the beamline angle to the given angle. The next element is drawn with beam axis in this direction. \goto{hcoordinate namei} sets current position and angle to values saved with \savecoordinate (section 4.7). Use this to connect lattices and draw injection, extraction or even a complete accelerator facility. This is shown in example 3. 4.3 Rule and Legend \drawrule{hposition/mi}[htick distance/m=1 i][hscale=1 i][hheight/m=0.1 i] draws a rule to visualize the size of the lattice. Coordinate is of form (x,y) or any tikz label, e.g. (mylabel.east) \legend{hposition/mi}[hscale=1 i] 5 draws a legend with all element types that occur in the lattice before this command. The given hposition/mi is north west (upper left corner) of the legend box. The scale option scales the whole box including the text, which has the usual label textsize if scale=1. \completelegend{hposition/mi}[hscale=1 i] is similar to \legend, but shows all element types. M5 M4 al sign M6 M3 M2 M7 M8 0m M1 2m 4m 6m Figure 3: From example 3 4.4 Labels Every element has a text label showing the given element name. The position and orientation of the label is set automatically according to the current angle of the beamline. Several commands to modify the labels manually are described below. If you want to disable labels, leave the element names blank or set the label color (section 4.5) to your background color. \turnlabels moves labels to other side of elements (swap with marker labels), while \northlabels \southlabels explicitly sets the labels to north or south (see section 2) of the elements. It is recommended to use these and not \turnlabels, because otherwise the label position at a certain element is determined by the number of \turnlabels commands before this element. \rotatelabels{hangle/degi}[hanchor=i] allows rotation of element labels. The hanchor=i sets the center of rotation (north, center, south west, . . . ). West corresponds to the labels first character. By default the anchor is set automatically depending on the current angle of the beamline. 6 \begin{labeldistance}{hdistance/mi} ... \end{labeldistance} sets the distance of text labels to the element center for all elements within this environment. Default is 0.35. \setlabeldistance{hdistance/mi} \resetlabeldistance sets the distance of text labels to the element center for all following elements. the reset command sets the default value. Default is 0.35. \setlabelfont{hfontsizei} sets the text label font size. Default is \normalsize. 4.5 Colors The colors can be changed at any point of the lattice. A setting is valid until the next color command. The reset commands set the according default color. Use a scope environment to change a color for a section of a lattice. \setlinecolor{htypei}{hcolor i} \resetlinecolor{htypei} for htypei drift and marker. \setelementcolor{htypei}{hcolor i}[hgradient color=whitei] \resetelementcolor{htypei} for all element types. Set hgradient color=whitei equal to hcolori to "disable" the gradient. \setlabelcolor{hcolor i} for textlabels. Set to background color to hide text labels. 4.6 Fade Out \begin{fade}[hopacity=0.25 i] ... \end{fade} reduces the opacity of all elements within the environment and sets all colors to gray. So you can fade out regions of the lattice - e.g. for presentations. This can also be used to completely hide regions by setting hopacity=0.25 i to zero. Custom drawings and annotations (see section 4.7) can also be faded out automatically. The tikz style faded provides the appropriate settings: Add faded to the style of any tikz drawing or node within the lattice environment. If it is drawn within a fade environment, it is faded out. Else its style is not changed: 7 \begin{lattice} \tikzset{mynode/.style={ anchor=west,xshift=7mm,font=\bf,red}} \setangle{−90} \drift{0.2} \sextupole{S1}{0.2} \drift{0.267} \begin{fade}[0.4] \quadrupole{Q1}{0.4} \savecoordinate{Q1}[center] \node[mynode,faded] at (Q1) {a quadrupole!}; \drift{0.29} \end{fade} \kicker{VC1}{0.1} \savecoordinate{kick}[center] \node[mynode,faded] at (kick) {a kicker!}; \drift{0.2} \dipole{M1}{0.8}{30} \drift{0.29} \end{lattice} S1 Q1 VC1 a quadrupole! a kicker! M1 4.7 Access lattice Coordinates You can use element coordinates to draw anything you want using pgf/tikz. \savecoordinate{hnamei}[hposition=easti] saves the coordinate of the previous element to access it later. Position specifies the exact place of the element. east and center are available (see section 2). • you can use all tikz/pgf commands within the lattice environment to draw anything. • You can use this to connect multiple beamlines within a lattice environment with \goto{name} (recommended, Figure 4 (b)). • You can use this to connect multiple lattice environments with \start{name}. Use the tikz overlay option. (Figure 4 (a)) 8 Dipole Quadrupole Sextupole Kicker Dipole Kicker MB1 MB1 SF1 M3 SF1 M3 QD3 M2 M1 QD3 M2 M1 SSH1 SSH1 SS1 SS1 Septum Septum QD2 QD2 QF1 QF1 (a) two lattice environments and start (b) one lattice environment and goto Figure 4: From example 3: Two ways to connect lattices 9 5 Changelog v2.1 from 2015/02/23 is the first published version. v2.2 from 2015/03/01 • added \northlabels and \southlabels • minor legend improvements (label position is now independent of current lattice settings) • minor documentation improvements v2.21 from 2015/03/18 • added faded style (apply fade out to custom annotations) • fixed sector dipole drawing • documentation fixes 6 TODO What is missing? • manually adding and editing legend entries • The look of the elements can be improved • More element types can be added • ... I am not an TEX programmer. I basically used the TikZ commands and wrote a bunch of macros. So there is: • no error handling implemented • no dedicated scoping of internal macros (use of lattice with documentclass standalone recommended) Known issues: • A circular lattice can have a significant offset (no closed circle), if the dipole bending angles are not integer. Probably, this is due to rounding or calculation accuracy. • Please report bugs! 10
© Copyright 2024