예제 #1
0
def create_pipeline_conmat_to_graph_density(
        main_path, pipeline_name="graph_den_pipe", con_den=1.0, multi=False,
        mod=True, plot=False, optim_seq="WS trfr 100", compute_ndi=False):
    """
    Description:

    Pipeline from connectivity matrices to graph analysis

    Threshold is density based

    Inputs (inputnode):

        * conmat_file
        * coords_file
        * labels_file
    """
    # TODO plot=True is kept for sake of clarity but is now unused
    pipeline = pe.Workflow(name=pipeline_name + "_den_" +
                           str(con_den).replace(".", "_"))
    pipeline.base_dir = main_path

    inputnode = pe.Node(niu.IdentityInterface(
        fields=['conmat_file', 'coords_file', 'labels_file']),
            name='inputnode')

    if multi:

        # density-based graphs

        # net_list
        compute_net_List = pe.MapNode(interface=ComputeNetList(
        ), name='compute_net_List', iterfield=["Z_cor_mat_file"])
        compute_net_List.inputs.density = con_den

        pipeline.connect(inputnode, 'conmat_file',
                         compute_net_List, 'Z_cor_mat_file')

        # radatools

        # prepare net_list for radatools processing
        prep_rada = pe.MapNode(interface=PrepRada(),
                               name='prep_rada', iterfield=["net_List_file"])
        prep_rada.inputs.network_type = "U"

        pipeline.connect(compute_net_List, 'net_List_file',
                         prep_rada, 'net_List_file')

        if mod:

            # compute community with radatools
            community_rada = pe.MapNode(interface=CommRada(
            ), name='community_rada', iterfield=["Pajek_net_file"])
            community_rada.inputs.optim_seq = optim_seq

            pipeline.connect(prep_rada, 'Pajek_net_file',
                             community_rada, 'Pajek_net_file')

            # node roles
            node_roles = pe.MapNode(
                interface=ComputeNodeRoles(role_type="4roles"),
                name='node_roles',
                iterfield=['Pajek_net_file', 'rada_lol_file'])

            pipeline.connect(prep_rada, 'Pajek_net_file',
                             node_roles, 'Pajek_net_file')
            pipeline.connect(community_rada, 'rada_lol_file',
                             node_roles, 'rada_lol_file')

            node_roles.inputs.compute_ndi = compute_ndi

        # compute network properties with rada
        net_prop = pe.MapNode(interface=NetPropRada(
            optim_seq="A"), name='net_prop', iterfield=["Pajek_net_file"])

        pipeline.connect(prep_rada, 'Pajek_net_file',
                         net_prop, 'Pajek_net_file')
    else:

        # density-based graphs

        # net_list
        compute_net_List = pe.Node(
            interface=ComputeNetList(), name='compute_net_List')
        compute_net_List.inputs.density = con_den

        pipeline.connect(inputnode, 'conmat_file',
                         compute_net_List, 'Z_cor_mat_file')

        # radatools

        # prepare net_list for radatools processing
        prep_rada = pe.Node(interface=PrepRada(), name='prep_rada')
        prep_rada.inputs.network_type = "U"

        pipeline.connect(compute_net_List, 'net_List_file',
                         prep_rada, 'net_List_file')

        if mod:

            # compute community with radatools
            community_rada = pe.Node(
                interface=CommRada(), name='community_rada')
            community_rada.inputs.optim_seq = optim_seq

            pipeline.connect(prep_rada, 'Pajek_net_file',
                             community_rada, 'Pajek_net_file')

            # node roles
            node_roles = pe.Node(interface=ComputeNodeRoles(
                role_type="4roles"), name='node_roles')

            pipeline.connect(prep_rada, 'Pajek_net_file',
                             node_roles, 'Pajek_net_file')
            pipeline.connect(community_rada, 'rada_lol_file',
                             node_roles, 'rada_lol_file')

            node_roles.inputs.compute_ndi = compute_ndi

        # compute network properties with rada
        net_prop = pe.Node(interface=NetPropRada(
            optim_seq="A"), name='net_prop')

        pipeline.connect(prep_rada, 'Pajek_net_file',
                         net_prop, 'Pajek_net_file')

    return pipeline