/// <summary> /// Define SimulationInput to describe homogeneous and two layer tissue /// </summary> /// <returns></returns> private void GenerateReferenceDatabase() { var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { DatabaseType.pMCDiffuseReflectance }, false, // track statistics 0.0, // RR threshold -> 0 = no RR performed 0); var sourceInput = new DirectionalPointSourceInput( new Position(0.0, 0.0, 0.0), new Direction(0.0, 0.0, 1.0), 1); var detectorInputs = new List <IDetectorInput>() { new ROfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101) }, new ROfRhoAndTimeDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101) } }; _referenceInputTwoLayerTissue = new SimulationInput( 100, "", simulationOptions, sourceInput, new MultiLayerTissueInput( new ITissueRegion[] { new LayerRegion( new DoubleRange(double.NegativeInfinity, 0.0), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)), new LayerRegion( new DoubleRange(0.0, _layerThickness), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerRegion( new DoubleRange(_layerThickness, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectorInputs); _factor = 1.0 - Optics.Specular( _referenceInputTwoLayerTissue.TissueInput.Regions[0].RegionOP.N, _referenceInputTwoLayerTissue.TissueInput.Regions[1].RegionOP.N); _referenceOutputTwoLayerTissue = new MonteCarloSimulation(_referenceInputTwoLayerTissue).Run(); _databaseTwoLayerTissue = pMCDatabase.FromFile("DiffuseReflectanceDatabase", "CollisionInfoDatabase"); }
public void execute_Monte_Carlo() { // delete previously generated files clear_folders_and_files(); var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Continuous, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { DatabaseType.pMCDiffuseReflectance }, false, // track statistics 0.0, // RR threshold -> 0 = no RR performed 0); var sourceInput = new DirectionalPointSourceInput( new Position(0.0, 0.0, 0.0), new Direction(0.0, 0.0, 1.0), 1); var detectorInputs = new List <IDetectorInput>() { new ROfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101) }, new ROfRhoAndTimeDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101) }, new ROfFxDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11) }, new ROfFxAndTimeDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), Time = new DoubleRange(0.0, 1.0, 101) } }; _referenceInputOneLayerTissue = new SimulationInput( 100, "", // can't create folder in isolated storage simulationOptions, sourceInput, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectorInputs); _factor = 1.0 - Optics.Specular( _referenceInputOneLayerTissue.TissueInput.Regions[0].RegionOP.N, _referenceInputOneLayerTissue.TissueInput.Regions[1].RegionOP.N); _referenceOutputOneLayerTissue = new MonteCarloSimulation(_referenceInputOneLayerTissue).Run(); _databaseOneLayerTissue = pMCDatabase.FromFile("DiffuseReflectanceDatabase", "CollisionInfoDatabase"); }
public void execute_Monte_Carlo() { // delete previously generated files clear_folders_and_files(); // instantiate common classes var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var oneLayerDetectors = new List <IDetectorInput> { new ROfFxDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), TallySecondMoment = true }, new TOfFxDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11) }, new ReflectedDynamicMTOfFxAndSubregionHistDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), // fx bins MAKE SURE AGREES with ROfFx fx specification for unit test below Z = new DoubleRange(0.0, 10.0, 21), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11), BloodVolumeFraction = new List <double>() { 0, 0.5, 0 } }, new TransmittedDynamicMTOfFxAndSubregionHistDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), // fx bins MAKE SURE AGREES with TOfFx fx specification for unit test below Z = new DoubleRange(0.0, 10.0, 21), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11), BloodVolumeFraction = new List <double>() { 0, 0.5, 0 } }, }; _inputOneLayerTissue = new SimulationInput( 100, "", simulationOptions, source, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), oneLayerDetectors); _outputOneLayerTissue = new MonteCarloSimulation(_inputOneLayerTissue).Run(); var twoLayerDetectors = new List <IDetectorInput> { new ReflectedDynamicMTOfFxAndSubregionHistDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), Z = new DoubleRange(0.0, 10.0, 21), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11), BloodVolumeFraction = new List <double>() { 0, 0.2, 0.5, 0 } }, new TransmittedDynamicMTOfFxAndSubregionHistDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 11), Z = new DoubleRange(0.0, 10.0, 21), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11), BloodVolumeFraction = new List <double>() { 0, 0.2, 0.5, 0 } } }; _inputTwoLayerTissue = new SimulationInput( 100, "", simulationOptions, source, 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, _layerThickness), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(_layerThickness, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), twoLayerDetectors); _outputTwoLayerTissue = new MonteCarloSimulation(_inputTwoLayerTissue).Run(); }
public void execute_Monte_Carlo() { // delete previously generated files clear_folders_and_files(); // instantiate common classes var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var detectors = 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, 101), TallySecondMoment = true }, new ROfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfRhoAndTimeDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101), TallySecondMoment = true }, new ROfXAndYDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101) }, new ROfRhoAndOmegaDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Omega = new DoubleRange(0.05, 1.0, 20) }, // DJC - edited to reflect frequency sampling points (not bins) new ROfFxDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 51) }, new TDiffuseDetectorInput(), new TOfAngleDetectorInput() { Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new TOfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101) }, new TOfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new TOfXAndYDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101) }, new TOfFxDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 51) }, new AOfRhoAndZDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101) }, new AOfXAndYAndZDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101), TallySecondMoment = true }, new ATotalDetectorInput() { TallySecondMoment = true }, new FluenceOfRhoAndZDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101) }, new FluenceOfXAndYAndZDetectorInput() { X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Z = new DoubleRange(0.0, 10.0, 11), TallySecondMoment = true }, new FluenceOfXAndYAndZAndOmegaDetectorInput() { X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Z = new DoubleRange(0.0, 10.0, 11), Omega = new DoubleRange(0.05, 1.0, 20) }, new RadianceOfRhoAtZDetectorInput() { ZDepth = _dosimetryDepth, Rho = new DoubleRange(0.0, 10.0, 101) }, new RadianceOfRhoAndZAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(0, Math.PI, 5) }, new RadianceOfFxAndZAndAngleDetectorInput() { Fx = new DoubleRange(0.0, 0.5, 51), Z = new DoubleRange(0.0, 10, 101), Angle = new DoubleRange(0, Math.PI, 5) }, new RadianceOfXAndYAndZAndThetaAndPhiDetectorInput() { X = new DoubleRange(-10.0, 10.0, 11), Y = new DoubleRange(-10.0, 10.0, 11), Z = new DoubleRange(0.0, 10.0, 11), Theta = new DoubleRange(0.0, Math.PI, 5), // theta (polar angle) Phi = new DoubleRange(-Math.PI, Math.PI, 5), // phi (azimuthal angle) }, new ReflectedMTOfRhoAndSubregionHistDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), // rho bins MAKE SURE AGREES with ROfRho rho specification for unit test below MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11) }, new TransmittedMTOfRhoAndSubregionHistDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), // rho bins MAKE SURE AGREES with TOfRho rho specification for unit test below MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11) }, new ReflectedMTOfXAndYAndSubregionHistDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11), TallySecondMoment = true }, new TransmittedMTOfXAndYAndSubregionHistDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101), MTBins = new DoubleRange(0.0, 500.0, 51), // MT bins FractionalMTBins = new DoubleRange(0.0, 1.0, 11) } }; _inputOneLayerTissue = new SimulationInput( 100, "", simulationOptions, source, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputOneLayerTissue = new MonteCarloSimulation(_inputOneLayerTissue).Run(); _inputTwoLayerTissue = new SimulationInput( 100, "", simulationOptions, source, 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, _layerThickness), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(_layerThickness, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputTwoLayerTissue = new MonteCarloSimulation(_inputTwoLayerTissue).Run(); _factor = 1.0 - Optics.Specular( _inputOneLayerTissue.TissueInput.Regions[0].RegionOP.N, _inputOneLayerTissue.TissueInput.Regions[1].RegionOP.N); }
public void execute_Monte_Carlo() { // delete previously generated files clear_folders_and_files(); // instantiate common classes var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var detectors = new List <IDetectorInput> { new RDiffuseDetectorInput(), new ROfAngleDetectorInput() { Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfXAndYDetectorInput() { X = new DoubleRange(-200.0, 200.0, 401), Y = new DoubleRange(-200.0, 200.0, 401) }, new TDiffuseDetectorInput(), new TOfAngleDetectorInput() { Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new ATotalDetectorInput(), }; _inputOneRegionTissue = new SimulationInput( 100, "", simulationOptions, source, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputOneRegionTissue = new MonteCarloSimulation(_inputOneRegionTissue).Run(); _inputTwoRegionTissue = new SimulationInput( 100, "", simulationOptions, source, new SingleVoxelTissueInput( new VoxelTissueRegion( new DoubleRange(-5, 5), new DoubleRange(-5, 5), new DoubleRange(1e-9, 5), // smallest Z.Start with tests passing is 1e-9 new OpticalProperties(0.01, 1.0, 0.8, 1.4) //debug with g=1 ), new LayerTissueRegion[] { new LayerTissueRegion( new DoubleRange(double.NegativeInfinity, 0.0), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)), new LayerTissueRegion( new DoubleRange(0.0, 20.0), // debug with thin slab d=2 new OpticalProperties(0.01, 1.0, 0.8, 1.4)), // debug with g=1 new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputTwoRegionTissue = new MonteCarloSimulation(_inputTwoRegionTissue).Run(); _factor = 1.0 - Optics.Specular( _inputOneRegionTissue.TissueInput.Regions[0].RegionOP.N, _inputOneRegionTissue.TissueInput.Regions[1].RegionOP.N); }
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() { // delete any previously generated files clear_folders_and_files(); // instantiate common classes var simulationOptions = new SimulationOptions( 0, // rng seed = same as linux (0) RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Continuous, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var detectors = new List <IDetectorInput> { new ATotalDetectorInput(), new RDiffuseDetectorInput() { TallySecondMoment = true }, new ROfAngleDetectorInput() { Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), TallySecondMoment = true }, new ROfRhoAndTimeDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101) }, new ROfXAndYDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101) }, new ROfRhoAndOmegaDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Omega = new DoubleRange(0.05, 1.0, 20) }, // DJC - edited to reflect frequency sampling points (not bins) new TDiffuseDetectorInput(), new TOfAngleDetectorInput() { Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new TOfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101) }, new TOfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new TOfXAndYDetectorInput() { X = new DoubleRange(-10.0, 10.0, 101), Y = new DoubleRange(-10.0, 10.0, 101) }, new ReflectedTimeOfRhoAndSubregionHistDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101) }, }; // one tissue layer var inputOneLayerTissue = new SimulationInput( 100, "", simulationOptions, source, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputOneLayerTissue = new MonteCarloSimulation(inputOneLayerTissue).Run(); // two tissue layers with same optical properties var inputTwoLayerTissue = new SimulationInput( 100, "Output", simulationOptions, source, 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, _layerThickness), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(_layerThickness, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputTwoLayerTissue = new MonteCarloSimulation(inputTwoLayerTissue).Run(); _factor = 1.0 - Optics.Specular( inputOneLayerTissue.TissueInput.Regions[0].RegionOP.N, inputOneLayerTissue.TissueInput.Regions[1].RegionOP.N); }
public void execute_Monte_Carlo() { // delete previously generated files clear_folders_and_files(); // instantiate common classes var simulationOptions = new SimulationOptions( 0, // reproducible RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var detectors = new List <IDetectorInput> // no cylindrical cylinders inconsistent with tissue geometry { new RDiffuseDetectorInput(), new ROfAngleDetectorInput() { Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfXAndYDetectorInput() { X = new DoubleRange(-20.0, 20.0, 41), Y = new DoubleRange(-20.0, 20.0, 2) }, new TDiffuseDetectorInput(), new TOfAngleDetectorInput() { Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new ATotalDetectorInput(), new AOfXAndYAndZDetectorInput() { X = new DoubleRange(-20.0, 20.0, 41), Y = new DoubleRange(-20.0, 20.0, 2), Z = new DoubleRange(0, 20, 21) } }; _inputOneRegionTissue = new SimulationInput( 100, "", simulationOptions, source, 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, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputOneRegionTissue = new MonteCarloSimulation(_inputOneRegionTissue).Run(); _inputThreeRegionTissue = new SimulationInput( 100, "", simulationOptions, source, new MultiConcentricInfiniteCylinderTissueInput( new ITissueRegion[] { new InfiniteCylinderTissueRegion( new Position(0, 0, 1), 0.75, new OpticalProperties(0.01, 1.0, 0.8, 1.4) //debug with g=1 ), new InfiniteCylinderTissueRegion( new Position(0, 0, 1), 0.5, new OpticalProperties(0.01, 1.0, 0.8, 1.4) //debug with g=1 ), }, 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, 20.0), // debug with thin slab d=2 new OpticalProperties(0.01, 1.0, 0.8, 1.4)), // debug with g=1 new LayerTissueRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputThreeRegionTissue = new MonteCarloSimulation(_inputThreeRegionTissue).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(); }
public void execute_Monte_Carlo() { // instantiate common classes var simulationOptions = new SimulationOptions( 0, RandomNumberGeneratorType.MersenneTwister, AbsorptionWeightingType.Discrete, PhaseFunctionType.HenyeyGreenstein, new List <DatabaseType>() { }, // databases to be written 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), 1); // start inside tissue var detectors = 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, 101), TallySecondMoment = true }, new ROfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(Math.PI / 2, Math.PI, 2) }, new ROfRhoAndTimeDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Time = new DoubleRange(0.0, 1.0, 101) }, new ROfXAndYDetectorInput() { X = new DoubleRange(-200.0, 200.0, 401), Y = new DoubleRange(-200.0, 200.0, 401) }, new ROfRhoAndOmegaDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Omega = new DoubleRange(0.0, 1.0, 21) }, new TDiffuseDetectorInput(), new TOfAngleDetectorInput() { Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new TOfRhoDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101) }, new TOfRhoAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(0.0, Math.PI / 2, 2) }, new AOfRhoAndZDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101) }, new ATotalDetectorInput(), new FluenceOfRhoAndZDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101) }, new RadianceOfRhoAndZAndAngleDetectorInput() { Rho = new DoubleRange(0.0, 10.0, 101), Z = new DoubleRange(0.0, 10.0, 101), Angle = new DoubleRange(-Math.PI / 2, Math.PI / 2, 5) } }; _inputOneRegionTissue = new SimulationInput( 100, "", simulationOptions, source, new MultiLayerTissueInput( new ITissueRegion[] { new LayerRegion( new DoubleRange(double.NegativeInfinity, 0.0), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)), new LayerRegion( new DoubleRange(0.0, 20.0), new OpticalProperties(0.01, 1.0, 0.8, 1.4)), new LayerRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputOneRegionTissue = new MonteCarloSimulation(_inputOneRegionTissue).Run(); _inputTwoRegionTissue = new SimulationInput( 100, "", simulationOptions, source, new SingleEllipsoidTissueInput( new EllipsoidRegion( new Position(0, 0, 1), 0.5, 0.5, 0.5, new OpticalProperties(0.01, 1.0, 0.8, 1.4) //debug with g=1 ), new LayerRegion[] { new LayerRegion( new DoubleRange(double.NegativeInfinity, 0.0), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)), new LayerRegion( new DoubleRange(0.0, 20.0), // debug with thin slab d=2 new OpticalProperties(0.01, 1.0, 0.8, 1.4)), // debug with g=1 new LayerRegion( new DoubleRange(20.0, double.PositiveInfinity), new OpticalProperties(0.0, 1e-10, 1.0, 1.0)) } ), detectors); _outputTwoRegionTissue = new MonteCarloSimulation(_inputTwoRegionTissue).Run(); _factor = 1.0 - Optics.Specular( _inputOneRegionTissue.TissueInput.Regions[0].RegionOP.N, _inputOneRegionTissue.TissueInput.Regions[1].RegionOP.N); }