about summary refs log tree commit diff
path: root/server.py
diff options
context:
space:
mode:
authorgunturkunhakan2021-06-05 14:17:13 -0500
committergunturkunhakan2021-06-05 14:17:13 -0500
commit0f25bb35ac3467418aa17fcccf37e704e3eb8934 (patch)
treec7581fc1ec2fc58a7562a7b682a90bf44d4c29b0 /server.py
parent6235fb58955e2bc193d6ce40a4d74b33ab47dfce (diff)
downloadgenecup-0f25bb35ac3467418aa17fcccf37e704e3eb8934.tar.gz
changes in custom ontology and search
Diffstat (limited to 'server.py')
-rwxr-xr-xserver.py142
1 files changed, 74 insertions, 68 deletions
diff --git a/server.py b/server.py
index b821799..519eedf 100755
--- a/server.py
+++ b/server.py
@@ -140,10 +140,13 @@ def login():
             session['name'] = found_user.name
             session['id'] = found_user.id
             flash("Login Succesful!")
+            ontoarchive()
+            onto_len_dir = session['onto_len_dir']
+            onto_list = session['onto_list']
         else:
             flash("Invalid username or password!", "inval")
             return render_template('signup.html')
- 
+    print(onto_list)
     return render_template('index.html',onto_len_dir=onto_len_dir, onto_list=onto_list, ontol = 'addiction', dict_onto = dict_onto)
 
 
@@ -169,13 +172,15 @@ def signup():
         session['name'] = name
         password = bcrypt.hashpw(password.encode('utf8'), bcrypt.gensalt())
         user = users(name=name, email=email, password = password)       
-
         if found_user:
             session['email'] = found_user.email
             session['hashed_email'] = hashlib.md5(session['email'] .encode('utf-8')).hexdigest()
             session['id'] = found_user.id
             found_user.name = name
             db.session.commit()
+            ontoarchive()
+            onto_len_dir = session['onto_len_dir']
+            onto_list = session['onto_list']
         else:
             db.session.add(user)
             db.session.commit()
@@ -204,13 +209,16 @@ def signin():
 
         if (found_user and (bcrypt.checkpw(password.encode('utf8'), found_user.password))):
             session['email'] = found_user.email
-            session['hashed_email'] = hashlib.md5(session['email'] .encode('utf-8')).hexdigest()
+            session['hashed_email'] = hashlib.md5(session['email'].encode('utf-8')).hexdigest()
             session['name'] = found_user.name
             session['id'] = found_user.id
             flash("Login Succesful!")
-            onto_len_dir = 0
-            onto_list = ''
+            #onto_len_dir = 0
+            #onto_list = ''
             onto_cont=open("addiction.onto","r").read()
+            ontoarchive()
+            onto_len_dir = session['onto_len_dir']
+            onto_list = session['onto_list']
             dict_onto=ast.literal_eval(onto_cont)
             return render_template('index.html', onto_len_dir=onto_len_dir, onto_list=onto_list, ontol = 'addiction', dict_onto = dict_onto)
         else:
@@ -741,7 +749,6 @@ def progress():
 
     for gen in genes:
         genes_session += str(gen) + "_"
-
     genes_session = genes_session[:-1]
     session['query']=genes
     return render_template('progress.html', url_in="search", url_out="cytoscape/?rnd="+rnd+"&genequery="+genes_session)
@@ -750,12 +757,12 @@ def progress():
 @app.route("/search")
 def search():
     genes=session['query']
-    percent_ratio=len(genes)
+    percent_ratio=len(genes)+1
 
     if(len(genes)==1):
         percent_ratio=2
     timeextension=session['timeextension']
-    percent=round(100/percent_ratio*8,1) # 7 categories + 1 at the beginning
+    percent=round(100/percent_ratio,1)-1 # 7 categories + 1 at the beginning
 
     if ('email' in session):
         sessionpath = session['path_user'] + timeextension
@@ -777,7 +784,6 @@ def search():
     nodecolor={}
     nodecolor['GWAS'] = "hsl(0, 0%, 70%)"
     nodes_list = []
-    nodes_list_for_gwas = []
 
     if 'namecat' in session:
         namecat_flag=1
@@ -786,8 +792,6 @@ def search():
         dict_onto=ast.literal_eval(onto_cont)
 
         for ky in dict_onto.keys():
-            for nd_g in dict_onto[ky]:
-                nodes_list_for_gwas.append(nd_g)
             nodecolor[ky] = "hsl("+str((n_num+1)*int(360/len(dict_onto.keys())))+", 70%, 80%)"
             d["nj{0}".format(n_num)]=generate_nodes_json(dict_onto[ky],str(ky),nodecolor[ky])
             n_num+=1
@@ -802,8 +806,6 @@ def search():
     else:
         namecat_flag=0
         for ky in dictionary.keys():
-            for nd_g in dictionary[ky]:
-                nodes_list_for_gwas.append(nd_g)
             nodecolor[ky] = "hsl("+str((n_num+1)*int(360/len(dictionary.keys())))+", 70%, 80%)"
             d["nj{0}".format(n_num)]=generate_nodes_json(dictionary[ky],str(ky),nodecolor[ky])
             n_num+=1
@@ -826,9 +828,8 @@ def search():
             progress=0
             searchCnt=0
             nodesToHide=str()
-            json_edges = str()
-            progress+=percent            
-            genes_or = ' or '.join(genes)
+            json_edges = str()           
+            #genes_or = ' [tiab] or '.join(genes)
             all_d=''
 
             if namecat_flag==1:
@@ -837,7 +838,6 @@ def search():
 
                 for ky in dict_onto.keys():
                     if (ky in search_type):
-                        ls_plural = list(dict_onto[ky].values())
                         all_d_ls=undic(list(dict_onto[ky].values()))
                         all_d = all_d+'|'+all_d_ls
             else:
@@ -846,23 +846,24 @@ def search():
                         all_d_ls=undic(list(dictionary[ky].values()))
                         all_d = all_d+'|'+all_d_ls
             all_d=all_d[1:]
-            abstracts_raw = getabstracts(genes_or,all_d)
+            if ("GWAS" in search_type):
+                datf = pd.read_csv('./utility/gwas_used.csv',sep='\t')
             progress+=percent
-            sentences_ls=[]
-
-            for row in abstracts_raw.split("\n"):
-                tiab=row.split("\t")
-                pmid = tiab.pop(0)
-                tiab= " ".join(tiab)
-                sentences_tok = sent_tokenize(tiab)
-                for sent_tok in sentences_tok:
-                    sent_tok = pmid + ' ' + sent_tok
-                    sentences_ls.append(sent_tok)
+            yield "data:"+str(progress)+"\n\n"
             for gene in genes:
+                abstracts_raw = getabstracts(gene,all_d)
+                sentences_ls=[]
+
+                for row in abstracts_raw.split("\n"):
+                    tiab=row.split("\t")
+                    pmid = tiab.pop(0)
+                    tiab= " ".join(tiab)
+                    sentences_tok = sent_tokenize(tiab)
+                    for sent_tok in sentences_tok:
+                        sent_tok = pmid + ' ' + sent_tok
+                        sentences_ls.append(sent_tok)
                 gene=gene.replace("-"," ")
-                # report progress immediately
-                progress+=percent
-                yield "data:"+str(progress)+"\n\n"
+                
                 geneEdges = ""
 
                 if namecat_flag==1:
@@ -872,53 +873,58 @@ def search():
                     dict_onto = dictionary
 
                 for ky in dict_onto.keys():
-                    if (ky=='addiction') and ('addiction' in dict_onto.keys())\
-                        and ('drug' in dict_onto.keys()) and ('addiction' in dict_onto['addiction'].keys())\
-                        and ('aversion' in dict_onto['addiction'].keys()) and ('intoxication' in dict_onto['addiction'].keys()):
-                        #addiction terms must present with at least one drug
-                        addiction_flag=1
-                        #addiction=undic0(addiction_d) +") AND ("+undic0(drug_d)
-                        sent=gene_category(gene, addiction_d, "addiction", sentences_ls,addiction_flag,dict_onto)
-                        if ('addiction' in search_type):
-                            geneEdges += generate_edges(sent, tf_name)
-                            json_edges += generate_edges_json(sent, tf_name)
-                    else:
-                        addiction_flag=0
-                        if namecat_flag==1:
-                            onto_cont = open(ses_namecat+".onto","r").read()
-                            dict_onto=ast.literal_eval(onto_cont)
-                            #ky_d=undic(list(dict_onto[ky].values()))    
-                            sent=gene_category(gene,ky,str(ky), sentences_ls, addiction_flag,dict_onto)
-                            
+                    if (ky in search_type):
+                        if (ky=='addiction') and ('addiction' in dict_onto.keys())\
+                            and ('drug' in dict_onto.keys()) and ('addiction' in dict_onto['addiction'].keys())\
+                            and ('aversion' in dict_onto['addiction'].keys()) and ('intoxication' in dict_onto['addiction'].keys()):
+                            #addiction terms must present with at least one drug
+                            addiction_flag=1
+                            #addiction=undic0(addiction_d) +") AND ("+undic0(drug_d)
+                            sent=gene_category(gene, addiction_d, "addiction", sentences_ls,addiction_flag,dict_onto)
+                            if ('addiction' in search_type):
+                                geneEdges += generate_edges(sent, tf_name)
+                                json_edges += generate_edges_json(sent, tf_name)
                         else:
-                            ky_d=undic(list(dict_onto[ky].values()))
-                            sent=gene_category(gene,ky,str(ky), sentences_ls, addiction_flag,dict_onto)
-                        progress+=percent
-                        yield "data:"+str(progress)+"\n\n"
-                        if (ky in search_type):
+                            addiction_flag=0
+                            if namecat_flag==1:
+                                onto_cont = open(ses_namecat+".onto","r").read()
+                                dict_onto=ast.literal_eval(onto_cont)
+                                #ky_d=undic(list(dict_onto[ky].values()))    
+                                sent=gene_category(gene,ky,str(ky), sentences_ls, addiction_flag,dict_onto)
+                            
+                            else:
+                                #ky_d=undic(list(dict_onto[ky].values()))
+                                sent=gene_category(gene,ky,str(ky), sentences_ls, addiction_flag,dict_onto)
+                            yield "data:"+str(progress)+"\n\n"
+                            
                             geneEdges += generate_edges(sent, tf_name)
                             json_edges += generate_edges_json(sent, tf_name)                
-                    sentences+=sent
+                        sentences+=sent
                 if ("GWAS" in search_type):
                     gwas_sent=[]
-                    for nd in nodes_list_for_gwas:
-                        gwas_text=''
-                        datf = pd.read_csv('./utility/gwas_used.csv',sep='\t')
-                        datf_sub = datf[datf['DISEASE/TRAIT'].str.contains(nd,regex=False, case=False, na=False)
-                            & (datf['REPORTED GENE(S)'].str.contains(gene,regex=False, case=False, na=False)
-                            | (datf['MAPPED_GENE'].str.contains(gene,regex=False, case=False, na=False)))]
-                        
-                        if not datf_sub.empty:
-                            for index, row in datf_sub.iterrows():
-                                gwas_text = "SNP:<b>"+str(row['SNPS'])+"</b>, P value: <b>"+str(row['P-VALUE'])\
-                                    +"</b>, Disease/trait:<b> "+str(row['DISEASE/TRAIT'])+"</b>, Mapped trait:<b> "\
-                                    +str(row['MAPPED_TRAIT'])+"</b><br>"
-                                gwas_sent.append(gene+"\t"+"GWAS"+"\t"+nd+"_GWAS\t"+str(row['PUBMEDID'])+"\t"+gwas_text)
+                    datf_sub1 = datf[datf['REPORTED GENE(S)'].str.contains('(?:\s|^)'+gene+'(?:\s|$)', flags=re.IGNORECASE)
+                                    | (datf['MAPPED_GENE'].str.contains('(?:\s|^)'+gene+'(?:\s|$)', flags=re.IGNORECASE))]
+                    for nd2 in dict_onto['GWAS'].keys():
+                        for nd1 in dict_onto['GWAS'][nd2]:    
+                            for nd in nd1.split('|'):
+                                gwas_text=''
+                                datf_sub = datf_sub1[datf_sub1['DISEASE/TRAIT'].str.contains('(?:\s|^)'+nd+'(?:\s|$)', flags=re.IGNORECASE)]
+                                    #& (datf['REPORTED GENE(S)'].str.contains('(?:\s|^)'+gene+'(?:\s|$)', flags=re.IGNORECASE)
+                                    #| (datf['MAPPED_GENE'].str.contains('(?:\s|^)'+gene+'(?:\s|$)', flags=re.IGNORECASE)))]
+                                if not datf_sub.empty:
+                                    for index, row in datf_sub.iterrows():
+                                        gwas_text = "SNP:<b>"+str(row['SNPS'])+"</b>, P value: <b>"+str(row['P-VALUE'])\
+                                            +"</b>, Disease/trait:<b> "+str(row['DISEASE/TRAIT'])+"</b>, Mapped trait:<b> "\
+                                            +str(row['MAPPED_TRAIT'])+"</b><br>"
+                                        gwas_sent.append(gene+"\t"+"GWAS"+"\t"+nd+"_GWAS\t"+str(row['PUBMEDID'])+"\t"+gwas_text)
                     cys, gwas_json, sn_file = searchArchived('GWAS', gene , 'json',gwas_sent, path_user)
                     with open(path_user+"gwas_results.tab", "w") as gwas_edges:
                         gwas_edges.write(sn_file)
                     geneEdges += cys
                     json_edges += gwas_json  
+                # report progress immediately
+                progress+=percent
+                yield "data:"+str(progress)+"\n\n"
                                     
                 if len(geneEdges) >0:
                     edges+=geneEdges