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 asOHIFInstanceMetadata
,OHIFSeriesMetadata
andOHIFStudyMetadata
has been removed and replaced withDicomMetaDataStore
.
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 hereaddInstances(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_ADDEDaddStudy(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 studygetSeries(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:
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)
/** ... **/
},
],
},
],
}