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); }
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); }
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)); } }
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); }
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); }
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); }
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)); }
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(); }
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(); }