/// <summary>
        /// Method to verify refractive index of tissue layer and ellipsoid match.
        /// Code does not yet include reflecting/refracting off ellipsoid surface.
        /// </summary>
        /// <param name="layers">list of LayerTissueRegion</param>
        /// <param name="ellipsoid">EllipsoidTissueRegion></param>
        /// <returns>ValidationResult</returns>
        private static ValidationResult ValidateRefractiveIndexMatch(
            IList <LayerTissueRegion> layers, EllipsoidTissueRegion ellipsoid)
        {
            int containingLayerIndex = -1;

            for (int i = 0; i < layers.Count - 1; i++)
            {
                if (layers[i].ContainsPosition(ellipsoid.Center) &&
                    ellipsoid.Center.Z + ellipsoid.Dz <= layers[i].ZRange.Stop &&
                    ellipsoid.Center.Z - ellipsoid.Dz >= layers[i].ZRange.Start)
                {
                    containingLayerIndex = i;
                }
            }
            if ((containingLayerIndex != -1) && (layers[containingLayerIndex].RegionOP.N != ellipsoid.RegionOP.N))
            {
                return(new ValidationResult(
                           false,
                           "SingleEllipsoidTissueInput: refractive index of tissue layer must match that of ellipsoid",
                           "Change N of ellipsoid to match tissue layer N"));
            }
            return(new ValidationResult(
                       true,
                       "SingleEllipsoidTissueInput: refractive index of tissue and ellipsoid match"));
        }
        public void Verify_region_is_air()
        {
            var ellisoidTissueRegion = new EllipsoidTissueRegion {
                RegionOP = { G = 0.8, Mua = 0D, Mus = 1E-10 }
            };

            ellisoidTissueRegion.RegionOP.G = 1.4;
            var viewModel = new EllipsoidRegionViewModel(ellisoidTissueRegion, "TestEllipsiodTissue");

            Assert.IsTrue(ellisoidTissueRegion.IsAir());
            Assert.AreEqual("TestEllipsiodTissue" + StringLookup.GetLocalizedString("Label_Air"), viewModel.Name);
        }
Exemple #3
0
 public EllipsoidRegionViewModel(EllipsoidTissueRegion region, string name)
 {
     _region            = region;
     _name              = name ?? "";
     _opticalPropertyVm = new OpticalPropertyViewModel(_region.RegionOP, StringLookup.GetLocalizedString("Measurement_Inv_mm"), "", true, true, true, false);
 }
Exemple #4
0
 public void create_instance_of_class()
 {
     _ellipsoidTissueRegion = new EllipsoidTissueRegion(
         new Position(0, 0, 3), 1.0, 1.0, 2.0, new OpticalProperties(0.01, 1.0, 0.8, 1.4));
 }
 public EllipsoidRegionViewModel(EllipsoidTissueRegion region, string name)
 {
     _region            = region;
     _name              = name ?? "";
     _opticalPropertyVM = new OpticalPropertyViewModel(_region.RegionOP, "mm-1", "", true, true, true, false);
 }
        /// <summary>
        /// Method to validate that the geometry of tissue layers and ellipsoid agree with capabilities
        /// of code.
        /// </summary>
        /// <param name="layers">list of LayerTissueRegion</param>
        /// <param name="ellipsoid">EllipsoidTissueRegion</param>
        /// <returns>ValidationResult</returns>
        private static ValidationResult ValidateGeometry(IList <LayerTissueRegion> layers, EllipsoidTissueRegion ellipsoid)
        {
            // check that layer definition is valid
            var tempResult = MultiLayerTissueInputValidation.ValidateLayers(layers);

            if (!tempResult.IsValid)
            {
                return(tempResult);
            }

            if ((ellipsoid.Dx == 0) || (ellipsoid.Dy == 0) || (ellipsoid.Dz == 0))
            {
                tempResult = new ValidationResult(
                    false,
                    "SingleEllipsoidTissueInput: ellipsoid has a radial axis equal to 0",
                    "SingleEllipsoidTissueInput: make sure Dx, Dy, Dz are > 0");
            }

            if (!tempResult.IsValid)
            {
                return(tempResult);
            }

            // test for air layers and eliminate from list
            var tissueLayers = layers.Where(layer => !layer.IsAir());

            // check that there is at least one layer of tissue
            if (!tissueLayers.Any())
            {
                tempResult = new ValidationResult(
                    false,
                    "SingleEllipsoidTissueInput: tissue layer is assumed to be at least a single layer with air layer above and below",
                    "SingleEllipsoidTissueInput: redefine tissue definition to contain at least a single layer of tissue");
            }

            if (!tempResult.IsValid)
            {
                return(tempResult);
            }

            // check that ellipsoid contained within a tissue layer
            bool correctlyContainedInLayer = tissueLayers.Any(
                layer =>
                layer.ContainsPosition(ellipsoid.Center) &&
                ellipsoid.Center.Z + ellipsoid.Dz <= layer.ZRange.Stop &&
                ellipsoid.Center.Z - ellipsoid.Dz >= layer.ZRange.Start
                );

            if (!correctlyContainedInLayer)
            {
                tempResult = new ValidationResult(
                    false,
                    "SingleEllipsoidTissueInput: ellipsoid must be entirely contained within a tissue layer",
                    "Resize Dz of Ellipsoid dimension so that 2*Dz<layer[1] depth");
            }

            if (!tempResult.IsValid)
            {
                return(tempResult);
            }

            return(new ValidationResult(
                       true,
                       "SingleEllipsoidTissueInput: geometry and refractive index settings validated"));
        }