import chimera # open up a molecule to work with: opened = chimera.openModels.open('3fx2', type="PDB") mol = opened[0] # Molecule Display Properties # ~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # the 'color' attribute represents the model-level color. # This color can be controlled by the midas command 'modelcolor'. # The 'color' assigned to a newly opened model is determined by a configurable preference (see discussion above). # Programmatically, the model # color can be changed by simply assigning a 'MaterialColor' to 'molecule.color'. Molecules also have a # 'display' attribute, where a value of 'True' corresponds to being displayed, and a value of 'False' # means the molecule is not displayed. # So to make sure the molecule is shown (it is by default when first opened): mol.display = True # To color the molecule red, # get a reference to Chimera's notion of the color red (returns a 'MaterialColor' object) from chimera.colorTable import getColorByName red = getColorByName('red') # and assign it to 'mol.color'. mol.color = red # Note that the model will appear red at this point because all the atoms/bonds/residues # 'color' attributes are set to 'None' # Atom Display Properties # ~~~~~~~~~~~~~~~~~~~~~~~ # # Each atom in a molecule has its own individual color, # accessible by the 'color' attribute. Upon opening a molecule, each atom's 'color' is set to 'None'; # it can be changed by assigning a new 'MaterialColor' to 'atom.color'. # So, if we wanted to color all the alpha-carbon atoms blue, and all the rest yellow, # get references to the colors: blue = getColorByName('blue') yellow = getColorByName('yellow') # get a list of all the atoms in the molecule ATOMS = mol.atoms for at in ATOMS: # check to see if this atom is an alpha-carbon if at.name == 'CA': at.color = yellow else: at.color = blue # Now, even though 'mol.color' is set to red, the molecule will appear to be blue and yellow. This is because each individual # atom's 'color' is visible over 'mol.color'. # Like molecules, atoms also have a 'display' attribute that controls whether or not the atom is shown. # While 'atom.display' controls whether the atom can be seen at all, 'atom.drawMode' controls its visual representation. # The value of 'drawMode' can be one of four constants, defined in the 'Atom' class. # Acceptable values for 'drawMode' # are 'chimera.Atom.Dot' (dot representation), 'chimera.Atom.Sphere' (sphere representation), # 'chimera.Atom.EndCap' (endcap representation), or 'chimera.Atom.Ball' (ball representation). # So, to represent all the atoms in the molecule as "balls": for at in ATOMS: at.drawMode = chimera.Atom.Ball # Bond Display Properties # ~~~~~~~~~~~~~~~~~~~~~~~ # # Bonds also contain 'color', and 'drawMode' attributes. They serve the same purposes here as they do # in atoms ('color' is the color specific to that bond, and 'drawMode' dictates # how the bond is represented). 'drawMode' for bonds can be either 'chimera.Bond.Wire' (wire representation) # or 'chimera.Bond.Stick' (stick representation). # The 'bond.display' attribute accepts slightly different values than that of other objects. # While other objects' 'display' can be set to either 'False' (not displayed) # or 'True' (displayed), 'bond.display' can be assigned a value of 'chimera.Bond.Never' (same as 'False' - bond is not # displayed), 'chimera.Bond.Always' (same as 'True' - bond is displayed), or 'chimera.Bond.Smart' which means that the # bond will only be # displayed if both the atoms it connects to are displayed. If not, the bond will not be displayed. # The heuristic that determines bond color is also a little more complicated than for atoms. # Bonds have an attribute called 'halfbond' # that determines the source of the bond's color. If 'halfbond' is set to 'True', then the # bond derives its color from the atoms which # it connects, and ignores whatever 'bond.color' is. If both those atoms are the same color (blue, for instance), # then the bond will appear blue. If the bonds atoms are different colors, then each half of the bond will correspond to the color # of the atom on that side. However, if 'bond.halfbond' is set to 'False', then that bond's color # will be be derived from its 'color' attribute, regardless of the 'color's of the atoms which it connects (except in the case # 'bond.color' is 'None', the bond will derive its color from one of the atoms to which it connects). # To set each bond's display mode to "smart", represent it as a stick, and turn halfbond mode on, # get a list of all bonds in the molecule BONDS = mol.bonds for b in BONDS: b.display = chimera.Bond.Smart b.drawMode = chimera.Bond.Stick b.halfbond = True # Residue Display Properties # ~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Residues are not "displayed" in the same manner that atoms and bonds are. When residues are displayed, they are # in the form of ribbons, and the attributes that control the visual details of the residues are named accordingly: # 'ribbonDisplay', 'ribbonColor', 'ribbonDrawMode'. The values for 'ribbonDrawMode' can be 'chimera.Residue.Ribbon_2D' (flat ribbon), # 'chimera.Residue.Ribbon_Edged' (sharp ribbon), or 'chimera.Residue.Ribbon_Round' (round/smooth ribbon). # If a residue's 'ribbonDisplay' value is set to 'False', it doesn't matter what 'ribbonDrawMode' # is - the ribbon still won't be displayed! # Residues have three attributes that control how the ribbon is drawn. 'isTurn', 'isHelix', and 'isSheet' (same as 'isStrand') are # set to either 'True' or 'False' based on secondary structure information contained in the source file (if available). # For any residue, only one of these can be set to 'True'. # So, to display only the residues which are part of an alpha-helix, as a smooth ribbon, # get a list of all the residues in the molecule RESIDUES = mol.residues for r in RESIDUES: # only for residues that are part of an alpha-helix if r.isHelix: r.ribbonDisplay = True r.ribbonDrawMode = chimera.Residue.Ribbon_Round