Exemplo n.º 1
0
        /// <summary>
        /// Method to read photon database from file
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <param name="filePath">path to database file</param>
        /// <returns>PhotonDatabase read</returns>
        public static PhotonDatabase GetPhotonDatabase(
            VirtualBoundaryType virtualBoundaryType, string filePath)
        {
            string dbFilename;

            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.DiffuseReflectance:
                dbFilename = Path.Combine(filePath, "DiffuseReflectanceDatabase");
                break;

            case VirtualBoundaryType.DiffuseTransmittance:
                dbFilename = Path.Combine(filePath, "DiffuseTransmittanceDatabase");
                break;

            case VirtualBoundaryType.SpecularReflectance:
                dbFilename = Path.Combine(filePath, "SpecularReflectanceDatabase");
                break;

            case VirtualBoundaryType.pMCDiffuseReflectance:     //pMC uses same exit db as regular post-processing
                dbFilename = Path.Combine(filePath, "DiffuseReflectanceDatabase");
                break;

            default:
                return(null);
            }
            if (!File.Exists(dbFilename))
            {
                throw new FileNotFoundException("\nThe database file could not be found: " + dbFilename);
            }
            return(PhotonDatabase.FromFile(dbFilename));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Creates an instance of PhotonDatabasePostProcessor for standard (photon) database processing
 /// </summary>
 /// <param name="virtualBoundaryType">virtual boundary type</param>
 /// <param name="detectorInputs">List of IDetectorInputs designating binning</param>
 /// <param name="photonDatabase">PhotonTerminationDatabase</param>
 /// <param name="databaseInput">Database information needed for post-processing</param>
 public PhotonDatabasePostProcessor(
     VirtualBoundaryType virtualBoundaryType,
     IList <IDetectorInput> detectorInputs,
     PhotonDatabase photonDatabase,
     SimulationInput databaseInput)
     : this(virtualBoundaryType, detectorInputs, databaseInput)
 {
     _photonDatabase     = photonDatabase;
     _ispMCPostProcessor = false;
 }
        /// <summary>
        /// Method to determine if specular surface VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <returns></returns>
        public static bool IsSpecularSurfaceVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.SpecularReflectance:
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>
        /// Method to determine if transmittance surface VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <returns>true if transmittance surface VB, false if not</returns>
        public static bool IsTransmittanceSurfaceVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.DiffuseTransmittance:
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>
        /// Method to determine if generic volume VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <returns>true if generic volume VB, false if not</returns>
        public static bool IsGenericVolumeVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.GenericVolumeBoundary:
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>
        /// Method to determine if internal surface VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type </param>
        /// <returns>true if internal surface VB, false if not</returns>
        public static bool IsInternalSurfaceVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.SurfaceRadiance:
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>
        /// Method to determine if dosimetry VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type </param>
        /// <returns>true if internal surface VB, false if not</returns>
        public static bool IsDosimetryVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.Dosimetry:
                return(true);

            default:
                return(false);
            }
        }
        /// <summary>
        /// Method to determine if VB is surface reflectance VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <returns>true of surface reflectance VB, false if not</returns>
        public static bool IsReflectanceSurfaceVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.DiffuseReflectance:
            case VirtualBoundaryType.pMCDiffuseReflectance:
                return(true);

            default:
                return(false);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Method to read perturbation Monte Carlo (pMC) photon database from file
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <param name="filePath">path to database file</param>
        /// <returns>PhotonDatabase read</returns>
        public static pMCDatabase GetpMCDatabase(
            VirtualBoundaryType virtualBoundaryType, string filePath)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.pMCDiffuseReflectance:
                return(pMCDatabase.FromFile(Path.Combine(filePath, "DiffuseReflectanceDatabase"),
                                            Path.Combine(filePath, "CollisionInfoDatabase")));

            default:
                return(null);
            }
        }
Exemplo n.º 10
0
        //    /// <summary>
        //    /// This static method instantiates a list of virtual boundaries
        //    /// and the appropriate detectors are deposited into it.
        //    /// </summary>
        //    /// <param name="detectors"></param>
        //    /// <returns></returns>
        //    public static IList<IVirtualBoundary> GetVirtualBoundaries(
        //        IList<IVirtualBoundaryInput> virtualBoundaryGroups, ITissue tissue, bool tallySecondMoment)
        //    {
        //        // this sql returns all VBs even when only RSpecularDetector in detectors
        //        //var virtualBoundaries =
        //        //    from vb in EnumHelper.GetValues<VirtualBoundaryType>() // for each virtual boundary type
        //        //    where detectors.Select(d => d.TallyType.AppliesToBoundary(vb)).First()  // where any detectors apply
        //        //    let vbDetectors = detectors.Where(d => d.TallyType.AppliesToBoundary(vb)).ToList() // gather the appropriate detectors
        //        //    select GetVirtualBoundary(vb, tissue, vbDetectors); // and instantiate the vb with the appropriate detectors

        //        var virtualBoundaries = new List<IVirtualBoundary>();
        //        foreach (var vbg in virtualBoundaryGroups)
        //        {
        //            var detectors = DetectorFactory.GetDetectors(
        //                vbg.DetectorInputs, tissue, tallySecondMoment);

        //            var detectorController = DetectorControllerFactory.GetDetectorController(
        //                vbg.VirtualBoundaryType, detectors);
        //            if (detectors.Count > 0)
        //            {
        //                var vb = GetVirtualBoundary(vbg.VirtualBoundaryType, tissue, detectorController);
        //                if (vb != null)
        //                    virtualBoundaries.Add(vb);
        //            }
        //        }
        //        return virtualBoundaries.ToList();
        //    }
        /// <summary>
        /// method that gets appropriate VB
        /// </summary>
        /// <param name="vbType">VirtualBoundaryType</param>
        /// <param name="tissue">ITissue</param>
        /// <param name="detectorController">IDetectorController</param>
        /// <returns>IVirtualBoundary</returns>
        public static IVirtualBoundary GetVirtualBoundary(
            VirtualBoundaryType vbType, ITissue tissue, IDetectorController detectorController)
        {
            IVirtualBoundary vb = null;

            // todo: predicate defines
            switch (vbType)
            {
            case VirtualBoundaryType.DiffuseReflectance:
                vb = new DiffuseReflectanceVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.DiffuseReflectance.ToString());
                break;

            case VirtualBoundaryType.DiffuseTransmittance:
                vb = new DiffuseTransmittanceVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.DiffuseTransmittance.ToString());
                break;

            case VirtualBoundaryType.SpecularReflectance:
                // reflecting off first layer without transporting in medium
                vb = new SpecularReflectanceVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.SpecularReflectance.ToString());
                break;

            case VirtualBoundaryType.SurfaceRadiance:
                vb = new RadianceVirtualBoundary(
                    detectorController, VirtualBoundaryType.SurfaceRadiance.ToString());
                break;

            case VirtualBoundaryType.GenericVolumeBoundary:
                vb = new GenericVolumeVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.GenericVolumeBoundary.ToString());
                break;

            case VirtualBoundaryType.pMCDiffuseReflectance:
                vb = new pMCDiffuseReflectanceVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.DiffuseReflectance.ToString());
                break;

            case VirtualBoundaryType.BoundingCylinderVolume:
                vb = new BoundingCylinderVirtualBoundary(
                    tissue, detectorController, VirtualBoundaryType.BoundingCylinderVolume.ToString());
                break;

            default:
                throw new ArgumentOutOfRangeException("Virtual boundary type not recognized: " + vbType);
            }
            return(vb);
        }
        /// <summary>
        /// Method to determine if perturbation Monte Carlo (pMC) VB or not
        /// </summary>
        /// <param name="virtualBoundaryType">VB type</param>
        /// <returns>true if pMC VB, false if not</returns>
        public static bool IspMCVirtualBoundary(this VirtualBoundaryType virtualBoundaryType)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.pMCDiffuseReflectance:
                return(true);

            default:
            case VirtualBoundaryType.DiffuseReflectance:
            case VirtualBoundaryType.DiffuseTransmittance:
            case VirtualBoundaryType.SpecularReflectance:
            case VirtualBoundaryType.SurfaceRadiance:
                return(false);
            }
        }
Exemplo n.º 12
0
 /// <summary>
 /// Creates an instance of a plane tranmission virtual boundary in direction given
 /// </summary>
 public PlanarReflectionVirtualBoundary(
     Predicate <PhotonDataPoint> willHitBoundary,
     VirtualBoundaryAxisType axis,
     VirtualBoundaryDirectionType direction,
     double planeValue,
     VirtualBoundaryType type,
     string name)
 {
     WillHitBoundary     = willHitBoundary;
     _axis               = axis;
     _direction          = direction;
     _planeValue         = planeValue;
     _detectorController = new DetectorController(new List <IDetector>());
     Name = name;
     VirtualBoundaryType = type;
 }
Exemplo n.º 13
0
        /// <summary>
        /// method that returns an IDetectorController given the VBType, list of detectors and tissue
        /// </summary>
        /// <param name="virtualBoundaryType">virtual boundary type</param>
        /// <param name="detectors">IEnumerable of IDetector</param>
        /// <param name="tissue">ITissue</param>
        /// <returns>IDetectorController</returns>
        public static IDetectorController GetDetectorController(VirtualBoundaryType virtualBoundaryType, IEnumerable <IDetector> detectors, ITissue tissue)
        {
            switch (virtualBoundaryType)
            {
            case VirtualBoundaryType.DiffuseReflectance:
            case VirtualBoundaryType.DiffuseTransmittance:
            case VirtualBoundaryType.SpecularReflectance:
            case VirtualBoundaryType.SurfaceRadiance:
            case VirtualBoundaryType.pMCDiffuseReflectance:
                return(new DetectorController(detectors));

            case VirtualBoundaryType.GenericVolumeBoundary:
                return(new HistoryDetectorController((from d in detectors where d is IHistoryDetector select(IHistoryDetector) d).ToList(), tissue));

            default:
                throw new ArgumentOutOfRangeException("virtualBoundaryType");
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// Shared constructor for both pMC and standard (photon) databases
        /// </summary>
        /// <param name="virtualBoundaryType"></param>
        /// <param name="detectorInputs">List of IDetectorInputs designating binning</param>
        /// <param name="databaseInput">Database information needed for post-processing</param>
        private PhotonDatabasePostProcessor(
            VirtualBoundaryType virtualBoundaryType,
            IList <IDetectorInput> detectorInputs,
            SimulationInput databaseInput)
        {
            _rng = RandomNumberGeneratorFactory.GetRandomNumberGenerator(
                RandomNumberGeneratorType.MersenneTwister, -1); // -1 = random seed

            _virtualBoundaryType = virtualBoundaryType;

            _databaseInput = databaseInput;

            _tissue = Factories.TissueFactory.GetTissue(
                databaseInput.TissueInput,
                databaseInput.Options.AbsorptionWeightingType,
                databaseInput.Options.PhaseFunctionType,
                databaseInput.Options.RussianRouletteWeightThreshold);

            _detectors = DetectorFactory.GetDetectors(detectorInputs, _tissue, _rng);

            _detectorController = new DetectorController(_detectors);
        }
Exemplo n.º 15
0
 /// <summary>
 /// constructor for the collision info database writer
 /// </summary>
 /// <param name="virtualBoundaryType">virtual boundary type</param>
 /// <param name="filename">name of database filename</param>
 /// <param name="numberOfSubRegions">number of subregions in tissue</param>
 public CollisionInfoDatabaseWriter(VirtualBoundaryType virtualBoundaryType, string filename, int numberOfSubRegions)
     : base(filename, new CollisionInfoDatabase(numberOfSubRegions), new CollisionInfoSerializer(numberOfSubRegions))
 {
     VirtualBoundaryType = virtualBoundaryType;
 }
Exemplo n.º 16
0
 /// <summary>
 /// constructor for photon database writer
 /// </summary>
 /// <param name="virtualBoundaryType">virtual boundary type</param>
 /// <param name="filename">database filename</param>
 public PhotonDatabaseWriter(VirtualBoundaryType virtualBoundaryType, string filename)
     : base(filename, new PhotonDatabase(), new PhotonDataPointSerializer())
 {
     VirtualBoundaryType = virtualBoundaryType;
 }