/// <summary> /// Set the absorbers and the scatterer for the specified tissue type /// </summary> /// <param name="tissueType">Tissue type</param> private void SetPredefinedTissueDefinitions(TissueType tissueType) // this data should be in XML { TissueType = tissueType; Absorbers = TissueProvider.CreateAbsorbers(tissueType); Scatterer = TissueProvider.CreateScatterer(tissueType); N = 1.4; }
/// <summary> /// Sets the values for the first prefactor, the first exponent, the second prefactor and the second exponent for the given tissue type /// Skin: 1.2, 1.42, 0.0, 0.0 /// Breast (pre-menopause): 0.67, 0.95, 0.0, 0.0 /// Breast (post-menopause): 0.72, 0.58, 0.0, 0.0 /// Brain (white matter): 3.56, 0.84, 0.0, 0.0 /// Brain (grey matter): 0.56, 1.36, 0.0, 0.0 /// Liver: 0.84, 0.55, 0.0, 0.0 /// Custom: 1.0, 0.1, 0.0, 0.0 /// </summary> /// <param name="tissueType">Tissue type</param> public void SetTissueType(TissueType tissueType) { switch (tissueType) { case (TissueType.Skin): A = 1.2; B = 1.42; C = 0.0; D = 0.0; break; case TissueType.BreastPreMenopause: A = 0.67; B = 0.95; C = 0.0; D = 0.0; break; case TissueType.BreastPostMenopause: A = 0.72; B = 0.58; C = 0.0; D = 0.0; break; case (TissueType.BrainWhiteMatter): A = 3.56; B = 0.84; C = 0.0; D = 0.0; break; case (TissueType.BrainGrayMatter): A = 0.56; B = 1.36; C = 0.0; D = 0.0; break; case (TissueType.Liver): A = 0.84; B = 0.55; C = 0.0; D = 0.0; break; case (TissueType.Custom): A = 1; B = 0.1; C = 0.0; D = 0.0; break; default: throw new ArgumentOutOfRangeException("tissueType"); } }
/// <summary> /// Sends a cell to a randomly-selected type-specific tissue. /// </summary> /// <param name="cell">The cell to be sent to another tissue.</param> /// <param name="tissueType">The type of destination tissue.</param> protected void SendCellToRandomTissue(Cell cell, TissueType tissueType) { var typeAddresses = from address in addressList where (address.Value == tissueType) select address.Key; var typeCount = typeAddresses.Count(); if (typeCount > 0) { int randIx = RandGen.Next(0, typeCount); SendCell(cell, typeAddresses.ElementAt(randIx)); } }
/// <summary> /// Sets the scatterer type for the specified tissue type /// </summary> /// <param name="tissueType">Tissue type</param> public static IScatterer CreateScatterer(TissueType tissueType) { switch (tissueType) { case TissueType.Skin: case TissueType.Liver: case TissueType.BrainWhiteMatter: case TissueType.BrainGrayMatter: case TissueType.BreastPreMenopause: case TissueType.BreastPostMenopause: case TissueType.Custom: return(new PowerLawScatterer(tissueType)); case TissueType.IntralipidPhantom: return(new IntralipidScatterer()); case TissueType.PolystyreneSpherePhantom: return(new MieScatterer()); default: throw new ArgumentOutOfRangeException("tissueType"); } }
/// <summary> /// Creates a power law scatterer using the specified tissue type /// </summary> /// <param name="tissueType">The tissue type as defined by the Enum <see cref="Vts.TissueType">TissueType</see></param> public PowerLawScatterer(TissueType tissueType) { SetTissueType(tissueType); }
public AddressNotification(Address address, TissueType tissueType, NotifyReason reason) { Address = address; TissueType = tissueType; Reason = reason; }
/// <summary> /// Creates a tissue with the specified tissue type /// </summary> /// <param name="tissueType">Tissue type</param> public Tissue(TissueType tissueType) { TissueType = tissueType; SetPredefinedTissueDefinitions(tissueType); Name = tissueType.ToString(); }
/// <summary> /// Creates standard templates lists of absorbers for the specified tissue type /// </summary> /// <param name="tissueType">Tissue type</param> public static IChromophoreAbsorber[] CreateAbsorbers(TissueType tissueType) { // todo: this should come from a file... var defaultAbsorberDictionary = new Dictionary <TissueType, Dictionary <ChromophoreType, double> > { //ref: Meglinski, Matcher, Computer Methods and Programs in Biomedicine 70, 2003, 179-186. { TissueType.Skin, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 28.4 }, { ChromophoreType.HbO2, 22.4 }, { ChromophoreType.H2O, 0.7 }, { ChromophoreType.Fat, 0.0 }, { ChromophoreType.Melanin, 0.0051 }, } }, { TissueType.BreastPreMenopause, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 6.9 }, { ChromophoreType.HbO2, 19.6 }, { ChromophoreType.H2O, 0.345 }, { ChromophoreType.Fat, 0.41 }, } }, { TissueType.BreastPostMenopause, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 3.75 }, { ChromophoreType.HbO2, 11.25 }, { ChromophoreType.H2O, 0.205 }, { ChromophoreType.Fat, 0.585 }, } }, { TissueType.BrainWhiteMatter, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 24 }, { ChromophoreType.HbO2, 56 }, { ChromophoreType.H2O, 0.80 }, { ChromophoreType.Fat, 0.12 }, } }, { TissueType.BrainGrayMatter, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 24 }, { ChromophoreType.HbO2, 56 }, { ChromophoreType.H2O, 0.80 }, { ChromophoreType.Fat, 0.12 }, } }, { TissueType.Liver, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 66 }, { ChromophoreType.HbO2, 124 }, { ChromophoreType.H2O, 0.87 }, { ChromophoreType.Fat, 0.02 }, } }, { TissueType.IntralipidPhantom, new Dictionary <ChromophoreType, double> { { ChromophoreType.Nigrosin, 0.01 } } }, { TissueType.PolystyreneSpherePhantom, new Dictionary <ChromophoreType, double> { { ChromophoreType.Nigrosin, 0.01 } } }, { TissueType.Custom, new Dictionary <ChromophoreType, double> { { ChromophoreType.Hb, 20 }, { ChromophoreType.HbO2, 20 }, { ChromophoreType.H2O, 0.0 }, { ChromophoreType.Fat, 0.0 }, { ChromophoreType.Melanin, 0.0 }, } } }; var absorbers = defaultAbsorberDictionary[tissueType] .Select(kvp => new ChromophoreAbsorber(kvp.Key, kvp.Value)) .ToArray(); return(absorbers); }
public Tissue(TissueType type) { Type = type; }
public Tissue(TissueType type) { Type = type; }
/// <summary> /// Sends a cell to a randomly-selected type-specific tissue. /// </summary> /// <param name="cell">The cell to be sent to another tissue.</param> /// <param name="tissueType">The type of destination tissue.</param> protected void SendCellToRandomTissue(Cell cell, TissueType tissueType) { var typeAddresses = from address in addressList where (address.Value == tissueType) select address.Key; var typeCount = typeAddresses.Count(); if (typeCount > 0) { int randIx = RandGen.Next(0, typeCount); SendCell(cell, typeAddresses.ElementAt(randIx)); } }
public AddressNotification(Address address, TissueType tissueType, NotifyReason reason) { Address = address; TissueType = tissueType; Reason = reason; }