scanOrthanc.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import os
  2. import json
  3. import re
  4. import sys
  5. fhome=os.path.expanduser('~')
  6. sys.path.insert(1,fhome+'/software/src/labkeyInterface')
  7. import labkeyInterface
  8. import labkeyDatabaseBrowser
  9. sys.path.insert(1,fhome+'/software/src/orthancInterface')
  10. import orthancInterface
  11. import orthancDatabaseBrowser
  12. fconfig=os.path.join(fhome,'.labkey','network.json')
  13. net=labkeyInterface.labkeyInterface()
  14. net.init(fconfig)
  15. db=labkeyDatabaseBrowser.labkeyDB(net)
  16. onet=orthancInterface.orthancInterface()
  17. onet.init(fconfig)
  18. odb=orthancDatabaseBrowser.orthancDB(onet)
  19. i=0
  20. project='Orthanc/Database'
  21. patients=odb.getPatients()
  22. for p in patients:
  23. pdata=odb.getPatientData(p)
  24. dicom=pdata['MainDicomTags']
  25. patientId=dicom['PatientID']
  26. print("Patient: {} ID: {}".format(p,patientId))
  27. qfilter={'variable':'PatientId','value':patientId,'oper':'eq'}
  28. ds=db.selectRows(project,'study','Demographics',[qfilter])
  29. if len(ds['rows'])==0:
  30. row={}
  31. row['PatientId']=patientId
  32. row['birthDate']=dicom['PatientBirthDate']
  33. row['PatientName']=dicom['PatientName']
  34. row['OrthancId']=p
  35. db.modifyRows('insert',project,'study','Demographics',[row])
  36. for s in pdata['Studies']:
  37. sdata=odb.getStudyData(s)
  38. sdicom=sdata['MainDicomTags']
  39. sid=sdicom['StudyInstanceUID']
  40. print('Study: {}/{}'.format(s,sid))
  41. #print('Data: {}'.format(sdata))
  42. sdate=sdicom['StudyDate']
  43. #continue
  44. for se in sdata['Series']:
  45. qfilter={'variable':'orthancSeries','value':se,'oper':'eq'}
  46. ds=db.selectRows(project,'study','Imaging',[qfilter])
  47. if len(ds['rows'])>0:
  48. continue
  49. #count existing entries for patient
  50. qfilter={'variable':'PatientId','value':patientId,'oper':'eq'}
  51. ds=db.selectRows(project,'study','Imaging',[qfilter])
  52. seqNum=len(ds['rows'])
  53. sedata=odb.getSeriesData(se)
  54. sedicom=sedata['MainDicomTags']
  55. seid=sedicom['SeriesInstanceUID']
  56. print('Series: {}/{}'.format(se,seid))
  57. #print('Data: {}'.format(sedata))
  58. seDesc="NONE"
  59. try:
  60. seDesc=sedicom['SeriesDescription']
  61. except KeyError:
  62. pass
  63. print('ID: {}.'.format(seDesc))
  64. row={}
  65. row['PatientId']=patientId
  66. row['sequenceNum']=seqNum
  67. row['dicomStudy']=sid
  68. row['orthancStudy']=s
  69. row['dicomSeries']=seid
  70. row['orthancSeries']=se
  71. row['studyDate']=sdate
  72. row['seriesDescription']=seDesc
  73. db.modifyRows('insert',project,'study','Imaging',[row])
  74. print("Done")