runStat.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import statUtils
  2. import os
  3. import radiomics
  4. import SimpleITK
  5. import sys
  6. def main(parFile='../templates/statistics.json'):
  7. setup=statUtils.loadSetup(parFile)
  8. setup['db'],setup['fb']=statUtils.connectDB('onko-nix')
  9. users=statUtils.getUsers(setup['db'],setup['project'])
  10. qFilter=[]
  11. try:
  12. vList=';'.join(setup['participants'])
  13. qFilter.append({'variable':'ParticipantId','value':vList,'oper':'in'})
  14. except KeyError:
  15. pass
  16. ds=setup['db'].selectRows(setup['project'],'study','Imaging1',qFilter)
  17. if not os.path.isdir(setup['localDir']):
  18. os.mkdir(setup['localDir'])
  19. #select just the first row; debugging
  20. rows=ds['rows']
  21. setup['values']=['COM','MTV','TLG','SUVmean','SUVmax']
  22. params=os.path.join('..','templates','radiomics.yaml')
  23. setup['featureExtractor']=radiomics.featureextractor.RadiomicsFeatureExtractor(params)
  24. for r in rows:
  25. print(r)
  26. for q in ['petResampled']:
  27. localPath=statUtils.getImage(setup,r,q)
  28. if localPath=="NONE":
  29. continue
  30. segPaths=statUtils.getSegmentations(setup,r)
  31. if "NONE" in segPaths.values():
  32. os.remove(localPath)
  33. continue
  34. segKeys=list(segPaths.keys())
  35. for x in segPaths:
  36. print('Loaded {}/{}'.format(users[x],segPaths[x]))
  37. pet=SimpleITK.ReadImage(localPath)
  38. seg={x:SimpleITK.ReadImage(segPaths[x]) for x in segPaths}
  39. #find labels associated with each (non-overlaping) segmentation
  40. ids=statUtils.getSegments(list(seg.values())[0])
  41. for id in ids:
  42. print('{} {}'.format(id,ids[id]))
  43. for x in seg:
  44. try:
  45. output=statUtils.getRadiomicsComponentStats(setup,pet,seg[x],ids[id])
  46. except ValueError:
  47. continue
  48. output.update({x:r[x] for x in ['ParticipantId','SequenceNum','patientCode','visitCode']})
  49. output['User']=x
  50. output['segment']=ids[id]
  51. statUtils.updateDatasetRows(setup['db'],setup['project'],'SUVanalysis',[output])
  52. #print(output)
  53. #cleanup
  54. for x in segPath:
  55. os.remove(segPath[x])
  56. os.remove(localPath)
  57. if __name__=='__main__':
  58. main(sys.argv[1])