Source code for permute_ppi_network
#!/usr/bin/python
# Load required modules
import sys, os, networkx as nx
def parse_args(input_list=None):
# Parse arguments
import argparse
class Args: pass
args = Args()
description = 'Creates permuted networks for the given network.'
parser = argparse.ArgumentParser(description=description)
parser.add_argument('-n', '--network_edgelist', required=True,
help='PPI edgelist location.')
parser.add_argument('-o', '--output_dir', required=True,
help='Name of output directory.')
parser.add_argument('-q', '--Q', default=100, type=int,
help='Edge swap constant.')
parser.add_argument('-c', '--num_networks', default=100, type=int,
help='Number of permuted networks to create.')
parser.add_argument('-s', '--start_index', default=1, type=int,
help='Start index for name of permuted networks.')
parser.add_argument('-v', '--verbose', default=False, action='store_true',
help='Flag verbose mode.')
# If called from the command line, parse command line args.
if input_list: parser.parse_args(input_list, namespace=args)
else: parser.parse_args(namespace=args)
return args
[docs]def load_network(network_file): return nx.read_edgelist(network_file)
[docs]def permute_network(G, Q):
H = G.copy()
nx.double_edge_swap(H, nswap=Q*len( G.edges() ), max_tries=1e75)
return H
[docs]def run(args):
# Load network
G = load_network(args.network_edgelist)
if args.verbose:
print 'Input network has', len( G.edges() ), 'edges among', len(G.nodes()),
print 'nodes.\nPerforming', len( G.edges() ) * args.Q, 'edge swaps.'
# Make sure output directory exists
os.system('mkdir -p ' + args.output_dir)
# Permute network and output files
for i in range(args.num_networks):
if args.verbose:
sys.stdout.write('+')
sys.stdout.flush()
# Permute graph and output as an edge list
H = permute_network(G, args.Q)
filename = args.output_dir + "/" + str(i + args.start_index) + ".txt"
nx.write_edgelist(H, filename)
if args.verbose: print
if __name__ == "__main__": run(parse_args())