# Particle mass versus lifetime & decay length

Standard Model particles plotted as mass versus lifetime to show its stability in the context of high-energy physics detectors such as the CMS detector.

Note the average decay length is given by L = γβcτ = (pc/mc2)(cτ), because β = v/c and the average distance traveled by a particle is L = v(γτ), where the lifetime is dilated due to a boost with a Lorentz factor γ = 1/sqrt(1-β2). We can write γβ = pc/mc2, because the relativistic momentum is given by p = γmv.

Mass versus proper lifetime, including the electron mass:Zoomed in so the electron falls outside the mass range:The average decay length L = γβcτ, assuming a momentum of p = 10 GeV/c:Assuming a momentum of p = 20 GeV/c:Assuming a momentum of p = 50 GeV/c:Assuming a momentum of p = 100 GeV/c:Assuming a momentum p between 1 and 50 GeV/c to show the full variation of the decay length:

Animating the average decay length for momenta between 1 and 50 GeV/c:

Edit and compile if you like:

% Author: Izaak Neutelings (December 2022)
% Inspired by
%   https://www.sciencedirect.com/science/article/pii/S0146641019300109
%   https://iopscience.iop.org/article/10.1088/1361-6471/ab4574/pdf
\documentclass[border=3pt,tikz]{standalone}
\usepackage{siunitx}
\usepackage[outline]{contour} % glow around text
\usepackage{xfp} % needed for accuracy with \fpeval
\usepackage{pgfplots} % for the axis environment
\contourlength{1.1pt}
\tikzset{>=latex} % for LaTeX arrow head

% redraw axis on top / in front (over filled areas)
\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={after end axis/.append code={\pgfplotsdrawaxis}}}

% UNSLANT GREEK LETTERS for particle symbols
% https://tex.stackexchange.com/questions/145926/upright-greek-font-fitting-to-computer-modern
\usepackage{scalerel}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][0]{\mbox{%
\sbox{\foobox}{#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\newcommand\unslant[2][-.25]{%
\mkern1.2mu%
\ThisStyle{\slantbox[#1]{$\SavedStyle#2$}}%
\mkern-1.2mu%
}
\newcommand{\PJpsi}{J\!/\!$\unslant\psi$}

% COLORS
\colorlet{boscol}{red!80!black} % boson color
\colorlet{mescol}{blue!70!cyan!90!black} % meson color
\colorlet{barcol}{blue!80!cyan!65!red!85} % baryon color
\colorlet{lepcol}{green!80!black} % lepton color
\colorlet{promptcol}{violet!40!black} % prompt color
\colorlet{dispcol}{orange!40!black} % displaced color
\colorlet{stablecol}{green!40!black} % stable color

% STYLES
\tikzstyle{mytick}=[black,line width=0.6]
\tikzstyle{myminortick}=[black,line width=0.4]
\tikzstyle{particle}=[text=#1!60!black,draw=none,ball color=#1,postaction={
fill=#1,fill opacity=0.4,draw=#1!60!black,line width=0.1}]
\tikzset{
particle/.default=lepcol
}
\pgfplotsset{
compat=1.13,
width=8.5cm, height=6.5cm,
axis line style={mytick},
tick style={mytick},
minor tick style={myminortick},
ticklabel style={scale=0.75}
}

% MACROS
\def\tmin{1e-26} % minimum lifetime (tau)
\def\tmax{1e6}   % maximum lifetime (tau)
\def\mmin{3e-4}  % minimum mass
\def\mmax{2e3}   % maximum mass
%\def\ctmin{3e-18} % \tmin/3e8 = 1e-26*3e8
%\def\ctmax{3e14} % \tmax/3e8 = 1e6*3e8
\pgfmathsetmacro\ctmin{\fpeval{\tmin*3e8}} % minimum ctau
\pgfmathsetmacro\ctmax{\fpeval{\tmax*3e8}} % maximum ctau
\def\Lmin{1e-20}  % minimum decay length (L)
\def\Lmax{1e16}   % maximum decay length (L)
\def\xprompt{1e-6} % prompt decay in detector (ctau = 1e-6 m)
\def\xdisp{  1e-3} % displaced vertex (ctau = 1e-3 m)
\def\xstable{10}   % stable in detector (ctau = 10 m)
\def\r{1.3pt}
\def\part[#1](#2){ % draw particle ball
\draw[particle=#1] (#2) circle(\r)
}
\def\partDL[#1](#2,#3){ % draw particle ball for average decay length
% calculate average decay length as L = (pc/mc^2)*ct
\draw[particle=#1] ({\pc/(#3)*(3e8*#2)},#3) circle(\r)
}
\def\partlineDL[#1](#2,#3){ % draw particle ball for average decay length
\draw[#1,thick,line cap=round]
({\pcmin/(#3)*(3e8*#2)},#3) -- ({\pcmax/(#3)*(3e8*#2)},#3);
\draw[particle=#1] ({\pcmax/(#3)*(3e8*#2)},#3) circle(\r)
}

\begin{document}

% LOG-LOG: Mass (m) vs. lifetime (tau)
\begin{tikzpicture}
\message{^^JLog-log plot: mass vs. lifetime}
\begin{loglogaxis}[
xmin=\tmin, xmax=\tmax,
ymin=\mmin, ymax=\mmax,
log basis x=10,
log basis y=10,
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)} \ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
%ytick={0.0001,0.001,0.01,0.1,1,10,100,1000},
max space between ticks=25,
yminorticks=true,
%xminorticks=true,
xlabel={Proper lifetime $\tau$\:[s]},
ylabel={Particle mass $m$\:[$\text{GeV}/c^2$]},
xlabel style={below=-3pt},
ylabel style={above=-7pt},
yticklabel style={left=-1pt},
axis x line*=bottom,
axis y line*=left,
axis line on top, % redraw axis on top/in front
]

% BANDS
\pgfmathsetmacro\tprompt{\fpeval{\xprompt/3e8}} % prompt decay in detector (tau = 1e-6/3e8)
\pgfmathsetmacro\tdisp{  \fpeval{\xdisp/3e8}}   % displaced vertex (tau = 1e-3/3e8)
\pgfmathsetmacro\tstable{\fpeval{\xstable/3e8}} % stable in detector (tau = 10/3e-8)
\fill[dispcol!3] (\tstable,\mmin) rectangle (\tprompt,\mmax);
\fill[promptcol!7] (\tmin,\mmin) rectangle (3*\tprompt,\mmax);
\fill[stablecol!7] (0.33*\tstable,\mmin) rectangle (\tmax,\mmax);
\draw[densely dashed,promptcol!60] (\tprompt,\mmin) -- (\tprompt,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$c\tau = \SI{1}{\micro m}$};
\draw[densely dashed,dispcol!60] (\tdisp,\mmin) -- (\tdisp,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$c\tau = \SI{1}{mm}$};
\draw[densely dashed,stablecol!60] (\tstable,\mmin) -- (\tstable,\mmax)
node[pos=0.05,rotate=90,below right=-0.5pt,scale=0.6] {$c\tau = \SI{10}{m}$};
\node[below=3,scale=0.7,promptcol] at ({\tmin*10^(log10(\tprompt/\tmin)/2)},\mmax)
{Detector-prompt};
\node[below=3,scale=0.7,promptcol,align=center] at ({\tprompt*10^(log10(\tstable/\tprompt)/2)},\mmax) %,fill=dispcol!3
{\contour{dispcol!3}{Displaced}\\[-2pt]\contour{dispcol!3}{vertex}};
\node[below=3,scale=0.7,stablecol] at ({\tstable*10^(log10(\tmax/\tstable)/2)},\mmax)
{Detector-stable};

\begin{scope}[every node/.style={scale=0.84}]

% PARTICLES: QUARKS
\part[mescol!50!cyan](5e-25,173) node[above=0pt] {t};

% PARTICLES: BARYONS
% https://en.wikipedia.org/wiki/List_of_baryons#JP_=_1/2+_baryons
% https://en.wikipedia.org/wiki/Lambda_baryon#Types_of_lambda_baryons
\part[barcol](879,940e-3) node[anchor=-40,inner sep=1.6pt] {n$^0$};
\draw[<-,thick,barcol] (\tmax,938e-3) --++ (-10pt,0pt)
node[pos=0.85,barcol!40!black,anchor=-90,inner sep=1pt] {p$^\pm$};
%\part[barcol](8.0e-11,1.190) node[anchor=-105,inner sep=3.5pt] {$\Sigma^+$};
\part[barcol](7.4e-20,1.190) node[anchor=-10,inner sep=2pt] {$\Sigma^0$};
\part[barcol](2.6e-10,1.120) node[anchor=-100,inner sep=3.5pt] {$\Lambda$};
\part[barcol](2.0e-13,2.290) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{c}$};
\part[barcol](1.5e-12,5.620) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{b}$};

% PARTICLES: MESONS
% https://en.wikipedia.org/wiki/Meson#List
% https://en.wikipedia.org/wiki/B_meson#List_of_B_mesons
\part[mescol](8.4e-17,135e-3) node[anchor=-110,inner sep=3pt] {$\pi^0$};
\part[mescol](4.5e-24,775e-3) node[anchor=70,inner sep=4pt] {$\unslant\rho$}; %^{\pm,0}
\part[mescol](7.8e-23,783e-3) node[anchor=110,inner sep=4pt] {$\unslant\omega$};
\part[mescol](5.0e-19,548e-3) node[anchor=70,inner sep=3pt] {$\unslant\eta$};
\part[mescol](2.6e-8,140e-3) node[anchor=-160,inner sep=3pt] {$\unslant\pi^\pm$};
\part[mescol](1.2e-8,494e-3) node[anchor=-100,inner sep=3.5pt] {K\contour{stablecol!7}{$^\pm$}};
%\part[mescol](1.2e-8,494e-3) node[anchor=35,inner sep=1pt] {K$^\pm$};
%\part[mescol](9.0e-11,498e-3) node[anchor=35,inner sep=2pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\part[mescol](9.0e-11,498e-3) node[anchor=95,inner sep=3pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\part[mescol](5.1e-8,498e-3) node[anchor=190,inner sep=3.5pt] {K$_\mathrm{L}^0$};
\part[mescol](7.4e-20,892e-3) node[anchor=-165,inner sep=3pt] {K$^{*\pm}$};
\part[mescol](7.1e-21,3.10) node[anchor=190,inner sep=4pt] {\PJpsi};
\part[mescol](7.1e-21,9.46) node[anchor=200,inner sep=3pt] {$\Upsilon$};
\part[mescol](1e-12,1.86)
node[anchor=-175,inner sep=3pt] {\contour{dispcol!3}{D}}; %$^{\pm,0}$,\,D$^0$
\part[mescol](1.6e-12,5.28)
node[anchor=-170,inner sep=3pt] {B}; %$^{\pm,0}$,\,B$^0$

% PARTICLES: LEPTONS
\part[lepcol](2.2e-6,105e-3) node[anchor=120,inner sep=3pt] {$\unslant\mu$};
\part[lepcol](2.9e-13,1.777) node[anchor=60,inner sep=3pt] {$\unslant\tau$};
\draw[<-,thick,lepcol] (\tmax,510e-6) --++ (-10pt,0pt)
node[pos=0.8,lepcol!40!black,anchor=-50,inner sep=2pt] {e};

% PARTICLES: BOSONS
\part[boscol](1e-25,91.0); %node[above right=-1pt] {W$^\pm$};
\part[boscol](1e-25,80.4) node[anchor=150,inner sep=3pt] {W$^\pm$,\,Z$^0$};
\part[boscol](1.6e-22,125) node[above right=-1pt] {H$^0$};

\end{scope}

% MINOR X TICKS for every decade
\pgfplotsinvokeforeach{-26,...,6}{
\draw[myminortick] ({10^(#1)},{\mmin}) --++ (0pt,3.0pt);
}

\end{loglogaxis}
\draw[red,mytick] % draw frame for pointed corners
(current axis.south west) rectangle (current axis.north east);

% TOP & RIGHT AXIS (pc/mc^2 vs. ctau)
\begin{loglogaxis}[
xmin=\ctmin, xmax=\ctmax,
ymin=\mmax, ymax=\mmin, % reversed for 1/x!
log basis x=10,
log basis y=10,
max space between ticks=32,
xtick={1e-16,1e-12,1e-8,1e-4,1,1e4,1e8,1e12},
%xtick={1e-15,1e-12,1e-9,1e-6,1e-3,1,1e3,1e6,1e9,1e12},
xticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\ifnum\t=0 $\hspace{3pt}1$ \else $\hspace{4pt}10^{\t}$ \fi%
},
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\hspace{-1pt}\ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
xlabel={$c\tau$\:[m]},
ylabel={$\gamma\beta/pc = 1/mc^2$\:[$1/\text{GeV}$]},
xlabel style={above=-4pt},
ylabel style={above=-14pt},
ymajorticks=true,
yminorticks=true,
%scaled ticks=false,
y coord trafo/.code={\pgfmathparse{\fpeval{1/(#1)}}}, % 1/x for tick position
%y coord inv trafo/.code={\pgfmathparse{#1}\pgfmathresult}, % 1/x for tick labels
y dir=reverse,
axis x line*=top,
axis y line*=right
]

% MINOR X TICKS every decade
\pgfplotsinvokeforeach{-18,...,16}{
\draw[myminortick] ({10^(#1)},{\mmax}) --++ (0pt,-3.0pt);
}

\end{loglogaxis}

\end{tikzpicture}

% LOG-LOG: Mass (m) vs. lifetime (tau), zoomed-in
\begin{tikzpicture}
\message{^^JLog-log plot: mass vs. lifetime}
\def\mmin{5e-2} % minimum lifetime (tau)
\def\mmax{8e2} % maximum lifetime (tau)
\begin{loglogaxis}[
xmin=\tmin, xmax=\tmax,
ymin=\mmin, ymax=\mmax,
log basis x=10,
log basis y=10,
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)} \ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
%ytick={0.0001,0.001,0.01,0.1,1,10,100,1000},
max space between ticks=25,
yminorticks=true,
%xminorticks=true,
xlabel={Proper lifetime $\tau$\:[s]},
ylabel={Particle mass $m$\:[$\text{GeV}/c^2$]},
xlabel style={below=-3pt},
ylabel style={above=-7pt},
yticklabel style={left=-1pt},
axis x line*=bottom,
axis y line*=left,
axis line on top, % redraw axis on top/in front
]

% BANDS
\pgfmathsetmacro\tprompt{\fpeval{\xprompt/3e8}} % prompt decay in detector (tau = 1e-6/3e8)
\pgfmathsetmacro\tdisp{  \fpeval{\xdisp/3e8}}   % displaced vertex (tau = 1e-3/3e8)
\pgfmathsetmacro\tstable{\fpeval{\xstable/3e8}} % stable in detector (tau = 10/3e-8)
\fill[dispcol!3] (\tstable,\mmin) rectangle (\tprompt,\mmax);
\fill[promptcol!7] (\tmin,\mmin) rectangle (3*\tprompt,\mmax);
\fill[stablecol!7] (0.33*\tstable,\mmin) rectangle (\tmax,\mmax);
\draw[densely dashed,promptcol!60] (\tprompt,\mmin) -- (\tprompt,\mmax)
node[pos=0.83,rotate=90,above left=-0.5pt,scale=0.6] {$c\tau = \SI{1}{\micro m}$};
\draw[densely dashed,dispcol!60] (\tdisp,\mmin) -- (\tdisp,\mmax)
node[pos=0.83,rotate=90,above left=-0.5pt,scale=0.6] {$c\tau = \SI{1}{mm}$};
\draw[densely dashed,stablecol!60] (\tstable,\mmin) -- (\tstable,\mmax)
node[pos=0.83,rotate=90,below left=-0.5pt,scale=0.6] {$c\tau = \SI{10}{m}$};
\node[below=3,scale=0.7,promptcol] at ({\tmin*10^(log10(\tprompt/\tmin)/2)},\mmax)
{Detector-prompt};
\node[below=3,scale=0.7,promptcol,align=center] at ({\tprompt*10^(log10(\tstable/\tprompt)/2)},\mmax)
{\contour{dispcol!3}{Displaced}\\[-2pt]\contour{dispcol!3}{vertex}};
\node[below=3,scale=0.7,stablecol] at ({\tstable*10^(log10(\tmax/\tstable)/2)},\mmax)
{Detector-stable};

\begin{scope}[every node/.style={scale=0.84}]

% PARTICLES: QUARKS
\part[mescol!50!cyan](5e-25,173) node[above=0pt] {t};

% PARTICLES: BARYONS
% https://en.wikipedia.org/wiki/List_of_baryons#JP_=_1/2+_baryons
% https://en.wikipedia.org/wiki/Lambda_baryon#Types_of_lambda_baryons
\part[barcol](879,940e-3) node[anchor=-40,inner sep=1.6pt] {n$^0$};
\draw[<-,thick,barcol] (\tmax,938e-3) --++ (-10pt,0pt)
node[pos=0.85,barcol!40!black,anchor=-90,inner sep=1pt] {p$^\pm$};
%\part[barcol](8.0e-11,1.190) node[anchor=-105,inner sep=3.5pt] {$\Sigma^+$};
\part[barcol](7.4e-20,1.190) node[anchor=-10,inner sep=2pt] {$\Sigma^0$};
\part[barcol](2.6e-10,1.120) node[anchor=-100,inner sep=3.5pt] {$\Lambda$};
\part[barcol](2.0e-13,2.290) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{c}$};
\part[barcol](1.5e-12,5.620) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{b}$};

% PARTICLES: MESONS
% https://en.wikipedia.org/wiki/Meson#List
% https://en.wikipedia.org/wiki/B_meson#List_of_B_mesons
\part[mescol](8.4e-17,135e-3) node[anchor=-110,inner sep=3pt] {$\pi^0$};
\part[mescol](4.5e-24,775e-3) node[anchor=70,inner sep=4pt] {$\unslant\rho$}; %^{\pm,0}
\part[mescol](7.8e-23,783e-3) node[anchor=110,inner sep=4pt] {$\unslant\omega$};
\part[mescol](5.0e-19,548e-3) node[anchor=70,inner sep=3pt] {$\unslant\eta$};
\part[mescol](2.6e-8,140e-3) node[anchor=-160,inner sep=3pt] {$\unslant\pi^\pm$};
\part[mescol](1.2e-8,494e-3) node[anchor=-100,inner sep=3.5pt] {K\contour{stablecol!7}{$^\pm$}};
%\part[mescol](1.2e-8,494e-3) node[anchor=35,inner sep=1pt] {K$^\pm$};
%\part[mescol](9.0e-11,498e-3) node[anchor=35,inner sep=2pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\part[mescol](9.0e-11,498e-3) node[anchor=95,inner sep=3pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\part[mescol](5.1e-8,498e-3) node[anchor=190,inner sep=3.5pt] {K$_\mathrm{L}^0$};
\part[mescol](7.4e-20,892e-3) node[anchor=-165,inner sep=3pt] {K$^{*\pm}$};
\part[mescol](7.1e-21,3.10) node[anchor=190,inner sep=4pt] {\PJpsi};
\part[mescol](7.1e-21,9.46) node[anchor=200,inner sep=3pt] {$\Upsilon$};
\part[mescol](1e-12,1.86)
node[anchor=-175,inner sep=3pt] {\contour{dispcol!3}{D}}; %$^{\pm,0}$,\,D$^0$
\part[mescol](1.6e-12,5.28)
node[anchor=-170,inner sep=3pt] {B}; %$^{\pm,0}$,\,B$^0$

% PARTICLES: LEPTONS
\part[lepcol](2.2e-6,105e-3) node[anchor=165,inner sep=3pt] {$\unslant\mu$};
\part[lepcol](2.9e-13,1.777) node[anchor=60,inner sep=3pt] {$\unslant\tau$};
\draw[<-,thick,lepcol] (\tmax,\mmin) --++ (140:10pt)
node[pos=0.8,lepcol!40!black,anchor=-40,inner sep=2pt] {e};

% PARTICLES: BOSONS
\part[boscol](1e-25,91.0); %node[above right=-1pt] {W$^\pm$};
\part[boscol](1e-25,80.4) node[anchor=150,inner sep=3pt] {W$^\pm$,\,Z$^0$};
\part[boscol](1.6e-22,125) node[above right=-1pt] {H$^0$};

\end{scope}

% MINOR X TICKS for every decade
\pgfplotsinvokeforeach{-26,...,6}{
\draw[myminortick] ({10^(#1)},{\mmin}) --++ (0pt,3.0pt);
}

\end{loglogaxis}
\draw[red,mytick] % draw frame for pointed corners
(current axis.south west) rectangle (current axis.north east);

% TOP & RIGHT AXIS (pc/mc^2 vs. ctau)
\begin{loglogaxis}[
xmin=\ctmin, xmax=\ctmax,
ymin=\mmax, ymax=\mmin, % reversed for 1/x!
log basis x=10,
log basis y=10,
max space between ticks=32,
xtick={1e-16,1e-12,1e-8,1e-4,1,1e4,1e8,1e12},
%xtick={1e-15,1e-12,1e-9,1e-6,1e-3,1,1e3,1e6,1e9,1e12},
xticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\ifnum\t=0 $\hspace{3pt}1$ \else $\hspace{4pt}10^{\t}$ \fi%
},
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\hspace{-1pt}\ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
xlabel={$c\tau$\:[m]},
ylabel={$\gamma\beta/pc = 1/mc^2$\:[$1/\text{GeV}$]},
xlabel style={above=-4pt},
ylabel style={above=-14pt},
ymajorticks=true,
yminorticks=true,
%scaled ticks=false,
y coord trafo/.code={\pgfmathparse{\fpeval{1/(#1)}}}, % 1/x for tick position
%y coord inv trafo/.code={\pgfmathparse{#1}\pgfmathresult}, % 1/x for tick labels
y dir=reverse,
axis x line*=top,
axis y line*=right
]

% MINOR X TICKS every decade
\pgfplotsinvokeforeach{-18,...,16}{
\draw[myminortick] ({10^(#1)},{\mmax}) --++ (0pt,-3.0pt);
}

\end{loglogaxis}

\end{tikzpicture}

% LOG-LOG: Mass (m) vs. average decay length (L)
\pgfplotsinvokeforeach{10,20,50,100}{
%\pgfplotsinvokeforeach{1,...,50}{ % for animation
\edef\pc{#1}
\begin{tikzpicture}
\message{^^JLog-log plot mass vs. decay length for pc=\pc}
\begin{loglogaxis}[
xmin=\Lmin, xmax=\Lmax,
ymin=\mmin, ymax=\mmax,
log basis x=10,
log basis y=10,
%xtick={1e-16,1e-12,1e-8,1e-4,1,1e4,1e8,1e12},
xticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\ifnum\t=0 $1$ \else $\hspace{3pt}10^{\t}$ \fi%
},
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)} \ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
%ytick={0.0001,0.001,0.01,0.1,1,10,100,1000},
max space between ticks=25,
yminorticks=true,
%xminorticks=true,
xlabel={Decay length $L=\gamma\beta c\tau$ ($pc=\pc\,\text{GeV}$)\:[m]},
ylabel={Particle mass $m$\:[$\text{GeV}/c^2$]},
xlabel style={below=-3pt},
ylabel style={above=-7pt},
yticklabel style={left=-1pt},
axis y line*=left,
axis line on top % redraw axis on top/in front
]

% BANDS
\fill[dispcol!3] (\xstable,\mmin) rectangle (\xprompt,\mmax);
\fill[promptcol!7] (\Lmin,\mmin) rectangle (3*\xprompt,\mmax);
\fill[stablecol!7] (0.33*\xstable,\mmin) rectangle (\Lmax,\mmax);
\draw[densely dashed,promptcol!60] (\xprompt,\mmin) -- (\xprompt,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$L = \SI{1}{\micro m}$};
\draw[densely dashed,dispcol!60] (\xdisp,\mmin) -- (\xdisp,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$L = \SI{1}{mm}$};
\draw[densely dashed,stablecol!60] (\xstable,\mmin) -- (\xstable,\mmax)
node[pos=0.05,rotate=90,below right=-0.5pt,scale=0.6] {$L = \SI{10}{m}$};
\node[below=3,scale=0.7,promptcol] at ({\Lmin*10^(log10(\xprompt/\Lmin)/2)},\mmax)
{Detector-prompt};
\node[below=3,scale=0.7,promptcol,align=center] at ({\xprompt*10^(log10(\xstable/\xprompt)/2)},\mmax)
{\contour{dispcol!3}{Displaced}\\[-2pt]\contour{dispcol!3}{vertex}};
\node[below=3,scale=0.7,stablecol] at ({\xstable*10^(log10(\Lmax/\xstable)/2)},\mmax)
{Detector-stable};

\begin{scope}[every node/.style={scale=0.84}]

% PARTICLES: QUARKS
\partDL[mescol!50!cyan](5e-25,173) node[above=0pt] {t};

% PARTICLES: BARYONS
% https://en.wikipedia.org/wiki/List_of_baryons#JP_=_1/2+_baryons
% https://en.wikipedia.org/wiki/Lambda_baryon#Types_of_lambda_baryons
\partDL[barcol](879,940e-3) node[anchor=-40,inner sep=1.6pt] {n$^0$};
\draw[<-,thick,barcol] (\Lmax,938e-3) --++ (-10pt,0pt)
node[pos=0.85,barcol!40!black,anchor=-90,inner sep=1pt] {p$^\pm$};
%\partDL[barcol](8.0e-11,1.190) node[anchor=-105,inner sep=3.5pt] {$\Sigma^+$};
\partDL[barcol](7.4e-20,1.190) node[anchor=-10,inner sep=2pt] {$\Sigma^0$};
\partDL[barcol](2.6e-10,1.120) node[anchor=-100,inner sep=3.5pt] {$\Lambda$};
\partDL[barcol](2.0e-13,2.290) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{c}$};
\partDL[barcol](1.5e-12,5.620) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{b}$};

% PARTICLES: MESONS
% https://en.wikipedia.org/wiki/Meson#List
% https://en.wikipedia.org/wiki/B_meson#List_of_B_mesons
\partDL[mescol](8.4e-17,135e-3) node[anchor=-110,inner sep=3pt] {$\pi^0$};
\partDL[mescol](4.5e-24,775e-3) node[anchor=70,inner sep=4pt] {$\unslant\rho$}; %^{\pm,0}
\partDL[mescol](7.8e-23,783e-3) node[anchor=110,inner sep=4pt] {$\unslant\omega$};
\partDL[mescol](5.0e-19,548e-3) node[anchor=70,inner sep=3pt] {$\unslant\eta$};
\partDL[mescol](2.6e-8,140e-3) node[anchor=-160,inner sep=3pt] {$\unslant\pi^\pm$};
\partDL[mescol](1.2e-8,494e-3) node[anchor=-100,inner sep=3.5pt] {K\contour{stablecol!7}{$^\pm$}};
%\partDL[mescol](1.2e-8,494e-3) node[anchor=35,inner sep=1pt] {K$^\pm$};
%\partDL[mescol](9.0e-11,498e-3) node[anchor=35,inner sep=2pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\partDL[mescol](9.0e-11,498e-3) node[anchor=95,inner sep=3pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
\partDL[mescol](5.1e-8,498e-3) node[anchor=190,inner sep=3.5pt] {K$_\mathrm{L}^0$};
\partDL[mescol](7.4e-20,892e-3) node[anchor=-165,inner sep=3pt] {K$^{*\pm}$};
\partDL[mescol](7.1e-21,3.10) node[anchor=190,inner sep=4pt] {\PJpsi};
\partDL[mescol](7.1e-21,9.46) node[anchor=200,inner sep=3pt] {$\Upsilon$};
\partDL[mescol](1e-12,1.86)
node[anchor=-175,inner sep=3pt] {\contour{dispcol!3}{D}}; %$^{\pm,0}$,\,D$^0$
\partDL[mescol](1.6e-12,5.28)
node[anchor=-170,inner sep=3pt] {B}; %$^{\pm,0}$,\,B$^0$

% PARTICLES: LEPTONS
\partDL[lepcol](2.2e-6,105e-3) node[anchor=120,inner sep=3pt] {$\unslant\mu$};
\partDL[lepcol](2.9e-13,1.777) node[anchor=60,inner sep=3pt] {$\unslant\tau$};
\draw[<-,thick,lepcol] (\Lmax,510e-6) --++ (-10pt,0pt)
node[pos=0.8,lepcol!40!black,anchor=-50,inner sep=2pt] {e};

% PARTICLES: BOSONS
\partDL[boscol](1e-25,91.0); %node[above right=-1pt] {W$^\pm$};
\partDL[boscol](1e-25,80.4) node[anchor=150,inner sep=3pt] {W$^\pm$,\,Z$^0$};
\partDL[boscol](1.6e-22,125) node[above right=-1pt] {H$^0$};

\end{scope}

% MINOR X TICKS for every decade
\pgfplotsinvokeforeach{-18,...,18}{
\draw[myminortick] ({10^(##1)},{\mmin}) --++ (0pt,3.0pt);
\draw[myminortick] ({10^(##1)},{\mmax}) --++ (0pt,-3.0pt);
}

\end{loglogaxis}
\draw[red,mytick] % draw frame for pointed corners
(current axis.south west) rectangle (current axis.north east);

% TOP & RIGHT AXIS (pc/mc^2 vs. ctau)
\begin{loglogaxis}[
xmin=\Lmin, xmax=\Lmax,
ymin=\mmax, ymax=\mmin, % reversed for 1/x!
log basis y=10,
axis line style={mytick},
x axis line style={draw=none},
x tick style={draw=none},
max space between ticks=32,
xticklabel=\empty,
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\hspace{-1pt}\ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
ylabel={$\gamma\beta = \pc\,\text{GeV}/mc^2$},
ylabel style={above=-14pt},
xtick=false,
ymajorticks=true,
yminorticks=true,
y coord trafo/.code={\pgfmathparse{\fpeval{\pc/(##1)}}}, % 1/x for tick position
%y coord inv trafo/.code={\pgfmathparse{#1}\pgfmathresult}, % 1/x for tick labels
y dir=reverse,
axis y line*=right
]
\end{loglogaxis}
\clip (-0.5cm,-0.5cm) rectangle++ (8cm,5.6cm); % to ensure unifrom height

\end{tikzpicture}} % end \pgfplotsinvokeforeach

% LOG-LOG: Mass (m) vs. average decay length (L)
\def\pcmin{1}
\def\pcmax{50}
\begin{tikzpicture}
\message{^^JLog-log plot mass vs. decay length for pcmin=\pcmin, pcmax=\pcmax}
\begin{loglogaxis}[
xmin=\Lmin, xmax=\Lmax,
ymin=\mmin, ymax=\mmax,
log basis x=10,
log basis y=10,
xticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\ifnum\t=0 $1$ \else $\hspace{3pt}10^{\t}$ \fi%
},
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)} \ifnum \t = 0 $1$ \else $10^{\t}$ \fi%
},
%ytick={0.0001,0.001,0.01,0.1,1,10,100,1000},
max space between ticks=25,
yminorticks=true,
%xminorticks=true,
xlabel={Decay length $L=\gamma\beta c\tau$ ($pc=\pcmin$--$\pcmax\,\text{GeV}$)\:[m]},
ylabel={Particle mass $m$\:[$\text{GeV}/c^2$]},
xlabel style={below=-3pt},
ylabel style={above=-7pt},
yticklabel style={left=-1pt},
axis y line*=left,
axis line on top % redraw axis on top/in front
]

% BANDS
\fill[dispcol!3] (\xstable,\mmin) rectangle (\xprompt,\mmax);
\fill[promptcol!7] (\Lmin,\mmin) rectangle (3*\xprompt,\mmax);
\fill[stablecol!7] (0.33*\xstable,\mmin) rectangle (\Lmax,\mmax);
\draw[densely dashed,promptcol!60] (\xprompt,\mmin) -- (\xprompt,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$L = \SI{1}{\micro m}$};
\draw[densely dashed,dispcol!60] (\xdisp,\mmin) -- (\xdisp,\mmax)
node[pos=0.05,rotate=90,above right=-0.5pt,scale=0.6] {$L = \SI{1}{mm}$};
\draw[densely dashed,stablecol!60] (\xstable,\mmin) -- (\xstable,\mmax)
node[pos=0.05,rotate=90,below right=-0.5pt,scale=0.6] {$L = \SI{10}{m}$};
\node[below=3,scale=0.7,promptcol] at ({\Lmin*10^(log10(\xprompt/\Lmin)/2)},\mmax)
{Detector-prompt};
\node[below=3,scale=0.7,promptcol,align=center] at ({\xprompt*10^(log10(\xstable/\xprompt)/2)},\mmax)
{\contour{dispcol!3}{Displaced}\\[-2pt]\contour{dispcol!3}{vertex}};
\node[below=3,scale=0.7,stablecol] at ({\xstable*10^(log10(\Lmax/\xstable)/2)},\mmax)
{Detector-stable};

\begin{scope}[every node/.style={scale=0.84}]

% PARTICLES: QUARKS
\partlineDL[mescol!50!cyan](5e-25,173) node[above=0pt] {t};

% PARTICLES: BARYONS
% https://en.wikipedia.org/wiki/List_of_baryons#JP_=_1/2+_baryons
% https://en.wikipedia.org/wiki/Lambda_baryon#Types_of_lambda_baryons
\partlineDL[barcol](879,940e-3) node[anchor=-40,inner sep=1.6pt] {n$^0$};
\draw[<-,thick,barcol] (\Lmax,938e-3) --++ (-10pt,0pt)
node[pos=0.85,barcol!40!black,anchor=-90,inner sep=1pt] {p$^\pm$};
%\partlineDL[barcol](8.0e-11,1.190) node[anchor=-105,inner sep=3.5pt] {$\Sigma^+$};
%\partlineDL[barcol](7.4e-20,1.190) node[anchor=-10,inner sep=2pt] {$\Sigma^0$};
\partlineDL[barcol](2.6e-10,1.120)
node[anchor=-140,inner sep=2.5pt] {\contour{stablecol!7}{$\Lambda$}};
%\partlineDL[barcol](2.0e-13,2.290) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{c}$};
%\partlineDL[barcol](1.5e-12,5.620) node[anchor=-60,inner sep=3pt] {$\Lambda_\mathrm{b}$};

% PARTICLES: MESONS
% https://en.wikipedia.org/wiki/Meson#List
% https://en.wikipedia.org/wiki/B_meson#List_of_B_mesons
\partlineDL[mescol](8.4e-17,135e-3) node[anchor=-125,inner sep=2.5pt] {$\pi^0$};
\partlineDL[mescol](7.8e-23,783e-3) node[anchor=-160,inner sep=3pt] {$\unslant\omega$};
\partlineDL[mescol](4.5e-24,775e-3) node[anchor=80,inner sep=4pt] {$\unslant\rho$}; %^{\pm,0}
\partlineDL[mescol](5.0e-19,548e-3) node[anchor=-140,inner sep=1.5pt] {$\unslant\eta$};
\partlineDL[mescol](2.6e-8,140e-3) node[anchor=-140,inner sep=2pt] {$\unslant\pi^\pm$};
\partlineDL[mescol](1.2e-8,494e-3) node[anchor=-156,inner sep=3pt] {K$^\pm$};
%\partlineDL[mescol](1.2e-8,494e-3) node[anchor=35,inner sep=1pt] {K$^\pm$};
%\partlineDL[mescol](9.0e-11,498e-3) node[anchor=35,inner sep=2pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
%\partlineDL[mescol](9.0e-11,498e-3) node[anchor=95,inner sep=3pt] {\contour{dispcol!3}{K$_\mathrm{S}^0$}};
%\partlineDL[mescol](5.1e-8,498e-3) node[anchor=190,inner sep=3.5pt] {K$_\mathrm{L}^0$};
%\partlineDL[mescol](7.4e-20,892e-3) node[anchor=-165,inner sep=3pt] {K$^{*\pm}$};
\partlineDL[mescol](7.1e-21,3.10) node[anchor=180,inner sep=3pt] {\PJpsi};
\partlineDL[mescol](7.1e-21,9.46) node[anchor=200,inner sep=2.5pt] {$\Upsilon$};
\partlineDL[mescol](1e-12,1.86)
node[anchor=-160,inner sep=3pt] {\contour{dispcol!3}{D}}; %$^{\pm,0}$,\,D$^0$
\partlineDL[mescol](1.6e-12,5.28)
node[anchor=-160,inner sep=3pt] {B}; %$^{\pm,0}$,\,B$^0$

% PARTICLES: LEPTONS
\partlineDL[lepcol](2.2e-6,105e-3) node[anchor=165,inner sep=3pt] {$\unslant\mu$};
\partlineDL[lepcol](2.9e-13,1.777) node[anchor=110,inner sep=2.6pt] {$\unslant\tau$};
\draw[<-,thick,lepcol] (\Lmax,510e-6) --++ (-10pt,0pt)
node[pos=0.8,lepcol!40!black,anchor=-50,inner sep=2pt] {e};

% PARTICLES: BOSONS
\partlineDL[boscol](1e-25,91.0) node[anchor=166,inner sep=3pt] {Z$^0$};
\partlineDL[boscol](1e-25,80.4) node[anchor=50,inner sep=3pt] {W$^\pm$}; %,\,Z$^0$
\partlineDL[boscol](1.6e-22,125) node[above right=-1pt] {H$^0$};

\end{scope}

% MINOR X TICKS for every decade
\pgfplotsinvokeforeach{-18,...,18}{
\draw[myminortick] ({10^(#1)},{\mmin}) --++ (0pt,3.0pt);
\draw[myminortick] ({10^(#1)},{\mmax}) --++ (0pt,-3.0pt);
}

\end{loglogaxis}
\draw[red,mytick] % draw frame for pointed corners
(current axis.south west) rectangle (current axis.north east);

% TOP & RIGHT AXIS (pc/mc^2 vs. ctau)
\begin{loglogaxis}[
xmin=\Lmin, xmax=\Lmax,
ymin=\mmax, ymax=\mmin, % reversed for 1/x!
log basis y=10,
axis line style={mytick},
x axis line style={draw=none},
x tick style={draw=none},
max space between ticks=32,
xticklabel=\empty,
yticklabel={% % format 10^0 as 1
\pgfmathsetmacro\t{int(\tick)}\hspace{-1pt}\ifnum\t=0 $1$ \else $10^{\t}$ \fi%
},
ylabel={$\gamma\beta = \pcmax\,\text{GeV}/mc^2$},
ylabel style={above=-14pt},
xtick=false,
ymajorticks=true,
yminorticks=true,
y coord trafo/.code={\pgfmathparse{\fpeval{\pcmax/(#1)}}}, % 1/x for tick position
y dir=reverse,
axis y line*=right
]
\end{loglogaxis}

\end{tikzpicture}

\end{document}