Re IDC #2604: show series (with unsupported modalities) on slides panel and on tag explorer (#2621)

* Re IDC #2604: show series (with unsupported modalities) on slides panel and on tag explorer
This commit is contained in:
Davide Punzo authored and GitHub committed 2021-11-30 15:15:51 +01:00
1 parent 460fdeb534
commit 65505d9bce
8 files changed
+232 -131

No files matched your search

@@ -1,6 +1,5 @@
import { ReconstructionIssues } from './../enums.js';
/**
* Checks if a series is reconstructable to a 3D volume.
*
@@ -78,7 +77,9 @@ function processSingleframe(instances) {
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESDIMENSIONS);
} else if (SamplesPerPixel !== firstImageSamplesPerPixel) {
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESCOMPONENTS);
} else if (!_isSameArray(ImageOrientationPatient, firstImageOrientationPatient)) {
} else if (
!_isSameArray(ImageOrientationPatient, firstImageOrientationPatient)
) {
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESORIENTATION);
}
@@ -92,7 +93,10 @@ function processSingleframe(instances) {
reconstructionIssues.push(ReconstructionIssues.DATASET_4D);
}
return { value: reconstructionIssues.length === 0 ? true : false, reconstructionIssues };
return {
value: reconstructionIssues.length === 0 ? true : false,
reconstructionIssues,
};
}
/**
@@ -116,14 +120,12 @@ function isSpacingUniform(instances, datasetIs4D) {
// If spacing is on a uniform grid but we are missing frames,
// Allow reconstruction, but pass back the number of missing frames.
if (n > 2) {
const lastIpp = instances[n - 1].getData().metadata
.ImagePositionPatient;
const lastIpp = instances[n - 1].getData().metadata.ImagePositionPatient;
// We can't reconstruct if we are missing ImagePositionPatient values
if (firstImagePositionPatient && lastIpp) {
const averageSpacingBetweenFrames =
_getPerpendicularDistance(firstImagePositionPatient, lastIpp) /
(n - 1);
_getPerpendicularDistance(firstImagePositionPatient, lastIpp) / (n - 1);
let previousImagePositionPatient = firstImagePositionPatient;
@@ -136,7 +138,7 @@ function isSpacingUniform(instances, datasetIs4D) {
previousImagePositionPatient
);
if (datasetIs4D && spacingBetweenFrames < 1.e-3) {
if (datasetIs4D && spacingBetweenFrames < 1e-3) {
// the dataset is 4D, if the distance is zero, means that we are
// checking the 4th dimension. Do not return, since we want still to
// check the 3rd dimension spacing.
@@ -164,10 +166,13 @@ function isSpacingUniform(instances, datasetIs4D) {
}
}
return { isUniform: reconstructionIssues.length === 0 ? true : false, missingFrames, reconstructionIssues };
return {
isUniform: reconstructionIssues.length === 0 ? true : false,
missingFrames,
reconstructionIssues,
};
}
/**
* Check if 4D dataset.
*
@@ -181,7 +186,7 @@ function isSpacingUniform(instances, datasetIs4D) {
*
* @returns {boolean} dataset4D value.
*/
function _isDataset4D(instances) {
function _isDataset4D(instances) {
const n = instances.length;
for (let ii = 0; ii < n; ++ii) {
const instanceMetadataControl = instances[ii].getData().metadata;
@@ -204,7 +209,12 @@ function isSpacingUniform(instances, datasetIs4D) {
continue;
}
if (_isSameArray(instanceMetadataControl.ImagePositionPatient, instanceMetadata.ImagePositionPatient)) {
if (
_isSameArray(
instanceMetadataControl.ImagePositionPatient,
instanceMetadata.ImagePositionPatient
)
) {
return true;
}
}
@@ -265,11 +275,11 @@ function _getSpacingIssue(spacing, averageSpacing) {
function _getPerpendicularDistance(a, b) {
return Math.sqrt(
Math.pow(a[0] - b[0], 2) +
Math.pow(a[1] - b[1], 2) +
Math.pow(a[2] - b[2], 2)
Math.pow(a[1] - b[1], 2) +
Math.pow(a[2] - b[2], 2)
);
}
const constructableModalities = ['MR', 'CT', 'PT', 'NM'];
export {isDisplaySetReconstructable, isSpacingUniform};
export { isDisplaySetReconstructable, isSpacingUniform };