* Re IDC #2604: show series (with unsupported modalities) on slides panel and on tag explorer
This commit is contained in:
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 };
|
||||
Reference in new issue
Block a user