本文整理汇总了Python中MolKit.molecule.AtomSet.append方法的典型用法代码示例。如果您正苦于以下问题:Python AtomSet.append方法的具体用法?Python AtomSet.append怎么用?Python AtomSet.append使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MolKit.molecule.AtomSet
的用法示例。
在下文中一共展示了AtomSet.append方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: removeNeighbors
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def removeNeighbors(self, atDict):
#filter out at-itself and at-bondedat up to 1:4
#NB keys could be hydrogens OR donors
for at in atDict.keys():
closeAts = atDict[at]
bondedAts = AtomSet([])
for b in at.bonds:
###at2 = b.neighborAtom(at)
at2 = b.atom1
if id(at2)==id(at): at2 = b.atom2
bondedAts.append(at2)
#9/13 remove this:
##also remove 1-3
for b2 in at2.bonds:
at3 = b2.atom1
if id(at3)==id(at2): at3 = b.atom2
#at3 = b2.neighborAtom(at2)
if id(at3)!=id(at):
bondedAts.append(at3)
#for b3 in at3.bonds:
#at4 = b2.neighborAtom(at3)
#if at4!=at and at4!=at2:
#bondedAts.append(at4)
bondedAts = bondedAts.uniq()
goodAts = []
for i in range(len(closeAts)):
cAt = closeAts[i]
if cAt not in bondedAts:
goodAts.append(cAt)
if len(goodAts):
atDict[at] = goodAts
else:
del atDict[at]
return atDict
示例2: get_atoms
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def get_atoms(mol, list_of_indicies, names_to_use=['N','CA','C'], verbose=False):
if verbose:
print "in get_atoms with list of indicies:"
print list_of_indicies
if not len(list_of_indicies):
raise 'invalid input: list of indicies is empty!'
atoms = AtomSet()
num_res = 0
for item in list_of_indicies:
first, second = item
#check for valid index and for end of chain
max_index = len(mol.chains.residues)-1
assert first<=max_index, 'invalid start of residue range'
assert second<=max_index, 'invalid end of residue range'
assert second>=first, 'second index cannot be smaller than first'
if second==max_index:
#ie mol.chains.residues[second]==mol.chains.residues[-1]:
these_res = mol.chains.residues[first:]
else:
these_res = mol.chains.residues[first:second+1]
if verbose: print "Adding %3d residues " %(len(these_res)),
num_res+=len(these_res)
if verbose: print "Now there are %d residues total" %(num_res)
for r in these_res:
for n in names_to_use:
atoms.append( r.atoms.get(n)[0])
assert len(atoms), 'invalid input: lists of indicies did not correspond to any residues!'
if verbose: print 'returning %d atoms' %(len(atoms))
return atoms
示例3: filterAcceptors
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def filterAcceptors(self, accAts):
ntypes = ['Npl', 'Nam']
npls = accAts.get(lambda x, ntypes=ntypes: x.babel_type=='Npl')
nams = accAts.get(lambda x, ntypes=ntypes: x.babel_type=='Nam')
#nAts = accAts.get(lambda x, ntypes=ntypes: x.babel_type in ntypes)
restAts = accAts.get(lambda x, ntypes=ntypes: x.babel_type not in ntypes)
if not restAts: restAts = AtomSet([])
#if nAts:
if npls:
#for at in nAts:
for at in npls:
s = 0
for b in at.bonds:
if b.bondOrder=='aromatic':
s = s + 2
else: s = s + b.bondOrder
#if s<3:
#apparently this is wrong
if s<4:
restAts.append(at)
if nams:
#for at in nAts:
for at in nams:
s = 0
for b in at.bonds:
if b.bondOrder=='aromatic':
s = s + 2
else: s = s + b.bondOrder
#s = s + b.bondOrder
if s<3:
restAts.append(at)
return restAts
示例4: superimpose_cb
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def superimpose_cb(self):
refAtoms = AtomSet()
mobAtoms = AtomSet()
for pair in self.newPairs.values():
refAtoms.append(pair[0])
mobAtoms.append(pair[1])
apply( self.doitWrapper, (refAtoms,mobAtoms), {} )
示例5: getAtoms
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def getAtoms(self,bnds):
ats0 = AtomSet()
for b in bnds:
ats0.append(b.atom1)
ats0.append(b.atom2)
d = {}
for a in ats0:
d[a] = 0
return AtomSet(d.keys())
示例6: doit
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def doit(self, bonds):
global var
var=1
ats = AtomSet([])
for bond in bonds:
ats.append(bond.atom1)
ats.append(bond.atom2)
self.vf.removeBonds(bond.atom1, bond.atom2)
var=0
self.vf.GUI.VIEWER.Redraw()
示例7: onRemoveObjectFromViewer
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def onRemoveObjectFromViewer(self, obj):
removeAts = AtomSet([])
for at in self.atomList:
if at in obj.allAtoms:
removeAts.append(at)
self.atomList = self.atomList - removeAts
removeAts = AtomSet([])
for at in self.undoAtList:
if at in obj.allAtoms:
removeAts.append(at)
self.undoAtList = self.undoAtList - removeAts
self.update()
示例8: checkForPossibleH
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def checkForPossibleH(self, ats, blen):
#@@FIX THIS: WHAT IS THE POINT OF THIS???
#check that if at has all bonds, at least one is to a hydrogen
# have to do this by element??
probAts = AtomSet(ats.get(lambda x, blen=blen: len(x.bonds)==blen))
#probOAts = ats.get(lambda x, blen=blen: len(x.bonds)==blen)
#probSAts = ats.get(lambda x, blen=blen: len(x.bonds)==blen)
if probAts:
rAts = AtomSet([])
for at in probAts:
if not len(at.findHydrogens()):
rAts.append(at)
if len(rAts):
ats = ats.subtract(rAts)
return ats
示例9: set_carbon_names
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def set_carbon_names(self, atoms, type):
#set carbon names explicitly
if not atoms or not len(atoms):
return "ERROR: set_carbon_names called with no atoms"
assert type in ['C','A']
if not hasattr(atoms, 'autodock_element'):
atoms.autodock_element = atoms.element
changed = AtomSet()
for at in atoms:
if at.element!='C': continue
if at.autodock_element!=type:
if self.rename:
if len(at.name)>1:
at.name = type + at.name[1:]
else:
at.name = type
at.autodock_element = type
changed.append(at)
return changed
示例10: getCations
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def getCations(self, atoms):
#select atoms in ARG and LYS residues
arg_cations = atoms.get(lambda x: (x.parent.type=='ARG' and \
x.name in ['CZ']))
lys_cations = atoms.get(lambda x: (x.parent.type=='LYS' and \
x.name in ['NZ', 'HZ1', 'HZ2', 'HZ3']))
#select any positively-charged metal ions... cannot include CA here
metal_cations = atoms.get(lambda x: x.name in ['Mn','MN', 'Mg',\
'MG', 'FE', 'Fe', 'Zn', 'ZN'])
ca_cations = atoms.get(lambda x: x.name in ['CA', 'Ca'] and x.parent.type=='CA')
cations = AtomSet()
#cations.extend(arg_cations)
for a in arg_cations:
cations.append(a)
#cations.extend(lys_cations)
for a in lys_cations:
cations.append(a)
#cations.extend(metal_cations)
for a in metal_cations:
cations.append(a)
#cations.extend(ca_cations)
for a in ca_cations:
cations.append(a)
return cations
示例11: nextFrame
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def nextFrame(self, id):
#Player.nextFrame(self, id)
id = int(id)
if id == self.currentFrameIndex: return
if self.hasCounter and self.gui:
self.form.ent2.delete(0,'end')
self.form.ent2.insert(0, str(id))
if self.hasSlider:
self.form.ifd.entryByName['slider']['widget'].set(id)
self.currentFrameIndex = int(id)
removeAtoms = AtomSet([])
addAtoms = AtomSet([])
id = int(id)
flood = self.floods[id]
centers = []
materials = []
radii = []
prev_coords = self.mol.allAtoms.coords
lenAtoms = len(prev_coords)
#self.residue.atoms = AtomSet([])
index = 0
#h = self.hp.heap()
#print h
for fl in flood:
x = (fl[1] - self.xcent)*self.spacing + self.centerx
y = (fl[2] - self.ycent)*self.spacing + self.centery
z = (fl[3] - self.zcent)*self.spacing + self.centerz
if fl[4] == 7:
atomchr = 'P'
# note, this will color the NA atom pink (the PDB color for Phosphorus)
radius = AAradii[13][0]
if fl[4] == 6:
atomchr = 'S'
radius = AAradii[13][0]
if fl[4] == 5:
atomchr = 'A'
radius = AAradii[10][0]
if fl[4] == 4:
atomchr = 'O'
radius = AAradii[1][0]
if fl[4] == 3:
atomchr = 'N'
radius = AAradii[4][0]
if fl[4] == 2:
atomchr = 'C'
radius = AAradii[10][0]
if fl[4] == 1:
atomchr = 'H'
radius = AAradii[15][0]
if not [x,y,z] in prev_coords:
a = Atom(atomchr, self.residue, atomchr, top=self.mol)
a._coords = [[x,y,z]]
a._charges = {}
a.hetatm = 1
a.radius = radius
#a.number = lenAtoms + 1
addAtoms.append(a)
lenAtoms += 1
for key in self.colorKeys:
a.colors[key]=AtomElements[atomchr]
a.opacities[key]=1.0
else:
centers.append([x,y,z])
# a = Atom(atomchr, self.residue, atomchr, top=self.mol)
# a._coords = [[x,y,z]]
# a._charges = {}
# a.hetatm = 1
# a.number = index
# index += 1
#aterials.append(AtomElements[atomchr])
#enters.append([x,y,z])
#adii.append(radius)
#self.mol.allAtoms = self.residue.atoms
#self.mol.geomContainer.geoms['lines'].protected = False
#for com in self.autoLigandCommand.vf.cmdsWithOnAddObj:
# com.onAddObjectToViewer(self.mol)
#self.autoLigandCommand.vf.displayCPK(self.mol, scaleFactor=0.1)
halo_centers = []
for coord in prev_coords:
if not coord in centers:
index = prev_coords.index(coord)
removeAtoms.append(self.mol.allAtoms[index])
self.residue.assignUniqIndex() #this is needed to avoid Traceback later on
self.mol.allAtoms.stringRepr = None #stringRepr can be very large aousing memory errors
event = AddAtomsEvent(objects=addAtoms)
#self.autoLigandCommand.vf.dispatchEvent(event)
self.autoLigandCommand.vf.displayCPK.updateGeom(event)
event = DeleteAtomsEvent(objects=removeAtoms)
#self.autoLigandCommand.vf.dispatchEvent(event)
self.autoLigandCommand.vf.displayCPK.updateGeom(event)
for atom in removeAtoms:
self.residue.atoms.remove(atom)
if id == self.maxFrame:
self.autoLigandCommand.halo.Set(visible=0)
else:
#.........这里部分代码省略.........
示例12: AddBondsGUICommand
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
class AddBondsGUICommand(MVCommand, MVAtomICOM):
"""
The AddBondGUICommand provides an interactive way of creating bonds between two given atoms by picking on them. To use this command you need first to load it into PMV. Then you can find the entry 'addBonds' under the Edit menu. To add bonds you just need to pick on the 2 atoms you want to bind. If you drag select a bunch of atoms, the command will buildBondsByDistance between them.This command is undoable.
\nPackage : Pmv
\nModule : bondsCommands
\nClass : AddBondsGUICommand
\nCommand : addBondsGC
\nSynopsis:\n
None<-addBondsGC(atoms)\n
\nRequired Arguments:\n
atoms : atom(s)\n
"""
def __init__(self, func=None):
MVCommand.__init__(self, func)
MVAtomICOM.__init__(self)
self.atomList = AtomSet([])
self.undoAtList = AtomSet([])
self.labelStrs = []
def onRemoveObjectFromViewer(self, obj):
removeAts = AtomSet([])
for at in self.atomList:
if at in obj.allAtoms:
removeAts.append(at)
self.atomList = self.atomList - removeAts
removeAts = AtomSet([])
for at in self.undoAtList:
if at in obj.allAtoms:
removeAts.append(at)
self.undoAtList = self.undoAtList - removeAts
self.update()
def onAddCmdToViewer(self):
if not self.vf.commands.has_key('setICOM'):
self.vf.loadCommand('interactiveCommands', 'setICOM', 'Pmv',
topCommand=0)
if not self.vf.commands.has_key('addBonds'):
self.vf.loadCommand('bondsCommands', 'addBonds', 'Pmv',
topCommand=0)
if not self.vf.commands.has_key('removeBondsGC'):
self.vf.loadCommand('bondsCommands', 'removeBondsGC', 'Pmv',
topCommand=0)
self.masterGeom = Geom('addBondsGeom',shape=(0,0),
pickable=0, protected=True)
self.masterGeom.isScalable = 0
self.spheres = Spheres(name='addBondsSpheres', shape=(0,3),
inheritMaterial=0,
radii=0.2, quality=15,
materials = ((1.,1.,0.),), protected=True)
if not self.vf.commands.has_key('labelByExpression'):
self.vf.loadCommand('labelCommands',
['labelByExpression',], 'Pmv', topCommand=0)
if self.vf.hasGui:
miscGeom = self.vf.GUI.miscGeom
self.vf.GUI.VIEWER.AddObject(self.masterGeom, parent=miscGeom)
self.vf.GUI.VIEWER.AddObject(self.spheres, parent=self.masterGeom)
def __call__(self, atoms, **kw):
"""None<-addBondsGC(atoms)
\natoms : atom(s)"""
if type(atoms) is StringType:
self.nodeLogString = "'"+atoms+"'"
ats = self.vf.expandNodes(atoms)
if not len(ats): return 'ERROR'
return apply(self.doitWrapper, (ats,), kw)
def doit(self, ats):
if len(ats)>2:
if len(self.atomList):
atSet = ats + self.atomList
else: atSet = ats
parent = atSet[0].parent
parent.buildBondsByDistanceOnAtoms(atSet)
self.atomList = AtomSet([])
self.update(True)
else:
lenAts = len(self.atomList)
last = None
if lenAts:
last = self.atomList[-1]
top = self.atomList[0].top
for at in ats:
#check for repeats of same atom
if lenAts and at==last:
continue
#lenAts = len(self.atomList)
#if lenAts and at==self.atomList[-1]:
# continue
if lenAts and at.top!=self.atomList[-1].top:
msg = "intermolecular bond to %s disallowed"%(at.full_name())
self.warningMsg(msg)
self.atomList.append(at)
self.undoAtList.append(at)
lenAts = len(self.atomList)
self.update(True)
#.........这里部分代码省略.........
示例13: doit
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def doit(self, ats):
""" Function to delete all the references to each atom of a
AtomSet."""
# Remove the atoms of the molecule you are deleting from the
# the AtomSet self.vf.allAtoms
self.vf.allAtoms = self.vf.allAtoms - ats
# If the current selection
atmsInSel = self.vf.selection.findType(Atom)[:]
atmsInSel.sort()
ats.sort()
# Call the updateGeoms function for all the command having an
# updateGeom function
molecules, atomSets = self.vf.getNodesByMolecule(ats)
done = 0
event = DeleteAtomsEvent(objects=ats)
self.vf.dispatchEvent(event)
allAtoms = AtomSet([])
for mol, atSet in map(None, molecules, atomSets):
if len(atSet)==len(mol.allAtoms):
#have to add atoms back to allAtoms for deleteMol to work
self.vf.allAtoms = self.vf.allAtoms + atSet
self.vf.deleteMol.deleteMol(mol)
#if this is the last atom, quit the loop
if mol==molecules[-1]:
done=1
break
continue
mol.allAtoms = mol.allAtoms - atSet
allAtoms = allAtoms + atSet
#FIRST remove any possible hbonds
hbondAts = atSet.get(lambda x: hasattr(x, 'hbonds'))
if hbondAts is not None:
#for each atom with hbonds
for at in hbondAts:
if not hasattr(at, 'hbonds'):
continue
#remove each of its hbonds
for b in at.hbonds:
self.removeHBond(b)
for at in atSet:
for b in at.bonds:
at2 = b.atom1
if at2 == at: at2 = b.atom2
at2.bonds.remove(b)
at.parent.remove(at, cleanup=1)
if len(atmsInSel):
if atmsInSel == ats:
# the current selection was deleted
self.vf.clearSelection(topCommand=0)
else:
nodes = self.vf.selection
lenSel = len(nodes)
setClass = nodes.__class__
elementClass = nodes.elementType
if lenSel>0:
# this breaks if selectionlevel is Molecule, for instance
# setClass = nodes.__class__
# newSel = setClass(nodes.findType(Atom) - ats)
# newSel2 = setClass([])
newSel = atmsInSel-ats
newSel2 = AtomSet([])
# may have ats which have been deleted everywhere else
for at in newSel:
if at in at.top.allAtoms:
newSel2.append(at)
if len(newSel2)!=lenSel:
self.vf.clearSelection(topCommand=0)
if len(newSel2):
newSel2 = newSel2.findType(elementClass).uniq()
self.vf.select(newSel2, topCommand=0)
#this fixed a bug which occurred when only 1 molecule present
#and cmd invoked with mv.deleteAtomSet(mv.Mols[0].allAtoms)
if not done:
for at in ats: del at
self.vf.resetUndo(topCommand=0)
示例14: getDonors
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def getDonors(self, nodes, paramDict):
donorList = paramDict['donorTypes']
#print 'donorList=', donorList
# currently this is a set of hydrogens
hats = AtomSet(nodes.get(lambda x: x.element=='H'))
#hats are optional: if none, process donors
# if there are hats: dAts are all atoms bonded to all hydrogens
if hats:
dAts = AtomSet([])
for at in hats:
for b in at.bonds:
at2 = b.atom1
if id(at2)==id(at): at2 = b.atom2
dAts.append(at2)
#dAts.append(b.neighborAtom(at))
else:
dAts = nodes
#get the sp2 hybridized possible donors which are all ns
sp2 = []
for t in ['Nam', 'Ng+', 'Npl']:
if t in donorList:
sp2.append(t)
#ntypes = ['Nam', 'Ng+', 'Npl']
sp2DAts = None
if len(sp2):
sp2DAts = AtomSet(dAts.get(lambda x, sp2=sp2: x.babel_type in sp2))
hsp2 = AtomSet([])
if sp2DAts:
if hats:
hsp2 = AtomSet(hats.get(lambda x, sp2DAts=sp2DAts:x.bonds[0].atom1 \
in sp2DAts or x.bonds[0].atom2 in sp2DAts))
if sp2DAts:
#remove any sp2 N atoms which already have 3 bonds not to hydrogens
n2Dons = AtomSet(sp2DAts.get(lambda x: x.element=='N'))
if n2Dons:
n2Dons.bl=0
for at in n2Dons:
for b in at.bonds:
if type(b.bondOrder)==type(2):
at.bl = at.bl + b.bondOrder
else:
at.bl = at.bl + 2
#allow that there might already be a hydrogen
nH = at.findHydrogens()
at.bl = at.bl - len(nH)
badAts = AtomSet(n2Dons.get(lambda x: x.bl>2))
if badAts:
sp2DAts = sp2DAts - badAts
delattr(n2Dons,'bl')
#get the sp3 hybridized possible donors
sp3 = []
for t in ['N3+', 'S3', 'O3']:
if t in donorList:
sp3.append(t)
n3DAts = None
if 'N3+' in sp3:
n3DAts = AtomSet(dAts.get(lambda x: x.babel_type=='N3+'))
o3DAts = None
if 'O3' in sp3:
o3DAts = AtomSet(dAts.get(lambda x: x.babel_type=='O3'))
if o3DAts:
#remove any O3 atoms which already have 2 bonds not to hydrogens
badO3s = AtomSet([])
for at in o3DAts:
if len(at.bonds)<2: continue
if len(at.findHydrogens()): continue
else:
badO3s.append(at)
if len(badO3s):
o3DAts = o3DAts - badO3s
s3DAts = None
if 'S3' in sp3:
s3DAts = AtomSet(dAts.get(lambda x: x.babel_type=='S3'))
sp3DAts = AtomSet([])
for item in [n3DAts, o3DAts, s3DAts]:
if item:
sp3DAts = sp3DAts + item
hsp3 = AtomSet([])
if sp3DAts:
if hats:
hsp3 = AtomSet(hats.get(lambda x, sp3DAts=sp3DAts:x.bonds[0].atom1 \
in sp3DAts or x.bonds[0].atom2 in sp3DAts))
hsp = hsp2 + hsp3
#print 'hsp=', hsp.name
#print 'sp2DAts=', sp2DAts.name
#print 'sp3DAts=', sp3DAts.name
return hsp, sp2DAts, sp3DAts
示例15: filterBasedOnAngs
# 需要导入模块: from MolKit.molecule import AtomSet [as 别名]
# 或者: from MolKit.molecule.AtomSet import append [as 别名]
def filterBasedOnAngs(self, pD, d2Ats, d3Ats, a2Ats, a3ats, paramDict):
badAtDict = {}
d2max = paramDict['d2max']
d2min = paramDict['d2min']
d3max = paramDict['d3max']
d3min = paramDict['d3min']
#NEED these parameters
a2max = paramDict['a2max']
a2min = paramDict['a2min']
a3max = paramDict['a3max']
a3min = paramDict['a3min']
#NB now pD keys could be hydrogens OR donors
for k in pD.keys():
if k.element=='H':
d = k.bonds[0].atom1
if id(d)==id(k): d = k.bonds[0].atom2
#d = k.bonds[0].neighborAtom(k)
h = k
else:
d = k
h = None
badAts = AtomSet([])
ct = 0
for ac in pD[k]:
if h is not None:
ang = getAngle(ac, h, d)
else:
acN = ac.bonds[0].atom1
if id(acN) == id(ac): acN = ac.bonds[0].atom2
#acN = ac.bonds[0].neighborAtom(ac)
ang = getAngle(d, ac, acN)
#print 'ang=', ang
dSp2 = d in d2Ats
aSp2 = ac in a2Ats
#these limits could be adjustable
if h is not None:
if dSp2:
upperLim = d2max
lowerLim = d2min
#upperLim = 170
#lowerLim = 130
else:
upperLim = d3max
lowerLim = d3min
#upperLim = 180
#lowerLim = 120
else:
#if there is no hydrogen use d-ac-acN angles
if dSp2:
upperLim = a2max
lowerLim = a2min
#upperLim = 150
#lowerLim = 110
else:
upperLim = a3max
lowerLim = a3min
#upperLim = 150
#lowerLim = 100
if ang>lowerLim and ang <upperLim:
#AT THIS MOMENT BUILD HYDROGEN BOND:
if dSp2:
if aSp2: typ = 22
else: typ = 23
elif aSp2: typ = 32
else: typ = 33
#THEY could be already bonded
alreadyBonded = 0
if hasattr(d, 'hbonds') and hasattr(ac,'hbonds'):
for hb in d.hbonds:
if hb.donAt==ac or hb.accAt==ac:
alreadyBonded = 1
if not alreadyBonded:
newHB = HydrogenBond(d, ac, h, theta=ang, typ=typ)
if not hasattr(ac, 'hbonds'):
ac.hbonds=[]
if not hasattr(d, 'hbonds'):
d.hbonds=[]
ac.hbonds.append(newHB)
d.hbonds.append(newHB)
if h is not None:
#hydrogens can have only 1 hbond
h.hbonds = [newHB]
# newHB.hlen = dist
#else:
# newHB.dlen = dist
else:
badAts.append(ac)
ct = ct + 1
badAtDict[k] = badAts
return badAtDict