# LLNL D4DCT Datasets: Dynamic 4DCT Datasets using MPM-based Deformation Dynamic computed tomography (DCT) refers to reconstruction of moving or non-rigid objects over time while x-ray projections are acquired over a range of angles. The measured x-ray sinogram data represents a time-varying sequence of dynamic scenes, where a small angular range of the sinogram will correspond to a static or quasi-static scene, depending on the amount of motion or deformation as well as the system setup. The reconstruction of DCT is widely applicable to the study of object deformation and dynamics in a number of industrial and clinical applications (e.g., heart CT). In the material science and additive manufacturing applications, the DCT capabilities aid in the study of damage evolution due to dynamic thermal loads and mechanical stresses over time which provides crucial information about their overall performance and safety. We provide two dynamic CT datasets (D4DCT-DFM, D4DCT-AFN) where the sinogram data represent a time-varying object deformation to demonstrate damage evolution due to several mechanical stresses (compression). The provided datasets enable training and evaluation of the data driven machine learning methods for DCT reconstruction. To build the datasets, we used Material Point Method (MPM)-based methods to simulate deformation of objects under mechanical loading, and then simulated CT sinogram data using Livermore Tomography Tools (LTT). For more information about deformation simulation and the dataset, see LLNL_D4DCT_Datasets.pdf ## Directory and File Structure D4DCT-DFM refers to a dataset representing dynamic 4DCT of material deformation whereas D4DCT-AFN is a dataset representing dynamic 4DCT of affine transformation. In each dataset, there are 157 subdirectories with 4 csv files containing training and test samples. The sub directory name is formatted as S[s]-[m] where s: shape type, m: mechanical loading type. Each subdir contains 20 different data samples, each of which has 1) ground truth volume sequence (10 frames: gt_f[000-009].raw), 2) D4DCT sinogram (sn.raw) and 3) its FBP reconstruction (fbp.raw). The file prefix in each data sample is formatted as: [data index] _ [volume dimension=detector row size] _ [angular range] _ [# view projections]. The entire dataset uses 80^3 voxel grid as ground truth data and the number of projections is 90. We used two angular ranges: 180 and 720. Among 20 data samples in each subdir, 10 data samples were generated from an angular range of 180 degrees whereas the other 10 data samples were generated from an angular range of 720 degrees. ## Training and Test Split We split the entire dataset into training and test samples based on two criterions: shape type and mechanical loading type. In the first criterion based on the shape type, 03 and 04 types are used for evaluation while the remaining types are used for training. The second criterion is based on the mechanical loading, and the samples with 2 mechanical loading points are used for training while the ones with 4 mechanical loading points (700) are used for evaluation. The 4 csv files in each dataset contain a list of training and test data samples. train_test_list_shape_080_180_090.csv: train/test split based on shape type for the angular range of 180 degs train_test_list_shape_080_720_090.csv: train/test split based on shape type for the angular range of 720 degs train_test_list_mload_080_180_090.csv: train/test split based on mechanical loading type for the angular range of 180 degs train_test_list_mload_080_720_090.csv: train/test split based on mechanical loading type for the angular range of 720 degs ## How to Read The ground truth, FBP and the sinogram data are stored in a 3D raw format which can be read using python numpy. The sinogram dimension is [80,90,80], z slice count, # projections, detector row size, respectively. The volume dimension is [80,80,80]. Below is an example to read sinogram and ground truth volume files using numpy: import numpy as np sinogram = np.fromfile("09_080_180_090_sn.raw", dtype=np.float32).reshape((80,90,80)) volume_seq1 = np.fromfile("09_080_180_090_gt_f000.raw", dtype=np.float32).reshape((80,80,80)) volume_seq2 = np.fromfile("09_080_180_090_gt_f001.raw", dtype=np.float32).reshape((80,80,80)) ... ## Version Info 2020.11 (version for 80^3 volume data) ## Authors Hyojin Kim, Jingu Kang, Kyle Champley, Rushil Anirudh, Aditya Mohan Lawrence Livermore National Laboratory Contact [Hyojin Kim](hkim@llnl.gov) for further questions. LLNL-MI-816695