/// <summary>
        /// Evaluates the temporal frequency radially resolved reflectance using the distribution of
        /// the source-image point source configuration.
        /// </summary>
        /// <param name="dp">DiffusionParameters object</param>
        /// <param name="rho">radial location</param>
        /// <param name="k">wavevector</param>
        /// <param name="fr1">Fresnel Moment 1</param>
        /// <param name="fr2">Fresnel Moment 2</param>
        /// <returns></returns>
        public override Complex TemporalFrequencyReflectance(DiffusionParameters dp,
                                                             double rho, Complex k, double fr1, double fr2)
        {
            var dpLocalReal = DiffusionParameters.Copy(dp);
            var dpLocalImag = DiffusionParameters.Copy(dp);

            Func <DiffusionParameters, double, Complex, double, Complex>
            kernelFunc = (dpLocal, r, kLocal, zp) =>
            {
                dpLocal.zp = zp;
                return
                    (_pointSourceForwardSolver.TemporalFrequencyReflectance(
                         dpLocal, r, kLocal, fr1, fr2));
            };

            return
                ((CalculatorToolbox.EvaluateDistributedExponentialLineSourceIntegral(
                      zp => kernelFunc(dpLocalReal, rho, k, zp).Real,
                      dp.mutTilde)
                  + Complex.ImaginaryOne *
                  CalculatorToolbox.EvaluateDistributedExponentialLineSourceIntegral(
                      zp => kernelFunc(dpLocalImag, rho, k, zp).Imaginary,
                      dp.mutTilde)
                  ) *
                 dp.musTilde);
        }
        private double StationaryFlux(double rho, double z, DiffusionParameters dp)
        {
            var dpLocal = DiffusionParameters.Copy(dp);

            return(CalculatorToolbox.EvaluateDistributedExponentialLineSourceIntegral(
                       zp =>
            {
                dpLocal.zp = zp;
                return _pointSourceForwardSolver.StationaryFlux(rho, z, dpLocal);
            },
                       dp.mutTilde) *
                   dp.musTilde);
        }
        /// <summary>
        /// Evaluation of the temporally and radially resolved fluence rate using the distribution of
        /// source-image point sources.
        /// </summary>
        /// <param name="dp">DiffusionParameters object</param>
        /// <param name="rho">radial location</param>
        /// <param name="z">depth location</param>
        /// <param name="t">time</param>
        /// <returns>fluence rate</returns>
        public override double TemporalFluence(
            DiffusionParameters dp, double rho, double z, double t)
        {
            var dpLocal = DiffusionParameters.Copy(dp);

            return(CalculatorToolbox.EvaluateDistributedExponentialLineSourceIntegral(
                       zp =>
            {
                dpLocal.zp = zp;
                return _pointSourceForwardSolver.TemporalFluence(dpLocal, rho, z, t);
            },
                       dp.mutTilde) *
                   dp.musTilde);
        }