<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="">Great! &nbsp;Yeah, I forgot that traj.coordSets is a dictionary (frame# -&gt; coordinate set) rather than a list. &nbsp;Good work!<div class=""><br class=""></div><div class="">I guess I should point out that your version of the script will only work if the frame numbers are continuous and start from 1, which should be the case for almost all trajectories.<br class=""><div class=""><br class=""></div><div class="">—Eric</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 26, 2016, at 11:30 AM, Jérémie KNOOPS [531802] &lt;<a href="mailto:Jeremie.KNOOPS@umons.ac.be" class="">Jeremie.KNOOPS@umons.ac.be</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; 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; direction: ltr; font-family: Tahoma; font-size: 10pt;" class="">Hi Eric,<br class=""><br class="">Thank you very much, I didn't expect an (almost) ready to use script.<br class="">I only change the loop, the one with enumerate didn't work. But now it works perfectly. This is the script I use :<br class=""><br class=""># the script assumes you've already opened the trajectory in Chimera<span class="Apple-converted-space">&nbsp;</span><br class="">from chimera import openModels, Molecule<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># we assume the trajectory is the only open model<span class="Apple-converted-space">&nbsp;</span><br class="">traj = openModels.list(modelTypes=[Molecule])[0]<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># load all the frames<span class="Apple-converted-space">&nbsp;</span><br class="">traj.loadAllFrames()<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># open the output file (change as desired)<span class="Apple-converted-space">&nbsp;</span><br class="">import os.path<span class="Apple-converted-space">&nbsp;</span><br class="">f = open(os.path.expanduser('~/Documents/hbonds.txt'), "w")<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># get the functions and parameters we need for finding H-bonds<span class="Apple-converted-space">&nbsp;</span><br class="">from FindHBond import findHBonds, recDistSlop, recAngleSlop<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># loop through the coordinate sets (frames)<span class="Apple-converted-space">&nbsp;</span><br class="">c = traj.coordSets<span class="Apple-converted-space">&nbsp;</span><br class="">for frame in range(len(c)):<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;&nbsp;&nbsp; traj.activeCoordSet = c[frame+1]<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;&nbsp;&nbsp; # find and print the number of H-bonds, and cache which atoms<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;&nbsp;&nbsp; # are donors/acceptors, so they're not computed each frame<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;&nbsp;&nbsp; print&gt;&gt;f, "Frame", frame+1, len(findHBonds([traj], distSlop=recDistSlop, angleSlop=recAngleSlop, cacheDA=True))<span class="Apple-converted-space">&nbsp;</span><br class="">&nbsp;<br class=""># close/flush the output file<span class="Apple-converted-space">&nbsp;</span><br class="">f.close()<br class=""><br class="">I have an additional question : what's the way to restrict the residues to search for hbond donors &amp; acceptors with python commands?<br class=""><br class="">Jérémie<br class=""><div style="font-family: 'Times New Roman'; font-size: 16px;" class=""><hr tabindex="-1" class=""><div id="divRpF810145" style="direction: ltr;" class=""><font face="Tahoma" size="2" class=""><b class="">De :</b><span class="Apple-converted-space">&nbsp;</span>Eric Pettersen [<a href="mailto:pett@cgl.ucsf.edu" class="">pett@cgl.ucsf.edu</a>]<br class=""><b class="">Envoyé :</b><span class="Apple-converted-space">&nbsp;</span>samedi 23 avril 2016 2:29<br class=""><b class="">À :</b><span class="Apple-converted-space">&nbsp;</span>Jérémie KNOOPS [531802]<br class=""><b class="">Cc&nbsp;:</b><span class="Apple-converted-space">&nbsp;</span><a href="mailto:chimera-users@cgl.ucsf.edu" class="">chimera-users@cgl.ucsf.edu</a><br class=""><b class="">Objet :</b><span class="Apple-converted-space">&nbsp;</span>Re: [Chimera-users] HBond on every frames of a large trajectory<br class=""></font><br class=""></div><div class=""></div><div class=""><div class=""><div class="">On Apr 22, 2016, at 9:30 AM, Jérémie KNOOPS [531802] wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite" class=""><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant-ligatures: normal; font-variant-position: normal; font-variant-caps: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: 12px;"><div lang="FR-BE" class=""><div class="WordSection1"><div style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span lang="EN-US" class="">Hi,<br class=""><br class="">What is the easiest and fastest way to get the number of H bonds on every frame of a large trajectory (&gt;10 000 frames) and print it to a file?<span class="Apple-converted-space">&nbsp;</span><br class="">The hbonds command does not seem to work with the perframe command and displaying the whole trajectory to run a per-frame script is quite slow.</span></div></div></div></span></blockquote></div><div class=""><br class=""></div><div class="">Hi&nbsp;Jérémie,</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>To do this efficiently, we need to use a Python script. &nbsp;In the script the important things to avoid are: 1) a redraw for every trajectory frame, and 2) creating and destroying graphics objects representing the H-bonds every frame. &nbsp;This means we are going to avoid using the handy-but-non-efficient runCommand() Python call, which typically causes a redraw, and we are going to call the functions underlying the FindHBonds tool, in order to find the h-bonded pairs without creating pseudobonds and so on. &nbsp;We will also step through the coordinate sets (frames) in Python.</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>Here's a script:</div><div class=""><br class=""></div><div class=""># the script assumes you've already opened the trajectory in Chimera</div><div class="">from chimera import openModels, Molecule</div><div class=""><br class=""></div><div class=""># we assume the trajectory is the only open model</div><div class="">traj = openModels.list(modelTypes=[Molecule])[0]</div><div class=""><br class=""></div><div class=""># load all the frames</div><div class="">traj.loadAllFrames()</div><div class=""><br class=""></div><div class=""># open the output file (change as desired)</div><div class="">import os.path</div><div class="">f = open(os.path.expanduser("~/hbonds.out"), "w")</div><div class=""><br class=""></div><div class=""># get the functions and parameters we need for finding H-bonds</div><div class="">from FindHBond import findHBonds, recDistSlop, recAngleSlop</div><div class=""><br class=""></div><div class=""># loop through the coordinate sets (frames)</div><div class="">for i, cs in enumerate(traj.coordSets):</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>traj.activeCoordSet = cs</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span># find and print the number of H-bonds, and cache which atoms</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span># are donors/acceptors, so they're not computed each frame</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>print&gt;&gt;f, "Frame", i+1, len(findHBonds([traj], distSlop=recDistSlop,</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"></span>angleSlop=recAngleSlop, cacheDA=True))</div><div class=""><br class=""></div><div class=""># close/flush the output file</div><div class="">f.close()</div><div class=""><br class=""></div><div class="">Put the above in a file whose name ends in ".py" and open it in Chimera (after opening your trajectory) and it should write the number of hydrogens bonds for each frame to a file named "hbonds.out" in your home directory. &nbsp;I didn't test it but I'm fairly certain the logic is correct. &nbsp; &nbsp;I'm also pretty sure the syntax is correct, thought it's more possible I missed a parenthesis or quote somewhere. &nbsp;If you know Python it should be easy to fix any such errors . &nbsp;Otherwise, let me know the error and I'll provide a fix.</div><div class=""><br class=""></div><div class="">--Eric</div><div class=""><br class=""></div><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></div></div></div></blockquote></div><br class=""></div></div></body></html>