Module: SOP Class Handler
An extension can register a SOP Class Handler Module by
defining a getSopClassHandlerModule
method. The SOP Class
Handler is a bit different from the other modules, as it doesn't provide a 1:1
schema for UI or provide it's own components. It instead defines:
sopClassUIDs
: an array of string SOP Class UIDs that thegetDisplaySetFromSeries
method should be applied to.getDisplaySetFromSeries
: a method that maps series and study metadata to a display set
A displaySet
has the following shape:
return { plugin: 'html', Modality: 'SR', displaySetInstanceUID: 0, wadoRoot: study.getData().wadoRoot, wadoUri: instance.getData().wadouri, SOPInstanceUID: instance.getSOPInstanceUID(), SeriesInstanceUID: series.getSeriesInstanceUID(), StudyInstanceUID: study.getStudyInstanceUID(), authorizationHeaders,};
Where the plugin
key is used to influence the default ViewportComponent
for
rendering the displaySet
. Additional properties are passed to the
ViewportComponent
and used by the default StudyBrowser
to render
"thumbnails" for each displaySet
#
Example SOP Class Handler Moduleconst SOP_CLASS_UIDS = { BASIC_TEXT_SR: '1.2.840.10008.5.1.4.1.1.88.11', ENHANCED_SR: '1.2.840.10008.5.1.4.1.1.88.22',};
export default { id: 'example-sop-class-handler-module',
/** * @param {object} params * @param {ServicesManager} params.servicesManager * @param {CommandsManager} params.commandsManager */getSopClassHandlerModule({ servicesManager, commandsManager }) { return { id: 'OHIFDicomHtmlSopClassHandler', sopClassUIDs: Object.values(SOP_CLASS_UIDS),
/** * @param {object} series - * @param {object} study - * @param {object} dicomWebClient - * @param {object} authorizationHeaders - */ getDisplaySetFromSeries(series, study, dicomWebClient, authorizationHeaders) { const instance = series.getFirstInstance();
return { plugin: 'html', displaySetInstanceUID: 0, wadoRoot: study.getData().wadoRoot, wadoUri: instance.getData().wadouri, SOPInstanceUID: instance.getSOPInstanceUID(), SeriesInstanceUID: series.getSeriesInstanceUID(), StudyInstanceUID: study.getStudyInstanceUID(), authorizationHeaders, }; }, }};
#
More examples :@ohif/viewer
usage#
We use the sopClassHandlerModule
s in three different places:
ViewerLocalFileData.js
ViewerRetrieveStudyData.js
StandaloneRouting.js
Each time, it is used to map study and series data to displaySets
. It does
this by working alongside the StudyMetadataManager
in @ohif/core
. That
manager has the method createDisplaySets
that takes an array of
sopClassHandlerModules
.