Introduction¶
This document provides the draft documentation for a new data format of the SFCOMPO database - the world’s largest open database of destructive assay data for spent nuclear fuel. The database includes measurement data for over 750 fuel samples selected from fuel irradiated in 44 reactors of 8 types. The database provides descriptions of the measured fuel samples’ characteristics and operation histories and includes datasets of measured nuclide concentrations for over 60 nuclides, key actinides and fission products, which span needs and interests of a variety of nuclear science and engineering applications, including criticality safety, reactor physics, nuclide inventory, nuclear data, decay heat, and radiation shielding.
The SFCOMPO database is maintained and developed by the Organisation for Economic Co-operation and Development/Nuclear Energy Agency (OECD/NEA) and managed by the SFCOMPO Technical Review Group (TRG) by mandate from the OECD/NEA Nuclear Science Committee’s Working Party of Nuclear Criticality Safety. One of the primary missions of the SFCOMPO TRG is to perform peer-review assessment of the datasets in the database and develop high-quality benchmarks and benchmark models based on these data. Destructive assay measurement data are widely recognized as one of the most reliable bases for validating the computational tools and associated nuclear data applied for predicting nuclide inventories in irradiated nuclear fuel.
NOTE: The here presented data format is in DRAFT state and has not yet been approved by the SFCOMPO TRG.
The new SFCOMPO data format¶
The new SFCOMPO data format is designed to store geometries, material compositions, operating histories, and experimental information related to spent nuclear fuel.
The definitions of the new SFCOMPO data format are based on the principles and data structures of the Generalised Nuclear Data Structure (GNDS). This format has been developed by NEA expert communities as a specialised data format designed for organising, storing, and exchanging nuclear data. It utilises XML principles to ensure data is both human- and machine-readable, allowing users to define custom tags and structures for flexibility. XML, which stands for Extensible Markup Language, is a flexible and widely-used format for storing and transporting data. Designed to be both human-readable and machine-readable, XML enables users to define their own tags and document structure, making it ideal for a wide range of applications. By separating data from presentation, XML facilitates data sharing across different systems, platforms, and software. XML is commonly used in web development, configuration files, data exchange between applications, and more.
The new SFCOMPO format is built upon the GNDS standard. It also adheres to its writing format practice: type/class definitions are provided in so-called CamelCase and everything else in camelCase style. SFCOMPO adopts all GNDS data structures mentioned in Part I of the GNDS specifications, i.e. the GNDS standard data types. This includes basic data types; scalar, array and functional container nodes; uncertainties; and documentation nodes. Other parts of the GNDS format are specific to nuclear data needs and will not be adopted in the SFCOMPO data format. This results in a schema as depicted in Figure 2.1 below, where SFCOMPO builds upon Part I of GNDS and provides an additional set of format definitions for encoding used fuel inventories. The related data structures are discussed in the next sections.

Data structure definitions for XML and JSON¶
With the new data format, the SFCOMPO data can be provided both in both XML and JSON representation based on corresponding data strucuture definitions. These definitions are encoded in an XML schema definition file (XSD) and a JSON schema file.
Python support¶
The new SFCOMPO data format also comes with PYTHON 3 language support (required version>3.12) based on xsdata_pydantic.
SFCOMPO data can be read and validated with the help of the sfcompo-schema package which can be installed via pip install git+https://git.oecd-nea.org/sfcompo/sfcompo-data-format.
Minimal example:
from sfcompo_schema.sfcompo import SfcompoType
from xsdata_pydantic.bindings import XmlParser
import pandas as pd
import matplotlib.pyplot as plt
# Parse SFCOMPO data
parser = XmlParser()
data=parser.parse('index.xml',SfcompoType)
# Analyse reactor types represented within SFCOMPO:
reactorTypes=[]
for reactor in data.sfcompoReactor:
reactorTypes.append(reactor.typeSfcompo)
pd.Series(reactorTypes).value_counts(sort=False).plot(kind='pie')
plt.show()
