Source code for graphpype.pipelines.conmat_to_graph

"""
Pipeline to compute graph and modularity with radatools
"""
import nipype.pipeline.engine as pe

import nipype.interfaces.utility as niu


from graphpype.interfaces.bct import KCore
from graphpype.interfaces.radatools.rada import PrepRada, NetPropRada, CommRada
from graphpype.nodes.modularity import (ComputeNetList, ComputeNodeRoles,
                                        ComputeModuleMatProp)


[docs]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): """ 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
[docs]def create_pipeline_conmat_to_graph_threshold( main_path, pipeline_name="graph_thr_pipe", con_thr=1.0, multi=False, mod=True, plot=True, optim_seq="WS trfr 100", compute_ndi=False): """ Pipeline from connectivity matrices to graph analysis Threshold is value based (con_thr) Inputs (inputnode): * conmat_file * coords_file * labels_file """ # TODO Warning, need to be checked... # TODO Warning, should be merged with previous function # create_pipeline_conmat_to_graph_density # TODO plot=True is kept for sake of clarity but is now unused pipeline = pe.Workflow(name=pipeline_name) pipeline.base_dir = main_path inputnode = pe.Node(niu.IdentityInterface( fields=['conmat_file', 'coords_file', 'labels_file']), name='inputnode') if not multi: # density-based graphs # net_list compute_net_List = pe.Node( interface=ComputeNetList(), name='compute_net_List') compute_net_List.inputs.threshold = con_thr 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', iterfield=["net_List_file"]) 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', 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.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') else: # 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.threshold = con_thr 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') return pipeline
[docs]def create_pipeline_net_list_to_graph( main_path, pipeline_name="graph_net_pipe", multi=False, mod=True, plot=False, optim_seq="WS trfr 100", compute_ndi=False): """ Pipeline from net_List (txt file) to graph analysis Inputs (inputnode): * net_List_file * coords_file * labels_file Could be used in the previous functions (create_pipeline_conmat_to_graph_density and create_pipeline_conmat_to_graph_threshold) """ # TODO plot=True is kept for sake of clarity but is now unused pipeline = pe.Workflow(name=pipeline_name) pipeline.base_dir = main_path inputnode = pe.Node(niu.IdentityInterface( fields=['net_List_file', 'coords_file', 'labels_file']), name='inputnode') if not multi: # density-based graphs # prepare net_list for radatools processing prep_rada = pe.Node(interface=PrepRada(), name='prep_rada') prep_rada.inputs.network_type = "U" pipeline.connect(inputnode, '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') else: assert False, "Error, never tested" # density-based graphs # 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(inputnode, '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') return pipeline
# create_pipeline_bct_graph def create_pipeline_bct_graph( main_path, pipeline_name="graph_bct_pipe", con_den=1.0): """ Description: Pipeline for computing module based graph properties Threshold is density based Inputs (inputnode): * conmat_files """ # TODO plot=True is kept for sake of clarity but is now unused pipeline = pe.Workflow(name=pipeline_name) pipeline.base_dir = main_path # input node inputnode = pe.Node(niu.IdentityInterface( fields=['conmat_file']), name='inputnode') # compute binary version bin_mat = pe.Node(interface=ComputeNetList(export_np_bin=True, density=con_den), name="bin_mat") pipeline.connect(inputnode, 'conmat_file', bin_mat, 'Z_cor_mat_file') # compute K core k_core = pe.Node( interface=KCore(), name="k_core") k_core.inputs.is_directed = False pipeline.connect(bin_mat, 'np_bin_mat_file', k_core, 'np_mat_file') return pipeline # create_pipeline_graph_module_properties def create_pipeline_graph_module_properties( main_path, pipeline_name="graph_mod_pipe", con_den=1.0, multi=False, plot=True, export_excel=False): """ Description: Pipeline for computing module based graph properties Threshold is density based Inputs (inputnode): * conmat_files * lol_file """ # TODO plot=True is kept for sake of clarity but is now unused pipeline = pe.Workflow(name=pipeline_name) pipeline.base_dir = main_path # input node inputnode = pe.Node(niu.IdentityInterface( fields=['group_conmat_file', 'rada_lol_file', 'Pajek_net_file']), name='inputnode') # module to graph properties mod_graph = pe.Node( interface=ComputeModuleMatProp(), name="mod_graph") mod_graph.inputs.export_excel = export_excel pipeline.connect(inputnode, 'Pajek_net_file', mod_graph, 'Pajek_net_file') pipeline.connect(inputnode, 'rada_lol_file', mod_graph, 'rada_lol_file') pipeline.connect(inputnode, 'group_conmat_file', mod_graph, 'group_conmat_file') return pipeline