张增明( Zengming Zhang ) wrote:
> Hi, rhuehne:
>
> Sorry for late replaying, thanks for your advice, I've successfully
> loaded several structures in one viewer, but there is still a problem, for
> this script:
> <script>
> jmolInitialize("applet", "JmolApplet.jar");
> jmolApplet(500, "load 1dwd.pdb;load append 1cyn.pdb;frame all");
> </script>
> The structure of 1dwd and 1cyn can be loaded in the viewer, and both of
> them are visible, but the peoblem is that the mess center of them are not the
> same one, and Jmol display the atoms just according to their coordinates in
> pdb files. Is their any method that can make Jmol display all the structures
> at the same mess center? Or is this only can be solved by users of Jmol from
> modifying pdb files to change the coordinates by amending them to fit to one
> mess center?
If you just want to align the centers it is no problem.
(Jmol is no structural alignment program, so for more sophisticated
alignments you should do the alignment with another program, store the
new coordinates and then load them into Jmol.)
There is the 'translateSelected' command that enables to move selected
atoms around. The little subroutine below automatically aligns the
geometrical centers of all loaded files:
#
# ### align geometrical centers of all loaded structures ###
#
function center_frames;
var last_frame = "false";
var model_number = 2;
var stored_selection = {selected};
while (last_frame = "false");
var selection_expression = "*/" + frame_number;
select @selection_expression;
var frame_atom_count = {selected}.size;
if (frame_atom_count > 0);
var offset = {*/1}.xyz - {selected}.xyz;
translateSelected @offset;
else;
last_frame = "true";
end if;
frame_number = frame_number + 1;
end while;
center */1;
zoomto (*) 0;
select @stored_selection;
end function;
You can either write the subroutine into a file (e.g.: my_stuff.scr) and
load it with the command "script my_stuff.scr". Or you can join all
lines into a single line and add it to your applet initialization
script. (The joining is possible because all lines contain a semicolon
at the end.)
You can call the subroutine by finally adding "center_frames;".
(If you use a script file you could also add "center_frames;" after the
end of the subroutine definition. Then it would be called automatically
when you load the script file.)
This is how it works:
1) Store the current selection.
2) Select all atoms of the second frame.
3) If any atoms are selected (= frame exists and has atoms) then
determine the offset between the center of the first frame and the
second frame. Move the second frame by the determined offset.
4) Increment the frame number and repeat step 2-4 until no atoms are
selected in the frame.
5) Center the display at the center of frame 1.
6) Zoom the view so that everything fits into the applet window.
7) Restore the stored selection.
Regards,
Rolf
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users