/// <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)); }
/// <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)); }