All files / packages/core/src/utilities isValidVolume.ts

0% Statements 0/9
0% Branches 0/6
0% Functions 0/2
0% Lines 0/9

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                                                                                                                       
import { metaData } from '..';
import isEqual from './isEqual';
 
/**
 * Checks if the given imageIds form a valid volume. A volume is considered valid if all imageIds
 * have the same series instance UID, modality, columns, rows, image orientation patient, and pixel
 * spacing.
 *
 * @param imageIds - The imageIds to check.
 * @returns true if the imageIds form a valid volume, false otherwise.
 */
function isValidVolume(imageIds: string[]): boolean {
  const imageId0 = imageIds[0];
 
  const { modality, seriesInstanceUID } = metaData.get(
    'generalSeriesModule',
    imageId0
  );
 
  const {
    imageOrientationPatient,
    pixelSpacing,
    frameOfReferenceUID,
    columns,
    rows,
  } = metaData.get('imagePlaneModule', imageId0);
 
  const baseMetadata = {
    modality,
    imageOrientationPatient,
    pixelSpacing,
    frameOfReferenceUID,
    columns,
    rows,
    seriesInstanceUID,
  };
 
  const validVolume = imageIds.every((imageId) => {
    const { modality, seriesInstanceUID } = metaData.get(
      'generalSeriesModule',
      imageId
    );
    const { imageOrientationPatient, pixelSpacing, columns, rows } =
      metaData.get('imagePlaneModule', imageId);
 
    return (
      seriesInstanceUID === baseMetadata.seriesInstanceUID &&
      modality === baseMetadata.modality &&
      columns === baseMetadata.columns &&
      rows === baseMetadata.rows &&
      isEqual(imageOrientationPatient, baseMetadata.imageOrientationPatient) &&
      isEqual(pixelSpacing, baseMetadata.pixelSpacing)
    );
  });
 
  return validVolume;
}
 
export { isValidVolume };