Beispiel #1
0
        /// <summary>Looks at a residue type and copies properties from the base type if one was specified.</summary>
        /// <param name="residueType">The residue to examine and change</param>
        private ResidueType FillDerived(ResidueType residueType)
        {
            ResidueType baseType = null;

            if (residueType.derived_from != null)
            {
                baseType = ResidueType.Find(type => StringUtilities.StringsAreEqual(type.fom_type, residueType.derived_from));
                if (baseType != null)
                {
                    baseType = FillDerived(baseType); // Make sure the base residue type has itself been filled
                }
            }
            if (baseType != null)
            {
                residueType = (ResidueType)ReflectionUtilities.Clone(residueType);
                if (residueType.fraction_C == 0)
                {
                    residueType.fraction_C = baseType.fraction_C;
                }
                if (residueType.po4ppm == 0)
                {
                    residueType.po4ppm = baseType.po4ppm;
                }
                if (residueType.nh4ppm == 0)
                {
                    residueType.nh4ppm = baseType.nh4ppm;
                }
                if (residueType.no3ppm == 0)
                {
                    residueType.no3ppm = baseType.no3ppm;
                }
                if (residueType.specific_area == 0)
                {
                    residueType.specific_area = baseType.specific_area;
                }
                if (residueType.pot_decomp_rate == 0)
                {
                    residueType.pot_decomp_rate = baseType.pot_decomp_rate;
                }
                if (residueType.cf_contrib == 0)
                {
                    residueType.cf_contrib = baseType.cf_contrib;
                }
                if (residueType.fr_c == null)
                {
                    residueType.fr_c = (double[])baseType.fr_c.Clone();
                }
                if (residueType.fr_n == null)
                {
                    residueType.fr_n = (double[])baseType.fr_n.Clone();
                }
                if (residueType.fr_p == null)
                {
                    residueType.fr_p = (double[])baseType.fr_p.Clone();
                }
            }
            return(residueType);
        }
Beispiel #2
0
 /// <summary>Gets a specific residue type. Throws if not found.</summary>
 /// <param name="name">The name of the residue type to find</param>
 public ResidueType GetResidueType(string name)
 {
     if (ResidueType != null)
     {
         ResidueType residueType = ResidueType.Find(type => StringUtilities.StringsAreEqual(type.fom_type, name));
         if (residueType != null)
         {
             return(FillDerived(residueType));
         }
     }
     throw new Exception($"Could not find residue type '{name}'");
 }