123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import statUtils
- import os
- import radiomics
- import SimpleITK
- import sys
- def main(parFile='../templates/statistics.json'):
- setup=statUtils.loadSetup(parFile)
- setup['db'],setup['fb']=statUtils.connectDB('onko-nix')
- users=statUtils.getUsers(setup['db'],setup['project'])
- qFilter=[]
- try:
- vList=';'.join(setup['participants'])
- qFilter.append({'variable':'ParticipantId','value':vList,'oper':'in'})
- except KeyError:
- pass
- ds=setup['db'].selectRows(setup['project'],'study','Imaging1',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)
- for r in rows:
- print(r)
- for q in ['petResampled']:
- localPath=statUtils.getImage(setup,r,q)
- if localPath=="NONE":
- continue
- segPaths=statUtils.getSegmentations(setup,r)
- if "NONE" in segPaths.values():
- os.remove(localPath)
- continue
- segKeys=list(segPaths.keys())
- for x in segPaths:
- print('Loaded {}/{}'.format(users[x],segPaths[x]))
- pet=SimpleITK.ReadImage(localPath)
- seg={x:SimpleITK.ReadImage(segPaths[x]) for x in segPaths}
- #find labels associated with each (non-overlaping) segmentation
- ids=statUtils.getSegments(list(seg.values())[0])
- for id in ids:
- print('{} {}'.format(id,ids[id]))
- for x in seg:
- try:
- output=statUtils.getRadiomicsComponentStats(setup,pet,seg[x],ids[id])
- except ValueError:
- continue
- 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])
- #print(output)
- #cleanup
- for x in segPath:
- os.remove(segPath[x])
- os.remove(localPath)
- if __name__=='__main__':
- main(sys.argv[1])
|