Not sure how I should share the code, but I have the below now working.
Now I need to merge overlapping peaks into ambiguous ones:
I am doing something like this:
pk1.ppmPositions=tuple([(pk1.ppmPositions[i]*pk1.height+pk2.ppmPositions[i]*pk2.height)/(pk1.height+pk2.height) for i in range(3)])
pk1.assignments=pk1.assignments+pk2.assignments
pk2.delete()
However, sometimes when I try to do this:
print(pk1.assignments)
it gives me an error message, but not always:
AttributeError Traceback (most recent call last)
Input In [80], in <cell line: 1>()
6 pk1.assignments=pk1.assignments+pk2.assignments
7 pk2.delete()
----> 8 print(pk1.assignments)
9 n-=1
10 j=0
File ~/programs/ccpnmr3.1.1/src/python/ccpn/core/Peak.py:617, in Peak.assignedNmrAtoms(self)
615 data2Obj = self._project._data2Obj
616 apiPeak = self._wrappedData
→ 617 peakDims = apiPeak.sortedPeakDims()
618 mainPeakDimContribs = [sorted(x.mainPeakDimContribs, key=operator.attrgetter(‘serial’))
619 for x in peakDims]
620 result = []
AttributeError: ‘NoneType’ object has no attribute ‘sortedPeakDims’
Code below:
import pandas as pd
def get_possible_HN_noes(sePid,model_number):
try:
se = get(sePid)
except:
print(“cannot open model %s”%(sePid))
chain = “A”
model1=se.data[se.data.modelNumber==model_number]
noelist1=[]
for amide in model1[model1.atomName==“H”].values:
xyz1=amide[9:12]
atname1=amide[[3,5,6]]
atname1[0]+=18
pidstringH=“NA:%s.%i.%s.H”%(chain,atname1[0],atname1[1])
pidstringN=“NA:%s.%i.%s.N”%(chain,atname1[0],atname1[1])
for proton in model1[model1.element==“H”].values:
xyz2=proton[9:12]
dist=(sum(((xyz1-xyz2)**2)))**0.5
if dist<6:
atname_full=proton[[3,5,6]]
atname_full[0]+=18
pidstring=“NA:%s.%i.%s.%s”%(chain,atname_full[0],atname_full[1],atname_full[2])
noelist1.append([pidstringH,pidstringN,pidstring,dist])
df=pd.DataFrame(data=noelist1, index = [i for i in range(len(noelist1))], columns=[“pidstringHn”,“pidstringN”,“pidstringH”,“distance”])
project.newDataTable(name=“noeList”, data=df)
return
def get_possible_HN_noes_pdb(pdbstring,model_number):
try:
se=application.loadData(pdbstring)
#try: se=get(sePid)
except:print("cannot open model %s"%(pdbstring))
chain="A"
model1=se.data[se.data.modelNumber==model_number]
noelist1=[]
for amide in model1[model1.atomName=="H"].values:
xyz1=amide[9:12]
atname1=amide[[3,5,6]]
atname1[0]+=18
pidstringH="NA:%s.%i.%s.H"%(chain,atname1[0],atname1[1])
pidstringN="NA:%s.%i.%s.N"%(chain,atname1[0],atname1[1])
for proton in model1[model1.element=="H"].values:
xyz2=proton[9:12]
dist=(sum(((xyz1-xyz2)**2)))**0.5
if dist<6:
atname_full=proton[[3,5,6]]
atname_full[0]+=18
pidstring="NA:%s.%i.%s.%s"%(chain,atname_full[0],atname_full[1],atname_full[2])
noelist1.append([pidstringH,pidstringN,pidstring,dist])
df=pd.DataFrame(data=noelist1,index=[i for i in range(len(noelist1))],columns=["pidstringHn","pidstringN","pidstringH","distance"])
project.newDataTable(name="noeList", data=df)
return
def get_noe_chemical_shift_positions(pidstringH,pidstringN,pidstring,csl):
#print(pidstringH)
HNshift=csl.getChemicalShift(get(pidstringH)).value
#except:print(pidstringH);return
Nshift=csl.getChemicalShift(get(pidstringN)).value
#except:print(pidstringN);return
#print(Nshift)
teststrings=["%",“x”,“y”]
Hshifts=[];Hnames=[]
#print(pidstring)
Hsh=csl.getChemicalShift(get(pidstring))
#print(Hsh)
if Hsh!=None:
Hshifts.append(Hsh.value)
Hnames.append(pidstring)
headstring="fdlihg "
else:
#print(pidstring)
headstring=pidstring[0:-1]
for test in teststrings:
teststring=headstring+test
try:
Hshifts.append(csl.getChemicalShift(get(teststring)).value)
Hnames.append(teststring)
except:
continue#print(teststring)
if len(Hshifts)==0:
for test2 in [“x”,“y”]:
headstring=pidstring[0:-2]
for test in teststrings:
teststring=headstring+test2+test
try:
Hshifts.append(csl.getChemicalShift(get(teststring)).value)
Hnames.append(teststring)
except:
continue#print(teststring)
return HNshift,Nshift,Hshifts,Hnames,headstring
def make_putative_noe_peaks(noelistPid,spPid,csPid):
i=0
try: sp=get(spPid)
except: print (“can’t open spectrum”)
try: csl1=get(csPid)
except: print(“can’t open chemical shift list”)
try: noeTable=get(noelistPid)
except: print(“can’t open Noe list”)
pl=sp.newPeakList()
noelist1=noeTable.data.values
oldhead=“iluaewrhtdv lbaekdsbviweauf”
while i<len(noelist1):
[pidStringH,pidStringN,pidString]=noelist1[i][0:3]
if oldhead in pidString:i+=1;continue
#HN_shift,N_shift,H_shift,H_names,headString=get_noe_chemical_shift_positions(pidStringH,pidStringN,pidString,csl1)
try: HN_shift,N_shift,H_shifts,H_names,headString=get_noe_chemical_shift_positions(pidStringH,pidStringN,pidString,csl1)
except: print(“NOE entry %i has some chemical shifts missing”%(i));i+=1;continue
j=0;oldhead=headString
for Hname in H_names:
tmp_pk=pl.newPeak(ppmPositions=(HN_shift,N_shift,H_shifts[j]))
tmp_pk.assignedNmrAtoms=[(get(pidStringH),get(pidStringN),get(Hname))]
tmp_pk.height=sp.getHeight(ppmPositions=(HN_shift, N_shift,H_shifts[j]))
j+=1
i+=1