1
|
1 #!/usr/bin/env python3
|
|
2 # -----------------------------------------------------------
|
|
3 # SimulateAttractors.py
|
|
4 ## estimate experimental attractors
|
|
5 ## calculate the median of the resistant and vehicle attractors
|
|
6 #-----------------------------------------------------------
|
|
7
|
|
8
|
|
9 import os
|
|
10 import numpy as np
|
|
11 import pandas as pd
|
|
12 import networkx as nx
|
|
13 import random
|
|
14 import sfa
|
|
15 import csv
|
|
16 import sys
|
|
17 ########INPUTS############
|
|
18
|
|
19 fpath = os.path.join(sys.argv[1]) #location of networkfile
|
|
20
|
|
21 samples=pd.read_csv(sys.argv[2],index_col = 0) ##expression values for data
|
|
22
|
|
23 class ThreeNodeCascade(sfa.base.Data):
|
|
24 def __init__(self):
|
|
25 super().__init__()
|
|
26 self._abbr = "TNC"
|
|
27 self._name = "A simple three node cascade"
|
|
28
|
|
29 signs = {'activates':1, 'inhibits':-1}
|
|
30 A, n2i, dg = sfa.read_sif(fpath, signs=signs, as_nx=True)
|
|
31 self._A = A
|
|
32 self._n2i = n2i
|
|
33 self._dg = dg
|
|
34 self._i2n = {idx: name for name, idx in n2i.items()}
|
|
35
|
|
36 # end of def __init__
|
|
37 # end of def class
|
|
38
|
|
39 if __name__ == "__main__":
|
|
40 ## initalize parameters from SFA
|
|
41 data = ThreeNodeCascade()
|
|
42 algs = sfa.AlgorithmSet()
|
|
43 alg = algs.create('SP')
|
|
44 alg.data = data
|
|
45 alg.params.apply_weight_norm = True
|
|
46 alg.initialize()
|
|
47 alg.params.exsol_forbidden=True
|
|
48 alg.params.alpha=.9
|
|
49
|
|
50 netnodes= list(data.dg.nodes) #get network node names
|
|
51 samples=samples.loc[list(set(netnodes) & set(samples.index))]
|
|
52 n = data.dg.number_of_nodes() #the number of nodes
|
|
53 b = np.zeros((n,))
|
|
54
|
|
55
|
|
56
|
|
57 logss=pd.DataFrame(index=samples.columns,columns=netnodes,copy=True)
|
|
58 pi=[]
|
|
59 for name, item in samples.iteritems(): #for each experimental sample
|
|
60 enodes=item.index.tolist()
|
|
61 for node in enodes: # set initial state to sample norm exp value
|
|
62 b[data.n2i[node]]=float(str(item.loc[node]))
|
|
63
|
|
64 x = alg.compute(b,pi) #Run SFA calculation
|
|
65 logss.loc[name,netnodes]=x[0]
|
|
66 logss=logss.astype(float).round(3)
|
|
67 #write out nondisc tables
|
|
68 logss.to_csv('attrs_exp.tsv', sep=' ',float_format='%.3f',index_label="name",chunksize=10000)
|