コード例 #1
0
        /// <summary>
        /// method to get distance from current photon position and direction to boundary of region
        /// </summary>
        /// <param name="photon">Photon</param>
        /// <returns>distance to boundary</returns>
        public double GetDistanceToBoundary(Photon photon)
        {
            // first, check what region the photon is in
            int regionIndex = photon.CurrentRegionIndex;

            if ((regionIndex == _layerRegionIndexOfInclusion) || (regionIndex == _inclusionRegionIndex))
            {
                // check if current track will hit the inclusion boundary, returning the correct distance
                double distanceToBoundary;
                if (_inclusionRegion.RayIntersectBoundary(photon, out distanceToBoundary))
                {
                    return(distanceToBoundary);
                }
                else // otherwise, check that a projected track will hit the inclusion boundary
                {
                    var projectedPhoton = new Photon();
                    projectedPhoton.DP = new PhotonDataPoint(photon.DP.Position, photon.DP.Direction, photon.DP.Weight,
                                                             photon.DP.TotalTime, photon.DP.StateFlag);
                    projectedPhoton.S = 100;
                    if (_inclusionRegion.RayIntersectBoundary(projectedPhoton, out distanceToBoundary))
                    {
                        return(distanceToBoundary);
                    }
                }
            }

            // if not hitting the inclusion, call the base (layer) method
            return(base.GetDistanceToBoundary(photon));
        }
コード例 #2
0
ファイル: BoundedTissue.cs プロジェクト: acs3235/VTS
        /// <summary>
        /// method to get distance from current photon position and direction to boundary of region
        /// </summary>
        /// <param name="photon">Photon</param>
        /// <returns>distance to boundary</returns>
        public override double GetDistanceToBoundary(Photon photon)
        {
            // if we're inside or outside the bounding region, distance is either to bounding region or
            // edge of layer

            // check if current track will hit the bounding boundary
            double distanceToBoundingBoundary;

            if (_boundingRegion.RayIntersectBoundary(photon, out distanceToBoundingBoundary))
            {
                // check if will hit layer boundary
                double distanceToLayerBoundary = base.GetDistanceToBoundary(photon);
                if (distanceToBoundingBoundary < distanceToLayerBoundary)
                {
                    return(distanceToBoundingBoundary);
                }
                return(distanceToLayerBoundary);
            }

            // if not hitting the inclusion, call the base (layer) method
            return(base.GetDistanceToBoundary(photon));
        }