import sys
import os
import SimpleITK
import numpy
import matplotlib.pyplot
import subprocess
import json
import config
import getData
sys.path.append(os.path.join(os.path.expanduser('~'),'software','src','nixSuite','wrapper'))
import nixWrapper
nixWrapper.loadLibrary('labkeyInterface')
import labkeyInterface
import labkeyFileBrowser
import labkeyDatabaseBrowser
#manipulate segmentations
#rewrite this
#nim=getPatientNIM(pId)
def guessPixelPosition(sx=-1,sy=-1,sz=-1):
#guess position of segments
if sx<0:
sx=12
if sy<0:
sy=28
if sz<0:
sz=32
rz=4
oz=0
slc=[sx,sy,sz]
p1=[sx,sy,sz]
#tip
fp={'0':[\
[sx,sy,sz],
[sx-5,sy,sz],\
[sx-2,sy,sz-rz],\
[sx+3,sy,sz-rz],\
[sx-2,sy,sz+rz-1],\
[sx+3,sy,sz+rz]],\
'1':[\
[sx,sy,sz],
[sx-5,sy,sz],\
[sx-1,sy-rz,sz],\
[sx-1,sy+rz-1,sz],\
[sx+3,sy-rz,sz],\
[sx+3,sy+rz,sz]],\
'2':[\
[sx,sy,sz],
[sx,sy+rz+oz,sz],\
[sx,sy+0.3*rz+oz,sz-rz],\
[sx,sy-0.3*rz+oz,sz-rz],\
[sx,sy-rz+oz,sz],\
[sx,sy-0.3*rz+oz,sz+rz],\
[sx,sy+0.3*rz+oz,sz+rz]]}
return fp
def getPatientNIM(r,setup):
locDir=config.getLocalDir(r,setup)
fileName=config.getNodeName(r,setup,'NM',19)+'.nrrd'
f=os.path.join(locDir,fileName)
im=SimpleITK.ReadImage(f)
nim=SimpleITK.GetArrayFromImage(im)
return nim
def writeSegmentation(db,r,setup):
locDir=config.getLocalDir(r,setup)
fileName='{}_Segmentation.txt'.format(config.getCode(r,setup))
idFilter={'variable':'PatientId','value':config.getPatientId(r,setup),'oper':'eq'}
visitFilter={'variable':'visitName','value':config.getVisitId(r,setup),'oper':'eq'}
rows=getData.getSegmentation(db,setup,[idFilter,visitFilter])
v=numpy.zeros((len(rows),3))
for qr in rows:
region=int(qr['regionId'])
v[region,2]=float(qr['x'])
v[region,1]=float(qr['y'])
v[region,0]=float(qr['z'])
#for i in range(len(rows)):
# print(v[i,:])
numpy.savetxt(os.path.join(locDir,fileName),v)
remoteSourcesURL https://git0.fmf.uni-lj.si/studen/nixSuite/raw/master/remoteResources/resources.json {'labkeyInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'irAEMM': {'url': 'https://git0.fmf.uni-lj.si/studen/iraemm/archive/master.zip', 'branch': 'master', 'modules': ['iraemmBrowser']}, 'SlicerLabkeyExtension': {'url': 'https://git0.fmf.uni-lj.si/studen/SlicerLabkeyExtension/archive/SlicerExtensionIndex.zip', 'branch': 'SlicerExtensionIndex', 'modules': ['labkeyBrowser']}, 'limfomiPET': {'url': 'https://git0.fmf.uni-lj.si/studen/limfomiPET/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser']}, 'parseConfig': {'url': 'https://git0.fmf.uni-lj.si/studen/parseConfig/archive/master.zip', 'branch': 'master', 'modules': []}, 'orthancInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/orthancInterface/archive/master.zip', 'branch': 'master', 'modules': []}}
#
fsetup='../template/cardiacSPECT.json'
with open(fsetup,'r') as f:
setup=json.load(f)
net=labkeyInterface.labkeyInterface()
fconfig=os.path.join(os.path.expanduser('~'),'.labkey',setup['network'])
net.init(fconfig)
#net.getCSRF()
db=labkeyDatabaseBrowser.labkeyDB(net)
fb=labkeyFileBrowser.labkeyFileBrowser(net)
#rewrite this
#nim=getPatientNIM(pId)
pId='po1982022'
cx={}
cx[pId]=[32,31,31]
pId='pred15052022'
cx[pId]=[30,32,31]
#order
#[green,blue,red]
fp={'0':[],'1':[],'2':[]}
visitId='MIR'
idFilter={'variable':'PatientId','value':pId,'oper':'eq'}
visitFilter={'variable':'visitName','value':visitId,'oper':'eq'}
rows=getData.getPatients(db,setup,[idFilter,visitFilter])
for r in rows:
print(r)
r=rows[0]
nim=getPatientNIM(r,setup)
#i labels segments
#ns=16
#for i in numpy.arange(ns):
# sNum=r['SequenceNum']+0.0100*i
#seqFilter={'variable':'SequenceNum','value':'{:.2f}'.format(sNum),'oper':'eq'}
rows=getData.getSegmentation(db,setup,[idFilter,visitFilter])
if len(rows)==0:
print('Not found for s={}'.format(sNum))
fp=guessPixelPosition(*cx[pId])
else:
for q in rows:
print(q)
slices=q['sliceId'].split(';')
for s in slices:
fp[s].append([float(x) for x in [q['x'],q['y'],q['z']]])
#first point is (sx,sy,sz)
oz=0
rz=4
#update last 6 points
sx=fp['0'][0][0]
sy=fp['0'][0][1]
sz=fp['0'][0][2]
slc=[int(x) for x in fp['0'][0]]
print('Center ({})'.format(slc))
cut0=20
w0=20
cut1=20
w1=20
cut2=20
w2=20
vmax=1000
vmin=0
fig,ax=matplotlib.pyplot.subplots(3,9,figsize=(20,12))
for i in numpy.arange(0,9):
ax[0,i].imshow(nim[cut2:cut2+w2,slc[1]-4+i,cut0:cut0+w0],cmap='gray_r',vmax=vmax,vmin=vmin)
ax[1,i].imshow(nim[cut2:cut2+w2,cut0:cut0+w0,slc[2]-4+i].T,cmap='gray_r',vmax=vmax,vmin=vmin)
ax[2,i].imshow(nim[slc[0]-4+i,cut1:cut1+w1,cut1:cut1+w1],cmap='gray_r',vmax=vmax,vmin=vmin)
if i==4:
pt=fp['0']
ax[0,i].scatter([x[2]-cut0 for x in pt],[x[0]-cut2 for x in pt])
pt=fp['1']
ax[1,i].scatter([x[0]-cut2 for x in pt],[x[1]-cut0 for x in pt])
pt=fp['2']
ax[2,i].scatter([x[2]-cut1 for x in pt],[x[1]-cut1 for x in pt])
if i==0:
ax[0,i].text(2,2,pId,fontsize='large')
{'lsid': 'urn:lsid:ijs.si:Study.Data-113:5006.pred15052022.1.0000', 'visitName': 'MIR', '_labkeyurl_nmMasterOrthancId': 'https://orthanc.fmf.uni-lj.si/series/45dd38f1-b8fa7828-ed8032e8-e57f47c5-ce2cf639/archive', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'PatientId': 'pred15052022', 'ctOrthancId': '82d2d679-137725b2-b6e1de3e-7733029d-ca0e0f23', 'nmCorrDataOrthancId': 'c54ac097-d2288737-89b2a716-6a8e8859-f40a2fc0', '_labkeyurl_nmCorrDataOrthancId': 'https://orthanc.fmf.uni-lj.si/series/c54ac097-d2288737-89b2a716-6a8e8859-f40a2fc0/archive', '_labkeyurl_ctOrthancId': 'https://orthanc.fmf.uni-lj.si/series/82d2d679-137725b2-b6e1de3e-7733029d-ca0e0f23/archive', 'nmMasterOrthancId': '45dd38f1-b8fa7828-ed8032e8-e57f47c5-ce2cf639', 'SequenceNum': 1.0} {'lsid': 'urn:lsid:ijs.si:Study.Data-113:5004.pred15052022.2.0000', 'visitName': 'MIR', 'sliceId': '0;1;2', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'regionId': 0, 'aliasID': None, 'PatientId': 'pred15052022', 'x': '30', 'y': '32', 'z': '31', 'SequenceNum': 2.0} {'lsid': 'urn:lsid:ijs.si:Study.Data-113:5004.pred15052022.2.0100', 'visitName': 'MIR', 'sliceId': '0;2', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'regionId': 1, 'aliasID': None, 'PatientId': 'pred15052022', 'x': '27', 'y': '32', 'z': '27', 'SequenceNum': 2.01} {'lsid': 'urn:lsid:ijs.si:Study.Data-113:5004.pred15052022.2.0200', 'visitName': 'MIR', 'sliceId': '0;2', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'regionId': 2, 'aliasID': None, 'PatientId': 'pred15052022', 'x': '27', 'y': '32', 'z': '35', 'SequenceNum': 2.02} {'lsid': 'urn:lsid:ijs.si:Study.Data-113:5004.pred15052022.2.0300', 'visitName': 'MIR', 'sliceId': '1;2', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'regionId': 3, 'aliasID': None, 'PatientId': 'pred15052022', 'x': '30', 'y': '29', 'z': '31', 'SequenceNum': 2.03} {'lsid': 'urn:lsid:ijs.si:Study.Data-113:5004.pred15052022.2.0400', 'visitName': 'MIR', 'sliceId': '1;2', '_labkeyurl_PatientId': '/labkey/dinamic_spect/Patients/study-participant.view?participantId=pred15052022', 'regionId': 4, 'aliasID': None, 'PatientId': 'pred15052022', 'x': '30', 'y': '35', 'z': '31', 'SequenceNum': 2.04} Center ([30, 32, 31])
rows=getData.getPatients(db,setup)
for r in rows:
print('******{}******'.format(config.getCode(r,setup)))
writeSegmentation(db,r,setup)
******10KF_MIR****** [33. 33. 15.] [33. 33. 11.] [29. 33. 13.] [37. 33. 14.] [29. 33. 17.] [38. 33. 19.] [33. 29. 14.] [33. 38. 14.] [33. 28. 19.] [33. 39. 19.] [33. 37. 15.] [29. 34.2 15. ] [29. 31.8 15. ] [33. 29. 15.] [37. 31.8 15. ] [37. 34.2 15. ] ******10KF_OBR****** [32. 27. 13.] [32. 27. 8.] [28. 27. 10.] [37. 27. 11.] [28. 27. 14.] [37. 27. 16.] [32. 23. 11.] [32. 32. 11.] [32. 22. 16.] [32. 33. 16.] [32. 31. 13.] [28. 28.2 13. ] [28. 25.8 13. ] [32. 23. 13.] [36. 25.8 13. ] [36. 28.2 13. ] ******po1982022_MIR****** [31. 31. 32.] [27.5 31. 32. ] [35. 31. 32.] [31. 27.5 32. ] [31. 35. 32.] ******pred15052022_MIR****** [31. 32. 30.] [27. 32. 27.] [35. 32. 27.] [31. 29. 30.] [31. 35. 30.]