Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | 34x 34x 34x 34x 34x 34x 34x 2026x 3039x 3039x 2026x 1074x 1074x 34x 1625x 1625x 38093x 38093x 38093x 2026x 34x 133x 133x 133x 133x 131x 94x 2x 2x 2x 94x 94x 94x 2x 2x 1x 47x 1x | import { DicomMetadataStore, classes } from '@ohif/core'; import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv'; import getPTImageIdInstanceMetadata from './getPTImageIdInstanceMetadata'; import { registerHangingProtocolAttributes } from './hangingprotocols'; const metadataProvider = classes.MetadataProvider; /** * * @param {Object} servicesManager * @param {Object} configuration */ export default function init({ servicesManager, configuration = {}, commandsManager, }: withAppTypes): void { const { toolbarService, cineService, viewportGridService } = servicesManager.services; toolbarService.registerEventForToolbarUpdate(cineService, [ cineService.EVENTS.CINE_STATE_CHANGED, ]); // Add DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.INSTANCES_ADDED, handlePETImageMetadata); // If the metadata for PET has changed by the user (e.g. manually changing the PatientWeight) // we need to recalculate the SUV Scaling Factors DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.SERIES_UPDATED, handlePETImageMetadata); // Adds extra custom attributes for use by hanging protocols registerHangingProtocolAttributes({ servicesManager }); // Function to process and subscribe to events for a given set of commands and listeners const subscribeToEvents = listeners => { Object.entries(listeners).forEach(([event, commands]) => { const supportedEvents = [ viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, viewportGridService.EVENTS.VIEWPORTS_READY, ]; if (supportedEvents.includes(event)) { viewportGridService.subscribe(event, eventData => { const viewportId = eventData?.viewportId ?? viewportGridService.getActiveViewportId(); commandsManager.run(commands, { viewportId }); }); } }); }; toolbarService.subscribe(toolbarService.EVENTS.TOOL_BAR_MODIFIED, state => { const { buttons } = state; for (const [id, button] of Object.entries(buttons)) { const { groupId, items, listeners } = button.props || {}; // Handle group items' listeners Iif (groupId && items) { items.forEach(item => { Iif (item.listeners) { subscribeToEvents(item.listeners); } }); } // Handle button listeners if (listeners) { subscribeToEvents(listeners); } } }); } const handlePETImageMetadata = ({ SeriesInstanceUID, StudyInstanceUID }) => { const { instances } = DicomMetadataStore.getSeries(StudyInstanceUID, SeriesInstanceUID); Iif (!instances?.length) { return; } const modality = instances[0].Modality; if (!modality || modality !== 'PT') { return; } const imageIds = instances.map(instance => instance.imageId); const instanceMetadataArray = []; // try except block to prevent errors when the metadata is not correct try { imageIds.forEach(imageId => { const instanceMetadata = getPTImageIdInstanceMetadata(imageId); if (instanceMetadata) { instanceMetadataArray.push(instanceMetadata); } }); Iif (!instanceMetadataArray.length) { return; } const suvScalingFactors = calculateSUVScalingFactors(instanceMetadataArray); instanceMetadataArray.forEach((instanceMetadata, index) => { metadataProvider.addCustomMetadata( imageIds[index], 'scalingModule', suvScalingFactors[index] ); }); } catch (error) { console.log(error); } }; |