irc_web/.svn/pristine/01/01ae951c0d7deff39e8920a9f1c...

112 lines
3.8 KiB
Plaintext

/* eslint-disable no-unused-vars */
import dcmjs from 'dcmjs'
import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv'
import { getPTImageIdInstanceMetadata } from './getPTImageIdInstanceMetadata'
import { utilities } from '@cornerstonejs/core'
// import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'
import ptScalingMetaDataProvider from './ptScalingMetaDataProvider'
import getPixelSpacingInformation from './getPixelSpacingInformation'
import { convertMultiframeImageIds, prefetchMetadataInformation } from './convertMultiframeImageIds'
import removeInvalidTags from './removeInvalidTags'
const { calibratedPixelSpacingMetadataProvider } = utilities
function parseImageId(imageId) {
// build a url by parsing out the url scheme and frame index from the imageId
const firstColonIndex = imageId.indexOf(':')
let url = imageId.substring(firstColonIndex + 1)
const frameIndex = url.indexOf('frame=')
let frame
if (frameIndex !== -1) {
const frameStr = url.substr(frameIndex + 6)
frame = parseInt(frameStr, 10)
url = url.substr(0, frameIndex - 1)
}
return {
scheme: imageId.substr(0, firstColonIndex),
url,
frame
}
}
async function createImageIdsAndCacheMetaData({
modality,
imageIds
}) {
await prefetchMetadataInformation(imageIds)
imageIds = convertMultiframeImageIds(imageIds)
imageIds.forEach((imageId) => {
const parseImage = parseImageId(imageId)
const imageData =
cornerstoneDICOMImageLoader.wadouri.dataSetCacheManager.get(parseImage.url)
const arrayBuffer = imageData.byteArray.buffer
var dicomData = dcmjs.data.DicomMessage.readFile(arrayBuffer)
var dataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(
dicomData.dict
)
dataset._meta = dcmjs.data.DicomMetaDictionary.namifyDataset(
dicomData.meta
)
var instanceMetaData = dataset
instanceMetaData = removeInvalidTags(instanceMetaData)
if (instanceMetaData) {
const pixelSpacing = getPixelSpacingInformation(instanceMetaData)
if (pixelSpacing) {
calibratedPixelSpacingMetadataProvider.add(
imageId,
// pixelSpacing.map((s) => parseFloat(s))
{ rowPixelSpacing: parseFloat(pixelSpacing[0]),
columnPixelSpacing: parseFloat(pixelSpacing[1])
}
)
}
}
})
if (modality === 'PT') {
const InstanceMetadataArray = []
imageIds.forEach((imageId) => {
// var parseImage = parseImageId(imageId)
// imageId,
const instanceMetadata = getPTImageIdInstanceMetadata(imageId)
if (typeof instanceMetadata.CorrectedImage === 'string') {
instanceMetadata.CorrectedImage =
instanceMetadata.CorrectedImage.split('\\')
}
if (instanceMetadata) {
InstanceMetadataArray.push(instanceMetadata)
}
})
if (InstanceMetadataArray.length) {
// const suvScalingFactors = calculateSUVScalingFactors(
// InstanceMetadataArray
// )
// InstanceMetadataArray.forEach((instanceMetadata, index) => {
// ptScalingMetaDataProvider.addInstance(
// imageIds[index],
// suvScalingFactors[index]
// )
// })
try {
const suvScalingFactors = calculateSUVScalingFactors(
InstanceMetadataArray
)
InstanceMetadataArray.forEach((instanceMetadata, index) => {
ptScalingMetaDataProvider.addInstance(
imageIds[index],
suvScalingFactors[index]
)
})
} catch (error) {
console.log(error)
}
}
}
return imageIds
}
export { createImageIdsAndCacheMetaData }