Revision: 18395
          http://sourceforge.net/p/jmol/code/18395
Author:   hansonr
Date:     2013-07-01 22:25:55 +0000 (Mon, 01 Jul 2013)
Log Message:
-----------
removing iso sort for now

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java
    trunk/Jmol/src/org/jmol/util/Tensor.java

Modified: trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java       
2013-07-01 20:25:10 UTC (rev 18394)
+++ trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java       
2013-07-01 22:25:55 UTC (rev 18395)
@@ -84,6 +84,8 @@
   private final P3i s0 = new P3i();
   private final P3i s1 = new P3i();
   private final P3i s2 = new P3i();
+
+  private float maxLength;
   
   private final static float toRadians = (float) Math.PI/180f;
   private final static float[] cossin = new float[36];
@@ -188,10 +190,14 @@
 
   private void renderOne(Ellipsoid e) {
     center = e.center;
+    maxLength = 0;
     for (int i = 3; --i >= 0;) {
-      factoredLengths[i] = e.getLength(i);
-      if (factoredLengths[i] < 0.02f)
-        factoredLengths[i] = 0.02f; // for extremely flat ellipsoids, we need 
at least some length    
+      float f = e.getLength(i);
+      if (f < 0.02f)
+        f = 0.02f; // for extremely flat ellipsoids, we need at least some 
length
+      if (f > maxLength)
+        maxLength = f;
+      factoredLengths[i] = f;
     }
     axes = e.tensor.eigenVectors;
     setMatrices();
@@ -292,7 +298,7 @@
           Math.round (s0.y + pt1.y * perspectiveFactor * 1.05f), 
Math.round(pt1.z * 1.05f + s0.z));
     }
     dx = 2 + (int) viewer.scaleToScreen(s0.z, 
-        Math.round((Float.isNaN(factoredLengths[0]) ? 1.0f : 
factoredLengths[0]) * 1000));
+        Math.round((Float.isNaN(maxLength) ? 1.0f : maxLength) * 1000));
   }
 
   private void renderBall() {

Modified: trunk/Jmol/src/org/jmol/util/Tensor.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/Tensor.java    2013-07-01 20:25:10 UTC (rev 
18394)
+++ trunk/Jmol/src/org/jmol/util/Tensor.java    2013-07-01 22:25:55 UTC (rev 
18395)
@@ -104,6 +104,7 @@
   public boolean forThermalEllipsoid;
   public int eigenSignMask = 7; // signs of eigenvalues; bits 2,1,0 set to 1 
if > 0
   private float typeFactor = 1; // an ellipsoid scaling factor depending upon 
type
+  private boolean sortIso;
 
   // added only after passing
   // the tensor to ModelLoader:
@@ -125,7 +126,7 @@
     switch ((";............." + ";eigenvalues.." + ";eigenvectors."
         + ";asymmetric..." + ";symmetric...." + ";trace........"
         + ";haeberlen...." + ";eulerzyz....." + ";eulerzxz....."
-        + ";quaternion..." + ";indices......" + ";type.........")
+        + ";quaternion..." + ";indices......" + ";string......." + 
";type.........")
         .indexOf(infoType) / 14) {
     case 1:
       return eigenValues;
@@ -169,6 +170,8 @@
     case 10: // 
       return new int[] { modelIndex, atomIndex1, atomIndex2 };
     case 11:
+      return this.toString();
+    case 12:
       return type;
     default:
       return null;
@@ -294,8 +297,9 @@
         || Math.abs(t.eigenVectors[1].dot(t.eigenVectors[2])) > 0.0001f 
         || Math.abs(t.eigenVectors[2].dot(t.eigenVectors[0])) > 0.0001f)
       return null;
-    sortAndNormalize(t.eigenVectors, t.eigenValues);
-    return t.setType("other");
+    t.setType("other");
+    t.sortAndNormalize();
+    return t;
   }
 
   /**
@@ -319,9 +323,9 @@
     mat[0][2] = mat[2][0] = coefs[4] / 2; //XZ
     mat[1][2] = mat[2][1] = coefs[5] / 2; //YZ
     Eigen.getUnitVectors(mat, t.eigenVectors, t.eigenValues);
-    sortAndNormalize(t.eigenVectors, t.eigenValues);
-    t.typeFactor = ADP_FACTOR;
-    return t.setType("adp");
+    t.setType("adp");
+    t.sortAndNormalize();
+    return t;
   }
 
   /**
@@ -375,8 +379,8 @@
     t.eigenVectors = vectors;
     for (int i = 0; i < 3; i++)
       t.eigenVectors[i].normalize();
-    sortAndNormalize(t.eigenVectors, t.eigenValues);
     t.setType(type);
+    t.sortAndNormalize();
     t.eigenSignMask = (t.eigenValues[0] >= 0 ? 1 : 0)
         + (t.eigenValues[1] >= 0 ? 2 : 0) + (t.eigenValues[2] >= 0 ? 4 : 0);
     return t;
@@ -393,6 +397,7 @@
     isIsotropic = false;
     altType = null;
     typeFactor = 1;
+    sortIso = false;
     
     switch (iType = getType(type)) {
     case TYPE_ISO:
@@ -427,28 +432,29 @@
     }
   }
 
-  private static int[] sortOrder = { 1, 0, 2 };
+  private static int[] isoOrder = { 1, 0, 2 };
 
   /**
-   * sorts EigenVectors by 
+   * Understand that sorting EigenVectors by 
    * 
    * |sigma_3 - sigma_iso| >= |sigma_1 - sigma_iso| >= |sigma_2 - sigma_iso|
    * 
+   * will result sigma_3 < sigma_1 sometimes, and then truncated ellipsoids
    * 
-   * @param eigenVectors
-   * @param eigenValues
+   * 
    */
-  private static void sortAndNormalize(V3[] eigenVectors, float[] eigenValues) 
{
+  private void sortAndNormalize() {
     // first sorted 3 2 1, then 1 and 2 are switched using the sortOrder above.
     Object[][] o = new Object[][] {
-        new Object[] { eigenVectors[0], Float.valueOf(eigenValues[0]) },
-        new Object[] { eigenVectors[1], Float.valueOf(eigenValues[1]) },
-        new Object[] { eigenVectors[2], Float.valueOf(eigenValues[2]) } };
-    float sigmaIso = (eigenValues[0] + eigenValues[1] + eigenValues[2]) / 3f;
+        new Object[] { V3.newV(eigenVectors[0]), Float.valueOf(eigenValues[0]) 
},
+        new Object[] { V3.newV(eigenVectors[1]), Float.valueOf(eigenValues[1]) 
},
+        new Object[] { V3.newV(eigenVectors[2]), Float.valueOf(eigenValues[2]) 
} };
+    float sigmaIso = (sortIso ? (eigenValues[0] + eigenValues[1] + 
eigenValues[2]) / 3f : 0);
     Arrays.sort(o, getTensorSort(sigmaIso));
     for (int i = 0; i < 3; i++) {
-      eigenValues[i] = ((Float) o[sortOrder[i]][1]).floatValue();
-      eigenVectors[i] = (V3) o[sortOrder[i]][0];
+      int pt = (sortIso ? isoOrder[i] : i);
+      eigenValues[i] = ((Float) o[pt][1]).floatValue();
+      eigenVectors[i] = (V3) o[pt][0];
       eigenVectors[i].normalize();
     }
   }

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


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to