scanOrthanc.py 2.9 KB

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