Browse Source

Merge radiomics and run setup in a single file for production mode

Andrej Studen 2 years ago
parent
commit
110f24de6e
3 changed files with 48 additions and 19 deletions
  1. 11 7
      pythonScripts/runStat.py
  2. 13 9
      pythonScripts/statUtils.py
  3. 24 3
      templates/statistics.json

+ 11 - 7
pythonScripts/runStat.py

@@ -3,9 +3,13 @@ import os
 import radiomics
 import SimpleITK
 import sys
+import json
 
 def main(parFile='../templates/statistics.json'):
     setup=statUtils.loadSetup(parFile)
+    rFile='radiomics.json'
+    with open(rFile,'w') as f:
+        f.write(json.dumps(setup['radiomics']))
     setup['db'],setup['fb']=statUtils.connectDB('onko-nix')
     users=statUtils.getUsers(setup['db'],setup['project'])
     qFilter=[]
@@ -14,14 +18,14 @@ def main(parFile='../templates/statistics.json'):
         qFilter.append({'variable':'ParticipantId','value':vList,'oper':'in'})
     except KeyError:
         pass
-    ds=setup['db'].selectRows(setup['project'],'study','Imaging1',qFilter)
+    ds=setup['db'].selectRows(setup['project'],'study',setup['imagingDataset'],qFilter)
     if not os.path.isdir(setup['localDir']):
         os.mkdir(setup['localDir'])
     #select just the first row; debugging
     rows=ds['rows']
     setup['values']=['COM','MTV','TLG','SUVmean','SUVmax']
-    params=os.path.join('..','templates','radiomics.yaml')
-    setup['featureExtractor']=radiomics.featureextractor.RadiomicsFeatureExtractor(params)
+    #params=os.path.join('..','templates','radiomics.yaml')
+    setup['featureExtractor']=radiomics.featureextractor.RadiomicsFeatureExtractor(rFile)
     for r in rows:
         print(r)
         for q in ['petResampled']:
@@ -49,12 +53,12 @@ def main(parFile='../templates/statistics.json'):
                 output.update({x:r[x] for x in ['ParticipantId','SequenceNum','patientCode','visitCode']})
                 output['User']=x
                 output['segment']=ids[id]
-                statUtils.updateDatasetRows(setup['db'],setup['project'],'SUVanalysis',[output])
+                statUtils.updateDatasetRows(setup['db'],setup['project'],setup['SUVdataset'],[output])
                 #print(output)
         #cleanup
-        for x in segPath:
-            os.remove(segPath[x])
+        for x in segPaths:
+            os.remove(segPaths[x])
         os.remove(localPath)
-
+    os.remove(rFile)
 if __name__=='__main__':
     main(sys.argv[1])

+ 13 - 9
pythonScripts/statUtils.py

@@ -4,17 +4,21 @@ import os
 import SimpleITK
 import json
 
-#you should get nixSuite via git clone https://git0.fmf.uni-lj.si/studen/nixSuite.git
-#if you don't put it to $HOME/software/src/, you should update the path
-nixSuite=os.path.join(os.path.expanduser('~'),'software','src','nixSuite')
-sys.path.append(os.path.join(nixSuite,'wrapper'))
-import nixWrapper
-nixWrapper.loadLibrary('labkeyInterface')
-import labkeyInterface
-import labkeyDatabaseBrowser
-import labkeyFileBrowser
+
 
 def connectDB(server):
+    #you should get nixSuite via git clone https://git0.fmf.uni-lj.si/studen/nixSuite.git
+    #if you don't put it to $HOME/software/src/, you should update the path
+    nixSuite=os.path.join(os.path.expanduser('~'),'software','src','nixSuite')
+    if not os.path.isdir(nixSuite):
+        nixSuite=os.path.join(os.path.expanduser('~'),'software','src','nixsuite')
+    sys.path.append(os.path.join(nixSuite,'wrapper'))
+    import nixWrapper
+    nixWrapper.loadLibrary('labkeyInterface')
+    import labkeyInterface
+    import labkeyDatabaseBrowser
+    import labkeyFileBrowser
+    
     #check connectivity. This checks the configuration in $HOME/.labkey/network.json, 
     #where paths to certificates are stored
     net=labkeyInterface.labkeyInterface()

+ 24 - 3
templates/statistics.json

@@ -1,8 +1,29 @@
 {"imageDir":"preprocessedImages",
  "project":"limfomiPET/Study",
+ "imagingDataset":"Imaging1",
+ "SUVdataset":"SUVanalysis",
  "localDir":"_home_/temp/limfomiPET",
  "idField":"ParticipantId",
  "visitField":"visitCode",
- "params":"basic.yaml",
- "participants":["1965/16"]
-}
+ "participants":["1965/16"],
+ "radiomics":{
+    "setting":{
+        "binWidth": 25,
+        "label": 1,
+        "interpolator": "sitkBSpline",
+        "resampledPixelSpacing":null,
+        "weightingNorm":null,
+        "voxelArrayShift": 0},
+    "imageType":{
+        "Original": {}
+    },
+    "featureClass":{
+        "shape":["VoxelVolume","MeshVolume","SurfaceArea"],
+        "firstorder":["Maximum","Mean"],
+        "glcm":   [],
+        "glrlm": [],
+        "glszm": [],
+        "gldm":  []
+    }
+  }
+}