---
title: "PACS Networking & DICOM Query/Retrieve"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{PACS Networking & DICOM Query/Retrieve}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

## Overview

`dicomtk` provides a tidyverse-friendly interface to DICOM networking (`dcmnet`, `dcmqrdb`, `dcmwlm`, `dcmtls`):
- `dicom_connect()`: Configure a remote DIMSE PACS peer, DICOMweb REST endpoint, or local PACS storage directory.
- `dicom_tls_config()`: Configure BCP 195 TLS transport security (`dcmtls`).
- `dicom_echo()`: Verify connectivity via DICOM Upper Layer `A-ASSOCIATE-RQ` + `C-ECHO-RQ`.
- `dicom_find()`: Query studies, series, or instances as a tidy `tibble`.
- `dicom_get()`: Retrieve matched DICOM files into a local directory.
- `dicom_send()` / `dicom_receive()`: Store and receive DICOM objects (`C-STORE`).
- `dicom_qrdb_index()` & `dicom_worklist()`: Local index database (`dcmqrdb`) and Modality Worklist (`dcmwlm`).

```{r workflow}
library(dicomtk)
library(dplyr)

dcm_file <- system.file("extdata", "example.dcm", package = "dicomtk")

# 1. Start a local PACS storage receiver (SCP directory)
pacs_dir <- tempfile("local_pacs_")
conn <- dicom_receive(pacs_dir, port = 11112, aetitle = "DICOMTK-SCP")
conn

# 2. Verify PACS connectivity
dicom_echo(conn)

# 3. Send DICOM file(s) to the PACS peer (C-STORE)
dicom_send(dcm_file, conn)

# 4. Query PACS studies with tidyverse piping and retrieve matching files
retrieved_files <- conn |>
  dicom_find(level = "STUDY") |>
  dicom_get()

retrieved_files

# 5. Build a local dcmqrdb index table
dicom_qrdb_index(pacs_dir) |>
  select(PatientID, Modality, Rows, Columns)
```
