NIX User 4 years ago
parent
commit
ae65c9190e

+ 9 - 8
dicomUtils/loadDicom.py

@@ -81,23 +81,24 @@ def convertToNIfTI(slices):
         img3d[:, :, i] = img2d
     #orientation and pixel spacing
     img = nibabel.Nifti1Image(img3d, a)
+    img.header.set_slope_inter(float(slices[0].RescaleSlope),float(slices[0].RescaleIntercept))
 
     return img
 
-def writeAnonymousSeries(slices,path,studyUID, fields):
+def writeAnonymousSeries(slices,path,patientID, studyUID, fields):
     uid=uuid()
     seriesUID=uid.generateSeriesUUID('volume')
     i=0;
     for s in slices:
         outFile="DCM{:04d}.dcm".format(i)
         outFile=os.path.join(path,outFile)
-        writeAnonymousDicomFile(s,studyUID,seriesUID,outFile,fields)
+        writeAnonymousDicomFile(s,patientID,studyUID,seriesUID,outFile,fields)
         i=i+1
 
 
 
 
-def writeAnonymousDicomFile(slice, studyUID, seriesUID, outFile, fields):
+def writeAnonymousDicomFile(slice, patientID, studyUID, seriesUID, outFile, fields):
     uid=uuid()
     instanceUID=uid.generateSOPInstanceUUID('volume')
 
@@ -116,10 +117,10 @@ def writeAnonymousDicomFile(slice, studyUID, seriesUID, outFile, fields):
 
     # Add the data elements -- not trying to set all required here. Check DICOM
     # standard
-    ds.PatientName = "XXXXX"
-    ds.PatientID = "xxxxxx"
-    ds.StudyUID=studyUID
-    ds.SeriesUID=seriesUID
+    ds.PatientName = patientID
+    ds.PatientID = patientID
+    ds.StudyInstanceUID=studyUID
+    ds.SeriesInstanceUID=seriesUID
     ds.SOPInstanceUID=instanceUID
 
     # Set the transfer syntax
@@ -168,7 +169,7 @@ class uuid:
         try:
             f=open(studyFile,"r")
             id=int(f.readline())
-            id=id+k
+            id=id+1
             f.close()
         except:
             id=0

+ 13 - 4
pythonScripts/anonymizeImages.py

@@ -38,7 +38,9 @@ project='iPNUMMretro/Study'
 tempBase=os.path.join(fhome,'temp')
 
 #all images from database
-ds=db.selectRows(project,'study','Imaging',[])
+imageDataset='Imaging1'
+
+ds=db.selectRows(project,'study',imageDataset,[])
 imageSelector=["CT","PETWB"];
 
 outputBase='/data/dicom/anonymous'
@@ -56,6 +58,10 @@ except KeyError:
 
 i=0
 uid=loadDicom.uuid()
+
+
+
+
 for row in ds["rows"]:
     #link dicoms with a common studiyID
     studyUID=uid.generateStudyUUID('volume')
@@ -70,6 +76,8 @@ for row in ds["rows"]:
         seriesId=row[im];
         if seriesId=="0":
             continue
+        if seriesId==None:
+            continue
 
         print("{}: {}".format(im,seriesId))
         fname=os.path.join(tempBase,seriesId+".zip");
@@ -93,7 +101,8 @@ for row in ds["rows"]:
             shutil.rmtree(anonymousDir)
             os.mkdir(anonymousDir)
 
-        loadDicom.writeAnonymousSeries(slices,anonymousDir,studyUID,fields)
+        patientID="XXXXXX"
+        loadDicom.writeAnonymousSeries(slices,anonymousDir,patientID, studyUID,fields)
         anonymousZip=os.path.join(outputBase,seriesId+".zip")
         try:
             outTxt=subprocess.check_output(["zip","-rj",anonymousZip,anonymousDir])
@@ -110,8 +119,8 @@ for row in ds["rows"]:
             pass
         row[linkField]="[DICOM]"
        
-    db.modifyRows("update",project,"study","Imaging",[row])
-    if i==0:
+    db.modifyRows("update",project,"study",imageDataset,[row])
+    if i==-1:
         break
     i=i+1
 

+ 2 - 1
pythonScripts/linkOrthanc.py

@@ -23,7 +23,7 @@ projectIPNU='iPNUMMretro/Study'
 
 ds=db.selectRows(projectIPNU,'study','Imaging',[])
 
-varList={'CT':['startswith','CT'],'PETWB':['eq','PET%20WB'],
+varList={'CT':['startswith','CT%20WB'],'PETWB':['eq','PET%20WB'],
         'PETWBUncorrected':['eq','PET%20WB%20Uncorrected'],
         'Topogram':['startswith','Topogram']}
 
@@ -43,6 +43,7 @@ for row in ds['rows']:
         qfilter1['value']=row['PatientId']
         qfilter1['oper']='eq'
 
+        #don't have dates, so I have to poll
         qfilter2={}
         qfilter2['variable']='studyDate'
         qfilter2['oper']='dateeq'

+ 0 - 69
pythonScripts/listImages.py

@@ -1,69 +0,0 @@
-#basic python
-import os
-import subprocess
-import re
-import datetime
-import sys
-
-
-fhome=os.path.expanduser('~')
-
-sys.path.insert(1,fhome+'/software/src/labkeyInterface')
-import labkeyInterface
-import labkeyDatabaseBrowser
-
-
-def getValue(filename,tags):
-    #extract value of tags (list of tags) from dcmdump-ed file
-    #supply tags without braces ie. 0002,0008
-    #rows is a list of lines from file
-    with open(filename,"r") as f:
-        out=f.read()
-        lst=out.split('\n')
-        for tag in tags.keys():
-            tags[tag]=loadDicom.getTagValue(lst,tag)
-    return True
-
-
-net=labkeyInterface.labkeyInterface()
-net.init(fhome+'/.labkey/network.json')
-
-db=labkeyDatabaseBrowser.labkeyDB(net)
-
-#by default uses .labkey/Remote.json configuration
-
-
-dicomBase='/data/dicom/database/dicom'
-project='IPNUMMretro/Study'
-schema='study'
-outputList='imageList'
-
-ds=db.selectRows(project,schema,'Imaging',{})
-
-dicomProject='Test/Transfer'
-dicomDataset='Imaging'
-
-
-for row in ds['rows']:
-    print("ID: {}".format(row['PatientId']))
-    nfilter=[{'variable':'PatientId','value':row['PatientId'],'oper':'eq'}]
-    ds1=db.selectRows(dicomProject,'study',dicomDataset,nfilter)
-    for fi in ds1['rows']:
-        fdir=os.path.join(dicomBase,fi['Study'],fi['Series'])
-        #print("Instance: {} ".format(fdir))
-        files=os.listdir(fdir)
-        for f in files:
-            tfile=os.path.join(fdir,f)
-            print("{}".format(tfile))
-            #add files to orthanc via PACS
-            #outText=subprocess.check_output([storescu,peer,port,tfile])
-            oRow={'PatientId':row['PatientId'],'Series':fi['Series'],'Study':fi['Study'],'file':f,'statusFlag':'AVAILABLE'}
-            ds2=db.selectRows(project,'lists',outputList,[{'variable':'file','value':f,'oper':'eq'}])
-            if len(ds2['rows']):
-                continue
-            db.modifyRows('insert',project,'lists',outputList,[oRow])
-
-   
-print("Done")
-quit()
-

+ 0 - 69
pythonScripts/listOrthanc.py

@@ -1,69 +0,0 @@
-#basic python
-import os
-import subprocess
-import re
-import datetime
-import sys
-
-
-fhome=os.path.expanduser('~')
-
-sys.path.insert(1,fhome+'/software/src/labkeyInterface')
-import labkeyInterface
-import labkeyDatabaseBrowser
-
-
-def getValue(filename,tags):
-    #extract value of tags (list of tags) from dcmdump-ed file
-    #supply tags without braces ie. 0002,0008
-    #rows is a list of lines from file
-    with open(filename,"r") as f:
-        out=f.read()
-        lst=out.split('\n')
-        for tag in tags.keys():
-            tags[tag]=loadDicom.getTagValue(lst,tag)
-    return True
-
-
-net=labkeyInterface.labkeyInterface()
-net.init(fhome+'/.labkey/network.json')
-
-db=labkeyDatabaseBrowser.labkeyDB(net)
-
-#by default uses .labkey/Remote.json configuration
-
-
-dicomBase='/data/dicom/database/dicom'
-project='IPNUMMretro/Study'
-schema='study'
-outputList='imageList'
-
-ds=db.selectRows(project,schema,'Imaging',{})
-
-dicomProject='Test/Transfer'
-dicomDataset='Imaging'
-
-
-for row in ds['rows']:
-    print("ID: {}".format(row['PatientId']))
-    nfilter=[{'variable':'PatientId','value':row['PatientId'],'oper':'eq'}]
-    ds1=db.selectRows(dicomProject,'study',dicomDataset,nfilter)
-    for fi in ds1['rows']:
-        fdir=os.path.join(dicomBase,fi['Study'],fi['Series'])
-        #print("Instance: {} ".format(fdir))
-        files=os.listdir(fdir)
-        for f in files:
-            tfile=os.path.join(fdir,f)
-            print("{}".format(tfile))
-            #add files to orthanc via PACS
-            #outText=subprocess.check_output([storescu,peer,port,tfile])
-            oRow={'PatientId':row['PatientId'],'Series':fi['Series'],'Study':fi['Study'],'file':f,'statusFlag':'AVAILABLE'}
-            ds2=db.selectRows(project,'lists',outputList,[{'variable':'file','value':f,'oper':'eq'}])
-            if len(ds2['rows']):
-                continue
-            db.modifyRows('insert',project,'lists',outputList,[oRow])
-
-   
-print("Done")
-quit()
-