def test_BRAINSConstellationDetector_outputs(): output_map = dict(outputLandmarksInACPCAlignedSpace=dict(), outputLandmarksInInputSpace=dict(), outputMRML=dict(), outputResampledVolume=dict(), outputTransform=dict(), outputUntransformedClippedVolume=dict(), outputVerificationScript=dict(), outputVolume=dict(), resultsDir=dict(), writeBranded2DImage=dict(), ) outputs = BRAINSConstellationDetector.output_spec() for key, metadata in output_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(outputs.traits()[key], metakey), value
def test_BRAINSConstellationDetector_outputs(): output_map = dict( outputLandmarksInACPCAlignedSpace=dict(), outputLandmarksInInputSpace=dict(), outputMRML=dict(), outputResampledVolume=dict(), outputTransform=dict(), outputUntransformedClippedVolume=dict(), outputVerificationScript=dict(), outputVolume=dict(), resultsDir=dict(), writeBranded2DImage=dict(), ) outputs = BRAINSConstellationDetector.output_spec() for key, metadata in output_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(outputs.traits()[key], metakey), value
def CreateLandmarkInitializeWorkflow(WFname, master_config, InterpolationMode, PostACPCAlignToAtlas, DoReverseInit, useEMSP=False, Debug=False): CLUSTER_QUEUE=master_config['queue'] CLUSTER_QUEUE_LONG=master_config['long_q'] landmarkInitializeWF = pe.Workflow(name=WFname) ############# inputsSpec = pe.Node(interface=IdentityInterface(fields=['inputVolume', 'atlasLandmarkFilename', 'atlasWeightFilename', 'LLSModel', 'inputTemplateModel', 'atlasVolume', 'EMSP']), run_without_submitting=True, name='inputspec') ############# outputsSpec = pe.Node(interface=IdentityInterface(fields=['outputLandmarksInACPCAlignedSpace', 'outputResampledVolume', 'outputResampledCroppedVolume', 'outputLandmarksInInputSpace', 'writeBranded2DImage', 'outputTransform', 'outputMRML', 'atlasToSubjectTransform' ]), run_without_submitting=True, name='outputspec') ########################################################/ # Run ACPC Detect on first T1 Image - Base Image ######################################################## BCD = pe.Node(interface=BRAINSConstellationDetector(), name="BCD") many_cpu_BCD_options_dictionary = {'qsub_args': modify_qsub_args(CLUSTER_QUEUE_LONG,4,2,4), 'overwrite': True} BCD.plugin_args = many_cpu_BCD_options_dictionary ## Use program default BCD.inputs.inputTemplateModel = T1ACPCModelFile # BCD.inputs.outputVolume = "BCD_OUT" + "_ACPC_InPlace.nii.gz" #$# T1AcpcImageList BCD.inputs.outputTransform = "BCD" + "_Original2ACPC_transform.h5" BCD.inputs.outputResampledVolume = "BCD" + "_ACPC.nii.gz" BCD.inputs.outputLandmarksInInputSpace = "BCD" + "_Original.fcsv" BCD.inputs.outputLandmarksInACPCAlignedSpace = "BCD" + "_ACPC_Landmarks.fcsv" BCD.inputs.writeBranded2DImage = "BCD"+"_Branded2DQCimage.png" # BCD.inputs.outputMRML = "BCD" + "_Scene.mrml" BCD.inputs.interpolationMode = InterpolationMode BCD.inputs.houghEyeDetectorMode = 1 # Look for dark eyes like on a T1 image, 0=Look for bright eyes like in a T2 image BCD.inputs.acLowerBound = 80.0 # Chop the data set 80mm below the AC PC point. # Entries below are of the form: landmarkInitializeWF.connect(inputsSpec, 'inputVolume', BCD, 'inputVolume') landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BCD, 'atlasLandmarkWeights') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename',BCD, 'atlasLandmarks') landmarkInitializeWF.connect(inputsSpec, 'LLSModel', BCD, 'LLSModel') landmarkInitializeWF.connect(inputsSpec, 'inputTemplateModel', BCD, 'inputTemplateModel') # If EMSP, pre-selected landmarks are given, force to use. if useEMSP: print("*** Use pre-selected landmark file for Landmark Detection") landmarkInitializeWF.connect(inputsSpec, 'EMSP', BCD, 'inputLandmarksEMSP') # If the atlas volume is from this subject (i.e. after template building for the longitudinal phase) then set this to True # Otherwise, it is probably best to let the ACPC alignment be fully defined by the landmark points themselves. if PostACPCAlignToAtlas: landmarkInitializeWF.connect(inputsSpec, 'atlasVolume', BCD, 'atlasVolume') ######################################################## # Run BLI atlas_to_subject ######################################################## BLI = pe.Node(interface=BRAINSLandmarkInitializer(), name="BLI") BLI.inputs.outputTransformFilename = "landmarkInitializer_atlas_to_subject_transform.h5" landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BLI, 'inputWeightFilename') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename', BLI, 'inputMovingLandmarkFilename') landmarkInitializeWF.connect(BCD, 'outputLandmarksInACPCAlignedSpace', BLI, 'inputFixedLandmarkFilename') ## This is for debugging purposes, and it is not intended for general use. if DoReverseInit == True: ######################################################## # Run BLI subject_to_atlas ######################################################## BLI2Atlas = pe.Node(interface=BRAINSLandmarkInitializer(), name="BLI2Atlas") BLI2Atlas.inputs.outputTransformFilename = "landmarkInitializer_subject_to_atlas_transform.h5" landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BLI2Atlas, 'inputWeightFilename') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename', BLI2Atlas, 'inputFixedLandmarkFilename') landmarkInitializeWF.connect(BCD, 'outputLandmarksInInputSpace', BLI2Atlas, 'inputMovingLandmarkFilename') Resample2Atlas = pe.Node(interface=BRAINSResample(), name="Resample2Atlas") Resample2Atlas.inputs.interpolationMode = "Linear" Resample2Atlas.inputs.outputVolume = "subject2atlas.nii.gz" landmarkInitializeWF.connect(inputsSpec, 'inputVolume', Resample2Atlas, 'inputVolume') landmarkInitializeWF.connect(BLI2Atlas, 'outputTransformFilename', Resample2Atlas, 'warpTransform') if (DoReverseInit == True) and (Debug == True): ResampleFromAtlas = pe.Node(interface=BRAINSResample(), name="ResampleFromAtlas") ResampleFromAtlas.inputs.interpolationMode = "Linear" ResampleFromAtlas.inputs.outputVolume = "atlas2subject.nii.gz" landmarkInitializeWF.connect(inputsSpec, 'atlasVolume', ResampleFromAtlas, 'inputVolume') landmarkInitializeWF.connect(BLI, 'outputTransformFilename', ResampleFromAtlas, 'warpTransform') landmarkInitializeWF.connect(BCD, 'outputResampledVolume', ResampleFromAtlas, 'referenceVolume') BROIAUTO = pe.Node(interface=BRAINSROIAuto(), name="BROIAuto_cropped") many_cpu_BROIAUTO_options_dictionary = {'qsub_args': modify_qsub_args(CLUSTER_QUEUE_LONG,4,2,4), 'overwrite': True} BROIAUTO.plugin_args = many_cpu_BROIAUTO_options_dictionary BROIAUTO.inputs.outputVolume = "Cropped_BCD_ACPC_Aligned.nii.gz" BROIAUTO.inputs.ROIAutoDilateSize = 10 BROIAUTO.inputs.cropOutput = True landmarkInitializeWF.connect(BCD, 'outputResampledVolume', BROIAUTO, 'inputVolume') landmarkInitializeWF.connect(BROIAUTO, 'outputVolume', outputsSpec, 'outputResampledCroppedVolume') landmarkInitializeWF.connect(BCD, 'outputLandmarksInACPCAlignedSpace', outputsSpec, 'outputLandmarksInACPCAlignedSpace') landmarkInitializeWF.connect(BCD, 'outputResampledVolume', outputsSpec, 'outputResampledVolume') landmarkInitializeWF.connect(BCD, 'outputLandmarksInInputSpace', outputsSpec, 'outputLandmarksInInputSpace') landmarkInitializeWF.connect(BCD, 'outputTransform', outputsSpec, 'outputTransform') landmarkInitializeWF.connect(BCD, 'outputMRML', outputsSpec, 'outputMRML') landmarkInitializeWF.connect(BCD, 'writeBranded2DImage', outputsSpec, 'writeBranded2DImage') landmarkInitializeWF.connect(BLI, 'outputTransformFilename', outputsSpec, 'atlasToSubjectTransform') return landmarkInitializeWF
def test_BRAINSConstellationDetector_inputs(): input_map = dict(BackgroundFillValue=dict(argstr='--BackgroundFillValue %s', ), LLSModel=dict(argstr='--LLSModel %s', ), acLowerBound=dict(argstr='--acLowerBound %f', ), args=dict(argstr='%s', ), atlasLandmarkWeights=dict(argstr='--atlasLandmarkWeights %s', ), atlasLandmarks=dict(argstr='--atlasLandmarks %s', ), atlasVolume=dict(argstr='--atlasVolume %s', ), cutOutHeadInOutputVolume=dict(argstr='--cutOutHeadInOutputVolume ', ), debug=dict(argstr='--debug ', ), environ=dict(nohash=True, usedefault=True, ), forceACPoint=dict(argstr='--forceACPoint %s', sep=',', ), forceHoughEyeDetectorReportFailure=dict(argstr='--forceHoughEyeDetectorReportFailure ', ), forcePCPoint=dict(argstr='--forcePCPoint %s', sep=',', ), forceRPPoint=dict(argstr='--forceRPPoint %s', sep=',', ), forceVN4Point=dict(argstr='--forceVN4Point %s', sep=',', ), houghEyeDetectorMode=dict(argstr='--houghEyeDetectorMode %d', ), ignore_exception=dict(nohash=True, usedefault=True, ), inputLandmarksEMSP=dict(argstr='--inputLandmarksEMSP %s', ), inputTemplateModel=dict(argstr='--inputTemplateModel %s', ), inputVolume=dict(argstr='--inputVolume %s', ), interpolationMode=dict(argstr='--interpolationMode %s', ), mspQualityLevel=dict(argstr='--mspQualityLevel %d', ), numberOfThreads=dict(argstr='--numberOfThreads %d', ), otsuPercentileThreshold=dict(argstr='--otsuPercentileThreshold %f', ), outputLandmarksInACPCAlignedSpace=dict(argstr='--outputLandmarksInACPCAlignedSpace %s', hash_files=False, ), outputLandmarksInInputSpace=dict(argstr='--outputLandmarksInInputSpace %s', hash_files=False, ), outputMRML=dict(argstr='--outputMRML %s', hash_files=False, ), outputResampledVolume=dict(argstr='--outputResampledVolume %s', hash_files=False, ), outputTransform=dict(argstr='--outputTransform %s', hash_files=False, ), outputUntransformedClippedVolume=dict(argstr='--outputUntransformedClippedVolume %s', hash_files=False, ), outputVerificationScript=dict(argstr='--outputVerificationScript %s', hash_files=False, ), outputVolume=dict(argstr='--outputVolume %s', hash_files=False, ), rVN4=dict(argstr='--rVN4 %f', ), rac=dict(argstr='--rac %f', ), rescaleIntensities=dict(argstr='--rescaleIntensities ', ), rescaleIntensitiesOutputRange=dict(argstr='--rescaleIntensitiesOutputRange %s', sep=',', ), resultsDir=dict(argstr='--resultsDir %s', hash_files=False, ), rmpj=dict(argstr='--rmpj %f', ), rpc=dict(argstr='--rpc %f', ), terminal_output=dict(nohash=True, ), trimRescaledIntensities=dict(argstr='--trimRescaledIntensities %f', ), verbose=dict(argstr='--verbose ', ), writeBranded2DImage=dict(argstr='--writeBranded2DImage %s', hash_files=False, ), writedebuggingImagesLevel=dict(argstr='--writedebuggingImagesLevel %d', ), ) inputs = BRAINSConstellationDetector.input_spec() for key, metadata in input_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(inputs.traits()[key], metakey), value
def test_BRAINSConstellationDetector_inputs(): input_map = dict( BackgroundFillValue=dict(argstr='--BackgroundFillValue %s', ), LLSModel=dict(argstr='--LLSModel %s', ), acLowerBound=dict(argstr='--acLowerBound %f', ), args=dict(argstr='%s', ), atlasLandmarkWeights=dict(argstr='--atlasLandmarkWeights %s', ), atlasLandmarks=dict(argstr='--atlasLandmarks %s', ), atlasVolume=dict(argstr='--atlasVolume %s', ), cutOutHeadInOutputVolume=dict(argstr='--cutOutHeadInOutputVolume ', ), debug=dict(argstr='--debug ', ), environ=dict( nohash=True, usedefault=True, ), forceACPoint=dict( argstr='--forceACPoint %s', sep=',', ), forceHoughEyeDetectorReportFailure=dict( argstr='--forceHoughEyeDetectorReportFailure ', ), forcePCPoint=dict( argstr='--forcePCPoint %s', sep=',', ), forceRPPoint=dict( argstr='--forceRPPoint %s', sep=',', ), forceVN4Point=dict( argstr='--forceVN4Point %s', sep=',', ), houghEyeDetectorMode=dict(argstr='--houghEyeDetectorMode %d', ), ignore_exception=dict( nohash=True, usedefault=True, ), inputLandmarksEMSP=dict(argstr='--inputLandmarksEMSP %s', ), inputTemplateModel=dict(argstr='--inputTemplateModel %s', ), inputVolume=dict(argstr='--inputVolume %s', ), interpolationMode=dict(argstr='--interpolationMode %s', ), mspQualityLevel=dict(argstr='--mspQualityLevel %d', ), numberOfThreads=dict(argstr='--numberOfThreads %d', ), otsuPercentileThreshold=dict(argstr='--otsuPercentileThreshold %f', ), outputLandmarksInACPCAlignedSpace=dict( argstr='--outputLandmarksInACPCAlignedSpace %s', hash_files=False, ), outputLandmarksInInputSpace=dict( argstr='--outputLandmarksInInputSpace %s', hash_files=False, ), outputMRML=dict( argstr='--outputMRML %s', hash_files=False, ), outputResampledVolume=dict( argstr='--outputResampledVolume %s', hash_files=False, ), outputTransform=dict( argstr='--outputTransform %s', hash_files=False, ), outputUntransformedClippedVolume=dict( argstr='--outputUntransformedClippedVolume %s', hash_files=False, ), outputVerificationScript=dict( argstr='--outputVerificationScript %s', hash_files=False, ), outputVolume=dict( argstr='--outputVolume %s', hash_files=False, ), rVN4=dict(argstr='--rVN4 %f', ), rac=dict(argstr='--rac %f', ), rescaleIntensities=dict(argstr='--rescaleIntensities ', ), rescaleIntensitiesOutputRange=dict( argstr='--rescaleIntensitiesOutputRange %s', sep=',', ), resultsDir=dict( argstr='--resultsDir %s', hash_files=False, ), rmpj=dict(argstr='--rmpj %f', ), rpc=dict(argstr='--rpc %f', ), terminal_output=dict(nohash=True, ), trimRescaledIntensities=dict(argstr='--trimRescaledIntensities %f', ), verbose=dict(argstr='--verbose ', ), writeBranded2DImage=dict( argstr='--writeBranded2DImage %s', hash_files=False, ), writedebuggingImagesLevel=dict( argstr='--writedebuggingImagesLevel %d', ), ) inputs = BRAINSConstellationDetector.input_spec() for key, metadata in input_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(inputs.traits()[key], metakey), value
def CreateLandmarkInitializeWorkflow(WFname, InterpolationMode, DoReverseInit=False, debug=False): landmarkInitializeWF = pe.Workflow(name=WFname) ############# inputsSpec = pe.Node(interface=IdentityInterface(fields=[ 'inputVolume', 'atlasLandmarkFilename', 'atlasWeightFilename', 'LLSModel', 'inputTemplateModel', 'atlasVolume' ]), run_without_submitting=True, name='inputspec') ############# outputsSpec = pe.Node(interface=IdentityInterface(fields=[ 'outputLandmarksInACPCAlignedSpace', 'outputResampledVolume', 'outputResampledCroppedVolume', 'outputLandmarksInInputSpace', 'writeBranded2DImage', 'outputTransform', 'outputMRML', 'atlasToSubjectTransform' ]), run_without_submitting=True, name='outputspec') ########################################################/ # Run ACPC Detect on first T1 Image - Base Image ######################################################## BCD = pe.Node(interface=BRAINSConstellationDetector(), name="BCD") ## Use program default BCD.inputs.inputTemplateModel = T1ACPCModelFile # BCD.inputs.outputVolume = "BCD_OUT" + "_ACPC_InPlace.nii.gz" #$# T1AcpcImageList BCD.inputs.outputTransform = "BCD" + "_Original2ACPC_transform.h5" BCD.inputs.outputResampledVolume = "BCD" + "_ACPC.nii.gz" BCD.inputs.outputLandmarksInInputSpace = "BCD" + "_Original.fcsv" BCD.inputs.outputLandmarksInACPCAlignedSpace = "BCD" + "_ACPC_Landmarks.fcsv" BCD.inputs.writeBranded2DImage = "BCD" + "_Branded2DQCimage.png" # BCD.inputs.outputMRML = "BCD" + "_Scene.mrml" BCD.inputs.interpolationMode = InterpolationMode BCD.inputs.houghEyeDetectorMode = 1 # Look for dark eyes like on a T1 image, 0=Look for bright eyes like in a T2 image BCD.inputs.acLowerBound = 80.0 # Chop the data set 80mm below the AC PC point. # Entries below are of the form: landmarkInitializeWF.connect(inputsSpec, 'inputVolume', BCD, 'inputVolume') landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BCD, 'atlasLandmarkWeights') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename', BCD, 'atlasLandmarks') landmarkInitializeWF.connect(inputsSpec, 'LLSModel', BCD, 'LLSModel') landmarkInitializeWF.connect(inputsSpec, 'inputTemplateModel', BCD, 'inputTemplateModel') landmarkInitializeWF.connect(inputsSpec, 'atlasVolume', BCD, 'atlasVolume') ######################################################## # Run BLI atlas_to_subject ######################################################## BLI = pe.Node(interface=BRAINSLandmarkInitializer(), name="BLI") BLI.inputs.outputTransformFilename = "landmarkInitializer_atlas_to_subject_transform.h5" landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BLI, 'inputWeightFilename') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename', BLI, 'inputMovingLandmarkFilename') landmarkInitializeWF.connect(BCD, 'outputLandmarksInACPCAlignedSpace', BLI, 'inputFixedLandmarkFilename') ## This is for debugging purposes, and it is not intended for general use. if DoReverseInit == True: ######################################################## # Run BLI subject_to_atlas ######################################################## BLI2Atlas = pe.Node(interface=BRAINSLandmarkInitializer(), name="BLI2Atlas") BLI2Atlas.inputs.outputTransformFilename = "landmarkInitializer_subject_to_atlas_transform.h5" landmarkInitializeWF.connect(inputsSpec, 'atlasWeightFilename', BLI2Atlas, 'inputWeightFilename') landmarkInitializeWF.connect(inputsSpec, 'atlasLandmarkFilename', BLI2Atlas, 'inputFixedLandmarkFilename') landmarkInitializeWF.connect(BCD, 'outputLandmarksInInputSpace', BLI2Atlas, 'inputMovingLandmarkFilename') Resample2Atlas = pe.Node(interface=BRAINSResample(), name="Resample2Atlas") Resample2Atlas.inputs.interpolationMode = "Linear" Resample2Atlas.inputs.outputVolume = "subject2atlas.nii.gz" landmarkInitializeWF.connect(inputsSpec, 'inputVolume', Resample2Atlas, 'inputVolume') landmarkInitializeWF.connect(BLI2Atlas, 'outputTransformFilename', Resample2Atlas, 'warpTransform') landmarkInitializeWF.connect(inputsSpec, 'atlasVolume', Resample2Atlas, 'referenceVolume') if (DoReverseInit == True) and (debug == True): ResampleFromAtlas = pe.Node(interface=BRAINSResample(), name="ResampleFromAtlas") ResampleFromAtlas.inputs.interpolationMode = "Linear" ResampleFromAtlas.inputs.outputVolume = "atlas2subject.nii.gz" landmarkInitializeWF.connect(inputsSpec, 'atlasVolume', ResampleFromAtlas, 'inputVolume') landmarkInitializeWF.connect(BLI, 'outputTransformFilename', ResampleFromAtlas, 'warpTransform') landmarkInitializeWF.connect(BCD, 'outputResampledVolume', ResampleFromAtlas, 'referenceVolume') BROIAUTO = pe.Node(interface=BRAINSROIAuto(), name="BROIAuto_cropped") BROIAUTO.inputs.outputVolume = "Cropped_BCD_ACPC_Aligned.nii.gz" BROIAUTO.inputs.ROIAutoDilateSize = 10 BROIAUTO.inputs.cropOutput = True landmarkInitializeWF.connect(BCD, 'outputResampledVolume', BROIAUTO, 'inputVolume') landmarkInitializeWF.connect(BROIAUTO, 'outputVolume', outputsSpec, 'outputResampledCroppedVolume') landmarkInitializeWF.connect(BCD, 'outputLandmarksInACPCAlignedSpace', outputsSpec, 'outputLandmarksInACPCAlignedSpace') landmarkInitializeWF.connect(BCD, 'outputResampledVolume', outputsSpec, 'outputResampledVolume') landmarkInitializeWF.connect(BCD, 'outputLandmarksInInputSpace', outputsSpec, 'outputLandmarksInInputSpace') landmarkInitializeWF.connect(BCD, 'outputTransform', outputsSpec, 'outputTransform') landmarkInitializeWF.connect(BCD, 'outputMRML', outputsSpec, 'outputMRML') landmarkInitializeWF.connect(BCD, 'writeBranded2DImage', outputsSpec, 'writeBranded2DImage') landmarkInitializeWF.connect(BLI, 'outputTransformFilename', outputsSpec, 'atlasToSubjectTransform') return landmarkInitializeWF