Materials Compendium¶
In this tutorial, we will access data from the “Compendium of Material Composition Data for Radiation Transport Modeling” provided by the Pacific Northwest National Laboratory (PNNL). This data contains material properties, including material density, atom density, elemental and isotopic compositions provided as weight, atom fraction, and atom density. The data file is intended for radiation transport modeling and can be used with various radiation transport codes.
Accessing the Materials Compendium¶
To access the data from the Materials Compendium, we will use the MaterialsCompendium
module from materials_compendium
. First, let’s import the required modules and see how many materials are in the compendium:
from materials_compendium import MaterialsCompendium
# Get the number of materials in the Compendium
num_materials = len(MaterialsCompendium)
print("Number of materials in the Compendium:", num_materials)
# Get the name of the first material
first_material_name = MaterialsCompendium[0].Name
print("First material name:", first_material_name)
# Get the number of elements in the first material
num_elements_in_first_material = len(MaterialsCompendium[0].Elements)
print("Number of elements in the first material:", num_elements_in_first_material)
Number of materials in the Compendium: 411
First material name: Bone Equivalent Plastic, B-110
Number of elements in the first material: 6
Creating a Material Object¶
To work with the material data more conveniently, PyNE provides a Material
class. We can create a Material object from a material in the Compendium. The Material
class allows us to access various properties and data associated with the material.
from materials_compendium.utils import Material
# Create a Material object from the first material in the Compendium
material_obj = Material(MaterialsCompendium[0])
# Print the basic information about the material
print("Material object:")
print(material_obj)
print("-"*50)
# Print the complete properties of the material
print("Complete material properties:")
print(material_obj.get_all())
Material object:
Material Name: Bone Equivalent Plastic, B-110
Formula: None
Density: 1.785
--------------------------------------------------
Complete material properties:
Material Name: Bone Equivalent Plastic, B-110
Acronym: B-110
Formula: None
Density: 1.785
Material Atom Density: 0.09797999999999998
Elements: H, C, N, O, F, Ca
Mat Num: 33
Material Weight: 0.000000
Comments:
The above density is estimated to be accurate to 3 significant digits. Uncertainties are not addressed.
The carbon fraction was adjusted from 0.3672 to 0.3673 to provide normalization to 1
Source: PNNL
Verification Notes:
References: Density and weight fractions in J. J. Spokas and D. R. White, A Conducting Plastic Simulating Cortical Bone at https://iopscience.iop.org/article/10.1088/0031-9155/27/1/012/pdf; with the carbon fraction adjusted from 0.3672 to 0.3673 to provide normalization to 1
Contact:
Name: Rebecca Detwiler
Phone: 352-484-4040
Email: Rebecca.Detwiler@pnnl.gov
Accessing Element and Isotope Information¶
The Material class is integrated with other classes, such as ElementInfo
and IsotopeInfo
, to provide more detailed information about elements and isotopes present in the material.
# Get information about all elements in the material
elements_info = material_obj.get_elements()
print("Elements information:")
print(elements_info)
Elements information:
Index: 0
Element: H
ZAID: 1000
Isotopes:H1, H2
Index: 1
Element: C
ZAID: 6000
Isotopes:C12, C13
Index: 2
Element: N
ZAID: 7000
Isotopes:N14, N15
Index: 3
Element: O
ZAID: 8000
Isotopes:O16, O17, O18
Index: 4
Element: F
ZAID: 9000
Isotopes:F19
Index: 5
Element: Ca
ZAID: 20000
Isotopes:Ca40, Ca42, Ca43, Ca44, Ca46, Ca48
# Get complete information about the first isotope of the first element in the material
isotope_info = material_obj.elements[0].isotopes[0].get_all()
print("Complete information of the first isotope of the first element:")
print(isotope_info)
Complete information of the first isotope of the first element:
Isotope: H1
ZAID: 1001
Weight Percent: 0.999736
Weight Fraction (Whole): 0.0354906363733931
Isotopic Weight Fraction (Whole): 0.9997362358702283
Weight Fraction: 0.035491
Abundance: 0.999885
Isotopic Atom Density: 0.037855
Atomic Number (Whole): 1
Atom Fraction: 0.386351
Atomic Number: 1
Isotopic Weight Fraction: 0.999736
Relative Atomic Mass: 1.007825
Relative Atomic Mass (Whole): 1.00782503223
Isotopic Atom Fraction: 0.999885
Abundance (Whole): 0.999885
Isotopic Atom Fraction (Whole): 0.999885
Atom Fraction (Whole): 0.386350546172812
Isotopic Atom Density (Whole): 0.0378545221546933
Accessing Materials by Name, Formula, or Acronym¶
We can also access specific materials directly from the Compendium using their names, formulas, or acronyms using the from_name
, from_formula
, and from_acronym
functions.
mat2 = Material.from_name("Liquid")
Material 'Liquid' not found. Did you mean:
Water, Liquid
It appears that the compendium does not contain information specifically about “Liquid” material. However, it does provide suggestions for related materials. Let’s explore one of the suggested materials instead.
mat2 = Material.from_name("Water, Liquid")
print(mat2)
Material Name: Water, Liquid
Formula: H2O
Density: 0.997
We can also try to access a material by its chemical formula.
mat3 = Material.from_formula("UO2")
print(mat3)
Material Name: Uranium Dioxide
Formula: UO2
Density: 10.96
To get more specific data, we can use get_[something]
functions. For example:
print(mat3.get_comment())
print(mat3.get_source())
['CAS # 1344-57-6', 'Uranium isotopics assumed for LEU: Wt% U234/235/236/238 = 0.0267/3.0/0.0138/96.9595.']
BNL/ORNL
Advanced Example:¶
As an advanced example, we can find materials that contain a specific isotope (e.g., U-235) in their compositions.
# Define the isotope you want to search for
target_isotope = "U235"
# Create an empty list to store the names of materials containing the target isotope
materials_with_isotope = []
# Loop through each material entry in the Compendium
for material in MaterialsCompendium:
# Check if the target isotope is present in the material's isotopes
for element in material.Elements:
for isotope in element.Isotopes:
if isotope.Isotope == target_isotope:
# If the isotope is found in the material, add the material name to the list
materials_with_isotope.append(material.Name)
# Print the material names containing the target isotope
print("Materials containing", target_isotope)
for material in materials_with_isotope:
print(material)
Materials containing U235
Uranium Trioxide
Uranium Dicarbide
Uranium Hydride
Uranium Oxide
Uranium Nitride
Uranium Tetrafluoride
Uranium Dioxide
Uranium Carbide
Uranium Hexafluoride
Uranyl Fluoride
Uranyl Nitrate
Conclusion¶
In this tutorial, we learned how to access and utilize data from the Materials Compendium. With this information, you can perform various analyses and simulations related to radiation transport modeling. PyNE provides powerful tools to extract and manipulate material properties, which can be valuable for researchers and engineers working in the field of nuclear and radiation engineering.