<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import sys
from collections import *
import csv
import copy
import networkx as nx
import json
import math
import GeneDirectedPathFinder2 as g
import CreateListToTest as cList
import collections
import matplotlib.pyplot as plt
from networkx.readwrite import json_graph
import pandas as pd


def Create_Pairs_And_Find_Paths_With_Repeats(listOfGenes, graph):
    
    geneCountsDict=collections.Counter([])    
    
    print "\n"
    
    c = 0
	
    listOfGenes=map(lambda x: x.upper(), listOfGenes)
	    
    listOfGenes=list(set(listOfGenes))
    
    listOfGenes=sorted(listOfGenes)
    	
    for i in range(len(listOfGenes)):
	
	for x in range(i+1, len(listOfGenes)):
	    
	    c+=1
	    
	    print("**********************************************************************\n")
	    print listOfGenes[i],"--", listOfGenes[x]
	    
	    geneList=g.Create_Path_Shortest(listOfGenes[i], listOfGenes[x], graph)
	    secondList=g.Create_Path_Shortest(listOfGenes[x], listOfGenes[i], graph)
        
	    try:
		for l in geneList:
		    geneCountsDict.update(l[1:-1])
	    except:
		print "no path"
	    #print c,"/",(len(listOfGenes)*(len(listOfGenes)-1)/2), "pairs\n"
	    
	    try:
		for l in secondList:
		    geneCountsDict.update(l[1:-1])
	    except:
		print "no path"
	    print c,"/",(len(listOfGenes)*(len(listOfGenes)-1)/2), "pairs\n"   
	
    print("**********************************************************************")
    print("\n")
    
    
    return geneCountsDict



def Normal_Betweenness_Calc(geneCountsDict, listOfGenes, graph):
    
    bcTotalDict={}
    bcDisAndTotalDict={}
    
    uniqueGenes=geneCountsDict.keys()
    uniqueGenes.extend(listOfGenes)
    
    subgraph=graph.subgraph(uniqueGenes)
    
    bcDiseaseDict=nx.betweenness_centrality(subgraph)
    
    scoreTotalDataFrame=pd.read_csv('../data/betweenness.csv')
    
    tempTotalListOfTuples = zip(scoreTotalDataFrame.name.values, scoreTotalDataFrame.betweenness.values)
    
    for x in tempTotalListOfTuples:
	
	bcTotalDict[x[0]]=x[1]
	
    for gene in bcDiseaseDict.keys():
	
	bcDisAndTotalDict[gene]=[bcTotalDict[gene], bcDiseaseDict[gene]]
	
    
    return bcDisAndTotalDict



def Sort_Exponent(geneCountsDict, bcDAT):
    bcComb={}
    
    for i in bcDAT.keys():
	
	#bcDAT is (genename: [Total bc, subgraph bc])
	bcComb[i]=((bcDAT[i][1]/bcDAT[i][0])**2)*geneCountsDict[i]*1000
	    
	if not bcComb[i]&gt;0:
	    
	    bcComb[i]=0
	    
    geneDataList=bcComb.items()
    geneDataList=sorted(geneDataList, key=lambda x: x[1])

    for x in range(len(geneDataList)):
	
	geneDataList[x]=[geneDataList[x][0],  geneDataList[x][1],  bcDAT[geneDataList[x][0]][1]*1000,  bcDAT[geneDataList[x][0]][0]*1000,  geneCountsDict[geneDataList[x][0]]]
    
    return geneDataList



def Sort_Subtract(geneCountsDict, bcDAT):
    bcComb={}

    for i in bcDAT.keys():
	
	bcComb[i]=((bcDAT[i][1]-bcDAT[i][0]))*1000
	    
	if not bcComb[i]&gt;0:
	    
	    bcComb[i]=0

    geneDataList=bcComb.items()
    geneDataList=sorted(geneDataList, key=lambda x: x[1])

    for x in range(len(geneDataList)):
	
	geneDataList[x]=[geneDataList[x][0],  geneDataList[x][1],  bcDAT[geneDataList[x][0]][1]*1000,  bcDAT[geneDataList[x][0]][0]*1000,  geneCountsDict[geneDataList[x][0]]]
    
    return geneDataList



def Sort_Divide(geneCountsDict, bcDAT):
    bcComb={}

    for i in bcDAT.keys():
	
	bcComb[i]=(bcDAT[i][1]/bcDAT[i][0])*1000
	    
	if not bcComb[i]&gt;0:
	    
	    bcComb[i]=0

    geneDataList=bcComb.items()
    geneDataList=sorted(geneDataList, key=lambda x: x[1])

    for x in range(len(geneDataList)):
	
	geneDataList[x]=[geneDataList[x][0],  geneDataList[x][1],  bcDAT[geneDataList[x][0]][1]*1000,  bcDAT[geneDataList[x][0]][0]*1000,  geneCountsDict[geneDataList[x][0]]]
    
    return geneDataList



def Filter_geneDataList(geneDataList, combF, disF, totalF, countF):

    return filter(lambda x: (x[1]&gt;combF) and (x[2]&gt;disF) and (x[3]&lt;totalF) and (x[4]&gt;countF), geneDataList)


def Check_Results(geneDataList,autism,bipolar,braindiseases,mood,behave,system,schizo,genes,listOfGenes):

    for item in geneDataList:
	
	print "\n("+item[0]+"): Score:", item[1],"   Disease BC:", item[2],"   Total BC:", item[3],"   Count:", item[4]
	
	if item[0] in genes:
	    
	    if item[0] in listOfGenes:
		
		print "    SEED"
		
	    if item[0] in autism:
		
		print "    AUTISM"
	    
	    if item[0] in bipolar:
			
		print "    BIPOLAR DISORDER"
		
	    if item[0] in schizo:
				
		print "    SCHIZOPHRENIA"
	    
	    if item[0] in braindiseases:
			
		print "    BRAIN DISEASES"
	    
	    if item[0] in behave:
				
		print "    NEURO BEHAVIORAL MANIFESTATION"
		
	    if item[0] in system:
				
		print "    NERVOUS SYSTEM DISEASE"
	    
	    if item[0] in mood:

		print "    MOOD DISORDER"
		
	else:
	
	    print "    VOID"
	    
	print "\n"
    
    

def Search_For_Gene_Data(listOfGenes, geneCountsDict, geneDataList, autism,bipolar,braindiseases,mood,behave,system,schizo,genes):

    isDone = False
    
    while isDone == False:

	    geneCheck = raw_input("\nEnter a gene to see its information: ").upper()
	    
	    if geneCountsDict[geneCheck]&gt;0:
		
		for item in geneDataList:
		    
		    if item[0]==geneCheck:
			
			print "\n("+item[0]+"): Score:", item[1],"   Disease BC:", item[2],"   Total BC:", item[3],"   Count:", item[4]
	
			if item[0] in genes:
			    
			    if item[0] in listOfGenes:
				
				print "    SEED"
				foundSeeds.append(item[0])
				
			    if item[0] in autism:
				
				print "    AUTISM"
			    
			    if item[0] in bipolar:
					
				print "    BIPOLAR DISORDER"
				
			    if item[0] in schizo:
						
				print "    SCHIZOPHRENIA"
			    
			    if item[0] in braindiseases:
					
				print "    BRAIN DISEASES"
			    
			    if item[0] in behave:
						
				print "    NEURO BEHAVIORAL MANIFESTATION"
				
			    if item[0] in system:
						
				print "    NERVOUS SYSTEM DISEASE"
			    
			    if item[0] in mood:

				print "    MOOD DISORDER"
				
			else:
			
			    print "    VOID"
	    
	    elif geneCheck == "SEED GENES" or geneCheck == "SG":
			
		for i in listOfGenes:
		
		    print i.upper()
		
	    elif geneCheck == 'DONE' or geneCheck=='QUIT' or geneCheck=='STOP' or geneCheck == 'D' or geneCheck=='Q' or geneCheck=='S':
		    
		isDone = True 
	    
	    else:

		print "The gene '"+ geneCheck+ "' did not appear in any path"



def sort(stype, geneCountsDict, bcDAT):
    
    if stype=='exp':
	geneDataList=Sort_Exponent(geneCountsDict, bcDAT)
    if stype=='sub':
	geneDataList=Sort_Subtract(geneCountsDict, bcDAT)    
    if stype=='div':
	geneDataList=Sort_Divide(geneCountsDict, bcDAT)   
	
    return geneDataList



def load():
    
    graph=g.PPI_Graph()
    
    listOfGenes=cList.Create_Test_List(graph)
    
    geneCountsDict=Create_Pairs_And_Find_Paths_With_Repeats(listOfGenes, graph)
    
    bcDAT=Normal_Betweenness_Calc(geneCountsDict, listOfGenes, graph)
    
    print "Loaded and analyzed data"
    
    return(listOfGenes, geneCountsDict, bcDAT)



def a(lists):

    listOfGenes, geneCountsDict, bcDAT=lists
    
    stype=raw_input("How would you like to sort? (exp, sub, div): ")
    
    geneDataList=sort(stype, geneCountsDict, bcDAT)
    
    filters=raw_input("Would you like to use filters? (yes/no): ")
    filters=filters.upper()
    
    if filters=='YES' or 'NO':
	
	combF=raw_input("\nScore Filter: ")
	disF=raw_input("\nDisease Specific BC Filter: ")
	totalF=raw_input("\nTotal BC Filter: ")
	countF=raw_input("\nCount Filter: ")
	filteredGeneDataList=Filter_geneDataList(geneDataList, combF, disF, totalF, countF)
    
    Check_Results(filteredGeneDataList, g.Read_Genes('../data/autism.txt'),  g.Read_Genes('../data/bipolar.txt'), g.Read_Genes('../data/checks/braindiseasescheck.txt'), g.Read_Genes('../data/checks/mooddisorderscheck.txt'), g.Read_Genes('../data/checks/nbehavecheck.txt'), g.Read_Genes('../data/checks/nervoussyscheck.txt'), g.Read_Genes('../data/schizo.txt'), g.Read_Genes('../data/checks/totalcheck.txt'), listOfGenes)
           
    Search_For_Gene_Data(listOfGenes, geneCountsDict, geneDataList, g.Read_Genes('../data/autism.txt'),  g.Read_Genes('../data/bipolar.txt'), g.Read_Genes('../data/checks/braindiseasescheck.txt'), g.Read_Genes('../data/checks/mooddisorderscheck.txt'), g.Read_Genes('../data/checks/nbehavecheck.txt'), g.Read_Genes('../data/checks/nervoussyscheck.txt'), g.Read_Genes('../data/schizo.txt'), g.Read_Genes('../data/checks/totalcheck.txt'))
    
def run():
    a(load())</pre></body></html>