예제 #1
0
def soup_to_bfactor_png(
    soup, png, bfactors, lower_bfactor=None, upper_bfactor=None,
    highlight_res=None, is_putty=False):
  temp_pdb = util.temp_fname('.pdb')
  soup.load_residue_bfactors(bfactors)
  max_bfactor = rescale_positive_bfactors_pdb(soup, temp_pdb, 
                lower_bfactor, upper_bfactor)
  temp2_pdb = strip_solvent_pdb(temp_pdb)
  script = bgcolor_script('white')
  script += bfactor_script(
       temp2_pdb, lower_bfactor, upper_bfactor, max_bfactor, is_putty)
  if highlight_res is not None:
    script += highlight_res_script(highlight_res)
    script += hide_backbone_sticks_script()
  if 'frame_pymol_script' in soup.__dict__:
    script += soup.frame_pymol_script
  script += "clip far, -20\n"
  script += "save %s\n" % png
  script += "quit"
  width, height = 480, 480
  if 'width' in soup.__dict__:
    width = soup.width
  if 'height' in soup.__dict__:
    height = soup.height
  run_pymol_script(script, width, height)
  util.clean_fname(temp_pdb, temp2_pdb)
예제 #2
0
파일: amber.py 프로젝트: janman13/pdbtool
def convert_amber_to_pdb(top, crd, pdb):
  """Converts an amber .crd (or .rst) file to .pdb."""
  tmp_pdb = util.temp_fname('.pdb')
  os.system("ambpdb -bres -p %s < %s > %s 2> /dev/null" \
             % (top, crd, tmp_pdb))
  # clean-up the amber format to conform with standard
  # pdb format with HETATM fields and chain id's
  lines = open(tmp_pdb, 'r').readlines()
  i_chain = 0
  is_water = False
  new_lines = []
  for line in lines:
    is_water = False
    if line.startswith('ATOM'):
      is_water = line[17:20] == 'WAT'
    if line.startswith('ATOM'): # normal protein chain
      if is_water:
        new_lines.append("HETATM" + line[6:17] + "HOH" + line[20:])
      else: # normal protein chain
        chain_id = string.ascii_uppercase[i_chain]
        new_lines.append(line[:21] + chain_id + line[22:])
    elif line.startswith('TER'):
      if not is_water:
        new_lines.append(line)
    else:
      new_lines.append(line)
    if not is_water and line.startswith('TER'):
      i_chain += 1
  open(pdb, 'w').write(''.join(new_lines))
  os.remove(tmp_pdb)
예제 #3
0
def get_molecule(pdb):
    txt = open(pdb, 'r').read()
    txt = pdbtext.strip_other_nmr_models(txt)
    txt = pdbtext.strip_lines(txt, lambda l: l.startswith('ANISOU'))
    txt = pdbtext.strip_lines(txt, lambda l: l.startswith('CONECT'))
    txt = pdbtext.strip_lines(txt, lambda l: l.startswith('MASTER'))
    txt = pdbtext.strip_alternative_atoms(txt)
    bare_fname = util.temp_fname('.pdb')
    open(bare_fname, 'w').write(txt)
    mol = pdbstruct.Molecule(bare_fname)
    if os.path.isfile(bare_fname):
        os.remove(bare_fname)
    return mol
예제 #4
0
def soup_to_bfactor_png(
    soup, png, bfactors, lower_bfactor=None, upper_bfactor=None,
    highlight_res=None, is_putty=False, is_sticks=True,
    center_res=None, top_res=None, height=480, width=480):
  """
  Wrapper around pdb_to_bfactor that loads in external values 
  for the residue bfactors with a reusable soup object.
  """
  pdb = util.temp_fname('.pdb')
  temp_fnames = [pdb]
  soup.load_residue_bfactors(bfactors)
  soup.write_pdb(pdb)
  pdb_to_bfactor_png(
    pdb, png, lower_bfactor, upper_bfactor,
    highlight_res, is_putty, is_sticks,
    center_res, top_res, height, width)
  util.clean_fname(*temp_fnames)
예제 #5
0
def soup_to_bfactor_png(soup,
                        png,
                        bfactors,
                        lower_bfactor=None,
                        upper_bfactor=None,
                        highlight_res=None,
                        is_putty=False,
                        is_sticks=True,
                        center_res=None,
                        top_res=None,
                        height=480,
                        width=480):
    """
  Wrapper around pdb_to_bfactor that loads in external values 
  for the residue bfactors with a reusable soup object.
  """
    pdb = util.temp_fname('.pdb')
    temp_fnames = [pdb]
    soup.load_residue_bfactors(bfactors)
    soup.write_pdb(pdb)
    pdb_to_bfactor_png(pdb, png, lower_bfactor, upper_bfactor, highlight_res,
                       is_putty, is_sticks, center_res, top_res, height, width)
    util.clean_fname(*temp_fnames)
예제 #6
0
파일: namd.py 프로젝트: janman13/pdbtool
def make_namd_from_pdb(pdb, psf, out_pdb): 
  """
  Creates charmm .pdb and .psf file. Can only make NAMD
  generate CHARMM topology files, not OPLS ones - that
  requires XPLOR but I don't care. Still, if OPLS
  topology files are provided - can still run.
  """

  def is_non_water_hetatm(line):
    if not line.startswith("HETATM"):
      return False
    if line[17:20] != 'HOH':
      return True
    return False
    
  in_pdb = util.temp_fname('.pdb')
  txt = open(pdb, 'r').read()
  txt = pdbtext.strip_other_nmr_models(txt)
  txt = pdbtext.strip_lines(txt, is_non_water_hetatm)
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('ANISOU'))
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('CONECT'))
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('MASTER'))
  txt = pdbtext.strip_alternative_atoms(txt)
  txt = pdbtext.strip_hydrogens(txt)
  txt = pdbtext.renumber_residues(txt)
  f = open(in_pdb, 'w')
  f.write(txt)
  f.close()
  
  name = psf.replace('.psf', '')
  psfgen_in = name + ".psfgen.in"
  psfgen_out = name + ".psfgen.out"
  
  replace = { 'pdb': in_pdb, 
              'out_pdb': out_pdb, 
              'psf': psf,
              'module_dir': module_dir,
              'topology': 'parms/charmm22.topology'
             }

  template = _psfgen_template

  soup = Soup(in_pdb)
  chains = soup.chains()

  water_names = ['WAT', "TIP", "TIP3", "HOH"]
  waters = [chain for chain in chains 
            if chain.n_residue() > 0 and chain.residue(0).type in water_names]
  chains = [chain for chain in chains if chain.n_residue() > 0 and chain.residue(0).type not in water_names]
  
  if len(waters) > 0:
    template = template.replace("# insert water", _water_psfgen_template)
    water_pdb = name + ".waters.pdb"
    water_soup = Soup()
    for water in waters:
      water_soup.insert_chain(water)
    water_soup.write_pdb(water_pdb)
    replace['water_pdb'] = water_pdb
    
  chains_template = ""
  for i, chain in enumerate(chains):
    id = 'ch%d' % i
    pdb = name + '.' + id + '.pdb'
    chain_soup = Soup()
    chain_soup.append_chain(chain)
    chain_soup.write_pdb(pdb)

    chain_replace = { 'chain_id': id, 'chain_pdb': pdb }
    chain_template = _chain_psfgen_template
    chains_template += util.replace_dict(chain_template, chain_replace)

  template = template.replace("# insert protein", chains_template)     
    
  template = util.replace_dict(template, replace)
  open(psfgen_in, "w").write(template)
  
  os.system("psfgen %s > %s" % (psfgen_in, psfgen_out))
  os.remove(in_pdb)
예제 #7
0
파일: amber.py 프로젝트: janman13/pdbtool
def convert_pdb_to_amber(pdb, top, crd, solvent_buffer=0.0): 
  """Convert a .pdb file into amber .top and .crd file."""

  script = "# generate %s and %s files from %s\n" % (top, crd, pdb)
  
  script += "\n"
  script += "# load in amber force field\n"
  script += "source leaprc.ff96\n"

  script += "\n"
  script += "# use AMBER6 GB radii for igb=1, gbparm=2\n"
  script += "set default PBradii amber6\n"
 
  # strip pdb and then load into soup
  bare_pdb = util.temp_fname('.pdb')
  txt = open(pdb, 'r').read()
  txt = pdbtext.strip_other_nmr_models(txt)
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('HETATM'))
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('ANISOU'))
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('CONECT'))
  txt = pdbtext.strip_lines(txt, lambda l: l.startswith('MASTER'))
  txt = pdbtext.strip_alternative_atoms(txt)
  txt = pdbtext.strip_hydrogens(txt)
  txt = pdbtext.renumber_residues(txt)
  open(bare_pdb, 'w').write(txt)
  soup = pdbstruct.Soup(bare_pdb)
  os.remove(bare_pdb)
  
  script += "\n"
  residues = [r.type for r in soup.residues()]
  if 'PHD' in residues:
    script += "\n"
    script += "# non-standard amino acid PHD"
    script += "source leaprc.gaff\n"
    script += "loadAmberPrep %s/parms/phd.prepin\n" % module_dir
    script += "loadAmberParams %s/parms/phd.frcmod\n" % module_dir

  for chain in soup.chains():
    if isinstance(chain, pdbstruct.Protein):
      if not chain.is_capped():
        chain.charge_c_end()

  in_pdb = pdb.replace('.pdb', '.tleap.pdb')
  soup.write_pdb(in_pdb)

  script += "\n"
  script += " # insert protein\n"
  script += "pdb = loadpdb %s\n" % in_pdb
  script += "check pdb\n"

  script += "\n"
  script += " # disulfide bonds\n"
  n = len(soup.residues())
  for i in range(n):
    for j in range(i+1, n):
      if soup.residue(i).type in 'CYS' and soup.residue(j).type in 'CYS':
        p1 = soup.residue(i).atom('SG').pos
        p2 = soup.residue(j).atom('SG').pos
        if vector3d.pos_distance(p1, p2) < 3.0:
          soup.residue(i).type = 'CYX'
          for atom in soup.residue(i).atoms():
            atom.res_type = 'CYX'
          soup.residue(j).type = 'CYX'
          for atom in soup.residue(j).atoms():
            atom.res_type = 'CYX'
          script += "bond pdb.%d.SG pdb.%d.SG\n" % (i+1, j+1)
  soup.write_pdb(in_pdb)

  if solvent_buffer > 0.0:
    script += "\n"
    script += " # add explicit waters\n"
    script += "solvateBox pdb TIP3PBOX %f iso\n" % solvent_buffer
    script += "\n"

  script += "\n"
  script += " # write files\n"
  script += "saveAmberParm pdb %s %s\n" % (top, crd)
  script += "\n"
  script += "quit\n"
  script += "\n"

  name = crd.replace('.crd', '')
  tleap_in = name + ".tleap.in"
  open(tleap_in, "w").write(script)
  tleap_out = name + ".tleap.out"
  os.system("tleap -f %s > %s" % (tleap_in, tleap_out))
  convert_amber_to_pdb(top, crd, name + '.pdb')

  os.remove("leap.log")
예제 #8
0
파일: vmdtraj.py 프로젝트: BenPorebski/bemd
mol selection {backbone}
mol representation NewCartoon 0.40 20.00 2.50 0
mol addrep top
mol selection {all}
mol representation CPK 0.5 2 8 6
mol addrep top
mol smoothrep top 0 2
mol smoothrep top 1 2
"""


if len(sys.argv) < 2:
    print "Usage: vmdtraj.py md"
    sys.exit(1)

in_md = sys.argv[1]

parms = {"ext_top": "parm7", "ext_trj": "crd", "top": in_md + ".top", "trj": in_md + ".trj"}
if not has_files(parms["top"], parms["trj"]):
    parms = {"ext_top": "gro", "ext_trj": "trr", "top": in_md + ".gro", "trj": in_md + ".trr"}
    if not has_files(parms["top"], parms["trj"]):
        parms = {"ext_top": "psf", "ext_trj": "dcd", "top": in_md + ".psf", "trj": in_md + ".dcd"}
        if not has_files(parms["top"], parms["trj"]):
            print "Can't recognize trajectories with basename", in_md

cmd_fname = util.temp_fname(".vmd")
script = util.replace_dict(s, parms)
open(cmd_fname, "w").write(script)
os.system(vmd + " -e " + cmd_fname)
os.remove(cmd_fname)