|
@@ -48,7 +48,7 @@ class iraemmBrowserWidget(ScriptedLoadableModuleWidget):
|
|
self.network.parseConfig(fconfig)
|
|
self.network.parseConfig(fconfig)
|
|
self.network.initRemote()
|
|
self.network.initRemote()
|
|
self.project="iPNUMMretro/Study"
|
|
self.project="iPNUMMretro/Study"
|
|
- self.dataset="Imaging"
|
|
|
|
|
|
+ self.dataset="Imaging1"
|
|
self.reviewDataset="ImageReview"
|
|
self.reviewDataset="ImageReview"
|
|
|
|
|
|
|
|
|
|
@@ -192,6 +192,7 @@ class iraemmBrowserWidget(ScriptedLoadableModuleWidget):
|
|
#delegate loading to logic
|
|
#delegate loading to logic
|
|
#try:
|
|
#try:
|
|
self.logic.loadImage(self.currentRow,self.keepCached.isChecked())
|
|
self.logic.loadImage(self.currentRow,self.keepCached.isChecked())
|
|
|
|
+ self.logic.compileSegmentation()
|
|
#except AttributeError:
|
|
#except AttributeError:
|
|
# print("Missing current row")
|
|
# print("Missing current row")
|
|
# return
|
|
# return
|
|
@@ -254,7 +255,7 @@ class iraemmBrowserLogic(ScriptedLoadableModuleLogic):
|
|
+row['patientCode']+'/'+row['visitCode']+'/'+row[y]\
|
|
+row['patientCode']+'/'+row['visitCode']+'/'+row[y]\
|
|
for (x,y) in fields.items()}
|
|
for (x,y) in fields.items()}
|
|
|
|
|
|
- volumeNode={}
|
|
|
|
|
|
+ self.volumeNode={}
|
|
for f in relativePaths:
|
|
for f in relativePaths:
|
|
p=relativePaths[f]
|
|
p=relativePaths[f]
|
|
labkeyPath=self.net.GetLabkeyPathFromRelativePath(p)
|
|
labkeyPath=self.net.GetLabkeyPathFromRelativePath(p)
|
|
@@ -269,11 +270,44 @@ class iraemmBrowserLogic(ScriptedLoadableModuleLogic):
|
|
if f=="Segmentation":
|
|
if f=="Segmentation":
|
|
properties["labelmap"]=1
|
|
properties["labelmap"]=1
|
|
|
|
|
|
- volumeNode[f]=self.net.loadNode(p,'VolumeFile',\
|
|
|
|
|
|
+ self.volumeNode[f]=self.net.loadNode(p,'VolumeFile',\
|
|
properties=properties,returnNode=True,keepCached=keepCached)
|
|
properties=properties,returnNode=True,keepCached=keepCached)
|
|
-
|
|
|
|
- slicer.util.setSliceViewerLayers(background=volumeNode['CT'],\
|
|
|
|
- foreground=volumeNode['PET'],foregroundOpacity=0.5,fit=True)
|
|
|
|
|
|
+
|
|
|
|
+ #mimic abdominalCT standardized window setting
|
|
|
|
+ self.volumeNode['CT'].GetScalarVolumeDisplayNode().\
|
|
|
|
+ SetWindowLevel(1400, -500)
|
|
|
|
+ #set colormap for PET to PET-Heat (this is a verbatim setting from
|
|
|
|
+ #the Volumes->Display->Lookup Table colormap identifier)
|
|
|
|
+ self.volumeNode['PET'].GetScalarVolumeDisplayNode().\
|
|
|
|
+ SetAndObserveColorNodeID(\
|
|
|
|
+ slicer.util.getNode('PET-Heat').GetID())
|
|
|
|
+ slicer.util.setSliceViewerLayers(background=self.volumeNode['CT'],\
|
|
|
|
+ foreground=self.volumeNode['PET'],foregroundOpacity=0.5,fit=True)
|
|
|
|
+
|
|
|
|
+ def compileSegmentation(self):
|
|
|
|
+ try:
|
|
|
|
+ labelmapVolumeNode = self.volumeNode['Segmentation']
|
|
|
|
+ except KeyError:
|
|
|
|
+ print("No segmentaion volumeNode available")
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')
|
|
|
|
+ slicer.modules.segmentations.logic().\
|
|
|
|
+ ImportLabelmapToSegmentationNode(labelmapVolumeNode, seg)
|
|
|
|
+
|
|
|
|
+ segLabel={'1':'liver','2':'spleen','3':'lung','4':'thyroid',\
|
|
|
|
+ '5':'kidney','6':'pancreas','7':'gallbladder','8':'bladder',\
|
|
|
|
+ '9':'aorta','10':'trachea','11':'sternum','12':'vertebra L1',\
|
|
|
|
+ '13':'adrenal','14':'psoas major','15':'rectus',\
|
|
|
|
+ '16':'bowel','17':'stomach','18':'heart'}
|
|
|
|
+
|
|
|
|
+ for i in range(seg.GetSegmentation().GetNumberOfSegments()):
|
|
|
|
+ segment=seg.GetSegmentation().GetNthSegment(i)
|
|
|
|
+ segment.SetName(segLabel[segment.GetName()])
|
|
|
|
+
|
|
|
|
+ #seg.CreateClosedSurfaceRepresentation()
|
|
|
|
+ slicer.mrmlScene.RemoveNode(labelmapVolumeNode)
|
|
|
|
+ self.volumeNode.pop('Segmentation',None)
|
|
|
|
|
|
def clearVolumesAndSegmentations(self):
|
|
def clearVolumesAndSegmentations(self):
|
|
nodes=slicer.util.getNodesByClass("vtkMRMLVolumeNode")
|
|
nodes=slicer.util.getNodesByClass("vtkMRMLVolumeNode")
|