# Double-Sided Feynman Diagrams

Is there a package for the easy creation of double-sided Feynman diagrams as typically used in nonlinear optics to understand the perturbation orders?

Since they look fairly different to "normal" Feynman diagrams, I don't think that the FeynFM package would be any help.

Edit: Figure b is what I'd like to create

COMPLETELY SWITCHING GEARS: You have updated your question but I got notified only now. I show how one can draw such things, but only typing the first two diagrams, the rest is analogous.

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{matrix,fit,positioning}
\tikzset{
mymat/.style={
matrix of math nodes,
left delimiter=|,right delimiter=|,
align=center,
column sep=-\pgflinewidth
},
mymats/.style={
mymat,
nodes={draw,fill=#1}
}
}

\begin{document}
\begin{tikzpicture}[font=\sffamily,
every left delimiter/.style={xshift=.4em},
every right delimiter/.style={xshift=-.4em}]
% first diagram
\matrix[mymat] at (0,0) (mat1)
{   0 & 0\\
1 & 0\\
0 & 0\\
1 & 0\\
0 & 0\\
};
\draw[stealth-] (mat1-4-2.south -| mat1.east) -- ++(4mm,-4mm) node[pos=0.75,above]{$k_A$};
\draw[-stealth] (mat1-3-2.south -| mat1.east) -- ++(4mm,4mm) node[pos=0.75,above]{$k_B$};
\draw[stealth-] (mat1-2-2.south -| mat1.west) -- ++(-4mm,-4mm) node[pos=0.75,below]{$k_C$};
\draw[-stealth] (mat1-1-2.south -| mat1.west) -- ++(-4mm,4mm) node[pos=0.75,below]{$k_S$};
% second diagram
\matrix[mymat,right=2cm of mat1] (mat2)
{   0 & 0\\
1 & 0\\
0 & 0\\
1 & 0\\
0 & 0\\
};
\draw[stealth-] (mat2-4-2.south -| mat2.east) -- ++(4mm,-4mm) node[pos=0.75,above]{$k_A$};
\draw[-stealth] (mat2-2-2.south -| mat2.east) -- ++(4mm,4mm) node[pos=0.75,above]{$k_C$};
\draw[stealth-] (mat2-3-2.south -| mat2.west) -- ++(-4mm,-4mm) node[pos=0.75,below]{$k_B$};
\draw[-stealth] (mat2-1-2.south -| mat2.west) -- ++(-4mm,4mm) node[pos=0.75,below]{$k_S$};
% connect the two
\draw[green!60!black] (mat1.south) -- ++(0,-0.4) -| (mat2.south)
node[pos=0.25,above]{$A$};
\end{tikzpicture}
\end{document}


ORIGINAL ANSWER (for original question): It is certainly possible to draw such diagrams with feynmp, but this package is not designed for this. Clearly, the diagrams you wish to create are not Feynman diagrams. Here is an example for how this might work:

\begin{fmfgraph*}(60,100)
\fmftop{h1,t1,h2,t2,h3}
\fmfbottom{h4,b1,h5,b2,h6}
\fmf{plain}{t1,b1}
\fmf{plain}{t2,b2}
\fmffreeze
\fmf{phantom}{t1,l1,l2,l3,l4,l5,b1}
\fmf{phantom}{t2,r1,r2,r3,r4,r5,b2}
\fmffreeze
\fmf{plain,left}{t1,t2}
\fmf{dashes,label=$t$}{t1,t2}
\fmfshift{0,40}{h1}
\fmf{scalar}{t1,h1}
\fmf{fermion,label=$g$,l.s=left}{b1,l5}
\fmf{phantom,label=$e$}{l5,l4}
\fmf{fermion}{h4,l5}
\fmf{fermion,label=$g$,l.s=left}{r4,b2}
\fmf{fermion,label=$~$,l.s=left}{r1,h3}
\fmfshift{0,40}{h6}
\fmf{fermion,label=$~$,l.s=left}{h6,r4}
\fmf{phantom,label=$g'$}{r1,r2}
\fmf{phantom,label=$e'$,label.side=left}{r3,r4}
\end{fmfgraph*}


It produces

I just include the code for the diagram and do not provide the document head since there are many options of how the actual compilation works (feynmp vs feynmf etc.). As you can see, I also omitted some elements which are probably momenta. This is because all packages for Feynman diagrams are not optimal in that they do not provide a way to indicate the momenta, which may be parallel or antiparallel to the fermion flow that is indicated by the arrow on the fermion line (and likewise for complex scalars), as for instance in

To achieve this, I recommend to add them using either PStricks, which is used in the example above, or Tikz. From this perspective it might be advantageous to use the Feynman package for Tikz, which I however refrain from doing because of some related drawbacks.

• Thank you for your help. The example you provide does look fairly similar (except for the round hat). I will keep the question open in case someone has a better answer. How hard is it to write a package for this? – mitit100 Oct 30 '17 at 22:30
• @mitit100 I thought you wanted the round hat since several of the diagrams in the linked articles have one. If you specify in more detail what you want, probably you'll receive more feedback. It is not very hard to write that package, and I would be happy to post it, however it requires a delicate conversion chain by invoking metapost and then a conversion to pdf. – user121799 Oct 31 '17 at 1:31
• This is one of the diagrams that I need to create. So far I draw them up with libreoffice Draw, but it would be nice to have it implemented in Latex directly. Having multiple diagrams next to each other with arrows pointing between them as well as arrows (preferably with different linestyles) for the states between the two lines would be cool too. – mitit100 Nov 2 '17 at 18:32
• @mitit100 : The link brings me to a page with many pictures and an article for which I would need to pay if I wished to access. Not very helpful. I guess you should post a MWE and a figure that you wish to obtain. – user121799 Nov 4 '17 at 21:02