getNumRestraints.py
Script to get number of restraints per residue out of CCPN XML files
Size 3.3 kB - File type text/python-sourceFile contents
""""
Script to export number of constraints for RECOORD projects.
Does not work with pre-2007 releases.
"""
from memops.general.Io import readXmlProjectFile
import sys
def getResonanceToResidueDict(nmrConstraintStore):
resonanceToResidueDict = {}
for fixedResonance in nmrConstraintStore.fixedResonances:
if fixedResonance.resonanceSet:
refAtom = fixedResonance.resonanceSet.atomSets[0].atoms[0]
residue = refAtom.residue
resonanceToResidueDict[fixedResonance] = residue
return resonanceToResidueDict
def setConstraintsPerResidue(resonance,resonanceToResidueDict,constraintsPerResidueAndList,addItem = 1):
if resonanceToResidueDict.has_key(resonance):
residue = resonanceToResidueDict[resonance]
if not constraintsPerResidueAndList.has_key(residue):
constraintsPerResidueAndList[residue] = 0
constraintsPerResidueAndList[residue] += addItem
if __name__ == '__main__':
#
# Get script input variables
#
xmlFile = sys.argv[1]
#
# Load the CCPN project
#
ccpnProject = readXmlProjectFile(file = xmlFile)
#
# Get the correct structure generation
#
nmrProject = ccpnProject.nmrProjects[0]
strucGen = nmrProject.structureGenerations[0]
nmrConstraintStore = strucGen.nmrConstraintStore
#
# Set up dictionary to connect CCPN 'resonances' to the residues in the chain
#
resonanceToResidueDict = getResonanceToResidueDict(nmrConstraintStore)
#
# Loop over the lists, get results
#
constraintListTypes = ('Distance','Dihedral','HBond','Rdc')
constraintsPerResidue = {}
# print constraintHead.constraintLists
for constraintListType in constraintListTypes:
constraintLists = nmrConstraintStore.findAllConstraintLists(className = "%sConstraintList" % constraintListType)
if constraintLists:
constraintsPerResidue[constraintListType] = {}
for constraintList in constraintLists:
for constraint in constraintList.constraints:
if constraintListType == 'Dihedral':
for resonance in constraint.resonances:
setConstraintsPerResidue(resonance,resonanceToResidueDict,constraintsPerResidue[constraintListType],addItem = 0.25)
else:
constraintItems = constraint.items
contribPerItem = 1 / len(constraintItems)
for item in constraintItems:
for resonance in item.resonances:
setConstraintsPerResidue(resonance,resonanceToResidueDict,constraintsPerResidue[constraintListType], addItem = contribPerItem / 2.0)
#
# Print results
#
constraintListTypes = constraintsPerResidue.keys()
constraintListTypes.sort()
print "%15s" % "",
for constraintListType in constraintListTypes:
print "%-10s" % constraintListType,
print
for chain in ccpnProject.molSystems[0].chains:
for residue in chain.residues:
resId = "'%s.%s.%s':" % (chain.code,residue.ccpCode,residue.seqCode)
print "%-15s" % resId,
for constraintListType in constraintListTypes:
if constraintsPerResidue[constraintListType].has_key(residue):
numConstraints = constraintsPerResidue[constraintListType][residue]
else:
numConstraints = 0
print "%6.2f " % numConstraints,
print