Skip to content

Commit

Permalink
ENH: Apply reviews
Browse files Browse the repository at this point in the history
  • Loading branch information
Punzo committed Nov 8, 2023
1 parent b5e88c3 commit 31310ce
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions Modules/Scripted/DICOMPlugins/DICOMScalarVolumePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import qt
import vtk
import vtkITK
import math
from slicer.i18n import tr as _

import slicer
Expand Down Expand Up @@ -92,7 +91,6 @@ def settingsPanelEntry(panel, parent):
importFormatsComboBox.addItem(_("none"), "none")
importFormatsComboBox.addItem(_("apply regularization transform"), "transform")
importFormatsComboBox.addItem(_("apply harden regularization transform"), "hardenTransform")
# In the future additional option, such as "resample" (harden the applied transform) may be added.

importFormatsComboBox.currentIndex = 0
formLayout.addRow(_("Acquisition geometry regularization:"), importFormatsComboBox)
Expand Down Expand Up @@ -218,6 +216,13 @@ def examineFiles(self, files, eps = 1.e-4):
"diffusionGradientOrientation",
]

# Duplicate values for these tags will compared numerically,
# instead of checking the values of the dictionary subseriesValues stored as strings.
vectorTags = [
"imageOrientationPatient",
"diffusionGradientOrientation",
]

#
# first, look for subseries within this series
# - build a list of files for each unique value
Expand All @@ -234,27 +239,34 @@ def examineFiles(self, files, eps = 1.e-4):
if tag not in subseriesValues:
subseriesValues[tag] = []

if tag == "imageOrientationPatient" or tag == "diffusionGradientOrientation":
if tag in vectorTags:
if value != "":
directionCosine = [float(i) for i in value.split("\\")]
a = math.sqrt(directionCosine[0]*directionCosine[0] + directionCosine[1]*directionCosine[1] + directionCosine[2]*directionCosine[2])
for k in range(3):
directionCosine[k] /= a
a = math.sqrt(directionCosine[3]*directionCosine[3] + directionCosine[4]*directionCosine[4] + directionCosine[5]*directionCosine[5])
for k in range(3, 6):
directionCosine[k] /= a

directionCosineA = numpy.array(directionCosine[:3])
directionMagnitude = numpy.linalg.norm(directionCosineA)
directionCosineA /= directionMagnitude

directionCosineB = numpy.array(directionCosine[-3:])
directionMagnitude = numpy.linalg.norm(directionCosineB)
directionCosineA /= directionMagnitude

found = False
for subseriesValue in subseriesValues[tag]:
subserDirCos = [float(i) for i in subseriesValue.split("\\")]
a = math.sqrt(subserDirCos[0]*subserDirCos[0] + subserDirCos[1]*subserDirCos[1] + subserDirCos[2]*subserDirCos[2])
b = (directionCosine[0]*subserDirCos[0] + directionCosine[1]*subserDirCos[1] + directionCosine[2]*subserDirCos[2]) / a
if b < 1 - eps :

subserDirCosA = numpy.array(subserDirCos[:3])
directionMagnitude = numpy.linalg.norm(subserDirCosA)
subserDirCosA /= directionMagnitude
dot = numpy.dot(directionCosineA, subserDirCosA)
if dot < 1 - eps :
continue

a = math.sqrt(subserDirCos[3]*subserDirCos[3] + subserDirCos[4]*subserDirCos[4] + subserDirCos[5]*subserDirCos[5])
b = (directionCosine[3]*subserDirCos[3] + directionCosine[4]*subserDirCos[4] + directionCosine[5]*subserDirCos[5]) / a
if b > 1 - eps :
subserDirCosB = numpy.array(subserDirCos[-3:])
directionMagnitude = numpy.linalg.norm(subserDirCosB)
subserDirCosB /= directionMagnitude
dot = numpy.dot(directionCosineB, subserDirCosB)
if dot > 1 - eps :
found = True
value = subseriesValue
break
Expand Down

0 comments on commit 31310ce

Please sign in to comment.