% TODO: Make all [H] -> [t]
\chapter{Decoding under Detector Error Models}

% Intro

\content{Intro}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Sliding-Window Decoding}
\label{sec:Sliding-Window Decoding}

% Intro

\content{Callback to previous chapter}
\content{(Maybe even historical) overview of the literature}
\content{Better yet: A proper (at least as proper as possible) review}

% High-level overview of Sliding-Window decoding

\content{Benefits of sliding-window decoding (lower latency due to
earlier decoding start)}
\content{Why it works (block diagonal structure $\rightarrow$ ``Done
with processing'' some VNs)}

% Detailed explanation of sliding-window decoding

\content{We look at rows not columns}
\content{Define W}
\content{Define F}
\content{Explain how we get the columns once we know the rows}
\content{\textbf{General note}: Mathematical definitions where possible}

% Syndrome update

\content{Explain commit region}
\content{Why we need to update the syndrome}
\content{How we update the syndrome}
\content{\textbf{General note}: Mathematical definitions where possible}

% Complete process

\content{1. Decode window}
\content{2. Commit VN estimates}
\content{3. Update syndrome}
\content{4. Decode next window}
\content{(?) Explicitly mention we don't reuse existing messages?}

\begin{figure}[H]
    \centering

    \hspace*{-114mm}%
    \begin{tikzpicture}
        \draw[decorate, decoration={brace, amplitude=10pt}, line width=1pt]
        (0,0) -- (3.1,0) node[midway, above=4mm] {Commit region};
    \end{tikzpicture}

    \centering
    \includegraphics[scale=0.75]{res/72_bb_dem.pdf}

    \vspace*{-25.3mm}

    \hspace*{-98mm}%
    \begin{tikzpicture}
        \draw[{Latex}-{Latex}, line width=.7pt] (0,   -0.75mm) -- (0,  5mm);
        \draw[line width=1pt]                   (-1mm,-0.75mm) -- (3mm,-0.75mm);
        \draw[line width=1pt]                   (-1mm,5mm)     -- (3mm,5mm);
        \node[left] at                          (-2mm,2.125mm) {$\sim W$};

        \draw[{Latex}-{Latex}, line width=.3pt] (6.5cm,1.6mm)  -- (6.5cm,5mm);
        \draw[line width=1pt]                   (6.5cm,4.9mm)  -- (6.5cm,7mm);
        \node[above] at                         (6.5cm,7mm) {$\sim F$};
    \end{tikzpicture}

    \vspace*{10mm}

    \caption{
        Visualization of the windowing process on the detector
        error matrix.
    }
    \label{fig:windowing_pcm}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Warm-Start Sliding-Window Decoding}
\label{sec:warm_start_bp}

% Intro

\content{Change view from PCM to Tanner graph}
\content{Call attention to SC-LDPC-like structure}
\content{High-level overview of modification}

% Warm-Start decoding for BP

\content{Pass messages to next window}
\content{(?) Explicitly mention initialization using only CN->VN
messages + swapping of CN and VN update?}
\content{(?) Algorithm}

% Warm-Start decoding for BPGD

\content{Modified structure of BPGD $\rightarrow$ In addition to
messages, pass decimation info}
\content{(?) Explicitly mention decimation info = channel llrs?}
\content{(?) Algorithm}

\begin{figure}[H]
    \centering

    \tikzset{
        VN/.style={
            circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
        },
        CN/.style={
            rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
        },
    }

    \begin{tikzpicture}[node distance = 5mm]
        \node[VN]                  (vn00) {};
        \node[VN, below = of vn00] (vn01) {};
        \node[VN, below = of vn01] (vn02) {};
        \node[VN, below = of vn02] (vn03) {};
        \node[VN, below = of vn03] (vn04) {};

        \coordinate (temp) at ($(vn01)!0.5!(vn02)$);

        \node[CN, left =10mm of temp] (cn00) {};
        \node[CN, below = of cn00] (cn01) {};

        \draw (vn00) -- (cn00);
        \draw (vn01) -- (cn00);
        \draw (vn03) -- (cn00);
        \draw (vn01) -- (cn01);
        \draw (vn02) -- (cn01);
        \draw (vn04) -- (cn01);

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
            \node[VN, below = of vn\i0]          (vn\i1) {};
            \node[VN, below = of vn\i1]          (vn\i2) {};
            \node[VN, below = of vn\i2]          (vn\i3) {};
            \node[VN, below = of vn\i3]          (vn\i4) {};

            \coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);

            \node[CN, left = 10mm of temp] (cn\i0) {};
            \node[CN, below = of cn\i0]     (cn\i1) {};

            \draw (vn\i0) -- (cn\i0);
            \draw (vn\i1) -- (cn\i0);
            \draw (vn\i3) -- (cn\i0);
            \draw (vn\i1) -- (cn\i1);
            \draw (vn\i2) -- (cn\i1);
            \draw (vn\i4) -- (cn\i1);
        }

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \draw (vn\prev 3) -- (cn\i 0);
            \draw (vn\prev 4) -- (cn\i 1);
        }

        \node[
            draw, inner sep=5mm,line width=1pt,
            fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
        ]
        (box1) {};
        \node[
            draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
            fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
        ]
        (box2) {};

        % Marker for W on the bottom
        \draw[line width=1pt]
        ([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
        coordinate (dim1l);
        \draw[line width=1pt]
        ([yshift=-5mm]box1.south east) -- ++(0,-4mm)
        coordinate (dim1r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
        node[midway, below=2pt] {$W$};

        % Marker for F on top
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west) -- ++(0,4mm)
        coordinate (dim3l);
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
        coordinate (dim3r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
        node[midway, above=2pt] {$F$};

        % Arrow on the top right
        \draw[-{Latex}, line width=1pt]
        ([yshift=8mm] box1.north east) -- ++(28mm,0);
    \end{tikzpicture}

    \caption{Visualization of the windowing process on the Tanner graph.}
    \label{fig:windowing_tanner}
\end{figure}

\begin{figure}[H]
    \centering

    \tikzset{
        VN/.style={
            circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
        },
        CN/.style={
            rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
        },
    }

    \begin{tikzpicture}[node distance = 5mm]
        \node[VN]                  (vn00) {};
        \node[VN, below = of vn00] (vn01) {};
        \node[VN, below = of vn01] (vn02) {};
        \node[VN, below = of vn02] (vn03) {};
        \node[VN, below = of vn03] (vn04) {};

        \coordinate (temp) at ($(vn01)!0.5!(vn02)$);

        \node[CN, left =10mm of temp] (cn00) {};
        \node[CN, below = of cn00] (cn01) {};

        \draw (vn00) -- (cn00);
        \draw (vn01) -- (cn00);
        \draw (vn03) -- (cn00);
        \draw (vn01) -- (cn01);
        \draw (vn02) -- (cn01);
        \draw (vn04) -- (cn01);

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
            \node[VN, below = of vn\i0]          (vn\i1) {};
            \node[VN, below = of vn\i1]          (vn\i2) {};
            \node[VN, below = of vn\i2]          (vn\i3) {};
            \node[VN, below = of vn\i3]          (vn\i4) {};

            \coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);

            \node[CN, left = 10mm of temp] (cn\i0) {};
            \node[CN, below = of cn\i0]     (cn\i1) {};

            \draw (vn\i0) -- (cn\i0);
            \draw (vn\i1) -- (cn\i0);
            \draw (vn\i3) -- (cn\i0);
            \draw (vn\i1) -- (cn\i1);
            \draw (vn\i2) -- (cn\i1);
            \draw (vn\i4) -- (cn\i1);
        }

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \draw (vn\prev 3) -- (cn\i 0);
            \draw (vn\prev 4) -- (cn\i 1);
        }

        \node[
            draw, inner sep=5mm,line width=1pt,
            fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
        ]
        (box1) {};
        \node[
            draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
            fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
        ]
        (box2) {};

        \draw[KITorange, line width=2pt] (cn10) -- (vn10);
        \draw[KITorange, line width=2pt] (cn10) -- (vn11);
        \draw[KITorange, line width=2pt] (cn10) -- (vn13);
        \draw[KITorange, line width=2pt] (cn11) -- (vn11);
        \draw[KITorange, line width=2pt] (cn11) -- (vn12);
        \draw[KITorange, line width=2pt] (cn11) -- (vn14);

        \draw[KITorange, line width=2pt] (vn13) -- (cn20);
        \draw[KITorange, line width=2pt] (vn14) -- (cn21);

        \draw[KITorange, line width=2pt] (cn20) -- (vn20);
        \draw[KITorange, line width=2pt] (cn20) -- (vn21);
        \draw[KITorange, line width=2pt] (cn20) -- (vn23);
        \draw[KITorange, line width=2pt] (cn21) -- (vn21);
        \draw[KITorange, line width=2pt] (cn21) -- (vn22);
        \draw[KITorange, line width=2pt] (cn21) -- (vn24);

        % Marker for W on the bottom
        \draw[line width=1pt]
        ([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
        coordinate (dim1l);
        \draw[line width=1pt]
        ([yshift=-5mm]box1.south east) -- ++(0,-4mm)
        coordinate (dim1r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
        node[midway, below=2pt] {$W$};

        % Marker for F on top
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west) -- ++(0,4mm)
        coordinate (dim3l);
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
        coordinate (dim3r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
        node[midway, above=2pt] {$F$};

        % Arrow on the top right
        \draw[-{Latex}, line width=1pt]
        ([yshift=8mm] box1.north east) -- ++(28mm,0);
    \end{tikzpicture}

    \caption{
        Visualization of the messages used for the
        initialization of the next window.
    }
    \label{fig:messages_tanner}
\end{figure}

\begin{figure}[H]
    \centering

    \tikzset{
        VN/.style={
            circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
        },
        CN/.style={
            rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
        },
    }

    \begin{tikzpicture}[node distance = 5mm]
        \node[VN]                  (vn00) {};
        \node[VN, below = of vn00] (vn01) {};
        \node[VN, below = of vn01] (vn02) {};
        \node[VN, below = of vn02] (vn03) {};
        \node[VN, below = of vn03] (vn04) {};

        \coordinate (temp) at ($(vn01)!0.5!(vn02)$);

        \node[CN, left =10mm of temp] (cn00) {};
        \node[CN, below = of cn00] (cn01) {};

        \draw (vn00) -- (cn00);
        \draw (vn01) -- (cn00);
        \draw (vn03) -- (cn00);
        \draw (vn01) -- (cn01);
        \draw (vn02) -- (cn01);
        \draw (vn04) -- (cn01);

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
            \node[VN, below = of vn\i0]          (vn\i1) {};
            \node[VN, below = of vn\i1]          (vn\i2) {};
            \node[VN, below = of vn\i2]          (vn\i3) {};
            \node[VN, below = of vn\i3]          (vn\i4) {};

            \coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);

            \node[CN, left = 10mm of temp] (cn\i0) {};
            \node[CN, below = of cn\i0]     (cn\i1) {};

            \draw (vn\i0) -- (cn\i0);
            \draw (vn\i1) -- (cn\i0);
            \draw (vn\i3) -- (cn\i0);
            \draw (vn\i1) -- (cn\i1);
            \draw (vn\i2) -- (cn\i1);
            \draw (vn\i4) -- (cn\i1);
        }

        \foreach \i in {1,2,3,4} {
            \pgfmathtruncatemacro{\prev}{\i-1}

            \draw (vn\prev 3) -- (cn\i 0);
            \draw (vn\prev 4) -- (cn\i 1);
        }

        \node[
            draw, inner sep=5mm,line width=1pt,
            fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
        ]
        (box1) {};
        \node[
            draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
            fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
        ]
        (box2) {};

        \draw[KITorange, line width=2pt] (cn10) -- (vn10);
        \draw[KITorange, line width=2pt] (cn10) -- (vn11);
        \draw[KITorange, line width=2pt] (cn10) -- (vn13);
        \draw[KITorange, line width=2pt] (cn11) -- (vn11);
        \draw[KITorange, line width=2pt] (cn11) -- (vn12);
        \draw[KITorange, line width=2pt] (cn11) -- (vn14);

        \draw[KITorange, line width=2pt] (vn13) -- (cn20);
        \draw[KITorange, line width=2pt] (vn14) -- (cn21);

        \draw[KITorange, line width=2pt] (cn20) -- (vn20);
        \draw[KITorange, line width=2pt] (cn20) -- (vn21);
        \draw[KITorange, line width=2pt] (cn20) -- (vn23);
        \draw[KITorange, line width=2pt] (cn21) -- (vn21);
        \draw[KITorange, line width=2pt] (cn21) -- (vn22);
        \draw[KITorange, line width=2pt] (cn21) -- (vn24);

        \node[VN, draw=KITorange, fill=KITorange] at (vn10) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn11) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn12) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn13) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn14) {};

        \node[VN, draw=KITorange, fill=KITorange] at (vn20) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn21) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn22) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn23) {};
        \node[VN, draw=KITorange, fill=KITorange] at (vn24) {};

        % Marker for W on the bottom
        \draw[line width=1pt]
        ([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
        coordinate (dim1l);
        \draw[line width=1pt]
        ([yshift=-5mm]box1.south east) -- ++(0,-4mm)
        coordinate (dim1r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
        node[midway, below=2pt] {$W$};

        % Marker for F on top
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west) -- ++(0,4mm)
        coordinate (dim3l);
        \draw[line width=1pt]
        ([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
        coordinate (dim3r);
        \draw[{Latex}-{Latex}, line width=1pt]
        ([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
        node[midway, above=2pt] {$F$};

        % Arrow on the top right
        \draw[-{Latex}, line width=1pt]
        ([yshift=8mm] box1.north east) -- ++(28mm,0);
    \end{tikzpicture}

    \caption{
        Visualization of the messages and decimation information used for the
        initialization of the next window.
    }
    \label{fig:messages_decimation_tanner}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Numerical results}
\label{sec:warm_start_bpgd}

% Intro

\content{Some info on used code (what it is, why it was chosen)}
\content{Some info on simulation setup (Stim, circuit-level noise,
standard circuit-based depolarizing noise model, etc.)}
\content{All datapoints generated with at least 100 error frames}

%%%%%%%%%%%%%%%%
\subsection{Belief Propagation}
\label{subsec:Belief Propagation}

% Simulation setup

\content{Use min-sum}

\begin{figure}[H]
    \centering
    \begin{tikzpicture}
        \begin{axis}[
                width=\figwidth,
                height=\figheight,
                ymode=log,
                legend style={
                    cells={anchor=west},
                    cells={align=left},
                },
                enlargelimits=false,
                ymin=1e-5, ymax=2e-1,
                grid=both,
                legend pos = south east,
                xtick={0.001,0.0015,...,0.004},
                xticklabel style={/pgf/number format/fixed},
                xticklabel style={/pgf/number format/precision=4},
                scaled x ticks=false,
                xlabel={Physical error rate},
                ylabel={Per-round-LER},
            ]

            \foreach \W/\col/\mark in
            {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                \edef\temp{\noexpand
                    \addplot+[mark=\mark, solid, mark options={fill=\col}, \col]
                    table[
                        col sep=comma, x=physical_p,
                        y=LER_per_round,
                    ]
                    {res/sim/WF/WindowingSyndromeMinSumDecoder/max_iter_200/pass_soft_info_False/F_1/W_\W/LERs.csv};
                }
                \temp

                \addlegendentryexpanded{$W = \W$}
            }

            \addplot+[mark=*, solid, mark options={fill=black}, black]
            table[
                col sep=comma, x=physical_p,
                y=LER_per_round,
            ]
            {res/sim/whole/SyndromeMinSumDecoder/max_iter_200/LERs.csv};

            \addlegendentry{Whole}
        \end{axis}
    \end{tikzpicture}

    \caption{
        Comparison of the decoding performance of the $\llbracket
        144,12,12 \rrbracket$ \ac{bb} code under min-sum decoding
        ($200$ iterations) for different window sizes.
        The step size was fixed to $F=1$, $12$ rounds of syndrome
        extraction were performed and the noise model is
        standard circuit-based depolarizing noise.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \begin{tikzpicture}
        \begin{axis}[
                width=\figwidth,
                height=\figheight,
                ymode=log,
                legend style={
                    cells={anchor=west},
                    cells={align=left},
                },
                enlargelimits=false,
                ymin=1e-5, ymax=2e-1,
                grid=both,
                legend pos = south east,
                xtick={0.001,0.0015,...,0.004},
                xticklabel style={/pgf/number format/fixed},
                xticklabel style={/pgf/number format/precision=4},
                scaled x ticks=false,
                xlabel={Physical error rate},
                ylabel={Per-round-LER},
                extra description/.code={
                    \node[rotate=90, anchor=south]
                    at ([xshift=10mm]current axis.east)
                    {Warm s. (---), Cold s. (- - -)};
                },
            ]

            \foreach \W/\col/\mark in
            {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                \edef\temp{\noexpand
                    \addplot+[
                        mark=\mark, densely dashed, mark options={fill=\col},
                        \col, forget plot
                    ]
                    table[
                        col sep=comma, x=physical_p,
                        y=LER_per_round,
                    ]
                    {res/sim/WF/WindowingSyndromeMinSumDecoder/max_iter_200/pass_soft_info_False/F_1/W_\W/LERs.csv};
                }
                \temp
            }

            \foreach \W/\col/\mark in
            {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                \edef\temp{\noexpand
                    \addplot+[mark=\mark, solid, mark options={fill=\col}, \col]
                    table[
                        col sep=comma, x=physical_p,
                        y=LER_per_round,
                    ]
                    {res/sim/WF/WindowingSyndromeMinSumDecoder/max_iter_200/pass_soft_info_True/F_1/W_\W/LERs.csv};
                }
                \temp

                \addlegendentryexpanded{$W = \W$}
            }

            \addplot+[mark=*, solid, mark options={fill=black}, black]
            table[
                col sep=comma, x=physical_p,
                y=LER_per_round,
            ]
            {res/sim/whole/SyndromeMinSumDecoder/max_iter_200/LERs.csv};

            \addlegendentry{Whole}
        \end{axis}
    \end{tikzpicture}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding under the $\llbracket 144,12,12 \rrbracket$ \ac{bb}
        code for different window sizes.
        Decoding was performed using the min-sum algorithm ($200$
        iterations).
        The step size was fixed to $F=1$, $12$ rounds of syndrome
        extraction were performed and the noise model is
        standard circuit-based depolarizing noise.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \begin{tikzpicture}
        \begin{axis}[
                width=\figwidth,
                height=\figheight,
                ymode=log,
                legend style={
                    cells={anchor=west},
                    cells={align=left},
                },
                enlargelimits=false,
                ymin=1e-5, ymax=2e-1,
                grid=both,
                legend pos = south east,
                xtick={0.001,0.0015,...,0.004},
                xticklabel style={/pgf/number format/fixed},
                xticklabel style={/pgf/number format/precision=4},
                scaled x ticks=false,
                xlabel={Physical error rate},
                ylabel={Per-round-LER},
                extra description/.code={
                    \node[rotate=90, anchor=south]
                    at ([xshift=10mm]current axis.east)
                    {Warm s. (---), Cold s. (- - -)};
                },
            ]

            \foreach \F/\col/\mark in
            {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                \edef\temp{\noexpand
                    \addplot+[
                        mark=\mark, densely dashed, mark options={fill=\col},
                        \col, forget plot
                    ]
                    table[
                        col sep=comma, x=physical_p,
                        y=LER_per_round,
                    ]
                    {res/sim/WF/WindowingSyndromeMinSumDecoder/max_iter_200/pass_soft_info_False/F_\F/W_5/LERs.csv};
                }
                \temp
            }

            \foreach \F/\col/\mark in
            {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                \edef\temp{\noexpand
                    \addplot+[mark=\mark, solid, mark options={fill=\col}, \col]
                    table[
                        col sep=comma, x=physical_p,
                        y=LER_per_round,
                    ]
                    {res/sim/WF/WindowingSyndromeMinSumDecoder/max_iter_200/pass_soft_info_True/F_\F/W_5/LERs.csv};
                }
                \temp

                \addlegendentryexpanded{$F = \F$}
            }
        \end{axis}
    \end{tikzpicture}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding under the $\llbracket 144,12,12 \rrbracket$ \ac{bb}
        code for different step sizes.
        Decoding was performed using the min-sum algorithm ($200$
        iterations).
        The window size was fixed to $W=5$, $12$ rounds of syndrome
        extraction were performed and the noise model is
        standard circuit-based depolarizing noise.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \begin{subfigure}{0.48\textwidth}
        \centering
        \hspace*{-6mm}
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = north east,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$,$512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    ylabel={Per-round-LER},
                    % extra description/.code={
                    %     \node[rotate=90, anchor=south]
                    %     at ([xshift=10mm]current axis.east)
                    %     {Warm s. (---), Cold s. (- - -)};
                    % },
                ]

                \foreach \W/\col/\mark in
                {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeMinSumDecoder/p_0.0025/pass_soft_info_False/F_1/W_\W/LERs.csv};
                    }
                    \temp
                }

                \foreach \W/\col/\mark in
                {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeMinSumDecoder/p_0.0025/pass_soft_info_True/F_1/W_\W/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$W = \W$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of window sizes for $F=1$.}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = north east,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$, $512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    yticklabels={\empty},
                    % ylabel={Per-round-LER},
                    extra description/.code={
                        \node[rotate=90, anchor=south]
                        at ([xshift=10mm]current axis.east)
                        {Warm s. (---), Cold s. (- - -)};
                    },
                ]

                \foreach \F/\col/\mark in
                {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeMinSumDecoder/p_0.0025/pass_soft_info_False/F_\F/W_5/LERs.csv};
                    }
                    \temp
                }

                \foreach \F/\col/\mark in
                {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeMinSumDecoder/p_0.0025/pass_soft_info_True/F_\F/W_5/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$F = \F$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of step sizes for $W=5$.}
    \end{subfigure}

    \caption{
        Comparison of cold and warm-start sliding-window
        min-sum decoding for the $\llbracket 144, 12, 12 \rrbracket$
        \ac{bb} code
        under circuit-level noise.
        $12$ rounds of syndrome extraction were performed and
        standard circuit-based depolarizing noise was chosen as the noise model.
        The physical error probabilty was fixed to $0.0025$.
    }
\end{figure}

%%%%%%%%%%%%%%%%
\subsection{Belief Propagation with Guided Decimation}
\label{subsec:Belief Propagation with Guided Decimation}

\begin{figure}[H]
    \centering
    \hspace*{-6mm}
    \begin{subfigure}{0.5\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-5, ymax=2e-1,
                    grid=both,
                    legend pos = south east,
                    xtick={0.001,0.0015,...,0.004},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Physical error rate},
                    ylabel={Per-round-LER},
                    % extra description/.code={
                    %     \node[rotate=90, anchor=south]
                    %     at ([xshift=10mm]current axis.east)
                    %     {Warm s. (---), Cold s. (- - -)};
                    % },
                ]

                \foreach \W/\col/\mark in
                {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[
                            mark=\mark, densely dashed, mark
                            options={fill=\col},
                            \col, forget plot
                        ]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_False/F_1/W_\W/LERs.csv};
                    }
                    \temp
                }

                \foreach \W/\col/\mark in
                {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoderPassDecimation/max_iter_5000/pass_soft_info_True/F_1/W_\W/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$W = \W$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of window sizes for $F=1$.}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}{0.5\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-5, ymax=2e-1,
                    grid=both,
                    legend pos = south east,
                    xtick={0.001,0.0015,0.002,...,0.004},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Physical error rate},
                    yticklabels={\empty},
                    % ylabel={Per-round-LER},
                    extra description/.code={
                        \node[rotate=90, anchor=south]
                        at ([xshift=10mm]current axis.east)
                        {Warm s. (---), Cold s. (- - -)};
                    },
                ]

                \foreach \F/\col/\mark in
                {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[
                            mark=\mark, densely dashed, mark
                            options={fill=\col},
                            \col, forget plot
                        ]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_False/F_\F/W_5/LERs.csv};
                    }
                    \temp
                }

                \foreach \F/\col/\mark in
                {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoderPassDecimation/max_iter_5000/pass_soft_info_True/F_\F/W_5/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$F = \F$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of step sizes for $W=5$.}
    \end{subfigure}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding under the $\llbracket 144,12,12 \rrbracket$ \ac{bb}.
        Decoding was performed using the \ac{bpgd} algorithm with
        $T=1$ and no limit on the number of outer iterations.
        The information used for the warm-start intialization
        included both the messages on the Tanner graph and decimation
        information.
        $12$ rounds of syndrome extraction were performed and
        standard circuit-based depolarizing noise was chosen as the noise model.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \hspace*{-6mm}
    \begin{subfigure}{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = south west,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$,$512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    ylabel={Per-round-LER},
                    % extra description/.code={
                    %     \node[rotate=90, anchor=south]
                    %     at ([xshift=10mm]current axis.east)
                    %     {Warm s. (---), Cold s. (- - -)};
                    % },
                ]

                \foreach \W/\col/\mark in
                {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_False/F_1/W_\W/LERs.csv};
                    }
                    \temp
                }

                \foreach \W/\col/\mark in
                {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_True/F_1/W_\W/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$W = \W$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of window sizes for $F=1$.}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = south west,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$,$512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    % ylabel={Per-round-LER},
                    yticklabels={\empty},
                    extra description/.code={
                        \node[rotate=90, anchor=south]
                        at ([xshift=10mm]current axis.east)
                        {Warm s. (---), Cold s. (- - -)};
                    },
                ]

                \foreach \F/\col/\mark in
                {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_False/F_\F/W_5/LERs.csv};
                    }
                    \temp
                }

                \foreach \F/\col/\mark in
                {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_True/F_\F/W_5/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$F = \F$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{
            Comparison of step sizes for $W=5$.
        }
    \end{subfigure}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding for the $\llbracket 144,12,12 \rrbracket$ \ac{bb}
        under circuit-level noise.
        Decoding was performed using the \ac{bpgd} algorithm with
        $T=1$.
        The number of iterations refers to the outer \ac{bpgd}
        iterations, i.e., the number of decimations.
        The information used for the warm-start intialization
        included only the messages on the Tanner graph.
        $12$ rounds of syndrome extraction were performed and
        standard circuit-based depolarizing noise was chosen as the noise model.
        The physical error probabilty was fixed to $0.0025$.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \hspace*{-6mm}
    \begin{subfigure}{0.5\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-5, ymax=2e-1,
                    grid=both,
                    legend pos = south east,
                    xtick={0.001,0.0015,...,0.004},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Physical error rate},
                    ylabel={Per-round-LER},
                    % extra description/.code={
                    %     \node[rotate=90, anchor=south]
                    %     at ([xshift=10mm]current axis.east)
                    %     {Warm s. (---), Cold s. (- - -)};
                    % },
                ]

                \foreach \W/\col/\mark in
                {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[
                            mark=\mark, densely dashed, mark
                            options={fill=\col},
                            \col, forget plot
                        ]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_False/F_1/W_\W/LERs.csv};
                    }
                    \temp
                }

                \foreach \W/\col/\mark in
                {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_True/F_1/W_\W/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$W = \W$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of window sizes for $F=1$.}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}{0.5\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-5, ymax=2e-1,
                    grid=both,
                    legend pos = south east,
                    xtick={0.001,0.0015,0.002,...,0.004},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Physical error rate},
                    yticklabels={\empty},
                    % ylabel={Per-round-LER},
                    extra description/.code={
                        \node[rotate=90, anchor=south]
                        at ([xshift=10mm]current axis.east)
                        {Warm s. (---), Cold s. (- - -)};
                    },
                ]

                \foreach \F/\col/\mark in
                {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[
                            mark=\mark, densely dashed, mark
                            options={fill=\col},
                            \col, forget plot
                        ]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_False/F_\F/W_5/LERs.csv};
                    }
                    \temp
                }

                \foreach \F/\col/\mark in
                {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=physical_p,
                            y=LER_per_round,
                        ]
                        {res/sim/WF/WindowingSyndromeSpaGdDecoder/max_iter_5000/pass_soft_info_True/F_\F/W_5/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$F = \F$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of step sizes for $W=5$.}
    \end{subfigure}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding for the $\llbracket 144,12,12 \rrbracket$ \ac{bb}
        under circuit-level noise.
        Decoding was performed using the \ac{bpgd} algorithm with
        $T=1$ and no limit on the number of outer iterations.
        The information used for the warm-start intialization
        included only the messages on the Tanner graph.
        $12$ rounds of syndrome extraction were performed and
        standard circuit-based depolarizing noise was chosen as the noise model.
    }
\end{figure}

\begin{figure}[H]
    \centering
    \hspace*{-6mm}
    \begin{subfigure}{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = north east,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$,$512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    ylabel={Per-round-LER},
                    % extra description/.code={
                    %     \node[rotate=90, anchor=south]
                    %     at ([xshift=10mm]current axis.east)
                    %     {Warm s. (---), Cold s. (- - -)};
                    % },
                ]

                \foreach \W/\col/\mark in
                {3/KITred/triangle,4/KITblue/diamond,5/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoder/p_0.0025/pass_soft_info_False/F_1/W_\W/LERs.csv};
                    }
                    \temp
                }

                \foreach \W/\col/\mark in
                {3/KITred/triangle*,4/KITblue/diamond*,5/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoder/p_0.0025/pass_soft_info_True/F_1/W_\W/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$W = \W$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{Comparison of window sizes for $F=1$.}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}{0.48\textwidth}
        \centering
        \begin{tikzpicture}
            \begin{axis}[
                    width=8cm,
                    height=6cm,
                    ymode=log,
                    % xmode=log,
                    legend style={
                        cells={anchor=west},
                        cells={align=left},
                    },
                    enlargelimits=false,
                    ymin=1e-3, ymax=1e-1,
                    grid=both,
                    legend pos = north east,
                    xtick={32,512,1024,2048,4096},
                    % xtick={0.001,0.0015,...,0.004},
                    xticklabels =
                    {$32$,$512$,$1{,}024$,,$2{,}048$,,$3{,}072$,,$4{,}096$},
                    xtick={32, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096},
                    xticklabel style={/pgf/number format/fixed},
                    xticklabel style={/pgf/number format/precision=4},
                    x tick label style={rotate=45, anchor=north east,
                    inner sep=1mm},
                    scaled x ticks=false,
                    xlabel={Number of BP iterations},
                    % ylabel={Per-round-LER},
                    yticklabels={\empty},
                    extra description/.code={
                        \node[rotate=90, anchor=south]
                        at ([xshift=10mm]current axis.east)
                        {Warm s. (---), Cold s. (- - -)};
                    },
                ]

                \foreach \F/\col/\mark in
                {3/KITred/triangle,2/KITblue/diamond,1/KITorange/square} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, densely dashed, forget plot, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoder/p_0.0025/pass_soft_info_False/F_\F/W_5/LERs.csv};
                    }
                    \temp
                }

                \foreach \F/\col/\mark in
                {3/KITred/triangle*,2/KITblue/diamond*,1/KITorange/square*} {
                    \edef\temp{\noexpand
                        \addplot+[mark=\mark, solid, mark
                        options={fill=\col}, \col]
                        table[
                            col sep=comma, x=max_iter,
                            y=LER_per_round,
                        ]
                        {res/sim/max_iter/WindowingSyndromeSpaGdDecoder/p_0.0025/pass_soft_info_True/F_\F/W_5/LERs.csv};
                    }
                    \temp

                    \addlegendentryexpanded{$F = \F$}
                }
            \end{axis}
        \end{tikzpicture}

        \caption{
            Comparison of step sizes for $W=5$.
        }
    \end{subfigure}

    \caption{
        Comparison of the decoding performance of cold and warm-start
        decoding for the $\llbracket 144,12,12 \rrbracket$ \ac{bb}
        under circuit-level noise.
        Decoding was performed using the \ac{bpgd} algorithm with
        $T=1$.
        The number of iterations refers to the outer \ac{bpgd}
        iterations, i.e., the number of decimations.
        The information used for the warm-start intialization
        included only the messages on the Tanner graph.
        $12$ rounds of syndrome extraction were performed and
        standard circuit-based depolarizing noise was chosen as the noise model.
        The physical error probabilty was fixed to $0.0025$.
    }
\end{figure}

