Class PyMOLReader

  • All Implemented Interfaces:
    javajs.api.GenericLineReader, PymolAtomReader

    public class PyMOLReader
    extends PdbReader
    implements PymolAtomReader
    PyMOL PSE (binary Python session) file reader. development started Feb 2013 Jmol 13.1.13 reasonably full implementation May 2013 Jmol 13.1.16 PyMOL state → Jmol model PyMOL object → Jmol named atom set, isosurface, CGO, or measurement PyMOL group → Jmol named atom set (TODO: add isosurfaces and measures to these?) PyMOL movie: an initial view and a set of N "frames" PyMOL frame: references (a) a state, (b) a script, and (c) a view PyMOL scene → Jmol scene, including view, frame, visibilities, colors using set LOGFILE, we can dump this to a readable form. trajectories are not supported yet. Basic idea is as follows: 1) Pickle file is read into a Hashtable. 2) Atoms, bonds, and structures are created, as per other readers, from MOLECULE objects 3) Rendering of atoms and bonds is interpreted as JmolObject objects via PyMOLScene 3) Other objects such as electron density maps, compiled graphical objects, and measures are interpreted, creating more JmolObjects 3) JmolObjects are finalized after file reading takes place by a call from ModelLoader back here to finalizeModelSet(), which runs PyMOLScene.setObjects, which runs JmolObject.finalizeObject. TODO: Handle discrete objects, DiscreteAtmToIdx?
    Author:
    Bob Hanson hansonr@stolaf.edu
    • Field Detail

      • nucleic

        private static String nucleic
      • allowSurface

        private boolean allowSurface
      • doResize

        private boolean doResize
      • doCache

        private boolean doCache
      • isStateScript

        private boolean isStateScript
      • sourcePNGJ

        private boolean sourcePNGJ
      • ac0

        private int ac0
      • ac

        private int ac
      • stateCount

        private int stateCount
      • structureCount

        private int structureCount
      • isHidden

        private boolean isHidden
      • bsStructureDefined

        private javajs.util.BS bsStructureDefined
      • bsBytesExcluded

        private javajs.util.BS bsBytesExcluded
      • atomMap

        private int[] atomMap
      • ssMapSeq

        private Map<String,​javajs.util.BS> ssMapSeq
      • xyzMin

        private javajs.util.P3 xyzMin
      • xyzMax

        private javajs.util.P3 xyzMax
      • nModels

        private int nModels
      • logging

        private boolean logging
      • reps

        private javajs.util.BS[] reps
      • isMovie

        private boolean isMovie
      • pymolFrame

        private int pymolFrame
      • allStates

        private boolean allStates
      • totalAtomCount

        private int totalAtomCount
      • pymolVersion

        private int pymolVersion
      • trajectoryStep

        private javajs.util.P3[] trajectoryStep
      • trajectoryPtr

        private int trajectoryPtr
      • objectName

        private String objectName
      • mapObjects

        private javajs.util.Lst<javajs.util.Lst<Object>> mapObjects
      • haveMeasurements

        private boolean haveMeasurements
      • frames

        private int[] frames
      • atoms

        private Atom[] atoms
      • haveScenes

        private boolean haveScenes
      • baseModelIndex

        private int baseModelIndex
      • sceneOrder

        private javajs.util.Lst<Object> sceneOrder
      • bondCount

        private int bondCount
      • haveBinaryArrays

        private boolean haveBinaryArrays
      • ptTemp

        private final javajs.util.P3 ptTemp
      • aTemp

        byte[] aTemp
    • Constructor Detail

      • PyMOLReader

        public PyMOLReader()
    • Method Detail

      • finalizeModelSet

        public void finalizeModelSet()
        At the end of the day, we need to finalize all the JmolObjects, set the trajectories, and, if filtered with DOCACHE, cache a streamlined binary file for inclusion in the PNGJ file.
        Overrides:
        finalizeModelSet in class AtomSetCollectionReader
      • process

        private void process​(Map<String,​Object> map)
        The main processor.
        Parameters:
        map -
      • fixSettings

        private javajs.util.Lst<Object> fixSettings​(javajs.util.Lst<Object> settings)
        Recent PyMOL files may not have all settings. For now, we just add null values;
        Parameters:
        settings -
        Returns:
        settings
      • getFrameScenes

        private boolean getFrameScenes​(Map<String,​Object> map)
        remove all scenes that do not define a frame.
        Parameters:
        map -
        Returns:
        true if there are scenes that define a frame
      • setUniqueSettings

        private int setUniqueSettings​(javajs.util.Lst<Object> list)
        Create uniqueSettings from the "unique_settings" map item. This will be used later in processing molecule objects.
        Parameters:
        list -
        Returns:
        max id
      • addColors

        private void addColors​(javajs.util.Lst<Object> colors,
                               boolean isClamped)
        Add new colors from the main "colors" map object. Not 100% clear how color clamping works.
        Parameters:
        colors -
        isClamped -
      • getAtomAndStateCount

        private void getAtomAndStateCount​(javajs.util.Lst<Object> names)
        Look through all named objects for molecules, counting atoms and also states; see if trajectories are compatible (experimental).
        Parameters:
        names -
      • checkObject

        private boolean checkObject​(javajs.util.Lst<Object> execObject)
      • processMovie

        private void processMovie​(javajs.util.Lst<Object> mov,
                                  int frameCount)
        Create a JmolObject that will represent the movie. For now, only process unscripted movies without views.
        Parameters:
        mov -
        frameCount -
      • fixMovieViews

        private static javajs.util.Lst<Object> fixMovieViews​(javajs.util.Lst<Object> views)
        Could implement something here that creates a Jmol view.
        Parameters:
        views -
        Returns:
        new views
      • fixMovieCommands

        private static javajs.util.Lst<Object> fixMovieCommands​(javajs.util.Lst<Object> cmds)
        Could possibly implement something here that interprets PyMOL script commands.
        Parameters:
        cmds -
        Returns:
        new cmds
      • processObject

        private void processObject​(javajs.util.Lst<Object> execObject,
                                   boolean moleculeOnly,
                                   int iState)
        The main object processor. Not implemented: ALIGNMENT, CALLBACK, SLICE, SURFACE
        Parameters:
        execObject -
        moleculeOnly -
        iState -
      • processCGO

        private void processCGO​(javajs.util.Lst<Object> pymolObject)
        Create a CGO JmolObject, just passing on key information.
        Parameters:
        pymolObject -
      • processGadget

        private void processGadget​(javajs.util.Lst<Object> pymolObject)
        Only process _e_pot objects -- which we need for color settings
        Parameters:
        pymolObject -
      • processMap

        private void processMap​(javajs.util.Lst<Object> pymolObject,
                                boolean isObject,
                                boolean isGadget)
        Create mapObjects and volumeData; create an ISOSURFACE JmolObject.
        Parameters:
        pymolObject -
        isObject -
        isGadget -
      • processMeasure

        private void processMeasure​(javajs.util.Lst<Object> pymolObject)
        Create a MEASURE JmolObject.
        Parameters:
        pymolObject -
      • processMolecule

        private javajs.util.BS processMolecule​(javajs.util.Lst<Object> pymolObject,
                                               int iState)
        Create everything necessary to generate a molecule in Jmol.
        Parameters:
        pymolObject -
        iState -
        Returns:
        atom set only if this is a trajectory.
      • getLexStr

        private String[] getLexStr​(byte[] lex)
      • getCStr

        private String getCStr​(byte[] lex,
                               int pt)
      • processMolCryst

        private void processMolCryst​(javajs.util.Lst<Object> cryst)
        Pick up the crystal data.
        Parameters:
        cryst -
      • getBondList

        private javajs.util.Lst<Bond> getBondList​(javajs.util.Lst<Object> bonds)
        Create the bond set.
        Parameters:
        bonds -
        Returns:
        list of bonds
      • fillIntArrayFromBytes

        private void fillIntArrayFromBytes​(byte[] b,
                                           int[] array)
      • fillFloatArrayFromBytes

        private void fillFloatArrayFromBytes​(byte[] b,
                                             float[] array)
      • addAtom

        private javajs.util.P3 addAtom​(javajs.util.Lst<Object> pymolAtoms,
                                       int apt,
                                       byte[] atomArray,
                                       int[] vArray,
                                       String[] lexStr,
                                       int icoord,
                                       javajs.util.Lst<Object> coords,
                                       float[] coordArray,
                                       javajs.util.Lst<Object> labelPositions,
                                       float[] labelArray,
                                       javajs.util.BS bsState,
                                       int iState)
        Parameters:
        pymolAtoms - list of atom details
        apt - array pointer into pymolAtoms
        atomArray -
        vArray -
        lexStr -
        icoord - array pointer into coords (/3)
        coords - coordinates array
        coordArray -
        labelPositions -
        labelArray -
        bsState - this state -- Jmol atomIndex
        iState -
        Returns:
        true if successful
      • atomBool

        private boolean atomBool​(byte[] atomArray,
                                 int pt,
                                 int offset,
                                 int mask)
      • atomFloat

        private float atomFloat​(byte[] atomArray,
                                int pt,
                                int offset)
      • atomStr

        private String atomStr​(byte[] atomArray,
                               int pt,
                               int offset,
                               String[] lexStr)
      • atomInt

        private int atomInt​(byte[] atomArray,
                            int pt,
                            int offset)
      • addBonds

        private void addBonds​(javajs.util.Lst<Bond> bonds)
      • addMolStructures

        private void addMolStructures()
      • addMolSS

        private void addMolSS​(String ssType,
                              STR type)
        Secondary structure definition.
        Parameters:
        ssType -
        type -
      • createShapeObjects

        private void createShapeObjects()
        Create JmolObjects for all the molecular shapes; not executed for a state script.
      • processMeshes

        private void processMeshes()
        Create mesh or mep JmolObjects. Caching the volumeData, because it will be needed by org.jmol.jvxl.readers.PyMOLMeshReader
      • processDefinitions

        private void processDefinitions()
        Create a JmolObject that will define atom sets based on PyMOL objects
      • processSelectionsAndScenes

        private void processSelectionsAndScenes​(Map<String,​Object> map)
        A PyMOL scene consists of one or more of: view frame visibilities, by object colors, by color reps, by type currently just extracts viewpoint
        Parameters:
        map -
      • finalizeSceneData

        private void finalizeSceneData()
        Make sure atom uniqueID (vectorX) and cartoonType (vectorY) are made permanent
      • intAt

        static int intAt​(javajs.util.Lst<Object> list,
                         int i)
      • pointAt

        static javajs.util.P3 pointAt​(javajs.util.Lst<Object> list,
                                      int i,
                                      javajs.util.P3 pt)
      • floatsAt

        static float[] floatsAt​(javajs.util.Lst<Object> a,
                                int pt,
                                float[] data,
                                int len)
      • floatAt

        static float floatAt​(javajs.util.Lst<Object> list,
                             int i)
      • listAt

        static javajs.util.Lst<Object> listAt​(javajs.util.Lst<Object> list,
                                              int i)
      • sublistAt

        public static javajs.util.Lst<Object> sublistAt​(javajs.util.Lst<Object> mesh,
                                                        int... pt)
      • listToMap

        static Map<String,​javajs.util.Lst<Object>> listToMap​(javajs.util.Lst<Object> list)
        return a map of lists of the type: [ [name1,...], [name2,...], ...]
        Parameters:
        list -
        Returns:
        Hashtable
      • stringAt

        static String stringAt​(javajs.util.Lst<Object> list,
                               int i)
      • bytesToString

        private static String bytesToString​(Object object)
      • colorSettingClamped

        static int colorSettingClamped​(javajs.util.Lst<Object> c,
                                       javajs.util.P3 ptTemp)
      • getColorPt

        static int getColorPt​(Object o,
                              javajs.util.P3 ptTemp)
      • getBsReps

        private static javajs.util.BS getBsReps​(javajs.util.Lst<Object> list)