IsoSolventReader
Date: 2019-10-22

org.jmol.jvxl.readers

## Class IsoSolventReader

- java.lang.Object
- - org.jmol.jvxl.readers.SurfaceReader
  - - org.jmol.jvxl.readers.VolumeDataReader
    - - org.jmol.jvxl.readers.AtomDataReader
      - - org.jmol.jvxl.readers.IsoSolventReader

- All Implemented Interfaces:
    VertexDataServer

      class IsoSolventReader
      extends AtomDataReader

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `private class` | `IsoSolventReader.Edge`
    `private class` | `IsoSolventReader.Face`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private javajs.util.BS[]` | `bsAtomMinMax`
    `private javajs.util.BS[]` | `bsLocale`
    `private javajs.util.BS` | `bsSurfaceDone`
    `private javajs.util.BS` | `bsSurfacePoints`
    `private float` | `cavityRadius`
    `private float` | `dAB`
    `private float` | `dAB2`
    `private boolean` | `doCalculateTroughs`
    `private javajs.util.P3[]` | `dots`
    `private float` | `ecosASB2`
    `private float` | `envelopeRadius`
    `private java.util.Map<java.lang.String,IsoSolventReader.Edge>` | `htEdges`
    `private int` | `iAtomSurface`
    `private boolean` | `isCavity`
    `private boolean` | `isPocket`
    `private boolean` | `isSurfacePoint`
    `private AtomIndexIterator` | `iter`
    `(package private) int` | `nTest`
    `protected javajs.util.P3` | `p`
    `protected javajs.util.P4` | `plane`
    `private javajs.util.P3` | `ptS1`
    `private javajs.util.P3` | `ptS2`
    `protected javajs.util.P3` | `ptTemp2`
    `private float` | `rAS`
    `private float` | `rAS2`
    `private float` | `rBS`
    `private float` | `rBS2`
    `private static boolean` | `testLinear`
    `protected javajs.util.Lst<IsoSolventReader.Edge>` | `vEdges`
    `private javajs.util.Lst<IsoSolventReader.Face>` | `vFaces`
    `protected javajs.util.V3` | `vTemp`
    `protected javajs.util.V3` | `vTemp2`

    - ### Fields inherited from class org.jmol.jvxl.readers.AtomDataReader

      `ac, atomData, atomIndex, atomNo, atomProp, atomRadius, atomXyzTruncated, bsMyIgnored, bsMySelected, bsNearby, bsSurfaceVoxels, contactPair, doAddHydrogens, doUseIterator, fileDotModel, fileName, firstNearbyAtom, haveOneProperty, havePlane, margin, maxDistance, maxRS, modelIndex, myAtomCount, myIndex, nearbyAtomCount, noFaceSpheres, pt0, pt1, ptV, ptY0, ptZ0, rs, rs2, sr, theProperty, thisAtomSet, thisPlane, thisX, validSpheres, vl0, vl1, vl2, voxelSource`

    - ### Fields inherited from class org.jmol.jvxl.readers.VolumeDataReader

      `allowMapData, dataType, maxGrid, point, precalculateVoxelData, ptsPerAngstrom, useOriginStepsPoints`

    - ### Fields inherited from class org.jmol.jvxl.readers.SurfaceReader

      `allowSigma, ANGSTROMS_PER_BOHR, anisotropy, center, cJvxlEdgeNaN, colorFractionBase, colorFractionRange, contourVertexCount, dataMax, dataMean, dataMin, defaultCutoff, defaultMappedDataMax, defaultMappedDataMin, eccentricityMatrix, eccentricityMatrixInverse, eccentricityRatio, eccentricityScale, edgeFractionBase, edgeFractionRange, fractionData, hasColorData, haveSurfaceAtoms, isAnisotropic, isEccentric, isJvxl, isPeriodic, isProgressive, isQuiet, isXLowToHigh, jvxlColorDataRead, jvxlCutoff, jvxlData, jvxlDataIs2dContour, jvxlDataIsColorDensity, jvxlDataIsColorMapped, jvxlDataIsPrecisionColor, jvxlEdgeDataRead, jvxlFileHeaderBuffer, jvxlNSurfaceInts, jvxlVoxelBitSet, marchingCubes, marchingSquares, meshData, meshDataServer, minMax, nBytes, nDataPoints, nPointsX, nPointsY, nPointsZ, params, ptTemp, qpc, sg, vertexDataOnly, volumeData, volumetricOrigin, volumetricVectors, voxelCounts, voxelData, xyzMax, xyzMin, yzCount, yzPlanes`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `IsoSolventReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `addVertexCopy(javajs.util.T3 vertexXYZ, float value, int assocVertex, boolean asCopy)` addVertexCopy is used by the Marching Squares algorithm to uniquely identify a new vertex when an edge is crossed in the 2D plane.
    `private float` | `checkSpecialVoxel(javajs.util.P3 ptA, javajs.util.P3 ptB, javajs.util.P3 ptV)`
    `(package private) void` | `discardTempData(boolean discardAll)`
    `(package private) void` | `dumpLine(javajs.util.P3 pt1, javajs.util.T3 pt2, java.lang.String label, java.lang.String color)`
    `(package private) void` | `dumpLine2(javajs.util.P3 pt1, javajs.util.P3 pt2, java.lang.String label, float d, java.lang.String color1, java.lang.String color2)`
    `(package private) void` | `dumpPoint(javajs.util.P3 pt, java.lang.String label, java.lang.String color)`
    `protected IsoSolventReader.Edge` | `findEdge(int i, int j)`
    `protected void` | `generateCube()`
    `private void` | `generateSolventCavity()`
    `private void` | `generateSolventCube()`
    `private void` | `getEdges()`
    `private void` | `getFaces()`
    `float[]` | `getPlane(int x)`
    `private boolean` | `getSolventPoints(IsoSolventReader.Edge edge, int ia, int ib, int ic)`
    `protected float` | `getSurfacePointAndFraction(float cutoff, boolean isCutoffAbsolute, float valueA, float valueB, javajs.util.T3 pointA, javajs.util.V3 edgeVector, int x, int y, int z, int vA0, int vB0, float[] fReturn, javajs.util.T3 ptReturn)` TEST: alternative EXACT position of fraction for spherical MarchingCubes FOR: ttest.xyz: 2 isosurface molecular test showing discontinuities C -2.70 0 0 C 2.75 0 0 RESULT: LINEAR (points slightly within R): $ isosurface resolution 5 volume area solvent 1.5 full isosurface1 created with cutoff=0.0; number of isosurfaces = 1 isosurfaceArea = [75.06620391572324] isosurfaceVolume = [41.639681683494324] NONLINEAR: $ isosurface resolution 5 volume area solvent 1.5 full isosurface1 created with cutoff=0.0; number of isosurfaces = 1 isosurfaceArea = [75.11873783245028] isosurfaceVolume = [41.727027252180655] revision 3/16/2014: isosurfaceArea = [75.13146821881998] isosurfaceVolume = [41.74598178064965] MSMS: msms -if ttest.xyzrn -of ttest -density 5 MSMS 2.6.1 started on Local PC Copyright M.F.
    `float` | `getValueAtPoint(javajs.util.T3 pt, boolean getSource)`
    `(package private) void` | `init(SurfaceGenerator sg)` implemented in SurfaceFileReader and
    `private void` | `markFaceVoxels(boolean firstPass)`
    `private void` | `markToroidVoxels()`
    `protected void` | `postProcessVertices()`
    `protected boolean` | `readVolumeParameters(boolean isMapData)`
    `void` | `selectPocket(boolean doExclude)`
    `protected void` | `setup(boolean isMapData)`
    `private float` | `solventDistance(float rAS, float rAS2, float rBS2, float dAV, float dAV2, float dBV2)`
    `protected void` | `unsetVoxelData()`
    `private IsoSolventReader.Face` | `validateFace(int ia, int ib, int ic, IsoSolventReader.Edge edge, javajs.util.P3 ptS)`

    - ### Methods inherited from class org.jmol.jvxl.readers.AtomDataReader

      `getAtomMinMax, getAtoms, initADR, markPlaneVoxels, markSphereVoxels, resetPlane, resetVoxelData, setGridLimitsForAtom, setHeader, setRadii, setRanges, setup2, setVertexSource, setVolumeData, setVolumeDataADR, setVolumeForPlane, setVoxel, unsetVoxelData2`

    - ### Methods inherited from class org.jmol.jvxl.readers.VolumeDataReader

      `closeReader, initVDR, readSurfaceData, readSurfaceDataVDR, readVolumeData, readVoxelDataIndividually, setVolumeDataParams, setVoxelRange, showGridInfo`

    - ### Methods inherited from class org.jmol.jvxl.readers.SurfaceReader

      `addTriangleCheck, addVC, applyColorScale, colorIsosurface, createIsosurface, discardTempDataSR, excludeMaximumSet, excludeMinimumSet, finalizeMapping, getColorPhaseIndex, getMinMaxMappedValues, getPlaneSR, getSPF, getSurfaceAtomIndex, getSurfacePointIndexAndFraction, getValue, getValue2, gotoAndReadVoxelData, gotoData, initializeMapping, initializeVolumetricData, initPlanes, initSR, jvxlUpdateInfo, newVoxelDataCube, readAndSetVolumeParameters, readColorData, resetIsosurface, setBBox, setOutputChannel, setVectorAnisotropy, setVertexAnisotropy, setVolumeDataV, setVolumetricAnisotropy, setVolumetricOriginAnisotropy, slabIsosurface, updateSurfaceData, updateTriangles`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### cavityRadius

          private float cavityRadius

    - #### envelopeRadius

          private float envelopeRadius

    - #### dots

          private javajs.util.P3[] dots

    - #### doCalculateTroughs

          private boolean doCalculateTroughs

    - #### isCavity

          private boolean isCavity

    - #### isPocket

          private boolean isPocket

    - #### iter

          private AtomIndexIterator iter

    - #### bsSurfacePoints

          private javajs.util.BS bsSurfacePoints

    - #### bsSurfaceDone

          private javajs.util.BS bsSurfaceDone

    - #### bsLocale

          private javajs.util.BS[] bsLocale

    - #### htEdges

          private java.util.Map<java.lang.String,IsoSolventReader.Edge> htEdges

    - #### vEdges

          protected javajs.util.Lst<IsoSolventReader.Edge> vEdges

    - #### vFaces

          private javajs.util.Lst<IsoSolventReader.Face> vFaces

    - #### ptS1

          private final javajs.util.P3 ptS1

    - #### ptS2

          private final javajs.util.P3 ptS2

    - #### vTemp

          protected final javajs.util.V3 vTemp

    - #### plane

          protected final javajs.util.P4 plane

    - #### ptTemp2

          protected final javajs.util.P3 ptTemp2

    - #### vTemp2

          protected final javajs.util.V3 vTemp2

    - #### p

          protected final javajs.util.P3 p

    - #### testLinear

          private static boolean testLinear

    - #### bsAtomMinMax

          private javajs.util.BS[] bsAtomMinMax

    - #### isSurfacePoint

          private boolean isSurfacePoint

    - #### iAtomSurface

          private int iAtomSurface

    - #### nTest

          int nTest

    - #### rAS

          private float rAS

    - #### rBS

          private float rBS

    - #### rAS2

          private float rAS2

    - #### rBS2

          private float rBS2

    - #### dAB

          private float dAB

    - #### dAB2

          private float dAB2

    - #### ecosASB2

          private float ecosASB2

  - ### Constructor Detail

    - #### IsoSolventReader

          IsoSolventReader()

  - ### Method Detail

    - #### init

          void init(SurfaceGenerator sg)

      Description copied from class: `SurfaceReader`
      implemented in SurfaceFileReader and
      Overrides:
        `init` in class `VolumeDataReader`

    - #### readVolumeParameters

          protected boolean readVolumeParameters(boolean isMapData)

      Overrides:
        `readVolumeParameters` in class `VolumeDataReader`

    - #### setup

          protected void setup(boolean isMapData)

      Overrides:
        `setup` in class `AtomDataReader`

    - #### generateCube

          protected void generateCube()

      Overrides:
        `generateCube` in class `VolumeDataReader`

    - #### getSurfacePointAndFraction

          protected float getSurfacePointAndFraction(float cutoff,
                                                     boolean isCutoffAbsolute,
                                                     float valueA,
                                                     float valueB,
                                                     javajs.util.T3 pointA,
                                                     javajs.util.V3 edgeVector,
                                                     int x,
                                                     int y,
                                                     int z,
                                                     int vA0,
                                                     int vB0,
                                                     float[] fReturn,
                                                     javajs.util.T3 ptReturn)

      TEST: alternative EXACT position of fraction for spherical MarchingCubes FOR: ttest.xyz: 2 isosurface molecular test showing discontinuities C -2.70 0 0 C 2.75 0 0 RESULT: LINEAR (points slightly within R): $ isosurface resolution 5 volume area solvent 1.5 full isosurface1 created with cutoff=0.0; number of isosurfaces = 1 isosurfaceArea = [75.06620391572324] isosurfaceVolume = [41.639681683494324] NONLINEAR: $ isosurface resolution 5 volume area solvent 1.5 full isosurface1 created with cutoff=0.0; number of isosurfaces = 1 isosurfaceArea = [75.11873783245028] isosurfaceVolume = [41.727027252180655] revision 3/16/2014: isosurfaceArea = [75.13146821881998] isosurfaceVolume = [41.74598178064965] MSMS: msms -if ttest.xyzrn -of ttest -density 5 MSMS 2.6.1 started on Local PC Copyright M.F. Sanner (1994) Compilation flags INPUT ttest.xyzrn 2 spheres 0 collision only, radii 1.700 to 1.700 PARAM Probe_radius 1.500 density 5.000 hdensity 3.000 Couldn't find first face trying -all option ANALYTICAL SURFACE AREA : Comp. probe_radius, reent, toric, contact SES SAS 0 1.500 0.000 8.144 67.243 75.387 238.258 NUMERICAL VOLUMES AND AREA Comp. probe_radius SES_volume SES_area) 0 1.50 40.497 74.132 Total ses_volume: 40.497 MSMS terminated normally CONCLUSION: -- surfaces are essentially identical -- nonlinear is slightly closer to analytical area (75.387), as expected -- both are better than MSMS triangulation for same "resolution": prog parameters %Error MSMS -density 5 1.66% (1412 faces) MSMS -density 20 0.36% (2968 faces) JMOL LINEAR resol 5 0.42% (2720 faces) JMOL NONLINEAR resol 5 0.32% (2720 faces) -- Marching Cubes is slightly improved using nonlinear calc.
      Overrides:
        `getSurfacePointAndFraction` in class `SurfaceReader`
      Parameters:
        `cutoff` -
        `isCutoffAbsolute` -
        `valueA` -
        `valueB` -
        `pointA` -
        `edgeVector` -
        `fReturn` -
        `ptReturn` -
      Returns:
        fractional distance from A to B

    - #### addVertexCopy

          public int addVertexCopy(javajs.util.T3 vertexXYZ,
                                   float value,
                                   int assocVertex,
                                   boolean asCopy)

      Description copied from interface: `VertexDataServer`
      addVertexCopy is used by the Marching Squares algorithm to uniquely identify a new vertex when an edge is crossed in the 2D plane. The implementing method should COPY the Point3f using Point3f.set(). The data consumer can use the association key to group this vertex with others near the same gridpoint.
      Specified by:
        `addVertexCopy` in interface `VertexDataServer`
      Overrides:
        `addVertexCopy` in class `SurfaceReader`
        `assocVertex` - unique association vertex or -1
      Returns:
        new vertex index

    - #### selectPocket

          public void selectPocket(boolean doExclude)

      Overrides:
        `selectPocket` in class `SurfaceReader`

    - #### postProcessVertices

          protected void postProcessVertices()

      Overrides:
        `postProcessVertices` in class `SurfaceReader`

    - #### generateSolventCavity

          private void generateSolventCavity()

    - #### generateSolventCube

          private void generateSolventCube()

    - #### getEdges

          private void getEdges()

    - #### findEdge

          protected IsoSolventReader.Edge findEdge(int i,
                                                   int j)

    - #### getFaces

          private void getFaces()

    - #### validateFace

          private IsoSolventReader.Face validateFace(int ia,
                                                     int ib,
                                                     int ic,
                                                     IsoSolventReader.Edge edge,
                                                     javajs.util.P3 ptS)

    - #### markFaceVoxels

          private void markFaceVoxels(boolean firstPass)

    - #### markToroidVoxels

          private void markToroidVoxels()

    - #### unsetVoxelData

          protected void unsetVoxelData()

      Overrides:
        `unsetVoxelData` in class `AtomDataReader`

    - #### getSolventPoints

          private boolean getSolventPoints(IsoSolventReader.Edge edge,
                                           int ia,
                                           int ib,
                                           int ic)

    - #### checkSpecialVoxel

          private float checkSpecialVoxel(javajs.util.P3 ptA,
                                          javajs.util.P3 ptB,
                                          javajs.util.P3 ptV)

    - #### solventDistance

          private float solventDistance(float rAS,
                                        float rAS2,
                                        float rBS2,
                                        float dAV,
                                        float dAV2,
                                        float dBV2)

    - #### dumpLine

          void dumpLine(javajs.util.P3 pt1,
                        javajs.util.T3 pt2,
                        java.lang.String label,
                        java.lang.String color)

    - #### dumpLine2

          void dumpLine2(javajs.util.P3 pt1,
                         javajs.util.P3 pt2,
                         java.lang.String label,
                         float d,
                         java.lang.String color1,
                         java.lang.String color2)

    - #### dumpPoint

          void dumpPoint(javajs.util.P3 pt,
                         java.lang.String label,
                         java.lang.String color)

    - #### getValueAtPoint

          public float getValueAtPoint(javajs.util.T3 pt,
                                       boolean getSource)

      Overrides:
        `getValueAtPoint` in class `SurfaceReader`
        `getSource` - TODO
      Returns:
        value

    - #### discardTempData

          void discardTempData(boolean discardAll)

      Overrides:
        `discardTempData` in class `SurfaceReader`

    - #### getPlane

          public float[] getPlane(int x)

      Specified by:
        `getPlane` in interface `VertexDataServer`
      Overrides:
        `getPlane` in class `SurfaceReader`