Revision: 20297
          http://sourceforge.net/p/jmol/code/20297
Author:   hansonr
Date:     2015-02-16 06:27:21 +0000 (Mon, 16 Feb 2015)
Log Message:
-----------
BioModel efficiencies 

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java
    trunk/Jmol/src/org/jmol/modelset/ModelSet.java
    trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java
    trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java
    trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
    trunk/Jmol/src/org/jmol/viewer/PropertyManager.java
    trunk/Jmol/src/org/jmol/viewer/StateCreator.java
    trunk/Jmol/src/org/jmol/viewer/Viewer.java

Modified: trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java       2015-02-15 
18:32:52 UTC (rev 20296)
+++ trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java       2015-02-16 
06:27:21 UTC (rev 20297)
@@ -57,8 +57,7 @@
   void getConformations(int modelIndex, int conformationIndex,
                                boolean doSet, BS bsAtoms, BS bsRet);
 
-  String getFullProteinStructureState(BS bsAtoms, boolean taintedOnly,
-                                             boolean needPhiPsi, int mode);
+  String getFullProteinStructureState(BS bsAtoms, int mode);
 
   BS getIdentifierOrNull(String identifier);
 

Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-02-15 18:32:52 UTC 
(rev 20296)
+++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-02-16 06:27:21 UTC 
(rev 20297)
@@ -3823,10 +3823,8 @@
     return (haveBioModels ? bioModelset.getGroupsWithinAll(nResidues, bs) : 
new BS());
   }
 
-  public String getProteinStructureState(BS bsAtoms, boolean taintedOnly,
-                                         boolean needPhiPsi, int mode) {
-    return (haveBioModels ? bioModelset.getFullProteinStructureState(bsAtoms, 
taintedOnly,
-        needPhiPsi, mode) : "");
+  public String getProteinStructureState(BS bsAtoms, int mode) {
+    return (haveBioModels ? bioModelset.getFullProteinStructureState(bsAtoms, 
mode) : "");
   }
 
   public String calculateStructures(BS bsAtoms, boolean asDSSP,

Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java   2015-02-15 18:32:52 UTC 
(rev 20296)
+++ trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java   2015-02-16 06:27:21 UTC 
(rev 20297)
@@ -227,8 +227,7 @@
       if (ms.am[i].isBioModel) {
         BioModel m = (BioModel) ms.am[i];
         if (m.defaultStructure == null)
-          m.defaultStructure = getFullProteinStructureState(m.bsAtoms, false,
-              false, 0);
+          m.defaultStructure = getFullProteinStructureState(m.bsAtoms, 
T.state);
       }
   }
 
@@ -377,183 +376,166 @@
       ((BioModel) ms.am[modelIndex]).recalculateLeadMidpointsAndWingVectors();
   }
 
-  @SuppressWarnings("incomplete-switch")
   @Override
-  public String getFullProteinStructureState(BS bsAtoms2,
-                                             boolean taintedOnly,
-                                             boolean needPhiPsi, int mode) {
-    for (int im = 0, mc = ms.mc; im < mc; im++) {
+  public String getFullProteinStructureState(BS bsAtoms, int mode) {
+    boolean taintedOnly = (mode == T.all);
+    if (taintedOnly && !ms.proteinStructureTainted)
+      return "";
+    boolean scriptMode = (mode == T.state || mode == T.all);
+    Atom[] atoms = ms.at;
+    int at0 = (bsAtoms == null ? 0 : bsAtoms.nextSetBit(0));
+    if (at0 < 0)
+      return "";
+    if (bsAtoms != null && mode == T.ramachandran) {
+      bsAtoms = BSUtil.copy(bsAtoms);
+      for (int i = ms.ac; --i >= 0;)
+        if (Float.isNaN(atoms[i].group.getGroupParameter(T.phi))
+            || Float.isNaN(atoms[i].group.getGroupParameter(T.psi)))
+          bsAtoms.clear(i);
+    }
+    int at1 = (bsAtoms == null ? ms.ac : bsAtoms.length()) - 1;
+    int im0 = atoms[at0].mi;
+    int im1 = atoms[at1].mi;
+    Lst<ProteinStructure> lstStr = new Lst<ProteinStructure>();
+    Map<ProteinStructure, Boolean> map = new Hashtable<ProteinStructure, 
Boolean>();
+    SB cmd = new SB();
+    for (int im = im0; im <= im1; im++) {
       if (!ms.am[im].isBioModel)
         continue;
       BioModel m = (BioModel) ms.am[im];
-      boolean showMode = (mode == 3);
-      boolean pdbFileMode = (mode == 1);
-      boolean scriptMode = (mode == 0);
-      BS bs = null;
-      SB cmd = new SB();
-      SB sbTurn = new SB();
-      SB sbHelix = new SB();
-      SB sbSheet = new SB();
-      STR type = STR.NONE;
-      STR subtype = STR.NONE;
-      int id = 0;
-      int iLastAtom = 0;
-      int iLastModel = -1;
-      int lastId = -1;
-      int res1 = 0;
-      int res2 = 0;
-      String sid = "";
-      String group1 = "";
-      String group2 = "";
-      String chain1 = "";
-      String chain2 = "";
-      int n = 0;
-      int nHelix = 0;
-      int nTurn = 0;
-      int nSheet = 0;
-      BS bsTainted = null;
-      Model[] models = ms.am;
-      Atom[] atoms = ms.at;
-      int ac = ms.ac;
-
-      if (taintedOnly) {
-        if (!ms.proteinStructureTainted)
-          return "";
-        bsTainted = new BS();
-        for (int i = m.firstAtomIndex; i < ac; i++)
-          if (models[atoms[i].mi].structureTainted)
-            bsTainted.set(i);
-        bsTainted.set(ac);
+      if (taintedOnly && !m.structureTainted)
+        continue;
+      BS bsA = new BS();
+      bsA.or(m.bsAtoms);
+      bsA.andNot(m.bsAtomsDeleted);
+      int i0 = bsA.nextSetBit(0);
+      if (i0 < 0)
+        continue;
+      if (scriptMode) {
+        cmd.append("  structure none ")
+            .append(
+                Escape.eBS(ms.getModelAtomBitSetIncludingDeleted(im, false)))
+            .append("    \t# model=" + ms.getModelNumberDotted(im))
+            .append(";\n");
       }
-      for (int i = 0; i <= ac; i++)
-        if (i == ac || bsAtoms == null || bsAtoms.get(i)) {
-          if (taintedOnly && !bsTainted.get(i))
-            continue;
-          id = 0;
-          if (i == ac || (id = atoms[i].group.getStrucNo()) != lastId) {
-            if (bs != null) {
-              switch (type) {
-              case HELIX:
-              case TURN:
-              case SHEET:
-                n++;
-                if (scriptMode) {
-                  int iModel = atoms[iLastAtom].mi;
-                  String comment = "    \t# model="
-                      + ms.getModelNumberDotted(iModel);
-                  if (iLastModel != iModel) {
-                    iLastModel = iModel;
-                    cmd.append("  structure none ")
-                        .append(
-                            Escape.eBS(ms.getModelAtomBitSetIncludingDeleted(
-                                iModel, false))).append(comment).append(";\n");
-                  }
-                  comment += " & (" + res1 + " - " + res2 + ")";
-                  String stype = subtype.getBioStructureTypeName(false);
-                  cmd.append("  structure ").append(stype).append(" ")
-                      .append(Escape.eBS(bs)).append(comment).append(";\n");
-                } else {
-                  String str;
-                  int nx;
-                  SB sb;
-                  // NNN III GGG C RRRR GGG C RRRR
-                  // HELIX 99 99 LYS F 281 LEU F 293 1
-                  // NNN III 2 GGG CRRRR GGG CRRRR
-                  // SHEET 1 A 8 ILE A 43 ASP A 45 0
-                  // NNN III GGG CRRRR GGG CRRRR
-                  // TURN 1 T1 PRO A 41 TYR A 44
-                  switch (type) {
-                  case HELIX:
-                    nx = ++nHelix;
-                    if (sid == null || pdbFileMode)
-                      sid = PT.formatStringI("%3N %3N", "N", nx);
-                    str = "HELIX  %ID %3GROUPA %1CA %4RESA  %3GROUPB %1CB 
%4RESB";
-                    sb = sbHelix;
-                    String stype = null;
-                    switch (subtype) {
-                    case HELIX:
-                    case HELIXALPHA:
-                      stype = "  1";
-                      break;
-                    case HELIX310:
-                      stype = "  5";
-                      break;
-                    case HELIXPI:
-                      stype = "  3";
-                      break;
-                    }
-                    if (stype != null)
-                      str += stype;
-                    break;
-                  case SHEET:
-                    nx = ++nSheet;
-                    if (sid == null || pdbFileMode) {
-                      sid = PT.formatStringI("%3N %3A 0", "N", nx);
-                      sid = PT.formatStringS(sid, "A", "S" + nx);
-                    }
-                    str = "SHEET  %ID %3GROUPA %1CA%4RESA  %3GROUPB 
%1CB%4RESB";
-                    sb = sbSheet;
-                    break;
-                  case TURN:
-                  default:
-                    nx = ++nTurn;
-                    if (sid == null || pdbFileMode)
-                      sid = PT.formatStringI("%3N %3N", "N", nx);
-                    str = "TURN   %ID %3GROUPA %1CA%4RESA  %3GROUPB 
%1CB%4RESB";
-                    sb = sbTurn;
-                    break;
-                  }
-                  str = PT.formatStringS(str, "ID", sid);
-                  str = PT.formatStringS(str, "GROUPA", group1);
-                  str = PT.formatStringS(str, "CA", chain1);
-                  str = PT.formatStringI(str, "RESA", res1);
-                  str = PT.formatStringS(str, "GROUPB", group2);
-                  str = PT.formatStringS(str, "CB", chain2);
-                  str = PT.formatStringI(str, "RESB", res2);
-                  sb.append(str);
-                  if (showMode)
-                    sb.append(" strucno= ").appendI(lastId);
-                  sb.append("\n");
+      ProteinStructure ps;
+      for (int i = i0; i >= 0; i = bsA.nextSetBit(i + 1)) {
+        Atom a = atoms[i];
+        if (!(a.group instanceof AlphaMonomer)
+            || (ps = ((AlphaMonomer) a.group).proteinStructure) == null
+            || map.containsKey(ps))
+          continue;
+        lstStr.addLast(ps);
+        map.put(ps, Boolean.TRUE);
+      }
+    }
+    getStructureLines(bsAtoms, cmd, lstStr, STR.HELIX, scriptMode, mode);
+    getStructureLines(bsAtoms, cmd, lstStr, STR.SHEET, scriptMode, mode);
+    getStructureLines(bsAtoms, cmd, lstStr, STR.TURN, scriptMode, mode);
+    return cmd.toString();
+  }
 
-                  /*
-                   * HELIX 1 H1 ILE 7 PRO 19 1 3/10 CONFORMATION RES 17,19 
1CRN 55
-                   * HELIX 2 H2 GLU 23 THR 30 1 DISTORTED 3/10 AT RES 30 1CRN 
56
-                   * SHEET 1 S1 2 THR 1 CYS 4 0 1CRNA 4 SHEET 2 S1 2 CYS 32 
ILE 35
-                   */
-                }
-              }
-              bs = null;
+  @SuppressWarnings("incomplete-switch")
+  private int getStructureLines(BS bsAtoms, SB cmd, Lst<ProteinStructure> 
lstStr, STR type,
+                                boolean scriptMode, int mode) {
+    //boolean pdbFileMode = (mode == T.pdb || mode == T.ramachandran);
+    boolean showMode = (mode == T.show);
+    int nHelix = 0, nSheet = 0, nTurn = 0;
+    String sid = null;
+    BS bs = new BS();
+    int n = 0;
+    for (int i = 0, ns = lstStr.size(); i < ns; i++) {
+      ProteinStructure ps = lstStr.get(i);
+      if (ps.type != type)
+        continue;
+      bs.clearAll();
+      // could be a subset of atoms, not just the ends
+      Monomer m1 = ps.findMonomer(bsAtoms, true);
+      Monomer m2 = ps.findMonomer(bsAtoms, false);
+      if (m1 == null || m2 == null)
+        continue;
+      int iModel = ps.apolymer.model.modelIndex;
+      String comment = (scriptMode ? "    \t# model="
+          + ms.getModelNumberDotted(iModel) : null);
+      int res1 = m1.getResno();
+      int res2 = m2.getResno();
+      STR subtype = ps.subtype;
+      switch (type) {
+      case HELIX:
+      case TURN:
+      case SHEET:
+        n++;
+        if (scriptMode) {
+          String stype = subtype.getBioStructureTypeName(false);
+          cmd.append("  structure ").append(stype).append(" ")
+              .append(Escape.eBS(ps.getAtoms(bs))).append(comment)
+              .append(" & (" + res1 + " - " + res2 + ")").append(";\n");
+        } else {
+          String str;
+          int nx;
+          // NNN III GGG C RRRR GGG C RRRR
+          // HELIX 99 99 LYS F 281 LEU F 293 1
+          // NNN III 2 GGG CRRRR GGG CRRRR
+          // SHEET 1 A 8 ILE A 43 ASP A 45 0
+          // NNN III GGG CRRRR GGG CRRRR
+          // TURN 1 T1 PRO A 41 TYR A 44
+          switch (type) {
+          case HELIX:
+            nx = ++nHelix;
+            sid = PT.formatStringI("%3N %3N", "N", nx);
+            str = "HELIX  %ID %3GROUPA %1CA %4RESA  %3GROUPB %1CB %4RESB";
+            String stype = null;
+            switch (subtype) {
+            case HELIX:
+            case HELIXALPHA:
+              stype = "  1";
+              break;
+            case HELIX310:
+              stype = "  5";
+              break;
+            case HELIXPI:
+              stype = "  3";
+              break;
             }
-            if (id == 0
-                || bsAtoms != null
-                && needPhiPsi
-                && (Float.isNaN(atoms[i].group.getGroupParameter(T.phi)) || 
Float
-                    .isNaN(atoms[i].group.getGroupParameter(T.psi))))
-              continue;
+            if (stype != null)
+              str += stype;
+            break;
+          case SHEET:
+            nx = ++nSheet;
+            sid = PT.formatStringI("%3N %3A 0", "N", nx);
+            sid = PT.formatStringS(sid, "A", "S" + nx);
+            str = "SHEET  %ID %3GROUPA %1CA%4RESA  %3GROUPB %1CB%4RESB";
+            break;
+          case TURN:
+          default:
+            nx = ++nTurn;
+            sid = PT.formatStringI("%3N %3N", "N", nx);
+            str = "TURN   %ID %3GROUPA %1CA%4RESA  %3GROUPB %1CB%4RESB";
+            break;
           }
-          String ch = atoms[i].getChainIDStr();
-          if (bs == null) {
-            bs = new BS();
-            res1 = atoms[i].getResno();
-            group1 = atoms[i].getGroup3(false);
-            chain1 = ch;
-          }
-          type = atoms[i].group.getProteinStructureType();
-          subtype = atoms[i].group.getProteinStructureSubType();
-          sid = atoms[i].group.getProteinStructureTag();
-          bs.set(i);
-          lastId = id;
-          res2 = atoms[i].getResno();
-          group2 = atoms[i].getGroup3(false);
-          chain2 = ch;
-          iLastAtom = i;
+          str = PT.formatStringS(str, "ID", sid);
+          str = PT.formatStringS(str, "GROUPA", m1.getGroup3());
+          str = PT.formatStringS(str, "CA", m1.getLeadAtom().getChainIDStr());
+          str = PT.formatStringI(str, "RESA", res1);
+          str = PT.formatStringS(str, "GROUPB", m2.getGroup3());
+          str = PT.formatStringS(str, "CB", m2.getLeadAtom().getChainIDStr());
+          str = PT.formatStringI(str, "RESB", res2);
+          cmd.append(str);
+          if (showMode)
+            cmd.append(" strucno= ").appendI(ps.strucNo);
+          cmd.append("\n");
+
+          /*
+           * HELIX 1 1 ILE 7 PRO 19 1 3/10 CONFORMATION RES 17,19 1CRN 55
+           * HELIX 2 2 GLU 23 THR 30 1 DISTORTED 3/10 AT RES 30 1CRN 56
+           * SHEET 1 S1 2 THR 1 CYS 4 0 1CRNA 4 SHEET 2 S1 2 CYS 32 ILE 35
+           */
         }
-      if (n > 0)
-        cmd.append("\n");
-      return (scriptMode ? cmd.toString() : sbHelix.appendSB(sbSheet)
-          .appendSB(sbTurn).appendSB(cmd).toString());
+      }
     }
-    return "";
+    if (n > 0)
+      cmd.append("\n");
+    return n;
   }
 
   @Override

Modified: trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java   2015-02-15 
18:32:52 UTC (rev 20296)
+++ trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java   2015-02-16 
06:27:21 UTC (rev 20297)
@@ -30,6 +30,7 @@
 import javajs.util.V3;
 
 import org.jmol.c.STR;
+import org.jmol.java.BS;
 import org.jmol.util.Logger;
 
 public abstract class ProteinStructure {
@@ -49,7 +50,7 @@
   protected V3 vectorProjection;
 
   private static int globalStrucNo = 1000;
-  private int monomerIndexLast;
+  int monomerIndexLast;
   private P3[] segments;
   
   /**
@@ -198,4 +199,25 @@
     axisA = null;
     segments = null;
   }
+
+  BS getAtoms(BS bs) {
+    Monomer[] ms = apolymer.monomers;
+    for (int i = monomerIndexFirst; i <= monomerIndexLast; i++)
+      ms[i].setAtomBits(bs);
+    return bs;
+  }
+
+  public Monomer findMonomer(BS bsAtoms, boolean isFirst) {
+    Monomer[] ms = apolymer.monomers;
+    if (isFirst) {
+      for (int i = monomerIndexFirst; i <= monomerIndexLast; i++) 
+        if (bsAtoms == null || bsAtoms.get(ms[i].leadAtomIndex))
+          return ms[i];
+    } else {
+      for (int i = monomerIndexLast; i >= monomerIndexFirst; --i)
+        if (bsAtoms == null || bsAtoms.get(ms[i].leadAtomIndex))
+          return ms[i];
+    }    
+    return null;
+  }
 }

Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java       2015-02-15 18:32:52 UTC 
(rev 20296)
+++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java       2015-02-16 06:27:21 UTC 
(rev 20297)
@@ -3905,7 +3905,7 @@
     case T.structure:
       if ((len = slen) == 2) {
         if (!chk)
-          msg = vwr.getProteinStructureState();
+          msg = vwr.ms.getProteinStructureState(vwr.bsA(), T.show);
         break;
       }
       String shape = paramAsStr(2);

Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-02-15 18:32:52 UTC 
(rev 20296)
+++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-02-16 06:27:21 UTC 
(rev 20297)
@@ -2018,7 +2018,7 @@
     bsSelected.and(bsAtoms);
     if (isPDB && addStructure)
       out.append("\n\n"
-          + vwr.ms.getProteinStructureState(bsWritten, false, ctype == 'R', 
1));
+          + vwr.ms.getProteinStructureState(bsWritten, ctype == 'R' ? 
T.ramachandran : T.pdb));
     return out.toString();
   }
 

Modified: trunk/Jmol/src/org/jmol/viewer/StateCreator.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/StateCreator.java    2015-02-15 18:32:52 UTC 
(rev 20296)
+++ trunk/Jmol/src/org/jmol/viewer/StateCreator.java    2015-02-16 06:27:21 UTC 
(rev 20297)
@@ -305,7 +305,7 @@
     // unnecessary. Removed in 11.5.35 -- oops!
 
     if (withProteinStructure)
-      commands.append(ms.getProteinStructureState(null, isAll, false, 0));
+      commands.append(ms.getProteinStructureState(null, isAll ? T.all : 
T.state));
 
     getShapeState(commands, isAll, Integer.MAX_VALUE);
 

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-02-15 18:32:52 UTC (rev 
20296)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-02-16 06:27:21 UTC (rev 
20297)
@@ -2838,10 +2838,6 @@
     return getStateCreator().getModelState(null, false, true);
   }
 
-  public String getProteinStructureState() {
-    return ms.getProteinStructureState(bsA(), false, false, 3);
-  }
-
   public String getCoordinateState(BS bsSelected) {
     return getStateCreator().getAtomicPropertyState(AtomCollection.TAINT_COORD,
         bsSelected);

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


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to