% VERTEX(25) % CALLED BY FEYNMAN(34).TEX. % Vertex functions for FEYNMAN drawn via \drawvertex. % \global\advance\vertexcount by 1 % Needed and defined in FEYNMAN19&20. \newsavebox{\vertexbox} \global\newcount\LDIRcount % Counts the number of vertices drawn. \global\newcount\VERTEXNUMBER % 3 or 4; The number of particles in the vertex. \global\newdimen\VERTEXLINKONE % And now some switches. \global\newdimen\VERTEXLINKTWO \global\newdimen\VERTEXLINKTHREE \global\newdimen\VERTEXLINKFOUR %\clearvertex %sets them to zero \global\newdimen\VERTEXCAPONE % And now some GLUONCAP switches. \global\newdimen\VERTEXCAPTWO \global\newdimen\VERTEXCAPTHREE \global\newdimen\VERTEXCAPFOUR %\clearvertex %sets them to zero \global\newdimen\STEMVERTEXONE \global\newdimen\STEMVERTEXTWO \global\newdimen\STEMVERTEXTHREE \global\newdimen\STEMVERTEXFOUR %\clearvertex %sets them to zero \global\newcount\stemlengthcopy \global\newcount\vertexonex \global\newcount\vertexoney \global\newcount\vertextwox \global\newcount\vertextwoy \global\newcount\vertexthreex \global\newcount\vertexthreey \global\newcount\vertexfourx \global\newcount\vertexfoury \global\newcount\vertexmidx \global\newcount\vertexmidy \global\newcount\VERTEXLINE \global\newcount\FLIPVERTEX \global\FLIPVERTEX=0 \gdef\flipvertex{\global\FLIPVERTEX=1} %For drawing vertices with flipped lines \newcount\vertadj \newcount\negvertadj % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % SAMPLE USAGE: % % Syntax: \drawvertex<\particletype[\DIRECTION #particles in vertex (3 or 4)] % (x,y)[\number of loops or half-wiggles]> % eg: \drawvertex\gluon[\NE 3}(0,10000)[3] % Where the particle type is either \gluon or \photon % Direction is \N, \NE, \E...\NW as with drawing lines. % This is the direction of the initial vertex line which you give % the co-ords of. For 3-prong vertices the other 2 lines are 90-degrees % to each other and `opposite' the initial line forming a `Y'. % For 4-prong vertices an `X' or `+' is formed. % The initial line begins at co-ords (vertexonex,\vertexoney) and % are numbered in a clockwise sense so that the next line ends are % (\vertextwox,\vertextwoy) etc. The point of convergence is at % (\vertexmidx,\vertexmidy). % The number of particles will be either 3 (eg: WWZ vertex) or 4. % Co-ords of directed line as above. % These then become (\vertexonex,\vertexoney). % The number of loops each line of a gluon vertex has or the number of half- % wiggles each line of a general gauge vertex is the final parameter. % % To flip the initial (\vertexone) line configuration for a 3-vertex % or ALL of the lines in a 4-vertex say \flipvertex\drawvertex... % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % CALLING ROUTINES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \gdef\drawvertex#1[#2#3](#4,#5)[#6]{ \global\advance\vertexcount by 1 % Counts number of vertices draw. \global\LINETYPE=#1 % either \gluon or \photon \global\LINEDIRECTION=#2 \global\VERTEXNUMBER=#3 % either 3 or 4 \global\vertexonex=#4 \global\vertexoney=#5 \global\unitboxnumber=#6 \global\stemlengthcopy=\stemlength % Record use-defined value. % % SELECT VERTEX: % \ifnum\LINETYPE<3 \LINEERROR \fi \ifnum\LINETYPE=3 % *** PHOTONS *** % TEST WHETHER GLUONS HAVE BEEN PREVIOUSLY DRAWN: \ifnum\gluoncount=0 \def\gluonlink{\relax} \def\gluoncap{\relax} \fi \ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi \ifnum\VERTEXNUMBER=3 \THREEPHOTON\fi % 3-PHOTON VERTEX \ifnum\VERTEXNUMBER=4 \FOURPHOTON \fi % 4-PHOTON VERTEX \ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi \fi \ifnum\LINETYPE=4 % *** GLUONS *** \ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi \ifnum\VERTEXNUMBER=3 \THREEGLUON \fi % 3-GLUON VERTEX \ifnum\VERTEXNUMBER=4 \FOURGLUON \fi % 4-GLUON VERTEX \ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi \fi \ifnum\LINETYPE>4 \LINEERROR \fi \clearvertex % Resets VERTEXLINKs, VERTEXCAPS etc. } % END \drawvertex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % PHOTON VERTICES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \gdef\advtwomodeight#1{ \global\advance\LDIRcount by2\moduloeight\LDIRcount \diagFOURVERT#1[\LDIRcount]} % % %%%%%%%%%%%%%%%%%%%%%%% % % Three-Photon Vertex % % %%%%%%%%%%%%%%%%%%%%%%% \gdef\THREEPHOTON{ \ifcase\LDIR % N vertex \setvertexA[\S\REG] \setvertexB[\NW\CURLY](0,0)[2] \setvertexB[\NE\FLIPPEDCURLY](0,0)[3] \or % NE vertex \setvertexA[\SW\CURLY] \setvertexB[\N\REG](70,-100)[2] \setvertexB[\E\FLIPPED](0,0)[3] \or % E vertex \setvertexA[\W0] \setvertexB[\NE\CURLY](20,0)[2] \setvertexB[\SE\FLIPPEDCURLY](20,0)[3] \or % SE VERTEX \setvertexA[\NW\CURLY] \setvertexB[\E\REG](0,0)[2] \setvertexB[\S1](20,100)[3] \or % S VERTEX \setvertexA[\N\REG] \setvertexB[\SE\CURLY](0,0)[2] \setvertexB[\SW\FLIPPEDCURLY](0,0)[3] \or % SW vertex \setvertexA[\NE\CURLY] \setvertexB[\S\REG](-20,100)[2] \setvertexB[\W\FLIPPED](0,0)[3] \or % W vertex \setvertexA[\E\REG] \setvertexB[\SW\CURLY](0,0)[2] \setvertexB[\NW\FLIPPEDCURLY](0,0)[3] \or % NW vertex \setvertexA[\SE\CURLY] \setvertexB[\W\REG](0,0)[2] \setvertexB[\N\FLIPPED](-40,-100)[3] \else \DIRECTERROR \fi } %end \THREEPHOTON % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % %%%%%%%%%%%%%%%%%%%%%% % % Four-Photon Vertex % % %%%%%%%%%%%%%%%%%%%%%% \gdef\FOURPHOTON{ \ifnum\LDIR>-1 \global\LDIRcount=\LDIR \global\advance\LDIRcount by 4 \moduloeight\LDIRcount \setvertexA[\LDIRcount\REG] \advtwomodeight2 \advtwomodeight3 \advtwomodeight4 \else \UNIMPERROR \fi \global\FLIPVERTEX=0 } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % GLUON VERTICES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % %%%%%%%%%%%%%%%%%%%%%% % % Three-Gluon Vertex % % %%%%%%%%%%%%%%%%%%%%%% \gdef\THREEGLUON{ \vertadj=0 \adjvert % No special adjustments required for this case. \ifcase\LDIR % N vertex \setvertexA[\S\CENTRAL] \setvertexB[\NW\REG](0,0)[2] \setvertexB[\NE\FLIPPED](0,0)[3] \or % NE vertex \setvertexA[\SW\REG] \setvertexB[\N\CURLY](-170,442)[2] \setvertexB[\E 3](420,-183)[3] \setvertexC(442,442)[bl] \or % E vertex \setvertexA[\W6] \setvertexB[\NE\REG](0,0)[2] \setvertexB[\SE\FLIPPED](0,0)[3] \or % SE VERTEX \setvertexA[\NW\REG] \setvertexB[\E\CURLY](420,183)[2] \setvertexB[\S3](-183,-442)[3] \setvertexC(442,-442)[tl] \or % S VERTEX \setvertexA[\N\CENTRAL] \setvertexB[\SE\REG](0,0)[2] \setvertexB[\SW\FLIPPED](0,0)[3] \or % SW vertex \setvertexA[\NE\REG] \setvertexB[\S\CURLY](170,-442)[2] \setvertexB[\W\FLIPPEDCURLY](-420,183)[3] \setvertexC(-442,-442)[tr] \or % W vertex \setvertexA[\E\CENTRAL] \setvertexB[\SW\REG](0,0)[2] \setvertexB[\NW\FLIPPED](0,0)[3] \or % NW vertex \setvertexA[\SE\REG] \setvertexB[\W\CURLY](-420,-183)[2] \setvertexB[\N\FLIPPEDCURLY](170,442)[3] \setvertexC(-442,442)[br] \else \DIRECTERROR \fi } %end \THREEGLUON % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % %%%%%%%%%%%%%%%%%%%%% % % Four-Gluon Vertex % % %%%%%%%%%%%%%%%%%%%%% % % \gdef\FOURGLUON{ \ifodd\LDIR\vertadj=0 \else \vertadj=412 \fi \adjvert \ifcase\LDIR % N vertex \setvertexA[\S\CURLY] \MIDADJUST(\negvertadj,\vertadj) \WFOURVERT2 \NFOURVERT3 \EFOURVERT4 \or \FOURPHOTON % NE vertex \or % E vertex \setvertexA[\W\CURLY] \MIDADJUST(\vertadj,\vertadj) \NFOURVERT2 \EFOURVERT3 \SFOURVERT4 \or \FOURPHOTON % SE VERTEX \or % S VERTEX \setvertexA[\N\CURLY] \MIDADJUST(\vertadj,\negvertadj) \EFOURVERT2 \SFOURVERT3 \WFOURVERT4 \or \FOURPHOTON % SW vertex \or % W vertex \setvertexA[\E\CURLY] \MIDADJUST(\negvertadj,\negvertadj) \SFOURVERT2 \WFOURVERT3 \NFOURVERT4 \or \FOURPHOTON % NW vertex \else \DIRECTERROR \fi \global\FLIPVERTEX=0 % reset \FLIPVERTEX to unflipped case. } % End of \FOURGLUON % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % FOUR GLUON UTILITY ROUTINES: % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \MIDADJUST Adjusts the position of the vertex midpoint and draws the % central four-gluon pattern. \gdef\MIDADJUST(#1,#2){ \ifnum\FLIPVERTEX=0 \global\advance\vertexmidx by #1 \global\advance\vertexmidy by #2 \setvertexC(0,\vertadj)[bl] \setvertexC(0,\negvertadj)[tr] \setvertexC(\vertadj,0)[tl] \setvertexC(\negvertadj,0)[br] \else % \FLIPPED case \global\particleadjustx=#1 \global\particleadjusty=#2 \ifnum\LDIR=0 \global\multiply\particleadjustx by -1 \fi \ifnum\LDIR=2 \global\multiply\particleadjusty by -1 \fi \ifnum\LDIR=4 \global\multiply\particleadjustx by -1 \fi \ifnum\LDIR=6 \global\multiply\particleadjusty by -1 \fi \global\advance\vertexmidx by \particleadjustx \global\advance\vertexmidy by \particleadjusty \setvertexC(0,\negvertadj)[tl] \setvertexC(0,\vertadj)[br] \setvertexC(\negvertadj,0)[tr] \setvertexC(\vertadj,0)[bl] \fi } % \gdef\NFOURVERT#1{ \ifnum\FLIPVERTEX=0 \setvertexB[\N\CURLY](\negvertadj,\vertadj)[#1] \else \setvertexB[\N\FLIPPEDCURLY](\vertadj,\vertadj)[#1] \fi} \gdef\SFOURVERT#1{ \ifnum\FLIPVERTEX=0 \setvertexB[\S\CURLY](\vertadj,\negvertadj)[#1] \else \setvertexB[\S\FLIPPEDCURLY](\negvertadj,\negvertadj)[#1] \fi} \gdef\EFOURVERT#1{ \ifnum\FLIPVERTEX=0 \setvertexB[\E\CURLY](\vertadj,\vertadj)[#1] \else \setvertexB[\E\FLIPPEDCURLY](\vertadj,\negvertadj)[#1] \fi} \gdef\WFOURVERT#1{ \ifnum\FLIPVERTEX=0 \setvertexB[\W\CURLY](\negvertadj,\negvertadj)[#1] \else \setvertexB[\W\FLIPPEDCURLY](\negvertadj,\vertadj)[#1] \fi} \gdef\diagFOURVERT#1[#2]{\setvertexB[#2\FLIPVERTEX](0,0)[#1]} %for\NE,\SE,\SW\NW % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Utility Routines Used in Setting Up General Vertices % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \gdef\setvertexA[#1#2]{ \global\savebox\vertexbox(0,0){ \begin{picture}(0,0) %eg: \drawline\LINETYPE[\S\CENTRAL](0,0)[\unitboxnumber] \global\adjx=#2 \ifnum\FLIPVERTEX=1 \global\advance\adjx by 1 \ifnum\VERTEXNUMBER=3 \global\FLIPVERTEX=0 \fi \fi % Checks for flipped vertex and then Resets \FLIPVERTEX in 3-glue case. \ifdim\STEMVERTEXONE=1pt\backstemmed \fi \drawline\LINETYPE[#1\adjx](0,0)[\unitboxnumber] \global\stemlength=\stemlengthcopy % Re-set to use-defined value. \ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex \ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex \global\vertexmidx=\particlebackx \global\vertexmidy=\particlebacky \end{picture} }%end of \savebox \global\multiply\vertexmidx by -1 \global\multiply\vertexmidy by -1 \global\advance\vertexmidx by \vertexonex \global\advance\vertexmidy by \vertexoney %eg: \drawline\LINETYPE[\S\CENTRAL](\vertexmidx,\vertexmidy)[\unitboxnumber] \ifdim\STEMVERTEXONE=1pt\backstemmed \fi \drawline\LINETYPE[#1\adjx](\vertexmidx,\vertexmidy)[\unitboxnumber] \global\stemlength=\stemlengthcopy % Re-set to use-defined value. \ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex \ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex } %End of \setvertexA % % \gdef\setvertexB[#1#2](#3,#4)[#5]{ \global\adjx=\vertexmidx \global\adjy=\vertexmidy \global\advance\adjx by #3 \global\advance\adjy by #4 \VERTEXLINE=#5 \ifcase\VERTEXLINE\UNIMPERROR %=0 \or \UNIMPERROR %line 1 %%%%%%%%%%%%%%%%%%%%% \or \ifdim\STEMVERTEXTWO=1pt\backstemmed \fi % For stemming % \or \ifdim\STEMVERTEXTHREE=1pt\backstemmed\fi % external gluons % \or \ifdim\STEMVERTEXFOUR=1pt\backstemmed\fi % to vertex % \else \UNIMPERROR %%%%%%%%%%%%%%%%%%%%% \fi \drawline\LINETYPE[#1#2](\adjx,\adjy)[\unitboxnumber] \global\stemlength=\stemlengthcopy % Re-set to use-defined value. \ifcase\VERTEXLINE\UNIMPERROR %=0 \or \UNIMPERROR %line 1 \or \ifdim\VERTEXLINKTWO=1pt\gluonlink \fi % For linking external gluons to vert \ifdim\VERTEXCAPTWO=1pt\gluoncap \fi % For capping external gluons to vertex \global\vertextwox=\particlebackx \global\vertextwoy=\particlebacky \or \ifdim\VERTEXLINKTHREE=1pt\gluonlink\fi %For linking external gluons to vert \ifdim\VERTEXCAPTHREE=1pt\gluoncap\fi %For capping external gluons to vertex \global\vertexthreex=\particlebackx \global\vertexthreey=\particlebacky \or \ifdim\VERTEXLINKFOUR=1pt\gluonlink\fi % For linking external gluons to vert \ifdim\VERTEXCAPFOUR=1pt\gluoncap\fi % For capping external gluons to vertex \global\vertexfourx=\particlebackx \global\vertexfoury=\particlebacky \else \UNIMPERROR \fi } \gdef\setvertexC(#1,#2)[#3#4]{ \global\adjx=\vertexmidx \global\adjy=\vertexmidy \global\advance\adjx by #1 \global\advance\adjy by #2 \absstemlength=1250 % Default for 3-gluon vertex; \absstemlength unused var. \ifnum \VERTEXNUMBER=4 \absstemlength=\vertadj\double\absstemlength \fi \ifnum\phantomswitch=0 \put(\adjx,\adjy) {\oval(\absstemlength,\absstemlength)[#3#4]}\fi } \gdef\adjvert{\negvertadj=\vertadj \multiply\negvertadj by -1} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % LINKING GLUONS TO VERTICES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \gdef\vertexlink#1{ \global\VERTEXLINE=#1 \ifcase\VERTEXLINE\UNIMPERROR \or \global\VERTEXLINKONE=1pt \or \global\VERTEXLINKTWO=1pt \or \global\VERTEXLINKTHREE=1pt \or \global\VERTEXLINKFOUR=1pt \else\UNIMPERROR\fi} \gdef\vertexlinks{ \global\VERTEXLINKONE=1pt \global\VERTEXLINKTWO=1pt \global\VERTEXLINKTHREE=1pt \global\VERTEXLINKFOUR=1pt } % counters cleared by \clearvertex now defined in STEM section below. % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % CAPPING GLUONS ON VERTICES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \gdef\vertexcap#1{ \global\VERTEXLINE=#1 \ifcase\VERTEXLINE\UNIMPERROR \or \global\VERTEXCAPONE=1pt \or \global\VERTEXCAPTWO=1pt \or \global\VERTEXCAPTHREE=1pt \or \global\VERTEXCAPFOUR=1pt \else\UNIMPERROR\fi} \gdef\vertexcaps{ \global\VERTEXCAPONE=1pt \global\VERTEXCAPTWO=1pt \global\VERTEXCAPTHREE=1pt \global\VERTEXCAPFOUR=1pt } % counters cleared by \clearvertex now defined in STEM section below. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % LINKING STEMS TO VERTICES % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \gdef\stemvertex#1{ \global\VERTEXLINE=#1 \ifcase\VERTEXLINE\UNIMPERROR \or \global\STEMVERTEXONE=1pt \or \global\STEMVERTEXTWO=1pt \or \global\STEMVERTEXTHREE=1pt \or \global\STEMVERTEXFOUR=1pt \else\UNIMPERROR\fi} \gdef\stemvertices{ \global\STEMVERTEXONE=1pt \global\STEMVERTEXTWO=1pt \global\STEMVERTEXTHREE=1pt \global\STEMVERTEXFOUR=1pt } \gdef\clearvertex{ \global\STEMVERTEXONE=0pt \global\STEMVERTEXTWO=0pt \global\STEMVERTEXTHREE=0pt \global\STEMVERTEXFOUR=0pt \global\VERTEXLINKONE=0pt \global\VERTEXLINKTWO=0pt \global\VERTEXLINKTHREE=0pt \global\VERTEXLINKFOUR=0pt \global\VERTEXCAPONE=0pt \global\VERTEXCAPTWO=0pt \global\VERTEXCAPTHREE=0pt \global\VERTEXCAPFOUR=0pt \global\stemlength=275} % Re-set default. \global\stemlengthcopy=\stemlength \clearvertex %set them to zero initially. \global\stemlength=\stemlengthcopy