private static ValidationResult ValidateTissueInput(ITissueInput tissueInput)
        {
            // for all types of tissues, check that OPs are non-negative (g could be neg)
            if (tissueInput.Regions.Any(r => r.RegionOP.Mua < 0.0) ||
                tissueInput.Regions.Any(r => r.RegionOP.Musp < 0.0) ||
                tissueInput.Regions.Any(r => r.RegionOP.N < 0.0))
            {
                return(new ValidationResult(
                           false,
                           "Tissue optical properties mua, mus', n need to be non-negative",
                           "Please check optical properties"));
            }
            if (tissueInput is MultiLayerTissueInput)
            {
                return(MultiLayerTissueInputValidation.ValidateInput(tissueInput));
            }
            if (tissueInput is SingleEllipsoidTissueInput)
            {
                return(SingleEllipsoidTissueInputValidation.ValidateInput(tissueInput));
            }
            if (tissueInput is SingleVoxelTissueInput)
            {
                return(SingleVoxelTissueInputValidation.ValidateInput(tissueInput));
            }
            if (tissueInput is BoundingCylinderTissueInput)
            {
                return(BoundingCylinderTissueInputValidation.ValidateInput(tissueInput));
            }

            return(new ValidationResult(
                       true,
                       "Tissue input must be valid",
                       "Validation skipped for tissue input " + tissueInput + ". No matching validation rules were found."));
        }
コード例 #2
0
        /// <summary>
        /// Method to validate that the geometry of tissue layers and bounding cylinder agree with capabilities
        /// of code.
        /// </summary>
        /// <param name="layers">list of LayerTissueRegion</param>
        /// <param name="boundingCylinder">CylinderTissueRegion</param>
        /// <returns>ValidationResult</returns>
        private static ValidationResult ValidateGeometry(IList <LayerTissueRegion> layers,
                                                         CaplessCylinderTissueRegion boundingCylinder)
        {
            // check that layer definition is valid
            var tempResult = MultiLayerTissueInputValidation.ValidateLayers(layers);

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

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

            var layersHeight = tissueLayers.Sum(layer => layer.ZRange.Delta);

            if (boundingCylinder.Height != layersHeight)
            {
                tempResult = new ValidationResult(
                    false,
                    "BoundingCylinderTissueInput: bounding cylinder must have same height as tissue",
                    "BoundingCylinderTissueInput: make sure cylinder Height = depth of tissue");
            }

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

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

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

            return(new ValidationResult(
                       true,
                       "BoundingCylinderTissueInput: geometry and refractive index settings validated"));
        }
コード例 #3
0
        private static ValidationResult ValidateTissueInput(ITissueInput tissueInput)
        {
            if (tissueInput is MultiLayerTissueInput)
            {
                return(MultiLayerTissueInputValidation.ValidateInput(tissueInput));
            }
            if (tissueInput is SingleEllipsoidTissueInput)
            {
                return(SingleEllipsoidTissueInputValidation.ValidateInput(tissueInput));
            }
            if (tissueInput is SingleVoxelTissueInput)
            {
                return(SingleVoxelTissueInputValidation.ValidateInput(tissueInput));
            }

            return(new ValidationResult(
                       true,
                       "Tissue input must be valid",
                       "Validation skipped for tissue input " + tissueInput + ". No matching validation rules were found."));
        }
コード例 #4
0
        /// <summary>
        /// Method to validate that the geometry of tissue layers and Voxel agree with capabilities
        /// of code.
        /// </summary>
        /// <param name="layers">list of LayerTissueRegion</param>
        /// <param name="Voxel">VoxelTissueRegion</param>
        /// <returns>ValidationResult</returns>
        private static ValidationResult ValidateGeometry(IList <LayerTissueRegion> layers, VoxelTissueRegion Voxel)
        {
            // check that layer definition is valid
            var tempResult = MultiLayerTissueInputValidation.ValidateLayers(layers);

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

            if ((Voxel.X.Stop - Voxel.X.Start <= 0) || ((Voxel.Y.Stop - Voxel.Y.Start) <= 0) || ((Voxel.Z.Stop - Voxel.Z.Start) <= 0))
            {
                tempResult = new ValidationResult(
                    false,
                    "SingleVoxelTissueInput: Voxel has 0 dimension along at least one side",
                    "SingleVoxelTissueInput: make sure X.Stop (Y.Stop, Z.Stop) is > X.Start (Y.Stop, Z.Stop)");
            }

            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,
                    "SingleVoxelTissueInput: tissue layer is assumed to be at least a single layer with air layer above and below",
                    "SingleVoxelTissueInput: redefine tissue definition to contain at least a single layer of tissue");
            }

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

            // check that Voxel contained within a tissue layer
            bool correctlyContainedInLayer = tissueLayers.Any(
                layer =>
                Voxel.Z.Start > layer.ZRange.Start &&
                Voxel.Z.Stop < layer.ZRange.Stop
                );

            if (!correctlyContainedInLayer)
            {
                tempResult = new ValidationResult(
                    false,
                    "SingleVoxelTissueInput: Voxel must be entirely contained within a tissue layer",
                    "Redefine Voxel.Z.Start and Voxel.Z.Stop to be entirely within layer.ZRange.Start and Stop");
            }

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

            return(new ValidationResult(
                       true,
                       "SingleVoxelTissueInput: geometry and refractive index settings validated"));
        }
コード例 #5
0
        /// <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"));
        }