Hello List,
Maybe useful, maybe not
Here is a small py script for filling nucleotides
with colored CGO objects. I just tried it on the pdb file 127D.
Of course not as efficient as Nuccyl!!! But I couldnt find out how to run
perl scripts on my Windows-running PC, and this is exactly (and only) what I
needed.
Just run the script, and type DrawNT in the PyMol command line.
Cheers,
Greg
from pymol import cmd
from pymol.cgo import *
from Numeric import *
import sys,re
# COLOR SETTINGS:
AColor=[0.2,1,0.2]
TColor=[1,0.2,0.2]
CColor=[0.3,0.3,1]
GColor=[1,0.55,0.15]
def DrawNT(select="all"):
CurrentView = cmd.get_view(1)
CurrentResi = 0
FirstRun = 1
NTPlate = [BEGIN,TRIANGLE_FAN]
# THYMINE
BaseT = cmd.get_model("resn T")
for atoms in BaseT.atom:
if (CurrentResi != atoms.resi):
CurrentResi = atoms.resi
if FirstRun == 0:
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+TColor)
else:
NTPlate.extend([COLOR]+TColor)
FirstRun = 0
if (atoms.name == "N1") or (atoms.name == "C2") or (atoms.name ==
"N3") or (atoms.name == "C4") or (atoms.name == "C5") or (atoms.name ==
"C6"):
NTPlate.extend([VERTEX] + atoms.coord)
# ADENINE
BaseA = cmd.get_model("resn A")
for atoms in BaseA.atom:
if (CurrentResi != atoms.resi):
CurrentResi = atoms.resi
if FirstRun == 0:
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+AColor)
else:
NTPlate.extend([COLOR]+AColor)
FirstRun = 0
if (atoms.name == "N1") or (atoms.name == "C2") or (atoms.name ==
"N3") or (atoms.name == "C4") or (atoms.name == "C5") or (atoms.name ==
"C6"):
NTPlate.extend([VERTEX] + atoms.coord)
if (atoms.name == "C4"):
TmpC4 = atoms.coord
elif (atoms.name == "C5"):
TmpC5 = atoms.coord
elif (atoms.name == "N7"):
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+AColor)
NTPlate.extend([VERTEX] + TmpC4)
NTPlate.extend([VERTEX] + TmpC5)
NTPlate.extend([VERTEX] + atoms.coord)
elif (atoms.name == "C8") or (atoms.name == "N9"):
NTPlate.extend([VERTEX] + atoms.coord)
# CYTOSINE
BaseC = cmd.get_model("resn C")
for atoms in BaseC.atom:
if (CurrentResi != atoms.resi):
CurrentResi = atoms.resi
if FirstRun == 0:
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+CColor)
else:
NTPlate.extend([COLOR]+CColor)
FirstRun = 0
if (atoms.name == "N1") or (atoms.name == "C2") or (atoms.name ==
"N3") or (atoms.name == "C4") or (atoms.name == "C5") or (atoms.name ==
"C6"):
NTPlate.extend([VERTEX] + atoms.coord)
# GUANINE
BaseG = cmd.get_model("resn G")
for atoms in BaseG.atom:
if (CurrentResi != atoms.resi):
CurrentResi = atoms.resi
if FirstRun == 0:
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+GColor)
else:
NTPlate.extend([COLOR]+GColor)
FirstRun = 0
if (atoms.name == "N1") or (atoms.name == "C2") or (atoms.name ==
"N3") or (atoms.name == "C4") or (atoms.name == "C5") or (atoms.name ==
"C6"):
NTPlate.extend([VERTEX] + atoms.coord)
if (atoms.name == "C4"):
TmpC4 = atoms.coord
elif (atoms.name == "C5"):
TmpC5 = atoms.coord
elif (atoms.name == "N7"):
NTPlate.append(END)
NTPlate.extend([BEGIN,TRIANGLE_FAN])
NTPlate.extend([COLOR]+GColor)
NTPlate.extend([VERTEX] + TmpC4)
NTPlate.extend([VERTEX] + TmpC5)
NTPlate.extend([VERTEX] + atoms.coord)
elif (atoms.name == "C8") or (atoms.name == "N9"):
NTPlate.extend([VERTEX] + atoms.coord)
NTPlate.append(END)
cmd.load_cgo(NTPlate,"PLAIN_NT")
cmd.select("chain1", "name C3*+C4*+C5*+O5*+P+O3*")
cmd.show("cartoon", "chain1")
cmd.cartoon("dumbbell", "chain1")
cmd.delete("chain1")
cmd.set_view(CurrentView)
cmd.extend("DrawNT",DrawNT)