easy way to make alignments in chimera

Hello, I would like to ask if there is any quick way to make aligment (with secondary structure score included) beetwen two homologous protein structures, and save them in Stockholm format (information about missing residues is needed). I have houndreds of such pairs, and it would be very helpfull to do it by script for headless Chimera. -- yours sincerely Michael Kadlof University of Warsaw

On May 21, 2014, at 3:54 AM, Michał Kadlof <ramidas@gmail.com> wrote:
Hello,
I would like to ask if there is any quick way to make aligment (with secondary structure score included) beetwen two homologous protein structures, and save them in Stockholm format (information about missing residues is needed). I have houndreds of such pairs, and it would be very helpfull to do it by script for headless Chimera.
Hi Michał, Well, depending on your definition of "quick", the answer is a qualified yes. The first thing would be to look through this primer for looping through data files and doing things with them in Chimera: http://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/basicPrimer.html The second thing to know is that you can superimpose two structures (with secondary structures considered) with the "matchmaker" (or "mm") command. Type "help matchmaker" in Chimera's command line to see the help page with the command's options. The tricky part is running Match->Align to generate an alignment based on the superposition without using the graphical interface, and then saving the results in Stockholm format. You will need to use the Python interface to Match->Align, basically: from StructSeqAlign import makeAlignment seqs = makeAlignment(chains, makeMAV=False) class fakeMAV: fileAttrs = {} from MultAlignViewer.formatters import saveStockholm f = open("output.sto", "w") saveStockholm.save(f, fakeMAV(), seqs, {}) f.close() Note that makeAlignment() has additional optional arguments for changing the alignment parameters from their defaults. If you look at the code I think they're reasonably self-explanatory (e.g. circular=True/False). So the main question is what is the 'chains' argument to the makeAlignment() call? Well, it's a list of the chains you want in the alignment. Let's say you want to match chain A from model 0 to chain B of model 1. You'd need code like this (which assumes you have just those two models open): from chimera import openModels, Molecule models = openModels.list(modelTypes=[Molecule]) if models[0].id == 0: m0, m1 = models else: m1, m0 = models chains = [m0.sequence('A'), m1.sequence('B')] --Eric Eric Pettersen UCSF Computer Graphics Lab http://www.cgl.ucsf.edu

Hello, thank you for your answer, but I'm not sure if this is what I need. When I did it by mouse clicking I did my alignments without superimposing structures. I did: Favourites -> sequence then selected first one out of two, and then edit -> Add sequence -> from structure tab here selected second structure, and checked "Include secondary structure score (30%)", and apply. The final alignment is much better in my case, than those made by match -> align. Results in printscreen below. Is there a way to do this by script? [image: Obraz w treści 1] -- yours sincerely Michael Kadlof University of Warsaw 2014-05-21 22:01 GMT+02:00 Eric Pettersen <pett@cgl.ucsf.edu>:
On May 21, 2014, at 3:54 AM, Michał Kadlof <ramidas@gmail.com> wrote:
Hello,
I would like to ask if there is any quick way to make aligment (with secondary structure score included) beetwen two homologous protein structures, and save them in Stockholm format (information about missing residues is needed). I have houndreds of such pairs, and it would be very helpfull to do it by script for headless Chimera.
Hi Michał, Well, depending on your definition of "quick", the answer is a qualified yes. The first thing would be to look through this primer for looping through data files and doing things with them in Chimera:
http://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/basicPrimer.html
The second thing to know is that you can superimpose two structures (with secondary structures considered) with the "matchmaker" (or "mm") command. Type "help matchmaker" in Chimera's command line to see the help page with the command's options. The tricky part is running Match->Align to generate an alignment based on the superposition without using the graphical interface, and then saving the results in Stockholm format. You will need to use the Python interface to Match->Align, basically:
from StructSeqAlign import makeAlignment seqs = makeAlignment(chains, makeMAV=False) class fakeMAV: fileAttrs = {} from MultAlignViewer.formatters import saveStockholm f = open("output.sto", "w") saveStockholm.save(f, fakeMAV(), seqs, {}) f.close()
Note that makeAlignment() has additional optional arguments for changing the alignment parameters from their defaults. If you look at the code I think they're reasonably self-explanatory (e.g. circular=True/False). So the main question is what is the 'chains' argument to the makeAlignment() call? Well, it's a list of the chains you want in the alignment. Let's say you want to match chain A from model 0 to chain B of model 1. You'd need code like this (which assumes you have just those two models open):
from chimera import openModels, Molecule models = openModels.list(modelTypes=[Molecule]) if models[0].id == 0: m0, m1 = models else: m1, m0 = models chains = [m0.sequence('A'), m1.sequence('B')]
--Eric
Eric Pettersen
UCSF Computer Graphics Lab

Hi Michael, If you don't superimpose the structures then Match->Align won't give a very good result. As per it's name, Match->Align takes "matched" (superimposed) structures and produces an alignment based on that superimposition. What you are doing now is basically identical to running MatchMaker with your first sequence as the reference sequence. If that's what you want to do then just run MatchMaker (using the matchmaker command for instance) and make sure it creates an MAV instance (i.e. add "show true" to the command arguments), find the MatchMaker instance (details below) and use it to save the Stockholm file. Here's the tricky code to find the MAV instance: def findMAV(): from chimera.extension import manager from MultAlignViewer.MAViewer import MAViewer mavs = [inst for inst in manager.instances if isinstance(inst, MAViewer) if not mavs: raise AssertionError("No MAV instances") return mavs[-1] mav = findMAV() Then you use basically the same code I gave before for saving the Stockholm file except that 'seqs' is just 'mav.seqs' and you don't have to construct a fakeMAV instance, just use the actual MAV instance you have. You probably want to close each pair of structures after getting the alignment so that there's no chance that findMAV will return the wrong instance (I don't think it will anyway). If it is a problem to do so, then make the MAV quit instead by calling mav.Quit(). This whole process will only work with the graphical user interface available (i.e. not in the "headless" version of Chimera) since it needs the MAV dialog, whereas the process I gave the last time could be run in the headless version. --Eric On Jun 13, 2014, at 12:53 AM, Michał Kadlof <ramidas@gmail.com> wrote:
Hello,
thank you for your answer, but I'm not sure if this is what I need. When I did it by mouse clicking I did my alignments without superimposing structures.
I did: Favourites -> sequence then selected first one out of two, and then edit -> Add sequence -> from structure tab here selected second structure, and checked "Include secondary structure score (30%)", and apply. The final alignment is much better in my case, than those made by match -> align. Results in printscreen below.
Is there a way to do this by script?
<image.png>
-- yours sincerely Michael Kadlof University of Warsaw
2014-05-21 22:01 GMT+02:00 Eric Pettersen <pett@cgl.ucsf.edu>: On May 21, 2014, at 3:54 AM, Michał Kadlof <ramidas@gmail.com> wrote:
Hello,
I would like to ask if there is any quick way to make aligment (with secondary structure score included) beetwen two homologous protein structures, and save them in Stockholm format (information about missing residues is needed). I have houndreds of such pairs, and it would be very helpfull to do it by script for headless Chimera.
Hi Michał, Well, depending on your definition of "quick", the answer is a qualified yes. The first thing would be to look through this primer for looping through data files and doing things with them in Chimera:
http://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/basicPrimer.html
The second thing to know is that you can superimpose two structures (with secondary structures considered) with the "matchmaker" (or "mm") command. Type "help matchmaker" in Chimera's command line to see the help page with the command's options. The tricky part is running Match->Align to generate an alignment based on the superposition without using the graphical interface, and then saving the results in Stockholm format. You will need to use the Python interface to Match->Align, basically:
from StructSeqAlign import makeAlignment seqs = makeAlignment(chains, makeMAV=False) class fakeMAV: fileAttrs = {} from MultAlignViewer.formatters import saveStockholm f = open("output.sto", "w") saveStockholm.save(f, fakeMAV(), seqs, {}) f.close()
Note that makeAlignment() has additional optional arguments for changing the alignment parameters from their defaults. If you look at the code I think they're reasonably self-explanatory (e.g. circular=True/False). So the main question is what is the 'chains' argument to the makeAlignment() call? Well, it's a list of the chains you want in the alignment. Let's say you want to match chain A from model 0 to chain B of model 1. You'd need code like this (which assumes you have just those two models open):
from chimera import openModels, Molecule models = openModels.list(modelTypes=[Molecule]) if models[0].id == 0: m0, m1 = models else: m1, m0 = models chains = [m0.sequence('A'), m1.sequence('B')]
--Eric
Eric Pettersen UCSF Computer Graphics Lab http://www.cgl.ucsf.edu
_______________________________________________ Chimera-users mailing list Chimera-users@cgl.ucsf.edu http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-users
participants (2)
-
Eric Pettersen
-
Michał Kadlof