% Author: Andreas Tsouchlos
%
% Collection of useful commands and definitions
%
% ||====================================================================||
% ||                               WARNING                              ||
% ||====================================================================||
% || The following packages have to be included before using this file: ||
% ||      amsmath                                                       ||
% ||      pgfplots                                                      ||
% ||====================================================================||


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Math Symbols %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}
\DeclareMathOperator\sign{sign}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Data Manipulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%
% Filters for Pgfplots
% Source: https://tex.stackexchange.com/a/58563 (modified)
%

\pgfplotsset{
    discard if/.style 2 args={
        x filter/.append code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifx\tempa\tempb
                \def\pgfmathresult{inf}
            \fi
        }
    },
    discard if not/.style 2 args={
        x filter/.append code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifx\tempa\tempb
            \else
                \def\pgfmathresult{inf}
            \fi
        }
    },
    discard if gt/.style 2 args={
        x filter/.append code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifdim\tempa pt > \tempb pt
                \def\pgfmathresult{inf}
            \fi
        }
    },
    discard if lt/.style 2 args={
        x filter/.append code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifdim\tempa pt < \tempb pt
                \def\pgfmathresult{inf}
            \fi
        }
    }
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Graphics & Plotting %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%
% Colors
%

% KIT Colors

\definecolor{kit-green100}{rgb}{0,.59,.51}
\definecolor{kit-green70}{rgb}{.3,.71,.65}
\definecolor{kit-green50}{rgb}{.50,.79,.75}
\definecolor{kit-green30}{rgb}{.69,.87,.85}
\definecolor{kit-green15}{rgb}{.85,.93,.93}
\definecolor{KITgreen}{rgb}{0,.59,.51}

\definecolor{KITpalegreen}{RGB}{130,190,60}
\colorlet{kit-maigreen100}{KITpalegreen}
\colorlet{kit-maigreen70}{KITpalegreen!70}
\colorlet{kit-maigreen50}{KITpalegreen!50}
\colorlet{kit-maigreen30}{KITpalegreen!30}
\colorlet{kit-maigreen15}{KITpalegreen!15}

\definecolor{KITblue}{rgb}{.27,.39,.66}
\definecolor{kit-blue100}{rgb}{.27,.39,.67}
\definecolor{kit-blue70}{rgb}{.49,.57,.76}
\definecolor{kit-blue50}{rgb}{.64,.69,.83}
\definecolor{kit-blue30}{rgb}{.78,.82,.9}
\definecolor{kit-blue15}{rgb}{.89,.91,.95}

\definecolor{KITyellow}{rgb}{.98,.89,0}
\definecolor{kit-yellow100}{cmyk}{0,.05,1,0}
\definecolor{kit-yellow70}{cmyk}{0,.035,.7,0}
\definecolor{kit-yellow50}{cmyk}{0,.025,.5,0}
\definecolor{kit-yellow30}{cmyk}{0,.015,.3,0}
\definecolor{kit-yellow15}{cmyk}{0,.0075,.15,0}

\definecolor{KITorange}{rgb}{.87,.60,.10}
\definecolor{kit-orange100}{cmyk}{0,.45,1,0}
\definecolor{kit-orange70}{cmyk}{0,.315,.7,0}
\definecolor{kit-orange50}{cmyk}{0,.225,.5,0}
\definecolor{kit-orange30}{cmyk}{0,.135,.3,0}
\definecolor{kit-orange15}{cmyk}{0,.0675,.15,0}

\definecolor{KITred}{rgb}{.63,.13,.13}
\definecolor{kit-red100}{cmyk}{.25,1,1,0}
\definecolor{kit-red70}{cmyk}{.175,.7,.7,0}
\definecolor{kit-red50}{cmyk}{.125,.5,.5,0}
\definecolor{kit-red30}{cmyk}{.075,.3,.3,0}
\definecolor{kit-red15}{cmyk}{.0375,.15,.15,0}

\definecolor{KITpurple}{RGB}{160,0,120}
\colorlet{kit-purple100}{KITpurple}
\colorlet{kit-purple70}{KITpurple!70}
\colorlet{kit-purple50}{KITpurple!50}
\colorlet{kit-purple30}{KITpurple!30}
\colorlet{kit-purple15}{KITpurple!15}

\definecolor{KITcyanblue}{RGB}{80,170,230}
\colorlet{kit-cyanblue100}{KITcyanblue}
\colorlet{kit-cyanblue70}{KITcyanblue!70}
\colorlet{kit-cyanblue50}{KITcyanblue!50}
\colorlet{kit-cyanblue30}{KITcyanblue!30}
\colorlet{kit-cyanblue15}{KITcyanblue!15}

% Matplotlib Colors

\definecolor{Mpl1}{HTML}{1f77b4}
\definecolor{Mpl2}{HTML}{ff7f0e}
\definecolor{Mpl3}{HTML}{2ca02c}
\definecolor{Mpl4}{HTML}{d62728}
\definecolor{Mpl5}{HTML}{9467bd}
\definecolor{Mpl6}{HTML}{8c564b}
\definecolor{Mpl7}{HTML}{e377c2}
\definecolor{Mpl8}{HTML}{7f7f7f}
\definecolor{Mpl9}{HTML}{bcbd22}
\definecolor{Mpl10}{HTML}{17becf}

%
% Color Schemes
%

% Define colormaps

\pgfplotsset{
	colormap={mako}{
		rgb=(0.18195582, 0.11955283, 0.23136943)
		rgb=(0.25307401, 0.23772973, 0.48316271)
		rgb=(0.21607792, 0.39736958, 0.61948028)
		rgb=(0.20344718, 0.56074869, 0.65649508)
		rgb=(0.25187832, 0.71827158, 0.67872193)
		rgb=(0.54578602, 0.8544913, 0.69848331)
	},
	colormap={rocket}{
		rgb=(0.20973515, 0.09747934, 0.24238489)
		rgb=(0.43860848, 0.12177004, 0.34119475)
		rgb=(0.67824099, 0.09192342, 0.3504148)
		rgb=(0.8833417, 0.19830556, 0.26014181)
		rgb=(0.95381595, 0.46373781, 0.31769923)
		rgb=(0.96516917, 0.70776351, 0.5606593)
	},
	colormap={cividis}{
		rgb=(0.130669, 0.231458, 0.43284)
		rgb=(0.298421, 0.332247, 0.423973)
		rgb=(0.42512, 0.431334, 0.447692)
		rgb=(0.555393, 0.537807, 0.471147)
		rgb=(0.695985, 0.648334, 0.440072)
		rgb=(0.849223, 0.771947, 0.359729)
	},
	colormap={cel}{
		color=(KITred!90!black);
		color=(kit-blue100);
 		color=(kit-green70);
		color=(kit-yellow70!80!kit-orange70);
	},
	colormap={matplotlib}{
		% Source: https://github.com/matplotlib/matplotlib/blob/e5a85f960b2d47eac371cff709b830d52c36d267/lib/matplotlib/_cm.py#L1114
        rgb=(0.2298057,   0.298717966, 0.753683153)
        rgb=(0.26623388,  0.353094838, 0.801466763)
        rgb=(0.30386891,  0.406535296, 0.84495867 )
        rgb=(0.342804478, 0.458757618, 0.883725899)
        rgb=(0.38301334,  0.50941904,  0.917387822)
        rgb=(0.424369608, 0.558148092, 0.945619588)
        rgb=(0.46666708,  0.604562568, 0.968154911)
        rgb=(0.509635204, 0.648280772, 0.98478814 )
        rgb=(0.552953156, 0.688929332, 0.995375608)
        rgb=(0.596262162, 0.726149107, 0.999836203)
        rgb=(0.639176211, 0.759599947, 0.998151185)
        rgb=(0.681291281, 0.788964712, 0.990363227)
        rgb=(0.722193294, 0.813952739, 0.976574709)
        rgb=(0.761464949, 0.834302879, 0.956945269)
        rgb=(0.798691636, 0.849786142, 0.931688648)
        rgb=(0.833466556, 0.860207984, 0.901068838)
        rgb=(0.865395197, 0.86541021,  0.865395561)
        rgb=(0.897787179, 0.848937047, 0.820880546)
        rgb=(0.924127593, 0.827384882, 0.774508472)
        rgb=(0.944468518, 0.800927443, 0.726736146)
        rgb=(0.958852946, 0.769767752, 0.678007945)
        rgb=(0.96732803,  0.734132809, 0.628751763)
        rgb=(0.969954137, 0.694266682, 0.579375448)
        rgb=(0.966811177, 0.650421156, 0.530263762)
        rgb=(0.958003065, 0.602842431, 0.481775914)
        rgb=(0.943660866, 0.551750968, 0.434243684)
        rgb=(0.923944917, 0.49730856,  0.387970225)
        rgb=(0.89904617,  0.439559467, 0.343229596)
        rgb=(0.869186849, 0.378313092, 0.300267182)
        rgb=(0.834620542, 0.312874446, 0.259301199)
        rgb=(0.795631745, 0.24128379,  0.220525627)
        rgb=(0.752534934, 0.157246067, 0.184115123)
        rgb=(0.705673158, 0.01555616,  0.150232812)
	}
}

% Define cycle lists

\pgfplotscreateplotcyclelist{mako}{%
	[samples of colormap={4} of mako]%
}
\pgfplotscreateplotcyclelist{rocket}{%
	[samples of colormap={4} of rocket]%
}
\pgfplotscreateplotcyclelist{cividis}{%
	[samples of colormap={4} of cividis]%
}
\pgfplotscreateplotcyclelist{viridis}{%
	[samples of colormap={4} of viridis]%
}
\pgfplotscreateplotcyclelist{cel}{%
	[samples of colormap={4} of cel]%
}
\pgfplotscreateplotcyclelist{matplotlib}{%
	{Mpl1},{Mpl2},{Mpl3},{Mpl4}
}

% Define 'scolX' colors

\makeatletter

\def\extractcolormapcolor#1#2{%
	\expandafter\pgfplotscolormapaccess\expandafter[\pgfplotspointmetatransformedrange]%
		[1.0]%
		{#2}%
		{\pgfkeysvalueof{/pgfplots/colormap name}}%
	\def\pgfplots@loc@TMPb{\pgfutil@definecolor{#1}{\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}}%
	\expandafter\pgfplots@loc@TMPb\expandafter{\pgfmathresult}%
}%

\def\getcolorbyvalue#1{
	\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname
}

\makeatother

\def\setschemecolorsfrommap{
	\extractcolormapcolor{scol0}{0}
	\extractcolormapcolor{scol1}{333}
	\extractcolormapcolor{scol2}{666}
	\extractcolormapcolor{scol3}{1000}
}

\newcommand{\setschemecolorsmanually}[4]{
	\colorlet{scol0}{#1}
	\colorlet{scol1}{#2}
	\colorlet{scol2}{#3}
	\colorlet{scol3}{#4}
}

% Define color schemes

\pgfplotsset{
	/pgfplots/colorscheme/cel/.style={
		colormap name={cel},
		cycle list name={cel},
		/utils/exec={\setschemecolorsfrommap},
	},
	/pgfplots/colorscheme/rocket/.style={
		colormap name={rocket},
		cycle list name={rocket},
		/utils/exec={\setschemecolorsfrommap},
	},
	/pgfplots/colorscheme/viridis/.style={
		colormap name={viridis},
		cycle list name={viridis},
		/utils/exec={\setschemecolorsfrommap},
	},
	/pgfplots/colorscheme/mako/.style={
		colormap name={mako},
		cycle list name={mako},
		/utils/exec={\setschemecolorsfrommap},
	},
	/pgfplots/colorscheme/cividis/.style={
		colormap name={cividis},
		cycle list name={cividis},
		/utils/exec={\setschemecolorsfrommap},
	},
	/pgfplots/colorscheme/matplotlib/.style={
		colormap name={matplotlib},
		cycle list name={matplotlib},
		/utils/exec={\setschemecolorsmanually{Mpl1}{Mpl2}{Mpl3}{Mpl4}},
	},
}

