public void SpatialAndTemporalFrequencyTwoLayerSDATest()
        {
            var _thresholdValue = 0.03;

            double[] fxs = new double[] { 0.0, 0.02 };  // 0.3 just doesn't give good results
            var      _twoLayerSDAForwardSolver   = new TwoLayerSDAForwardSolver();
            var      _oneLayerNurbsForwardSolver = new NurbsForwardSolver();

            // make sure layer thickess is greater than l*=1/(mua+musp)=1mm
            LayerTissueRegion[] _twoLayerTissue =
                new LayerTissueRegion[]
            {
                new LayerTissueRegion(new DoubleRange(0, 3), new OpticalProperties(ops)),
                new LayerTissueRegion(new DoubleRange(3, 100), new OpticalProperties(ops)),
            };
            for (int ifx = 0; ifx < fxs.Length; ifx++)
            {
                var oneLayerResult = _oneLayerNurbsForwardSolver.ROfFxAndFt(ops, fxs[ifx], ft);
                var twoLayerResult = _twoLayerSDAForwardSolver.ROfFxAndFt(_twoLayerTissue, fxs[ifx], ft);
                var relDiffRe      = Math.Abs(twoLayerResult.Real - oneLayerResult.Real) / oneLayerResult.Real;
                var relDiffIm      = Math.Abs((twoLayerResult.Imaginary - oneLayerResult.Imaginary) / oneLayerResult.Imaginary);
                Assert.IsTrue(relDiffRe < _thresholdValue, "Test failed for fx =" + fxs[ifx] +
                              " and ft=", +ft + ", with Real relative difference " + relDiffRe);
                Assert.IsTrue(relDiffIm < _thresholdValue, "Test failed for fx =" + fxs[ifx] +
                              " and ft=", +ft + ", with Imag relative difference " + relDiffIm);
            }
        }
        public void ROfRhoAndT_TimeValueSmallerThenMinimalTimeOfFlight_ReturnsZero()
        {
            INurbs fakeNurbsGenerator = new StubNurbsGenerator();

            nurbsForwardSolver = new NurbsForwardSolver(fakeNurbsGenerator);
            OpticalProperties op = new OpticalProperties(0.0, 1.0, 0.8, 1.4);

            Assert.AreEqual(0.0, nurbsForwardSolver.ROfRhoAndTime(op, 10.0, 0.01),
                            "The returned value should be 0.0");
        }
        public void simple_forward_calls_return_nonzero_result()
        {
            var fs = new NurbsForwardSolver();
            var op = new OpticalProperties();

            var value1 = fs.ROfRho(op, 10);

            Assert.IsTrue(value1 > 0);

            var value2 = fs.ROfFx(op, 0.1);

            Assert.IsTrue(value2 > 0);
        }
        public void array_forward_calls_return_nonzero_result()
        {
            var fs   = new NurbsForwardSolver();
            var ops  = new[] { new OpticalProperties() };
            var rhos = new[] { 10.0 };
            var fxs  = new[] { 0.1 };

            var value1 = fs.ROfRho(ops, rhos);

            Assert.IsTrue(value1[0] > 0);

            var value2 = fs.ROfFx(ops, fxs);

            Assert.IsTrue(value2[0] > 0);
        }
        public void enumerable_forward_calls_return_nonzero_result()
        {
            var fs   = new NurbsForwardSolver();
            var ops  = new OpticalProperties().AsEnumerable();
            var rhos = 10D.AsEnumerable();
            var fxs  = 0.1.AsEnumerable();

            var value1 = fs.ROfRho(ops, rhos).First();

            Assert.IsTrue(value1 > 0);

            var value2 = fs.ROfFx(ops, fxs).First();

            Assert.IsTrue(value2 > 0);
        }
        public void SpatialFrequencyTwoLayerSDATest()
        {
            var _thresholdValue = 0.03;

            double[] fxs = new double[] { 0.0, 0.02 };  // 0.3 results not good
            var      _twoLayerSDAForwardSolver   = new TwoLayerSDAForwardSolver();
            var      _oneLayerNurbsForwardSolver = new NurbsForwardSolver();

            // make sure layer thickess is greater than l*=1/(mua+musp)=1mm
            LayerTissueRegion[] _twoLayerTissue =
                new LayerTissueRegion[]
            {
                new LayerTissueRegion(new DoubleRange(0, 3), new OpticalProperties(ops)),
                new LayerTissueRegion(new DoubleRange(3, 100), new OpticalProperties(ops)),
            };
            for (int ifx = 0; ifx < fxs.Length; ifx++)
            {
                var oneLayerResult = _oneLayerNurbsForwardSolver.ROfFx(ops, fxs[ifx]);
                var twoLayerResult = _twoLayerSDAForwardSolver.ROfFx(_twoLayerTissue, fxs[ifx]);
                var relDiff        = Math.Abs(twoLayerResult - oneLayerResult) / oneLayerResult;
                Assert.IsTrue(relDiff < _thresholdValue, "Test failed for fx =" + fxs[ifx] +
                              ", with relative difference " + relDiff);
            }
        }
 public void Setup()
 {
     nurbsForwardSolver = new NurbsForwardSolver();
 }
 public void TearDown()
 {
     nurbsForwardSolver = null;
 }