Revision: 20266
          http://sourceforge.net/p/jmol/code/20266
Author:   hansonr
Date:     2015-02-04 12:47:46 +0000 (Wed, 04 Feb 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.3.12_2015.02.04"

new feature: print data({*},"xyz") 
  -- (lower case) writes only atom data lines
   
new feature: print data({*},"XYZ", true) 
  -- third parameter TRUE writes all trajectories

bug fix: show mouse  fails in JavaScript
  -- we cannot test using PT.isAI() in org.jmol.viewer.binding.Binding 
  -- because of a Java2Script compiler creates standard array [...] 
  -- from new int[] {....} whereas it should create Clazz.newArray() and fill it
bug fix: writing of file formats was inconsistent between WRITE and data()  
(not fixed in 14.2)   
bug fix: Jmol writing of PDB file data did not include TER records (not fixed 
in 14.2)
bug fix: label %r should print "1" for non-PDB file atoms
bug fix: 01.30 mutate {xxx} ~... skips first-listed replacement group identifier
bug fix: 01.29 breaks loading non-trajectory file after a trajectory is loaded

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/api/JmolBioResolver.java
    trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java
    trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java
    trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java
    trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/binding/Binding.java

Modified: trunk/Jmol/src/org/jmol/api/JmolBioResolver.java
===================================================================
--- trunk/Jmol/src/org/jmol/api/JmolBioResolver.java    2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/api/JmolBioResolver.java    2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -56,8 +56,6 @@
 
   public short getGroupID(String g3);
 
-  public boolean mutate(BS bs, String fileName, String[] sequence);
-
   public String toStdAmino3(String sValue);
   
   }

Modified: trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java  2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java  2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -95,4 +95,6 @@
 
   public void resetRasmolBonds(BS bs);
 
+  boolean mutate(BS bs, String group, String[] sequence);
+
 }

Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java   2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java   2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -836,7 +836,133 @@
     ms.haveStraightness = true;
   }
 
+  @Override
+  public boolean mutate(BS bs, String group, String[] sequence) {
+    
+    int i0 = bs.nextSetBit(0);
+    if (sequence == null)
+      return mutateAtom(i0, group);
+    boolean isFile = (group == null);
+    if (isFile)
+      group = sequence[0];
+    Group lastGroup = null;
+    boolean isOK = true;
+    for (int i = i0, pt = 0; i >= 0; i = bs.nextSetBit(i + 1)) {
+      Group g = ms.at[i].group;
+      if (g == lastGroup)
+        continue;
+      lastGroup = g;
+      if (!isFile) {
+        group = sequence[pt++ % sequence.length];
+        if (group.equals("UNK"))
+          continue;
+        group = "==" + group;
+      }
+      mutateAtom(i, group);
+    }
+    return isOK;
+  }
+  
+  private boolean mutateAtom(int iatom, String fileName) {
+    // no mutating a trajectory. What would that mean???
+    int iModel = ms.at[iatom].mi;
+    if (ms.isTrajectory(iModel))
+      return false; 
+    
+    String[] info = vwr.fm.getFileInfo();
+    boolean b = vwr.getBoolean(T.appendnew);
+    Group g = ms.at[iatom].group;
+    //try {
+      // get the initial group -- protein for now
+      if (!(g instanceof AminoMonomer))
+        return false;
+      ((BioModel) ms.am[iModel]).isMutated = true;
+      AminoMonomer res0 = (AminoMonomer) g;
+      int ac = ms.ac;
+      BS bsRes0 = new BS();
+      res0.setAtomBits(bsRes0);
+      int r = g.getResno();
+      
+      // just use a script -- it is much easier!
+      
+      fileName = PT.esc(fileName);
+      String script = "" +
+            "try{\n"
+          + "  var atoms0 = {*}\n"
+          + "  var res0 = " + BS.escape(bsRes0,'(',')')  + "\n"
+          + "  set appendNew false\n"
+          + "  load append "+fileName+"\n"
+          + "  set appendNew " + b + "\n"
+          + "  var res1 = {!atoms0};var r1 = res1[1];var r0 = res1[0]\n"
+          + "  if ({r1 & within(group, r0)}){\n" 
+          + "    var haveHs = ({_H & connected(res0)} != 0)\n"
+          + "    if (!haveHs) {delete _H & res1}\n"
+          + "    var sm = '[*.N][*.CA][*.C][*.O]'\n"
+          + "    var keyatoms = res1.find(sm)\n"
+          + "    var x = compare(res1,res0,sm,'BONDS')\n"
+          + "    if(x){\n"
+          + "      print 'mutating ' + res0[1].label('%n%r') + ' to ' + 
"+fileName+".trim('=')\n"
+          + "      rotate branch @x\n"
+          + "      compare res1 res0 SMARTS @sm rotate translate 0\n"
+          + "      var c = {!res0 & connected(res0)}\n"
+          + "      var N2 = {*.N & c}\n"
+          + "      var C0 = {*.C & c}\n"
+          + "      delete res0\n"
+          + "      if (N2) {\n"
+          + "        delete *.OXT and res1\n"
+          + "        connect {N2} {keyatoms & *.C}\n"
+          + "      }\n"
+          + "      if (C0) {\n"
+          + "        connect {C0} {keyatoms & *.N}\n"
+          + "      }\n"
+          + "    }\n"
+          + "  }\n"
+          + "}catch(e){print e}\n";
+      try {
+        if (Logger.debugging)
+          Logger.debug(script);
+        vwr.eval.runScript(script);
+      } catch (Exception e) {
+        // TODO
+      }
+      if (ms.ac == ac)
+        return false;
+      // check for protein monomer
+      g = ms.at[ms.ac - 1].group;
+      if (g != ms.at[ac + 1].group || !(g instanceof AminoMonomer)) {
+        BS bsAtoms = new BS();
+        g.setAtomBits(bsAtoms);
+        vwr.deleteAtoms(bsAtoms, false);
+        return  false;
+      }
+      AminoMonomer res1 = (AminoMonomer) g;
+      
+      // must get new group into old chain
+      
+      Group[] groups = res0.chain.groups;
+      for (int i = groups.length; --i >= 0;)
+        if (groups[i] == res0) {
+          groups[i] = res1;
+          break;
+        }
+      res1.setResno(r);
+      res1.chain.groupCount = 0;
+      res1.chain = res0.chain;
+      BS bsExclude = BSUtil.newBitSet2(0, ms.mc);
+      bsExclude.clear(res1.chain.model.modelIndex);
+      res1.chain.model.groupCount = -1;
+      res1.chain.model.freeze();
+      ms.recalculatePolymers(bsExclude);      
+    //} catch (Exception e) {
+     // System.out.println("" + e);
+   // }
+    vwr.setBooleanProperty("appendNew", b);
+    vwr.fm.setFileInfo(info);
+    return true;
 
+  }
+
+
 /////////////////////////////////////////////////////////////////////////  
   
 

Modified: trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java   2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java   2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -41,7 +41,6 @@
 import org.jmol.modelset.ModelLoader;
 import org.jmol.modelset.ModelSet;
 import org.jmol.script.SV;
-import org.jmol.script.ScriptException;
 import org.jmol.script.T;
 import org.jmol.util.BSUtil;
 import org.jmol.util.Edge;
@@ -1768,132 +1767,6 @@
     return (groupID == -1 ? addGroup3Name(group3) : groupID);
   }
 
-  @Override
-  public boolean mutate(BS bs, String group, String[] sequence) {
-    
-    int i0 = bs.nextSetBit(0);
-    if (sequence == null)
-      return mutateAtom(i0, group);
-    boolean isFile = (group == null);
-    if (isFile)
-      group = sequence[0];
-    Group lastGroup = null;
-    boolean isOK = true;
-    for (int i = i0, pt = 0; i >= 0; i = bs.nextSetBit(i + 1)) {
-      Group g = vwr.ms.at[i].group;
-      if (g == lastGroup)
-        continue;
-      lastGroup = g;
-      if (!isFile) {
-        group = sequence[pt++ % sequence.length];
-        if (group.equals("UNK"))
-          continue;
-        group = "==" + group;
-      }
-      mutateAtom(i, group);
-    }
-    return isOK;
-  }
-  
-  private boolean mutateAtom(int iatom, String fileName) {
-    // no mutating a trajectory. What would that mean???
-    int iModel = vwr.ms.at[iatom].mi;
-    if (vwr.ms.isTrajectory(iModel))
-      return false; 
-    
-    String[] info = vwr.fm.getFileInfo();
-    boolean b = vwr.getBoolean(T.appendnew);
-    Group g = vwr.ms.at[iatom].group;
-    //try {
-      // get the initial group -- protein for now
-      if (!(g instanceof AminoMonomer))
-        return false;
-      ((BioModel) vwr.ms.am[iModel]).isMutated = true;
-      AminoMonomer res0 = (AminoMonomer) g;
-      int ac = vwr.ms.ac;
-      BS bsRes0 = new BS();
-      res0.setAtomBits(bsRes0);
-      int r = g.getResno();
-      
-      // just use a script -- it is much easier!
-      
-      fileName = PT.esc(fileName);
-      String script = "" +
-                 "try{\n"
-               + "  var atoms0 = {*}\n"
-          + "  var res0 = " + BS.escape(bsRes0,'(',')')  + "\n"
-          + "  set appendNew false\n"
-          + "  load append "+fileName+"\n"
-          + "  set appendNew " + b + "\n"
-          + "  var res1 = {!atoms0};var r1 = res1[1];var r0 = res1[0]\n"
-          + "  if ({r1 & within(group, r0)}){\n" 
-          + "    var haveHs = ({_H & connected(res0)} != 0)\n"
-          + "    if (!haveHs) {delete _H & res1}\n"
-          + "    var sm = '[*.N][*.CA][*.C][*.O]'\n"
-          + "    var keyatoms = res1.find(sm)\n"
-          + "    var x = compare(res1,res0,sm,'BONDS')\n"
-          + "    if(x){\n"
-          + "      print 'mutating ' + res0[1].label('%n%r') + ' to ' + 
"+fileName+".trim('=')\n"
-          + "      rotate branch @x\n"
-          + "      compare res1 res0 SMARTS @sm rotate translate 0\n"
-          + "      var c = {!res0 & connected(res0)}\n"
-          + "      var N2 = {*.N & c}\n"
-          + "      var C0 = {*.C & c}\n"
-          + "      delete res0\n"
-          + "      if (N2) {\n"
-          + "        delete *.OXT and res1\n"
-          + "        connect {N2} {keyatoms & *.C}\n"
-          + "      }\n"
-          + "      if (C0) {\n"
-          + "        connect {C0} {keyatoms & *.N}\n"
-          + "      }\n"
-          + "    }\n"
-          + "  }\n"
-          + "}catch(e){print e}\n";
-      try {
-        if (Logger.debugging)
-          Logger.debug(script);
-        vwr.eval.runScript(script);
-      } catch (ScriptException e) {
-        // TODO
-      }
-      if (vwr.ms.ac == ac)
-        return false;
-      // check for protein monomer
-      g = vwr.ms.at[vwr.ms.ac - 1].group;
-      if (g != vwr.ms.at[ac + 1].group || !(g instanceof AminoMonomer)) {
-        BS bsAtoms = new BS();
-        g.setAtomBits(bsAtoms);
-        vwr.deleteAtoms(bsAtoms, false);
-        return  false;
-      }
-      AminoMonomer res1 = (AminoMonomer) g;
-      
-      // must get new group into old chain
-      
-      Group[] groups = res0.chain.groups;
-      for (int i = groups.length; --i >= 0;)
-        if (groups[i] == res0) {
-          groups[i] = res1;
-          break;
-        }
-      res1.setResno(r);
-      res1.chain.groupCount = 0;
-      res1.chain = res0.chain;
-      BS bsExclude = BSUtil.newBitSet2(0, vwr.ms.mc);
-      bsExclude.clear(res1.chain.model.modelIndex);
-      res1.chain.model.groupCount = -1;
-      res1.chain.model.freeze();
-      vwr.ms.recalculatePolymers(bsExclude);      
-    //} catch (Exception e) {
-     // System.out.println("" + e);
-   // }
-    vwr.setBooleanProperty("appendNew", b);
-    vwr.fm.setFileInfo(info);
-    return true;
-
-  }
-
 }
 
 

Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java       2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java       2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -2213,7 +2213,7 @@
       return;
     String group = e.optParameterAsString(i);
     e.checkLast(i);
-    if (chk)
+    if (chk || !vwr.ms.am[vwr.ms.mc - 1].isBioModel)
       return;
     boolean isFile = (tokAt(i) == T.string && !group.startsWith("~"));
     String[] list = null;
@@ -2223,14 +2223,14 @@
     } else {
       group = PT.replaceAllCharacters(group, ",; \t\n", " ").trim()
           .toUpperCase();
-      if (group.startsWith("~") || group.length() != 3
+      boolean isOneLetter = group.startsWith("~"); 
+      if (isOneLetter || group.length() != 3
           || !vwr.getJBR().isKnownPDBGroup(group, 20))
-        group = vwr.getJBR().toStdAmino3(group);
+        group = vwr.getJBR().toStdAmino3(isOneLetter ? group.substring(1) : 
group);
     }
     list = PT.getTokens(group);
-    if (list.length == 0)
-      return;
-    vwr.getJBR().mutate(bs, group, list);
+    if (list.length > 0)
+      vwr.ms.bioModel.mutate(bs, group, list);
   }
 
   private void navigate() throws ScriptException {

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -15,7 +15,7 @@
 TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT 
command for problems)
 TODO: add 2D graphics panel for Ramachandran and NBO-style 2D graphics -- send 
to browser as data uri?
 
-Jmol.___JmolVersion="14.3.12_2015.01.31"
+Jmol.___JmolVersion="14.3.12_2015.02.04"
 
 new feature: print data({*},"xyz") 
   -- (lower case) writes only atom data lines
@@ -23,9 +23,15 @@
 new feature: print data({*},"XYZ", true) 
   -- third parameter TRUE writes all trajectories
 
-bug fix: writing formats was inconsistent        
-bug fix: Jmol writing of PDB file data did not include TER records
+bug fix: show mouse  fails in JavaScript
+  -- we cannot test using PT.isAI() in org.jmol.viewer.binding.Binding 
+  -- because of a Java2Script compiler creates standard array [...] 
+  -- from new int[] {....} whereas it should create Clazz.newArray() and fill 
it
+bug fix: writing of file formats was inconsistent between WRITE and data()  
(not fixed in 14.2)          
+bug fix: Jmol writing of PDB file data did not include TER records (not fixed 
in 14.2)
 bug fix: label %r should print "1" for non-PDB file atoms
+bug fix: 01.30 mutate {xxx} ~... skips first-listed replacement group 
identifier
+bug fix: 01.29 breaks loading non-trajectory file after a trajectory is loaded
 
 JmolVersion="14.3.12_2015.01.30b"
 

Modified: trunk/Jmol/src/org/jmol/viewer/binding/Binding.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/binding/Binding.java 2015-02-03 23:27:55 UTC 
(rev 20265)
+++ trunk/Jmol/src/org/jmol/viewer/binding/Binding.java 2015-02-04 12:47:46 UTC 
(rev 20266)
@@ -307,7 +307,16 @@
     Lst<String>[] names = new Lst[actionInfo.length];
     Lst<String[]> user = new Lst<String[]>();
     for (Object obj : bindings.values()) {
-      if (PT.isAI(obj)) {
+      if (PT.isAS(obj)) {
+        String action = ((String[]) obj)[0];
+        String script = ((String[]) obj)[1];
+        if (qlow == null || qlow.indexOf("user") >= 0 || action.indexOf(qlow) 
>= 0 || script.indexOf(qlow) >= 0)
+          user.addLast((String[]) obj);
+      } else {
+        
+        // we cannot test using PT.isAI() here because of a Java2Script 
compiler error
+        // in relation to new int[] {.....}  BH  2015.02.03
+        
         int[] info = (int[]) obj;
         int i = info[1];
         if (names[i] == null)
@@ -316,11 +325,6 @@
         if (qlow == null
           || (actionNames[i] + ";" + actionInfo[i] + ";" + 
name).toLowerCase().indexOf(qlow) >= 0)
         names[i].addLast(name);
-      } else if (PT.isAS(obj)) {
-        String action = ((String[]) obj)[0];
-        String script = ((String[]) obj)[1];
-        if (qlow == null || qlow.indexOf("user") >= 0 || action.indexOf(qlow) 
>= 0 || script.indexOf(qlow) >= 0)
-          user.addLast((String[]) obj);
       }
     }
     for (int i = 0; i < actionInfo.length; i++) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to