|
@@ -6,6 +6,7 @@ import numpy
|
|
|
import segmentation
|
|
|
import plotData
|
|
|
import os
|
|
|
+import datetime
|
|
|
|
|
|
def getRows(setup,returnFB=False):
|
|
|
qFilter=config.getFilter(setup)
|
|
@@ -16,84 +17,90 @@ def getRows(setup,returnFB=False):
|
|
|
return fb,db,rows
|
|
|
return rows
|
|
|
|
|
|
-def listRequiredFiles(stage,r,setup):
|
|
|
- code=config.getCode(r,setup)
|
|
|
- nclass=setup['nclass'][0]
|
|
|
- nr=setup['nr']
|
|
|
- nt=20
|
|
|
- if stage=='setCenters':
|
|
|
- names={x:[config.getPattern(x,code)] for x in ['CT','Dummy']}
|
|
|
- names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
- return names
|
|
|
- if stage=='fitIVF':
|
|
|
- names={x:[config.getPattern(x,code)] for x in ['Dummy']}
|
|
|
- names['center']=[]
|
|
|
- for ir in range(nr):
|
|
|
- rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
- names['center'].extend(rel)
|
|
|
- return names
|
|
|
- if stage=='plotIVF':
|
|
|
- names={x:[config.getPattern(x,code)] for x in ['Dummy']}
|
|
|
- names['center']=[]
|
|
|
- names['fitIVF']=[]
|
|
|
- qLambda=setup['qLambda']
|
|
|
- for ir in range(nr):
|
|
|
- rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
- names['center'].extend(rel)
|
|
|
- names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
- #names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
- rel=[config.getPattern('centerNRRD',code=code,nclass=nclass,ir=ir,qaName=x) for x in ['CT','SPECT']]
|
|
|
- names['center'].extend(rel)
|
|
|
+def getRobust(setup,var,default=0):
|
|
|
+ #get from dict, return default if not set
|
|
|
+ try:
|
|
|
+ return setup[var]
|
|
|
+ except KeyError:
|
|
|
+ return default
|
|
|
+
|
|
|
+def listRequiredFiles(stage,r,setup,db=None):
|
|
|
+ code=config.getCode(r,setup)
|
|
|
+ nclass=setup['nclass'][0]
|
|
|
+ nr=setup['nr']
|
|
|
+ nt=20
|
|
|
+ qLambda=getRobust(setup,'qLambda')
|
|
|
+ qLambdaC=getRobust(setup,'qLambdaC')
|
|
|
+
|
|
|
+ if stage=='setCenters':
|
|
|
+ names={x:[config.getPattern(x,code)] for x in ['CT','Dummy']}
|
|
|
+ names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
+ return names
|
|
|
+ if stage=='fitIVF':
|
|
|
+ names={x:[config.getPattern(x,code)] for x in ['Dummy']}
|
|
|
+ names['center']=[]
|
|
|
+ for ir in range(nr):
|
|
|
+ rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
+ names['center'].extend(rel)
|
|
|
+ return names
|
|
|
+ if stage=='plotIVF':
|
|
|
+ names={x:[config.getPattern(x,code)] for x in ['Dummy']}
|
|
|
+ names['center']=[]
|
|
|
+ names['fitIVF']=[]
|
|
|
+ for ir in range(nr):
|
|
|
+ rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
+ names['center'].extend(rel)
|
|
|
+ names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
+ #names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
+ rel=[config.getPattern('centerNRRD',code=code,nclass=nclass,ir=ir,qaName=x) for x in ['CT','SPECT']]
|
|
|
+ names['center'].extend(rel)
|
|
|
|
|
|
- #names['segmentation']=[segmentation.getSegmentationFileName(r,setup)]
|
|
|
- names.update({x:[config.getPattern(x,code)] for x in ['CT']})
|
|
|
- names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
- return names
|
|
|
+ names.update({x:[config.getPattern(x,code)] for x in ['CT']})
|
|
|
+ names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
+ return names
|
|
|
|
|
|
- if stage=='fitCompartment':
|
|
|
- names={}
|
|
|
- names['center']=[]
|
|
|
- names['fitIVF']=[]
|
|
|
- qLambda=setup['qLambda']
|
|
|
- for ir in range(nr):
|
|
|
- rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
- names['center'].extend(rel)
|
|
|
- names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
- names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
- names['segmentation']=[segmentation.getSegmentationFileName(r,setup)]
|
|
|
- return names
|
|
|
+ if stage=='fitCompartment':
|
|
|
+ names={}
|
|
|
+ names['center']=[]
|
|
|
+ names['fitIVF']=[]
|
|
|
+ for ir in range(nr):
|
|
|
+ rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
+ names['center'].extend(rel)
|
|
|
+ names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
+ names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
+ names['segmentation']=[segmentation.getSegmentationFileName(r,setup,db=db)]
|
|
|
+ return names
|
|
|
|
|
|
- if stage=='plotCompartment':
|
|
|
- names={}
|
|
|
- names['center']=[]
|
|
|
- names['fitIVF']=[]
|
|
|
- names['fitCompartment']=[]
|
|
|
- nseg=setup['nseg']
|
|
|
- qLambda=setup['qLambda']
|
|
|
- for ir in range(nr):
|
|
|
- rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
- names['center'].extend(rel)
|
|
|
- names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
- names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
- for iseg in range(nseg):
|
|
|
- rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda) for qn in sNames]
|
|
|
- names['fitCompartment'].extend(rel)
|
|
|
- names['segmentation']=[segmentation.getSegmentationFileName(r,setup)]
|
|
|
- names.update({x:[config.getPattern(x,code)] for x in ['CT','Dummy']})
|
|
|
- names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
- return names
|
|
|
+ if stage=='plotCompartment':
|
|
|
+ sNames=['kmeansFit','localFit','kmeansTAC','localTAC']
|
|
|
+ names={}
|
|
|
+ names['center']=[]
|
|
|
+ names['fitIVF']=[]
|
|
|
+ names['fitCompartment']=[]
|
|
|
+ nseg=setup['nseg']
|
|
|
+ for ir in range(nr):
|
|
|
+ rel=[config.getPattern('center',code=code,nclass=nclass,ir=ir,ic=i) for i in range(nclass)]
|
|
|
+ names['center'].extend(rel)
|
|
|
+ names['fitIVF'].append(config.getPattern('fitIVF',code=code,nclass=nclass,ir=ir,qLambda=qLambda))
|
|
|
+ names['center'].append(config.getPattern('centerMap',code=code,nclass=nclass,ir=ir))
|
|
|
+ for iseg in range(nseg):
|
|
|
+ xc='fitCompartment'
|
|
|
+ rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC) for qn in sNames]
|
|
|
+ names['fitCompartment'].extend(rel)
|
|
|
+ names['segmentation']=[segmentation.getSegmentationFileName(r,setup,db=db)]
|
|
|
+ names.update({x:[config.getPattern(x,code)] for x in ['CT','Dummy']})
|
|
|
+ names['SPECT']=[config.getPattern('SPECT',code=code,timepoint=i) for i in range(nt)]
|
|
|
+ return names
|
|
|
|
|
|
- return {}
|
|
|
+ return {}
|
|
|
|
|
|
def listCreatedFiles(stage,r,setup):
|
|
|
code=config.getCode(r,setup)
|
|
|
nclass=setup['nclass'][0]
|
|
|
- qLambda=setup['qLambda']
|
|
|
+ qLambda=getRobust(setup,'qLambda')
|
|
|
+ qLambdaC=getRobust(setup,'qLambdaC')
|
|
|
nr=setup['nr']
|
|
|
- try:
|
|
|
- nseg=setup['nseg']
|
|
|
- except KeyError:
|
|
|
- nseg=0
|
|
|
+ nseg=getRobust(setup,'nseg')
|
|
|
names={}
|
|
|
|
|
|
if stage=='setCenters':
|
|
@@ -126,7 +133,7 @@ def listCreatedFiles(stage,r,setup):
|
|
|
sNames=['kmeansFit','localFit','kmeansTAC','localTAC']
|
|
|
for ir in range(nr):
|
|
|
for iseg in range(nseg):
|
|
|
- rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda) for qn in sNames]
|
|
|
+ rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC) for qn in sNames]
|
|
|
names[xc].extend(rel)
|
|
|
if stage=='plotCompartment':
|
|
|
xc='plotCompartment'
|
|
@@ -134,16 +141,16 @@ def listCreatedFiles(stage,r,setup):
|
|
|
sNames=['realizations','diff']
|
|
|
for ir in range(nr):
|
|
|
for iseg in range(nseg):
|
|
|
- rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda) for qn in sNames]
|
|
|
+ rel=[config.getPattern(xc,code=code,nclass=nclass,ir=ir,qaName=qn,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC) for qn in sNames]
|
|
|
names[xc].extend(rel)
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
-def getRequiredFiles(stage,r,setup,fb,names=None):
|
|
|
+def getRequiredFiles(stage,r,setup,fb,names=None,db=None):
|
|
|
#fb,r=getRow(setup,True)
|
|
|
if not names:
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
for f in names:
|
|
|
_copyFromServer=getData.copyFromServer
|
|
|
if f=='segmentation':
|
|
@@ -151,10 +158,10 @@ def getRequiredFiles(stage,r,setup,fb,names=None):
|
|
|
_copyFromServer(fb,r,setup,names[f])
|
|
|
return fb,r
|
|
|
|
|
|
-def checkRequiredFiles(stage,r,setup,names=None,fb=None,doPrint=False):
|
|
|
+def checkRequiredFiles(stage,r,setup,names=None,fb=None,doPrint=False,db=None):
|
|
|
ok=True
|
|
|
if not names:
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
for f in names:
|
|
|
nm=names[f]
|
|
|
for x in nm:
|
|
@@ -231,16 +238,14 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
setIVF=False
|
|
|
plotIVF=False
|
|
|
setC=True
|
|
|
- try:
|
|
|
- qLambda=setup['qLambda']
|
|
|
- except KeyError:
|
|
|
- qLambda=0
|
|
|
+ qLambda=getRobust(setup,'qLambda')
|
|
|
+ qLambdaC=getRobust(setup,'qLambdaC')
|
|
|
|
|
|
if stage=='setCenters':
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
if fb:
|
|
|
- getRequiredFiles(stage,r,setup,fb,names=names)
|
|
|
- if not checkRequiredFiles(stage,r,setup,names=names,fb=fb,doPrint=True):
|
|
|
+ getRequiredFiles(stage,r,setup,fb,names=names,db=db)
|
|
|
+ if not checkRequiredFiles(stage,r,setup,names=names,fb=fb,doPrint=True,db=db):
|
|
|
return
|
|
|
|
|
|
loadData.saveCenters(r,setup)
|
|
@@ -248,7 +253,7 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
if stage=='fitIVF':
|
|
|
#get required files
|
|
|
#stage='fitIVF'
|
|
|
- if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True):
|
|
|
+ if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,db=db):
|
|
|
return
|
|
|
|
|
|
loadData.saveIVF(r,setup,nfit=30,qLambda=qLambda)
|
|
@@ -256,10 +261,10 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
|
|
|
if stage=='plotIVF':
|
|
|
ir=0
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
if fb:
|
|
|
- getRequiredFiles(stage,r,setup,fb,names=names)
|
|
|
- if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names):
|
|
|
+ getRequiredFiles(stage,r,setup,fb,names=names,db=db)
|
|
|
+ if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names,db=db):
|
|
|
return
|
|
|
|
|
|
print('Loading files to memory')
|
|
@@ -295,10 +300,10 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
|
|
|
if stage=='fitCompartment':
|
|
|
ir=0
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
if fb:
|
|
|
- getRequiredFiles(stage,r,setup,fb,names=names)
|
|
|
- if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names):
|
|
|
+ getRequiredFiles(stage,r,setup,fb,names=names,db=db)
|
|
|
+ if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names,db=db):
|
|
|
return
|
|
|
|
|
|
#load class classification
|
|
@@ -342,22 +347,22 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
s+=1
|
|
|
qCenter/=s
|
|
|
qData/=s
|
|
|
- samplesC=fitData.fitCompartmentGlobal(ivfFit,t,qCenter,useJac=True,nfit=20)
|
|
|
- samplesC1=fitData.fitCompartmentGlobal(ivfFit,t,qData,nfit=20,useJac=True)
|
|
|
+ samplesC=fitData.fitCompartmentGlobal(ivfFit,t,qCenter,useJac=True,nfit=20,qLambda=qLambdaC)
|
|
|
+ samplesC1=fitData.fitCompartmentGlobal(ivfFit,t,qData,nfit=20,useJac=True,qLambda=qLambdaC)
|
|
|
|
|
|
- loadData.saveSamples(r,setup,samplesC,kCenters,'kmeansFit',iseg=x,ir=ir,qLambda=qLambda)
|
|
|
- loadData.saveSamples(r,setup,samplesC1,[-1],'localFit',iseg=x,ir=ir,qLambda=qLambda)
|
|
|
- loadData.saveTAC(r,setup,qCenter,'kmeansTAC',iseg=x,ir=ir,qLambda=qLambda)
|
|
|
- loadData.saveTAC(r,setup,qData,'localTAC',iseg=x,ir=ir,qLambda=qLambda)
|
|
|
+ loadData.saveSamples(r,setup,samplesC,kCenters,'kmeansFit',iseg=x,ir=ir,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ loadData.saveSamples(r,setup,samplesC1,[-1],'localFit',iseg=x,ir=ir,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ loadData.saveTAC(r,setup,qCenter,'kmeansTAC',iseg=x,ir=ir,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ loadData.saveTAC(r,setup,qData,'localTAC',iseg=x,ir=ir,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
|
|
|
|
|
|
|
|
|
if stage=='plotCompartment':
|
|
|
ir=0
|
|
|
- names=listRequiredFiles(stage,r,setup)
|
|
|
+ names=listRequiredFiles(stage,r,setup,db=db)
|
|
|
if fb:
|
|
|
- getRequiredFiles(stage,r,setup,fb,names=names)
|
|
|
- if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names):
|
|
|
+ getRequiredFiles(stage,r,setup,fb,names=names,db=db)
|
|
|
+ if not checkRequiredFiles(stage,r,setup,fb=fb,doPrint=True,names=names,db=db):
|
|
|
return
|
|
|
|
|
|
tag='plotCompartment'
|
|
@@ -369,10 +374,10 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
setup['nseg']=len(segmentIds)
|
|
|
t,dt=loadData.loadTime(r,setup)
|
|
|
for iseg in segmentIds:
|
|
|
- m,samplesC=loadData.readSamples(r,setup,'kmeansFit',ir=ir,iseg=iseg,qLambda=qLambda)
|
|
|
- m1,samplesC1=loadData.readSamples(r,setup,'localFit',ir=ir,iseg=iseg,qLambda=qLambda)
|
|
|
- qCenter=loadData.readTAC(r,setup,'kmeansTAC',ir=ir,iseg=iseg,qLambda=qLambda)
|
|
|
- qData=loadData.readTAC(r,setup,'localTAC',ir=ir,iseg=iseg,qLambda=qLambda)
|
|
|
+ m,samplesC=loadData.readSamples(r,setup,'kmeansFit',ir=ir,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ m1,samplesC1=loadData.readSamples(r,setup,'localFit',ir=ir,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ qCenter=loadData.readTAC(r,setup,'kmeansTAC',ir=ir,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ qData=loadData.readTAC(r,setup,'localTAC',ir=ir,iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
chi2C=samplesC[0,:]
|
|
|
threshold=numpy.median(chi2C)
|
|
|
chi2C1=samplesC1[0,:]
|
|
@@ -391,13 +396,14 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
row['mean']=k1
|
|
|
row['std']=stdK1
|
|
|
row['regionId']=iseg
|
|
|
- row['fitPlot']=config.getPattern(tag,code=code,ir=0,nclass=nclass,qaName='realizations',iseg=iseg,qLambda=qLambda)
|
|
|
- row['diffPlot']=config.getPattern(tag,code=code,ir=0,nclass=nclass,qaName='diff',iseg=iseg,qLambda=qLambda)
|
|
|
+ row['fitPlot']=config.getPattern(tag,code=code,ir=0,nclass=nclass,qaName='realizations',iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
+ row['diffPlot']=config.getPattern(tag,code=code,ir=0,nclass=nclass,qaName='diff',iseg=iseg,qLambda=qLambda,qLambdaC=qLambdaC)
|
|
|
row1={x:row[x] for x in row}
|
|
|
row1['option']='localFit'
|
|
|
row1['mean']=k11
|
|
|
row1['std']=stdK11
|
|
|
row['qLambda']=qLambda
|
|
|
+ row['qLambdaC']=qLambdaC
|
|
|
if db:
|
|
|
db.modifyRows('insert',setup['project'],'lists','Summary',[row,row1])
|
|
|
|
|
@@ -412,6 +418,8 @@ def workflow(r,setup,stage,fb=None,db=None):
|
|
|
|
|
|
|
|
|
uploadCreatedFiles(stage,fb,r,setup)
|
|
|
+ #setup could be modified
|
|
|
+ return setup
|
|
|
|
|
|
def main(setupFile):
|
|
|
with open(setupFile,'r') as f:
|