\usetikzlibrary{shapes.multipart} \usetikzlibrary {shapes.geometric} \tikzset{inport/.style={ draw=black, minimum width=0.1cm, minimum height=0.1cm, anchor=north, outer sep=0, inner sep=2.75 }} \tikzset{outport/.style={ draw=black, fill=black, minimum width=0.1cm, minimum height=0.1cm, anchor=south, outer sep=0, inner sep=2.75 }} \makeatletter \pgfkeys{/tikz/coverage residual/.initial = 100\%} \pgfkeys{/tikz/coverage latent/.initial = 0\%} \pgfdeclareshape{coverage}{ % Minimum required anchors: \savedanchor{\northeast}{ \pgf@y=1cm \pgf@x=1.5cm } \savedanchor{\southwest}{ \pgf@y=-\pgf@y \pgf@x=-\pgf@x } % Special Anchors, that can be calculated from the others (lazy calculation) \anchor{south west} {\southwest} \anchor{north east} {\northeast} \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{west} {\southwest \pgf@y=0cm \pgf@x=\pgf@x} \anchor{east} {\northeast \pgf@y=0cm \pgf@x=\pgf@x} \anchor{north} {\northeast \pgf@y=\pgf@y \pgf@x=0cm} \anchor{south} {\southwest \pgf@y=\pgf@y \pgf@x=0cm} \anchor{center} {\pgfpointorigin} \anchor{lat} {\northeast \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}} \anchor{res} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}} \anchor{in} {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}} \anchor{text} {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}} \backgroundpath{ \pgfsetstrokecolor{black} \pgfsetfillcolor{black} \pgfsetarrowsstart{} \pgfsetarrowsend{} % Construct main path \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} % construct middle line: \southwest \pgf@ya=0cm \pgf@xa=\pgf@x \northeast \pgf@yb=0cm \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfusepath{stroke} % Coverage lable: \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Coverage} \pgfusepath{stroke} % Vertical Middle Line: \northeast \pgf@yb=\pgf@y \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{0cm}{0cm}} \pgfpathlineto{\pgfpoint{0cm}{\pgf@yb}} \pgfusepath{stroke} % Left lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=-0.5\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/coverage residual}} \pgfusepath{stroke} % Right lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.5\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/coverage latent}} \pgfusepath{stroke} % Construct Output1: \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=0.5\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Output2: \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Input1: \southwest \pgf@ya=\pgf@y \pgf@xa=0cm \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} } } %%%%%%%%%%%%%%%%%%%%%% \pgfkeys{/tikz/split1 top/.initial = 50\%} \pgfdeclareshape{split1}{% % Minimum required anchors: \savedanchor{\northeast}{ \pgf@y=1cm \pgf@x=0.75cm } \savedanchor{\southwest}{ \pgf@y=-\pgf@y \pgf@x=-\pgf@x } % Special Anchors, that can be calculated from the others (lazy calculation) \anchor{south west} {\southwest} \anchor{north east} {\northeast} \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{west} {\southwest \pgf@y=0cm \pgf@x=\pgf@x} \anchor{east} {\northeast \pgf@y=0cm \pgf@x=\pgf@x} \anchor{north} {\northeast \pgf@y=\pgf@y \pgf@x=0cm} \anchor{south} {\southwest \pgf@y=\pgf@y \pgf@x=0cm} \anchor{center} {\pgfpointorigin} \anchor{out 1} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.0\pgf@x}{\pgf@y+0.2cm}} \anchor{in} {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}} \anchor{text} {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}} \backgroundpath{ \pgfsetfillcolor{black} \pgfsetstrokecolor{black} \pgfsetarrowsstart{} \pgfsetarrowsend{} % Construct main path \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} % Construct middle line: \southwest \pgf@ya=0cm \pgf@xa=\pgf@x \northeast \pgf@yb=0cm \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % Coverage lable: \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} \pgfusepath{stroke} % Left lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0cm \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split1 top}} \pgfusepath{stroke} % Construct Output1: \northeast \pgf@ya=\pgf@y \pgf@xa=1.0\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=0.0\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Input1: \southwest \pgf@ya=\pgf@y \pgf@xa=0cm \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} } } \pgfkeys{/tikz/split2 left/.initial = 50\%} \pgfkeys{/tikz/split2 right/.initial = 50\%} \pgfdeclareshape{split2}{% % Minimum required anchors: \savedanchor{\northeast}{ \pgf@y=1cm \pgf@x=1.5cm } \savedanchor{\southwest}{ \pgf@y=-\pgf@y \pgf@x=-\pgf@x } % Special Anchors, that can be calculated from the others (lazy calculation) \anchor{south west} {\southwest} \anchor{north east} {\northeast} \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{west} {\southwest \pgf@y=0cm \pgf@x=\pgf@x} \anchor{east} {\northeast \pgf@y=0cm \pgf@x=\pgf@x} \anchor{north} {\northeast \pgf@y=\pgf@y \pgf@x=0cm} \anchor{south} {\southwest \pgf@y=\pgf@y \pgf@x=0cm} \anchor{center} {\pgfpointorigin} \anchor{out 2} {\northeast \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}} \anchor{out 1} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}} \anchor{in} {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}} \anchor{text} {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}} \backgroundpath{ \pgfsetfillcolor{black} \pgfsetstrokecolor{black} \pgfsetarrowsstart{} \pgfsetarrowsend{} % Construct main path \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} % Construct middle line: \southwest \pgf@ya=0cm \pgf@xa=\pgf@x \northeast \pgf@yb=0cm \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % Vertical Middle Line: \northeast \pgf@yb=\pgf@y \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{0cm}{0cm}} \pgfpathlineto{\pgfpoint{0cm}{\pgf@yb}} \pgfusepath{stroke} % Coverage lable: \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} \pgfusepath{stroke} % Left lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=-0.5\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split2 left}} \pgfusepath{stroke} % Right lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.5\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split2 right}} \pgfusepath{stroke} % Construct Output1: \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=0.5\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Output2: \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Input1: \southwest \pgf@ya=\pgf@y \pgf@xa=0cm \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} } } \pgfkeys{/tikz/split3 left/.initial = 50\%} \pgfkeys{/tikz/split3 middle/.initial = 50\%} \pgfkeys{/tikz/split3 right/.initial = 50\%} \pgfdeclareshape{split3}{% % Minimum required anchors: \savedanchor{\northeast}{ \pgf@y=1cm \pgf@x=1.5cm } \savedanchor{\southwest}{ \pgf@y=-\pgf@y \pgf@x=-\pgf@x } % Special Anchors, that can be calculated from the others (lazy calculation) \anchor{south west} {\southwest} \anchor{north east} {\northeast} \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} \anchor{west} {\southwest \pgf@y=0cm \pgf@x=\pgf@x} \anchor{east} {\northeast \pgf@y=0cm \pgf@x=\pgf@x} \anchor{north} {\northeast \pgf@y=\pgf@y \pgf@x=0cm} \anchor{south} {\southwest \pgf@y=\pgf@y \pgf@x=0cm} \anchor{center} {\pgfpointorigin} \anchor{out 1} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.666\pgf@x}{\pgf@y+0.2cm}} \anchor{out 2} {\northeast \pgfpoint{0.0\pgf@x}{\pgf@y+0.2cm}} \anchor{out 3} {\northeast \pgfpoint{0.666\pgf@x}{\pgf@y+0.2cm}} \anchor{in} {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}} \anchor{text} {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}} \backgroundpath{ \pgfsetfillcolor{black} \pgfsetstrokecolor{black} \pgfsetarrowsstart{} \pgfsetarrowsend{} % Construct main path \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} % Construct middle line: \southwest \pgf@ya=0cm \pgf@xa=\pgf@x \northeast \pgf@yb=0cm \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % Vertical Middle Lines: \southwest \pgf@ya=0cm \pgf@xa=\pgf@x \northeast \pgf@yb=\pgf@y \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa+1cm}{0cm}} \pgfpathlineto{\pgfpoint{\pgf@xa+1cm}{\pgf@yb}} \pgfusepath{stroke} % \northeast \pgf@ya=\pgf@y \pgf@xa=\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa-1cm}{0cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-1cm}{\pgf@ya}} \pgfusepath{stroke} % Coverage lable: \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} \pgfusepath{stroke} % Left lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=-0.666\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 left}} \pgfusepath{stroke} % Middle lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.000\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 middle}} \pgfusepath{stroke} % Right lable: \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.666\pgf@x \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 right}} \pgfusepath{stroke} % Construct Output1: \northeast \pgf@ya=\pgf@y \pgf@xa=0.666\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=0.666\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Output2: \northeast \pgf@ya=\pgf@y \pgf@xa=0.0\pgf@x \southwest \pgf@yb=\pgf@y \pgf@xb=0.0\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Output3: \northeast \pgf@ya=\pgf@y \pgf@xa=0.666\pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke, fill} % Construct Input1: \southwest \pgf@ya=\pgf@y \pgf@xa=0cm \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}} \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}} \pgfpathclose \pgfusepath{stroke} } } \makeatother