Browse Source

Merge branch 'master' of ssh://git0.fmf.uni-lj.si:2222/studen/iraemm

Andrej Studen/Merlin 3 years ago
parent
commit
fd919a26ca

+ 13 - 8
pythonScripts/generateFigures.py

@@ -38,12 +38,14 @@ def getCOWAxis(seg,val,axis):
             continue
         s0=i
         break
-    s1=len(s)
-    for i in numpy.arange(s0,len(s)):
-        if s[i]>0:
+    s1=len(s)-1
+    revIdx=numpy.arange(len(s),0,-1)-1
+    for i in revIdx:
+        if s[i]==0:
             continue
         s1=i
         break
+    s1+=1
     return [s0,numpy.average(x,weights=s),s1]
 
 def getGeometry(seg,val):
@@ -91,7 +93,8 @@ def plot(imgs,t,val,tempBase):
     if t=='CT':
         v0=level-0.5*window
         v1=v0+window
-        matplotlib.pyplot.imshow(imgs['CT'][i0:i1,cowI[1],k0:k1].transpose(),cmap='gray',vmin=v0,vmax=v1)
+        matplotlib.pyplot.imshow(imgs['CT'][i0:i1,cowI[1],k0:k1].transpose(),cmap='gray',
+                vmin=v0,vmax=v1)
     if t=='PET':
         matplotlib.pyplot.imshow(imgs['PET'][i0:i1,cowI[1],k0:k1].transpose(),cmap='inferno')
         #blueish
@@ -144,26 +147,27 @@ def main(parameterFile):
     project=pars['project']
     dataset=pars['targetQuery']
     schema=pars['targetSchema']
-
+    view=pars['viewName']
+    
     reportSchema=pars['reportSchema']
     reportQuery=pars['reportQuery']
     participantField=pars['participantField']
 
     #all images from database
-    ds=db.selectRows(project,schema,dataset,[])
+    ds=db.selectRows(project,schema,dataset,[],view)
     
     #input
     imageResampledField={"CT":"ctResampled","PET":"petResampled","patientmask":"ROImask"}
 
     rows=ds['rows']
-    rows=[ds['rows'][0]]
+    #rows=[ds['rows'][0]]
 
     for r in rows:
         print(r)
         iTypes=['CT','PET','Segm']
         needToCalculate=False
         for t in ['CT','PET']:
-            idFilter={'variable':participantField,'value':r[participantField],'oper':'eq'}
+            idFilter={'variable':'patientCode','value':r['patientCode'],'oper':'eq'}
             visitFilter={'variable':'visitCode','value':r['visitCode'],'oper':'eq'}
             verFilter={'variable':'version','value':pars['version'],'oper':'eq'}
             typeFilter={'variable':'type','value':t,'oper':'eq'}
@@ -222,6 +226,7 @@ def main(parameterFile):
                 frow['file']=imageFile
                 db.modifyRows(mode,project,reportSchema,reportQuery,[frow])
         print('Images uploaded')
+    print('Done')
 
 
 if __name__ == '__main__':

+ 31 - 16
pythonScripts/organ_percentile.py

@@ -60,6 +60,7 @@ def main(parameterFile):
     project=pars['project']
     dataset=pars['targetQuery']
     schema=pars['targetSchema']
+    view=pars['viewName']
     segSchema=pars['segmentationSchema']
     segQuery=pars['segmentationQuery']
     qQuery=pars['percentileQuery']
@@ -73,7 +74,7 @@ def main(parameterFile):
     participantField=pars['participantField']
 
     #all images from database
-    ds=db.selectRows(project,schema,dataset,[])
+    ds=db.selectRows(project,schema,dataset,[],view)
     
     petField=pars['images']['PET']['queryField']
     
@@ -84,6 +85,13 @@ def main(parameterFile):
             numpy.linspace(55,80,6),  
             numpy.linspace(82,90,5),
             numpy.linspace(91,100,10)))
+
+    #debug, select
+    #rows1=[r for r in rows \
+    #        if r['patientCode']=='NIX-LJU-D2002-IRAE-A010' \
+    #        and r['visitCode']=='VISIT_6']
+    #rows=rows1
+
     for r in rows:
         localPET=os.path.join(tempBase,'PET.nii.gz')
         localSeg=os.path.join(tempBase,'Seg.nii.gz')
@@ -118,28 +126,35 @@ def main(parameterFile):
         #3 lungs
         #4 thyroid
         #5 bowel
+        dsP=db.selectRows(project,schema,qQuery,[idFilter,visitFilter,vFilter])
+        db.modifyRows('delete',project,schema,qQuery,dsP['rows'])
+        dspRows=[]
         for level in [3,4,5]:
-            v=organ_percentile(niPET.get_fdata(),niSeg.get_fdata(),level,pv)
+            try:
+                v=organ_percentile(niPET.get_fdata(),niSeg.get_fdata(),level,pv)
+            except IndexError:
+                print('Error for {}/{}: {}'.format(r['patientCode'],r['visitCode'],level))
+                continue
             for (x,y) in zip(pv,v):
                 #get existing entry
                 seqNum=r['SequenceNum']+0.0001*x+0.01*segVersionI
-                print('[{:.8f}] {}/{}: {}/{}'.format(seqNum,r['patientCode'],r['visitCode'],x,y))
-
-                sFilter={'variable':'SequenceNum','value':'{}'.format(seqNum),'oper':'eq'}
-                oFilter={'variable':'organ','value':'{}'.format(level),'oper':'eq'}
-                dsP=db.selectRows(project,schema,qQuery,[idFilter,sFilter,oFilter])
-                mode='update'
-                if len(dsP['rows'])==0:
-                    mode='insert'
-                    rowDSP={x:r[x] for x in [participantField,'patientCode','visitCode']}
-                    rowDSP['SequenceNum']=seqNum
-                    rowDSP['segmentationVersion']=segVersion
-                else:
-                    rowDSP=dsP['rows'][0]
+                #print('[{:.8f}] {}/{}: {}/{}'.format(seqNum,r['patientCode'],r['visitCode'],x,y))
+
+#                sFilter={'variable':'SequenceNum','value':'{}'.format(seqNum),'oper':'eq'}
+#                oFilter={'variable':'organ','value':'{}'.format(level),'oper':'eq'}
+#                mode='update'
+#                if len(dsP['rows'])==0:
+#                    mode='insert'
+                rowDSP={x:r[x] for x in [participantField,'patientCode','visitCode']}
+                rowDSP['SequenceNum']=seqNum
+                rowDSP['segmentationVersion']=segVersion
+#                else:
+#                    rowDSP=dsP['rows'][0]
                 rowDSP['percentile']=x
                 rowDSP['value']=y
                 rowDSP['organ']=level
-                db.modifyRows(mode,project,schema,qQuery,[rowDSP])
+                dspRows.append(rowDSP)
+        db.modifyRows('insert',project,schema,qQuery,dspRows)
 
     
 

+ 3 - 0
templates/segmentationIRAEMM.json

@@ -17,6 +17,9 @@
  "participantField":"PatientId",
  "segmentationSchema":"study",
  "segmentationQuery":"Segmentations",
+ "reportQuery":"reportImages",
+ "reportSchema":"lists",
+ "percentileQuery":"SUVQuantiles",
  "imageDir":"preprocessedImages",
  "version":"v5",
  "versionNumber":"5",