|
PACS System 0.1.0
PACS DICOM system library
|
27 SOP classes covering the major clinical workflows: CT, MR, US, XA, NM, PET, RT, SR (Structured Report), SEG (Segmentation), MG (Mammography), CR (Computed Radiography), SC (Secondary Capture), Patient/Study Root Q/R, Modality Worklist, MPPS, Storage Commitment, Print, UPS, PIR, XDS-I.b. See README for the full list.
Derive from services::sop_class_base, register the UID with sop_class_registry, and implement the service callbacks. Existing SOP class implementations in sources/services/ serve as templates.
Implement a codec that satisfies the codec_interface — encode() produces encoded bytes from pixel data, decode() reverses it. Register via codec_registry::add(uid, factory). The existing JPEG, JPEG 2000, HTJ2K, JPEG-LS, and RLE codecs show the pattern.
During association negotiation, the SCU proposes all supported transfer syntaxes per presentation context. The SCP picks one it can handle. If there's no overlap, the presentation context is rejected and the SCU must either convert on the fly (see dcm_conv) or abort.
Set tls_enabled = true in the association config and provide certificate paths:
See examples/secure_dicom/ for a full working example.
Yes — audit events are emitted via logger_system's structured log sinks. Every C-STORE, C-FIND, C-MOVE, and login event produces a structured record suitable for SIEM ingestion.
echo_scu (simplest) before attempting store or query.Yes — pacs_system ships with pacs_web library supporting WADO-RS (retrieve), STOW-RS (store), and QIDO-RS (query) via the Crow REST framework. See the pacs_web/ module.
PACS_WITH_AWS_SDK)PACS_WITH_AZURE_SDK)file_storage with write-behind buffering).network_system settings).docs/performance/ for benchmark data.pacs_ai provides an ai_service_connector that forwards DICOM objects to an AI endpoint and receives results as SR (Structured Report) or SEG (Segmentation) objects. The results are then stored alongside the source objects and made retrievable via Q/R.
pacs_system's test suite includes DCMTK interop tests that verify wire-level compatibility with the reference DCMTK implementation. Run ctest -R dcmtk to execute them. For formal conformance, use a third-party validator like DVTk.