Timing Performance Evaluation of a Dual-Axis Rotational PET System According to NEMA NU 4-2008 Standards: A Simulation Study
收藏资源简介:
This repository contains the dataset used to identify easyPET.3D’s optimal performance based on NEMA standards. In addition, explores the impact of different CTWs on PET image quality by comparing simulated electronics capable of a 300 ps CTW with a 40 ns CTW The dataset is provided in the easyPET format, which includes: Header: Contains metadata about the acquisition, structured as a binary file. Version_binary, header, dates, otherinfo, acquisitionInfo, stringdata, systemConfigurations_info, energyfactor_info, peakMatrix_info The header is processed into a JSON format. e.g. systemConfigurations_info = np.fromfile(binary_file, dtype='|S1', count=size_systemConfigurations[0]* 2).astype('|U1')systemConfigurations_info = systemConfigurations_info.tolist()systemConfigurations_info = ''.join(systemConfigurations_info)systemConfigurations_info = json.loads(systemConfigurations_info) 7 or 8 arrays: stores the primary data. Motor angles, Detector IDs, Photon Energies and time of arrival number_of_arrays = 7 # or 8 for simulationsreading_data = np.fromfile(binary_file, dtype=[('stepbot', np.int16), ('steptop', np.int16), ('idA', np.int16), ('idB', np.int16), ('EA', np.int16), ('EB', np.int16), ('time', np.float64), ('time_b', np.float64)]) step_bot = round(header[1], 4) / header[2]step_top = round(header[3], 4) / header[4]topRange = header[5]listMode = np.zeros((len(reading_data["stepbot"]), number_of_arrays))listMode[:, 0] = reading_data["EA"] # energias AlistMode[:, 1] = reading_data["EB"] # energias BlistMode[:, 2] = reading_data["idA"] # id AlistMode[:, 3] = reading_data["idB"] # id bif open_files_to_join: # This dont change the data in the way to merge the acquisitions files in just one listMode[:, 4] = (reading_data["stepbot"]) # *2 # bot angle remove factor of 2 because it is already saved that way listMode[:, 5] = (reading_data["steptop"] ) # top_angleelse: listMode[:, 4] = (reading_data["stepbot"]) * step_bot #*2 # bot angle remove factor of 2 because it is already saved that way listMode[:, 5] = (reading_data["steptop"] * step_top - topRange / 2) # top_anglelistMode[:, 6] = reading_data["time"] # timeif Version_binary == "Version 3": listMode[:, 7] = reading_data["time_b"] # time 15 December ---> Resolution test6 December ----> Sensitivity
本仓库包含用于基于美国国家电气制造商协会(National Electrical Manufacturers Association,NEMA)标准验证easyPET.3D最优性能的数据集。此外,本数据集通过对比300皮秒(ps)与40纳秒(ns)的模拟电子学系统,探究了不同符合时间窗(Coincidence Time Window,CTW)对正电子发射断层成像(Positron Emission Tomography,PET)图像质量的影响。 本数据集采用easyPET格式存储,具体结构如下: 1. 头部文件:存储采集相关的元数据,以二进制文件格式组织,包含版本二进制标识、头部信息、采集日期、其他辅助信息、采集配置信息、字符串数据、系统配置信息、能量因子信息以及峰值矩阵信息。 头部文件可被转换为JSON格式,示例如下: python systemConfigurations_info = np.fromfile(binary_file, dtype='|S1', count=size_systemConfigurations[0]* 2).astype('|U1') systemConfigurations_info = systemConfigurations_info.tolist() systemConfigurations_info = ''.join(systemConfigurations_info) systemConfigurations_info = json.loads(systemConfigurations_info) 7或8个数据数组用于存储核心采集数据,包括电机角度、探测器ID、光子能量与光子到达时间。其中数据数组数量`number_of_arrays`取值为7(仿真场景下为8),核心数据读取代码如下: python reading_data = np.fromfile(binary_file, dtype=[('stepbot', np.int16), ('steptop', np.int16), ('idA', np.int16), ('idB', np.int16), ('EA', np.int16), ('EB', np.int16), ('time', np.float64), ('time_b', np.float64)]) 后续的数据处理代码如下: python step_bot = round(header[1], 4) / header[2] step_top = round(header[3], 4) / header[4] topRange = header[5] listMode = np.zeros((len(reading_data["stepbot"]), number_of_arrays)) # 赋值探测器A、B的光子能量 listMode[:, 0] = reading_data["EA"] listMode[:, 1] = reading_data["EB"] # 赋值探测器A、B的ID listMode[:, 2] = reading_data["idA"] listMode[:, 3] = reading_data["idB"] if open_files_to_join: # 合并采集文件时不改变原始数据 listMode[:, 4] = reading_data["stepbot"] listMode[:, 5] = reading_data["steptop"] else: # 修正电机底部角度,移除预设的倍率2 listMode[:, 4] = reading_data["stepbot"] * step_bot # 修正电机顶部角度,偏移至量程中点 listMode[:, 5] = reading_data["steptop"] * step_top - topRange / 2 # 赋值光子到达时间 listMode[:, 6] = reading_data["time"] # 若为Version 3格式,则额外赋值备用时间字段 if Version_binary == "Version 3": listMode[:, 7] = reading_data["time_b"] 12月15日对应分辨率测试,12月6日对应灵敏度测试。



