/// Creates an instance of a MultiLayerSurfaceFiberTissue
 /// </summary>
 /// <param name="surfaceFiberRegion">circular surface fiber region and characteristics</param>
 /// <param name="layerRegions">list of tissue regions comprising tissue</param>
 /// <remarks>air above and below tissue needs to be specified for a slab geometry</remarks>
 public MultiLayerWithSurfaceFiberTissue(ITissueRegion surfaceFiberRegion,
                                         IList <ITissueRegion> layerRegions)
     : base(layerRegions.Concat(surfaceFiberRegion).ToArray())
 {
     _layerRegions       = layerRegions.Select(region => (LayerTissueRegion)region).ToArray();
     _surfaceFiberRegion = surfaceFiberRegion;
 }
コード例 #2
0
ファイル: AOfRhoAndZLoader.cs プロジェクト: acs3235/VTS
        /// <summary>
        /// constructor that load excitation simulation AOfRhoAndZ
        /// </summary>
        public AOfRhoAndZLoader(string inputFolder, string infile, int fluorescentTissueRegionIndex)
        {
            if (infile != "")
            {
                var inputPath = "";
                if (inputFolder == "")
                {
                    inputPath = infile;
                }
                else
                {
                    inputPath = inputFolder + @"/" + infile;
                }
                var aOfRhoAndZDetector = (AOfRhoAndZDetector) DetectorIO.ReadDetectorFromFile(
                    "AOfRhoAndZ", inputFolder);
                // use DoubleRange X,Y,Z to match detector dimensions
                Rho = ((AOfRhoAndZDetector) aOfRhoAndZDetector).Rho;
                Z = ((AOfRhoAndZDetector) aOfRhoAndZDetector).Z;
                AOfRhoAndZ = ((AOfRhoAndZDetector) aOfRhoAndZDetector).Mean;

                var exciteInfile = SimulationInput.FromFile(inputPath);
                FluorescentTissueRegion = exciteInfile.TissueInput.Regions[fluorescentTissueRegionIndex];

                // separate setup of arrays so can unit test method
                InitializeFluorescentRegionArrays();
                SetupRegionIndices();
            }
            else
            {
                throw new ArgumentException("infile string is empty");
            }
        }
コード例 #3
0
        /// <summary>
        /// Creates an instance of a SingleInclusionTissue
        /// </summary>
        /// <param name="inclusionRegion">The single inclusion (must be contained completely within a layer region)</param>
        /// <param name="layerRegions">The tissue layers</param>
        public SingleInclusionTissue(
            ITissueRegion inclusionRegion,
            IList <ITissueRegion> layerRegions)
            : base(layerRegions)
        {
            // overwrite the Regions property in the TissueBase class (will be called last in the most derived class)
            Regions = layerRegions.Concat(inclusionRegion).ToArray();

            _inclusionRegion             = inclusionRegion;
            _inclusionRegionIndex        = layerRegions.Count; // index is, by convention, after the layer region indices
            _layerRegionIndexOfInclusion = Enumerable.Range(0, layerRegions.Count)
                                           .FirstOrDefault(i => ((LayerTissueRegion)layerRegions[i]).ContainsPosition(_inclusionRegion.Center));
        }
コード例 #4
0
ファイル: BoundedTissue.cs プロジェクト: acs3235/VTS
 /// <summary>
 /// Creates an instance of a SingleInclusionTissue
 /// </summary>
 /// <param name="boundingRegion">Tissue region defining later extent of tissue (must span top to bottom of tissue layers)</param>
 /// <param name="layerRegions">The tissue layers</param>
 public BoundedTissue(
     ITissueRegion boundingRegion,
     IList <ITissueRegion> layerRegions)
     : base(layerRegions)
 {
     // boundingRegionExteriorIndex is the area *outside* of the bounding region
     _boundingRegionExteriorIndex = layerRegions.Count; // index is, by convention, after the layer region indices
     // overwrite the Regions property in the TissueBase class (will be called last in the most derived class)
     // the concat is with the outside of the bounding region by convention
     Regions         = layerRegions.Concat(boundingRegion).ToArray();
     _layers         = layerRegions;
     _boundingRegion = boundingRegion;
 }
コード例 #5
0
        /// <summary>
        /// constructor that load excitation simulation AOfXAndYAndZ
        /// </summary>
        public AOfXAndYAndZLoader(string inputFolder, string infile, int fluorescentTissueRegionIndex)
        {
            if (infile != "")
            {
                var inputPath = "";
                if (inputFolder == "")
                {
                    inputPath = infile;
                }
                else
                {
                    inputPath = inputFolder + @"/" + infile;
                }
                var aOfXAndYAndZDetector = (AOfXAndYAndZDetector)DetectorIO.ReadDetectorFromFile(
                    "AOfXAndYAndZ", inputFolder);
                // use DoubleRange X,Y,Z to match detector dimensions
                X            = ((AOfXAndYAndZDetector)aOfXAndYAndZDetector).X;
                Y            = ((AOfXAndYAndZDetector)aOfXAndYAndZDetector).Y;
                Z            = ((AOfXAndYAndZDetector)aOfXAndYAndZDetector).Z;
                AOfXAndYAndZ = ((AOfXAndYAndZDetector)aOfXAndYAndZDetector).Mean;

                var exciteInfile = SimulationInput.FromFile(inputPath);

                FluorescentTissueRegion = exciteInfile.TissueInput.Regions[fluorescentTissueRegionIndex];
                BoundedTissueRegion     = null;
                // check if tissue bounded CH: can this be made more generic?
                if (exciteInfile.TissueInput.TissueType == "BoundingCylinder")
                {
                    var cylinderIndex = exciteInfile.TissueInput.Regions.Length - 1;
                    CaplessCylinderTissueRegion boundingCylinder =
                        (CaplessCylinderTissueRegion)exciteInfile.TissueInput.Regions[cylinderIndex];
                    BoundedTissueRegion = new CaplessCylinderTissueRegion(
                        boundingCylinder.Center,
                        boundingCylinder.Radius,
                        boundingCylinder.Height,
                        boundingCylinder.RegionOP);
                }

                // separate setup of arrays so can unit test method
                InitializeFluorescentRegionArrays();
                SetupRegionIndices();
            }
            else
            {
                throw new ArgumentException("infile string is empty");
            }
        }
コード例 #6
0
        /// <summary>
        /// diffuse reflectance VB
        /// </summary>
        /// <param name="tissue">ITissue</param>
        /// <param name="detectorController">IDetectorController</param>
        /// <param name="name">string name</param>
        public BoundingCylinderVirtualBoundary(ITissue tissue, IDetectorController detectorController, string name)
        {
            _boundingTissueRegion = tissue.Regions[tissue.Regions.Count - 1]; // bounding region always last by convention
            _center = _boundingTissueRegion.Center;
            _radius = ((CaplessCylinderTissueRegion)_boundingTissueRegion).Radius;

            WillHitBoundary = dp =>
                              dp.StateFlag.HasFlag(PhotonStateType.PseudoBoundingVolumeTissueBoundary) &&
                              _boundingTissueRegion.ContainsPosition(dp.Position);

            VirtualBoundaryType = VirtualBoundaryType.BoundingCylinderVolume;
            PhotonStateType     = PhotonStateType.PseudoBoundingCylinderVolumeVirtualBoundary;

            _detectorController = detectorController;

            Name = name;
        }
コード例 #7
0
 /// <summary>
 /// allows definition of tissue bounded by capless cylinder height of tissue
 /// </summary>
 /// <param name="cylinderRegion">bounding vertical cylinder region specification</param>
 /// <param name="layerRegions">tissue layer specification</param>
 public BoundingCylinderTissueInput(ITissueRegion caplessCylinderRegion, ITissueRegion[] layerRegions)
 {
     TissueType             = "BoundingCylinder";
     _caplessCylinderRegion = (CaplessCylinderTissueRegion)caplessCylinderRegion;
     _layerRegions          = layerRegions;
 }
コード例 #8
0
 /// <summary>
 /// allows definition of single ellipsoid tissue
 /// </summary>
 /// <param name="ellipsoidRegion">ellipsoid region specification</param>
 /// <param name="layerRegions">tissue layer specification</param>
 public SingleEllipsoidTissueInput(ITissueRegion ellipsoidRegion, ITissueRegion[] layerRegions)
 {
     TissueType       = "SingleEllipsoid";
     _ellipsoidRegion = ellipsoidRegion;
     _layerRegions    = layerRegions;
 }
コード例 #9
0
 /// <summary>
 /// allows definition of single infinite cylinder tissue
 /// </summary>
 /// <param name="infiniteCylinderRegion">infinite cylinder region specification</param>
 /// <param name="layerRegions">tissue layer specification</param>
 public SingleInfiniteCylinderTissueInput(ITissueRegion infiniteCylinderRegion, ITissueRegion[] layerRegions)
 {
     TissueType = "SingleInfiniteCylinder";
     _infiniteCylinderRegion = infiniteCylinderRegion;
     _layerRegions           = layerRegions;
 }
コード例 #10
0
ファイル: SingleVoxelTissue.cs プロジェクト: acs3235/VTS
 /// <summary>
 /// allows definition of single voxel tissue
 /// </summary>
 /// <param name="voxelRegion">voxel region specification</param>
 /// <param name="layerRegions">tissue layer specification</param>
 public SingleVoxelTissueInput(ITissueRegion voxelRegion, ITissueRegion[] layerRegions)
 {
     TissueType    = "SingleVoxel";
     _voxelRegion  = voxelRegion;
     _layerRegions = layerRegions;
 }
コード例 #11
0
ファイル: SemiInfiniteTissue.cs プロジェクト: acs3235/VTS
 /// <summary>
 /// constructor for Semi-infinite tissue input
 /// </summary>
 /// <param name="region">tissue region info</param>
 public SemiInfiniteTissueInput(ITissueRegion region)
 {
     TissueType = "SemiInfinite";
     _regions   = new[] { region };
 }
コード例 #12
0
 /// <summary>
 /// allows definition of single cylinder tissue
 /// </summary>
 /// <param name="cylinderRegion">cylinder region specification</param>
 /// <param name="layerRegions">tissue layer specification</param>
 public SingleCylinderTissueInput(ITissueRegion cylinderRegion, ITissueRegion[] layerRegions)
 {
     TissueType      = "SingleCylinder";
     _cylinderRegion = cylinderRegion;
     _layerRegions   = layerRegions;
 }
 /// <summary>
 /// constructor for Multi-layer tissue with surface fiber circle input
 /// </summary>
 /// <param name="surfaceFiberRegion">surface fiber region defining area and characteristics of detector fiber</param>
 /// <param name="layerRegions">list of tissue regions comprising tissue</param>
 public MultiLayerWithSurfaceFiberTissueInput(ITissueRegion surfaceFiberRegion, ITissueRegion[] layerRegions)
 {
     TissueType          = "MultiLayerWithSurfaceFiber";
     _layerRegions       = layerRegions;
     _surfaceFiberRegion = surfaceFiberRegion;
 }
コード例 #14
0
 /// <summary>
 /// Method to determine if tissue region is air or not
 /// </summary>
 /// <param name="region">tissue region</param>
 /// <returns>boolean</returns>
 public static bool IsAir(this ITissueRegion region)
 {
     return(region.RegionOP.Mua == 0D && region.RegionOP.Mus <= 1E-10);
 }