<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Veronica,<div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>Unfortunately all the metal-coordination analysis is intimately integrated into the Metal Geometry graphical interface, but it is extractable via Python.  The general approach will be to get a handle on the Metal Geometry dialog and then prod it a lot to force it to tell you what you want. :-)  Probably easiest to make the whole thing a Python script and therefore you would play through the trajectory programmatically rather than using the MD Movie dialog.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>Assuming you have your trajectory open already, the first thing to do in the script would be to bring up the Metal Geometry dialog and get a reference to it:</div><div class=""><br class=""></div><div class=""><i class="">from chimera import dialogs</i></div><div class=""><i class="">from MetalGeom.gui import MetalsDialog</i></div><div class=""><i class="">dlg = dialogs.find(MetalsDialog.name, create=True)</i></div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>The Metal Geometry dialog (dlg) has a “metalsMenu” attribute, which is the menu near the top of the dialog that shows which metal is currently being analyzed.  That menu has a ‘valueMap’ attribute, which is a dictionary that maps from actual metal atom Python instances to the textual name shown for the atom in the menu.  Therefore:</div><div class=""><br class=""></div><div class=""><i class="">metals = dlg.metalsMenu.valueMap.keys()</i></div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>would produce a list of Python metal atoms in the “metals” variable, which will be handy soon. :-)  But you probably first need to write the code that loops through the coords sets.  The Molecule model that contains the metals will have a ‘coordSets’ instance, which is all the coordinate sets, therefore:</div><div class=""><br class=""></div><div class=""><i class="">mol = metals[0].molecule</i></div><div class=""><i class="">for coordSet in mol.coordSets:</i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">      </span>mol.activeCoordSet = coordSet</i></div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>will loop though all the Molecule’s coordinate sets.  Within the loop, you would loop through the metals, setting the metals menu as you go, with:</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span><i class="">for metal in metals:</i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">            </span>dlg.metalsMenu.invoke(metal)</i></div><div class=""><i class=""><br class=""></i></div><div class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>I don’t know if your “two atom selections” is all the metals in the trajectory or not.  If not, you’d have to write some code to filter the “metals” list down to just the two you want.</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>The coordinating atoms are in a table of the dialog whose attribute name is “coordinationTable”.  The attribute of that table that holds those atoms is named “data”.  Therefore you can get the coordinating atoms for the current metal with:</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">          </span><i class="">coordinators = dlg.coordinationTable.data</i></div><div class=""><i class=""><br class=""></i></div><div class=""><span class="Apple-tab-span" style="white-space: pre;">    </span>You can compute the distance, RMSD, and best geometry for each coordinator with:</div><div class=""><br class=""></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">               </span>for coordinator in coordinators:</i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">                    </span>dist = metal.coord().distance(coordinator.coord())</i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">                  </span>rmsd = dlg._avgError[coordinator]</i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>geom = dlg._bestGeom[coordinator]</i></div><div class=""><i class=""><br class=""></i></div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>You probably also want to put output to a file in that loop.  Keep in mind that atoms have a __str__ method, and therefore <i class="">str(a)</i> is a string representation of atom <i class="">a</i>.</div><div class=""><br class=""></div><div class="">—Eric</div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span></div><div class=""><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><span class="Apple-tab-span" style="white-space: pre;">    </span>Eric Pettersen</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">  </span>UCSF Computer Graphics Lab</div><div class=""><br class=""></div></div>

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Jan 27, 2017, at 1:39 AM, Ilkow, Veronica <<a href="mailto:veronica.ilkow@kcl.ac.uk" class="">veronica.ilkow@kcl.ac.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Dear All, <br class=""><br class="">Is there a way I could include the metal geometry analysis as a per frame script for a MD movie? Ideally I would like to have an output file which lists the best geometry and essentially prints out the co-ordination table for two atom selections per frame. I am trying to figure out how to use the python or chimera per-frame commands to specifically select an atom and then print an output file. Any hints and suggestions on how to do this will be greatly appreciated. <br class=""><br class="">Thank you in advance for your help. <br class=""><br class="">-Veronica <br class=""><br class=""><br class="">_______________________________________________<br class="">Chimera-users mailing list: <a href="mailto:Chimera-users@cgl.ucsf.edu" class="">Chimera-users@cgl.ucsf.edu</a><br class="">Manage subscription: <a href="http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-users" class="">http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-users</a><br class=""></div></div></blockquote></div><br class=""></div></body></html>