%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% TikZ-FeynHand, Version 1.1.0 of 2019/08/19
% Feynhand Diagrams with TikZ (LaTex manual version)
% Copyright (C) 2019 Max Dohse
% Copyright (C) 2016 Joshua Ellis
%
%
% This LaTeX file and the whole package are free:
% you can redistribute it and/or modify it under the
% terms of the GNU General Public License as published by the Free Software Foundation,
% either version 3 of the License, or (at your option) any later version.
%
% This file is a modification of the file tikzfeynman.keys.code.tex
% of the package tikz-feynman (version 1.1.0 of 2016/02/05)
% which is available online at https://ctan.org/pkg/tikz-feynman
% for a list of changes, see the file CHANGES.TXT
%
% available at https://ctan.org/pkg/tikz-feynhand
% The Current Maintainer of this work is Max Dohse.
%
% This program is distributed in the hope that it will be useful, but WITHOUT
% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
% FOR A PARTICULAR PURPOSE.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Lengths
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newlength{\feynhanddotsize}
\setlength{\feynhanddotsize}{1.5mm}

\newlength{\feynhandblobsize}
\setlength{\feynhandblobsize}{7.5mm}

\newlength{\feynhandlinesize}
\setlength{\feynhandlinesize}{0.5pt}

\newlength{\feynhandarrowsize}
\setlength{\feynhandarrowsize}{6pt}

\newlength{\feynhandtopsep}
\setlength{\feynhandtopsep}{18\feynhandlinesize}

%% Colors
\newcommand{\feynhandtopsepcolor}{white}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Shapes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Crossed Circle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pgfdeclareshape{crossed circle}
{
 \inheritsavedanchors[from=circle]
 \inheritanchorborder[from=circle]
 \inheritanchor[from=circle]{north}
 \inheritanchor[from=circle]{north west}
 \inheritanchor[from=circle]{north east}
 \inheritanchor[from=circle]{center}
 \inheritanchor[from=circle]{west}
 \inheritanchor[from=circle]{east}
 \inheritanchor[from=circle]{mid}
 \inheritanchor[from=circle]{mid west}
 \inheritanchor[from=circle]{mid east}
 \inheritanchor[from=circle]{base}
 \inheritanchor[from=circle]{base west}
 \inheritanchor[from=circle]{base east}
 \inheritanchor[from=circle]{south}
 \inheritanchor[from=circle]{south west}
 \inheritanchor[from=circle]{south east}

 \inheritbackgroundpath[from=circle]

 \foregroundpath{
   % Compute south west
   \centerpoint
   \pgf@xc=\radius
   \advance\pgf@x by-0.707107\pgf@xc
   \advance\pgf@y by-0.707107\pgf@xc
   \pgf@xa=\pgf@x \pgf@ya=\pgf@y  % Store coordinates
   % Compute north east point
   \centerpoint
   \pgf@xc=\radius
   \advance\pgf@x by0.707107\pgf@xc
   \advance\pgf@y by0.707107\pgf@xc
   \pgf@xb=\pgf@x \pgf@yb=\pgf@y  % Store coordinates
   \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
   \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
   \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
   \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
   \pgfsetarrowsstart{}
   \pgfsetarrowsend{}
}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Decorations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Complete Sines
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Complete sines replaces the path with a whole number of sine waves.
%% Thanks to http://tex.stackexchange.com/a/134516/26980
\pgfdeclaredecoration{complete sines}{initial}
{
 %% Begin by computing the overall path length and find how many sine waves we
 %% can fit in.  Nothing happens beyond the computation.
 \state{initial}[
   width=+0pt,
   next state=move,
   persistent precomputation={
     \def\tikzfeynhand@cs@angle@step{30}
     \def\tikzfeynhand@cs@current@angle{0}
     \pgfmathsetlengthmacro{\tikzfeynhand@cs@points@per@step}{
       \pgfdecoratedinputsegmentlength
       / int(\pgfdecoratedinputsegmentlength
       / \pgfdecorationsegmentlength)
       / 360
       * \tikzfeynhand@cs@angle@step}
   },
 ]{}
 %% Move to the origin to the path
 \state{move}[
   width=+\tikzfeynhand@cs@points@per@step,
   next state=draw
 ]{
   \pgfpathmoveto{\pgfpointorigin}
 }
 %% Draw the sine wave itself.  This computes the value every 20 degrees and draws straight edges.
 \state{draw}[
   width=+\tikzfeynhand@cs@points@per@step,
   switch if less than=1.25*\tikzfeynhand@cs@points@per@step to final, % <- bit of a hack
   persistent postcomputation={
     \pgfmathparse{mod(\tikzfeynhand@cs@current@angle+\tikzfeynhand@cs@angle@step, 360)}
     \let\tikzfeynhand@cs@current@angle=\pgfmathresult%
   },
 ]{
%    \pgfmathparse{sin(\tikzfeynhand@cs@current@angle) * \pgfmetadecorationsegmentamplitude / 2}
   \pgfmathparse{sin(\tikzfeynhand@cs@current@angle) * 3 * \feynhandlinesize / 2}
   \tikz@decoratepathfalse
   \pgfpathlineto{\pgfqpoint{0pt}{\pgfmathresult pt}}%
 }

 \state{final}{
   \ifdim\pgfdecoratedremainingdistance>0pt\relax
     \pgfpathlineto{\pgfpointdecoratedpathlast}
   \fi
 }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Keys
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\tikzfeynhandset{
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Hooks
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 execute at begin feynhand/.code={},
 execute at end feynhand/.code={},
 every feynhand/.style={/tikzfeynhand/every feynhand@@/.append style={#1}},
 every feynhand@@/.style={
   /tikzfeynhand/.cd,
   },
 execute at begin feynhand@@/.code={}                     %% Internal version
 execute at end feynhand@@/.code={},                      %% Internal version
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Vertices
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 every vertex@@/.style={
   /tikz/shape=coordinate,
 },
 every vertex/.style={/tikzfeynhand/every vertex@@/.append style={#1}},
 vertex/.style={
   /tikzfeynhand/every vertex@@,
 },
 %% DOTS + friends
 every dot@@/.style={
   /tikz/shape=circle,
   /tikz/draw,
   /tikz/fill,
   /tikz/inner sep=0pt,
   /tikz/outer sep=0pt,
   /tikz/minimum size=\feynhanddotsize,
   /tikz/line width = \feynhandlinesize,
 },
 every dot/.style={/tikzfeynhand/every dot@@/.append style={#1}},
 dot/.style={
   /tikzfeynhand/every dot@@,
 },
 every squaredot@@/.style={
   /tikz/shape=rectangle,
 },
 every squaredot/.style={/tikzfeynhand/every squaredot@@/.append style={#1}},
 squaredot/.style={
   /tikzfeynhand/every dot@@,
   /tikzfeynhand/every squaredot@@,
 },
 every ringdot@@/.style={
   /tikz/fill=none,
 },
 every ringdot/.style={/tikzfeynhand/every ringdot@@/.append style={#1}},
 ringdot/.style={
   /tikzfeynhand/every dot@@,
   /tikzfeynhand/every ringdot@@,
 },
 every crossdot@@/.style={
   /tikz/fill=none,
   /tikz/shape=crossed circle,
   /tikz/minimum size=2\feynhanddotsize,
 },
 every crossdot/.style={/tikzfeynhand/every crossdot@@/.append style={#1}},
 crossdot/.style={
   /tikzfeynhand/every dot@@,
   /tikzfeynhand/every crossdot@@,
 },
 %% BLOBS -------------------------------------------------
   every blob@@/.style={
   /tikz/shape=circle,
   /tikz/draw,
   /tikz/fill,
   /tikz/outer sep={0.5*\the\feynhandlinesize},
   /tikz/inner sep=0pt,
   /tikz/minimum size=\feynhandblobsize,
   /tikz/line width = \feynhandlinesize,
 },
 every blob/.style={/tikzfeynhand/every blob@@/.append style={#1}},
 blob/.style={
   /tikzfeynhand/every blob@@,
   /tikz/fill=black,
 },
 every ringblob@@/.style={
 },
 every ringblob/.style={/tikzfeynhand/every ringblob@@/.append style={#1}},
 ringblob/.style={
   /tikzfeynhand/every blob@@,
   /tikzfeynhand/every ringblob@@,
   /tikz/fill=white,
 },
 every NWblob@@/.style={
 },
 every NWblob/.style={/tikzfeynhand/every NWblob@@/.append style={#1}},
 NWblob/.style={
   /tikzfeynhand/every blob@@,
   /tikzfeynhand/every NWblob@@,
   /tikz/fill=none,
   /tikz/pattern=north west lines,
 },
 every NEblob@@/.style={
 },
 every NEblob/.style={/tikzfeynhand/every NEblob@@/.append style={#1}},
 NEblob/.style={
   /tikzfeynhand/every blob@@,
   /tikzfeynhand/every NEblob@@,
   /tikz/fill=none,
   /tikz/pattern=north east lines,
 },
 every grayblob@@/.style={
 },
 every grayblob/.style={/tikzfeynhand/every grayblob@@/.append style={#1}},
 grayblob/.style={
   /tikzfeynhand/every blob@@,
   /tikzfeynhand/every grayblob@@,
   /tikz/fill=gray!50!white,
 },
 %% PARTICLES
 every particle@@/.style={
   /tikz/shape=rectangle,
   /tikz/draw=none,
   /tikz/fill=none,
   /tikz/inner sep=0.3333em,
   /tikz/outer sep={0.5*\the\feynhandlinesize},
 },
 every particle/.style={/tikzfeynhand/every particle@@/.append style={#1}},
 particle/.style args={#1}{
   /tikzfeynhand/every particle@@,
 },
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Edge styles
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Arrow Style
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 arrow size/.store in=\tikzfeynhand@arrow@size,
 arrow size=\feynhandarrowsize,
 with arrow/.style={
   /tikz/decoration={
     markings,
     mark=at position #1 with {
       \node[
         transform shape,
         %xshift=0.5mm,
         xshift=-0.166666\feynhandarrowsize,
         fill,
         inner sep=0mm,
         minimum width = \tikzfeynhand@arrow@size,
         draw=none,
         isosceles triangle
       ] { };
     },
   },
   /tikz/postaction={
     /tikz/decorate=true,
   },
 },
 with reversed arrow/.style={
   /tikz/decoration={
     markings,
     mark=at position #1 with {
       \node[
         transform shape,
         %xshift=0.5mm,
         xshift=0.166666\feynhandarrowsize,
         rotate=180,
         fill,
         inner sep=0mm,
         minimum width = \tikzfeynhand@arrow@size,
         draw=none,
         isosceles triangle
       ] { };
     },
   },
   /tikz/postaction={
     /tikz/decorate=true,
   },
 },
 %% Base Edge Styles
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 every edge@@/.style={},
 every edge/.style={/tikzfeynhand/every edge@@/.append style={#1}},
 %% Specific Styles
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 every plain@@/.style={
   /tikz/draw=none,
   /tikz/line width = \feynhandlinesize,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
   },
 },
 every plain/.style={/tikzfeynhand/every plain@@/.append style={#1}},
 plain/.style={
   /tikzfeynhand/every plain@@,
 },
 every top@@/.style={
   /tikz/preaction={draw=\feynhandtopsepcolor,line width=\feynhandtopsep}
 },
 every top/.style={/tikzfeynhand/every top@@/.append style={#1}},
 top/.style={
   /tikzfeynhand/every top@@,
 },
 every boson@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/line width = \feynhandlinesize,
     /tikz/decoration={
       complete sines,
       amplitude=3\feynhandlinesize,
       segment length=7.5\feynhandlinesize,
     },
     /tikz/decorate=true,
   },
 },
 every boson/.style={/tikzfeynhand/every boson@@/.append style={#1}},
 boson/.style={
   /tikzfeynhand/every boson@@,
 },
 every charged boson@@/.style={
   /tikzfeynhand/with arrow=0.5,
 },
 every charged boson/.style={/tikzfeynhand/every charged boson@@/.append style={#1}},
 charged boson/.style={
   /tikzfeynhand/boson,
   /tikzfeynhand/every charged boson@@,
 },
 every anti charged boson@@/.style={
   /tikzfeynhand/with reversed arrow=0.5,
 },
 every anti charged boson/.style={/tikzfeynhand/every anti charged boson@@/.append style={#1}},
 anti charged boson/.style={
   /tikzfeynhand/boson,
   /tikzfeynhand/every anti charged boson@@,
 },
 every photon@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/line width = \feynhandlinesize,
     /tikz/decoration={
       complete sines,
       amplitude=3\feynhandlinesize,
       segment length=7.5\feynhandlinesize,
     },
     /tikz/decorate=true,
   },
 },
 every photon/.style={/tikzfeynhand/every photon@@/.append style={#1}},
 photon/.style={
   /tikzfeynhand/every photon@@,
 },
 every scalar@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/dashed,
     /tikz/line width = \feynhandlinesize,
   },
 },
 every scalar/.style={/tikzfeynhand/every scalar@@/.append style={#1}},
 scalar/.style={
   /tikzfeynhand/every scalar@@,
 },
 every charged scalar@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikzfeynhand/with arrow=0.5,
   },
 },
 every charged scalar/.style={/tikzfeynhand/every charged scalar@@/.append style={#1}},
 charged scalar/.style={
   /tikzfeynhand/scalar,
   /tikzfeynhand/every charged scalar@@,
 },
 every anti charged scalar@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikzfeynhand/with reversed arrow=0.5,
   },
 },
 every anti charged scalar/.style={/tikzfeynhand/every anti charged scalar@@/.append style={#1}},
 anti charged scalar/.style={
   /tikzfeynhand/scalar,
   /tikzfeynhand/every anti charged scalar@@,
 },
 every ghost@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/dotted,
     /tikz/line width = 2\feynhandlinesize,
   },
 },
 every ghost/.style={/tikzfeynhand/every ghost@@/.append style={#1}},
 ghost/.style={
   /tikzfeynhand/every ghost@@,
 },
 every charged ghost@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikzfeynhand/with arrow=0.5,
   },
 },
 every charged ghost/.style={/tikzfeynhand/every charged ghost@@/.append style={#1}},
 charged ghost/.style={
   /tikzfeynhand/ghost,
   /tikzfeynhand/every charged ghost@@,
 },
 every anti charged ghost@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikzfeynhand/with reversed arrow=0.5,
   },
 },
 every anti charged ghost/.style={/tikzfeynhand/every anti charged ghost@@/.append style={#1}},
 anti charged ghost/.style={
   /tikzfeynhand/ghost,
   /tikzfeynhand/every anti charged scalar@@,
 },
 every fermion@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/line width = \feynhandlinesize,
     /tikzfeynhand/with arrow=0.5,
   },
 },
 every fermion/.style={/tikzfeynhand/every fermion@@/.append style={#1}},
 fermion/.style={
   /tikzfeynhand/every fermion@@,
 },
 every anti fermion@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/line width = \feynhandlinesize,
     /tikzfeynhand/with reversed arrow=0.5,
   },
 },
 every anti fermion/.style={/tikzfeynhand/every anti fermion@@/.append style={#1}},
 anti fermion/.style={
   /tikzfeynhand/every anti fermion@@,
 },
 every majorana@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikzfeynhand/with arrow=0.33,
     /tikzfeynhand/with reversed arrow=0.73,
     /tikz/line width = \feynhandlinesize,
   },
 },
 every majorana/.style={/tikzfeynhand/every majorana@@/.append style={#1}},
 majorana/.style={
   /tikzfeynhand/every majorana@@,
 },
 every anti majorana@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikzfeynhand/with reversed arrow=0.33,
     /tikzfeynhand/with arrow=0.73,
     /tikz/line width = \feynhandlinesize,
   },
 },
 every anti majorana/.style={/tikzfeynhand/every anti majorana@@/.append style={#1}},
 anti majorana/.style={
   /tikzfeynhand/every anti majorana@@,
 },
 every gluon@@/.style={
   /tikz/draw=none,
   /tikz/decoration={name=none},
   /tikz/postaction={
     /tikz/draw,
     /tikz/line width = \feynhandlinesize,
     /tikz/decoration={
       coil,
       aspect=1.2,
       mirror,
       amplitude=3\feynhandlinesize,
       segment length=8\feynhandlinesize,
     },
     /tikz/decorate=true,
   },
 },
 every gluon/.style={/tikzfeynhand/every gluon@@/.append style={#1}},
 gluon/.style={
   /tikzfeynhand/every gluon@@,
 },
 % short versions of style names
 pho/.style={
   /tikzfeynhand/photon,
 },
 bos/.style={
   /tikzfeynhand/boson,
 },
 antbos/.style={
   /tikzfeynhand/anti charged boson,
 },
 chabos/.style={
   /tikzfeynhand/charged boson,
 },
 sca/.style={
       /tikzfeynhand/scalar,
 },
 chasca/.style={
       /tikzfeynhand/charged scalar,
 },
 antsca/.style={
   /tikzfeynhand/anti charged scalar,
 },
 fer/.style={
   /tikzfeynhand/fermion,
 },
 antfer/.style={
   /tikzfeynhand/anti fermion,
 },
 gho/.style={
   /tikzfeynhand/ghost,
 },
 chagho/.style={
   /tikzfeynhand/charged ghost,
 },
 antgho/.style={
   /tikzfeynhand/anti charged ghost,
 },
 glu/.style={
   /tikzfeynhand/gluon,
 },
 maj/.style={
   /tikzfeynhand/majorana,
 },
 antmaj/.style={
   /tikzfeynhand/anti majorana,
 },
 %% Insertions
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 insertion/.search also={/tikzfeynhand,/tikz},
 %% Parameters
 insertion/size/.store in=\tikzfeynhand@insertion@size,
 insertion/size=5\feynhandlinesize,
 insertion/style/.store in=\tikzfeynhand@insertion@style,
 insertion/style={},
 %% Styles
 insertion@@/.style args={[#1]#2}{
   /tikz/line width = \feynhandlinesize,
   /tikz/decoration={
     markings,
     mark=at position #2 with {
       \tikzfeynhandset{insertion/.cd,#1}
       \draw [\tikzfeynhand@insertion@style] (-\tikzfeynhand@insertion@size, -\tikzfeynhand@insertion@size) -- (\tikzfeynhand@insertion@size, \tikzfeynhand@insertion@size);
       \draw [\tikzfeynhand@insertion@style] (-\tikzfeynhand@insertion@size, \tikzfeynhand@insertion@size) -- (\tikzfeynhand@insertion@size, -\tikzfeynhand@insertion@size);
     },
   },
   /tikz/postaction={
     /tikz/decorate=true,
   },
 },
 insertion@@/.default={[]0.5},
 %%
 %% Slashes
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 slash/.search also={/tikzfeynhand,/tikz},
 %% Parameters
 slash/size/.store in=\tikzfeynhand@slash@size,
 slash/size=5\feynhandlinesize,
 slash/style/.store in=\tikzfeynhand@slash@style,
 slash/style={},
 %% Styles
 slash@@/.style args={[#1]#2}{
   /tikz/line width = \feynhandlinesize,
   /tikz/decoration={
     markings,
     mark=at position #2 with {
       \tikzfeynhandset{slash/.cd,#1}
       \draw [\tikzfeynhand@slash@style] (-\tikzfeynhand@slash@size, -2*\tikzfeynhand@slash@size) -- (\tikzfeynhand@slash@size, 2*\tikzfeynhand@slash@size);
     },
   },
   /tikz/postaction={
     /tikz/decorate=true,
   },
 },
 slash@@/.default={[]0.5},
 %%
 %% Backslashes
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 backslash/.search also={/tikzfeynhand,/tikz},
 %% Parameters
 backslash/size/.store in=\tikzfeynhand@backslash@size,
 backslash/size=5\feynhandlinesize,
 backslash/style/.store in=\tikzfeynhand@backslash@style,
 backslash/style={},
 %% Styles
 backslash@@/.style args={[#1]#2}{
   /tikz/line width = \feynhandlinesize,
   /tikz/decoration={
     markings,
     mark=at position #2 with {
       \tikzfeynhandset{backslash/.cd,#1}
       \draw [\tikzfeynhand@backslash@style] (-\tikzfeynhand@backslash@size, 2*\tikzfeynhand@backslash@size) -- (\tikzfeynhand@backslash@size, -2*\tikzfeynhand@backslash@size);
     },
   },
   /tikz/postaction={
     /tikz/decorate=true,
   },
 },
 backslash@@/.default={[]0.5},
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Momentum arrows
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 momentum/.search also={/tikzfeynhand,/tikz},
 %% Parameters
 momentum/label distance/.store in=\tikzfeynhand@momentum@label@distance,
 momentum/label distance=0pt,
 momentum/arrow distance/.store in=\tikzfeynhand@momentum@arrow@distance,
 momentum/arrow distance={\the\feynhandarrowsize},
 momentum/arrow shorten/.store in=\tikzfeynhand@momentum@arrow@shorten,
 momentum/arrow shorten=0.2,
 momentum/label style/.store in=\tikzfeynhand@momentum@label@style,
 momentum/label style={},
 momentum/arrow style/.store in=\tikzfeynhand@momentum@arrow@style,
 momentum/arrow style={},
 momentum/arrow thickness/.store in=\tikzfeynhand@momentum@arrow@thickness,
 momentum/arrow thickness={0.64*\the\feynhandlinesize},
 momentum/arrow size/.store in=\tikzfeynhand@momentum@arrow@size,
 momentum/arrow size={0.8*\the\feynhandarrowsize},
 %% Styles
 momentum@@/.style args={[#1]#2}{
   /tikz/preaction={
     /tikz/decoration={
       show path construction,
       moveto code={},
       lineto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
               node [pos=0.5, auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
       curveto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst)
               .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
               .. (\tikzinputsegmentlast)
               { \foreach \i in {1, ..., 50} {
                 coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               foreach \i [count=\j from 3] in {2, ..., 24} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
               }
               -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@26)$)
               node [pos=0.5, auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@arrow@style] {#2}
               foreach \i [count=\j from 27] in {26, ..., 49} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
               }
               -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@49)$);
       },
       closepath code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
               node [pos=0.5, auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
     },
     /tikz/decorate=true,
   },
 },
 momentum'@@/.style args={[#1]#2}{
   /tikz/preaction={
     /tikz/decoration={
       show path construction,
       moveto code={},
       lineto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
       curveto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst)
               .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
               .. (\tikzinputsegmentlast)
               { \foreach \i in {1, ..., 50} {
                 coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               foreach \i [count=\j from 3] in {2, ..., 24} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
               }
               -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@26)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@arrow@style] {#2}
               foreach \i [count=\j from 27] in {26, ..., 49} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
               }
               -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@49)$);
       },
       closepath code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
     },
     /tikz/decorate=true,
   },
 },
 reversed momentum@@/.style args={[#1]#2}{
   /tikz/preaction={
     /tikz/decoration={
       show path construction,
       moveto code={},
       lineto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
       curveto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast)
               .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
               .. (\tikzinputsegmentfirst)
               { \foreach \i in {1, ..., 50} {
                 coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               foreach \i [count=\j from 3] in {2, ..., 24} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
               }
               -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@26)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@arrow@style] {#2}
               foreach \i [count=\j from 27] in {26, ..., 49} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
               }
               -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@49)$);
       },
       closepath code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
               node [pos=0.5, auto, swap,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
     },
     /tikz/decorate=true,
   },
 },
 reversed momentum'@@/.style args={[#1]#2}{
   /tikz/preaction={
     /tikz/decoration={
       show path construction,
       moveto code={},
       lineto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
               node [pos=0.5,
                     auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
       curveto code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast)
               .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
               .. (\tikzinputsegmentfirst)
               { \foreach \i in {1, ..., 50} {
                 coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               foreach \i [count=\j from 3] in {2, ..., 24} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
               }
               -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@26)$)
               node [pos=0.5,
                     auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@arrow@style] {#2}
               foreach \i [count=\j from 27] in {26, ..., 49} {
                 -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
               }
               -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@49)$);
       },
       closepath code={
         \tikzfeynhandset{momentum/.cd,#1}
         \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
               coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
               coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
         \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
                       line width=\tikzfeynhand@momentum@arrow@thickness,
                       \tikzfeynhand@momentum@arrow@style]
               ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
               -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
               node [pos=0.5, auto,
                     outer sep=\tikzfeynhand@momentum@label@distance,
                     \tikzfeynhand@momentum@label@style] {#2};
       },
     },
     /tikz/decorate=true,
   },
 },
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Modifiers
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 half left/.style={
   /tikz/bend left=90,
 },
 half right/.style={
   /tikz/bend right=90,
 },
 quarter left/.style={
   /tikz/bend left=45,
 },
 quarter right/.style={
   /tikz/bend right=45,
 },
}

\endinput