111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.7 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 { wadouri } 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 =
 | 
						|
    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 }
 |