Browse Source

Adding imageBrowser

Andrej 1 year ago
parent
commit
1dbfdd22ef
1 changed files with 40 additions and 22 deletions
  1. 40 22
      slicerModules/imageBrowser.py

+ 40 - 22
slicerModules/imageBrowser.py

@@ -21,7 +21,7 @@ class imageBrowser(ScriptedLoadableModule):
         ScriptedLoadableModule.__init__(self, parent)
         self.parent.title = "image Browser" 
         # TODO make this more human readable by adding spaces
-        self.parent.categories = ["LabKey"]
+        self.parent.categories = ["dynamicSPECT"]
         self.parent.dependencies = []
         self.parent.contributors = ["Andrej Studen (UL/FMF)"] 
         # replace with "Firstname Lastname (Organization)"
@@ -66,11 +66,11 @@ class imageBrowserWidget(ScriptedLoadableModuleWidget):
         self.participantField=qt.QLabel("PatientId")
         infoLayout.addRow("Participant field:",self.participantField)
     
-        self.ctField=qt.QLabel("ctResampled")
+        self.ctField=qt.QLabel("ct")
         infoLayout.addRow("Data field (CT):",self.ctField)
 
-        self.spectField=qt.QLabel("spectResampled")
-        infoLayout.addRow("Data field (PET):",self.spectField)
+        self.spectField=qt.QLabel("spect")
+        infoLayout.addRow("Data field (SPECT):",self.spectField)
 
         self.userField=qt.QLabel("Loading")
         infoLayout.addRow("User",self.userField)
@@ -110,8 +110,8 @@ class imageBrowserWidget(ScriptedLoadableModuleWidget):
         self.ctCode=qt.QLabel("ctCode")
         patientsFormLayout.addRow("CT:",self.ctCode)
     
-        self.petCode=qt.QLabel("petCode")
-        patientsFormLayout.addRow("PET:",self.petCode)
+        self.spectCode=qt.QLabel("spectCode")
+        patientsFormLayout.addRow("SPECT:",self.spectCode)
 
 
         self.patientLoad=qt.QPushButton("Load")
@@ -158,7 +158,7 @@ class imageBrowserWidget(ScriptedLoadableModuleWidget):
         #self.setupList.addItem("limfomiPET_iBrowser_selected.json")
         #self.setupList.addItem("iraemm_iBrowserProspective.json")
         #self.setupList.addItem("iraemm_iBrowserRetrospective.json")
-        self.setupList.addItem("cardiacSpect_iBrowser.json")
+        self.setupList.addItem("cardiacSPECT_iBrowser.json")
         self.setupList.currentIndexChanged.connect(self.onSetupListChanged)
         setupFormLayout.addRow("Setup:",self.setupList)
 
@@ -227,25 +227,27 @@ class imageBrowserWidget(ScriptedLoadableModuleWidget):
         self.serverList.setStyleSheet('background-color: green')
 
     def onPatientListChanged(self,i):
+        dt=datetime.datetime
         self.visitList.clear()   
-        self.petCode.setText("")
+        self.spectCode.setText("")
         self.ctCode.setText("")
         
         #add potential filters from setup to dbFilter
         ds=self.logic.getDataset(dbFilter={'participant':self.patientList.currentText})
        
         visitVar=self.logic.getVarName(var='visitField')
-        dt=datetime.datetime
-        
+       
+        studyDateVar=self.logic.getVarName(var='studyDateField')
         #label is a combination of sequence number and date of imaging
+        
+        
         try:
             seq={row['SequenceNum']:
-                {'label':row[visitVar],
-                'date': dt.strptime(row['studyDate'],'%Y/%m/%d %H:%M:%S')}
-                for row in ds['rows']}
+                {'label':row[visitVar],'date': parseDate(row[studyDateVar])} for row in ds['rows']}
         except TypeError:
-            #if studyDate is empty, this will return no possible visits
-            return
+           #if studyDate is empty, this will return no possible visits
+           return 
+            
 
         #apply lookup to visitVar if available
         try:
@@ -315,7 +317,7 @@ class imageBrowserWidget(ScriptedLoadableModuleWidget):
         self.segmentEditorWidget.setSegmentationNode(
             self.logic.volumeNode['Segmentation'])
         self.segmentEditorWidget.setMasterVolumeNode(
-            self.logic.volumeNode['PET'])
+            self.logic.volumeNode['SPECT'])
   
     def onReviewSegmentChanged(self):
         pass
@@ -360,6 +362,22 @@ def loadLibrary(name):
     return nixWrapper.loadLibrary(name)
 
 
+def parseDate(x):
+
+   print(f'Parsing date from {x}') 
+   dt=datetime.datetime
+   try: 
+      return dt.strptime(x,'%Y/%m/%d %H:%M:%S.%f')
+   except ValueError:
+      pass
+
+   try: 
+      return dt.strptime(x,'%Y-%m-%d %H:%M:%S.%f')
+   except ValueError:
+      pass
+
+   #raise TypeError(f'Could not convert date {x}')
+   return dt.fromtimestamp(0)
 #
 # imageBrowserLogic
 #
@@ -473,18 +491,18 @@ class imageBrowserLogic(ScriptedLoadableModuleLogic):
         
         #look for entries where segmentation was already done
         dsSet=self.getDataset('SegmentationsMaster')
-        segMap={'{}:{}'.format(r['ParticipantId'],r['visitCode']):r['comments'] 
+        segMap={'{}:{}'.format(r['patientCode'],r['visitCode']):r['comments'] 
                 for r in dsSet['rows']}
         ids=[]
         for r in ds['rows']:
-            code='{}:{}'.format(r['ParticipantId'],r['visitCode'])
+            code='{}:{}'.format(r['patientCode'],r['visitCode'])
             try:
                 comment=segMap[code]
             except KeyError:
-                ids.append(r['ParticipantId'])
+                ids.append(r['patientCode'])
                 continue
             if comment==filterValue:
-                ids.append(r['ParticipantId'])
+                ids.append(r['patientCode'])
         status['ids']=list(set(ids))
         return status
         
@@ -492,7 +510,7 @@ class imageBrowserLogic(ScriptedLoadableModuleLogic):
 
     def getVarName(self,name="Imaging",var="visitField"):
         dset=self.isetup['datasets'][name]
-        defaults={"visitField":"imagingVisitId"}
+        defaults={"visitField":"imagingVisitId","studyDateField":"studyDate"}
         try:
             return dset[var]
         except KeyError:
@@ -759,7 +777,7 @@ class imageBrowserLogic(ScriptedLoadableModuleLogic):
                 format(entry['patientCode'],entry['visitCode'],uName))
         slicer.mrmlScene.AddNode(segNode)
         segNode.CreateDefaultDisplayNodes()
-        segNode.SetReferenceImageGeometryParameterFromVolumeNode(self.volumeNode['PET'])
+        segNode.SetReferenceImageGeometryParameterFromVolumeNode(self.volumeNode['SPECT'])
         try:
             segmentList=self.isetup['segmentList']
         except KeyError: