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
Exemple #2
0
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
Exemple #5
0
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
Exemple #6
0
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