% \iffalse
%
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{colorwav}
%<package> [2023/05/03 v1.0 specify wavelength for color]
%<package>\RequirePackage{ifthen}
%<package>\RequirePackage{fp}
%
% Update on 2023/05/03 purely to clarify the license; no code changes.
% This package is released under the GNU LGPL.
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{colorwav}
\usepackage{color}
\usepackage{url}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{colorwav.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{252}
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0}{2007/04/12}{Initial Release}
%
% \GetFileInfo{colorwav.sty}
%
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
% \DoNotIndex{\@ne,\expandafter,\noexpand}
% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
% \DoNotIndex{\closeout,\day,\def,\edef,\gdef,\xdef,\let,\empty,\endgroup}
% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic}
% \DoNotIndex{\if,\fi,\ifthenelse,\else,\setboolean,\boolean,\newboolean,\provideboolean,\equal,\AND,\OR,\NOT,\whiledo}
% \DoNotIndex{\ifcase,\ifcat,\or,\else}
% \DoNotIndex{\par,\parbox,\mbox,\hbox,\begin,\end,\nabla,\partial}
% \DoNotIndex{\overline,\bar,\small,\tiny,\mathchoice,\scriptsize,\textrm,\texttt}
% \DoNotIndex{\alpha,\beta,\gamma,\epsilon,\varepsilon,\delta,\zeta,\eta,\theta,\vartheta,\iota,\kappa,\lambda,\mu,\nu}
% \DoNotIndex{\xi,\omicron,\pi,\varpi,\rho,\varrho,\sigma,\tau,\upsilon,\phi,\varphi,\chi,\psi,\omega}
% \DoNotIndex{\Delta,\Gamma,\Theta,\Lambda,\Xi,\Pi,\Sigma,\Phi,\Psi,\Omega}
% \DoNotIndex{\digamma,\lceil,\rceil,\lfloor,\rfloor,\left,\right,\inp,\inb,\inbr,\inap,\nop}
% \DoNotIndex{\PackageError,\PackageWarning}
% \DoNotIndex{\csname,\endcsname,\ifx,\ifnum}
% \DoNotIndex{\FPround,\FPadd,\FPsub,\FPmul,\FPdiv,\FPpow,\FPiflt,\FPifgt,\FPifzero}
% \DoNotIndex{\COLORWAV@tempA,\COLORWAV@tempB}
%
% \title{The \textsf{colorwav} package\thanks{This document
% corresponds to \textsf{colorwav}~\fileversion,
% dated~\filedate.}}
% \author{nsetzer}
%
% \maketitle
%
% \setcounter{IndexColumns}{2}
% \StopEventually{\PrintChanges\PrintIndex}
%
% The \textsf{colorwav} package defines a command to return the RGB values for a color corresponding to a given wavelength.
% The \LaTeX{} code is based upon the FORTRAN code found at \url{http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm}
% which is based upon Dan Bruton's FORTRAN code.
% 
% For more information on the mapping and the original FORTRAN code, see \url{http://www.midnightkite.com/color.html}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Basics}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The physics of this is far too complicated to get into, but it may come about that you have a wavelength
% of light that you need to express as a color and this code will do that for you.
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Descriptions}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \DescribeMacro{\storeRGBofWavelength} 
% |\storeRGBofWavelength|\marg{R value command}\marg{G value command}\marg{B value commmand}\marg{wavelength} stores
% the RGB values of \meta{wavelength} in \meta{R value command}, \meta{G value command}, \meta{B value command}
% respectively
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Test Cases}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{Wavelengths in Nanometers (default)}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \DescribeMacro{\storeRGBofWavelength}
%
% \newcommand{\Rval}{}
% \newcommand{\Gval}{}
% \newcommand{\Bval}{}
%
% \begin{tabular}{ll}
% \hline
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{400}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{400}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{400} \textcolor[rgb]{\Rval,\Gval,\Bval}{400}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{430}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{430}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{430} \textcolor[rgb]{\Rval,\Gval,\Bval}{430}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{460}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{460}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{460} \textcolor[rgb]{\Rval,\Gval,\Bval}{460}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{490}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{490}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{490} \textcolor[rgb]{\Rval,\Gval,\Bval}{490}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{520}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{520}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{520} \textcolor[rgb]{\Rval,\Gval,\Bval}{520}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{550}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{550}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{550} \textcolor[rgb]{\Rval,\Gval,\Bval}{550}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{580}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{580}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{580} \textcolor[rgb]{\Rval,\Gval,\Bval}{580}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{600}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{600}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{600} \textcolor[rgb]{\Rval,\Gval,\Bval}{600}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{630}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{630}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{630} \textcolor[rgb]{\Rval,\Gval,\Bval}{630}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{660}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{660}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{660} \textcolor[rgb]{\Rval,\Gval,\Bval}{660}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{690}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{690}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{690} \textcolor[rgb]{\Rval,\Gval,\Bval}{690}	\\
% \hline
% \end{tabular}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{Wavelengths in Angstroms}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \DescribeMacro{\storeRGBofWavelength}
%
% Change the units to Angstroms
% |\setUnitsE{-10}|
% \setUnitsE{-10}
%
%
%
%
% \begin{tabular}{lll}
% \hline
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4000}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{4000}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4000} \textcolor[rgb]{\Rval,\Gval,\Bval}{4000}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4300}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{4300}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4300} \textcolor[rgb]{\Rval,\Gval,\Bval}{4300}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4600}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{4600}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4600} \textcolor[rgb]{\Rval,\Gval,\Bval}{4600}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4900}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{4900}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{4900} \textcolor[rgb]{\Rval,\Gval,\Bval}{4900}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5200}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{5200}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5200} \textcolor[rgb]{\Rval,\Gval,\Bval}{5200}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5500}|	\\ 
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{5500}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5500} \textcolor[rgb]{\Rval,\Gval,\Bval}{5500}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5800}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{5800}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{5800} \textcolor[rgb]{\Rval,\Gval,\Bval}{5800}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6000}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{6000}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6000} \textcolor[rgb]{\Rval,\Gval,\Bval}{6000}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6300}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{6300}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6300} \textcolor[rgb]{\Rval,\Gval,\Bval}{6300}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6600}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{6600}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6600} \textcolor[rgb]{\Rval,\Gval,\Bval}{6600}	\\ \\
% |\storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6900}|	\\
% |\textcolor[rgb]{\Rval,\Gval,\Bval}{6900}|		& \storeRGBofWavelength{\Rval}{\Gval}{\Bval}{6900} \textcolor[rgb]{\Rval,\Gval,\Bval}{6900}	\\
% \hline
% \end{tabular}
%
%
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Acknowledgments}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% Special Thanks to \url{http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm} and Dan Bruton for placing their
% code online so that it may be translated to other languages.
%
% 
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Implementation}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{Constants and Parameters}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% \begin{macro}{\COLORWAV@gamma}
% This is the gamma correction factor.
%    \begin{macrocode}
\newcommand{\COLORWAV@gamma}{0.8}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\setGammaCorrection}
% Allow the user to set the gamma correction
%    \begin{macrocode}
\newcommand{\setGammaCorrection}[1]{%
\renewcommand{\COLORWAV@gamma}{#1}%
}
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\COLORWAV@powerOfTen}
% The power of ten representing the units of the wavelength.
% $\lambda$ is in $10$ to the |\COLORWAV@powerOfTen| meters
%    \begin{macrocode}
\newcommand{\COLORWAV@powerOfTen}{-9}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\setUnitsE}
% Set the power of ten of the units
%    \begin{macrocode}
\newcommand{\setUnitsE}[1]{%
\renewcommand{\COLORWAV@powerOfTen}{#1}%
}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\COLORWAV@minWavelength}
% The minimum wavelength to accept
%    \begin{macrocode}
\newcommand{\COLORWAV@minWavelength}{380}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\setMinVisibleWavelength}
% Set the min wavelength
%    \begin{macrocode}
\newcommand{\setMinVisibleWavelength}[1]{%
\renewcommand{\COLORWAV@minWavelength}{#1}%
}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\COLORWAV@maxWavelength}
% Max visible wavelength
%    \begin{macrocode}
\newcommand{\COLORWAV@maxWavelength}{780}%
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{\setMaxVisibleWavelength}
% Set the maximum visible wavelength
%    \begin{macrocode}
\newcommand{\setMaxVisibleWavelength}[1]{%
\renewcommand{\COLORWAV@maxWavelength}{#1}%
}%
%    \end{macrocode}
% \end{macro}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{Internal Functions}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% \begin{macro}{\COLORWAV@colorAdjust}
% a function that adjust things.
%    \begin{macrocode}
\newcommand{\COLORWAV@colorAdjust}[3]{%
\FPifzero{#2}%
\xdef#1{0}%
\else%
\FPmul{\COLORWAV@tempA}{#2}{#3}%
\FPpow{\COLORWAV@tempA}{\COLORWAV@tempA}{\COLORWAV@gamma}%
\xdef#1{\COLORWAV@tempA}%
\fi%
}%
%    \end{macrocode}
% \end{macro}
%
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{Internal Parameters}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%    \begin{macrocode}
\newboolean{COLORWAV@lessthansmallest}%
\newboolean{COLORWAV@greaterthanlargest}%
\newboolean{COLORWAV@isnearuv}%
\newboolean{COLORWAV@isviolet}%
\newboolean{COLORWAV@isindigo}%
\newboolean{COLORWAV@isblue}%
\newboolean{COLORWAV@isgreen}%
\newboolean{COLORWAV@isorange}%
\newboolean{COLORWAV@isnearir}%
%    \end{macrocode}
%
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%\subsection{The Workhorse}
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
% \begin{macro}{\storeRGBofWavelength}
% |\storeRGBofWavlength|\marg{R value command}\marg{G value command}\marg{B value command}\marg{wavelength}
% stores the wavelength's R value number in \meta{R value command}, etc
%    \begin{macrocode}
\newcommand{\storeRGBofWavelength}[4]{%
%    \end{macrocode}
% initialize booleans
%    \begin{macrocode}
\setboolean{COLORWAV@lessthansmallest}{false}%
\setboolean{COLORWAV@greaterthanlargest}{false}%
\setboolean{COLORWAV@isnearuv}{false}%
\setboolean{COLORWAV@isviolet}{false}%
\setboolean{COLORWAV@isindigo}{false}%
\setboolean{COLORWAV@isblue}{false}%
\setboolean{COLORWAV@isgreen}{false}%
\setboolean{COLORWAV@isorange}{false}%
\setboolean{COLORWAV@isnearir}{false}%
%    \end{macrocode}
% get the current units and convert to nanometers
%    \begin{macrocode}
\FPsub{\COLORWAV@tempA}{\COLORWAV@powerOfTen}{-9}%
\FPpow{\COLORWAV@tempA}{10}{\COLORWAV@tempA}%
\FPmul{\COLORWAV@thewavelen}{#4}{\COLORWAV@tempA}%
%    \end{macrocode}
% Now set the booleans based upon the wavelength.  
% One can't just use the FP conditionals since they aren't always expanded
% and this leads to ``extra" |\fi|'s
%    \begin{macrocode}
\FPiflt{\COLORWAV@thewavelen}{\COLORWAV@minWavelength}%
	\setboolean{COLORWAV@lessthansmallest}{true}%
\fi%
%
\FPifgt{\COLORWAV@thewavelen}{\COLORWAV@maxWavelength}%
	\setboolean{COLORWAV@greaterthanlargest}{true}%
\fi%
%
\FPiflt{\COLORWAV@thewavelen}{440}%
	\setboolean{COLORWAV@isviolet}{true}%
\fi%
%
\FPiflt{\COLORWAV@thewavelen}{490}%
	\setboolean{COLORWAV@isindigo}{true}%
\fi%
%
\FPiflt{\COLORWAV@thewavelen}{510}%
	\setboolean{COLORWAV@isblue}{true}%
\fi%
%
\FPiflt{\COLORWAV@thewavelen}{580}%
	\setboolean{COLORWAV@isgreen}{true}%
\fi%
%
\FPiflt{\COLORWAV@thewavelen}{645}%
	\setboolean{COLORWAV@isorange}{true}%
\fi%
%    \end{macrocode}
% now determine what to do
%    \begin{macrocode}
\ifthenelse{ \boolean{COLORWAV@lessthansmallest} \OR \boolean{COLORWAV@greaterthanlargest} }%
	{%
	\gdef\COLORWAV@redValue{0}%
	\gdef\COLORWAV@greenValue{0}%
	\gdef\COLORWAV@blueValue{0}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isviolet} }%
	{%
	% R
	\FPsub{\COLORWAV@tempA}{440}{\COLORWAV@minWavelength}%
	\FPsub{\COLORWAV@tempB}{440}{\COLORWAV@thewavelen}%
	\FPdiv{\COLORWAV@redValue}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	% G
	\gdef\COLORWAV@greenValue{0.0}%
	% B
	\gdef\COLORWAV@blueValue{1.0}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isindigo} }%
	{%
	% R
	\gdef\COLORWAV@redValue{0.0}%
	% G
	\FPsub{\COLORWAV@tempA}{490}{440}%
	\FPsub{\COLORWAV@tempB}{\COLORWAV@thewavelen}{440}%
	\FPdiv{\COLORWAV@greenValue}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	% B
	\gdef\COLORWAV@blueValue{1.0}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isblue} }%
	{%
	%R
	\gdef\COLORWAV@redValue{0.0}%
	%G
	\gdef\COLORWAV@greenValue{1.0}%
	%B
	\FPsub{\COLORWAV@tempA}{510}{490}%
	\FPsub{\COLORWAV@tempB}{510}{\COLORWAV@thewavelen}%
	\FPdiv{\COLORWAV@blueValue}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isgreen} }%
	{%
	%R
	\FPsub{\COLORWAV@tempA}{580}{510}%
	\FPsub{\COLORWAV@tempB}{\COLORWAV@thewavelen}{510}%
	\FPdiv{\COLORWAV@redValue}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	%G
	\gdef\COLORWAV@greenValue{1.0}%
	%B
	\gdef\COLORWAV@blueValue{0.0}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isorange} }%
	{%
	%R
	\gdef\COLORWAV@redValue{1.0}%
	%G
	\FPsub{\COLORWAV@tempA}{645}{580}%
	\FPsub{\COLORWAV@tempB}{645}{\COLORWAV@thewavelen}%
	\FPdiv{\COLORWAV@greenValue}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	%B
	\gdef\COLORWAV@blueValue{0.0}%
	}%
% Else
	{%
	%R
	\gdef\COLORWAV@redValue{1.0}%
	%G
	\gdef\COLORWAV@greenValue{0.0}%
	%B
	\gdef\COLORWAV@blueValue{0.0}%
	}}}}}}%
%    \end{macrocode}
% now adjust intensity to fall off near vision limits
%    \begin{macrocode}
\FPiflt{\COLORWAV@thewavelen}{420}%
	\setboolean{COLORWAV@isnearuv}{true}%
\fi%
%
\FPifgt{\COLORWAV@thewavelen}{700}%
	\setboolean{COLORWAV@isnearir}{true}%
\fi%
%
\ifthenelse{ \boolean{COLORWAV@lessthansmallest} \OR \boolean{COLORWAV@greaterthanlargest} }%
	{%
	\gdef\COLORWAV@multFactor{0}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isnearuv} }%
	{%
	\FPsub{\COLORWAV@tempA}{420}{\COLORWAV@minWavelength}%
	\FPsub{\COLORWAV@tempB}{\COLORWAV@thewavelen}{\COLORWAV@minWavelength}%
	\FPdiv{\COLORWAV@multFactor}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	\FPmul{\COLORWAV@multFactor}{0.7}{\COLORWAV@multFactor}%
	\FPadd{\COLORWAV@multFactor}{0.3}{\COLORWAV@multFactor}%
	}%
{\ifthenelse{ \boolean{COLORWAV@isnearir} }%
	{%
	\FPsub{\COLORWAV@tempA}{\COLORWAV@maxWavelength}{700}%
	\FPsub{\COLORWAV@tempB}{\COLORWAV@maxWavelength}{\COLORWAV@thewavelen}%
	\FPdiv{\COLORWAV@multFactor}{\COLORWAV@tempB}{\COLORWAV@tempA}%
	\FPmul{\COLORWAV@multFactor}{0.7}{\COLORWAV@multFactor}%
	\FPadd{\COLORWAV@multFactor}{0.3}{\COLORWAV@multFactor}%
	}%
% Else
	{%
	\gdef\COLORWAV@multFactor{1.0}%
	}}}%
%    \end{macrocode}
% finally, adjust and return the colors
%    \begin{macrocode}
\COLORWAV@colorAdjust{#1}{\COLORWAV@redValue}{\COLORWAV@multFactor}%
\COLORWAV@colorAdjust{#2}{\COLORWAV@greenValue}{\COLORWAV@multFactor}%
\COLORWAV@colorAdjust{#3}{\COLORWAV@blueValue}{\COLORWAV@multFactor}%
}%
%
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
%
%
% \Finale
\endinput
