diff tools/myTools/bin/SFA_exp_attr.py @ 1:7e5c71b2e71f draft default tip

Uploaded
author laurenmarazzi
date Wed, 22 Dec 2021 16:00:34 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/myTools/bin/SFA_exp_attr.py	Wed Dec 22 16:00:34 2021 +0000
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+# -----------------------------------------------------------
+# SimulateAttractors.py
+## estimate experimental attractors
+## calculate the median of the resistant and vehicle attractors
+#-----------------------------------------------------------
+
+
+import os
+import numpy as np
+import pandas as pd
+import networkx as nx
+import random
+import sfa
+import csv
+import sys
+########INPUTS############
+
+fpath =  os.path.join(sys.argv[1]) #location of networkfile
+
+samples=pd.read_csv(sys.argv[2],index_col = 0) ##expression values for data
+
+class ThreeNodeCascade(sfa.base.Data):
+    def __init__(self):
+        super().__init__()
+        self._abbr = "TNC"
+        self._name = "A simple three node cascade"
+
+        signs = {'activates':1, 'inhibits':-1}
+        A, n2i, dg = sfa.read_sif(fpath, signs=signs, as_nx=True)
+        self._A = A
+        self._n2i = n2i
+        self._dg = dg
+        self._i2n = {idx: name for name, idx in n2i.items()}
+        
+    # end of def __init__
+# end of def class
+
+if __name__ == "__main__":
+## initalize parameters from SFA
+    data = ThreeNodeCascade()
+    algs = sfa.AlgorithmSet()
+    alg = algs.create('SP')
+    alg.data = data
+    alg.params.apply_weight_norm = True
+    alg.initialize()
+    alg.params.exsol_forbidden=True
+    alg.params.alpha=.9
+ 
+    netnodes= list(data.dg.nodes)               #get network node names
+    samples=samples.loc[list(set(netnodes) & set(samples.index))]
+    n = data.dg.number_of_nodes() #the number of nodes
+    b = np.zeros((n,))
+
+    
+    
+    logss=pd.DataFrame(index=samples.columns,columns=netnodes,copy=True)
+    pi=[]
+    for name, item in samples.iteritems(): #for each experimental sample
+        enodes=item.index.tolist()
+        for node in enodes:               # set initial state to sample norm exp value
+            b[data.n2i[node]]=float(str(item.loc[node]))
+        
+        x = alg.compute(b,pi)                      #Run SFA calculation
+        logss.loc[name,netnodes]=x[0]
+    logss=logss.astype(float).round(3)
+#write out nondisc tables  
+    logss.to_csv('attrs_exp.tsv', sep=' ',float_format='%.3f',index_label="name",chunksize=10000)