* Added docs with new screenshots * Added doc to architecture * Added documentations to various extension modules * Added more documentation to modes * Added docs to managers * Added docs for services * Fixed deployment docs * Added white labelling documentation * Added i18n docs and measurement export
112 lines
4.3 KiB
Markdown
112 lines
4.3 KiB
Markdown
# DICOM Metadata Store
|
|
|
|
|
|
## Overview
|
|
`DicomMetaDataStore` is the central location that stores the metadata in `OHIF-v3`. There
|
|
are several APIs to add study/series/instance metadata and also for getting from the store.
|
|
DataSource utilize the `DicomMetaDataStore` to add the retrieved metadata to `OHIF Viewer`.
|
|
|
|
> In `OHIF-v3` we have significantly changed the architecture of the metadata storage to
|
|
> provide a much cleaner way of handling metadata-related tasks and services. Classes such as
|
|
> `OHIFInstanceMetadata`, `OHIFSeriesMetadata` and `OHIFStudyMetadata` has been removed and
|
|
> replaced with `DicomMetaDataStore`.
|
|
>
|
|
|
|
|
|
## Events
|
|
There are two events that get publish in `DicomMetaDataStore`:
|
|
|
|
|
|
| Event | Description |
|
|
|-----------------|------------------------------------------------------------------------------------------------|
|
|
| SERIES_ADDED | Fires when all series of one study have added their summary metadata to the `DicomMetaDataStore` |
|
|
| INSTANCES_ADDED | Fires when all instances of one series have added their metadata to the `DicomMetaDataStore` |
|
|
|
|
|
|
## API
|
|
Let's find out about the public API for `DicomMetaDataStore` service.
|
|
|
|
- `EVENTS`: Object including the events mentioned above. You can subscribe to these events
|
|
by calling DicomMetaDataStore.subscribe(EVENTS.SERIES_ADDED, myFunction). [Read more about pub/sub pattern here](../pubsub.md)
|
|
|
|
- `addInstances(instances, madeInClient = false)`: adds the instances metadata to the store. madeInClient is explained in detail below. After
|
|
adding to the store it fires the EVENTS.INSTANCES_ADDED.
|
|
|
|
- `addSeriesMetadata(seriesSummaryMetadata, madeInClient = false)`: adds series summary metadata. After adding it fires EVENTS.SERIES_ADDED
|
|
|
|
- `addStudy(study)`: creates and add study-level metadata to the store.
|
|
|
|
- `getStudy(StudyInstanceUID)`: returns the study metadata from the store. It includes all the series and instance metadata in the requested study
|
|
|
|
- `getSeries(StudyInstanceUID, SeriesInstanceUID`: returns the series-level metadata for the requested study and series UIDs.
|
|
|
|
- `getInstance(StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID)`: returns the instance metadata based on the study, series and sop instanceUIDs.
|
|
|
|
- `geteInstanceFromImageId`: returns the instance metadata based on the requested imageId. It searches the store for the instance that has the same imageId.
|
|
|
|
|
|
|
|
### madeInClient
|
|
|
|
Since upon adding the metadata to the store, the relevant events are fired, and there are
|
|
other services that are subscribed to these events (`HangingProtocolService` or `DisplaySetService`), sometimes
|
|
we want to add instance metadata but don't want the events to get fired. For instance, when
|
|
you are caching the data for the next study in advance, you probably don't want to trigger hanging protocol
|
|
logic, so you set `madeInClient=true` to not fire events.
|
|
|
|
|
|
## Storage
|
|
As discussed before, there are several API that enables getting metadata from the store and adding to the store.
|
|
However, it is good to have an understanding of where they get
|
|
stored and in what format and hierarchy. `_model` is a private variable in the store
|
|
which holds all the metadata for all studies, series, and instances, and it looks like:
|
|
|
|
|
|
```js
|
|
// platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js
|
|
|
|
const _model = {
|
|
studies: [
|
|
{
|
|
/** Study Metadata **/
|
|
seriesLists: [
|
|
{
|
|
// Series in study from dicom web server 1 (or different backend 1)
|
|
series: [
|
|
{
|
|
// Series 1 Metadata
|
|
instances: [
|
|
{
|
|
// Instance 1 metadata of Series 1
|
|
},
|
|
{
|
|
// Instance 2 metadata of Series 1
|
|
},
|
|
/** Other instances metadata **/
|
|
],
|
|
},
|
|
{
|
|
// Series 2 Metadata
|
|
instances: [
|
|
{
|
|
// Instance 1 metadata of Series 2
|
|
},
|
|
{
|
|
// Instance 2 metadata of Series 1
|
|
},
|
|
/** Other instances metadata **/
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
// Series in study from dicom web server 2 (or different backend 2)
|
|
/** ... **/
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
|
|
```
|