Thank you Dr. Bumm. Using the Interactor as you suggested helps us identify a possible cause: a file permission issue.
My computer is at an institution and managed by IT, though I have admin rights. The Slicer installer (dmg) had installed Slicer.app with drwxr-xr-x permission.
To possibly solve the issue, I set permissions to 777 for /Applications/Slicer.app, /Applications/Slicer.app/Contents, ~/Documents/SlicerDICOMDatabase, and ~/Documents/LungCTAnalyzerReports.
But the problem remains.
Below is message log from Python interactor from one session. I have annotated it with my actions.
/////// Start
Python 3.9.10 (main, May 6 2022, 02:57:10)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
>>>
/////// Load â my CT DICOM
Loading with imageIOName: GDCM
/////// Switch module selector in top menu to Lung CT Segmenter > Start > Apply
StartSegmentation completed in 1.09 seconds
self.extentGrowthRatio = 0.5
masterImageExtent = (0, 174, 0, 174, 0, 142)
labelsEffectiveExtent = (34, 148, 56, 132, 62, 133)
labelsExpandedExtent = [0, 174, 18, 170, 27, 142]
Grow-cut operation on volume of 175x153x116 voxels was completed in 0.5 seconds.
Saving markups in temp directory ...
ApplySegmentation completed in 8.02 seconds
/////// Switch module selector in top menu to Lung CT Analyzer > (Input volume/segmentation already selected) > Computer results
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 211, in setup
with open('LCTA.INI', 'w') as configfile: # save
OSError: [Errno 30] Read-only file system: 'LCTA.INI'
Directory changed
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 895, in onReportDirectoryChanged
with open('LCTA.INI', 'w') as configfile: # save
OSError: [Errno 30] Read-only file system: 'LCTA.INI'
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 337, in enter
self.initializeParameterNode()
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 375, in initializeParameterNode
self.setParameterNode(self.logic.getParameterNode())
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 415, in setParameterNode
self.updateGUIFromParameterNode()
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 462, in updateGUIFromParameterNode
self.ui.checkForUpdatesCheckBox.checked = self.checkForUpdates
AttributeError: 'LungCTAnalyzerWidget' object has no attribute 'checkForUpdates'
//////// Download and examine demo CT â Within Lung CT Analyzer module window > Load Demo Covid-19 data > Compute results
This will clear all data in the scene. Do you want to continue?
Clearing the scene
Registering the sample data
Downloading COVID Chest CT dataset
Downloading COVID Lung Mask segmentation
Centering.
Normal end of loading procedure.
Apply
Processing started.
Failed to compute results: Input lung CT is invalid
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 853, in onApplyButton
self.logic.process()
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 2135, in process
raise ValueError("Input lung CT is invalid")
ValueError: Input lung CT is invalid
//////// Again download demo CT (but not analyze) â Within Lung CT Analyzer module window > Load Demo Covid-19 data
This will clear all data in the scene. Do you want to continue?
Clearing the scene
Registering the sample data
Downloading COVID Chest CT dataset
Downloading COVID Lung Mask segmentation
Centering.
Normal end of loading procedure.
//////// Try other module commands â Within Lung CT Analyzer module window > Report directory > Change report directory
Open Directory
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 880, in onOpenReportDirectoryButton
subprocess.Popen(f'explorer {os.path.realpath(self.reportFolder)}')
File "/Applications/Slicer.app/Contents/lib/Python/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/Applications/Slicer.app/Contents/lib/Python/lib/python3.9/subprocess.py", line 1821, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'explorer /Users/ashipde/Documents/LungCTAnalyzerReports'
/// Folder '/Users/ashipde/Documents/LungCTAnalyzerReports' exists
//////// Try other module commands â Within Lung CT Analyzer module window > Report directory > Open report directory
Directory changed
Traceback (most recent call last):
File "/Applications/Slicer.app/Contents/Extensions-30822/LungCTAnalyzer/lib/Slicer-5.0/qt-scripted-modules/LungCTAnalyzer.py", line 895, in onReportDirectoryChanged
with open('LCTA.INI', 'w') as configfile: # save
OSError: [Errno 30] Read-only file system: 'LCTA.INI'