From: Thomas S. <tho...@gm...> - 2008-08-04 19:31:45
|
My sincere thanks to you Rolf! I apologize for taking so long to respond, but I had some unexpected travel to do over the weekend. I was "not seeing" the concept of "x=script("show chains");" -- it is not intuitively obvious (to me) that that will create an array rather than just a string (although it is rather flexible and handy that it does). Thanks again! -Tom PS -- I've been busily working at implementing your suggestion and it does appear to be working as expected, but I have currently gotten hung up with something in this portion of my script causing the Jmol graphics to freeze and stop responding. It's quite odd: the console still works. On Fri, Aug 1, 2008 at 3:37 AM, Rolf Huehne <rh...@fl...> wrote: > Thomas Stout wrote: > > Hi All -- > > > > Well, I've stumbled over this long enough & I need to ask for help! I > have > > a case where I want to step through the chains of a selection (many PDB > > files have more than one identical protein-ligand complex per > > crystallographic asymmetric unit and use the identical atom names and > > residue numbering, thereby only differing in chain ID). I would like to > use > > the "*show chains*" command introduced in 11.5.51, since that returns > > exactly what I need, but I admit to not fully understanding how to grab > this > > output into my scripting environment. I'd love to have an array that I > > could loop through (eg "chains[0]", chains[1]", etc). I could jump back > > and forth between javascript and JmolScript and accomplish the task with > > something like: > > > > function getChainArray() { > > var chainString = script("show chains"); //pass result of script > into > > variable as string > > var chains = chainString.split("\n"); //split string on > > linefeeds, or \r\n if Windows linefeeds > > } > > > > function UseTheSelection(){ > > var chains = getChainArray(); > > for (var j=0;j<chains.length;j++){ > > jmolScriptWait("select {selected} and chains[j]};"); > > jmolScriptWait("do other stuff"); > > } > > > > > > but, I really don't want to have to throw it back and forth. I'm > guessing > > there *must* be a simple way -- within JmolScript -- to get an array of > > chain IDs from the current selection, but I've not come up with it yet. > > > > You could use for example: > > x=script("show chains"); > for (i=1; i<=x.size; i=i+1); > # do some stuff using x[i] > end for; > > Unfortunately you get more lines than chains. For example with '1deh', > containing 2 protein chains (A,B) plus an empty chain identifier " " for > the water molecules you will get an array with 7 elements. so you still > might have to check if it is a valid chain identifier. > > Currently I am using the following solution to identify valid protein > chain identifiers: > > chain_id_list = array(" ","A","B","C","D","E","F","G","H","I","J","K", > "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c", > "d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u", > "v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"); > > for (i=1; i<=chain_id_list.size; i=i+1); > selection_expression = "protein AND *:" + chain_id_list[i]; > selected_atom_count = {@selection_expression}.size; > if (selected_atom_count > 0); > # do whatever you want > end if; > end for; > > Regards, > Rolf > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Jmol-users mailing list > Jmo...@li... > https://lists.sourceforge.net/lists/listinfo/jmol-users > |