Mercurial > repos > laurenmarazzi > netisce_test
comparison tools/myTools/bin/SFA_virtscreen.py @ 1:7e5c71b2e71f draft default tip
Uploaded
author | laurenmarazzi |
---|---|
date | Wed, 22 Dec 2021 16:00:34 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:f24d4892aaed | 1:7e5c71b2e71f |
---|---|
1 #!/usr/bin/env python3 | |
2 import os | |
3 import numpy as np | |
4 import pandas as pd | |
5 import networkx as nx | |
6 import random | |
7 import sfa | |
8 import csv | |
9 from sys import argv | |
10 from sklearn.preprocessing import StandardScaler | |
11 import itertools | |
12 ########INPUTS############ | |
13 fpath = os.path.join( argv[1]) # location of networkfile | |
14 samples=pd.read_csv(argv[2],index_col = 0) # input samples (normexp initial states) | |
15 inits=argv[3] #the initial states of interest | |
16 | |
17 phenotypes = pd.read_csv(argv[4],delim_whitespace=True, index_col = False) | |
18 initz = phenotypes[phenotypes.isin([inits]).any(axis=1)]['name'].tolist() | |
19 samples = samples[initz] | |
20 | |
21 FC_nodes=open(argv[5]).read().strip().split('\n') # FC set | |
22 FC_perts=pd.read_csv(argv[6],delim_whitespace=True,index_col=0,header=0,names=FC_nodes) | |
23 | |
24 | |
25 class ThreeNodeCascade(sfa.base.Data): | |
26 def __init__(self): | |
27 super().__init__() | |
28 self._abbr = "TNC" | |
29 self._name = "A simple three node cascade" | |
30 | |
31 signs = {'activates':1, 'inhibits':-1} | |
32 A, n2i, dg = sfa.read_sif(fpath, signs=signs, as_nx=True) | |
33 self._A = A | |
34 self._n2i = n2i | |
35 self._dg = dg | |
36 self._i2n = {idx: name for name, idx in n2i.items()} | |
37 | |
38 # end of def __init__ | |
39 # end of def class | |
40 | |
41 if __name__ == "__main__": | |
42 ## initalize parameters from SFA | |
43 data = ThreeNodeCascade() | |
44 algs = sfa.AlgorithmSet() | |
45 alg = algs.create('SP') | |
46 alg.data = data | |
47 alg.params.apply_weight_norm = True | |
48 alg.initialize() | |
49 alg.params.exsol_forbidden=True | |
50 alg.params.alpha=0.9 | |
51 | |
52 | |
53 netnodes= list(data.dg.nodes) | |
54 | |
55 n = data.dg.number_of_nodes() #the number of nodes | |
56 b = np.zeros((n,)) | |
57 | |
58 alllogss=pd.DataFrame() | |
59 for name, item in samples.iteritems(): #for each simulated initial condition | |
60 logss=pd.DataFrame(index=FC_perts.index,columns=netnodes,copy=True) # create dataframe for the FC perturbations | |
61 enodes=item.index.tolist() # get expressed nodes | |
62 for node in enodes: # set initial state to simulated value | |
63 b[data.n2i[node]]=float(str(item.loc[node])) | |
64 for name2,item2 in FC_perts.iterrows(): # for each FCnode perturbation | |
65 pnode=item2.index.tolist() | |
66 pi = [] | |
67 for node in pnode: #if logFC.loc[node].at['logFC']>0: # if the logfc is postive (res > veh) | |
68 if int(item2.loc[node])==-1: #if the perturbation is 0 | |
69 if node in enodes: | |
70 b[data.n2i[node]]=float(str(item.loc[node]))-2.5*(float(str(item.loc[node]))) #downregulate the expression. fix to 0 | |
71 else: | |
72 b[data.n2i[node]]=-2.5 #downregulate the expression. fix to 0 | |
73 pi.append(data.n2i[node]) | |
74 if int(item2.loc[node])==1: #if the perturbation is 1 | |
75 if node in enodes: | |
76 b[data.n2i[node]]=float(str(item.loc[node]))+2.5*(float(str(item.loc[node]))) #upregulate the expression | |
77 else: | |
78 b[data.n2i[node]]=2.5 #upregulate the expression | |
79 pi.append(data.n2i[node]) | |
80 x = alg.compute(b,pi) # Run SFA calculation | |
81 logss.loc[name2,netnodes]=x[0] | |
82 logss=logss.astype(float).round(3) | |
83 alllogss=pd.concat([alllogss,logss],axis=0) | |
84 multi=pd.MultiIndex.from_product([samples.columns.tolist(),FC_perts.index.tolist()],names=['replicate', 'perturbation']) | |
85 alllogss.set_index(multi,inplace=True) | |
86 alllogss.to_csv('pert_logss.txt', sep=' ',float_format='%.3f',chunksize=10000) |