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
13#ifndef PACS_INTEGRATION_TESTS_TEST_DATA_GENERATOR_HPP
14#define PACS_INTEGRATION_TESTS_TEST_DATA_GENERATOR_HPP
15
20
21#include <cstdint>
22#include <string>
23#include <vector>
24
26
27// =============================================================================
28// Forward Declarations and Types
29// =============================================================================
30
43
51 std::string patient_id;
52 std::string patient_name;
53 std::string study_uid;
54 std::vector<core::dicom_dataset> datasets;
55
61 [[nodiscard]] std::vector<core::dicom_dataset>
62 get_by_modality(const std::string& modality) const;
63
68 [[nodiscard]] size_t series_count() const;
69};
70
71// =============================================================================
72// Test Data Generator Class
73// =============================================================================
74
95public:
96 // =========================================================================
97 // Single Modality Generators
98 // =========================================================================
99
105 [[nodiscard]] static core::dicom_dataset ct(const std::string& study_uid = "");
106
112 [[nodiscard]] static core::dicom_dataset mr(const std::string& study_uid = "");
113
119 [[nodiscard]] static core::dicom_dataset xa(const std::string& study_uid = "");
120
126 [[nodiscard]] static core::dicom_dataset us(const std::string& study_uid = "");
127
128 // =========================================================================
129 // Multi-frame Generators
130 // =========================================================================
131
138 [[nodiscard]] static core::dicom_dataset xa_cine(
139 uint32_t frames = 30,
140 const std::string& study_uid = "");
141
148 [[nodiscard]] static core::dicom_dataset us_cine(
149 uint32_t frames = 60,
150 const std::string& study_uid = "");
151
158 [[nodiscard]] static core::dicom_dataset enhanced_ct(
159 uint32_t frames = 100,
160 const std::string& study_uid = "");
161
168 [[nodiscard]] static core::dicom_dataset enhanced_mr(
169 uint32_t frames = 50,
170 const std::string& study_uid = "");
171
172 // =========================================================================
173 // Clinical Workflow Generators
174 // =========================================================================
175
186 [[nodiscard]] static multi_modal_study patient_journey(
187 const std::string& patient_id,
188 const std::vector<std::string>& modalities = {"CT", "MR", "XA"});
189
196 [[nodiscard]] static core::dicom_dataset worklist(
197 const std::string& patient_id = "",
198 const std::string& modality = "CT");
199
200 // =========================================================================
201 // Edge Case Generators
202 // =========================================================================
203
213 [[nodiscard]] static core::dicom_dataset large(size_t target_size_mb);
214
223 [[nodiscard]] static core::dicom_dataset unicode();
224
234 [[nodiscard]] static core::dicom_dataset with_private_tags(
235 const std::string& creator_id = "TEST PRIVATE CREATOR");
236
246 [[nodiscard]] static core::dicom_dataset invalid(invalid_dataset_type type);
247
248 // =========================================================================
249 // Utility Functions
250 // =========================================================================
251
257 [[nodiscard]] static std::string generate_uid(
258 const std::string& root = "1.2.826.0.1.3680043.9.9999");
259
264 [[nodiscard]] static std::string current_date();
265
270 [[nodiscard]] static std::string current_time();
271
272private:
276 static void add_patient_module(
278 const std::string& patient_name,
279 const std::string& patient_id,
280 const std::string& birth_date = "19800101",
281 const std::string& sex = "M");
282
286 static void add_study_module(
288 const std::string& study_uid,
289 const std::string& accession_number,
290 const std::string& study_id,
291 const std::string& description);
292
296 static void add_series_module(
298 const std::string& series_uid,
299 const std::string& modality,
300 const std::string& series_number,
301 const std::string& description);
302
306 static void add_image_pixel_module(
308 uint16_t rows,
309 uint16_t columns,
310 uint16_t bits_allocated,
311 uint16_t bits_stored,
312 uint16_t samples_per_pixel = 1,
313 const std::string& photometric = "MONOCHROME2");
314
318 static void add_pixel_data(
320 uint16_t rows,
321 uint16_t columns,
322 uint16_t bits_allocated,
323 uint16_t samples_per_pixel = 1,
324 uint16_t fill_value = 512);
325
329 static void add_multiframe_pixel_data(
331 uint16_t rows,
332 uint16_t columns,
333 uint16_t bits_allocated,
334 uint32_t num_frames,
335 uint16_t samples_per_pixel = 1);
336};
337
338} // namespace kcenon::pacs::integration_test
339
340#endif // PACS_INTEGRATION_TESTS_TEST_DATA_GENERATOR_HPP
Comprehensive DICOM test data generator.
static void add_series_module(core::dicom_dataset &ds, const std::string &series_uid, const std::string &modality, const std::string &series_number, const std::string &description)
Add common series module attributes.
static core::dicom_dataset us_cine(uint32_t frames=60, const std::string &study_uid="")
Generate a multi-frame US cine dataset.
static core::dicom_dataset invalid(invalid_dataset_type type)
Generate an intentionally invalid dataset.
static std::string generate_uid(const std::string &root="1.2.826.0.1.3680043.9.9999")
Generate a unique UID for testing.
static void add_multiframe_pixel_data(core::dicom_dataset &ds, uint16_t rows, uint16_t columns, uint16_t bits_allocated, uint32_t num_frames, uint16_t samples_per_pixel=1)
Generate pixel data for multi-frame image.
static core::dicom_dataset large(size_t target_size_mb)
Generate a large dataset for stress testing.
static void add_study_module(core::dicom_dataset &ds, const std::string &study_uid, const std::string &accession_number, const std::string &study_id, const std::string &description)
Add common study module attributes.
static core::dicom_dataset worklist(const std::string &patient_id="", const std::string &modality="CT")
Generate a worklist item dataset.
static core::dicom_dataset mr(const std::string &study_uid="")
Generate an MR Image dataset.
static core::dicom_dataset enhanced_ct(uint32_t frames=100, const std::string &study_uid="")
Generate an Enhanced CT multi-frame dataset.
static multi_modal_study patient_journey(const std::string &patient_id, const std::vector< std::string > &modalities={"CT", "MR", "XA"})
Generate a complete multi-modal patient study.
static void add_pixel_data(core::dicom_dataset &ds, uint16_t rows, uint16_t columns, uint16_t bits_allocated, uint16_t samples_per_pixel=1, uint16_t fill_value=512)
Generate pixel data for single-frame image.
static core::dicom_dataset unicode()
Generate a dataset with Unicode patient names.
static core::dicom_dataset ct(const std::string &study_uid="")
Generate a CT Image dataset.
static void add_image_pixel_module(core::dicom_dataset &ds, uint16_t rows, uint16_t columns, uint16_t bits_allocated, uint16_t bits_stored, uint16_t samples_per_pixel=1, const std::string &photometric="MONOCHROME2")
Add common image pixel module attributes.
static core::dicom_dataset enhanced_mr(uint32_t frames=50, const std::string &study_uid="")
Generate an Enhanced MR multi-frame dataset.
static core::dicom_dataset us(const std::string &study_uid="")
Generate a single-frame US Image dataset.
static core::dicom_dataset xa(const std::string &study_uid="")
Generate a single-frame XA Image dataset.
static core::dicom_dataset with_private_tags(const std::string &creator_id="TEST PRIVATE CREATOR")
Generate a dataset with private tags.
static void add_patient_module(core::dicom_dataset &ds, const std::string &patient_name, const std::string &patient_id, const std::string &birth_date="19800101", const std::string &sex="M")
Add common patient module attributes.
static std::string current_time()
Get current time in DICOM TM format (HHMMSS)
static std::string current_date()
Get current date in DICOM DA format (YYYYMMDD)
static core::dicom_dataset xa_cine(uint32_t frames=30, const std::string &study_uid="")
Generate a multi-frame XA cine dataset.
DICOM Dataset - ordered collection of Data Elements.
Compile-time constants for commonly used DICOM tags.
invalid_dataset_type
Types of invalid datasets for error testing.
@ oversized_value
Value exceeds VR length limit.
@ missing_study_instance_uid
Missing Study Instance UID.
Represents a complete patient study with multiple modalities.
std::vector< core::dicom_dataset > get_by_modality(const std::string &modality) const
Get datasets filtered by modality.
std::vector< core::dicom_dataset > datasets
All datasets in study.
size_t series_count() const
Get total number of series in study.
Ultrasound Image Storage SOP Classes.
X-Ray Angiographic (XA) Image Storage SOP Classes.