PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
test_data_generator.h
Go to the documentation of this file.
1
9#pragma once
10
12
13#include <atomic>
14#include <cstdint>
15#include <filesystem>
16#include <string>
17#include <string_view>
18#include <vector>
19
20namespace kcenon::pacs::samples {
21
22// ============================================================================
23// Data Structures
24// ============================================================================
25
30 std::string patient_id{"PAT001"};
31 std::string patient_name{"DOE^JOHN"};
32 std::string birth_date{"19800101"};
33 std::string sex{"M"};
34};
35
39struct study_info {
40 std::string study_uid;
41 std::string study_date;
42 std::string study_time;
43 std::string accession_number;
44 std::string description;
46};
47
52 uint16_t rows{512};
53 uint16_t columns{512};
54 uint16_t bits_allocated{16};
55 uint16_t bits_stored{12};
56 uint16_t high_bit{11};
57 uint16_t pixel_representation{0}; // 0 = unsigned, 1 = signed
58 std::string modality{"CT"};
59 std::string photometric{"MONOCHROME2"};
60 double window_center{40.0};
61 double window_width{400.0};
62};
63
64// ============================================================================
65// Test Data Generator
66// ============================================================================
67
95public:
96 // ========================================================================
97 // Single Dataset Generation
98 // ========================================================================
99
106 [[nodiscard]] static auto create_ct_dataset(
107 const patient_info& patient = {},
108 const image_params& params = {}) -> core::dicom_dataset;
109
116 [[nodiscard]] static auto create_mr_dataset(
117 const patient_info& patient = {},
118 image_params params = {}) -> core::dicom_dataset;
119
126 [[nodiscard]] static auto create_cr_dataset(
127 const patient_info& patient = {},
128 image_params params = {}) -> core::dicom_dataset;
129
136 [[nodiscard]] static auto create_dx_dataset(
137 const patient_info& patient = {},
138 image_params params = {}) -> core::dicom_dataset;
139
140 // ========================================================================
141 // Study Generation
142 // ========================================================================
143
152 [[nodiscard]] static auto create_study(
153 const patient_info& patient,
154 const study_info& study,
155 int series_count = 1,
156 int instances_per_series = 5) -> std::vector<core::dicom_dataset>;
157
158 // ========================================================================
159 // File Operations
160 // ========================================================================
161
170 static void save_to_directory(
171 const std::vector<core::dicom_dataset>& datasets,
172 const std::filesystem::path& directory);
173
174 // ========================================================================
175 // UID Generation
176 // ========================================================================
177
186 [[nodiscard]] static auto generate_uid(
187 std::string_view root = "1.2.410.200001.1.1") -> std::string;
188
189 // ========================================================================
190 // Date/Time Utilities
191 // ========================================================================
192
197 [[nodiscard]] static auto current_date() -> std::string;
198
203 [[nodiscard]] static auto current_time() -> std::string;
204
205private:
212 [[nodiscard]] static auto create_base_dataset(
213 const patient_info& patient,
214 const image_params& params) -> core::dicom_dataset;
215
223 [[nodiscard]] static auto generate_pixel_data(
224 uint16_t rows,
225 uint16_t columns,
226 uint16_t bits_allocated) -> std::vector<uint8_t>;
227
229 static std::atomic<uint64_t> uid_counter_;
230};
231
232} // namespace kcenon::pacs::samples
Represents a DICOM Dataset (ordered collection of Data Elements)
static void save_to_directory(const std::vector< core::dicom_dataset > &datasets, const std::filesystem::path &directory)
Save datasets to a directory structure.
static auto create_mr_dataset(const patient_info &patient={}, image_params params={}) -> core::dicom_dataset
Create an MR dataset with default or custom parameters.
static auto current_date() -> std::string
Get current date in DICOM format (YYYYMMDD)
static auto create_cr_dataset(const patient_info &patient={}, image_params params={}) -> core::dicom_dataset
Create a CR (Computed Radiography) dataset.
static auto generate_pixel_data(uint16_t rows, uint16_t columns, uint16_t bits_allocated) -> std::vector< uint8_t >
Generate test pixel data.
static std::atomic< uint64_t > uid_counter_
Atomic counter for UID generation.
static auto create_dx_dataset(const patient_info &patient={}, image_params params={}) -> core::dicom_dataset
Create a DX (Digital X-Ray) dataset.
static auto generate_uid(std::string_view root="1.2.410.200001.1.1") -> std::string
Generate a unique DICOM UID.
static auto current_time() -> std::string
Get current time in DICOM format (HHMMSS.FFFFFF)
static auto create_study(const patient_info &patient, const study_info &study, int series_count=1, int instances_per_series=5) -> std::vector< core::dicom_dataset >
Generate a complete study with multiple series and instances.
static auto create_base_dataset(const patient_info &patient, const image_params &params) -> core::dicom_dataset
Create a base dataset with common elements.
static auto create_ct_dataset(const patient_info &patient={}, const image_params &params={}) -> core::dicom_dataset
Create a CT dataset with default or custom parameters.
DICOM Dataset - ordered collection of Data Elements.
Image parameters for test data generation.
Patient information for test data generation.
Study information for test data generation.