Exemple #1
0
        public void validate_only_one_perturbed_region_index_specified()
        {
            var tissueInput = new MultiLayerTissueInput();
            var input       = new SimulationInput(
                10,
                "",
                new SimulationOptions(),
                new DirectionalPointSourceInput(),
                tissueInput,
                new List <IDetectorInput>()
            {
                new dMCdROfRhodMuaDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 100.0),
                    // set perturbed ops to reference ops
                    PerturbedOps = new List <OpticalProperties>()
                    {
                        tissueInput.Regions[0].RegionOP,
                        tissueInput.Regions[1].RegionOP,
                        tissueInput.Regions[2].RegionOP
                    },
                    PerturbedRegionsIndices = new List <int>()
                    {
                        1, 2
                    }
                }
            }
                );
            var result = SimulationInputValidation.ValidateInput(input);

            Assert.IsFalse(result.IsValid);
        }
Exemple #2
0
        public void verify_default_constructor_sets_properties_correctly()
        {
            ITissueInput tissueInput;

            // verify MultiLayerTissueInput
            tissueInput = new MultiLayerTissueInput();
            var viewModel = new MultiRegionTissueViewModel(tissueInput);

            Assert.IsTrue(viewModel.RegionsVM != null);
            var listOfTissueRegions = viewModel.RegionsVM;

            Assert.IsTrue(((LayerRegionViewModel)listOfTissueRegions[1]).IsLayer);
            // verify SingleEllipsoidTissueInput
            tissueInput = new SingleEllipsoidTissueInput();
            viewModel   = new MultiRegionTissueViewModel(tissueInput);
            Assert.IsTrue(viewModel.RegionsVM != null);
            listOfTissueRegions = viewModel.RegionsVM;
            Assert.IsTrue(((EllipsoidRegionViewModel)listOfTissueRegions[3]).IsEllipsoid);
            // verify SingleVoxelTissueInput
            tissueInput = new SingleVoxelTissueInput();
            viewModel   = new MultiRegionTissueViewModel(tissueInput);
            Assert.IsTrue(viewModel.RegionsVM != null);
            listOfTissueRegions = viewModel.RegionsVM;
            Assert.IsTrue(((VoxelRegionViewModel)listOfTissueRegions[3]).IsVoxel);
        }
Exemple #3
0
        private object GetTissueInputVM(string tissueType)
        {
            // ops to use as the basis for instantiating multi-region tissues based on homogeneous values (for differential comparison)
            if (_currentHomogeneousOpticalProperties == null)
            {
                _currentHomogeneousOpticalProperties = new OpticalProperties(0.01, 1, 0.8, 1.4);
            }

            switch (tissueType)
            {
            case "SemiInfinite":
                if (_currentSemiInfiniteTissueInput == null)
                {
                    _currentSemiInfiniteTissueInput =
                        new SemiInfiniteTissueInput(
                            new SemiInfiniteTissueRegion(_currentHomogeneousOpticalProperties));
                }
                return(new OpticalPropertyViewModel(
                           _currentSemiInfiniteTissueInput.Regions.First().RegionOP,
                           IndependentVariableAxisUnits.InverseMM.GetInternationalizedString(),
                           StringLookup.GetLocalizedString("Heading_OpticalProperties")));

            case "MultiLayer":
                if (_currentMultiLayerTissueInput == null)
                {
                    _currentMultiLayerTissueInput = new MultiLayerTissueInput(new ITissueRegion[]
                    {
                        new LayerTissueRegion(new DoubleRange(0, 2), _currentHomogeneousOpticalProperties.Clone()),
                        new LayerTissueRegion(new DoubleRange(2, double.PositiveInfinity),
                                              _currentHomogeneousOpticalProperties.Clone())
                    });
                }
                return(new MultiRegionTissueViewModel(_currentMultiLayerTissueInput));

            case "SingleEllipsoid":
                if (_currentSingleEllipsoidTissueInput == null)
                {
                    _currentSingleEllipsoidTissueInput = new SingleEllipsoidTissueInput(
                        new EllipsoidTissueRegion(new Position(0, 0, 10), 5, 5, 5,
                                                  new OpticalProperties(0.05, 1.0, 0.8, 1.4)),
                        new ITissueRegion[]
                    {
                        new LayerTissueRegion(new DoubleRange(0, double.PositiveInfinity),
                                              _currentHomogeneousOpticalProperties.Clone())
                    });
                }
                return(new MultiRegionTissueViewModel(_currentSingleEllipsoidTissueInput));

            default:
                throw new ArgumentOutOfRangeException(nameof(tissueType));
            }
        }
Exemple #4
0
        public void validate_serialization_of_MultiLayerTissueInput()
        {
            var layer0 = new LayerTissueRegion(
                zRange: new DoubleRange(2.0, 3.0, 2),
                op: new OpticalProperties(mua: 0.011, musp: 1.1, g: 0.99, n: 1.44));

            var layer1 = new LayerTissueRegion(
                zRange: new DoubleRange(3.0, 4.0, 2),
                op: new OpticalProperties(mua: 0.0111, musp: 1.11, g: 0.999, n: 1.444));

            var multiRegionInput = new MultiLayerTissueInput(new[] { layer0, layer1 });

            var jsonSerialized = VtsMonteCarloJsonSerializer.WriteToJson(multiRegionInput);

            Assert.IsTrue(jsonSerialized != null && jsonSerialized.Length > 0);
        }
Exemple #5
0
        public void validate_deserialized_class_is_correct()
        {
            var i = new MultiLayerTissueInput(new ITissueRegion[]
            {
                new LayerTissueRegion(
                    new DoubleRange(double.NegativeInfinity, 0.0),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0)),
                new LayerTissueRegion(
                    new DoubleRange(0.0, 100.0),
                    new OpticalProperties(0.01, 1.0, 0.8, 1.4)),
                new LayerTissueRegion(
                    new DoubleRange(100.0, double.PositiveInfinity),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0))
            }
                                              );

            var iCloned = i.Clone();

            Assert.AreEqual(iCloned.Regions[1].RegionOP.Mus, i.Regions[1].RegionOP.Mus);
        }
        public void validate_code_checks_that_detector_defined_on_tissue_surface()
        {
            var tissueInput = new MultiLayerTissueInput();
            var input       = new SimulationInput(
                10,
                "",
                new SimulationOptions(),
                new DirectionalPointSourceInput(),
                tissueInput,
                new List <IDetectorInput>()
            {
                new SurfaceFiberDetectorInput()
                {
                    Center = new Position(0, 0, 10)
                }
            }
                );
            var result = SimulationInputValidation.ValidateInput(input);

            Assert.IsFalse(result.IsValid);
        }
Exemple #7
0
        public void validate_deserialized_class_is_correct_when_using_FileIO()
        {
            var i = new MultiLayerTissueInput(new ITissueRegion[]
            {
                new LayerTissueRegion(
                    new DoubleRange(double.NegativeInfinity, 0.0),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0)),
                new LayerTissueRegion(
                    new DoubleRange(0.0, 100.0),
                    new OpticalProperties(0.01, 1.0, 0.8, 1.4)),
                new LayerTissueRegion(
                    new DoubleRange(100.0, double.PositiveInfinity),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0))
            }
                                              );

            i.WriteToJson("MultiLayerTissue.txt");
            var iCloned = FileIO.ReadFromJson <MultiLayerTissueInput>("MultiLayerTissue.txt");

            Assert.AreEqual(iCloned.Regions[1].RegionOP.Mus, i.Regions[1].RegionOP.Mus);
        }
        public void validate_tissue_optical_properties_are_non_negative()
        {
            var tissueInput = new MultiLayerTissueInput(
                new ITissueRegion[]
            {
                new LayerTissueRegion(
                    new DoubleRange(double.NegativeInfinity, 0.0),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0)),
                new LayerTissueRegion(
                    new DoubleRange(0.0, 100.0),
                    new OpticalProperties(-1.0, 1.0, 0.8, 1.4)),     // make mua negative
                new LayerTissueRegion(
                    new DoubleRange(100.0, double.PositiveInfinity),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0))
            });
            var input = new PostProcessorInput(
                new List <IDetectorInput>()
            {
                new pMCROfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 100.0),
                    // set perturbed ops to reference ops
                    PerturbedOps = new List <OpticalProperties>()
                    {
                        tissueInput.Regions[0].RegionOP,
                        tissueInput.Regions[1].RegionOP,
                        tissueInput.Regions[2].RegionOP
                    },
                    PerturbedRegionsIndices = new List <int>()
                    {
                        1
                    }
                }
            },
                "", "", ""
                );
            var result = PostProcessorInputValidation.ValidateInput(input, "");

            Assert.IsFalse(result.IsValid);
        }
Exemple #9
0
        public void validate_deserialization_of_MultiLayerTissueInput()
        {
            Func <double, double, bool> areRoughlyEqual = (a, b) => Math.Abs(a - b) < 0.001;

            var layer0 = new LayerTissueRegion(
                zRange: new DoubleRange(2.0, 3.0, 2),
                op: new OpticalProperties(mua: 0.011, musp: 1.1, g: 0.99, n: 1.44));

            var layer1 = new LayerTissueRegion(
                zRange: new DoubleRange(3.0, 4.0, 2),
                op: new OpticalProperties(mua: 0.0111, musp: 1.11, g: 0.999, n: 1.444));

            var multiRegionInput = new MultiLayerTissueInput(new[] { layer0, layer1 });

            var jsonSerialized = VtsMonteCarloJsonSerializer.WriteToJson(multiRegionInput);
            var multiRegionInputDeserialized = VtsMonteCarloJsonSerializer.ReadFromJson <MultiLayerTissueInput>(jsonSerialized);

            Assert.IsTrue(multiRegionInputDeserialized != null);

            var region0Deserialized = (LayerTissueRegion)multiRegionInputDeserialized.Regions[0];

            Assert.IsTrue(areRoughlyEqual(region0Deserialized.ZRange.Start, 2.0));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.ZRange.Stop, 3.0));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.ZRange.Count, 2));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.RegionOP.Mua, 0.011));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.RegionOP.Musp, 1.1));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.RegionOP.G, 0.99));
            Assert.IsTrue(areRoughlyEqual(region0Deserialized.RegionOP.N, 1.44));

            var region1Deserialized = (LayerTissueRegion)multiRegionInputDeserialized.Regions[1];

            Assert.IsTrue(areRoughlyEqual(region1Deserialized.ZRange.Start, 3.0));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.ZRange.Stop, 4.0));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.ZRange.Count, 2));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.RegionOP.Mua, 0.0111));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.RegionOP.Musp, 1.11));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.RegionOP.G, 0.999));
            Assert.IsTrue(areRoughlyEqual(region1Deserialized.RegionOP.N, 1.444));
        }
Exemple #10
0
        public void execute_Monte_Carlo()
        {
            // instantiate common classes
            var simulationOptions = new SimulationOptions(
                0,
                RandomNumberGeneratorType.MersenneTwister,
                AbsorptionWeightingType.Discrete,
                PhaseFunctionType.HenyeyGreenstein,
                new List <DatabaseType>()
            {
                DatabaseType.pMCDiffuseReflectance
            },         // write database for pMC tests
                false, // track statistics
                0.0,   // RR threshold -> 0 = no RR performed
                0);
            var source = new DirectionalPointSourceInput(
                new Position(0.0, 0.0, 0.0),
                new Direction(0.0, 0.0, 1.0),
                0);      // start in air
            var tissue = new MultiLayerTissueInput(
                new ITissueRegion[]
            {
                new LayerTissueRegion(
                    new DoubleRange(double.NegativeInfinity, 0.0),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0)),
                new LayerTissueRegion(
                    new DoubleRange(0.0, 10.0),     // make tissue layer thin so transmittance results improved
                    new OpticalProperties(0.01, 1.0, 0.8, 1.4)),
                new LayerTissueRegion(
                    new DoubleRange(10.0, double.PositiveInfinity),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0))
            });
            var detectorsNA0 = new List <IDetectorInput>
            {
                new RDiffuseDetectorInput()
                {
                    FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfAngleDetectorInput()
                {
                    Angle = new DoubleRange(Math.PI / 2, Math.PI, 2), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfRhoAndTimeDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Time = new DoubleRange(0.0, 1.0, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfRhoAndOmegaDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Omega = new DoubleRange(0.05, 1.0, 20), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfXAndYAndTimeDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Time = new DoubleRange(0, 1, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfXAndYAndMaxDepthDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), MaxDepth = new DoubleRange(0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfFxDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 51), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new ROfFxAndTimeDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 51), Time = new DoubleRange(0.0, 1.0, 11), FinalTissueRegionIndex = 0, NA = 0.0
                },
                new RSpecularDetectorInput()
                {
                    FinalTissueRegionIndex = 0, NA = 0.0
                },
                new TDiffuseDetectorInput()
                {
                    FinalTissueRegionIndex = 2, NA = 0.0
                },
                new TOfAngleDetectorInput()
                {
                    Angle = new DoubleRange(0.0, Math.PI / 2, 2), FinalTissueRegionIndex = 2, NA = 0.0
                },
                new TOfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(0.0, Math.PI / 2, 2), FinalTissueRegionIndex = 2, NA = 0.0
                },
                new TOfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 2, NA = 0.0
                },
                new TOfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), FinalTissueRegionIndex = 2, NA = 0.0
                },
                new RadianceOfRhoAtZDetectorInput()
                {
                    ZDepth = _dosimetryDepth, Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 1, NA = 0.0
                },

                new ReflectedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                    = new DoubleRange(0.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 0,
                    NA = 0.0
                },
                new ReflectedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                      = new DoubleRange(-10.0, 10.0, 11),
                    Y                      = new DoubleRange(-10.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 0,
                    NA                     = 0.0
                },
                new TransmittedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                    = new DoubleRange(0.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 2,
                    NA = 0.0
                },
                new TransmittedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                      = new DoubleRange(-10.0, 10.0, 11),
                    Y                      = new DoubleRange(-10.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 2,
                    NA                     = 0.0
                },
            };
            var input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNA0);

            _outputNA0 = new MonteCarloSimulation(input).Run();

            _inputForPMC = input;                                                                       // set pMC input to one that specified database generation
            _pMCDatabase = pMCDatabase.FromFile("DiffuseReflectanceDatabase", "CollisionInfoDatabase"); // grab database


            var detectorsNA0p3 = new List <IDetectorInput>
            {
                new RDiffuseDetectorInput()
                {
                    FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfAngleDetectorInput()
                {
                    Angle = new DoubleRange(Math.PI / 2, Math.PI, 2), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfRhoAndTimeDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Time = new DoubleRange(0.0, 1.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfRhoAndOmegaDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Omega = new DoubleRange(0.05, 1.0, 20), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfXAndYAndTimeDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Time = new DoubleRange(0, 1, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfXAndYAndMaxDepthDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), MaxDepth = new DoubleRange(0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfFxDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 51), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfFxAndTimeDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 5), Time = new DoubleRange(0.0, 1.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new RSpecularDetectorInput()
                {
                    FinalTissueRegionIndex = 0, NA = 0.3
                },
                new TDiffuseDetectorInput()
                {
                    FinalTissueRegionIndex = 2, NA = 0.3
                },
                new TOfAngleDetectorInput()
                {
                    Angle = new DoubleRange(0.0, Math.PI / 2, 2), FinalTissueRegionIndex = 2, NA = 0.3
                },
                new TOfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(0.0, Math.PI / 2, 2), FinalTissueRegionIndex = 2, NA = 0.3
                },
                new TOfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 2, NA = 0.3
                },
                new TOfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), FinalTissueRegionIndex = 2, NA = 0.3
                },

                new RadianceOfRhoAtZDetectorInput()
                {
                    ZDepth = _dosimetryDepth, Rho = new DoubleRange(0.0, 10.0, 11), FinalTissueRegionIndex = 1, NA = 0.3
                },

                new ReflectedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                    = new DoubleRange(0.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 0,
                    NA = 0.3
                },
                new ReflectedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                      = new DoubleRange(-10.0, 10.0, 11),
                    Y                      = new DoubleRange(-10.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 0,
                    NA                     = 0.3
                },
                new TransmittedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                    = new DoubleRange(0.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 2,
                    NA = 0.3
                },
                new TransmittedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                      = new DoubleRange(-10.0, 10.0, 11),
                    Y                      = new DoubleRange(-10.0, 10.0, 11),
                    MTBins                 = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins       = new DoubleRange(0.0, 1.0, 11),
                    FinalTissueRegionIndex = 2,
                    NA                     = 0.3
                },
            };

            input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNA0p3);
            _outputNA0p3 = new MonteCarloSimulation(input).Run();

            var detectorsNoNASpecified = new List <IDetectorInput>
            {
                new RDiffuseDetectorInput()
                {
                },
                new ROfAngleDetectorInput()
                {
                    Angle = new DoubleRange(Math.PI / 2, Math.PI, 2)
                },
                new ROfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11)
                },
                new ROfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2)
                },
                new ROfRhoAndTimeDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Time = new DoubleRange(0.0, 1.0, 11)
                },
                new ROfRhoAndOmegaDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Omega = new DoubleRange(0.05, 1.0, 20)
                },
                new ROfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11)
                },
                new ROfXAndYAndTimeDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Time = new DoubleRange(0, 1, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfXAndYAndMaxDepthDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), MaxDepth = new DoubleRange(0, 10.0, 11), FinalTissueRegionIndex = 0, NA = 0.3
                },
                new ROfFxDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 51)
                },
                new ROfFxAndTimeDetectorInput()
                {
                    Fx = new DoubleRange(0.0, 0.5, 5), Time = new DoubleRange(0.0, 1.0, 11)
                },
                new RSpecularDetectorInput()
                {
                },
                new TDiffuseDetectorInput()
                {
                },
                new TOfAngleDetectorInput()
                {
                    Angle = new DoubleRange(0.0, Math.PI / 2, 2)
                },
                new TOfRhoAndAngleDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11), Angle = new DoubleRange(0.0, Math.PI / 2, 2)
                },
                new TOfRhoDetectorInput()
                {
                    Rho = new DoubleRange(0.0, 10.0, 11)
                },
                new TOfXAndYDetectorInput()
                {
                    X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11)
                },

                new RadianceOfRhoAtZDetectorInput()
                {
                    ZDepth = _dosimetryDepth, Rho = new DoubleRange(0.0, 10.0, 11)
                },

                new ReflectedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho              = new DoubleRange(0.0, 10.0, 11),
                    MTBins           = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins = new DoubleRange(0.0, 1.0, 11),
                },
                new ReflectedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                = new DoubleRange(-10.0, 10.0, 11),
                    Y                = new DoubleRange(-10.0, 10.0, 11),
                    MTBins           = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins = new DoubleRange(0.0, 1.0, 11),
                },
                new TransmittedMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho              = new DoubleRange(0.0, 10.0, 11),
                    MTBins           = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins = new DoubleRange(0.0, 1.0, 11),
                },
                new TransmittedMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                = new DoubleRange(-10.0, 10.0, 11),
                    Y                = new DoubleRange(-10.0, 10.0, 11),
                    MTBins           = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins = new DoubleRange(0.0, 1.0, 11),
                },
            };

            input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNoNASpecified);
            _outputNoNASpecified = new MonteCarloSimulation(input).Run();
        }
Exemple #11
0
        public void execute_Monte_Carlo()
        {
            // instantiate common classes
            var simulationOptions = new SimulationOptions(
                0,
                RandomNumberGeneratorType.MersenneTwister,
                AbsorptionWeightingType.Discrete,
                PhaseFunctionType.HenyeyGreenstein,
                new List <DatabaseType>()
            {
            },
                false, // track statistics
                0.0,   // RR threshold -> 0 = no RR performed
                0);
            var source = new DirectionalPointSourceInput(
                new Position(0.0, 0.0, 0.0),
                new Direction(0.0, 0.0, 1.0),
                0);      // start in air
            var tissue = new MultiLayerTissueInput(
                new ITissueRegion[]
            {
                new LayerTissueRegion(
                    new DoubleRange(double.NegativeInfinity, 0.0),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0)),
                new LayerTissueRegion(
                    new DoubleRange(0.0, 10.0),     // make tissue layer thin so transmittance results improved
                    new OpticalProperties(0.01, 1.0, 0.8, 1.4)),
                new LayerTissueRegion(
                    new DoubleRange(10.0, double.PositiveInfinity),
                    new OpticalProperties(0.0, 1e-10, 1.0, 1.0))
            });
            var detectorsNA0 = new List <IDetectorInput>
            {
                new ReflectedDynamicMTOfFxAndSubregionHistDetectorInput()
                {
                    Fx                  = new DoubleRange(0.0, 0.5, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 0,
                    NA = 0.0
                },
                new TransmittedDynamicMTOfFxAndSubregionHistDetectorInput()
                {
                    Fx                  = new DoubleRange(0.0, 0.5, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 2,
                    NA = 0.0
                },
                new ReflectedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 0,
                    NA = 0.0
                },
                new TransmittedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 2,
                    NA = 0.0
                },
                new ReflectedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 21),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 0,
                    NA = 0.0
                },
                new TransmittedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 2,
                    NA = 0.0
                }
            };
            var input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNA0);

            _outputNA0 = new MonteCarloSimulation(input).Run();

            var detectorsNA0p3 = new List <IDetectorInput>
            {
                new ReflectedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 0,
                    NA = 0.3
                },
                new TransmittedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 2,
                    NA = 0.3
                },
                new ReflectedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 21),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 0,
                    NA = 0.3
                },
                new TransmittedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                    FinalTissueRegionIndex = 2,
                    NA = 0.3
                }
            };

            input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNA0p3);
            _outputNA0p3 = new MonteCarloSimulation(input).Run();

            var detectorsNoNASpecified = new List <IDetectorInput>
            {
                new ReflectedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                },
                new TransmittedDynamicMTOfRhoAndSubregionHistDetectorInput()
                {
                    Rho                 = new DoubleRange(0.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                },
                new ReflectedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 21),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                },
                new TransmittedDynamicMTOfXAndYAndSubregionHistDetectorInput()
                {
                    X                   = new DoubleRange(-10.0, 10.0, 11),
                    Y                   = new DoubleRange(-10.0, 10.0, 11),
                    Z                   = new DoubleRange(0.0, 10.0, 11),
                    MTBins              = new DoubleRange(0.0, 500.0, 5),
                    FractionalMTBins    = new DoubleRange(0.0, 1.0, 11),
                    BloodVolumeFraction = new List <double>()
                    {
                        0, 0.5, 0
                    },
                }
            };

            input = new SimulationInput(
                100,
                "",
                simulationOptions,
                source,
                tissue,
                detectorsNoNASpecified);
            _outputNoNASpecified = new MonteCarloSimulation(input).Run();
        }