Commit 282a71e7 by Mustafa Tekpinar

Added bfactor and max-bfactor-trace options to normweightmode

parent 7bd7fcd5
...@@ -128,6 +128,15 @@ if((normWeightMode=="max-trace-pc") | (normWeightMode=="max-pc-trace")){ ...@@ -128,6 +128,15 @@ if((normWeightMode=="max-trace-pc") | (normWeightMode=="max-pc-trace")){
trace<-append(trace, max(jet[row, "trace"], jet[row, "dfi"])) trace<-append(trace, max(jet[row, "trace"], jet[row, "dfi"]))
} }
} }
} else if ((normWeightMode=="max-trace-bfactor") | (normWeightMode=="max-bfactor-trace")){
print(paste("Using ", normWeightMode))
for (row in 1:nrow(jet)) {
if(sum(colnames(jet)=="traceMax")==1){
trace<-append(trace, max(jet[row, "traceMax"], jet[row, "bfactor"]))
}else{
trace<-append(trace, max(jet[row, "trace"], jet[row, "bfactor"]))
}
}
}else if ((normWeightMode=="max-trace-pc-cv")|(normWeightMode=="max-trace-cv-pc")){ }else if ((normWeightMode=="max-trace-pc-cv")|(normWeightMode=="max-trace-cv-pc")){
print(paste("Using ", normWeightMode)) print(paste("Using ", normWeightMode))
for (row in 1:nrow(jet)) { for (row in 1:nrow(jet)) {
...@@ -180,9 +189,14 @@ if((normWeightMode=="max-trace-pc") | (normWeightMode=="max-pc-trace")){ ...@@ -180,9 +189,14 @@ if((normWeightMode=="max-trace-pc") | (normWeightMode=="max-pc-trace")){
for (row in 1:nrow(jet)) { for (row in 1:nrow(jet)) {
trace<-append(trace, jet[row, "dfi"]) trace<-append(trace, jet[row, "dfi"])
} }
}else if (normWeightMode=="bfactor"){
print("Using only Bfactor values")
for (row in 1:nrow(jet)) {
trace<-append(trace, jet[row, "bfactor"])
}
}else{ }else{
print("ERROR: Unknown --normWeightMode selected!") print("ERROR: Unknown --normWeightMode selected!")
print("It can only be 'trace', 'pc', 'cv', 'dfi', 'max-trace-pc', 'max-trace-cv', 'max-trace-pc-cv' or 'half-cv+pc'!") print("It can only be 'trace', 'pc', 'cv', 'dfi', 'bfactor', 'max-trace-pc', 'max-trace-cv', 'max-trace-pc-cv', 'half-cv+pc', 'max-trace-dfi' or 'max-trace-bfactor'!")
} }
print(trace) print(trace)
...@@ -219,7 +233,7 @@ print(paste("Reading frequencies:")) ...@@ -219,7 +233,7 @@ print(paste("Reading frequencies:"))
for (row in 1:nrow(jet)) { for (row in 1:nrow(jet)) {
frequencies<-append(frequencies, jet[row, "freq"] ) frequencies<-append(frequencies, jet[row, "freq"] )
} }
print(frequencies) #print(frequencies)
freq_mean = mean(frequencies) freq_mean = mean(frequencies)
#alpha = 0.6 #alpha = 0.6
...@@ -238,7 +252,7 @@ for (row in 1:nrow(jet)) { ...@@ -238,7 +252,7 @@ for (row in 1:nrow(jet)) {
# alpha<-append(alpha, (1.0 - alpha_val)) # alpha<-append(alpha, (1.0 - alpha_val))
# } # }
# } # }
print(alpha) #print(alpha)
......
...@@ -21,7 +21,7 @@ from gemmeAnal import * ...@@ -21,7 +21,7 @@ from gemmeAnal import *
import pandas as pd import pandas as pd
def rankSortProteinData(dataArray): def rankSortProteinData(dataArray, inverted=True):
""" """
This function ranksorts protein data and converts it This function ranksorts protein data and converts it
to values [0,1.0]. to values [0,1.0].
...@@ -38,7 +38,10 @@ def rankSortProteinData(dataArray): ...@@ -38,7 +38,10 @@ def rankSortProteinData(dataArray):
normalizedRankedDataArray = rankdata(dataArray)/float(len(dataArray)) normalizedRankedDataArray = rankdata(dataArray)/float(len(dataArray))
# np.savetxt(outfile, np.array([dataArray, normalizedRankedDataArray]).T) # np.savetxt(outfile, np.array([dataArray, normalizedRankedDataArray]).T)
return (1.0 - normalizedRankedDataArray) if(inverted==True):
return (1.0 - normalizedRankedDataArray)
else:
return (normalizedRankedDataArray)
def calcPercentDFI(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted="true"): def calcPercentDFI(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted="true"):
""" """
...@@ -73,6 +76,68 @@ def calcPercentDFI(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted=" ...@@ -73,6 +76,68 @@ def calcPercentDFI(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted="
else: else:
return dfi return dfi
def calcBfactors(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted="true"):
"""
Calculate rank normalized dynamic flexibility index.
"""
#confProDy(auto_show=False)
structure = parsePDB(pdbfile)
calphas = structure.select('name CA')
anm = ANM('ANM')
anm.buildHessian(calphas)
if(nmodes==None):
anm.calcModes(n_modes='all')
else:
anm.calcModes(n_modes=int(nmodes))
bfactors = calcSqFlucts(anm)
percentBfactors = rankSortProteinData(bfactors, inverted=False)
if(attenuate.lower()=='true'):
percentBfactors = attenuateEndPoints(percentBfactors)
# if(outfile != None):
# np.savetxt(outfile, percentBfactors)
# else:
# np.savetxt(outfile, dfi)
if(ranksorted.lower()=='true'):
return percentBfactors
else:
return bfactors
def getBfactors(pdbfile, outfile, nmodes=None, attenuate="true", ranksorted="true"):
"""
Calculate rank normalized dynamic flexibility index.
"""
#confProDy(auto_show=False)
structure = parsePDB(pdbfile)
calphas = structure.select('name CA')
bfactors = calphas.getBetas()
percentBfactors = rankSortProteinData(bfactors, inverted=False)
if(attenuate.lower()=='true'):
percentBfactors = attenuateEndPoints(percentBfactors)
# if(outfile != None):
# np.savetxt(outfile, percentBfactors)
# else:
# np.savetxt(outfile, dfi)
if(ranksorted.lower()=='true'):
return percentBfactors
else:
return bfactors
def attenuateEndPoints(dfi): def attenuateEndPoints(dfi):
""" """
Reduce DFI on N and C terminals with a sigmoid function. Reduce DFI on N and C terminals with a sigmoid function.
...@@ -414,6 +479,7 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode, ...@@ -414,6 +479,7 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode,
(normWeightMode != 'cv') and \ (normWeightMode != 'cv') and \
(normWeightMode != 'pc') and \ (normWeightMode != 'pc') and \
(normWeightMode != 'dfi') and \ (normWeightMode != 'dfi') and \
(normWeightMode != 'bfactor') and \
(normWeightMode != 'max-trace-pc') and \ (normWeightMode != 'max-trace-pc') and \
(normWeightMode != 'max-pc-trace') and \ (normWeightMode != 'max-pc-trace') and \
(normWeightMode != 'max-pc-cv') and \ (normWeightMode != 'max-pc-cv') and \
...@@ -421,15 +487,18 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode, ...@@ -421,15 +487,18 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode,
(normWeightMode != 'max-trace-cv') and \ (normWeightMode != 'max-trace-cv') and \
(normWeightMode != 'max-cv-trace') and \ (normWeightMode != 'max-cv-trace') and \
(normWeightMode != 'max-trace-dfi') and \ (normWeightMode != 'max-trace-dfi') and \
(normWeightMode != 'max-trace-bfactor') and \
(normWeightMode != 'max-dfi-trace') and \ (normWeightMode != 'max-dfi-trace') and \
(normWeightMode != 'max-bfactor-trace') and \
(normWeightMode != 'max-trace-pc-cv') and \ (normWeightMode != 'max-trace-pc-cv') and \
(normWeightMode != 'max-trace-cv-pc') and \ (normWeightMode != 'max-trace-cv-pc') and \
(normWeightMode != 'half-pc+cv') and \ (normWeightMode != 'half-pc+cv') and \
(normWeightMode != 'half-cv+pc') and \ (normWeightMode != 'half-cv+pc') and \
(normWeightMode != 'max-trace-half-cv+pc') and \ (normWeightMode != 'max-trace-half-cv+pc') and \
(normWeightMode != 'max-trace-half-pc+cv')): (normWeightMode != 'max-trace-half-pc+cv')):
print("ERROR: normWeightMode can only be 'trace', 'cv', 'pc', 'dfi', \n"+\ print("ERROR: normWeightMode can only be 'trace', 'cv', 'pc', 'dfi', bfactor,\n"+\
" 'max-trace-pc', 'max-trace-dfi', 'max-pc-cv', "+\ " 'max-trace-pc', 'max-trace-dfi', 'max-pc-cv', "+\
" 'max-trace-bfactor'"+\
" 'max-trace-cv', 'max-trace-pc-cv'"+\ " 'max-trace-cv', 'max-trace-pc-cv'"+\
" 'half-cv+pc' or max-trace-half-cv+pc!") " 'half-cv+pc' or max-trace-half-cv+pc!")
sys.exit(-1) sys.exit(-1)
...@@ -460,18 +529,45 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode, ...@@ -460,18 +529,45 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode,
print("done") print("done")
#If a real pdb file is given, calculate dfi for the residues. #If a real pdb file is given, calculate dfi for the residues.
if((pdbfile != None) and ((normWeightMode=='dfi') or (normWeightMode=='max-trace-dfi') or (normWeightMode=='max-dfi-trace'))): if(((normWeightMode=='dfi') or (normWeightMode=='max-trace-dfi') or (normWeightMode=='max-dfi-trace'))):
print("Calculating %DFI data per residue!") if (pdbfile != None):
dfi = calcPercentDFI(pdbfile, outfile=None, nmodes=None, attenuate="true", ranksorted="true") print("ERROR: There is not any pdb file to calculate DFI.")
dfi = dfi sys.exit(-1)
df = pd.read_table(prot+"_jet.res") else:
print(df) print("Calculating %DFI data per residue!")
dfi = calcPercentDFI(pdbfile, outfile=None, nmodes=None, attenuate="true", ranksorted="true")
dfi = dfi
df = pd.read_table(prot+"_jet.res")
print(df)
df['dfi'] = dfi.round(4) df['dfi'] = dfi.round(4)
df.to_csv(prot+"_jet.res", header=True, index=None, sep='\t', mode='w') df.to_csv(prot+"_jet.res", header=True, index=None, sep='\t', mode='w')
print(df) print(df)
#If a real pdb file is given, calculate or get Bfactors for the residues.
if(((normWeightMode=='bfactor') or (normWeightMode=='max-trace-bfactor') or (normWeightMode=='max-bfactor-trace'))):
isCalc = False
if (pdbfile != None):
print("ERROR: There is not any pdb file to calculate or get Bfactors!")
sys.exit(-1)
else:
print("Calculating or getting Bfactor data per residue!")
if (isCalc):
bfactors = calcBfactors(pdbfile, outfile=None, nmodes=None, attenuate="true", ranksorted="true")
else:
bfactors = getBfactors(pdbfile, outfile=None, nmodes=None, attenuate="true", ranksorted="true")
bfactors = bfactors
df = pd.read_table(prot+"_jet.res")
print(df)
df['bfactor'] = bfactors.round(4)
df.to_csv(prot+"_jet.res", header=True, index=None, sep='\t', mode='w')
print(df)
launchPred(prot,inAli,mutFile, normWeightMode, alphabet) launchPred(prot,inAli,mutFile, normWeightMode, alphabet)
#Do Python plotting here #Do Python plotting here
...@@ -512,7 +608,7 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode, ...@@ -512,7 +608,7 @@ def doit(inAli,mutFile,retMet,bFile,fFile,n,N, jetfile, pdbfile, normWeightMode,
print(" Can not generate "+prot+"_normPred_evolCombi.png file!") print(" Can not generate "+prot+"_normPred_evolCombi.png file!")
print("done") print("done")
#cleanTheMess(prot,bFile,fFile, chainID=chains[0]) cleanTheMess(prot,bFile,fFile, chainID=chains[0])
def main(): def main():
......
...@@ -354,7 +354,6 @@ computePredSimple<-function(mat, distTrace, wt, thresh){ ...@@ -354,7 +354,6 @@ computePredSimple<-function(mat, distTrace, wt, thresh){
for(a in aa){ for(a in aa){
if(a!=wt[i]){ if(a!=wt[i]){
sel = which(mat[,i]==a) sel = which(mat[,i]==a)
<<<<<<< HEAD
# print(sel) # print(sel)
if(length(sel)>0){ if(length(sel)>0){
sortedDist=sort(distTrace[sel-1]) sortedDist=sort(distTrace[sel-1])
...@@ -367,9 +366,7 @@ computePredSimple<-function(mat, distTrace, wt, thresh){ ...@@ -367,9 +366,7 @@ computePredSimple<-function(mat, distTrace, wt, thresh){
} }
} }
=======
if(length(sel)>0){sortedDist=sort(distTrace[sel-1])} if(length(sel)>0){sortedDist=sort(distTrace[sel-1])}
>>>>>>> parent of bd075e8... Added mt.20.txt, namely full alphabet!
else{sortedDist = c()} else{sortedDist = c()}
res = c(res,findMinDist(sortedDist,thresh)) res = c(res,findMinDist(sortedDist,thresh))
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment