<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 Pablo,<div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>All Python files have a global attribute named __file__ that is the full path to that file.  Therefore you can use os.split() to get the folder that your Python code is in.  Presumably your executable is in some fixed place relative to your code so you should be able to easily construct a path to it based on the code folder.</div><div class=""><br class=""></div><div class="">—Eric</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><br class="Apple-interchange-newline">

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Feb 27, 2017, at 3:17 PM, Pablo Solar Rodríguez <<a href="mailto:pablosolar.r@gmail.com" class="">pablosolar.r@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:rgb(68,68,68)"><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Hello dear Tom!</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Thank you so much for your quick response. I already get the files paths with self.object_menu.getvalue().<wbr class="">openedAs[0] and self.map_menu.volume().<wbr class="">openedAs[0]. So thank you!</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Now I've got a second problem relative to the predefined working path and cannot find any kind of solution with the existing doc. Hope you can help me...</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">To call the external program, I do:</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">cmd = ["/path/my_extension/external_<wbr class="">program", mapSelected, pdbSelected, arg3, arg4, arg5]</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">filename = "/path/my_rxtension/log.dat"</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">logfile = open(filename, "w")</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">logfile.flush()</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Popen(cmd, stdout=logfile,stderr=STDOUT, cwd="/path/my_extension/")</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">I would like the path to be dynamic to allow user to place my extension in the folder he/she wants. The question is, how can I set/get it? Imagine the folder where I put my extension is:</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">/path/</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">So I want to be able to get it. I tried to make:</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">os.getcwd(), os.path.dirname(), os.path.abspath(), os.curdir()</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">But I always get "/". I tried to make a settings.txt to set the path when my extension is loaded but, sincerely, I don't know how to define it to be setted on the initialization of the extension. I also tried to find the locations folder for extensions loaded in Favorites->Preferences without success. No solutions come to my mind at this moment, and maybe you could give an advice.</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Thank you so much for your time. Working with Chimera is being harder than I thought at first.</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class=""><br class=""></font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px"><font color="#444444" face="monospace, monospace" class="">Best regards, Pablo.</font></div></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">2017-02-24 20:20 GMT+01:00 Tom Goddard <span dir="ltr" class=""><<a href="mailto:goddard@sonic.net" target="_blank" class="">goddard@sonic.net</a>></span>:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">Hi Pablo,<div class=""><br class=""></div><div class="">  The typical approach is to write a temporary file for the PDB and the map, for example,</div><div class=""><br class=""></div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap">     </span>from Midas import write</div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap"> </span>write(mol, map, “outfile.pdb”)</div><div class=""><br class=""></div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap">       </span>map.write_file(“outfile.mrc”)</div><div class=""><br class=""></div><div class="">The first two lines write out a pdb file.  The map is given as an argument to tell it to write the PDB relative to the map coordinate system (probably what you want for fitting).  The third line writes the map file in MRC format.  Chimera does not write CCP4 format, but MRC and CCP4 are almost identical and can probably be used interchangably by your code.  If you need the file suffix to be ccp4 you can instead use</div><div class=""><br class=""></div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap"> </span>map.write_file(“outfile.ccp4”, format=“mrc”)</div><div class=""><br class=""></div><div class="">  In some cases you the opened molecule and map may already come from a PDB file and map file and you could use those paths.  But molecules can also come from mmCIF or mol2 and maps can come from many different format files or be produced inside Chimera.  So relying on the original files won’t work in general.  But if you still want to pursue that all models (molecule and map Python objects have an openedAs attribute that has the file path and file type:</div><div class=""><br class=""></div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap">    </span> mol.openedAs = (file_path, type, default_type, prefixable_type)</div><div class=""><br class=""></div><div class="">When the files are fetched from a database this does not give the local cached copy of the file.  For molecules the cached file path is simply not easy to get at, and for maps you can always get the local file path using map.data.path.</div><div class=""><br class=""></div><div class=""><span class="m_2866793230660370024Apple-tab-span" style="white-space:pre-wrap">   </span>Tom</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class=""><div class="h5"><div class="">On Feb 24, 2017, at 12:12 AM, Pablo Solar Rodríguez <<a href="mailto:pablo.solar@delogica.com" target="_blank" class="">pablo.solar@delogica.com</a>> wrote:</div><br class="m_2866793230660370024Apple-interchange-newline"></div></div><div class=""><div class=""><div class="h5"><div style="font-size:10pt;font-family:Helvetica,Arial,sans-serif" class=""><div class=""> <br class="m_2866793230660370024webkit-block-placeholder"></div>
<div class=""><span style="font-size:10pt;font-family:tahoma,arial,helvetica,sans-serif" class=""></span><span style="font-size:10pt;font-family:tahoma,arial,helvetica,sans-serif" class=""><code class=""><span class="m_2866793230660370024pun">Hello again dear mates!<br class=""><br class="">I've been working those days in my extension and the GUI es almost finished. Now I want to fill this skeleton with the process logic. To understand between us, I have an external compiled program that is executed in shell this way:<br class=""><br class="">./bin/myProgram ./dir1/pdbselected.pdb ./dir/mapselected.ccp4 arg3 arg3 arg4<br class=""><br class="">And for sure, in my .py test, it has to be executed as:<br class=""><br class="">import subprocess<br class="">subprocess.call(["./Users/<wbr class="">Solar/Desktop/parent/child1/<wbr class="">child2/bin/myProgram",<br class=""> "/Users/Solar/Desktop/parent/<wbr class="">child1/child2/dir1/<wbr class="">pdbselected.pdb", "/Users/Solar/Desktop/parent/<wbr class="">child1/child2/dir1/<wbr class="">mapselected.ccp4", "arg3", "arg4", "arg5"])<br class=""><br class="">The problem is to execute this in Chimera as an extension. The coding I made for the PDB and the Map it's similar to the FitMap tool (in Volume Data), where I use:<br class=""><br class="">...<br class=""># PDB<br class="">from chimera import Molecule<br class=""> mlist = [m for m in fit_object_models() if isinstance(m, Molecule)]<br class=""> fstart = mlist[0] if mlist else None<br class=""> from chimera.widgets import ModelOptionMenu<br class=""> om = ModelOptionMenu(ff, labelpos = 'w', label_text = 'Fit ',<br class=""> initialitem = fstart,<br class=""> listFunc = fit_object_models,<br class=""> sortFunc = compare_fit_objects,<br class=""> command = self.object_chosen_cb)<br class=""> om.grid(row = 0, column = 0, sticky = 'w')<br class=""> self.object_menu = om<br class=""><br class=""># Map<br class=""> fm = Volume_Menu(ff, ' in map ')<br class=""> fm.frame.grid(row = 0, column = 1, sticky = 'w')<br class=""> self.map_menu = fm<br class="">--<br class=""><br class="">The question is, how can I pass the PDB to the compiled program as it is expected? Or, another possible solution, the paths of the PDB and the Map loaded in Chimera? I didn't found any friendly doc (methods, info and so on) about this and and I'm a mess :/<br class=""><br class="">Thank you in advance dear coworkers!<br class=""><br class="">Pablo<br class=""></span></code></span></div>
<div class=""><span style="font-family:arial,helvetica,sans-serif;font-size:10pt" class=""> </span></div>
</div></div></div>
______________________________<wbr class="">_________________<br class="">Chimera-dev mailing list<br class=""><a href="mailto:Chimera-dev@cgl.ucsf.edu" target="_blank" class="">Chimera-dev@cgl.ucsf.edu</a><br class=""><a href="http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-dev" target="_blank" class="">http://plato.cgl.ucsf.edu/<wbr class="">mailman/listinfo/chimera-dev</a><br class=""></div></blockquote></div><br class=""></div></div><br class="">______________________________<wbr class="">_________________<br class="">
Chimera-dev mailing list<br class="">
<a href="mailto:Chimera-dev@cgl.ucsf.edu" class="">Chimera-dev@cgl.ucsf.edu</a><br class="">
<a href="http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-dev" rel="noreferrer" target="_blank" class="">http://plato.cgl.ucsf.edu/<wbr class="">mailman/listinfo/chimera-dev</a><br class="">
<br class=""></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><br class="webkit-block-placeholder"></div><p class=""><font size="1" face="tahoma, sans-serif" color="#38761d" class=""><b class=""><u class="">Pablo Solar Rodríguez</u></b></font></p><font size="1" face="tahoma, sans-serif" color="#0b5394" class=""><b class=""><div class=""><a href="mailto:pablosolar.r@gmail.com" style="font-weight:normal" target="_blank" class=""><b class="">pablosolar.r@gmail.com</b></a><br class=""></div></b></font><div class=""><div class=""><p class=""><br class=""></p></div></div></div></div></div></div>
</div>
_______________________________________________<br class="">Chimera-dev mailing list<br class=""><a href="mailto:Chimera-dev@cgl.ucsf.edu" class="">Chimera-dev@cgl.ucsf.edu</a><br class="">http://plato.cgl.ucsf.edu/mailman/listinfo/chimera-dev<br class=""></div></blockquote></div><br class=""></div></body></html>