\begin{tikzpicture}
	\input{src/tikz/orchestration}

	% \def\N{15}
	% \def\T{6}

	\pgfmathtruncatemacro{\nlasttask}{\N-1}
	\pgfmathtruncatemacro{\nlastthread}{\T-1}
	\pgfmathtruncatemacro{\R}{mod(\N, \T)}

	\begin{scope}[overlay]
		\node(origin){};
		\node at (origin) (t-\T) {};
	\end{scope}

	\begin{scope}[node distance=4mm and 4mm]
		\pgfmathtruncatemacro{\nlasttaskA}{\nlasttask-\R}

		\foreach \task in {0,...,\nlasttaskA} {
			\pgfmathtruncatemacro{\r}{mod(\task, \T)}
			\ifthenelse{\r = 0}{
				\pgfmathtruncatemacro{\uppertask}{\T*(\task/\T-1)}
				\def\reltype{below}
				\def\relnode{t\uppertask}
			}{
				\pgfmathtruncatemacro{\prevtask}{\task-1}
				\def\reltype{right}
				\def\relnode{t\prevtask}
			}
			\node[orch/task=black,\reltype=of \relnode] (t\task) {};

			\draw[-] (t\task.north)
			--  node[pos=.3,orch/subtask=black] {}
					node[pos=.7,orch/subtask=black] {}
					(t\task.south);
		}

		\foreach \taskfill in {1,...,\R} {
			\pgfmathtruncatemacro{\task}{\taskfill-1}
			\pgfmathtruncatemacro{\prevtaskl}{\nlasttaskA+\task-\T+\taskfill)}
			\pgfmathtruncatemacro{\prevtaskr}{\prevtaskl+1}
			\path (t\prevtaskl.south) -- coordinate[midway](prevtask\taskfill) (t\prevtaskr.south);
			\node[orch/taskspan=black,below=of prevtask\taskfill] (ts\task) {};

			\pgfmathtruncatemacro{\taska}{\nlasttaskA+\task*2+1}
			\pgfmathtruncatemacro{\taskb}{\nlasttaskA+\task*2+2}

			\path (t\prevtaskl.south) |- node[orch/subtask=black] (t\taska) {} (ts\task.west);
			\path (t\prevtaskr.south) |- node[orch/subtask=black] (t\taskb) {} (ts\task.west);
		}

		\foreach \thread in {0,...,\nlastthread} {
			\node[above=of t\thread] (label\thread) {\en{thread}~\thread};
			\draw[-] (label\thread) -- (t\thread);

			\pgfmathtruncatemacro{\n}{floor((\N-1)/\T)-1}
			\ifthenelse{\n = -1}{}{% only if N>T
				\foreach \task in {0,...,\n} {
					\pgfmathtruncatemacro{\curtask}{\thread+\task*\T}
					\pgfmathtruncatemacro{\nexttask}{\curtask+\T}
					\draw[-] (t\curtask) -- (t\nexttask);
				}
			}

			\pgfmathtruncatemacro{\lasttask}{\thread+(\n+1)*\T}
			\draw[-] (t\lasttask) -- (\curcoord |- ts0.south) -- +(0,-4mm);
		}
	\end{scope}

	\begin{scope}[common/overlay]
		\pgfmathtruncatemacro{\n}{ceil((2*\N-1)/\T)}
		\pgfmathtruncatemacro{\nr}{(\N-1)/\T}
		\pgfmathtruncatemacro{\ftlt}{\nr*\T}
		\node[orch/task=black,draw=none,fill=none](lt) at (t\ftlt) {};

		\draw[decorate,decoration={brace, amplitude=4pt, raise=9mm, mirror}]
		(t0.north) -- (t0.south) node[left,midway,xshift=-11mm] {$2\,T$};

		\draw[decorate,decoration={brace, amplitude=4pt, raise=9mm, mirror}]
		(lt.north) -- (lt.south) node[left,midway,xshift=-11mm] {$T$};

		\draw[decorate,decoration={brace, amplitude=4pt, raise=18mm, mirror}]
		(t0.north) -- (lt.south) node[left,midway,xshift=-20mm] {$\n{}\,T$};
	\end{scope}
\end{tikzpicture}
