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 Details

    • MIN_RESNO

      private static final int MIN_RESNO
      See Also:
    • 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
    • pymolScene

      private PyMOLScene pymolScene
    • 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
    • volumeData

      private Map<String,javajs.util.Lst<Object>> volumeData
    • mapObjects

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

      private boolean haveMeasurements
    • frames

      private int[] frames
    • uniqueSettings

      private Hashtable<Integer,javajs.util.Lst<Object>> uniqueSettings
    • 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 Details

    • PyMOLReader

      public PyMOLReader()
  • Method Details

    • setup

      protected void setup(String fullPath, Map<String,Object> htParams, Object reader)
      Overrides:
      setup in class AtomSetCollectionReader
    • initializeReader

      protected void initializeReader() throws Exception
      Overrides:
      initializeReader in class PdbReader
      Throws:
      Exception
    • processBinaryDocument

      public void processBinaryDocument() throws Exception
      Overrides:
      processBinaryDocument in class AtomSetCollectionReader
      Throws:
      Exception
    • setAdditionalAtomParameters

      protected void setAdditionalAtomParameters(Atom atom)
      Description copied from class: PdbReader
      adaptable via subclassing
      Overrides:
      setAdditionalAtomParameters in class PdbReader
    • finalizeSubclassReader

      protected void finalizeSubclassReader() throws Exception
      Description copied from class: AtomSetCollectionReader
      optional reader-specific method run first.
      Overrides:
      finalizeSubclassReader in class PdbReader
      Throws:
      Exception
    • 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)
    • getMapList

      private static javajs.util.Lst<Object> getMapList(Map<String,Object> map, String key)
    • getBsReps

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

      public int getUniqueID(int iAtom)
      Specified by:
      getUniqueID in interface PymolAtomReader
    • getCartoonType

      public int getCartoonType(int iAtom)
      Specified by:
      getCartoonType in interface PymolAtomReader
    • getVDW

      public float getVDW(int iAtom)
      Specified by:
      getVDW in interface PymolAtomReader
    • getSequenceNumber

      public int getSequenceNumber(int iAtom)
      Specified by:
      getSequenceNumber in interface PymolAtomReader
    • compareAtoms

      public boolean compareAtoms(int iPrev, int i)
      Specified by:
      compareAtoms in interface PymolAtomReader