All files / extensions/cornerstone-dicom-sr/src/utils createReferencedImageDisplaySet.ts

77.77% Statements 28/36
14.28% Branches 1/7
80% Functions 4/5
77.14% Lines 27/35

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    34x   34x 2x 2x 2x     117x             34x 1x 1x 1x 2x 2x     2x       2x 2x         2x 2x   1x                     34x 1x   1x                 1x 1x   1x       1x                                         1x   1x        
import { DisplaySetService, classes } from '@ohif/core';
 
const ImageSet = classes.ImageSet;
 
const findInstance = (measurement, displaySetService: DisplaySetService) => {
  const { displaySetInstanceUID, ReferencedSOPInstanceUID: sopUid } = measurement;
  const referencedDisplaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
  Iif (!referencedDisplaySet.images) {
    return;
  }
  return referencedDisplaySet.images.find(it => it.SOPInstanceUID === sopUid);
};
 
/** Finds references to display sets inside the measurements
 * contained within the provided display set.
 * @return an array of instances referenced.
 */
const findReferencedInstances = (displaySetService: DisplaySetService, displaySet) => {
  const instances = [];
  const instanceById = {};
  for (const measurement of displaySet.measurements) {
    const { imageId } = measurement;
    Iif (!imageId) {
      continue;
    }
    Iif (instanceById[imageId]) {
      continue;
    }
 
    const instance = findInstance(measurement, displaySetService);
    Iif (!instance) {
      console.log('Measurement', measurement, 'had no instances found');
      continue;
    }
 
    instanceById[imageId] = instance;
    instances.push(instance);
  }
  return instances;
};
 
/**
 * Creates a new display set containing a single image instance for each
 * referenced image.
 *
 * @param displaySetService
 * @param displaySet - containing measurements referencing images.
 * @returns A new (registered/active) display set containing the referenced images
 */
const createReferencedImageDisplaySet = (displaySetService, displaySet) => {
  const instances = findReferencedInstances(displaySetService, displaySet);
  // This will be a  member function of the created image set
  const updateInstances = function () {
    this.images.splice(
      0,
      this.images.length,
      ...findReferencedInstances(displaySetService, displaySet)
    );
    this.numImageFrames = this.images.length;
  };
 
  const imageSet = new ImageSet(instances);
  const instance = instances[0];
 
  Iif (!instance) {
    return;
  }
 
  imageSet.setAttributes({
    displaySetInstanceUID: imageSet.uid, // create a local alias for the imageSet UID
    SeriesDate: instance.SeriesDate,
    SeriesTime: instance.SeriesTime,
    SeriesInstanceUID: imageSet.uid,
    StudyInstanceUID: instance.StudyInstanceUID,
    SeriesNumber: instance.SeriesNumber || 0,
    SOPClassUID: instance.SOPClassUID,
    SeriesDescription: `${displaySet.SeriesDescription} KO ${displaySet.instance.SeriesNumber}`,
    Modality: 'KO',
    isMultiFrame: false,
    numImageFrames: instances.length,
    SOPClassHandlerId: `@ohif/extension-default.sopClassHandlerModule.stack`,
    isReconstructable: false,
    // This object is made of multiple instances from other series
    isCompositeStack: true,
    madeInClient: true,
    excludeFromThumbnailBrowser: true,
    updateInstances,
  });
 
  displaySetService.addDisplaySets(imageSet);
 
  return imageSet;
};
 
export default createReferencedImageDisplaySet;