Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/features.rst @ 1113:a588960a72e5 default tip
spelling
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Mon, 28 Oct 2024 09:23:08 +0100 |
parents | faf18bfe89a0 |
children |
rev | line source |
---|---|
0 | 1 Terminology of advanced features |
2 ================================ | |
3 | |
224
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
4 .. contents:: |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
5 :depth: 3 |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
6 |
0 | 7 .. _peers: |
8 | |
9 Peers | |
10 ----- | |
11 | |
12 An "Orthanc peer" is another instance of Orthanc, possibly running on | |
13 a remote computer. | |
14 | |
15 Contrarily to a "modality", it is possible to communicate with a peer | |
16 through the **HTTP/HTTPS protocol** (i.e. through the REST API of | |
17 Orthanc), and not through the DICOM protocol. This implies a much | |
18 easier configuration: It is only required to know the URL, the | |
19 username and the password to communicate with an Orthanc peer. This | |
20 contrasts with DICOM query/retrieve, that is quite complex and that | |
21 involves a lot of pitfalls (cf. the FAQ entry about :ref:`troubleshooting | |
22 DICOM communications <dicom>`) that can be bypassed if using HTTP. | |
23 | |
24 Furthermore, as HTTP(S) communications are generally not blocked by | |
25 firewalls (contrarily to the DICOM protocol that is inherently an | |
26 Intranet protocol and that often requires the setup of VPN tunnels), | |
27 it is much easier to setup communications of medical images through | |
218 | 28 the Internet with :ref:`Orthanc peers <peering>`. |
0 | 29 |
30 | |
31 .. _recycling: | |
32 | |
33 Recycling/Protection | |
34 -------------------- | |
35 | |
998 | 36 Because of its focus on low-end computers, Orthanc may implement **disk |
0 | 37 space recycling**: The patient that has been stored for the longest |
38 time inside Orthanc can be automatically deleted when the disk space | |
39 used by Orthanc grows above a threshold, or when the number of stored | |
40 patients grows above a threshold. This feature enables the automated | |
278 | 41 control of the disk space dedicated to Orthanc. Note that each time |
42 a new instance is received for an existing patient, the patient will | |
43 be marked as the most recent one in the recycling order. | |
0 | 44 |
45 Recycling is controlled by the ``MaximumStorageSize`` and the | |
46 ``MaximumPatientCount`` options in the :ref:`Orthanc configuration | |
106 | 47 file <configuration>`. Setting both these values to 0 will disable |
48 recycling. | |
0 | 49 |
998 | 50 Starting with version 1.11.2, Orthanc also implements another **rejection** |
51 behaviour when the ``MaximumStorageSize`` or ``MaximumPatientCount`` is | |
52 reached. In this case, patients are not recycled but Orthanc rejects new incoming | |
53 data. Check the ``MaximumStorageMode`` option in the :ref:`Orthanc configuration | |
54 file <configuration>`. | |
55 | |
0 | 56 It is possible to prevent important data from being automatically |
57 recycled. This mechanism is called **protection**. Each patient can be | |
58 individually protected against recycling by using the | |
59 ``Unprotected/Protected`` switch that is available from Orthanc | |
60 Explorer. | |
61 | |
62 Note that protection is only available at the patient level. It | |
63 protects all the studies/series/instances of the patient against | |
64 recycling. The rationale is that we think it is important to keep | |
65 available all the data related to one patient. Unwillingly losing a | |
66 study/series that is part of the same patient might lead to a loss in | |
67 consistency with respect to the medical history of this patient. | |
68 | |
998 | 69 To protect/unprotect a patient, one must call the ``/patients/../protected`` route:: |
70 | |
71 $ curl -X PUT http://localhost:8042/patients/0946fcb6-cf12ab43-bad958c1-bf057ad5-0fc6f54c/protected -d "1" | |
72 $ curl -X PUT http://localhost:8042/patients/0946fcb6-cf12ab43-bad958c1-bf057ad5-0fc6f54c/protected -d "0" | |
73 | |
871 | 74 |
0 | 75 .. _compression: |
76 | |
77 Compression | |
78 ----------- | |
79 | |
80 If your disk space is limited, besides :ref:`recycling`, you should | |
81 also consider using **disk space compression**. When compression is | |
82 enabled, Orthanc compresses the incoming DICOM instances on-the-fly | |
83 before writing them to the filesystem, using `zlib | |
25 | 84 <https://en.wikipedia.org/wiki/Zlib>`_. This is useful, because the |
0 | 85 images are often stored as raw, uncompressed arrays in DICOM |
86 instances: The size of a typical DICOM instance can hopefully be | |
87 divided by a factor 2 through lossless compression. This compression | |
88 process is transparent to the user, as Orthanc automatically | |
89 decompresses the file before sending it back to the external world. | |
90 | |
91 Compression is controlled by the ``StorageCompression`` option in the | |
92 :ref:`Orthanc configuration file <configuration>`. | |
78 | 93 |
908
34e9e5e3b609
OrthancRecoverCompressedFile
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
871
diff
changeset
|
94 Note that the Orthanc distribution comes with the |
34e9e5e3b609
OrthancRecoverCompressedFile
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
871
diff
changeset
|
95 ``OrthancRecoverCompressedFile`` command-line tool if a system |
34e9e5e3b609
OrthancRecoverCompressedFile
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
871
diff
changeset
|
96 administrator needs to recover one attachment compressed by Orthanc. |
34e9e5e3b609
OrthancRecoverCompressedFile
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
871
diff
changeset
|
97 |
78 | 98 |
99 .. _metadata: | |
100 | |
92 | 101 Metadata & attachments |
102 ---------------------- | |
78 | 103 |
104 Metadata consists in an **associative key-value array** (mapping a | |
105 integer key in the range [0,65535] to a string value) that is | |
106 associated with each :ref:`DICOM resource <orthanc-ids>` stored inside | |
107 Orthanc (may it be a patient, a study, a series or a DICOM | |
108 instance). Metadata can be either referred to using the integer key, | |
109 or using a symbolic name (if configured). Metadata records | |
110 information that is not readily available in the DICOM tags. | |
111 | |
112 In spirit, the metadata mechanism is similar to the :ref:`attachment | |
113 mechanism <orthanc-storage>`. However, metadata is stored directly | |
114 inside the database, whereas attachments are stored as separate files | |
115 on the filesystem (the database only stores a reference to the | |
632
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
116 attachments). Choosing between metadata and attachments is most often |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
117 a matter of trade-off: Metadata must be kept small (as a rule of |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
118 thumb, under 1KB) and used if fast access is needed, whereas |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
119 attachments can be used to store arbitrarily large piece of data. |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
120 |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
121 However, pay attention to the fact that metadata must be UTF-8 strings |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
122 terminated by the ``\0`` character. If you need to store arbitrary |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
123 binary objects, use an attachment or use `Base64 encoding |
38face2a84a4
metadata are utf-8 strings
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
622
diff
changeset
|
124 <https://en.wikipedia.org/wiki/Base64>`__. |
78 | 125 |
79 | 126 Also note that metadata and attachments are only available for |
127 resources stored inside Orthanc. Once one DICOM instance leaves the | |
128 Orthanc ecosystem, its associated metadata and attachments are lost. | |
129 | |
732
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
130 .. _metadata-core: |
78 | 131 |
132 Core metadata | |
133 ^^^^^^^^^^^^^ | |
134 | |
135 Here are the main metadata handled by the Orthanc core: | |
136 | |
137 * ``ReceptionDate`` records when a DICOM instance was received by | |
138 Orthanc. Similarly, ``LastUpdate`` records, for each | |
139 patient/study/series, the last time a DICOM instance was added to | |
946 | 140 this resource. Starting with Orthanc 1.12.1, ``LastUpdate`` is also |
141 updated when a child resource is deleted. | |
661
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
142 * ``RemoteAET`` records the AET of the modality that has sent some |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
143 DICOM instance to Orthanc using the DICOM protocol. |
78 | 144 * ``ModifiedFrom`` and ``AnonymizedFrom`` hold from which original |
145 resource, a resource was modified or anonymized. The presence of | |
146 this metadata indicates that the resource is the result of a | |
147 modification or anonymization that was carried on by Orthanc. | |
148 * ``Origin`` records through which mechanism the instance was received | |
149 by Orthanc (may be ``Unknown``, ``DicomProtocol``, ``RestApi``, | |
150 ``Plugins``, or ``Lua``). | |
151 * ``IndexInSeries`` records the expected index of a DICOM instance | |
152 inside its parent series. Conversely, ``ExpectedNumberOfInstances`` | |
153 associates to each series, the number of DICOM instances this series | |
661
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
154 is expected to contain. This information is :ref:`not always |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
155 available <series-completion>`. |
78 | 156 * Starting with Orthanc 1.2.0, ``TransferSyntax`` and ``SopClassUid`` |
732
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
157 respectively stores the `transfer syntax UID |
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
158 <http://dicom.nema.org/medical/dicom/current/output/html/part05.html#chapter_10>`__ |
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
159 and the `SOP class UID |
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
160 <http://dicom.nema.org/medical/dicom/current/output/chtml/part02/sect_A.1.html>`__ |
bfc31c51809f
download pdf and videos
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
681
diff
changeset
|
161 of DICOM instances, in order to speed up the access to this |
78 | 162 information. |
661
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
163 * ``RemoteIP`` (new in Orthanc 1.4.0): The IP address of the remote |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
164 SCU (for REST API and DICOM protocol). |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
165 * ``CalledAET`` (new in Orthanc 1.4.0): The AET that was called by the |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
166 SCU, which normally matches the AET of Orthanc (for DICOM protocol). |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
167 * ``HttpUsername`` (new in Orthanc 1.4.0): The username that created |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
168 the instance (for REST API). |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
169 * ``PixelDataOffset`` (new in Orthanc 1.9.1): Offset (in bytes) of the |
36bf58dfb7f7
added core metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
170 Pixel Data DICOM tag in the DICOM file, if available. |
839 | 171 * ``MainDicomTagsSignature`` (new in Orthanc 1.11.0): |
838 | 172 The list of :ref:`MainDicomTags <main-dicom-tags>` that have been |
173 saved in DB for this resource. | |
78 | 174 |
175 Metadata listed above are set privately by the Orthanc core. They are | |
176 **read-only** from the perspective of the end user, as Orthanc | |
177 internally relies on them. | |
178 | |
179 | |
180 User-defined metadata | |
181 ^^^^^^^^^^^^^^^^^^^^^ | |
182 | |
183 The metadata described above where handled by the core of Orthanc. | |
184 Orthanc users are however allowed to define their own **user-defined | |
185 metadata**. Such metadata are associated with an integer key that is | |
186 greater or equal to 1024 (whereas keys below 1023 are reserved for | |
187 core metadata). | |
188 | |
189 You can associate a symbolic name to user-defined metadata using the | |
190 ``UserMetadata`` option inside the :ref:`configuration of Orthanc | |
92 | 191 <configuration>`:: |
192 | |
193 "UserMetadata" : { | |
194 "SampleMetaData1" : 1024, | |
195 "SampleMetaData2" : 1025 | |
196 } | |
78 | 197 |
198 | |
199 Accessing metadata | |
200 ^^^^^^^^^^^^^^^^^^ | |
201 | |
202 .. highlight:: bash | |
203 | |
204 Metadata associated with one DICOM resource can be accessed through | |
80 | 205 the :ref:`REST API <rest>`, for instance:: |
78 | 206 |
207 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata | |
838 | 208 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata?expand |
78 | 209 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata/RemoteAet |
92 | 210 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata/SampleMetaData1 |
78 | 211 |
212 User-defined metadata can be modified by issuing a HTTP PUT against | |
213 the REST API:: | |
214 | |
215 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata/1024 -X PUT -d 'hello' | |
216 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/metadata/1024 | |
217 hello | |
218 | |
219 | |
220 | |
92 | 221 .. _attachments: |
222 | |
223 User-defined attachments | |
224 ^^^^^^^^^^^^^^^^^^^^^^^^ | |
225 | |
226 Orthanc users are allowed to define their own **user-defined attachments**. | |
227 Such attachments are associated with an integer key that is | |
228 greater or equal to 1024 (whereas keys below 1023 are reserved for | |
229 core attachments). | |
230 | |
231 You can associate a symbolic name to user-defined attachments using the | |
232 ``UserContentType`` option inside the :ref:`configuration of Orthanc | |
233 <configuration>`. Optionally, the user may specify a MIME content type | |
234 for the attachment:: | |
235 | |
236 "UserContentType" : { | |
237 "samplePdf" : [1024, "application/pdf"], | |
238 "sampleJson" : [1025, "application/json"], | |
239 "sampleRaw" : 1026 | |
240 } | |
241 | |
242 Accessing attachments | |
243 ^^^^^^^^^^^^^^^^^^^^^ | |
244 | |
245 .. highlight:: bash | |
246 | |
247 Attachments associated with one DICOM resource can be accessed through | |
248 the :ref:`REST API <rest>`, for instance:: | |
249 | |
250 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/attachments/samplePdf/data | |
251 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/attachments/sampleJson/data | |
252 | |
253 User-defined attachments can be modified by issuing a HTTP PUT against | |
254 the REST API:: | |
255 | |
256 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/attachments/samplePdf -X PUT --data-binary @sample.pdf | |
257 $ curl http://localhost:8042/instances/cb855110-5f4da420-ec9dc9cb-2af6a9bb-dcbd180e/attachments/sampleRaw -X PUT -d 'raw data' | |
660 | 258 |
259 | |
260 DICOM-as-JSON attachments | |
261 ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
262 | |
263 In the version of Orthanc <= 1.9.0, whenever Orthanc receives a DICOM | |
264 file, it pre-computes a JSON summary of its DICOM tags, and caches | |
265 this JSON file as an attachment to the DICOM instance (accessible at | |
266 the ``/instances/{...}/attachments/dicom-as-json/`` URI). This | |
1085 | 267 attachment is used as a cache to speed up future accesses to |
660 | 268 ``/instances/.../tags``, lookups using ``/tools/find`` or C-FIND |
269 queries. | |
270 | |
271 This caching might cause issues if the dictionary of DICOM tags is | |
272 subsequently modified, which implies that the cached JSON file does | |
273 not perfectly match the new dictionary. | |
274 | |
275 .. highlight:: bash | |
276 | |
277 Since Orthanc 1.2.0, you can force the re-generation of the cached | |
278 JSON file by DELETE-ing it, for instance:: | |
279 | |
280 $ curl -X DELETE http://localhost:8042/instances/301896f2-1416807b-3e05dcce-ff4ce9bb-a6138832/attachments/dicom-as-json | |
281 | |
282 .. highlight:: text | |
283 | |
284 The next time you open this particular instance with Orthanc Explorer, | |
285 you will see messages in the Orthanc logs (in verbose mode) stating | |
286 that the Orthanc server has reconstructed the JSON summary, which will | |
287 match the new content of the dictionary:: | |
288 | |
289 I0222 08:56:00.923070 FilesystemStorage.cpp:155] Reading attachment "2309c47b-1cbd-4601-89b5-1be1ad80382c" of "DICOM" content type | |
290 I0222 08:56:00.923394 ServerContext.cpp:401] Reconstructing the missing DICOM-as-JSON summary for instance: 301896f2-1416807b-3e05dcce-ff4ce9bb-a6138832 | |
291 I0222 08:56:00.929117 ServerContext.cpp:540] Adding attachment dicom-as-json to resource 301896f2-1416807b-3e05dcce-ff4ce9bb-a6138832 | |
292 I0222 08:56:00.929425 FilesystemStorage.cpp:118] Creating attachment "3c830b66-8a00-42f0-aa3a-5e37b4a8b5a4" of "JSON summary of DICOM" type (size: 1MB) | |
293 | |
294 These DICOM-as-JSON attachments are not automatically generated | |
1087 | 295 anymore starting with Orthanc 1.9.1. They can possibly be removed |
296 by the :ref:`Housekeeper plugin <housekeeper-plugin>` to reclaim disk space. | |
92 | 297 |
78 | 298 .. _registry: |
299 | |
300 Central registry of metadata and attachments | |
301 -------------------------------------------- | |
302 | |
303 Obviously, one must pay attention to the fact that different | |
304 applications might use the same key to store different user-defined | |
305 :ref:`metadata <metadata>`, which might result in incompatibilities | |
306 between such applications. Similarly, incompatibilities might show up | |
307 for user-defined :ref:`attachments <orthanc-storage>`. | |
308 | |
601
4c19a897803e
global property 5467
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
595
diff
changeset
|
309 Developers of applications/plugins that use user-defined metadata, |
4c19a897803e
global property 5467
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
595
diff
changeset
|
310 attachments or global properties (using |
4c19a897803e
global property 5467
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
595
diff
changeset
|
311 ``OrthancPluginSetGlobalProperty()``) are therefore kindly invited to |
4c19a897803e
global property 5467
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
595
diff
changeset
|
312 complete the **central registry** below: |
78 | 313 |
622
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
314 * ``Attachment 1`` is used by the core of Orthanc to store the DICOM |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
315 file associated with one instance. |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
316 * ``Attachment 2`` was used by Orthanc <= 1.9.0 to cache the so-called |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
317 ``DICOM-as-JSON`` information (as returned by the |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
318 ``/instances/.../tags`` URI in the :ref:`REST API <rest>`) in order |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
319 to speed up subsequent requests to the same URI. This attachment is |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
320 not automatically generated anymore starting with Orthanc 1.9.1, in |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
321 order to improve performance (creating two files for each DICOM |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
322 instance has a cost) and consistency (if the DICOM dictionary gets |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
323 modified in the future). |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
324 * ``Attachment 3`` is used since Orthanc 1.9.1 to store the DICOM |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
325 instance until the ``Pixel Data (7fe0,0010)`` tag, if the global |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
326 configuration option ``StorageCompression`` is ``true``, or if the |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
327 storage area plugin doesn't support range reads. This allows to |
debcf6b6d070
dicom-as-json is now deprecated
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
621
diff
changeset
|
328 avoid downloading the full DICOM instance if not necessary. |
969 | 329 * ``Attachment 4301`` is used by the :ref:`DICOMweb plugin <dicomweb>` to cache WADO-RS series metadata (starting from v 1.15 of the plugin). |
359 | 330 * ``Attachment 9997`` is used by the :ref:`Osimis WebViewer plugin <osimis_webviewer>` to store series information. |
331 * ``Attachment 9998`` is used by the :ref:`Osimis WebViewer plugin <osimis_webviewer>` to store instance information. | |
332 * ``Attachment 9999`` is used by the :ref:`Osimis WebViewer plugin <osimis_webviewer>` to store annotations. | |
333 * ``Attachments 10000-13999`` are used by the :ref:`Osimis WebViewer plugin <osimis_webviewer>` to store reduced quality images. | |
837
66ff2f30afcc
added new features from next upcoming Orthanc release
Alain Mazy <am@osimis.io>
parents:
750
diff
changeset
|
334 * ``Global property 1025`` is used by default by the Housekeeper plugin. |
601
4c19a897803e
global property 5467
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
595
diff
changeset
|
335 * ``Global property 5467`` is used by the Osimis Cloud plugin. |
602
6e7d3f20227b
index global property 5468
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
601
diff
changeset
|
336 * ``Global property 5468`` is used by the :ref:`DICOMweb plugin <dicomweb>` to store the DICOMweb servers into the Orthanc database. |
6e7d3f20227b
index global property 5468
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
601
diff
changeset
|
337 * ``Metadata 4200`` is used by the plugin for :ref:`whole-slide imaging <wsi>` with version <= 0.7. |
6e7d3f20227b
index global property 5468
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
601
diff
changeset
|
338 * ``Metadata 4201`` is used by the plugin for :ref:`whole-slide imaging <wsi>` with version >= 1.0. |
953
2038eb1f55bb
finalized ohif documentation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
946
diff
changeset
|
339 * ``Metadata 4202`` is used by the :ref:`OHIF plugin <ohif>` to store precomputed information about the DICOM instances. |
224
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
340 |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
341 |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
342 Jobs |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
343 ---- |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
344 |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
345 Check out the :ref:`advanced features of the REST API <jobs>`. |
02399e86f046
starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
346 |
642
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
347 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
348 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
349 .. _stable-resources: |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
350 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
351 Stable resources |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
352 ---------------- |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
353 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
354 A DICOM resource (patient, study or series) is referred to as |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
355 **stable** if it has not received any new instance for a certain |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
356 amount of time. |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
357 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
358 This amount of time is configured by the the option ``StableAge`` in |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
359 the :ref:`configuration file <configuration>`. |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
360 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
361 When some resource becomes stable, an event is generated as a log |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
362 entry in the ``/changes`` :ref:`URI in the REST API <changes>`, a |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
363 :ref:`Lua callback <lua-callbacks>` is invoked, the callback function |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
364 registered by ``OrthancPluginRegisterOnChangeCallback()`` in |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
365 :ref:`C/C++ plugins <creating-plugins>` is executed, as well as the |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
366 :ref:`Python callback <python-changes>` registered by |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
367 ``orthanc.RegisterOnChangeCallback()``. |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
368 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
369 The ``IsStable`` field is also available to get the status of an |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
370 individual patient/study/series using the REST API of Orthanc. |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
371 |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
372 In the multiple readers/writers scenario enabled since Orthanc 1.9.2, |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
373 each Orthanc server is considered separately: The "stable" information |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
374 is monitored by threads inside the Orthanc process, and is **not** |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
375 shared in the database. In other words, the "stable" information is |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
376 local to the Orthanc server that is queried. Synchronization between |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
377 multiple readers/writers must be implemented at a higher level |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
378 (e.g. using a distributed `message-broker system |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
379 <https://en.wikipedia.org/wiki/Message_broker>`__ such as RabbitMQ |
a76d83a00c68
definition of stable resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
632
diff
changeset
|
380 that is fed by an Orthanc plugin). |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
381 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
382 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
383 .. _revisions: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
384 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
385 Revisions |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
386 --------- |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
387 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
388 .. highlight:: bash |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
389 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
390 Higher-level applications built on the top of Orthanc might have to |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
391 modify metadata and/or attachments. This can cause concurrency |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
392 problems if multiple clients modify the same metadata/attachment |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
393 simultaneously. To avoid such problems, Orthanc implements a so-called |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
394 **revision mechanism** to protect from concurrent modifications. |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
395 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
396 The revision mechanism is optional, was introduced in **Orthanc |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
397 1.9.2** and must be enabled by setting :ref:`configuration option |
681
9c23356b9464
typo: replaced "CheckRevision" by "CheckRevisions"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
672
diff
changeset
|
398 <configuration>` ``CheckRevisions`` to ``true``. It is strongly |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
399 inspired by the `CouchDB API |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
400 <https://docs.couchdb.org/en/stable/api/document/common.html>`__. |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
401 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
402 When the revision mechanism is enabled, each metadata and attachment |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
403 is associated with a **revision number**. Whenever one sets a metadata |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
404 for the first time using a ``PUT`` query, this revision number can be |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
405 found in the HTTP header ``ETag`` that is reported by Orthanc:: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
406 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
407 $ curl -v http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/metadata/1024 -X PUT -d 'Hello' |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
408 [...] |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
409 < ETag: "0" |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
410 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
411 Any ``GET`` query will also return the current value of ``ETag``:: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
412 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
413 $ curl -v http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/metadata/1024 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
414 [...] |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
415 < ETag: "0" |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
416 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
417 If one needs to subsequently modify or delete this metadata, the HTTP |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
418 client must set this value of ``ETag`` into the ``If-Match`` HTTP |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
419 header:: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
420 |
645 | 421 $ curl -v http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/metadata/1024 -X PUT -d 'Hello 2' -H 'If-Match: "0"' |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
422 [...] |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
423 < ETag: "1" |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
424 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
425 Note how this second call has incremented the value of ``ETag``: This |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
426 is the new revision number to be used in future updates. If a bad |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
427 revision number is provided, the HTTP error ``409 Conflict`` is |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
428 generated:: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
429 |
645 | 430 $ curl -v http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/metadata/1024 -X PUT -d 'Hello 3' -H 'If-Match: "0"' |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
431 [...] |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
432 < HTTP/1.1 409 Conflict |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
433 |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
434 Such a ``409`` error must be handled by the higher-level |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
435 application. The revision number must similarly be given if deleting a |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
436 metadata/attachment:: |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
437 |
645 | 438 $ curl -v http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/metadata/1024 -X DELETE -H 'If-Match: "1"' |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
439 [...] |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
440 < HTTP/1.1 200 OK |
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
441 |
991
1316bc62b5d5
migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
969
diff
changeset
|
442 Check out the `OpenAPI reference <https://orthanc.uclouvain.be/api/>`__ |
645 | 443 of the REST API of Orthanc for more information. |
643
411e82bb3a9f
documenting revisions and multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
642
diff
changeset
|
444 |
936
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
445 **Warning:** The database index back-end must implement support for |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
446 revisions. As of writing, only the **PostgreSQL plugins** in versions |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
447 above 4.0 and the **ODBC plugins** implement support for revisions. |
672
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
448 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
449 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
450 Synchronous vs. asynchronous C-MOVE SCP |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
451 --------------------------------------- |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
452 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
453 The :ref:`C-MOVE SCP <dicom-move>` of Orthanc (i.e. the component of |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
454 the Orthanc server that is responsible for routing DICOM instances |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
455 from Orthanc to other modalities) can be configured to run either in |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
456 synchronous or in asynchronous mode, depending on the value of the |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
457 ``SynchronousCMove`` :ref:`configuration option <configuration>`: |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
458 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
459 * In **synchronous mode** (if ``SynchronousCMove`` is ``true``), |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
460 Orthanc will interleave its C-STORE SCU commands with the C-MOVE |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
461 instructions received from the remote modality. In other words, |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
462 Orthanc immediately sends the DICOM instances while it handles the |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
463 C-MOVE command from the remote modality. This mode is for |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
464 compatibility with simple DICOM client software that considers that |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
465 when its C-MOVE SCU is over, it should have received all the |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
466 instructed DICOM instances. This is the default behavior of Orthanc. |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
467 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
468 * In **asynchronous mode** (if ``SynchronousCMove`` is ``false``), |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
469 Orthanc will queue the C-MOVE instructions and :ref:`creates a job |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
470 <jobs-synchronicity>` that will issue the C-STORE SCU commands |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
471 afterward. This behavior is typically encountered in hospital-wide |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
472 PACS systems, but requires the client software to be more complex as |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
473 it must be handle the delay between its C-MOVE queries and the |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
474 actual reception of the DICOM instances through C-STORE. |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
475 |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
476 As a consequence, by setting ``SynchronousCMove`` to ``true``, Orthanc |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
477 can be used as a buffer that enables communications between a simple |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
478 C-MOVE client and a hospital-wide PACS. This can be interesting to |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
479 introduce compatibility with specialized image processing |
8bda16db46cf
SynchronousCMove: Synchronous vs. asynchronous C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
661
diff
changeset
|
480 applications. |
936
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
481 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
482 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
483 .. _labels: |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
484 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
485 Labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
486 ------ |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
487 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
488 .. highlight:: text |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
489 |
1000 | 490 Orthanc 1.12.0 introduced the concept of **labels**. A label is a |
936
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
491 string that can be attached to any DICOM resource (i.e. patients, |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
492 studies, series, or instances). In contrast with :ref:`metadata |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
493 <metadata>`, labels are not associated with a value, however labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
494 are **indexed in the Orthanc database** for efficient lookups. |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
495 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
496 Labels can notably be used as the building block to implement |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
497 **multi-tenancy**, which means that a single database could be shared |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
498 between different tenants that are distinguished by different labels. |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
499 This idea is illustrated by the :ref:`multitenant DICOM server |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
500 <multitenant-dicom>` sample plugin. A similar approach could be used |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
501 to implement Web interfaces that restrict the resources that are |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
502 accessible to some users by assigning labels to users. Labels are also |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
503 useful in **machine learning** (or deep learning) workflows to |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
504 separate DICOM resources belonging to the training set or to the |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
505 testing set. |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
506 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
507 The labels attached to one given DICOM resource can be read through |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
508 the REST API:: |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
509 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
510 $ curl http://localhost:8042/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
511 $ curl http://localhost:8042/series/3774320f-ccda46d8-69ee8641-9e791cbf-3ecbbcc6/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
512 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
513 $ curl http://localhost:8042/patients/ef9d77db-eb3b2bef-9b31fd3e-bf42ae46-dbdb0cc3/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
514 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
515 A label can be added to one DICOM resource using the PUT HTTP method, |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
516 and can be removed using the DELETE HTTP method:: |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
517 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
518 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
519 [] |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
520 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels/hello -X PUT -d '' |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
521 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
522 [ "hello" ] |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
523 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels/hello -X DELETE |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
524 $ curl http://localhost:8042/studies/66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e/labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
525 [] |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
526 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
527 The built-in :ref:`Orthanc Explorer <orthanc-explorer>` Web interface |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
528 can be used to display, add, and remove labels. |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
529 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
530 Once labels are set, the ``/tools/find`` :ref:`route of the REST API |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
531 <rest-find>` of Orthanc can be used to efficiently look for the DICOM |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
532 resources that are associated with given labels. This is done by |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
533 providing the set of labels of interest in the ``Labels`` field, as |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
534 illustrated in the following request:: |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
535 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
536 $ curl --request POST --url http://localhost:8042/tools/find \ |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
537 --data '{ |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
538 "Level" : "Study", |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
539 "Labels" : [ "hello" ], |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
540 "LabelsConstraint" : "All", |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
541 "Query" : { } |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
542 }' |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
543 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
544 The ``LabelsConstraint`` field can be used to control the request over |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
545 the labels. Its value can be ``All`` (to return the resources that are |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
546 associated with all the labels provided in the ``Labels`` field at |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
547 once), ``Any`` (to return the resources that are associated with at |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
548 least one of the labels provided in the ``Labels`` field), or ``None`` |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
549 (to return the resources that are associated with none of the labels |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
550 provided in the ``Labels`` field). If not provided, |
937 | 551 ``LabelsConstraint`` defaults to ``All``. Note that if there is only |
552 one label in the ``Labels`` field, both ``Any`` and ``All`` have the | |
553 same behavior. | |
936
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
554 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
555 |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
556 **Warning:** The database index back-end must implement support for |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
557 labels. As of writing, only the **PostgreSQL plugins** in versions |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
558 above 5.0 and the **MySQL plugins** in version above 5.0 implement |
5491953f7492
documentation of labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
908
diff
changeset
|
559 support for labels. |