Jmol/Storymorph: Difference between revisions

Karsten Theis (talk | contribs)
Karsten Theis (talk | contribs)
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Image:Spike labeled spacefill small.gif|right|border]]
[[Image:Spike labeled spacefill small.gif|right|border]]
This is a draft documentation for Storymorph, a suite of Jmol functions to help with superimposing and morphing between two structures representing different conformations of a molecule or molecular assembly ([[Image:storymorph.spt]]). For more general information, see [[Jmol/superposition]] and [[Morphs]]. If you load storymorph.spt into a Jmol session where no structures have loaded, it will run a demonstration superposition and morph based on calmodulin strutures. Most examples in this documentation are from this demo.
This is the documentation for Storymorph, a suite of Jmol functions to help with superimposing and morphing between two structures representing different conformations of a molecule or molecular assembly ([https://proteopedia.org/wiki/index.php/Image:Storymorph.spt script]). For more general information, see [[Jmol/superposition]] and [[Morphs]]. If you load storymorph.spt into a Jmol session where no structures have loaded or all structures have been removed using the "zap" command, it will run a demonstration superposition and morph based on calmodulin strutures. Most examples in this documentation are from this demo.


== Overview of capabilities ==
== Overview of capabilities ==
Line 10: Line 10:


==Try it yourself==
==Try it yourself==
If you want to get a feel for the morphs before you read the theory, explore this section. If you don't like pushing buttons without knowing what is happening, skip this section and come back to it later.
<StructureSection load='' size='500' side='right' caption='' scene=''>
<StructureSection load='' size='500' side='right' caption='' scene=''>
This interactive example is for playing around with the different choices you can make when preparing a morph. Some combinations of choices will make morphs that are easy to understand and have low-energy conformations on the path between initial and final states. Other combinations of choices will make morphs that are hard to understand or follow an unrealistic path. We are using the structures of calmodulin [[1prw]] and [[1cll]], after removing all atoms but the carbon alpha atoms to reduce the computational cost (i.e. giving a fairly fast morph). We first load and display the two structures, and then you can click on the buttons below to superimpose and morph. Try different combinations to get a feel for what is possible, and what makes sense to you.
This interactive example is for playing around with the different choices you can make when preparing a morph. Some combinations of choices will make morphs that are easy to understand and have low-energy conformations on the path between initial and final states. Other combinations of choices will make morphs that are hard to understand or follow an unrealistic path. We are using the structures of calmodulin [[1prw]] and [[1cll]], after removing all atoms but the carbon alpha atoms to reduce the computational cost (i.e. giving a fairly fast morph). We first load and display the two structures, and then you can click on the buttons below to superimpose and morph. Try different combinations to get a feel for what is possible, and what makes sense to you.
Line 89: Line 90:
</jmol>
</jmol>


'''Choose a morph'''
'''Run a morph'''


<jmol>
<jmol>
Line 112: Line 113:
   </jmolButton>
   </jmolButton>
</jmol>
</jmol>
'''Additional parameters'''
You can change these parameters, and then run another morph.


Change the timing
Change the timing
Line 192: Line 197:
# To focus on the N-terminal domain, superimpose Nterm, and run the "C anchored to N" morph. With this superposition, you can see the (less subtle) changes in the N-terminal domain, while the changes in the C-terminal domain are hardly perceptible. To explore how the anchoring helps to maintain covalent bonds, run the "independent domains" morph instead. To emphasize the distance of the link between the two domains (in this case, the distance between consecutive alpha carbon atoms), choose the "combo" representation and run the two morphs again (see animated GIF on the right.
# To focus on the N-terminal domain, superimpose Nterm, and run the "C anchored to N" morph. With this superposition, you can see the (less subtle) changes in the N-terminal domain, while the changes in the C-terminal domain are hardly perceptible. To explore how the anchoring helps to maintain covalent bonds, run the "independent domains" morph instead. To emphasize the distance of the link between the two domains (in this case, the distance between consecutive alpha carbon atoms), choose the "combo" representation and run the two morphs again (see animated GIF on the right.
# To see a bad linear morph, superimpose "Nterm", check "skip rigid" and run any of the morphs. The reason the morph is bad is the large rotation of the C-terminal domain, foreshortening distances (e.g. "flattening" helices) in the middle of the trajectory in the absence of a rigid body movement.
# To see a bad linear morph, superimpose "Nterm", check "skip rigid" and run any of the morphs. The reason the morph is bad is the large rotation of the C-terminal domain, foreshortening distances (e.g. "flattening" helices) in the middle of the trajectory in the absence of a rigid body movement.
# To see a good linear morph, superimpose "all", check "skip rigid" and run any of the morphs. Because the necessary rotations are smeller in this case, the distortion of the domains is much smaller and hardly noticable as the domains are moving.
# To see a good linear morph, superimpose "all", check "skip rigid" and run any of the morphs. Because the necessary rotations are smaller in this case, the distortion of the domains is much smaller and hardly noticable as the domains are moving.


== Two-phase Morph: rigid body followed by linear interpolation ==
== Two-phase Morph: rigid body followed by linear interpolation ==
Line 204: Line 209:
In the right example, the midpoint of the "P" travels on a line (faint red line). As a result, the base of the "P", which has the same position in the initial and final state, moves away from this position during the morph. In the left example, the base of the "P" was chosen as anchor. Now it travels on a straight line (or in this case stays put) while the other parts of the "P" travel on curved paths (blue faint lines).
In the right example, the midpoint of the "P" travels on a line (faint red line). As a result, the base of the "P", which has the same position in the initial and final state, moves away from this position during the morph. In the left example, the base of the "P" was chosen as anchor. Now it travels on a straight line (or in this case stays put) while the other parts of the "P" travel on curved paths (blue faint lines).
   
   
If the anchor selection is part of another domain, the morph algorithm will ensure that the distance of the domain to the anchor remains constant throughout the morph. In essence, the other domain "drags along" the domain in question. To maintain connectivity between domains linke by a single covalent bond, an appropriate anchor would be the atom or residue the domain is directly attached to. If their are multiple covelent connections between domains, you can choose the anchor to include all the connection points.
If the anchor selection is part of another domain, the morph algorithm will ensure that the distance of the domain to the anchor remains constant throughout the morph. In essence, the other domain "drags along" the domain in question. To maintain connectivity between domains linked by a single covalent bond, an appropriate anchor would be the atom or residue the domain is directly attached to. If their are multiple covalent connections between domains, you can choose the anchor to include all the connection points.


[[Image:Morph two anchor.gif‎]]  
[[Image:Morph two anchor.gif‎]]  
Line 222: Line 227:
  <nowiki>structures = [{1.1}, {2.1}]</nowiki>
  <nowiki>structures = [{1.1}, {2.1}]</nowiki>


Here, the selection is the first and the second structure loaded. For models in a single-structure file, you would use "1.1" and "1.2" instead. For subunits with different conformation, you would select by chain name, e.g. "chain=A" and "chain=B". More complicated cases are possible (chain B of the second model vs. chain A of the third model) but probably rare.
Here, the selection is the first and the second structure loaded. For models in a single-structure file, you would use "1.1" and "1.2" instead. For subunits with different conformation, you would select by chain name, e.g. chain="A" and chain="B". More complicated cases are possible (chain B of the second model vs. chain A of the third model) but probably rare.


== Defining the domains ==
== Defining the domains ==
Line 250: Line 255:
== Superposition ==
== Superposition ==


The superimpose function works the same way as the Jmol compare function, but it first verifies the required atom selections to prevent Jmol from crashing or freezing. The superimpose function takes two or three parameters. The first paramenter always defines the two structures (see above). The second parameter is either a single domain selection (when calling with two parameters), or it is the list of list describing all domains, with the third parameter an integer designating which domain is to be used in the superposition. The superposition leaves the  first structure in its original orientation and moves the second structure to minimize the distances between corresponding atoms (defined by the domain selection). Different from the morph function, the superposition function alters coordinates for the remainder of the session. Because morphs connect initial and final atomic positions with a path, the orientation of the final state with respect to the initial one is crucial, and the choice of superposition defines this orientation. Said in a different way, you get a different morph if you choose to superimpose the two structures in a different way before starting the morph.
The superimpose function works the same way as the Jmol compare function, but it first verifies the required atom selections to prevent Jmol from crashing or freezing. The superimpose function takes two or three parameters. The first paramenter always defines the two structures (see above). The second parameter is either a single domain selection (when calling with two parameters), or it is the list of list describing all domains, with the third parameter an integer designating which domain is to be used in the superposition. The superposition leaves the  first structure in its original orientation and moves the second structure to minimize the distances between corresponding atoms (defined by the domain selection). Different from the morph function, the superposition function alters coordinates for the remainder of the session. Because morphs connect initial and final atomic positions with a path, the orientation of the final state with respect to the initial one is crucial, and the choice of superposition defines this orientation. In other words, you get a different morph if you choose to superimpose the two structures in a different way before starting the morph.


To superimpose the two structures by minimizing distances in a given domain, use the superimpose() function. For example,
To superimpose the two structures by minimizing distances in a given domain, use the superimpose() function. For example,
Line 332: Line 337:
   [{4-77}, {78}],                  // morph 4-77 as unit, anchored at 78
   [{4-77}, {78}],                  // morph 4-77 as unit, anchored at 78
]
]
superimpose(structures, domains[1])
script "https://proteopedia.org/wiki/images/a/a2/Storymorph.spt"
superimpose(structures, domains, 1)
center visible
center visible
model 1
morph(5,structures, domains)
morph(5,structures, domains)
</nowiki>
</nowiki>


=== Hexokinase ===
=== Hexokinase ===
  <nowiki>load apo.pdb
  <nowiki>load "https://proteopedia.org/wiki/images/f/f2/Apo_hexokinase.pdb"
load append "=3O8M"
load append "=3O8M"
select all; cartoon only
select all; cartoon only
Line 368: Line 375:
color cpk
color cpk


morph(20, conformations, domains, timing)</nowiki>
script "https://proteopedia.org/wiki/images/a/a2/Storymorph.spt"
morph(20, structures, domains, timing)</nowiki>
 
==Storymorphs on Proteopedia==
The following pages contain morphs created with the Jmol script:
 
[[Recoverin, a calcium-activated myristoyl switch]]
 
[[Calmodulin]]
 
[[Human lactoferrin]]
 
[[Hexokinase]]
 
[[Lipase lid morph]]
 
[[Mfd translocase]]
 
[[T7 RNA Polymerase]]
 
[[SARS-CoV-2 spike protein fusion transformation]]
 
If you use Storymorph to make your own morphs, please add the following to your references:
 
<nowiki>
<ref>The [[Jmol/Storymorph|Storymorph Jmol scripts]]
were used to create the interpolation shown in the morph.
[https://proteopedia.org/wiki/index.php/Image:Spike_SARS_CoV_2_storymorph.pdb|Coordinates]
available on Proteopedia</ref>
</nowiki>
 
If the morph is made on the fly in Proteopedia, please reference as:
<nowiki>
<ref>The [[Jmol/Storymorph|Storymorph Jmol scripts]]
creates the interpolated coordinates
of the morph on the fly.</ref></nowiki>
 
This way, there will be an easy way to find all Storymorphs on the site, and readers can learn about the method used.

Proteopedia Page Contributors and Editors (what is this?)Proteopedia Page Contributors and Editors (what is this?)

Karsten Theis