ohif-viewer/docs/latest/services/data/DicomMetadataStore.md
Alireza 5643f8f6d2
feat: Added documentation for OHIF-v3 (#2450)
* 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
2021-06-15 11:15:29 -04:00

4.3 KiB

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

  • 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:

// 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)
          /** ... **/
        },
      ],
    },
  ],
}