This is a read-only mirror of pymolwiki.org

Difference between revisions of "Sidechaincenters"

From PyMOL Wiki
Jump to navigation Jump to search
m
m (drop "pseudo_" prefix)
Line 42: Line 42:
 
}
 
}
  
def pseudo_sidechaincenters(object='scc', selection='all', name='PS1', method='bahar1996'):
+
def sidechaincenters(object='scc', selection='all', name='PS1', method='bahar1996'):
 
     '''
 
     '''
 
DESCRIPTION
 
DESCRIPTION
Line 54: Line 54:
 
USAGE
 
USAGE
  
     pseudo_sidechaincenters object [, selection]
+
     sidechaincenters object [, selection]
  
 
ARGUMENTS
 
ARGUMENTS
Line 66: Line 66:
 
SEE ALSO
 
SEE ALSO
  
     pseudo_sidechaincentroids, pseudoatom
+
     sidechaincentroids, pseudoatom
 
     '''
 
     '''
 
     atmap = dict()
 
     atmap = dict()
Line 79: Line 79:
 
             atmap.setdefault((at.segi, at.chain, at.resn, at.resi), []).append(at)
 
             atmap.setdefault((at.segi, at.chain, at.resn, at.resi), []).append(at)
 
     else:
 
     else:
         print 'Error: unknown method'
+
         print 'Error: unknown method:', method
 
         return
 
         return
  
Line 101: Line 101:
 
     return model
 
     return model
  
def pseudo_sidechaincentroids(object='scc', selection='all', name='PS1'):
+
def sidechaincentroids(object='scc', selection='all', name='PS1'):
 
     '''
 
     '''
 
DESCRIPTION
 
DESCRIPTION
  
     Sidechain centroids. Works like "pseudo_sidechaincenters", but the
+
     Sidechain centroids. Works like "sidechaincenters", but the
 
     pseudoatom is the centroid of all atoms except hydrogens and backbone atoms
 
     pseudoatom is the centroid of all atoms except hydrogens and backbone atoms
 
     (N, C and O).
 
     (N, C and O).
Line 114: Line 114:
 
     like in this example:
 
     like in this example:
  
     pseudo_sidechaincentroids newobject, all and (not name CA or resn GLY)
+
     sidechaincentroids newobject, all and (not name CA or resn GLY)
  
 
SEE ALSO
 
SEE ALSO
  
     pseudo_sidechaincenters
+
     sidechaincenters
 
     '''
 
     '''
     return pseudo_sidechaincenters(object, selection, name, method='centroids')
+
     return sidechaincenters(object, selection, name, method='centroid')
  
cmd.extend('pseudo_sidechaincenters', pseudo_sidechaincenters)
+
cmd.extend('sidechaincenters', sidechaincenters)
cmd.extend('pseudo_sidechaincentroids', pseudo_sidechaincentroids)
+
cmd.extend('sidechaincentroids', sidechaincentroids)
  
 
# vi: ts=4:sw=4:smarttab:expandtab
 
# vi: ts=4:sw=4:smarttab:expandtab
 
</source>
 
</source>

Revision as of 17:22, 25 November 2010

Pseudo single-atom representation of sidechains. Usefull for pair potential calculation for example.

Example

fetch 2x19
pseudo_sidechaincenters scc, 2x19

The Script

'''
(c) 2010 Thomas Holder
'''

from pymol import cmd
from chempy import Atom, cpv, models

sidechaincenteratoms = {
    'GLY': ('CA',),
    'ALA': ('CB',),
    'VAL': ('CG1', 'CG2'),
    'ILE': ('CD1',),
    'LEU': ('CD1', 'CD2'),
    'SER': ('OG',),
    'THR': ('OG1', 'CG2'),
    'ASP': ('OD1', 'OD2'),
    'ASN': ('OD1', 'ND2'),
    'GLU': ('OE1', 'OE2'),
    'GLN': ('OE1', 'NE2'),
    'LYS': ('NZ',),
    'ARG': ('NE', 'NH1', 'NH2'),
    'CYS': ('SG',),
    'MET': ('SD',),
    'MSE': ('SE',),
    'PHE': ('CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ'),
    'TYR': ('CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'OH'),
    'TRP': ('CG', 'CD1', 'CD2', 'NE1', 'CE2', 'CE3', 'CZ2', 'CZ3'),
    'HIS': ('CG', 'ND1', 'CD2', 'CE1', 'NE2'),
    'PRO': ('CB', 'CG', 'CD'),
}

def sidechaincenters(object='scc', selection='all', name='PS1', method='bahar1996'):
    '''
DESCRIPTION

    Creates an object with sidechain representing pseudoatoms for each residue
    in selection.

    Sidechain interaction centers as defined by Bahar and Jernigan 1996
    http://www.ncbi.nlm.nih.gov/pubmed/9080182

USAGE

    sidechaincenters object [, selection]

ARGUMENTS

    object = string: name of object to create

    selection = string: atoms to consider {default: (all)}

    name = string: atom name of pseudoatoms {default: PS1}

SEE ALSO

    sidechaincentroids, pseudoatom
    '''
    atmap = dict()
    if method == 'bahar1996':
        modelAll = cmd.get_model('(%s) and resn %s' % (selection, '+'.join(sidechaincenteratoms)))
        for at in modelAll.atom:
            if at.name in sidechaincenteratoms[at.resn]:
                atmap.setdefault((at.segi, at.chain, at.resn, at.resi), []).append(at)
    elif method == 'centroid':
        modelAll = cmd.get_model('(%s) and not (hydro or name C+N+O)' % selection)
        for at in modelAll.atom:
            atmap.setdefault((at.segi, at.chain, at.resn, at.resi), []).append(at)
    else:
        print 'Error: unknown method:', method
        return

    model = models.Indexed()
    for centeratoms in atmap.itervalues():
        center = cpv.get_null()
        for at in centeratoms:
            center = cpv.add(center, at.coord)
        center = cpv.scale(center, 1./len(centeratoms))
        atom = Atom()
        atom.coord = center
        atom.index = model.nAtom + 1
        atom.name = name
        for key in ['resn','chain','resi','resi_number','hetatm','ss','segi']:
            atom.__dict__[key] = at.__dict__[key]
        model.add_atom(atom)
    model.update_index()
    if object in cmd.get_object_list():
        cmd.delete(object)
    cmd.load_model(model, object)
    return model

def sidechaincentroids(object='scc', selection='all', name='PS1'):
    '''
DESCRIPTION

    Sidechain centroids. Works like "sidechaincenters", but the
    pseudoatom is the centroid of all atoms except hydrogens and backbone atoms
    (N, C and O).

NOTE

    If you want to exclude C-alpha atoms from sidechains, modify the selection
    like in this example:

    sidechaincentroids newobject, all and (not name CA or resn GLY)

SEE ALSO

    sidechaincenters
    '''
    return sidechaincenters(object, selection, name, method='centroid')

cmd.extend('sidechaincenters', sidechaincenters)
cmd.extend('sidechaincentroids', sidechaincentroids)

# vi: ts=4:sw=4:smarttab:expandtab