<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Ben,<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Mar 13, 2023, at 12:14 PM, Ben Webb via ChimeraX-users <<a href="mailto:chimerax-users@cgl.ucsf.edu" class="">chimerax-users@cgl.ucsf.edu</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Am I right in thinking that when reading a trajectory (e.g. .dcd file), all requested frames from that trajectory are first read in, after which the "coordset" command can be used to work with the trajectory?</div></div></blockquote><div><br class=""></div>Yes.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div class="">I am reading frames from an RMF file (using the RMF plugin, the "rmf readtraj" command) which is quite slow, perhaps a second per frame - because RMF stores local coordinates which must be transformed to make the global coordinates ChimeraX is using. So if the user asks to read 100 frames, ChimeraX becomes unresponsive for ~100s, which is not a great user experience.<br class=""><br class="">One possible solution would be to read the 100 frames "lazily", e.g. just create 100 copies of the active coordset, then when the user writes "coordset #1 N" for the first time or scrolls to frame N with "coordset slider", read in frame N from the RMF file and overwrite coordset N. That way there would be a 1s delay only the first time that frame is shown. Is this possible? I see there is an "active coordset changed" trigger - perhaps I could attach to that?<br class=""></div></div></blockquote><div><br class=""></div>You <i class="">might</i><span style="font-style: normal;" class=""> be able to get away with responding to the </span> "active coordset changed” trigger.  My cursory inspection of the code didn’t reveal any problems with that approach.  Nonetheless, if you implement something and encounter problems, we might have to add an “coordset about to change” trigger — which would not be hard to do if necessary.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div class="">Alternatively, is there an API for tools to run long-running processes in the background so that the user can work on other things in the meantime, or cancel it if it takes too long?<br class=""></div></div></blockquote><div><br class=""></div>We have some job/task management infrastructure, though no GUI control yet.  Nonetheless I don’t think this is the way to go because atomic data structures are not thread safe.  While you could partially protect yourself by running the final coordinate set update through session.ui.thread_safe, you’d still be in very hot water if the user closed the structure while these threads were executing, as just one problematic scenario.</div><div><br class=""></div><div><div>--Eric</div><div><br class=""></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>Eric Pettersen</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>UCSF Computer Graphics Lab</div></div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><div class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>Ben<br class="">-- <br class=""><a href="mailto:ben@salilab.org" class="">ben@salilab.org</a>                      <a href="https://salilab.org/~ben/" class="">https://salilab.org/~ben/</a><br class="">"It is a capital mistake to theorize before one has data."<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>- Sir Arthur Conan Doyle<br class="">_______________________________________________<br class="">ChimeraX-users mailing list<br class=""><a href="mailto:ChimeraX-users@cgl.ucsf.edu" class="">ChimeraX-users@cgl.ucsf.edu</a><br class="">Manage subscription:<br class="">https://www.rbvi.ucsf.edu/mailman/listinfo/chimerax-users<br class=""></div></div></blockquote></div><br class=""></body></html>