Grepsel: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
(fixed selection from "chainless" models)
No edit summary
Line 30: Line 30:
   '''
   '''
DESCRIPTION
DESCRIPTION
 
Create selections matching motifs, using python regular expression syntax.
    Make selections matching regular expressions. Selections are labelled
    Motif is automatically converted to uppercase. Motif selections are labelled
     as "prefix_expression_###", where ### is the index for the first residue
     as "prefix_motif_###", where ### is the index for the first residue of the
     of the match. Prefix defaults to model name. combined = 1 creates one
     match. Prefix defaults to selection name. combined = 1 creates one selection
     selection for all occurences. single = 1 creates one selection for each
     for all occurences. single = 1 creates one selection for each occurance
     occurance (the default).
     (the default).
      
      
USAGE
USAGE
Line 50: Line 50:
          
          
     '''
     '''
 
 
   if selection == "(all)":
   if model == "(all)":
       selection = "all"
       model = "all"
   if prefix == "":
   if prefix == "":
       prefix=model
       prefix=selection


   stretch = stretch.upper()  
   stretch = stretch.upper()  
   seq = seqoneint(model)
   seq = seqoneint(selection)
   pymol.stored.resi = []
   pymol.stored.resi = []
   pymol.stored.chain = []
   pymol.stored.chain = []
   cmd.iterate("%s and name ca"%model,"stored.resi.append(resi);stored.chain.append(chain)")
   cmd.iterate("%s and name ca"%selection,"stored.resi.append(resi);stored.chain.append(chain)")
   motif = re.compile(stretch)
   motif = re.compile(stretch)
   occurrences = motif.finditer(seq)
   occurrences = motif.finditer(seq)
  stretchmod = stretch.replace("+","\+")
  stretchmod = stretchmod.replace("?","\?")
  print stretchmod
   if combined == "1":
   if combined == "1":
       cmd.do("select %s_%s, none"%(prefix,stretch))
       cmd.select("%s_%s"%(prefix,stretch), "none")
 
 
  for find in occurrences:     
 
      mb = pymol.stored.resi[find.start()]
      me = pymol.stored.resi[find.end()-1]
 
      ch = pymol.stored.chain[find.start()]
      cmd.select("%s_%s_%s%s"%(prefix,stretch,me,ch), "chain %s and (i; %s-%s)"%(ch,int(mb),int(me)))
      if combined == "1":
        cmd.select("%s_%s"%(prefix,stretch),"\"%s_%s\" | (%s and chain %s and (i; %s-%s))"%(prefix,stretchmod,selection,ch,int(mb),int(me)))


  for match in occurrences:
      fx = match.start()
      pos = 0
      for fy in range(int(fx),int(fx)+len(stretch)):
        ch = pymol.stored.chain[fy]
        ri = pymol.stored.resi[fy]
        if pos == 0:
            pos = ri
            if single == "1":
              cmd.select("%s_%s_%s%s"%(prefix,stretch,pos,ch), "none")           
        if single == "1":
            cmd.select("%s_%s_%s%s"%(prefix,stretch,pos,ch), "%s_%s_%s%s | ///%s/%s/"%(prefix,stretch,pos,ch,ch,ri))
        if combined == "1":
            cmd.select("%s_%s"%(prefix,stretch), "%s_%s | ////%s/"%(prefix,stretch,ri))
   cmd.select("none")
   cmd.select("none")
   cmd.delete("sel*")
   cmd.delete("sel*")
 
 
cmd.extend("grepsel",grepsel)
cmd.extend("grepsel",grepsel)
</source>
</source>

Revision as of 03:01, 28 November 2005

#Create named selections using regular expressions for the protein sequence

import pymol
import re

aa = { 'ASP' : 'D' , 'GLU' : 'E' , 'GLN' : 'Q' , 'ASN' : 'N' , 'SER' : 'S' ,
       'THR' : 'T' , 'CYS' : 'C' , 'HIS' : 'H' , 'ARG' : 'R' , 'LYS' : 'K' ,
       'MET' : 'M' , 'ALA' : 'A' , 'ILE' : 'I' , 'LEU' : 'L' , 'VAL' : 'V' ,
       'GLY' : 'G' , 'PRO' : 'P' , 'TRP' : 'W' , 'PHE' : 'F' , 'TYR' : 'Y' ,
       'SCY' : 'U' , 'ASX' : 'B' , 'GLX' : 'Z' , 'XXX' : 'X'}

#made this before the sequence view option, probably another way to do it now

def seqoneint(model):
   pymol.stored.seq = []
   cmd.iterate("%s and name ca"%model,"stored.seq.append(resn)")
   seq = ""
   for x in pymol.stored.seq:
      if aa.has_key(x):
         res = aa[x]
         seq = seq+res
      else:
         seq = seq + '-'
   return seq



def grepsel(model="(all)",stretch="",prefix="",combined="0",single="1"):
   '''
DESCRIPTION
Create selections matching motifs, using python regular expression syntax.
    Motif is automatically converted to uppercase. Motif selections are labelled
    as "prefix_motif_###", where ### is the index for the first residue of the
    match. Prefix defaults to selection name. combined = 1 creates one selection
    for all occurences. single = 1 creates one selection for each occurance
    (the default).
    
USAGE

    grepsel selection, expression, [prefix, [combined, [single ]]]

EXAMPLES

    Make selections for all motifs matching "ESS" (model_ESS_###,...):
    grepsel model, ess

    Make selections for the PxGY motif with prefix m (m_P.CY_###,...):
    grepsel model, p.gy, m
        
    '''
 
   if selection == "(all)":
      selection = "all"
   if prefix == "":
      prefix=selection

   stretch = stretch.upper() 
   seq = seqoneint(selection)
   pymol.stored.resi = []
   pymol.stored.chain = []
   cmd.iterate("%s and name ca"%selection,"stored.resi.append(resi);stored.chain.append(chain)")
   motif = re.compile(stretch)
   occurrences = motif.finditer(seq)
   stretchmod = stretch.replace("+","\+")
   stretchmod = stretchmod.replace("?","\?")

   print stretchmod
   if combined == "1":
      cmd.select("%s_%s"%(prefix,stretch), "none")


   for find in occurrences:      

      mb = pymol.stored.resi[find.start()]
      me = pymol.stored.resi[find.end()-1]

      ch = pymol.stored.chain[find.start()]
      cmd.select("%s_%s_%s%s"%(prefix,stretch,me,ch), "chain %s and (i; %s-%s)"%(ch,int(mb),int(me)))
      if combined == "1":
         cmd.select("%s_%s"%(prefix,stretch),"\"%s_%s\" | (%s and chain %s and (i; %s-%s))"%(prefix,stretchmod,selection,ch,int(mb),int(me)))

   cmd.select("none")
   cmd.delete("sel*")
   
cmd.extend("grepsel",grepsel)