import sys
import os
import json
import pydicom
import importlib
import numpy
import Elastix
import vtk
import DicomRtImportExportPlugin
import glob
import zipfile
sys.path.append(os.path.join(os.path.expanduser('~'),'software','src','nixSuite','wrapper'))
import nixWrapper
nixWrapper.loadLibrary('labkeyInterface')
import labkeyInterface
net=labkeyInterface.labkeyInterface()
fconfig=os.path.join(os.path.expanduser('~'),'.labkey','network.json')
net.init(fconfig)
netDMR=labkeyInterface.labkeyInterface()
fconfigDMR=os.path.join(os.path.expanduser('~'),'.labkey','merlin.json')
netDMR.init(fconfigDMR)
import labkeyDatabaseBrowser
db=labkeyDatabaseBrowser.labkeyDB(net)
import labkeyFileBrowser
fb=labkeyFileBrowser.labkeyFileBrowser(net)
fbDMR=labkeyFileBrowser.labkeyFileBrowser(netDMR)
nixWrapper.loadLibrary('DICOMtools')
try:
importlib.reload(importDicom)
except NameError:
import importDicom
try:
importlib.reload(loadDicom)
except NameError:
import loadDicom
nixWrapper.loadLibrary('EMBRACE')
try:
importlib.reload(loadPatient)
except NameError:
import loadPatient
project='EMBRACE/studija'
iDicom=importDicom.importDicom()
lDicom=loadDicom.loadDicom()
try:
del elastix
except NameError:
pass
elastix = Elastix.ElastixLogic()
registrationIndex = 29
registrationIndex = 30
RegistrationPresets_ParameterFilenames = 5
parameterFilenames = elastix.getRegistrationPresets()[registrationIndex]\
[RegistrationPresets_ParameterFilenames]
ids=range(1,87)
ids=range(6,7)
shn = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)
baseDir=os.path.join('z:\\','EMBRACE')
if not os.path.isdir(baseDir):
os.makedirs(baseDir)
transformLogic = slicer.vtkSlicerTransformLogic()
exporter = DicomRtImportExportPlugin.DicomRtImportExportPluginClass()
for id in ids:
label = 'LJU'+'{:03d}'.format(id)
loadDicom.clearNodes()
nodes=loadPatient.load(db,fb,fbDMR,iDicom,lDicom,project,label)
print('Segmentations: {}'.format(len(slicer.util.getNodesByClass("vtkMRMLSegmentationNode"))))
try:
fixedVolumeNode = nodes['DMR']
movingVolumeNode = nodes['CT']
except KeyError:
continue
transformNodeName = label+'_T2_DF'
transformNode=slicer.vtkMRMLGridTransformNode()
transformNode.SetName(transformNodeName)
slicer.mrmlScene.AddNode(transformNode)
elastix.registerVolumes(fixedVolumeNode, movingVolumeNode, \
parameterFilenames = parameterFilenames, outputVolumeNode = None,
outputTransformNode = transformNode, \
fixedVolumeMaskNode = None, movingVolumeMaskNode = None,
forceDisplacementFieldOutputTransform = True)
oDir=os.path.join(baseDir,label)
if not os.path.isdir(oDir):
os.makedirs(oDir)
dcmList=glob.glob(os.path.join(oDir,'*.dcm'))
for f in dcmList:
os.remove(f)
for mode in ['CT','DMR']:
slicer.util.saveNode(nodes[mode],os.path.join(oDir,label+'_'+mode+'.nrrd'))
slicer.util.saveNode(transformNode,os.path.join(oDir,label+'_DF.nrrd'))
seg=nodes['CTRS'].GetSegmentation()
n=seg.GetNumberOfSegments()
nodes['CTRS'].SetAndObserveTransformNodeID(transformNode.GetID())
for i in numpy.arange(n):
sId=seg.GetNthSegmentID(int(i))
print(sId)
seg.GetSegment(sId)
fname=os.path.join(oDir,label+'_{}.nrrd'.format(sId))
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')
idArray = vtk.vtkStringArray()
idArray.InsertNextValue(sId)
slicer.vtkSlicerSegmentationsModuleLogic.ExportSegmentsToLabelmapNode(
nodes['CTRS'], idArray, labelmapVolumeNode, nodes['DMR'])
slicer.util.saveNode(labelmapVolumeNode, fname)
exportables=[]
for mode in ['CTRS','DMR']:
itemId=shn.GetItemByDataNode(nodes[mode])
exportables.extend(exporter.examineForExport(itemId))
for exp in exportables:
exp.directory=oDir
exp.setTag('PatientID',label)
exp.setTag('PatientName',label)
exp.setTag('StudyDescription','contoursAligned')
exp.setTag('PatientID',label)
if exp.tag('Modality')=='CT':
exp.setTag('Modality','MR')
exp.setTag('ScanningSequence',nodes['metadataDMR']['scanningSequence'])
exp.setTag('SequenceVariant',nodes['metadataDMR']['sequenceVariant'])
exporter.export(exportables)
importDicom ver: 1.0.2
loadDicom ver: 1.0.0
loadPatient.load ver: 1.0.3
User: andrej studen CSRF: 014d1d34b354fe0645d621f760feec80
Adding series 1 f=http://onko-nix.onko-i.si:8080/labkey/_webdav/Test/Transfer/%40files/dicom/1.2.840.113704.1.1762661776.985.1253733606.8/2.16.840.1.114337.23840299283.22957.20190906170313.0/2.16.840.1.114337.23840299283.22957.20190906170313.0.0
...................................................................................................Got 1 series
Got 1 series
....................................................................................................Added 100 files
C:\Users\studen\AppData\Local\NA-MIC\Slicer 4.11.20200930\lib\Python\Lib\site-packages\urllib3\connection.py:395: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)
SubjectAltNameWarning,
User: andrej studen CSRF: a2559dbbd284436b12f91b98557e3fdf
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxC:\Users\studen\AppData\Local\NA-MIC\Slicer 4.11.20200930\lib\Python\Lib\site-packages\urllib3\connection.py:395: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)
SubjectAltNameWarning,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxC:\Users\studen\AppData\Local\NA-MIC\Slicer 4.11.20200930\lib\Python\Lib\site-packages\urllib3\connection.py:395: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)
SubjectAltNameWarning,
xxxxxxxx