All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jmol.viewer.Jmol.properties Maven / Gradle / Ivy

There is a newer version: 14.31.10
Show newest version
Jmol.___JmolDate="$Date: 2016-10-21 13:35:41 +0200 (Fri, 21 Oct 2016) $"
Jmol.___fullJmolProperties="src/org/jmol/viewer/Jmol.properties"

# THIS IS THE RELEASE BRANCH 
# BUG FIXES ONLY, PLEASE

# see also http://chemapps.stolaf.edu/jmol/zip for daily updates	


Jmol.___JmolVersion="14.6.4_2016.10.21"

bug fix: menu item for X3D export delivers STL; item for STL not functional 
bug fix: X3D export includes extraneous VRML text
bug fix: load "@x" not saved in state properly
bug fix: IDTF exporter broken in Jmol 14.6.4_2016.10.02

JmolVersion="14.6.4_2016.10.15"

bug fix: (JSmolJavaExt.js) JSmol/HTML5  WRITE xxx.stl not working.
bug fix: STL export can place two endcaps in the same location

JmolVersion="14.6.4_2016.10.09"

new feature: autocalculation of MMFF94 partial charges
 -- isosurface ... map MEP
 -- DIPOLE MOLECULAR 
 -- no need to preface these with CALCULATE PARTIALCHARGE

bug fix: MOL and V3000 readers should add implicit partial charges of 0 when only some partial charges are given  

bug fix: fine lines or dots rendered around boxes in ROCKETS 

bug fix: SET MEASUREMENTS x.x  is 10x too wide

bug fix: MO command does not allow SQUARED with PLANE
bug fix: MO command SQUARED does not reset cutoff to its square
bug fix: MO command does not preserve SQUARED after PLANE command

bug fix: MOLDEN reader does not accept [MOLDEN FORMAT]

bug fix: WRL/X3D/STL surface closure for rockets, cartoons, polyhedra, ellipsoids, geosurface, draw
bug fix: triangle renderer miscalculates z-index, causing some hidden triangle bits to show

code: refactoring of line rastering improves efficiency

JmolVersion="14.6.4_2016.10.02"

new feature: 3DPrinter-compatible VRML and STL writing.
  -- mesh only; does not use high-level objects Cone, Cylinder, Sphere
  -- extensive use of dEF and USE for small-footprint VMRL files
  -- STL is binary generally, but will be ASCII using SET DEBUG TRUE
  -- write t.wrl
  -- write t.stl

JmolVersion="14.6.3_2016.09.29"

bug fix: COD CIF files have mixed-lower case atom labels (H5a) in bonds def, causing Jmol to miss bonds.
bug fix: rogue System.out.println for text rendering.

JmolVersion="14.6.3_2016.09.21"

bug fix: print compare({1.1}, {2.1}, "MAP", "H") broken in 14.6.0_2016.06.14

JmolVersion="14.6.3_2016.09.18"
released

bug fix: write MENU broken for non-English language (UTF-8 strings not correctly encoded using base64)
bug fix: write PNGJ should not store "#_DOCACHE_" in PNGJ file
bug fix: JSmol echo image loading from PNGJ can fail
bug fix: load "" after pasting in structure to load fails

JmolVersion="14.6.2_2016.09.01"

bug fix: show vdw USER broken
bug fix: COMPARE {1.1} {2.1} SMILES  should be ignoring stereochemistry
bug fix: CIF subsystem reader broken

JmolVersion="14.6.2_2016.08.30"

bug fix: SMILES comparison of two strings will report incorrect stereochemistry

JmolVersion="14.6.2_2016.08.29"

bug fix: load FILES does not deliver _modelFileName for individual models
bug fix: NCI/CADD reader not escaping "\" in SMILES (javajs.util.PT.escapeUrl)

JmolVersion="14.6.2_2016.08.28"
released

new feature: allowance for external app loading of binary (mmtf) files
  or any other file using a simple interface:
  Viewer.openReader(fullPathName, reader)
 

bug fix: RCSB -> https  "https://files.rcsb.org/download/%FILE.pdb"

bug fix: EBI sites to https
bug fix: Spartan 16 reader may have empty first model
bug fix: 2D model show SMILES uses @SP -- should be /nostereo/ based on _.dimension == "2D"
bug fix: NCI/CADD now requires "get3d=true" not "get3d=True"

code: Unit test includes binary types PyMOL and MMTF


JmolVersion="14.6.1_2016.08.20"

feature change: updated links to EBI electron density maps (formerly Uppsala; for isosurface "*xxxx")

    "pdbemap", "http://www.ebi.ac.uk/pdbe/coordinates/files/%file.ccp4",
    "pdbemapdiff", "http://www.ebi.ac.uk/pdbe/coordinates/files/%file_diff.ccp4"

code: recoding in javajs.util.Measure.calculateQuaternionRotation (Andrew Hanson)

JmolVersion="14.6.1_2016.08.11"

bug fix: PyMOL dump_binary file reading fixes

JmolVersion="14.6.1_2016.08.09"
sycnronized with Jmol 14.7.1
bug fix: upgrade of RCSB mmtf format reading to version 0.2 specs

  	       load =2tbv.mmtf {1 1 1} filter "biomolecule 1;*.ca"

new feature: Jmol reads PyMOL 1.8 PSE files with "set dump_binary, 1"

JmolVersion="14.6.1_2016.07.29"

bug fix: COMPARE command can fail if an atom has no bonds

JmolVersion="14.6.1_2016.07.24"

bug fix: write x.pdb for multimodel file does not work.

JmolVersion="14.6.1_2016.07.11"

sychronized with Jmol 14.7

bug fix: Jmol SMILES not allowing for insertion-code search
 -- adds "^" for insertion code: [G#129^A.*]
  
JmolVersion="14.6.0_2016.07.06"

bug fix: Jmol can crash on point group calculation for small polyhedra

JmolVersion="14.6.0_2016.06.30"

bug fix: cartoon rendering broken in 2016.06.28

JmolVersion="14.6.0_2016.06.28"

bug fix: using an exporter (write VRML, eg) with cartoonsFancy will break rendering after that
bug fix: after loading PNGJ data, using write FILE crashes Jmol

JmolVersion="14.6.0_2016.06.23"

bug fix: nn.? and nn.* are not processed properly as float nn.
         For example: print (35 == 35.? "yes" : "no") cause script exception
         

JmolVersion="14.6.0_2016.06.22"

bug fix: compare(a,b,"isomer") does not detect ENANTIOMER (broken in 14.5.5)
bug fix: missing error trap for unsettable property setting
bug fix: load models {0 0 1} ... fails in script compiler

JmolVersion="14.6.0_2016.06.21"

bug fix: x3d export shows partial bond as standard bond


JmolVersion="14.6.0_2016.06.14"

bug fix: reading of protein structure for a group that is not in a polymer causes null pointer exception

JmolVersion="14.6.0_2016.05.26"

bug fix: set hermiteLevel -4 allows hermite during mouse move but not spinning

bug fix: polyhedron faces not generated correctly when postions are very close together (still)
bug fix: polyhedron face areas not calculated correctly

JmolVersion="14.6.0_2016.05.24"

bug fix: localization broken due to too-old GNU msgfmt version.
bug fix: splash image not appearing in Jmol application  Help...about Jmol
bug fix: Jmol application Help may not appear at all
bug fix: switching out of hermite "fancy" cartoons doesn't actually do that.
         

code: removing unnecessary	J/api/JmolBioMeshRenderer.js
   -- when I started working with Java2Script, I thought that 
      all references to a class had to be removed and an interface used instead
      if modularization was to work in JavaScript. But it turns out only "new Xxx()"
      will trigger that request. This might be something I changed in j2sjmol.js early 
      on; I cannot remember.  

JmolVersion="14.6.0_2016.05.23"

new feature: unitcell reciprocal x.x
  -- allows scaling of reciprocal cell, similar to unitcell("reciprocal", x.x)

new feature: write CIF
  -- just a very simple CIF file, P1 format
  -- allows writing a simple CIF file with changed coordinates after a UNITCELL command
    
bug fix: calculate pointgroup polyhedra "xxx" does not work
bug fix: draw pointgroup $xxx does not work for named polyhedra
bug fix: named polyhedra set visibility broken
bug fix: colors light(and dark)grey and light(and dark)gray should be synonymous
bug fix: isosurface SILENT should pass that to readers

popup menu: reorganization of color... submenu

JmolVersion="14.6.0_2016.05.17"
for release

new feature: full implementation of OpenSMILES and OpenSMARTS in Jmol
  see http://opensmiles.org and http://www.moldb.net/opensmarts

code: unnecessary org.jmol.util.BNode removed; methods now part of org.jmol.util.Node

new feature: C13 NMR prediction from http://www.nmrdb.org/service/jsmol13c?smiles=CCCC
 -- although we send MOL file, not SMILES here.
 -- actuated with
 
   SHOW NMR H1   // H1 1H H or just SHOW NMR all default to this
   SHOW NMR C13  // or C or 13C
   SHOW NMR none // close JSpecView

new feature: Jmol now implements a way of indicating atropisomer chirality. 
 -- measured dihedral angle is clockwise-positive front-to-back, as for Jmol dihedrals
 -- matching with {*}.find("SMILES","...a^nm-a...") where n and m are 1, 2, or 3  
    indicate first, second, or third, respectively, and indicate which bonds of 
    the biaryl bond, as written, are to the reference atoms.
 -- for example:
 
   $ load $biphenol
   $ connect @{@7|@8} @{@1|@2} atropisomer
   $ print {*}.find("SMARTS","c1(O)ccccc1^23-c2c(O)cccc2")
 
  ({0:13})
  
  Explained below.
    
new feature: CONNECT {pair1} {pair2} ATROPISOMER
 -- creates a new bond of type atropisomer (bond chirality in biaryl systems)
 -- each pair must include the bonded atom and its reference connected atom
 -- example:
 
   $ load $biphenol
   $ connect @{@7|@8} @{@1|@2} atropisomer
   $ getProperty bondinfo[7].type
   
   bondinfo[7].type	"atropisomer_23"
  
new feature: BONDORDER ATROPISOMER_nm
  -- not for general use; will be found in state file
  -- for example:
  
    select BONDS ({6});
    bondOrder atropisomer_23;

new feature: Jmol SMILES bond atropisomerism ^nm- and ^^nm-
 -- indicates atropisomerism (bond chirality in biaryl systems)
 -- ^ and ^^ for bonds similar to @ and and @@ for atoms
 -- n and m are single-digit bond selectors, generally one of 1, 2, or 3
 -- n = 1/2/3 means "reference atom is first/second/third bonded 
 -- ^- and ^^- same as ^22- and ^^22-, respectively
 -- example: 
   
   $ load $biphenol
   $ connect @{@7|@8} @{@1|@2} atropisomer
   $ print {*}.find("SMARTS","c1(O)cccc{c1^23-c2}c(O)cccc2")
   
   ({1 6})

  Here the "^23-" refers to the two carbons with connected oxygen atoms, because the second
  bond listed for the carbon on the left is to the c1(O) atom, and the third bond listed for
  the carbon on the right is to the other c(O) atom. Note that bond numbering includes the 
  implicit bond to the atom coming from the atom on its left, which for the second carbon, 
  starts with the atropisomeric bond itself, at least in this case. 

             1*23  1*23
     c1(O)ccccc1^23-c2c(O)cccc2
                                      

bug fix: MolPRO reader broken

bug fix: Jmol SMILES directive /noaromatic/ should ignore ":" bond type 
bug fix: Jmol SMILES directive /aromaticDouble/ not implemented for SMILES
buf fix; Jmol SMARTS measurements should be required to come after branches
bug fix: Jmol SMILES parser should require connection numbers to be placed prior to branches
bug fix: Jmol SMILES should not allow (.t!50,60,70,80)
bug fix: Jmol SMILES should treat  search("[THR.*][THR.*]") should select all atoms in each group 
bug fix: Jmol SMILES should return ({}) not ERROR if no atoms are involved

code: StateCreator and Shape getStateInfo methods simplified and condensed

JmolVersion="14.5.4_2016.04.30"

new feature: 13C Simulated spectra (but without correlation yet)

bug fix: bondorder command broken in 14.1.8_2014.02.17
bug fix: polyhedra COLLAPSED option in conjunction with UNITCELL breaks rendering
bug fix: "axis" keyword dropped from vocabulary, disabling MOVETO AXIS...

JmolVersion="14.5.4_2016.04.25"

new feature: (JavaScript) Jmol.loadFileFromDialog(jmolApplet0)
 -- asynchronous file loading on demand
 -- can be model file, but can also be script, dssr data - anything
 -- can be a local file or a URL
 -- see dssr.htm
 -- for example: 
   
      Jmol.jmolButton("jmolApplet0", [function(){Jmol.loadFileFromDialog(jmolApplet0)}],"Open File")
 
new feature: setting DSSR on the fly:

   model 1 property dssr "1d66.dssr"   // file containing data
   model 1 property dssr @{load("1d66.dssr")} // actual data
   select iloops
 
bug fix: show spaceGroup can crash after load ... filter "biomolecule 1"

bug fix: load =1auy.cif {1 1 1} does not complete atoms in unit cell 
         for files with noncrystallographic symmetry operations (_struct_ncs...) such as viral capsids

bug fix: load =1auy.cif {1 1 1} filter "BIOMOLECULE 1;*.ca" does not work

code: =xxxx/DSSR path changed to http://dssr-jmol.x3dna.org from http://x3dna.bio.columbia.edu/dssr


JmolVersion="14.5.4_2016.04.24"

new feature: show chemical xxx  where xxx is one of the file types:

     alc cdxml cerius charmm cif cml ctx gjf gromacs hyperchem jme 
     maestro mol mol2 sybyl2 mrv pdb sdf sdf3000 sln smiles xyz     
     
   retrieves this information for the currently selected set of atoms
   from the the NCI CACTVS Resolver. 
   
   Note that the PDB writer is nonstandard, and "SDF" no longer returns
   the 2D mol file, only the 3D mol file.    
   
   Can be used as the show() function: x = show("chemical jme")

new feature: print {*}.find("SMILES/hydrogen/") adds hydrogen atoms

feature note: JSME upgraded to JSME_2015-12-06-2

bug fix: NCI switch to using /sdf for 3D rather than 2D, breaks jsv_predict2.html
  -- requires converting mrv format to jme:
  
		function getJMEHs() {
			var x= show("chemical mrv")
			var x2 = x.split('x2="')[2].split('"')[1].split(' ')
			var y2 = x.split('y2="')[2].split('"')[1].split(' ')
			var el = x.split('elementType="')[2].split('"')[1].split(' ')
			var s =  '' + {*}.size + ' ' + {*}.bonds.size + ' ' + el.join(x2).join(y2).join(' ').replace('\n',' ')
			var b = x.split("W<') ? -1 : bi.find('>H<') ? -2 : bi.split('order="')[2].split('"')[1])  
				 s += ' ' +  at + ' ' + n
			}
			return s
		}
        load $morphine		
		x = getJMEHs()
		print x
   

bug fix: show VARIABLES broken
bug fix: after load =xxxx/dssr, selection "naChains" is defined, but it is not an atom list
bug fix: hyperchem reader may not interpret aromatic correctly
bug fix: show chemical ... will not use the correct structure if it came from NCI and has been changed via modelKitMode.

code: JmolBioModelSet and BioModel untangled
code: JmolBioModelSet moved to org.jmol.modelsetbio.BioModelSet
code: JmolBioModelSet changed from interface to class
code: unnecessary JmolBioResolver interface removed
  
JmolVersion="14.5.4_2016.04.23"

FEATURE CHANGE: Jmol 14.5.4_2016.04.23 by default will implement DSSP 2.0 as described in
                Int. J. Mol. Sci. 2014, 15, 7841-7864; doi:10.3390/ijms15057841
                and implemented at http://www.cmbi.ru.nl/dssp.html.  
	            This change only affects helices that have bulges, indicating them
	            more appropriately as pi helices rather than alpha helices.  
	            
	            The original version of DSSP, "DSSP 1.0" will be available using 
	            
	            calculate structure DSSP 1.0
	            show DSSP 1.0
	            load ... filter "DSSP1"
	            
	            This change is for 14.5 only, not 14.4, which remains DSSP 1.0

code: unnecessary org.jmol.modelset.JmolBioModel interface removed
code: unnecessary org.jmol.api.DSSPInterface removed
code: DSSP 1.0/2.0 switch in ModelLoader only necessary while 14.4 and 14.5 are being compiled in parallel

JmolVersion="14.5.4_2016.04.22"

bug fix: on loading, crystallographic file reading fails when applying symmetry
bug fix: on loading, user-defined space groups using Hall symbol fails
bug fix: SHELX reader broken


JmolVersion="14.5.4_2016.04.21"

bug fix: CIF files with missing tags that Jmol needs fail to load at all. 
         (Not necessarily a bad thing, but it is not supposed to fail so dramatically.)
bug fix: mmCIF/mmTF reader does not complete symmetry for biomolecules when there is a lattice.
         for example: 
	     
  	       load =2tbv.mmtf {1 1 1} filter "biomolecule 1;*.ca"
  	       backbone off; spacefill 200%
  	       color property symop

bug fix: mmCIF, PDB, and mmTF readers with lattice indicated does not show unit cell

JmolVersion="14.5.4_2016.04.19"

new feature: preliminary MMTF reader 
  -- MacroMolecular Transmission Format (MMTF, from RTSB)
  -- see https://github.com/rcsb/mmtf/blob/master/spec.md#overview
  -- binary format for file transfer and molecule construction
  -- uses MessagePack binary JSON format
  -- entirely experimental; not for general consumption
  -- biomolecule processing works
  -- DSSP secondary structure is read
  
 *
 * JmolData RCSB MMTF (macromolecular transmission format) file reader
 * 
 * see https://github.com/rcsb/mmtf/blob/master/spec.md
 * 
 * /full/ specification as of 2016.4.18 is implemented,including:
 * 
 * reading atoms, bonds, and DSSR secondary structure
 * 
 *   load =1f88.mmtf 
 *   
 * 
 * reading space groups and unit cells, and using those as per other readers
 * 
 *   load =1crn.mmtf {1 1 1} 
 * 
 * reading bioassemblies (biomolecules) and applying those transformations
 * 
 *   load =1auy.mmtf FILTER "biomolecule 1;*.CA,*.P"
 * 
 * reading biomolecules and lattices, and loading course-grained
 * 
 *   load =1auy.mmtf {2 2 1} filter "biomolecule 1;bychain";spacefill 30.0; color property symop
 * 
 *

bug fix: certain viral capsid CIF files will fail to load due to this line: XAU '(X0)(1-10,21-25)' A,B,C 
bug fix: DSSR selection includes too many atoms
bug fix: PSE reader broken in JmolData.jar; no issue with Jmol.jar or JSmol 
bug fix: PSE reader for Pymol 1.7.5 files may not set some models visible
bug fix: PSE reader not processing (sele) and related selections

new feature: set window width height
new feature: set window [width height]
new feature: set window "xxx.png"
 -- allows programmatic setting of window size (app only)
 
new feature: getProperty("shapeInfo.echo") 
 -- a 1-length array (because all shapeInfo results are arrays
 -- shapeInfo.echo[0] contains an associative array based on echo names
 -- currently only include keys name, imageWidth, imageHeight, and imageFile
 
	$ set echo myecho image 'http://noys3.weizmann.ac.il/a2jb/browse?sn=testSet/dna-a/pymol.png'
	$ print getProperty("shapeInfo.echo[0]")
	{
	  "myecho"  :
	  {
	    "imageFile"  :  "http://noys3.weizmann.ac.il/a2jb/browse?sn=testSet/dna-a/pymol.png"
	    "imageHeight"  :  500
	    "imageWidth"  :  500
	    "name"  :  "myecho"
	   }
	 }
 
 -- idea is to allow access to image dimensions for any file image
 -- for example, for a MacPyMOL session file, because those do not contain width and height information,
    we don't have the width and height we need to recreate the model window and associated Jmol image,
    but we can also read the associated PyMOL-generated PNG file and get the dimensions that way 

	    load 'xxxx.pse' filter 'DORESIZE;DOCACHE'
	    set echo myecho image 'xxxx.png'
	    var a = getProperty('shapeInfo.echo[0].myecho')
	    set echo myecho off
	    write PNGJ @{a.imageWidth} @{a.imageHeight} 'xxxx-jmol.png'
    
    thus temporarily loading the PyMOL image just long enough to get its dimensions; not actually viewing it

bug fix: SET nihResolverFormat   does not work; using "=" does work.
		 (There should be no reason to set this; Jmol is automatically changing those to "https".)

JmolVersion="14.5.4_2016.04.14"

bug fix: Jmol 14.5.4_2016.04.13 will fail to read PDB files from scripts referencing http://www.rcsb.org/pdb/
 -- does not affect http://www.rcsb.org/pdb/ligand 
 -- does not affect load =xxxx or load ==xxx
 -- does not affect PNGJ files
 -- only affects scripts that specifically reference that site (e.g. state scripts created prior to 4/13/2016)

bug fix: selection of dssr elements using select within(dssr,"pairs[where...]") is not working
 -- example after fix:
    $ load =1d66/dssr
	$ print _M.dssr.pairs.select("where bp='G-C'")[1]
	{
	  "DSSR"  :  "cW-W"
	  "LW"  :  "cWW"
	  "Saenger"  :  "19-XIX"
	  "bp"  :  "G-C"
	  "index"  :  3
	  "name"  :  "WC"
	  "nt1"  :  "|1|D|DG|3||||"
	  "nt2"  :  "|1|E|DC|36||||"
	 }
   $ select within(dssr,"pairs")
   773 atoms selected
   $ select within(dssr,"pairs[where bp='G-C']")
   243 atoms selected
   $ select within(dssr,"pairs[where name='WC']")
   691 atoms selected
   
 -- Note that this works because SELECT can find unit ids ("|1|E|DC|36||||") in any string. 
    For example:
    
    $ select "|1|E|DC|36||||"
    19 atoms selected
    


JmolVersion="14.5.4_2016.04.13"

bug fix: JSmol cannot load RCSB ligand files
bug fix: "axis" unintentionally made reserved word in "14.4.4_2016.03.19"
bug fix: symop(@1 @2) broken
bug fix: symop() taking default unitcell from "current" -- should be that it
         REQUIRES a prefix "{xxx}." if @1 or @2 are not indicated and there are 
         multiple models (because it is a general function, not a script command).
         
bug fix: models from PyMOL reader do not save atom colors in state when balls are colored

new feature: "$isosurface1".getProperty("atoms") 
 -- returns atoms associated with this surface
 -- for example, the atoms used to make a molecular surface
 
new feature: show xxx /yyy 
  -- filters any SHOW command for lines containing "yyy" (case insensitive)
  -- examples:
  
  	$ show symop/glide
  	$ show set/zoom
  	$ show state/draw
  	$ show file "test.xyz" /H
  	$ show file "/remark 900"
  	$ show variables/sym
  	  	
FEATURE NOTE: Jmol now has a RELATIVELY COMPLETE set of analysis and visualization  
  tools for space group symmetry. All  standard and magnetic space group operations 
  are covered. Features are concentrated in four command options and one function:
  
  LOAD .... SPACEGROUP .... UNITCELL ....
  SHOW SYMOP ....
  DRAW SYMOP ....
  DRAW POINTGROUP SPACEGROUP
  x = symop(....)
  
  With these features, you can:
  
   -- load any model while applying any actual or conceivable space group or subset of a space group
   -- tabulate all space group operations associated with that model
   -- retrieve an associative array indicating all aspects of the operation, including
      point, rotation axis, plane, glide vector, lattice offset vector, and 4x4 matrix
   -- visualize all aspects of an operation, including proper and improper rotations
      inversion centers, mirror planes, glide planes, translations, and magnetic spin time reversal                      
   -- apply any operation to any atom or any point in space
   -- given any combination of two atoms or two points in space, determine and/or 
      depict the operation(s) that relate those to atoms or positions
                  
new feature: symop(3,@3,"atom")
  -- returns target atom or atoms 

new feature: show symop 3 @3 "atom"
  -- shows target atom or atoms 

JmolVersion="14.5.4_2016.04.11"

new feature: symop() options:
  symop(op)
    -- returns the 4x4 matrix representation of this operator
  symop(op, atom) 
    -- returns the point generated by operator op on atom
    -- op may be a positive or negative integer indictating the operation (or its reverse)
       to apply from the loaded space group -- for example, symop(3, @1) or symop(-4, {atomindex=16})
    -- op may be a string such as "x+1/2,1/2-y,z" representing a specific generic operation
  symop(atom1, atom2)
    -- returns the description of the first of possibly several operations that take atom1 to atom2, for example:
       "2-fold screw axis|translation: 1/2 0 0" 
  symop(atom1, atom2, n)
    -- returns the description of the nth operation that takes atom1 to atom2
  symop(...point...)
    -- any place an atom can be used in symop(), one can substitute an xyz coordinate. 
    -- for example, symop(@1, {1/2 1/2 1/2})
  {atomset}.symop(...)
    -- when more than one model is loaded, prepending any symop function with an atom set specifies which 
       atoms, space group, and unit cell are being referenced. For example, {2.1}.symop(5) operates only on 
       atoms in the first model of the second loaded file, using the appropriate space group and unit cell. 
       In this way, "@1" will designate one atom only, provided only one model is showing (using the FRAME/MODEL command).
       If only one model has been loaded, there is no need to use this syntax; symop(...) will do the same.  
  symop(..., outputType)
   -- All uses of symop() and {atomset}.symop() can be extended using a final parameter that
     changes the default output described above to be something else. Options for outputType include:

     "draw"    Returns the Jmol script illustrating this operation with DRAW commands. 
     
       $ print symop(3,"draw")
        draw ID draw_* delete
        draw ID draw_frame1X diameter 0.15{5.5172 1.9683 2.7802}{6.5172 1.9683 2.7802} color red
        ...
        
     "full"    Returns the tab-separated Jones-Faithful string and descriptor for this operation.
     
       $ print symop(3,"full")
        -x,-y,-z(mx,my,mz)  	Ci: 0 0 0

     "lattice" Returns the lattice type associated with the space group involving this operation.
     
     "list"    Specifically when two atoms or points are specified, returns a string list of all operations
               taking the first to the second.
               
       $ print symop(@3,@21,"list")
			5	x+1/2,-y+1/2,-z+1/2(-mx,my,mz)	2-fold screw axis|translation: 1/2 0 0|time-reversed
			7	-x+1/2,y+1/2,z+1/2(-mx,my,mz)	n-glide plane|translation: 0 1/2 1/2|time-reversed

               Note that this string can be turned into a standard array using .lines.split("\t",true):

       $ print symop(@3,@21,"list").lines.split("\t",true)
		  [
		    5
		    x+1/2,-y+1/2,-z+1/2(-mx,my,mz)
		    2-fold screw axis|translation: 1/2 0 0|time-reversed
		  ]
		  [
		    7
		    -x+1/2,y+1/2,z+1/2(-mx,my,mz)
		    n-glide plane|translation: 0 1/2 1/2|time-reversed
		  ]

     "array"   Returns an associative array that contains critical information relating to this operation.
     
       $ load =magndata/0.34 
       $ print symop(3,"array")
		{
		  "inversionCenter"  :  {0.0 0.0 0.0}
		  "label"  :  "Ci: 0 0 0"
		  "matrix"  :
		  [
		  [-1.0,	0.0,	0.0,	0.0]
		  [0.0,	-1.0,	0.0,	0.0]
		  [0.0,	0.0,	-1.0,	0.0]
		  [0.0,	0.0,	0.0,	1.0] ]
		  "timeReversal"  :  1
		  "xyz"  :  "-x,-y,-z(mx,my,mz)"
		  "xyzOriginal"  :  "-x,-y,-z,m"
		 }
	 
	   In addition, all possible keys of this array may be used as well for outputType. These include:
	       
	       "axisVector", "cartesianTranslation", "centeringVector", "fractionalTranslation", 
         "inversionCenter", "label", "matrix", "plane", "rotationAngle",  
         "timeReversal", "unitTranslation", "xyz", and "xyzOriginal"

     Three of these that may be less than obvious are explained below:
     
     "centeringVector"  For operations that are pure lattice translations, returns the vector 
                        for this centering in fractional coordinates.
                        
     "timeReversal"     This quantity is 0 for standard space groups. Magnetic space group
                        operations also include the possibility of inversion of the spin
                        along with any 3D symmetry operation. This inversion characteristic
                        is referred to as "time reversal" and takes the value of 1 or -1. 

     "unitTranslation"  Symmetry operations involving two atoms may include an extra 
                        lattice translation if the two atoms are in different unit cells.
                        This translation is above and beyond any fractional lattice centering
                        that this operator incorporates for a face- or body-centered space group.  
		  
new feature: show spacegroup/xxxxx

 -- selects lines from a space group report similar to the way show state/xxxx works
 -- example:
 
  load =ams/quartz 1
  show spacegroup/Class
  
new feature: show/draw symop @1 @2
 -- gives full list of matching symmetry operations
 -- example:
 
	$ load =magndata/1.23 {444 555 1} packed
	$ show symop  @153 @299

    1	x+2,y,z2(mx,my,mz)	translation: 2 0 -2
    5	-x,-y,-z(mx,my,mz)	Ci: 0 0 0
    11	x+2,-y,-z(-mx,my,mz)	2-fold screw axis|translation: 2 0 0|time-reversed
    15	-x,y,z2(-mx,my,mz)	c-glide plane|translation: 0 0 -2|time-reversed
		  
new feature: show/draw symop @1 @2 n
 -- shows or draws the nth symmetry operation relating atom 1 to atom 2
 -- example:
 
	$ load =magndata/1.23 {444 555 1} packed
	$ show symop  @153 @299 3

    11	x+2,-y,-z(-mx,my,mz)	2-fold screw axis|translation: 2 0 0|time-reversed
  
new feature: print pointgroup("spacegroup", @1)
 -- analyzes the point group (crystal class) of a crystal. 
 -- uses three irrational-coordinate points to generate all possible operators
 -- creates a map with keys (somewhat variable depending upon axes present):
 
	C2
	C3
	Ci
	Cs
	S6
	detail
	distanceTolerance
	linearTolerance
	nAtoms
	nC2
	nC3
	nCi
	nCn
	nCs
	nS6
	nSn
	nTotal
	name
	points
	principalAxis
    
new feature: draw SPACEGROUP
 -- draws all operations in space group
 
new feature: draw POINTGROUP SPACEGROUP
 -- draws crystal class symmetry operations for a space group
 -- uses point group style, with circular planes 

new feature: @1.find("crystalClass", pt)
  -- generates a list of points based on a model's crystal class (point group)
  -- uses @1 just to find the unit cell and space group
  -- optional pt is used as a generator (defaults to @1)
  -- example:
   load =ams/calcite 1
   x = @3.find("crystalClass")
   print pointgroup(x).name
   draw points @x
   polyhedra ID p {0 0 0} to @x

bug fix: qchem reader fails to switch to spherical D/F basis for second structure
bug fix: pointGroup secondary axis in yellow is too hard to see -- using "orange" instead

JmolVersion="14.5.4_2016.04.05b"

bug fix: unitcell primitive for A,B,C-centered lattices rotated 90 degrees from 
         NRL standard (Michael Mehl, U.S. Naval Research Laboratory)
bug fix: polyhedra COLLAPSED do not have correct normal vectors
bug fix: assocArray.bin() should allow "TRUE" option
bug fix: =mp/24972 not working after switch to https

new feature: adds SHOW SMILES/bio  and {*}.find("SMILES/bio") options:
    /bio              Jmol bioSMILES with header and chain comments
	/bionocomments    no chain comments (but still one header with comments)
	/bioatomcomments  full atom comments
	/biocovalent      indicates covalent S-S crosslinking using ":" notation
	/biohbond         indicates hydrogen bonds using ":" notation
	/biounmatched     allows unmatched rings

new feature: SMILES/nonaromatic same as SMILES/noaromatic
	
JmolVersion="14.5.4_2016.04.03"

bug fix: draw SCALE x.x symop has no effect; good to be able to scale down the arrow
bug fix: draw symop can fail for second call

JmolVersion="14.5.4_2016.03.31"

bug fix: load $xxxx broken; http://cactus --> https://cactus 
bug fix: _geom_bond_distance starting with "." halts CIF file reading

JmolVersion="14.5.4_2016.03.29"

code: ru.po updated (Angel Herraez)

bug fix: SMILES generator still broken in 14.4.4_2016.03.25
bug fix: smiles1.find("SMILES",smiles2) broken in 14.4.3_2016.03.06  

new feature: Polyhedra command allows for min and max radius
  -- polyhedra 2.8 3.0 @3 

bug fix: unitcell PRIMITIVE for rhombohedral groups not implemented
bug fix: unitcell("primitive","R")  not implemented
 
bug fix: WRITE IMAGE with negative width or height should throw a Jmol ScriptException
bug fix: draw ... [x y] does not position properly with antialias true
bug fix: allow AXES TYPE "" or non-recognized to be same as "abc"
bug fix: AXES TYPE "ab" should also be allowed when offset or center is set
bug fix: labels should not change size when creating images of 
         different size than screen when angstromsPerInch != 0.
bug fix: if...BREAK|CONTINUE in unbracketed context does not properly 
         place implicit END IF when TRUE clause is on next line
         AND next statement after that is another IF command:  
            if (xxxx)
              break;
            if (yyyy)
              zzzz;
          becomes
            if (xxxx) {
              break;
              if (yyyy) {
                zzzz;
              }
            }
          instead of
            if (xxxx) {
              break;
            }
            if (yyyy) {
              zzzz;
            }
               

JmolVersion="14.5.4_2016.03.25"

new feature: moveto AXIS  coupled with <1|2|3|4>
 -- indicates direction of axis ("-a" indicates "a pointing away")
 -- and clockwise position 1(top left), 2(top right), 3(bottom right), and 4(bottom left)
 -- defaults a == a1, b == -b1, c == c4 
 -- slight modification of what was released in 03.21

bug fix: JavaScript Jmol.evaluateVar() does not properly escape JSON strings
bug fix: SMILES generator broken in 03.23

JmolVersion="14.5.4_2016.03.24b"


bug fix: axes/unitcell/boundbox appear 10x too thick after recalling from state
 -- broken in JmolVersion="14.5.4_2016.03.21"
 
bug fix: polyhedra fix for overlapping face triangles
bug fix: magnetic spin vector trail disappears when not vibrating
bug fix: magnetic spin vector trail does not reset if set vectorscale  where  is less than current

JmolVersion="14.5.4_2016.03.24"

bug fix: NCI requires stereochemistry to rings to be prior to a branch:
         C\1(/C)=C\C=C.C/1=C not C(/C)\1=C\C=C.C/1=C
         
new feature: x.bin() method allows return of an array listing both the bound and the count
 -- example:
 
 		$ print {*}.bonds.length.all.bin(1,2,0.1,TRUE).format("json")
		[ [ 1.0,10.0 ],[ 1.1,0.0 ],[ 1.2,0.0 ],[ 1.3,3.0 ],[ 1.4,2.0 ],[ 1.5,1.0 ],[ 1.6,0.0 ],[ 1.7,0.0 ],[ 1.8,0.0 ],[ 1.9000001,0.0 ] ]


new feature: load =magndata/1.1.37
 -- links to the MAGNDATA database at http://webbdcrista1.ehu.es/magndata
 --     "magndata", "http://webbdcrista1.ehu.es/magndata/mcif/%FILE.mcif",
          
new feature: set vectorTrail n
 -- adds a trail onto a modulating vector (as for an incommensurate magnetic spin)
 -- n trails are made, typically in a fan-like pattern that trails the spinning vector
      load =magndata/1.1.37
      set vectortrace 20
      set vibrationperiod 2
      vibration on
      
bug fix: saving a state after using LOAD "" (empty quotes) 
         after pasting data directly into the application creates an unreadable state
 
new feature: unitcell ON  adds #nnn (international table number) to cell description if found 

bug fix: {*}.find("CHEMICAL","NAMES") only reports one name.

code: more efficient identifying space group

JmolVersion="14.5.4_2016.03.22"

bug fix: select picking invertstereo  broken

bug fix: unitcell PRIMITIVE does not work as reported 3/21
bug fix: unitcell("conventional","F") does not work
bug fix: crystal systems with translational symmetry may have duplication of symmetry operators


JmolVersion="14.5.4_2016.03.21"

new feature: axes OFFSET x.x
 -- applies offset of x.x in fractional coordinates in each axis direction
 -- AXES OFFSET -0.1   same as   AXES CENTER {-0.1 -0.1 -0.1/1}
 
new feature: expanded unitcell() function
 -- adds additional types: "A", "B", "C", "I", "F"
 -- default is the lattice type of the model's space group
 -- not just cubic; "BCC" is converted to "I"
 -- for example:
 
	 load =ams/silicon 15 packed   // Cmca
	 draw id "uc" diameter 0.1 unitcell mesh nofill color black
	 unitcell @{unitcell("primitive")}
	 color unitcell red
	 unitcell 0.1
	 axes unitcell
	 axes on

new feature: expanded UNITCELL command to include PRIMITIVE option for any space group

bug fix: SMILES matcher not allowing azulene to be aromatic

bug fix: OpenSMILES matcher not allowing non-chemist Hueckel 4+2 interpretation

bug fix: SMILES generator not adding "-" for biphenyl Ar-Ar bond

bug fix: set picking invertSTEREO  does not work on open-ring systems

bug fix: SMARTS [R] matching all atoms
  
bug fix: dashed lines not visible in measurements, unit cells, and axes 

bug fix: axes 0.01  produces thick 20-pixel-wide lines
 -- solution was to drop that to 0.001 for this effect
 
JmolVersion="14.5.4_2016.03.14"

bug fix: Polyhedra with verticies that are also centers of polyhedra for atoms that were visible
         but are no longer visible do not update screen positions properly

JmolVersion="14.5.4_2016.03.13"

new feature: polyhedra POINTS x.y
  -- adds variable size spherical points at corners of polyhedra
  -- color is that of element, or black
  
new feature: show SMILES/xxxx
 -- xxxx = open, strict, openstrict, mmff94
 
new feature: show chemical NAME
 -- singular "name" gives just the first name; "names" gives full list
 
new feature: full implementation of OpenSMILES aromatic model

TODO: DOCUMENT-->>>

new feature: {*}.find("SMILES/open")
 -- generates OpenSMILES string for selected atoms
 -- applies OpenSMILES aromaticity rules for 5-, 6-, and 7-membered rings
 -- not chemical -- allows exocyclic c=C bonds and [nH] in 6-membered rings 
 -- also adds atom class if property_atomClass is nonzero
 -- for example:
 
	$ load $2-butanol
	$ @2.property_atomclass=2
	$ @3.property_atomclass=3
	$ @5.property_atomclass=5
	$ print {*}.find("smiles/open")
	
		C[C@H:2]([OH:5])[CH2:3]C

new feature: /open option for smiles.find("SMILES", pattern)
 -- applies OpenSMILES model of aromaticity
 -- finds aromaticity-normalized pattern "in" aromaticity-normalized smiles
 -- can be after SMILES or as beginning of pattern
	$ print "OC1=CC(N)=CC=C1".find("SMILES","NC1=CC(O)=CC=C1")
	0
	$ print "OC1=CC(N)=CC=C1".find("SMILES/open","NC1=CC(O)=CC=C1")
	8
	$ print "OC1=CC(N)=CC=C1".find("SMILES","/open/NC1=CC(O)=CC=C1")
	8

new feature: compare("smile1","/open/smiles2")
 -- applies OpenSMILES model of aromaticity
 -- checks for match of atom class if present (default value 0 matches "not present")
 -- does aromaticity normalization on both strings
	$ print compare("OC1=CC(N)=CC=C1", "NC1=CC(O)=CC=C1", "isomer")
	CONSTITUTIONAL ISOMERS
	$ print compare("OC1=CC(N)=CC=C1", "/open/NC1=CC(O)=CC=C1", "isomer")
	IDENTICAL

new feature: {*}.find("SMILES/strict")
 -- generates OpenSMILES string for selected atoms
 -- applies standard Hueckel aromaticity rules for 5-, 6-, and 7-membered rings
 -- does not allow exocyclic c=C bonds or [nH] in 6-membered rings 
 -- does not create atom classes
 -- also for compare() and search()
		
new feature: {*}.find("SMILES/open strict")
 -- same as just /strict, but also generates atom classes if present as property_atomClass
 -- also for compare() and search()

new feature: {*}.find("SMILES/mmff94")
 -- applies a very STRICT, chemically meaningful Hueckel 4+2 Rule
 -- adds allowance for only a 1-electron contribution to 6-membered rings (three double bonds)
 -- also for compare() and search()

new feature: optional processing of OpenSMILES [CH2:002] ":" atom class.
 -- positive integer value only
 -- checks the atom property property_atomclass
 -- for SMARTS, [:0] means "without an atomclass"
 -- for SMARTS, [!:0] means "any non-zero atomclass"
 -- for SMARTS, same as [$(select property_atomclass=n)]
 -- only enabled with Jmol SMILES directive "/open/"; otherwise ignored
 -- for example:

	$ load $2-butanol
	$ show smiles

  		C[C@H](O)CC
	
	$ @2.property_atomclass=2
	$ @3.property_atomclass=3
	$ @5.property_atomclass=5

	$ select *
		15 atoms selected
	$ select on search("/open/[:3]")
		1 atoms selected
	$ select on search("/open/[!:3]")
		14 atoms selected
	$ select on search("/open/[:0]")
		12 atoms selected
	$ select on search("/open/[!:0]")
		3 atoms selected
	$ select on search("/open/[!:3 & !:0]")
		2 atoms selected

new feature: UNITCELL TRANSFORM @m4x4
  -- direct 4x4 matrix transformation of a unit cell

new feature: calculate symmetry  polyhedra {atomset}
  -- selectively calculates polyhedra.
  -- for example: calculate symmetry polyhedra {polyhedra(4)}
  
new feature: calculate symmetry  polyhedra id
  -- selectively calculates polyhedra for a given ID.
  -- for example: calculate symmetry polyhedra "poly1"
  

new feature: atom set can be specified in polyhedra() function:
  -- print {2.1}.polyhedra(3)
  -- print {2.1}.polyhedra("....polySMILES string...")

       
new feature: WRITE MOL67 xxx.mol
 -- writes MOL format with bonds of type 6 or 7 (aromatic single/double; rarely significant)


bug fix: SMILES should not be returned with comments for internal processing or sending to PubChem or others
  
bug fix: SHOW chemical SMILES can be off because it was using the name, not the SMILES string
 -- sometimes - e.g. "menthol" - the name has no chirality, but the structure does (of course). 

bug fix: Jmol 14.3.16_2015.09.15 broke first-match-only flag in SMILES mapping
 
bug fix: POLYHEDRA when selection halos are on, all have edges

bug fix: moving of polyhedron will fail if corner of polyhedron is an atom

bug fix: macro functions cannot be used later in same script as a MACRO command
 -- presence of MACRO command now removes check for unknown command name exception

bug fix: Tripos MOL2 reader does not read element symbols properly

bug fix: default write MOL file should not indicate aromatic bond types 6 and 7
 -- corrects the fact that these bonds are reserved for queries
 -- only affects cases where that bond type has been set (after calculate aromatic or loading of ligand CIF files
 

JmolVersion="14.5.4_2016.03.08"

bug fix: OpenSMILES even-atom cumulene stereochemistry not implemented 
 -- examples (reporting "DIASTEREOMERS")
   print compare("F/C=C=C=C/F","F/C=C=C=C\\F","isomer")   
   load $F-C=C=C=C-F;print compare("F/C=C=C=C\\F",{1.1},"isomer")

bug fix: SMILES generator unnecessarily over-expressing double-bond / and \. 
   
new feature: (JSmol) standard InChI generator (see inchi.htm, inchi/*) 
 -- JavaScript library for generation of InChIs
 -- runs completely in JavaScript
 -- equivalent to SHOW CHEMICAL stdinchi
 -- about 900 KB
 

JmolVersion="14.5.3_2016.03.06"

bug fix: Inconsistent use of "DIASTEREOMERS" (preferred) and "DIASTERIOMERS" (incorrect)

JmolVersion="14.5.3_2016.03.05"

bug fix: SMILES TB trigonal bipyramidal stereochemistry not functional
bug fix: SMILES [@TBn] not recognizing n > 2

bug fix: SMILES OH octahedral stereochemistry error
bug fix: SMILES [@OHn] not recognizing n > 2

bug fix: SMILES SP square planar stereochemistry will report ENANTIOMERS rather than DIASTEREOMERS

JmolVersion="14.5.3_2016.03.03b"

bug fix: CIF reader _atom_site_cartn_x incompatible with _geom_bond
 -- this fix now allows Jmol to read very simple CIF files that are equivalent to unlimited-atom MOL files
 -- _ccdc_geom_bond_type is not required, defaulting to S
 -- _ccdc_geom_bond_types include S, D, T, Q (quadruple), and A (aromatic) 
	 
	data_icosahedron
	loop_
	_atom_site_label
	_atom_site_Cartn_x
	_atom_site_Cartn_y
	_atom_site_Cartn_z
	C01  0.0000000000  0.0000000000  9.5105651630
	C02  8.5065080835  0.0000000000  4.2532540418
	C03  2.6286555606  8.0901699437  4.2532540418
	C04 -6.8819096024  5.0000000000  4.2532540418
	C05 -6.8819096024 -5.0000000000  4.2532540418
	C06  2.6286555606 -8.0901699437  4.2532540418
	C07  6.8819096024  5.0000000000 -4.2532540418
	C08 -2.6286555606  8.0901699437 -4.2532540418
	C09 -8.5065080835  0.0000000000 -4.2532540418
	C10 -2.6286555606 -8.0901699437 -4.2532540418
	C11  6.8819096024 -5.0000000000 -4.2532540418
	C12  0.0000000000  0.0000000000 -9.5105651630
	loop_
	_geom_bond_atom_site_label_1
	_geom_bond_atom_site_label_2
	_ccdc_geom_bond_type
	C01 C02 S
	C01 C03 S
	C01 C04 S
	C01 C05 S
	C01 C06 S
	C02 C03 S
	C03 C04 S
	C04 C05 S
	C05 C06 S
	...etc... 


JmolVersion="14.5.3_2016.03.03"

bug fix: after SET echo ALL, background echo ... changes text color, not background color  

JmolVersion="14.5.3_2016.03.02"

bug fix: JavaScript reference to j2s for working gif does not recognize Info.j2sPath

JmolVersion="14.5.3_2016.02.28"

bug fix: cyclic peptides do not complete loop for cartoons, backbone, etc. (1SFI)

JmolVersion="14.5.3_2016.02.27"

bug fix: [function:"yyy",Function:"zzz"] fails to retain key capitalization after first entry for special names
bug fix: (JavaScript only) polyhedra not saved in state
bug fix: (Applet) broken image in coverImage
bug fix: polyhedra DELETE can crash Jmol if polyhedra are not colored 

JmolVersion="14.5.3_2016.02.17"

bug fix: slab/depth SET do not behave properly
bug fix: select VISIBLE is not properly set based on slab/depth SET 

bug fix: _GEOM_BOND reading in CIF files nonfunctional.
 -- broken in 13.3.4_dev_2013.08.21
 -- result is that between 8/21/2013 and 2/15/2016 the CIF reader
    would not recognize _GEOM_BOND and so also not create whole molecules 
    as it was designed to do when those are present.
 -- no impact on states created within this version range 
 -- no impact on mmCIF reader
 -- only impact is upon Materials Studio-generated files such as
    http://www.rsc.org/suppdata/cc/c2/c2cc34714h/c2cc34714h.txt
    (supplemental mat. for http://pubs.rsc.org/en/Content/ArticleLanding/2012/CC/c2cc34714h)
    See Jmol list discussion: https://sourceforge.net/p/jmol/mailman/message/31308577/
  

JmolVersion="14.5.2_2016.02.14"

FEATURE CHANGE: JSmol default for Info._disableInitialConsole changed to true
 -- no longer necessary with JSmol_spinner.gif 

new feature: j2s/img/JSmol_spinner.gif implemented (Angel Herraez)
 -- as default for Info._appletLoadingImage
 -- use Info._appletLoadingImage = "none" to disable

new feature: j2s/img/cursor_wait.gif animation implemented

bug fix: STRUCTURE statement (utilized in RESTORE STRUCTURE) broken
 -- broken in Jmol 14.4.0_2015.10.30
 
bug fix: EBI assembly CIF files that are multi-model files will be by chain, not by model.
  -- result was that each chain became a new model
  -- for example: see http://www.ebi.ac.uk/pdbe/static/entry/download/2lev-assembly-1.cif.gz

bug fix: XmlMolProReader does not recognize FILTER "NOMO"

bug fix: JSmol has never shown cursors

JmolVersion="14.5.2_2016.02.09"

new feature: invertselected ATOMS {ring atoms to invert}
 -- inverts ring stereochemistry
 -- requires prior selection of all atoms to be involved in the inversion

TODO: document  <<<<<<
 
bug fix: SMARTS pattern [ALA.*] not working without biological polymer type indication
bug fix: SMARTS pattern [r500] not working outside of MINIMIZE


JmolVersion="14.5.2_2016.02.06"

new feature: isosurface BACKSHELL
  -- displays just the back side of an isosurface
  -- works by reversing the normals, then showing front only
  -- similar to isosurface slab 50, but better if object is far from spherical
  -- works with PMESH, MO, CONTACT as well
  -- reverted using isosurface NOBACKSHELL

new feature: isosurface "*xxxx" 
  -- accesses EBI test site for ED maps at http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file.ccp4
  -- uses default sigma 1.0
  
new feature: isosurface "**xxxx" 
  -- accesses EBI test site for ED difference maps at http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file_diff.ccp4  
  -- uses default sigma 3.0

bug fix: JSmol not identifying .ccp4 file extension as binary
bug fix: isosurface "==xxxx" not setting default omap cutoff and sigma 3.0
bug fix: small MRC map files mistaken for DELPHI files.
bug fix: MRC/CCP4 surface/map files still sometimes inside out. 

JmolVersion="14.5.2_2016.02.05"


bug fix: MRC/CCP4 surface/map files sometimes inside out. 

bug fix: LOAD $benzene; SHOW smiles should give c1ccccc1 not c1=cc=cc=c1

JmolVersion="14.5.2_2016.02.04"

FEATURE NOTE: Prior to this version if the MO command was issued after use of 
              rotateSelected, the orbitals were calculated improperly, because the
              basis functions always must be applied for the original file coordinate
              frame, not the rotated frame. In addition, if MOs were calculated prior to
              use of rotateSelected or translateSelected, then they would not "track"
              with the modified atom positions. So MOs and rotate/translateSelected
              were completely incompatible. Jmol 14.4.2 fixes this issue. It should be 
              possible now to produce correct MOs before or after use of rotateSelected.
              Note that ALL atoms in a specified model must be moved in order for this
              tracking of MOs to take place. This functionality was introduced in 
              14.4.1_2016.01.28, but that version (never released) does not properly 
              check to see that ALL the atoms in a model have been involved in the rotation.  
              
FEATURE NOTE: If rotateSelected or translateSelected is used to move all atoms in a
              model, and after that the state is saved, then Jmol 14.4.2 
              will save a state that is not readable in 14.4.1. This is necessary
              because of the added FRAME ORIENTATION command, which is used in the states
              to indicate the relationship of a model to its file coordinates. The MO
              reader requires this so that it can rotate the coordinates back to their 
              original position prior to doing its calculation. 
              
bug fix: JVXL files saved from models that involve full model rotate/translateSelected
         do not get restored properly.

bug fix: molecular orbitals do not move with atoms 
         when full molecule is moved using rotateSelected or translateSelected
         
code: better loading of surfaces -- no longer requires javajs.util.XmlUtil
code: removal of unnecessary api interfaces MinimizerInterface, VolumeDataInterface, QuantumPlaneCalculationInterface, MOCalculationInterface, MepCalculationInterface

JmolVersion="14.5.2_2016.02.03"

bug fix: IboView/Molpro XML reader validated for multi-molecule XML files
 -- to concatenate Molpro XML files, you must supply a new root tag as well as
    remove all  directives.
 -- DOS CMD file example:

      catxml.bat ibo*.xml test.xml

    where catxml.bat is:
      
		copy /b %1 _temp
		echo ^ > %2
		type _temp | find /V "> %2
		echo ^ >> %2



JmolVersion="14.5.1_2016.02.01"

bug fix: IboView/Molpro XML Reader validated for reading orbitals

code: new abstract reader XmlMOReader


JmolVersion="14.5.1_2016.01.28"

bug fix: MOs need to move with atoms and be restored from state properly 
  after use of ROTATESELECTED. 
  -- note that fix for 14.4 does not include state saving, as that would break previous subversions
       
code: JmolZipUtilities interface removed
code: JmolBinary reduced to just all Spartan-related methods

JmolVersion="14.5.1_2016.01.25"

bug fix: Spartan file reader not working properly after MacSpartan -> Spartan14 upgrade

JmolVersion="14.5.1_2016.01.16"

bug fix: mol, xyz readers not reporting model name like other readers

new feature: variable _versionDate
  $ show _versionDate
  _versionDate = "14.4.1_2016.01.16  2016-01-15 17:25"
  
  
new feature: x = pointgroup([array of points],center)
  -- center is optional, defaulting to average of the points
  -- returns a map:
    pts = [ {-1.0132 0.585 0.0012999999},{1.0132 0.585 0.0012999999},{0.0 -1.17 0.0012999999} ]  
    print pointgroup(pts,{0 0 0})
	{
	  "C2"  :
	  [
	    {0.8660127 -0.50001717 0.0022222984}
	    {-0.8660127 -0.50001717 0.0022222984}
	    {0.0 0.99999756 0.002222217}
	  ]
	  "C3"  :
	  [
	    {0.0019245904 -0.0011111083 -0.99999756}
	  ]
	  "Cs"  :
	  [
	    {0.0019245904 -0.0011111085 -0.99999756}
	    {-0.49998164 -0.866036 0.0}
	    {0.49998164 -0.866036 0.0}
	    {1.0 0.0 0.0}
	  ]
	  "S3"  :
	  [
	    {0.0019245904 -0.0011111083 -0.99999756}
	  ]
	  "center"  :  {0.0 0.0 0.0}
	  "detail"  :  "# 3 atoms;"
	  "distanceTolerance"  :  0.2
	  "linearTolerance"  :  8.0
	  "nAtoms"  :  3
	  "nC2"  :  3
	  "nC3"  :  1
	  "nCi"  :  0
	  "nCn"  :  4
	  "nCs"  :  4
	  "nS3"  :  1
	  "nSn"  :  1
	  "nTotal"  :  12
	  "name"  :  "D3h"
	  "principalAxis"  :  {0.0019245904 -0.0011111083 -0.99999756}
	  "principalPlane"  :  {0.0019245904 -0.0011111085 -0.99999756}
	} 

code: polyhedra, pointgroup, load =ams/, load "xxxx#_DOCACHE_" features from 14.5 added to 14.4

JmolVersion="14.5.1_2016.01.15"

bug fix: d = [start:1,end:10] fails due to reserved word "end" (also "select", "case", "default", "if", "for", etc.)
bug fix: color "chain" (with quotes) should work, allowing for x="chain"; color @x
bug fix: inappropriate use of REGEX in ["a","b"].find("x") 
bug fix: ".xxx" should be allowed as a math continuation:

   print script("show spacegroup all")
   			.split()
			.find("Hall symbol:")
			
JmolVersion="14.5.1_2016.01.09"

code: (JavaScript) refactoring to allow faster, cleaner load for biomodels

JmolVersion="14.5.1_2016.01.08"

bug fix: labels, echos, and measurements improperly shaded when z-shaded with nonblack background
bug fix: rendering error when set zshade followed by set antialiasdisplay

code: (JavaScript) refactoring to reduce extraneous file download

JmolVersion="14.5.1_2016.01.06"

bug fix: labels, echos, and measurements disappear when z-shaded

JmolVersion="14.5.1_2016.01.04"

bug fix: (JvxlReader) Jmol 12 mapped isosurface jvxl files do not show mapped color
bug fix: setting default label properties using select none;.... fails
bug fix: setting cartoons on for phosphorus-only polymers fails
bug fix: undocumented model-based draw [array of points] broken
 -- points only
 -- selects from visible frames (frame *, for example)
 -- load cyclohexane_movie.xyz; frame *; draw @{{C5}.split().sub({1,0,0})
  
JmolVersion="14.5.1_2016.01.01"

bug fix: file dropping of JVXL files does not work
bug fix: Mesh capper not working for multiple cuts due to unclosed surface cut
 -- for example: load maleic.cif 1;select on atomindex=6;lcaocartoon scale 1.0 CAP unitcell "cpk"
bug fix: Escape.e(P4) returns value for Escape.e(T3) -- only affects SurfaceTool
bug fix: (JSmol only) Java return (int) fValue(x); will return  "NaN" instead of "0" for x NaN
 -- JSmol script 0 + "test" will print "NaN" rather than "0"
 
JmolVersion="14.5.1_2015.12.23b"

bug fix: JavaScript error reporting uses alert() instead of just setting the error message
bug fix: PyMOL 1.8 PSE files cannot be read because of missing settings

code: more efficient loading of PyMOL .pse session files

JmolVersion="14.5.1_2015.12.23"

bug fix: PyMOL 1.8 PSE files cannot be read
bug fix: dots broken when colored none
bug fix: color cartoons red blue not saved in state
bug fix: color cartoons red blue flipping red/blue in sheets

JmolVersion="14.5.1_2015.12.21"

bug fix: color [0xffffff] should not be case-sensitive -- [0Xffffff] should be OK
bug fix: set spin fps ... fails

JmolVersion="14.5.1_2015.12.20"

code: (JavaScript) adding use of array.slice and implementing Java byte[] as JavaScript Int8Array()

bug fix: array handling for labels very inefficient
bug fix: y = javascript("x") only creates string equivalent of x, not actual numerical/object values
bug fix: y = javascript("x") draws "x" from wrapped anonymous function using eval() instead of global context using window.eval()

JmolVersion="14.5.1_2015.12.14"

bug fix: JSmol (JSmolCore.js) check for MS Edge browser, which does not support dataURI

JmolVersion="14.5.0_2015.12.13"

new feature: "#_DOCACHE_" suffix for file name loading tells Jmol to insert full structure into any state
 -- allows SPT files to preserve the original file (as in all PNGJ files) 
 -- for example:
    load caffeine.xyz#_DOCACHE_
	show state
		...
		function _setFileState() {
		    DATA "file_caffeine.xyz#_DOCACHE_"
		24
		
		N     1.31200   -1.04790    0.00250
		C     2.24650   -2.17620    0.00310
		...
		H    -4.16720   -0.83950    0.51680
		    END "file_caffeine.xyz#_DOCACHE_";
		...
		  load /*file*/"c:/jmol-dev/bobtest/caffeine.xyz#_DOCACHE_";
		}
		...
 -- repeated calls to caffeine.xyz#_DOCACHE_ use the cached version, not the actual file
 -- calls to caffeine.xyz still ignore the cache. 
 -- also addded to Jmol 14.4.0, but left undocumented
  
TODO: document ---->>>

new feature: load =ams loads data from American Mineralogist Crystal Structure Database
 -- many thanks given to Robert Downs and Alex Pires for enabling this functionality.
 -- fetches data from http://rruff.geo.arizona.edu/AMS 
 -- employs "#_DOCACHE_" flag because some of these data files may change after database maintenance
 -- three modes. Only the first, using _database_code_amcsd, is guaranteed to be stable over time,
   =ams/  (seven-digit database code) loads that specific structure based on _database_code_amcsd
      load =ams/0014673
      show _modelfile
	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?amcsd=14673&action=showcif#_DOCACHE_"
   =ams/  (less than seven-digit id) loads that specific structure based on sequential id code
      load =ams/10000
      show _modelfile
	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?id=10000&action=showcif#_DOCACHE_"  
   =ams/ loads all structures for a specified named mineral. 
      load =ams/diamond
      show _modelfile
	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?mineral=diamond&action=showcif#_DOCACHE_"
  -- thus, all of the following are equivalent as of 12/13/2015:
  
	    load =ams/0008986
	    load =ams/10000
	    load =ams/srilankite 4
    
     However, it is possible that new structures will be added to srilankite, making
     this not the fourth structure, and the five-digit code 10000 can change after  
     database maintenance.
 -- also addded to Jmol 14.4.0, but left undocumented
            
new feature: drawing of spheres in 2D window
  -- as percent position or absolute, as for ECHO
  -- diameter is % if position is %; otherwise it is pixels
  -- examples:
  
    draw d1 diameter 5 [90 90 %] color blue  // percent position; 5% diameter
	draw d2 diameter 15 [90 90] color blue   // absolute position; 15-pixel diameter
	draw dO diameter 2 [80 90 %] color @{ {_O}.color }
	set echo eO [95 90 %]; echo "O"
	
  -- can be used in the context of an element key:
  
	background white
	load $caffeine
	  function createElementKey() {
		var y = 90
		for (var e in {*}.element.pivot){
			var c = {element=@e}.color
			draw ID @{"d_"+ e} diameter 2 [90 @y %] color @c
			set echo ID @{"e_" + e} [91 @{y-1} %]
			echo @e
			font echo 24 bold sansserif
			color echo black
			y -= 5
		}
	  }
	createElementKey

new feature: additional predefined sets for periodic table:
    "@nonmetal _H,_He,_B,_C,_N,_O,_F,_Ne,_Si,_P,_S,_Cl,_Ar,_As,_Se,_Br,_Kr,_Te,_I,_Xe,_At,_Rn",
    "@metal !nonmetal",
    "@alkaliMetal _Li,_Na,_K,_Rb,_Cs,_Fr",
    "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra",
    "@nobleGas _He,_Ne,_Ar,_Kr,_Xe,_Rn",
    "@metalloid _B,_Si,_Ge,_As,_Sb,_Te",
    "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112",
    "@lanthanide elemno>=57&elemno<=71",
    "@actinide elemno>=89&elemno<=103",
    
  -- useful for removal of metal-metal bonds in inorganic systems
     and for specifying polyhedra:
    
    connect {metal} {metal} delete
    polyhedra bonds {metal}  
     
bug fix: zoomTo not setting time to 0 in the case of scriptWait
bug fix: set selectAllModels should restrict action of display/hide as well
bug fix: set selectAllModels not working appropriately
bug fix: set selectAllModels should not be saved in state
bug fix: JmolData.jar does not update atom screen positions upon REFRESH or select {visible}
bug fix: JmolData.jar -p flag does not work properly
bug fix: model 0 issued when more than one PDB file is open does not execute model *
bug fix: PDB reader broken for filter "biomolecule n"
bug fix: mmCIF reader can fail to pop up menu when biomolecule is present.
bug fix: JSON generation from arrays broken in HTML5 version due to browser changes in Array.toString().
bug fix: DCD reader broken.
bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array
 -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME
bug fix: {atomset}.sxyz gives incorrect screen coordinate when antialiased
bug fix: point(pt, true|false) also modifies pt itself 
bug fix: point({atomset}, true) gives incorrect screen coordinate when antialiased.
bug fix: point({atomset}, false) gives incorrect Cartesian coordinate when antialiased.
bug fix: popup menu item "Surfaces...Off" resets atom selection
bug fix: files with names containing "[]" cannot be loaded.
bug fix: {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555
bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms
bug fix: getproperty SHAPEINFO fails if CGO is present
bug fix: CGO from state deletes DRAW objects
bug fix: CGO not properly isolated to current model; "fixed" not implemented
bug fix: draw ARC|ARROW|CURVE|LINE|VERTICES @x where x is an array does not work
bug fix: loading mmCIF files where label_asym_id != auth_asym_id will apply biomolecule symmetry to wrong chain
bug fix: echo "" fails in applet
bug fix: 3x3 and 4x4 matrix multiplication of points changes the point itself.

code: BSUtil.cardinalityOf cleanup.
code: synchronizing Jmol-NBO branch
 
JmolVersion="14.5.0_2015.11.06"

bug fix: restoring bonds to a model having fewer bonds than the model for which they were saved throws an exception
bug fix: CIF reader does not read incommensurately modulated magCIF files
bug fix: WRITE xxx.ZIP  crashes Jmol
bug fix: POLYHEDRA ... {xxx} TO {yyy} not working

JmolVersion="14.5.0_2015.11.03"
	 
bug fix: FOR without {} but with ";" after sole statement 
         followed immediately by second FOR improperly loops
  for (var i from [1,5])
    print i;
  for (var i from [1,5])
    print i
    
bug fix: OXT missing from BACKBONE selection
bug fix: (JSmol) CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id

new feature: polyhedra ID xxx SCALE x.x
  -- ID named polyhedra only
  -- x.x is the scaling factor, initially 1 
  -- x.x > 0 does normal scaling
  -- x.x < 0 does "explode" from {0 0 0} (for higher-order Brillouin zones, for instance)

bug fix: slabbing should reset area and volume of isosurface
bug fix: meshSlicer may fail to add edge to sliced pmesh
 
TODO: document <<<<<-------

FEATURE CHANGE: (Application only for now) PDB default for =xxxx 
  -- changed to 
    "pdb", "http://ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/%c2%c3/pdb%file.ent.gz"
  -- will be complemented with file.ent for non-binary transfer, but that is not implemented yet at RCSB
  -- mmCIF counterpart not implemented yet.
  -- not HTML5 because for that we need the option to remove .gz

new feature: set testflag3 TRUE  gives random triangle effect to polyhedra

TODO: document ---->>>>>

new feature: POLYHEDRON ID "xxx" OFFSET {3 3 3}
 -- allows cartesian offset of named polyhedra
 
bug fix: bug fix: empty format crashes Jmol --  print "testing".format("")
bug fix: polyhedron volume will be incorrect if there is a 
         face triangle that has no edges visible (requires a six or more sided face)  

bug fix: nested if...{...if... } else {...} gives compiler syntax error:

  if (i=1) {
    print "i=1"
    if (j=1)
      print "j != 1" 
  } else {                // } closes if (j=1) instead of if (i=1) {
    print "i != 1"
  }

JmolVersion="14.5.0_2015.10.29"

bug fix: after CALCULATE HYDROGENS TRUE and then deleting hydrogens, hydrogens are not added to aromatic rings in PDB models
bug fix: reading saved state after adding hydrogen atoms results in infinite loop

JmolVersion="14.5.0_2015.10.28"

bug fix: XODYDATA file reader does not read bond info or formal charge // changes in 14.4.0_2015.10.28

FEATURE CHANGE: default RCSB/PDB load format (=xxxx) changed to http://ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/%c2%c3/pdb%file.ent.gz

new feature: (JSmol) adding access-allow-origin status for cdn.rcsb.org and ftp.wwpdb.org.
 
JmolVersion="14.5.0_2015.10.27"

code: unnecessary FRAME commands removed from state
bug fix: polyhedra not read from state (14.5 only)

JmolVersion="14.5.0_2015.10.24"

bug fix: [{1,2,3},{4,5,6}].average fails
bug fix: [{1,2,3},{4,5,6}].pivot should return "NaN"

JmolVersion="14.5.0_2015.10.22"

bug fix: CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id
bug fix: WRITE .... AS does not properly allow for unquoted file name

JmolVersion="14.5.0_2015.10.21"

bug fix:  write c:/temp..... AS PNGJ  does not work without quotes that way; it should

JmolVersion="14.5.0_2015.10.20"

new feature: polyhedra with arbitrary center and vertices, without atom center
  -- for example:
    polyhedra ID "myid" {0 0 0} TO [{1 0 0}, {0 1 0}, {0 0 1}, {-1 -1 -1}]

TODO: document <<<<<-------

bug fix: set platformSpeed 1 for pmesh fails
bug fix: polyhedron EDGES fails
bug fix: @{ {"hash":{0.1 0.1 0.1},...} } fails (attempts to turn "," into "OR")
  -- solution is to not allow "," for OR within associative arrays
  
JmolVersion="14.5.0_2015.10.18"

new feature: x = within(0.01, [array of points])
 -- cleans points of duplicates with a tolerance of 0.001 Angstroms
 -- allows multiple pmesh faces to be turned into polyhedra using:
 
   faces = []
	for (var i = 1; i <= nPlanes; i++) {
	  var f = ("$f" + i).getProperty("face")
	  faces.push(f)
	}
   polyhedra @1 to @{within(0.01, faces.join())} color white
   
TODO: document ------>>>>>

new feature: $pmeshID.getProperty("faces")
 -- returns an array of points
 -- cleaned so that it is one point per linear edge, regardless of how
    it has been slabbed

new feature: resolution 0.001 with PMESH and ISOSURFACE planes
 -- allows for minimum number of triangles.

TODO: document <<<<<-------


bug fix: Polyhedra can have missing triangle for hexagonal faces
bug fix: calculate symmetry can break Jmol if unit cell has been changed
bug fix: DRAW POLYGON front/back nature of winding was reversed.

JmolVersion="14.5.0_2015.10.17"

bug fix: if (...) \n { .... not working (where brace is on next line)
bug fix: CIF reader will read empty second model for IUCr files with terminal data_global block
bug fix: polyhedra bonds unitcell can cause error in HTML5
bug fix: nucleic backbone should include O atoms on P and C
bug fix: nucleic spine should not include C2'
bug fix: pmesh/isosurface RESOLUTION 0.0001 with plane can cause loss of some or all of the plane
         -- resolution 0.0001 creates just a minimum of triangles to construct the plane.	
bug fix: set testflag4;isosurface ... ; does not generate normals	
bug fix: (Application) set refreshing false shows Jmol console in model frame (Java bug??)
 
JmolVersion="14.5.0_2015.10.14"

NOTE: GoDaddy's inadvertent forcing of revocation of the secure certificate for Jmol 
      has disabled ALL applets created since Oct 15, 2014. This is a mandatory upgrade.
      

bug fix: SHOW PROPERTY IDENTIFY crashes Jmol.  

JmolVersion="14.5.0_2015.10.13"
JmolVersion="14.4.0_2015.10.13"
JmolVersion="14.3.16_2015.10.13"

code: compatibility checks with new brace-less if/for/while

note: Use of multi-line IF/END IF, FOR/END FOR, WHILE/END WHILE
      is not compatible with newer JavaScript-like single-line non-brace flow:
      
      Java/JavaScript style:
            
        function test () {
		 for (var i = 0; i < 5; i++)
		  if (i < 2) 
		    print -i 
		}
   
      VB style:
      
        function test () 
		 for (var i = 0; i < 5; i++)
		  if (i < 2) 
		    print -i
		  end if 
		 end for
		end function
   
      The compiler is set to start with assumption that Java/JavaScript
      is the active mode but switches to VB style if END XXX is found
      
Note: Use of single-line   if (...) ..... else ..... endif   is allowed
      in either mode. In this syntax, the final "endif" is optional

Note: END DATA is not affected

JmolVersion="14.3.16_2015.10.12"

code fix: debug comments in isosurface solvent slowing it down significantly

bug fix: PARALLEL/PROCESS not working
bug fix: SHOW DATA does not return model data
bug fix: draw CURVE pt1 pt2   does not work
bug fix: pmesh command cannot read files from zip files 
         because "binary" option is set, and FileManager is returning the wrong input stream 

new feature: unitcell() function
  -- returns unitcell as an array in the form [origin, va, vb, vc]
  -- first parameter is optional unitcell itself; absence uses current model's unit cell. 
  -- optional last parameter: scale
  -- signatures:
    unitcell()   // uses current unit cell
    unitcell(uc) // copies unit cell
    unitcell(uc, "reciprocal") // reciprocal lattice for specified unit cell
    unitcell("reciprocal") // reciprocal lattice for current model's unit cell
    unitcell(ucconv, "primitive","BCC"|"FCC") // convert conventional to primitive
    unitcell("primitive","BCC"|"FCC")
    unitcell(ucprim, "conventional","BCC"|"FCC")  // convert primitive to conventional
    unitcell("conventional","BCC"|"FCC")
    unitcell(origin, [va, vb, vc]) // user-defined unit cell; just produces [origin, va, vb, vc]
    unitcell(origin, pta, ptb, ptc) // user-defined unit cell using four points    
 -- compatible with UNITCELL command:
 
    UNITCELL @{unitcell("reciprocal")}
    draw unitcell
    UNITCELL RESET   
 
   
new feature: point(unitcell, {i, j, k})
  -- returns the Cartesian point corresponding to a specific coordinate in a unit cell system.
  -- unitcell is an array of the form [origin, va, vb, vc]
  -- {i j k} is a point in the unit cell
  -- for general use -- does not require actual setting of the model's unit cell

JmolVersion="14.3.16_2015.10.09"

bug fix:  print 'CCC'.find("SMILES") should throw a ScriptException, not a Java exception

new feature: Gaussian log file reader reads spin density scalars as property_spin

JmolVersion="14.3.16_2015.10.06"

new feature: print within(distance, point, array_of_points)
  -- point array distance iterator
  -- returns subarray of points (in differing order, probably) of array_of_points
     that are within distance of point.
      
bug fix: MRC surface reader: new version of EMAN2 leaves out alpha,beta,gamma; does not load properly

bug fix: for (a in {*}) with no VAR fails if a has already been defined as an integer

bug fix: better error reporting

new feature: load =aflow/AgAu
 -- easy access to binary metal alloy CIF files
 -- http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary
 
bug fix: braceless if/for fix from 10.04

JmolVersion="14.3.16_2015.10.04"

bug fix: changing bond order of X-H using set picking assignBond_2 generates error messages and removes atoms


new feature: if, for, and while can all operate using no braces for single-line bodies
  -- similar to JavaScript and Java
  -- examples:

   for(var i = 0; i < 10; i++)
     for(var j = 0; j < 10; j++)
       print i*j
       
   if (i == 1)
     print i
   else
     print 0
     
bug fix: translucent echo backgrounds not saved in state properly  
   

JmolVersion="14.3.16_2015.10.01"

bug fix: for (; i < 10; i++)  not working
bug fix: for (;;i++)  not working
bug fix: for (;;)  not working

JmolVersion="14.3.16_2015.10.01"
	
bug fix: hydrogens added to backbone should be part of "backbone" definition
  -- no-hydrogen definition is _bb

TODO: document ------>>>>

new feature: calculate hydrogens TRUE
 -- calculates hydrogens and multiple bonding
 -- same as 
 
    calculate hydrogens
    connect aromatic modify
    calculate aromatic
    
 -- similar to, but not identical to set pdbAddHydrogens
 -- allows reasonable addition of multiple bonds to proteins after loading

TODO: document <<<<<-------

bug fix: connect aromatic should not touch H atoms or atoms with 4 or more covalent bonds
bug fix: calculate hydrogen should consider backbone N sp2
bug fix: {backbone} should include attached H atoms 
bug fix: calculate hydrogens should not place H atoms on water

JmolVersion="14.3.16_2015.09.29"

note: I am using "map" for "associative array" now

TODO: document------->>>>
 
new feature: mapOfMaps.array(k)
 -- generates an array of maps from a map of maps by 
    storing all top-level map keys under key k in lower-level map
 -- reversed by another .array(k) 
 -- causes a script exception if mapOfMaps is not a map of maps

new feature: arrayOfMaps.array(k)
 -- generates a map of maps from an array of maps by 
    removing each map's key k and using that as the key for that map value 
 -- reversed by another .array(k) 
 -- causes a script exception if arrayOfMaps is not an array of maps or key k is not present in all maps

JmolVersion="14.3.16_2015.09.28b"

bug fix: draw ramachandran broken

JmolVersion="14.3.16_2015.09.28"

new feature: array.sort("key")
 -- sorts an array of associative arrays by the specified associative array key.
 -- example:
 
	load sf6.smol
	x= _M.moData.mos.select("energy,index where energy<0")
	x.sort("energy").reverse
	print x

	  {
	    "energy"  :  -0.67001194
	    "index"  :  35
	   }
	  {
	    "energy"  :  -0.67001194
	    "index"  :  34
	   }
	  {
	    "energy"  :  -0.67001194
	    "index"  :  33
	   }
	  {
	    "energy"  :  -0.70143324
	    "index"  :  32
	   }
	   ...
	   	
new feature: JmolSQL xxxx.select(" WHEREIN ")
  -- replaces ** idea
  -- assumes values of xxxx are themselves associative arrays
  -- indicates that the clause should be applied only to the values for the selected keys
  -- returns an associative array that holds only those keys for which the clause is true *for them*
  -- works also for array xxxx where each element of xxxx is an associative array, 
     in which case it returns a subarray of xxxx involving the matching values.  
  -- example:
  
   abc = [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ]
   print abc.select("A* wherein b>2").format("JSON")
   
     { "AA": { "b": 4 } }
     
   Compare this to the following, where we are are checking for validity of abc itself:
   
   abc = [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ]
   print abc.select("A* where B.b=2").format("JSON")
   
     { "A": { "b": 1 },"AA": { "b": 4 } }

   
   abc2 = [ 
      [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ],
      [ A:[b:11], B:[b:22], C:[b:33, d:5050], AA:[b:40] ]
      ]
   print abc2.select("A* wherein b>2").format("JSON")
    
   [ { "AA": { "b": 4 } },{ "A": { "b": 11 },"AA": { "b": 40 } } ]      

new feature: JmolSQL xxxx.select("() WHERE/WHEREIN ")
  -- parentheses around keys replaces ";" idea
  -- indicates to return an array of values rather than a key/value pair
  -- works also for array xxxx where each element of xxxx is an array or associative array, 
     in which case it returns an array of matching values, without keys.  
  -- example:

   load =1ehz/dssr
   print _M.dssr.hbonds.select("distance where res_long like '*|C|72|*'")
	  {
	    "distance"  :  2.832
	   }
	  {
	    "distance"  :  2.879
	   }
	  {
	    "distance"  :  2.838
	   }

	print _M.dssr.hbonds.select("(distance) where res_long like '*|C|72|*'")
	
		2.832
		2.879
		2.838

	print _M.dssr.hbonds.select("(distance) where res_long like '*|C|72|*'").average

		2.8496666
       

JmolSQL

JmolSQL is a Jmol math syntax that is designed to query information related to molecular structure. The idea is that associative arrays, with key/value pairs, and especially arrays of associative arrays, are data, and those arrays themselves can be thought of as a mini database. These sorts of data can be found in Jmol in the a model's auxiliary info (variable _M), including validation data returned from LOAD =xxxx/val (_M.validation), sequence domain data returned from LOAD =xxxx/dom (_M.domains), and secondary structure information returned from LOAD =xxxx/dssr (_M.dssr) or LOAD=xxxx/rna3d (_M.rna3d). In addition, the getProperty() function returns a wide variety of data relating to model attributes, including getProperty("atomInfo") and getProperty("bondInfo") among several others.

The original conception of JmolSQL was in the context of the getProperty() function -- for example:

load $caffeine
print getProperty("atomInfo[SELECT atomno,coord WHERE shape LIKE 'trigonal planar']")

  {    "atomno"  :  1    "coord"  :  {1.312 -1.0479 0.0025}   }  {    "atomno"  :  3    "coord"  :  {1.7906001 0.20809999 9.999999E-4}   }   ...
More recent development widens this use to any array data, and use of the .select() function rather than getProperty() is recommended for general use. Thus, alternatively we can use:

print getProperty("atomInfo").select("atomno,coord WHERE shape LIKE 'trigonal planar' ")


object.SELECT("keys WHERE/WHEREIN phrase")
There are three parts to JmolSQL: object, keys, and an optional WHERE or WHEREIN phrase. The object can be either an associative array [key1:value1, key2:value2, key3:value3] or an array of associative arrays, usually all having the same set of keys.

Associative Arrays
When the top-level object is an associative array, .select() can be used to select
out subsets of that array, either as a single associative array or as an array of values.

abc.select("...")
The simplest form of .select() returns a subset of abc. Wild cards can be interspersed with additional keys, for example, "a*,b" or "*_id". In each such case, the case-sensitive LIKE operation is used to match keys.

abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("A").format("JSON")

{ "A": { "b": 1 } }
abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("A*").format("JSON")

{ "A": { "b": 1 },"AA": { "b": 3,"d": 50 } }
abc.select("(...)")
Using parentheses around the list of keys delivers a list of values of b for only the the subset of xyz for which a=1:

abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("(A,B)").format("JSON")

[ { "b": 2 },{ "b": 1 } ]

Arrays of Associative Arrays
In addition to operating on an associative array directly, JmolSQL can operate on an array of associative arrays. Generally we assume here that the elements of that array are associative arrays that all have the same set of keys. This is the essence of a database.  Whether or not the associative arrays have the same keys is not important for Jmol. For example, the getProperty("atomInfo") returns an array giving the information for each atom that is loaded:

load $caffeine
x = getProperty("atomInfo")
print x.count

24
print x[1]

{  "_ipt"  :  0  "atomIndex"  :  0  "atomno"  :  1  "bondCount"  :  3  "clickabilityFlags"  :  48  "colix"  :  -32761  "color"  :  "[x3050f8]"  "coord"  :  {1.312 -1.0479 0.0025}  "element"  :  "nitrogen"  "elemno"  :  7  "formalCharge"  :  0  "info"  :  "N1 #1"  "model"  :  "1"  "partialCharge"  :  0.0  "radius"  :  0.7416667  "shape"  :  "trigonal planar"  "spacefill"  :  0.3565  "sym"  :  "N"  "visibilityFlags"  :  63  "visible"  :  true  "x"  :  1.312  "y"  :  -1.0479  "z"  :  0.0025 }
These data can be "queried" using  JmolSQL.

xyz.select("...")
Creates the sublist of associative arrays having the selected subset of keys:

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("b").format("JSON")

[ { "b": 11 },{ "b": 22 },{ "b": 33 } ]
print x.select("atomno,element")
  {    "atomno"  :  1    "element"  :  "nitrogen"   }  {    "atomno"  :  2    "element"  :  "carbon"   }  {    "atomno"  :  3    "element"  :  "carbon"   }  {    "atomno"  :  4    "element"  :  "oxygen"   }   ...
xyz.select("(...)")
Adding parentheses creates a list of only the values for the specified keys:
xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(b)").format("JSON")

[ 11,22,33 ]
xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(a,b)").format("JSON")

[ 11,1,22,2,33,3 ]
load $caffeine
print getProperty("atomInfo").select("(element)").pivot
{  "carbon"  :  8  "hydrogen"  :  10  "nitrogen"  :  4  "oxygen"  :  2 }
The assumption when using (keys) is that you want to know all these values,
but you don't care what order they are in (because that will not be predictable)
and you don't care about their exact context. An example is a list of bonds for
which we just want to know all the atoms involved, but the atoms are listed
under "atom1" and "atom2" in each bond array.

load =1ehz/dssr
select on @{_M.dssr.hbonds.select("(atom1_id,atom2_id)")}

206 atoms selected

Using WHERE
WHERE is used to select a subset of the elements of an array based on specific
key-value relationships.

xyz.select("... WHERE ...")
Delivers all key/value pairs in the subset of xyz element associative arrays
for which the WHERE clause is true for that element.

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("* where a<3 and b<20").format("JSON")

[ { "b": 11,"a": 1 } ]
load $caffeine
print getProperty("atomInfo").select("atomno,element WHERE shape LIKE 'trigonal planar' ").format("JSON")

[ { "element": "nitrogen","atomno": 1 },{ "element": "carbon","atomno": 3 },{ "element": "nitrogen","atomno": 5 },{ "element": "carbon","atomno": 7 },{ "element": "carbon","atomno": 9 },{ "element": "nitrogen","atomno": 10 },{ "element": "carbon","atomno": 12 },{ "element": "carbon","atomno": 13 } ]


xyz.select("(...) where ...")
Using parentheses around the list of keys delivers a list of
values for only the subset of xyz for which the WHERE clause is true:

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(b) where a>1").format("JSON")

[ 22,33 ]
load $caffeine
 print getProperty("atomInfo").select("(shape) WHERE shape").pivot
{  "bent"  :  1  "tetrahedral"  :  3  "trigonal planar"  :  8 }
Note that "WHERE shape" here just excludes all cases where shape is the empty string, since empty strings in Jmol evaluate as FALSE. (In this case that involves hydrogen atoms.)

For example, finding all the hydrogen bonds created by DSSR for a given residue:

load =1ehz/dssr
x = _M.dssr.hbonds.select("(distance) where res_long like '*|A|C|72|*'");
print x.format("JSON")
print format("%5.3f",x.average)

[ 2.832,2.879,2.838 ]    2.850
Array "Drilling"

WHERE will "drill down" through arrays of arrays to find
elements that are associative arrays, returning a flat array of those objects:

xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
print xyz.select("a* where a>0").format("JSON")

[ { "a": 1 },{ "a": 2 },{ "a": 3,"aa": 44 } ]
xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
print xyz.select("(b) where a>0").format("JSON")

[ 11,22,33 ]
 
WHERE vs. WHEREIN
Starting with Jmol 14.4, JmolSQL includes an additional option, WHEREIN. This option
allows selecting specific key/value pairs for which the value is itself an associative
array, and *that array* has a specific set of key/value relationships. Thus, the
clause is checked one level deeper in the structure.

For example, given the associative array

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]

we can select out only those keys for which type='a':

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
print abc.select("* WHEREIN type='a'").format("JSON");

{ "key_3": { "i": 3,"type": "a" },"key_1": { "i": 1,"type": "a" } }
All of the options that involve WHERE also apply to WHEREIN. For example,
multiple keys can be specified, and keys can be surrounded by parentheses
to return just the values instead of key/value pairs:

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
print abc.select("(key_1,key2) WHEREIN type='a'").format("JSON");

[ { "i": 1,"type": "a" } ]
In addition, WHEREIN can be applied to arrays as well as associative arrays.
In this case, the WHEREIN phrase applies to the elements of that array, which
are assumed to be associative arrays. For example, we can get a list of just
the occupied orbitals produced by Gaussian that are of a given symmetry:

load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
print _M.moData.select("mos wherein occupancy>0").select("(symmetry)").pivot

{  "(A1)--O"  :  6  "(A2)--O"  :  1  "(B1)--O"  :  1  "(B2)--O"  :  4 }
Note that this use of WHEREIN with arrays in this way can also be accomplished
more directly with WHERE:

load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
print _M.moData.mos.select("(symmetry) where occupancy>0").pivot

{  "(A1)--O"  :  6  "(A2)--O"  :  1  "(B1)--O"  :  1  "(B2)--O"  :  4 }
load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
x= _M.moData.select("mos wherein occupancy>0 and symmetry like '(B2)*' ")
print x.select("(index)").format("JSON")

[ 1,5,8,10 ]




After taking a close look at this, I decided this was getting too cryptic. I think this is much simpler. This long email message summarizes the JmolSQL business, starting with Jmol 11.3.16_2015.09.28. See http://chemapps.stolaf.edu/jmol/zip/jmol-14.3.16_2015.09.28.zip

JmolSQL
JmolSQL is a Jmol math syntax that is designed to query information related to molecular structure. The idea is that associative arrays, with key/value pairs, and especially arrays of associative arrays, are data, and those arrays themselves can be thought of as a mini database. These sorts of data can be found in Jmol in the a model's auxiliary info (variable _M), including validation data returned from LOAD =xxxx/val (_M.validation), sequence domain data returned from LOAD =xxxx/dom (_M.domains), and secondary structure information returned from LOAD =xxxx/dssr (_M.dssr) or LOAD=xxxx/rna3d (_M.rna3d). In addition, the getProperty() function returns a wide variety of data relating to model attributes, including getProperty("atomInfo") and getProperty("bondInfo") among several others.

The original conception of JmolSQL was in the context of the getProperty() function -- for example:

load $caffeine
print getProperty("atomInfo[SELECT atomno,coord WHERE shape LIKE 'trigonal planar']")

  {
    "atomno"  :  1
    "coord"  :  {1.312 -1.0479 0.0025}
   }
  {
    "atomno"  :  3
    "coord"  :  {1.7906001 0.20809999 9.999999E-4}
   }
   ...

More recent development widens this use to any array data, and use of the .select() function rather than getProperty() is recommended for general use. Thus, alternatively we can use:

print getProperty("atomInfo").select("atomno,coord WHERE shape LIKE 'trigonal planar' ")


object.SELECT("keys WHERE/WHEREIN phrase")
There are three parts to JmolSQL: object, keys, and an optional WHERE or WHEREIN phrase. The object can be either an associative array [key1:value1, key2:value2, key3:value3] or an array of associative arrays, usually all having the same set of keys.

Associative Arrays
When the top-level object is an associative array, .select() can be used to select
out subsets of that array, either as a single associative array or as an array of values.

abc.select("...")
The simplest form of .select() returns a subset of abc. Wild cards can be interspersed with additional keys, for example, "a*,b" or "*_id". In each such case, the case-sensitive LIKE operation is used to match keys.

abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("A").format("JSON")

{ "A": { "b": 1 } }

abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("A*").format("JSON")

{ "A": { "b": 1 },"AA": { "b": 3,"d": 50 } }

abc.select("(...)")
Using parentheses around the list of keys delivers a list of values of b for only the the subset of xyz for which a=1:

abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
print  abc.select("(A,B)").format("JSON")

[ { "b": 2 },{ "b": 1 } ]


Arrays of Associative Arrays
In addition to operating on an associative array directly, JmolSQL can operate on an array of associative arrays. Generally we assume here that the elements of that array are associative arrays that all have the same set of keys. This is the essence of a database.  Whether or not the associative arrays have the same keys is not important for Jmol. For example, the getProperty("atomInfo") returns an array giving the information for each atom that is loaded:

load $caffeine
x = getProperty("atomInfo")
print x.count

24

print x[1]

{
  "_ipt"  :  0
  "atomIndex"  :  0
  "atomno"  :  1
  "bondCount"  :  3
  "clickabilityFlags"  :  48
  "colix"  :  -32761
  "color"  :  "[x3050f8]"
  "coord"  :  {1.312 -1.0479 0.0025}
  "element"  :  "nitrogen"
  "elemno"  :  7
  "formalCharge"  :  0
  "info"  :  "N1 #1"
  "model"  :  "1"
  "partialCharge"  :  0.0
  "radius"  :  0.7416667
  "shape"  :  "trigonal planar"
  "spacefill"  :  0.3565
  "sym"  :  "N"
  "visibilityFlags"  :  63
  "visible"  :  true
  "x"  :  1.312
  "y"  :  -1.0479
  "z"  :  0.0025
 }

These data can be "queried" using  JmolSQL.

xyz.select("...")
Creates the sublist of associative arrays having the selected subset of keys:

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("b").format("JSON")

[ { "b": 11 },{ "b": 22 },{ "b": 33 } ]

print x.select("atomno,element")
  {
    "atomno"  :  1
    "element"  :  "nitrogen"
   }
  {
    "atomno"  :  2
    "element"  :  "carbon"
   }
  {
    "atomno"  :  3
    "element"  :  "carbon"
   }
  {
    "atomno"  :  4
    "element"  :  "oxygen"
   }
   ...
xyz.select("(...)")
Adding parentheses creates a list of only the values for the specified keys:

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(b)").format("JSON")

[ 11,22,33 ]

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(a,b)").format("JSON")

[ 11,1,22,2,33,3 ]

load $caffeine
print getProperty("atomInfo").select("(element)").pivot
{
  "carbon"  :  8
  "hydrogen"  :  10
  "nitrogen"  :  4
  "oxygen"  :  2
 }

The assumption when using (keys) is that you want to know all these values,
but you don't care what order they are in (because that will not be predictable)
and you don't care about their exact context. An example is a list of bonds for
which we just want to know all the atoms involved, but the atoms are listed
under "atom1" and "atom2" in each bond array.

load =1ehz/dssr
select on @{_M.dssr.hbonds.select("(atom1_id,atom2_id)")}

206 atoms selected


Using WHERE
WHERE is used to select a subset of the elements of an array based on specific
key-value relationships.

xyz.select("... WHERE ...")
Delivers all key/value pairs in the subset of xyz element associative arrays
for which the WHERE clause is true for that element.

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("* where a<3 and b<20").format("JSON")

[ { "b": 11,"a": 1 } ]

load $caffeine
print getProperty("atomInfo").select("atomno,element WHERE shape LIKE 'trigonal planar' ").format("JSON")

[ { "element": "nitrogen","atomno": 1 },{ "element": "carbon","atomno": 3 },{ "element": "nitrogen","atomno": 5 },{ "element": "carbon","atomno": 7 },{ "element": "carbon","atomno": 9 },{ "element": "nitrogen","atomno": 10 },{ "element": "carbon","atomno": 12 },{ "element": "carbon","atomno": 13 } ]


xyz.select("(...) where ...")
Using parentheses around the list of keys delivers a list of
values for only the subset of xyz for which the WHERE clause is true:

xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
print xyz.select("(b) where a>1").format("JSON")

[ 22,33 ]

load $caffeine
 print getProperty("atomInfo").select("(shape) WHERE shape").pivot
{
  "bent"  :  1
  "tetrahedral"  :  3
  "trigonal planar"  :  8
 }

Note that "WHERE shape" here just excludes all cases where shape is the empty string, since empty strings in Jmol evaluate as FALSE. (In this case that involves hydrogen atoms.)

For example, finding all the hydrogen bonds created by DSSR for a given residue:

load =1ehz/dssr
x = _M.dssr.hbonds.select("(distance) where res_long like '*|A|C|72|*'");
print x.format("JSON")
print format("%5.3f",x.average)

[ 2.832,2.879,2.838 ]   
2.850

Array "Drilling"

WHERE will "drill down" through arrays of arrays to find
elements that are associative arrays, returning a flat array of those objects:

xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
print xyz.select("a* where a>0").format("JSON")

[ { "a": 1 },{ "a": 2 },{ "a": 3,"aa": 44 } ]

xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
print xyz.select("(b) where a>0").format("JSON")

[ 11,22,33 ]

 
WHERE vs. WHEREIN
Starting with Jmol 14.4, JmolSQL includes an additional option, WHEREIN. This option
allows selecting specific key/value pairs for which the value is itself an associative
array, and *that array* has a specific set of key/value relationships. Thus, the
clause is checked one level deeper in the structure.

For example, given the associative array

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]

we can select out only those keys for which type='a':

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
print abc.select("* WHEREIN type='a'").format("JSON");

{ "key_3": { "i": 3,"type": "a" },"key_1": { "i": 1,"type": "a" } }

All of the options that involve WHERE also apply to WHEREIN. For example,
multiple keys can be specified, and keys can be surrounded by parentheses
to return just the values instead of key/value pairs:

abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
print abc.select("(key_1,key2) WHEREIN type='a'").format("JSON");

[ { "i": 1,"type": "a" } ]

In addition, WHEREIN can be applied to arrays as well as associative arrays.
In this case, the WHEREIN phrase applies to the elements of that array, which
are assumed to be associative arrays. For example, we can get a list of just
the occupied orbitals produced by Gaussian that are of a given symmetry:

load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
print _M.moData.select("mos wherein occupancy>0").select("(symmetry)").pivot

{
  "(A1)--O"  :  6
  "(A2)--O"  :  1
  "(B1)--O"  :  1
  "(B2)--O"  :  4
 }

Note that this use of WHEREIN with arrays in this way can also be accomplished
more directly with WHERE:

load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
print _M.moData.mos.select("(symmetry) where occupancy>0").pivot

{
  "(A1)--O"  :  6
  "(A2)--O"  :  1
  "(B1)--O"  :  1
  "(B2)--O"  :  4
 }

load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
x= _M.moData.select("mos wherein occupancy>0 and symmetry like '(B2)*' ")
print x.select("(index)").format("JSON")

[ 1,5,8,10 ]


TODO: document <<<<<-------


JmolVersion="14.3.16_2015.09.25"

bug fix: HBONDS DELETE  broken since 14.1.2 

JmolVersion="14.3.16_2015.09.23"

bug fix: within(0.0, {0 0 0}) fails when no atoms in model

JmolVersion="14.3.16_2015.09.22"

bug fix: for(var x in ...) does not respect "var"

bug fix: x.format("JSON") fails for recursive x
  -- arrays or associative arrays can be recursive
  -- detection of recursion during SHOW, x.format("JSON"), and @x (deep copy)
     now delivers empty array or associative array
  -- works also with expressions using @{...}:  x = @{y.select("* where atomno > 10")}

  -- example:
  
		$ a = [[1,2],3]
		$ a..2 = a
		$ print a.format("JSON")
		  
			    [ [ 1,2 ],[ [ 1,2 ],[  ] ] ]
		  
		$ a = [b:1]
		$ a.b = a
		$ print a.format("JSON")
		  
		    { "b": { "b": {  } } }
		
		$ y = @x
		$ show y
		
		    y = { "b":{ "b":{  } } }


TODO: document --->>
		    
new feature: x = @a
  -- deep copy for a = array or associative array
  -- @a for string variable still gets the value of the variable named by variable a
  -- math environment only, not SELECT
  

TODO: document <<<<<-------


new feature: for allows one continuation line, as in JavaScript and Java
  -- for example:
	for (i = 1; i <= 3; i++)
  	  print i;

bug fix: for (key in hash){...} fails upon functional iteration (deepCopy)
  -- code was reusing the FOR variable when it should have been caching it in the context stack
  
JmolVersion="14.3.16_2015.09.21"

new feature: Raster3D triangle-only file reader (for DSSR cartoon-block representation) 
  -- see http://skuld.bmsc.washington.edu/raster3d/html/render.html
  
bug fix: minor fixes for DSSR

bug fix: print within(0, "XXX", ...) ignores the "XXX" entirely. Should throw an error (Ron Mignery)
bug fix: print within(0, "vdw", ...) ignores "vdw"; should accept that as "vanderwaal"
bug fix: print within(-1.0, "vanderwaal", ...) ignores "vanderwaal" and does a fractional-coordinate calculation  

JmolVersion="14.3.16_2015.09.20"

FEATURE CHANGE: 3DNA DSSR has switched over to JSON; some array names are changed.


TODO: document ----->>>

new feature: print @1.label("%[unitid]")
  -- generates unit IDs for atoms or residues
  -- unit IDs are a proposed general standard for representing atoms and residues in biomolecules
  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
  -- options follow "-":
  
  $ print {atomno=3}.label("%[unitid]")     // includes residue and atom
  |1|A|G|1|OP1|||
	
  $ print {atomno=3}.label("%[unitid-r]")   // residue only
  |1|A|G|1||||
	
  $ print {atomno=3}.label("%[unitid-mr]")  // adds model id
  1EHZ|1|A|G|1||||
	
  $ print {atomno=3}.label("%[unitid-mra]") // full unitID
  1EHZ|1|A|G|1|OP1|||

  $ print {atomno=3}.label("%[unitid-mrat]") // full unitID, right-trimmed
  1EHZ|1|A|G|1|OP1
 
  -- Note that the full 8-line unit ID is produced under all circumstances. 
     This is  important, because string-matching of unit ids will not work 
     without all fields completed. For example:
     
     |1|A|G|1
     
     would match
     
     |1|A|G|11
     
     without the closing "|". Likewise, 
     
     |1|A|G|11
     
     is not a match for the insertion residue
     
     |1|A|G|11|||3|
     
  -- [Editorial note: I agree that it was ill-advised to put the insertion
      code at the end. This makes it impossible to efficiently match 
      residues in full-atom unit IDs.]
      
  -- Note that in an actual atom label, one needs to add "\n" at the end
     and have the label in quotes in order to avoid having "|" mean "new line"
     
    label "%[unitid]\n"   
  
  not just
  
    label %[unitid]
  
  This is a consequence of having defined "|" as new line early on in Jmol
  development. 
     
bug fix: quoted labels containing \n are supposed to ignore | as new-line char

new feature: select shortcuts for nucleic acid structures
  -- for example: select junctions; select kissingloops
  -- activated after load =xxxx/dssr or calculate structure dssr
  -- includes:
    "@bulges within(dssr,'bulges')",
    "@coaxStacks within(dssr,'coaxStacks')",
    "@hairpins within(dssr,'hairpins')",
    "@hbonds within(dssr,'hbonds')",
    "@helices within(dssr,'helices')",
    "@iloops within(dssr,'iloops')",
    "@isoCanonPairs within(dssr,'isoCanonPairs')",
    "@junctions within(dssr,'junctions')",
    "@kissingLoops within(dssr,'kissingLoops')",
    "@multiplets within(dssr,'multiplets')",
    "@nonStack within(dssr,'nonStack')",
    "@nts within(dssr,'nts')",
    "@naChains within(dssr,'naChains')",
    "@pairs within(dssr,'pairs')",
    "@ssSegments within(dssr,'ssSegments')",
    "@stacks within(dssr,'stacks')",
    "@stems within(dssr,'stems')",


TODO: document <<<<<-------

JmolVersion="14.3.16_2015.09.15"

bug fix: JSME's noncanonical SMILES does not match Jmol's standard SMILES for aromatics
 -- solution is to use /noncanonical/ with find().
 
bug fix: JSmol does not automatically start non-English language


TODO: document ------>>>

new feature: SMILES /noncanonical/
  -- matches Jmol's aromatic with JSME's "noncanonical" aromatic 
  $ load $aspirin
  $ show smiles
    c1=cc=cc2=c1C(O)=O.O2C(C)=O
  $ print {*}.find("smiles", "/noncanonical/C1=CC=CC(OC(C)=O)=C1C(O)=O")
    ({0:20})
  $ print "c1=cc=cc2=c1C(O)=O.O2C(C)=O".find("smiles", "/noncanonical/C1=CC=CC(OC(C)=O)=C1C(O)=O")
    13

new feature: {*}.find("SMILES", "NOAROMATIC")
 -- creates nonaromatic (noncanonical) SMILES 
 
new feature: JmolSQL x.select("...")
  -- shortcut for x.getProperty("[select ... ]")
  -- x should by an associative array  {key:value,..} or a sequential array [a,b,c,d]

new feature: JmolSQL {associative array}.select("xxx** where...")
  -- double * indicates desire to return full sub-arrays, with keys
  -- "all keys starting with "xxx"; 
  -- uses LIKE
  -- can be at beginning or end or both: xxx**, **xxx, **xxx**
  -- WHERE clause is optional
  -- similar to [array].select("** where 
  
  
  

TODO: document <<<<<-------
  
JmolVersion="14.3.16_2015.09.14"

bug fix: load data [2D mol structure...] filter "2D" not working
bug fix: Crystallographic Open Database CIF files have unusual atom_site_label ("MgT") 
         and no atom_site_type_symbol, leading to missing element assignments

JmolVersion="14.3.16_2015.09.09"

#ignore:
#new feature: SMILES/SMARTS atom designations [C(xxxx)]
#   -- allows pointing to the same atom without connection numbers
#   -- (xxxx) may be anything, including just ()
#   -- definition may be anywhere in bracketed atom specification
#   -- any additional primitives in referring expression will be ignored
#   -- involves only a very simple addition to parser code
#   -- Jmol is not currently creating these strings, just interpreting them  
#   -- rationale:
#   
#      One basic aspect of SMILES is that it efficiently uses numbers to 
#      indicate connectivity using a process of "opening" bonds and "closing" them.
#      Along with radical (.) notation, this is totally sufficient for describing
#      any connected network of atoms, including situations where the ordering
#      of connections is critical (e.g., in describing stereochemistry). Basically, 
#      one can simply list all the atoms in an arbitrary order as single-atom 
#      components (separated by "."), then assign bonds as desired, in whatever
#      order is desired.
#      
#      The problem comes when attempting to indicate stereochemistry for 
#      centers with more than six substituents or with geometries that are
#      outside the standard set of AL, TH, TP, SP, and OH. In such cases, 
#      there may arise situations where the ordering of unbonded substituents 
#      will be critical. An example is crystal structures of metals and metal
#      alloys. In this situation there are no covalent bonds. The need is to 
#      be able to compare two such crystal structures. 
#      
#      The solution is to create SMARTS and SMILES strings for complex 
#      "atomic environments" consisting of a central atom and any number of
#      nearby atoms, using a cutoff radius rather than a bonding pattern.
#      One possibility is to create a "pseudobond" that connects the central 
#      atom to all of its connected atoms, but this is not really necessary and
#      slows processing significantly. Instead, the [@PHn] syntax proposed here
#      allows the polyhedral environment to be specified only for the polyhedron
#      itself, exclusive of the central atom. 
#
#      By providing a means of referring to a specific previously defined atom in a
#      SMILES or SMARTS string, we can allow an atom in such an arrangement 
#      to be part of two different polyhedra.   
#        
#      Thus, although isolated polySMARTS can be implemented without atom referents, 
#      extending that to more complex multi-atom polySMARTS searches requires them.
#            
#   -- example, simple branched organic
#      
#		$ load $t-butylmethylether
#		$ select on search("[O][C(a)H0].[C(a)]C")
#		
#		5 atoms selected
#		
#      same as
#      
#		$ select on search("[O][CH0](C)")
#        		
#   -- note that [C(2)] and [O(2)] are not sensible and may be disallowed. 
#      

code: javajs.util reconciled with swingjs project

bug fix: polyhedra.stereoSmiles --> polyhedra.polySmiles

new feature: polyhedron.polySmiles adds central atom

  -- example:
  
		load SF6.smol -1
		polyhedra
		calculate symmetry polyhedra
		x = {polyhedra}.polyhedra.polySmiles
		print x

		//* S1 #1 *//	[S@PH6].
		//* F6 #7 *//	[F]1234.
		//* F2 #3 *//	[F]5672.
		//* F3 #4 *//	[F]849%10.
		//* F4 #5 *//	[F]%11%10%126.
		//* F1 #2 *//	[F]937%12.
		//* F5 #6 *//	[F]8%1151

	    print  polyhedron(x).atomname

		S1		 			        		
  		        				     
JmolVersion="14.3.16_2015.09.08"

code: Efficient JSON parser javajs.util.JSONParser
  -- requires object being parsed to be an object (bounded by "{" and "}")

JmolVersion="14.3.16_2015.09.06"

new feature: 3DNA DSSR JSON mode 
 -- http://x3dna.bio.columbia.edu/dssr/report.php?id=1ehz&opts=--more%20--json=ebi-no-str-id
 -- uses unit ids
 -- preliminary version is /dssr1 but will replace /dssr
 
  load =1ehz/dssr1
  cartoons only;
  color @{within(dssr,"junctions")} blue
  color @{within(dssr,"hairpins")} white
 
new feature: JSON dssr loading and interpretation
	load =1ehz
	dssr = eval(load("1ehz.dssr.json"));
	y = within(dssr.junctions)
	color @y blue

bug fix: dssr = "testing"  works, but then print dssr  just prints "DSSR"
  -- was true for all within() function keywords, such as substructure, search, sequence, etc.
  
new feature: select within("1ehz|1|A|G|45||||")
new feature: print within("1ehz|1|A|G|45||||")
  -- unit IDs
  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
  -- used for annotations, validations, dssr, and rna-3d processing
  -- pdbid|model|chain|RESNAME|resno|ATOMNAME|altcode|inscode|symmetry
  -- can truncate trailing (but not leading) pipe symbols
    1ehz|1|A|G|15, |1|A|G|15|C2
  -- requires at minimum a model number, chain, and residue number
    |1|A||15
  -- ATOMNAME blank indicates full residue, with altcode indicating "this alt_id or no alt_id" (a configuration)
  -- ATOMNAME nonblank indicates one atom, with altcode indicating "exactly this alt_id" (a location)
  -- can be multiple, white space, comma, "]", "[", and double quote ignored
    1ehz|1|A|G|15||||,1ehz|1|A|U|59||||,1ehz|1|A|C|60|||
    
  //  Unit Identifier Specification
  //
  //  We describe the type and case sensitivity of each field in the list below. In addition, we list which item in the mmCIF the data for each field comes from. We also show several examples of the IDs and their interpretation at the end.
  //
  //  Unit ids can also be used to identify atoms. When identifying entire residues, the atom field is left blank.
  //
  //      PDB ID Code
  //          From PDBx/mmCIF item: _entry.id
  //          4 characters, case-insensitive
  //      Model Number
  //          From PDBx/mmCIF item: _atom_site.pdbx_PDB_model_num
  //          integer, range 1-99
  //      Chain ID
  //          From PDBx/mmCIF item: _atom_site.auth_asym_id
  //          <= 4 character, case-sensitive
  //      Residue/Nucleotide/Component Identifier
  //          From PDBx/mmCIF item: _atom_site.label_comp_id
  //          1-3 characters, case-insensitive
  //      Residue/Nucleotide/Component Number
  //          From PDBx/mmCIF item: _atom_site.auth_seq_id
  //          integer, range: -999..9999 (there are negative residue numbers)
  //      Atom Name (Optional, default: blank)
  //          From PDBx/mmCIF item: _atom_site.label_atom_id
  //          0-4 characters, case-insensitive
  //          blank means all atoms
  //      Alternate ID (Optional, default: blank)
  //          From PDBx/mmCIF item: _atom_site.label_alt_id
  //          Default value: blank
  //          One of ['A', 'B', '0'], case-insensitive
  //      Insertion Code (Optional, default: blank)
  //          From PDBx/mmCIF item: _atom_site.pdbx_PDB_ins_code
  //          1 character, case-insensitive
  //      Symmetry Operation (Optional, default: 1_555)
  //          As defined in PDBx/mmCIF item: _pdbx_struct_oper_list.name
  //          5-6 characters, case-insensitive
  //          For viral icosahedral structures, use \u201CP_\u201D + model number instead of symmetry operators. For example, 1A34|1|A|VAL|88|||P_1
  //
  //  Examples
  //
  //      Chain A in 1ABC = \u201C1ABC|1|A\u201D
  //      Nucleotide U(10) chain B of 1ABC = \u201C1ABC|1|B|U|10\u201D
  //      Nucleotide U(15A) chain B, default symmetry operator = \u201C1ABC|1|B|U|15|||A\u201D
  //      Nucleotide C(25) chain D subject to symmetry operation 2_655 = \u201C1ABC|1|D|C|25||||2_655\u201D
  //
  //  Unit ids for entire residues can contain 4, 7, or 8 string separators (|).
 
  
TODO: document <<<<<-------

bug fix: after atom deletion, atom iterator still finds atoms.
  -- was not reinitializing the binary search after atom deletion 
  -- affects polyhedra, within()
		$ load $caffeine
		$ delete _N
		4 atoms deleted
		$ print {*}.count
		20
		$ print within(14.0, {c6}).count
		24

JmolVersion="14.3.16_2015.09.05"

new feature: POLYHEDRA
  -- same as POLYHEDRA BONDS {selected}
new feature: POLYHEDRA 4
  -- same as POLYHEDRA 4 BONDS {selected}  
new feature: POLYHEDRA OFFSET 1.4
  -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4
new feature: POLYHEDRA COLLAPSED 1.4
  -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4

code: Polyhedra work, including more efficient algorithms for completing set of faces

bug fix: tracking down thread-safe issue in application console
bug fix: in Java, mouse should not lose control if moved out of application

JmolVersion="14.3.16_2015.09.04"

bug fix: Mac OS does not add modifiers (left, right, ctrl, etc.) to drag operations


JmolVersion="14.3.16_2015.08.31"

bug fix: MOVE command with 0 time does not work

JmolVersion="14.3.16_2015.08.31"

bug fix: plot property  with nothing more throws Exception
bug fix: Gaussian Dialog does not add final line ending when saving

new feature: Jmol SMILES/SMARTS generic polySMILES polyhedron option @PHn(....)
 -- totally generic; will work with any number of connected atoms
 -- suitable replacement for all TP, OH, etc. 
 -- standard equivalence to [C@] is [C@PH4(234)]
 -- standard equivalence to [C@@] is [C@PH4(432)]
 -- "reverse" option via "!": [C@PH4(!234)]
 -- designation around any or all of the attached atoms is possible. For tetrahedra, this is
    redundant, but for higher number of vertices, it may not be. This designation is 
    done using "." to separate atoms. 
 -- so [C@] is [C@PH4(234)] or [C@PH4(!432)] or [C@PH4(.134)]
 -- implied H as in [CH@] will be atom 1 if this is the first atom; 2 if not -- Br[CH@]....
    (same as in standard tetrahedral)

 -- not implemented yet for SMARTS searching of SMILES strings
    
		$ load $2-bromobutane
		$ show smiles
		Br[C@@H](C)CC
		$ print {*}.find("Br[C@](C)(H)CC")
		({0:5})
		$ print {*}.find("Br[C@PH4(234)](C)(H)CC")
		({0:5})
		$ print {*}.find("Br[C@PH4(234)](H)(C)CC")
		({})
		$ print {*}.find("Br[C@PH4(432)](H)(C)CC")
		({0:5})
		$ print {*}.find("Br[CH@@](C)CC")
		({0:4})
		$ print {*}.find("Br[CH@PH4(.134)](C)CC")
		({0:4})
		$ print {*}.find("Br[CH@PH4(!.134)](C)CC") 
		({})
		
 -- :)
 
 
JmolVersion="14.3.16_2015.08.30"

code: refactoring of smiles package

new feature: preliminary no-limit SMILES polyhedron stereochemistry @PHn
  -- very preliminary
  -- the format relies on specifying the order of bonds, so it
     creates a new component for each atom in the polyhedron, and it 
     then arranges all bonds listed in @/CCW or @@/CW rotation as projected 
     into the plane perpendicular to the line connecting the given (polygon vertex)
     atom and the (central) reference atom. 
  -- example:
  
		$ load $methane
		$ polyhedra 4
		$ calculate symmetry polyhedra 
		C1 #1 Td
		
		$ print @1.polyhedra.polySmiles
		//* C1 #1 *//	[C@PH4].
		//* H5 #5 *//	[H]123.
		//* H2 #2 *//	[H]245.
		//* H3 #3 *//	[H]356.
		//* H4 #4 *//	[H]641
		 
  -- thus, stereochemistry is set based on the winding of the atom environment.
  -- the reference atom is listed first, but it need not be connected to the other
     atoms, and in fact for polyhedra we leave it out (note that it is not connected) 
  -- there is no limit to the number of connections any particular connecting atom 
     can have. So this covers all general SMILES stereochemistry. 
  -- a match is when the proper winding is found for all vertices. 
     
        load $C(Br)(Cl)F
		color chlorine blue
		polyhedra 4 bonds distancefactor 3.0
		calculate symmetry polyhedra
		print @1.polyhedra.polySmiles

		C1 #1 C1
		
		//* C1 #1 *//	[C@PH4].
		//* H5 #5 *//	[H]123.
		//* Br2 #2 *//	[Br]245.
		//* Cl3 #3 *//	[Cl]356.
		//* F4 #4 *//	[F]641
		$ invertselected
		$ polyhedra 4 bonds distancefactor 3.0
		calculate symmetry polyhedra
		print @1.polyhedra.polySmiles
		
		C1 #1 C1
		
		//* C1 #1 *//	[C@PH4].
		//* H5 #5 *//	[H]123.
		//* Br2 #2 *//	[Br]245.
		//* Cl3 #3 *//	[Cl]641.
		//* F4 #4 *//	[F]356
    
     
new feature: Jmol SMILES and SMARTS accepts look-back bond targeting using (n)
             where n is the sequential atom in the pattern.
  -- for example:
   
      $load cyclopentane
      print {*}.find("CCCCC(1)")   # cyclopentane ring
          
  -- will be very important in building around [@PHn] stereochemistry, because these
     components need to have no other connections, at least at the point of description. 
     Then if we need to attach to these, we can do so by connecting using this look-back
     technique. 
  
bug fix: Jmol bioSMARTS string-based search not implemented correctly
	-- for example, "~p~AC:A".find("SMARTS","~p~A:C", true) should give [[2,1]]
 
new feature: Jmol SMILES trigonal pyramidal stereochemistry 
  -- same as tetrahedral, put without the fourth group.
  
new feature: {*}.find("SEQ")
new feature: {*}.find("SEQ", true)
new feature: {*}.find("SEQ", "H")
 -- no-comment Jmol bioSMILES:
 
	 $ load =3ll2
	 $ print {carbohydrate}.find("seq")
	  ~c~[MAN][MAN][MAN].~c~[MAN][MAN].~c~[MAN][MAN][MAN]
	 $ print {carbohydrate}.find("seq", true)
	  	


code: much more efficient selection for groups, types of monomers, polymers, etc.

bug fix: {*}.find("SMILES",true) should default to covalent crosslinks
bug fix: {*}.find("SEQUENCE",true) should not include hydrogen bonded crosslinks

undocumented feature: Jmol bioSMILES includes ~c~ for carbohydrate
  -- for example:
   
   $ load =3LL2
	SUGAR BINDING PROTEIN                   28-JAN-10   3LL2
	MONOMERIC GRIFFITHSIN IN COMPLEX WITH A HIGH-MANNOSE BRANCHED
	CARBOHYDRATE
	found biomolecule 1: A
	
   $ select carbohydrate
	168 atoms selected
   $ show smiles true
	//* Jmol bioSMILES 14.3.16_2015.08.29  2015-08-29 12:03 1 *//
	//* chain A CARBOHYDRATE 122 *// ~c~[MAN]:1[MAN]:2[MAN] //* 124 *//.
	//* chain A CARBOHYDRATE 125 *// ~c~[MAN]:2[MAN] //* 126 *//.
	//* chain A CARBOHYDRATE 127 *// ~c~[MAN]:1[MAN][MAN] //* 129 *//


new feature: show SMILES TRUE  
  -- shows bioSMILES
new feature:  {*}.find("SEQUENCE","H") adds hydrogen-bonded crosslinks

bug fix: select within(polymer, water) should select nothing
bug fix: select !within(polymer, *) should not select nothing

bug fix: SMILES/SMARTS not accepting two separate processing directives such as /noaromatic/ /nostereo/
new feature: GaussianReader reads high precision vibrational mode data
  -- Gaussian input options must include Freq=(HPModes)
new feature: GaussianRedaer filter "NOHP" flag ignores high precision vibrational mode log info
new feature: Gaussian FCHK file reader reads vibrational modes 
  -- Gaussian input options must include Freq=(SaveNormalModes)
 
JmolVersion="14.3.16_2015.08.26"

new feature: SMARTS conformational search no longer limited to one range. 
  -- example:
  
    select on search("{[CH3]}(.t:50,70,-70,-50)CC{[CH3]}")
    

JmolVersion="14.3.16_2015.08.25b"

bug fix: {3/, 2/, 1/} notation broken

JmolVersion="14.3.16_2015.08.25"


bug fix: JmolThread should use setTimeout in resumeEval

new feature: JmolSMILES $(.x:1,2,3,4,5,6,7,8)
    -- x is oen of d,a,t
	-- up to four ranges per measurement
new feature: print  {2.1}.find("SMILES",{1.1})

bug fix: compare() function returning matrix with translation about center, not origin
bug fix: print compare({1.1},{2.1}, "SMILES", "stddev") broken
bug fix: select search("[$(select atomno < 5)]")  broken
bug fix: select search("[$(select atomno < 5) or @5]")  broken

new feature: _hoverLabel  
   -- reports general hover label set by hover command
   
new feature: _hoverEnabled
  -- reports if hover is enabled or not
  
bug fix: calculate partialCharge does not store result if all values are 0 (Otis Rothenberger)
bug fix: still problems with aTest = "testing"; x = [aTest:aTest] or a = [property_MYINFO:aTest] (Rolf Huehne)
bug fix: cross(a,b) broken
bug fix: write PDB broken; works without "PDB" keyword broken in 14.3.15_2015.06.18


new feature: /invertStereo/ flag for SMARTS search
  -- allows quick check for enantiomers
  -- example: select search("/invertStereo/C[C@H](Br)CC") will match (R)-2-bromobutane
              even though it is for (S)-2-bromobutane
              
FEATURE CHANGE: Definitions of dna, rna, purine, and pyrimidine were ambiguous and 
                not particularly viable for group fragments. This is much clearer
                now: Fragments and P-only and N-only monomers are identified by 
                name only:
                
  // These masks are only used for P-only and N-only polymers
  // or cases where there are so few atoms that a monomer's type
  // cannot be determined by checking actual atoms and connections.
  // They are used for NucleicMonomer or AminoMonomer classes only as 
  // a last resort.
  //
  //             I  A G        
  //   purine:   100101 = 0x25
  
  //              UT C
  // pyrimidine: 011010 = 0x1A
  //
  //            +IUTACGDIUTACG IUTACG
  //        rna: 110000 000000 110111 = 0x30037
  
  //            +IUTACGDIUTACG IUTACG
  //        dna: 001111 111111 001000 = 0x0FFC8
  

bug fix: SMILES recognizes atom name [*.CA] but not residue name [ALA.*]
bug fix: Jmol BioSMILES broken

bug fix: set cartoonLadders with phosphorus-only polymers crashes Jmol

bug fix: protein and nucleic are not set properly for non-monomer groups (Eric Martz)
 -- broken in Jmol 14.3.11 (12/13/2014)  
 -- general definition of protein is from having CA, C, and N. But there
    are situations where we know it is protein from its group name (ALA,LEU..)
    despite the fact that it is just one atom. Same for nucleic.
 -- note that non-canonical (HETERO) amino acids or nucleic bases that do not have
    the requisite atoms to identify them as such will still not test positive for 
    "protein" or "nucleic". 

JmolVersion="14.3.16_2015.08.21"

bug fix: Tools...Spectra...JSpecView broken

JmolVersion="14.3.16_2015.08.21"

new feature: load var x 
  -- same as load "@x"
  -- similar in syntax to write var x t.png
  -- example:
  
  var x = load("quartz.cif")
  load var x {1 1 1}
  
bug fix: creating and running and saving binary hash from PNGJ fails
  -- allows creating an associative binary array from a PNGJ file
     then modifying it and loading that variable
     then saving it as a new PNGJ file
  -- initial PNGJ file is not necessary if binary array x is created by some other means
  -- example:
  
      var x = load("test.png",true)
      load "@x"
      write test2.png as PNGJ
      
bug fix: hover callback is not supposed to be stopped with HOVER OFF
bug fix: atom.sx and atom.sy and atom.sz report incorrectly when antialiasing is on
bug fix: write VAR x "test.png" creates a ZIP file instead of a PNGJ file when x is from load("test.png",true)
bug fix: write test.png as PNGJ (without initial quotes) fails

JmolVersion="14.3.16_2015.08.19"

bug fix: PyMOL reader does not load surface from PNGJ file
bug fix: PDB reader can skip assignments of secondary structure after first structure loaded during session

JmolVersion="14.3.16_2015.08.18"

bug fix: PyMOL reader not reading "H69" as "helix" (RGS-Ga_8pdb_structures_aligned_S90_20.5.15.pse)
bug fix: PyMOL labels offset in Y direction (down.pse) see http://noys3.weizmann.ac.il/a2jb/browse
bug fix: PyMOL session with isosurface cannot be read from state 
known bug: RGS-Ga_8pdb_structures_aligned_S90_20.5.15.pse has two frames; showing frame 2 with no displayed atoms

JmolVersion="14.3.16_2015.08.17"

bug fix: select %? not working
bug fix: select ^? not working
  

JmolVersion="14.3.16_2015.08.17"
released

bug fix: PDB reader cuts off long titles.
bug fix: slab setting by wheel can be unintentional
bug fix: wheeling slab could run range unintentionally way too high or low

new feature: slab/depth setting.

  -- these enable wheel actions
  
    bindAction(SINGLE|CTRL|WHEEL, ActionManager.ACTION_wheelZoom);
    bindAction(SINGLE|SHIFT|WHEEL, ActionManager.ACTION_wheelZoom);
    bindAction(SINGLE|CTRL|SHIFT|WHEEL, ActionManager.ACTION_wheelZoom);
    
  -- these enable slab-wheel actions
  
    bindAction(SINGLE|CTRL|WHEEL, ActionManager.ACTION_slab);
    bindAction(SINGLE|SHIFT|WHEEL, ActionManager.ACTION_depth); 
    bindAction(SINGLE|CTRL|SHIFT|WHEEL, ActionManager.ACTION_slabAndDepth);


JmolVersion="14.3.16_2015.08.16"

run up to full documentation
 
JmolVersion="14.3.16_2015.08.15"

new feature: xxx.array
 -- forces xxx if xxx is already an array, otherwise returns an array created from xxx.
 -- matrix3f and matrix4f are converted to standard 3x3 or 4x4 arrays; others are returned as [ xxx ].
 -- can be used to force an array where a string or other single value will be returned.
 -- particularly useful to force an array from a bitset operation that is evaluated for one atom.
 -- example:
     
       print {altloc=='A'}.sort  # causes an error if {altloc="A"} is one atom
       print {altloc=='A'}.array.sort # forces an array [ "A" ]  
 
bug fix: x.array.pivot returns "NaN" for empty array -- should return an empty associative array

JmolVersion="14.3.16_2015.08.14"

bug fix: label "3%"  reads "3null"
bug fix: {*}.label = ... resets offsets, fonts, and alignment
bug fix: label "3%%" is saved in the state as "3%"
 
JmolVersion="14.3.16_2015.08.13"

released

JmolVersion="14.3.16_2015.08.12"

released - but a bad build

bug fix: set labeloffset 4 4  (specifically) just centers label
bug fix: var b = a..B  fails (found by Rolf Huehne)
  -- non-lower-case associative array name same as user variable name 
     turned into lower case and then looked up as a["b"] instead of a["B"], so not found

bug fix: show xxx (variable) broken in 4.3.15_2015.06.13          

JmolVersion="14.3.16_2015.08.11"

released

bug fix: a = {*}.label("%[xxx]") does not work.
bug fix: "".format([a,b]) crashes Jmol

new feature: load  filter "addBonds"
 -- processes _struct_conn records
 -- inter-group connections only
 -- includes _struct_conn bond types:
		covale           covalent bond
		covale_base      covalent modification of a nucleotide base
		covale_phosphate covalent modification of a nucleotide phosphate
		covale_sugar     covalent modification of a nucleotide sugar
		disulf           disulfide bridge
		metalc           metal coordination
 -- ignores _struct_conn bond types: 
		hydrog  hydrogen bond
		mismat  mismatched base pairs
		modres  covalent residue modification
		saltbr  ionic interaction
 
new feature: load *1crn*
 -- loads PDBe "updated" CIF files to allow CONECT-like bond creation
 -- for example, http://www.ebi.ac.uk/pdbe/static/entry/1h68_updated.cif
 -- suitable replacement for PDB CONECT
 -- processes _chem_comp_bond and _struct_conn categories
 -- presence of _chem_comp_bond will process _struct_conn as well, regardless of filter "addbonds"
      (because _chem_comp bonds are only intra-group, and for full CONECT-like behavior, we need all bonds)
 
JmolVersion="14.3.15_2015.08.09"

bug fix: CML reader can fail (e.g. nsc244a.cml)

code: refactoring of JmolDataManager

JmolVersion="14.3.15_2015.08.08"

new feature: atom property "monomer" same as %g
new feature: atom property "seqcode" same as %r
new feature: load "test.pdb" from write property atomno temperature now restores values for atomno and temperature for points on plot 

bug fix: label %g does not indicate group index in chain
bug fix: JSmol does not recognize label %W %g %r %O etc. with single digits where there is no %[xxx] equivalent

bug fix: "print stateVersion" not reporting as documented. 
bug fix: write property atomno temperature "test.pdb" does not preserve long residue names from CIF files or long atom names from other file types 

JmolVersion="14.3.15_2015.08.06"

bug fix: stereo setting should not be saved in state. 
  -- though saved, it was not by default set to normal,
  -- thus influencing later loads.
  
bug fix: STEREO not implemented in JavaScript

new feature: STEREO DTI
  -- left/right dual panel, as just STEREO
  -- compresses width by 50% for DTI mode (Dimension Technologies, Inc.)
  
bug fix: calculate STRUTS broken for 3dfr, with peptide ligand MTX

JmolVersion="14.3.15_2015.08.01"

bug fix: SMARTS matching broken for [r5] ring designation
 
bug fix: reference to functions as commands requires lower case:
  -- for example:  
  function F(a){ print a }
  F("test") // OK
  f("test") // OK
  f "test"  // OK
  F "test"  // fails
  

JmolVersion="14.3.15_2015.07.30b"

bug fix: JavaScript deletion of array elements fails for int[] arrays.

JmolVersion="14.3.15_2015.07.30"

new feature: set multipleBondBananas TRUE
  -- displays multiple bonds as banana bonds
  -- does not carry over after model loading
  
new feature: set multipleBondSpacing 0.15; set multipleBondRadiusFactor -1.0
  -- positive number for spacing but negative for radiusFactor rotates fixed multiple bonds 90 degrees.

bug fix: magnetic spin vectors do not render properly (broken in 14.3.13_2015.05.12)

JmolVersion="14.3.15_2015.07.29"

new feature: [Font] button added to ScriptEditor

bug fix: config 2 and  select config=2 may not work properly (still)
bug fix: minimization of PCl4 (==PC4) does not auto-switch to UFF from MMFF94 (bond key not set)

FEATURE CHANGE: javajs.awt.Dimension dependency removed from JmolViewer and JmolStatusListener interfaces
  -- changed to int[]
 
JmolVersion="14.3.15_2015.07.22"

bug fix: config 1  does not work; listing is not complete. 

JmolVersion="14.3.15_2015.07.11"

bug fix: format("%5.-5i") broken -- only shows right  four  digits if # digits is 5. 
bug fix: write PDB broken for some systems (14.3.12)

JmolVersion="14.3.15_2015.07.09"

released as 14.2.15_2015.07.09


bug fix: load "xxx" 1 {10 10 10} does not recognize lattice information when model number is given (broken in 07.07)

JmolVersion="14.3.15_2015.07.08c"

bug fix: load files "xxx.png|xxxx" "xxx.png|zzzz"  not read from state properly
bug fix: polyhedra not saved in state property
bug fix: moving atoms with 4x4 matrix not saved in state
bug fix: moving of an atom having a polyhedron fails to move the polyhedron as well


new feature: smiles2.find("SMILES",smiles1, asMap, allMappings)
  -- asMap = TRUE (default false) indicates you want an atom 
     correlation map indicating positions in smiles2 corresponding to smiles1 
  -- allMappings = TRUE (default false) indicates you want 
     all mappings, not just the first found 
  -- returns a number, -1, 0, n>0 when asMap is false (allMappings ignored)
  -- returns int[] when allMappings is false
  -- returns int[][] when allMappings is true  
  -- example:
    var s1 = atom1.polyhedron.getProperty("SMILES")
    var coords = atom2.polyhedron.getProperty("vertices")
    var s2 = atom2.polyhedron.getProperty("SMILES")
    var coords2 = atom2.polyhedron.getProperty("vertices")
    var map12 = s2.find("SMILES", s1, true, false)
    var coords2Mapped = []
    for (var i in map12) coords2Mapped.push(coords2[i + 1]) 
    coords2 = coords2Mapped
    var mat = compare(coords1, coords2)
    select {1.1}
    rotateselected @mat
    
JmolVersion="14.3.15_2015.07.07c"

bug fix: x.getProperty("[select name where composition[1] == 0.5]")
 -- the [ there is tripping us up. True, ..1 could be used instead as well.

JmolVersion="14.3.15_2015.07.07b"

bug fix: 2015.07.06 breaks text writing in JSmol
bug fix: Crystal reader cannot handle   TOTAL ENERGY CORRECTED... line

new feature: JSmol  Jmol._persistentMenu = true 
 -- allows menu to persist and not be removed
 
new feature: JSmol  
sets a place on the page for the JSmol console. new feature: load xxx filter "latticeScaling=1.2" -- scales model based on a crystal lattice -- allows volume matching for crystal comparison bug fix: SMARTS processing with "." may not find substructure JmolVersion="14.3.15_2015.07.03" bug fix: mmCIF reader does not recognize load MODEL ... bug fix: PDB reader should be reading load "" [1 3 4] as MODEL record numbers, not sequential numbers bug fix: load MODELS "" [1 3 4] does not work (although load "" [1 3 4], without with MODELS keyword, works) clarification: load "" 1 # loads the first model in a file when not PDB or mmCIF. load "" 1 # loads the model with MODEL 1 record for a PDB file. load "" 1 # loads the model with _atom_site.pdbx_PDB_model_num = 1 for an mmCIF file load "" [1] # same as load "" 1; brackets allow for more than one model, for instance [1 3 5] load MODELS ({1}) "" # always loads the SECOND model in a file JmolVersion="14.3.15_2015.06.30" bug fix: POVRay and VRML exporters mishandle label backgrounds bug fix: exports not handling rockets correctly JmolVersion="14.3.15_2015.06.19c" bug fix: 1/{a b c} gives 0, not 1/length({a b c}) JmolVersion="14.3.15_2015.06.19b" new feature: MACRO command -- runs predefined script, generally defining new functions of general use -- contributions welcome! -- will be expanded $ macro aflow running http://aflowlib.mems.duke.edu/users/jmolers/jmol/spt/AFLOW.spt aflowLoad(binaryAlloy) loaded aflowBinaries loaded aflowDualArray(binaryAlloy, a, b) loaded aflowDualWrite loaded aflowConvexHull(binaryAlloy) loaded aflowCheckBinary(binaryAlloy) loaded aflowGetPG(binaryAlloy, a, range1, range2,radius) loaded $ aflowLoad("AgAu") 294 models $ print aflowConvexHull { "Cb" : 0.0 "Hf_eV_VASP" : 0.0 "modelNumber" : 2 } { "Cb" : 0.25 "Hf_eV_VASP" : -0.0472733 "modelNumber" : 26 } { "Cb" : 0.5 "Hf_eV_VASP" : -0.085589 "modelNumber" : 180 } { "Cb" : 0.75 "Hf_eV_VASP" : -0.0463823 "modelNumber" : 25 } { "Cb" : 1.0 "Hf_eV_VASP" : 0.0 "modelNumber" : 260 } bug fix: AFLOW binary file reader can fail with certain VASP formats containing both in-line atom labels and atom elements prior to #elements line. (AlPd#5, for example) JmolVersion="14.3.15_2015.06.19" new feature: pt.distance(plane,ptRef) -- returns a negative distance if pt and ptRef are on different sides of the plane -- useful for constructing 3D convex hulls and polyhedra, where all points must be on the same side of all planes new feature: removing empty array values using array.find() and opposite using array.find("") -- "empty" means an entry that is "", [], or {} -- for example: print [0 3 4 "" 5 {} [] 6].find() [0 3 4 5 6] print [0 3 4 "" 5 {} [] 6].find("") [ "" {} [] ] bug fix: msCIF reader can hang if occupancy is not fractional bug fix: JSmol applet not returning full set of parameters in animFrameCallback bug fix: load FILL command can fail if base unit cell is not part of the needed set for the specified volume JmolVersion="14.3.15_2015.06.18" new feature: polyhedra ONLY new feature: calculate symmetry POLYHEDRA -- sets values for ShapeInfo.Polyhedra.smiles, .smarts, and .pointGroup bug fix: wireframe ONLY (RESTRICT) executes polyhedral DELETE instead of OFF bug fix: Polygons not indicating visibility when they are the only thing visible. bug fix: x[++y] did not increment y. x[y++] and other contexts were fine JmolVersion="14.3.15_2015.06.17" new feature: extracting array of sequential arrays from array of associative arrays -- pull out just the values desired into a sequential array -- example, where b is an array of associative arrays [....., energy:..., pointGroup....] print b.format(["energy", "pointGroup"]) new feature: array of sequential arrays formatting using array.format("format") -- example energy_pg = b.format(["energy", "pointGroup"]) print energy_pg.format("%5.3f\t%5s") new feature: associative array binning: -- creates a pivot table of the bins -- adds keys "_bin", "_binMin", and "_binMax" to the initial array -- example: load "AgAu.aflow_binary" polyhedra 4-24 3.65 unitcell translucent 0.2 m = _("aflowInfo[Select modelNumber where Cb=0.5]") b = {@1 and model=m}.polyhedra.all.getProperty("[select energy,pointGroup,modelNumber"); c = b.bin(-0.1,0.1,0.02,"energy") print b.format(["energy", "pointGroup"]).sort(1).reverse.format("%5.3f %5s") new feature: polyhedra highlight with select ON or set selectionHalos ON new feature: getProperty("ShapeInfo.polyhedra") includes keys atomIndex atomNumber center energy // from model auxiliaryInfo _m.Energy, if available faceCount faces modelIndex modelNumber smarts smiles vertexCount vertices new feature: polyhedra properties "smiles" and "smarts" -- uses JmolSMILES, extending SMILES for periodic structures -- smiles is a SMILES string for the polyhedron, not including its center atom. -- smarts is smiles but replacing atom descriptors with * -- can be searched for using x = polyhedron(s) where s is SMILES or SMARTS new feature: polyhedron(smiles) new feature: polyhedron(smarts) -- searches for a polyhedron (which must be already present) matching the given SMILES -- for example: // load a set of binary alloy structures load "AgAu.aflow_binary" // generate all polyhedra on the first atom of each model select @1 polyhedra 4-24 3.65 unitcell translucent 0.2 // find all SMARTS codes for 12-vertex polyhedra; taking the first x= polyhedra(12).polyhedra.all.getProperty("smarts")[1] // find central atoms for all similar polyhedra y= polyhedra(x) // get their model numbers print y.model.all z= y.model.all // make the current frame set just those models frame @z -- not fully worked out new feature: array.getProperty("xxxx") -- same as getproperty(array, "xxxx") -- drills down into an array of associative arrays to get sublist -- can be used with [SELECT ... WHERE] bug fix: ++x and x++ do not increment properly when in expressions // no problem here because it is compiled as "x = x + 1" x = 0 x++ print "x should be 1 " + x // x does not increment, but the test passes x = 0 if (++x) { print "good" } print "x should be 1 " + x // x does not increment, but the test passes ("bad" is not printed) x = 0 if (x++) { print "bad" } print "x should be 1 " + x x = 0 // works x++ // y is OK, but x does not increment y = x++ print "x should be 2 " + x x = 0 // z is OK, but x does not increment z = ++x print "x should be 1 " + x // result: x should be 1 1 good x should be 1 0 x should be 1 0 x should be 2 1 x should be 1 0 JmolVersion="14.3.15_2015.06.16" bug fix: msCIF reader failing for Legendre polynomials of order greater than 4 -- JavaScript fix for new double[m + 1][] -- must use AU.newDouble2(m + 1); JmolVersion="14.3.15_2015.06.14c" bug fix: var firstPARAM = "p1_b"; x = [FIRSTParam: "p1_a"]; results in lowering of case as [firstparam:....] bug fix: set drawPicking draw;set drawpicking does not show handles bug fix; point group not calculated when the selected atoms are a subset of a model bug fix: x.find("SMILES") is incorrect for structures that have hypervalent atoms and branches such as inorganic nitrates bug fix: msCIF reading with two models, and only one has displacement modulation causes "render error" crash bug fix: msCIF reader failing for Legendre polynomials of order greater than 4 bug fix: DRAW for quadrilateral broken when perspective depth is turned off. bug fix: SET ECHO IMAGE broken in JavaScript version feature note: This version introduces several very powerful and very different capabilities to Jmol in the area of crystallography. Many of these features are nonexistent in other programs. They involve: - an extension of SMILES to compare bonding topology irrespective of atom identity. (Are these two atom environments both iscoahedral?) x = {@1 and 1.1 and connected(@1)}.find("SMILES", "*"} y = {2.1}.find("SMARTS", x) - the generation of polyhedra in crystal structures for which only the central atom may be loaded. (What is the atom environment around Au3 in this crystal structure?) load t.cif // just the unit cell, maybe just one atom even polyhedra 4-12 UNITECELL @1 - the ability to load a given block of space (such as a 10x10x10-Angstrom cube) with a crystal structure irrespective of its given unit cell. (Are these two structures that have totally different unit cells really that different?) load t.cif FILL load t.cif FILL 20 load t.cif FILL {20 10 10} load t.cif FILL [{0 0 0} {5.2 5.2 0} {-5.2 5.5 0} {1.3 0 3.3}] - the ability to show and draw the point group of a polyhedron load t.cif polyhedron 12 unitcell @1 select @1 show pointgroup POLYHEDRON draw pointgroup POLYHEDRON - the ability to extract information about polyhedra print getProperty("shapeInfo.polyhedra[1]").keys _ipt center modelIndex planeCount polygons vertexCount vertices - the ability to select polyhedra select polyhedra select polyhedra(4) print polyhedra() print polyhedra(4) - the ability to draw points from derived arrays draw diameter 0.2 points @{getProperty("shapeInfo.polyhedra[1].vertices")} new feature: POLYHEDRA 12 UNITCELL -- creates a polyhedron (12-gon in this case) around each of the currerntly selected atoms that has that bonding environment -- DOES NOT require atoms at these positions - can simply use the unit cell and periodicity to find the relevant atom positions. -- will check bonding as necessary using autobonding parameters -- accepts all standard polyhedra options. For example: polyhedra 12,16 3.5 UNITCELL new feature: POLYHEDRA 4-16 -- allows a range of unit cell bonding patterns. -- in this case, same as 4,5,6,7,8,9,10,11,12,13,14,15,16 polyhedra 4-16 3.5 UNITCELL new feature: getProperty shapeInfo.polyhedra print getProperty("shapeInfo.polyhedra[1]").keys _ipt center modelIndex planeCount polygons vertexCount vertices new feature: draw POINTS [ array of points ] draw diameter 0.2 points @{getProperty("shapeInfo.polyhedra[1].vertices")} new feature: show pointgroup POLYHEDRON -- uses points from the polyhedron of the first selected atom -- recommended to use specific atom reference in POLYHEDRA command: select @21 polyhedron 3.5 UNITCELL show pointgroup polyhedron $ show pointgroup polyhedron # 13 atoms Oh Ci {2.1020985 -4.3122215 2.1430104} Oh nC4 3 2 Oh C4_1 {0.99993926, -0.007795072, 0.0077921236} Oh C4_2 {7.8514034E-7, -0.9997856, -0.020707628} Oh C4_3 {7.619045E-7, 0.009661385, -0.9999533} Oh nC3 4 2 Oh C3_1 {-0.58944535, 0.5712053, 0.57120806} Oh C3_2 {-0.58944565, -0.5712049, -0.57120824} Oh C3_3 {-0.5824926, -0.58349025, 0.5658989} Oh C3_4 {0.5764604, -0.5864354, 0.5690228} Oh nC2 9 1 Oh C2_1 {0.7004682, -0.71362424, -0.0092081865} Oh C2_2 {0.7004673, 0.009209763, 0.7136251} Oh C2_3 {0.99993926, -0.007795072, 0.0077921236} Oh C2_4 {-0.70046806, -0.71362436, -0.009208187} Oh C2_5 {-8.22445E-7, 0.7071046, -0.707109} Oh C2_6 {7.8514034E-7, -0.9997856, -0.020707628} Oh C2_7 {0.7056006, -0.019795598, -0.70833325} Oh C2_8 {7.619045E-7, 0.009661385, -0.9999533} Oh C2_9 {5.440252E-7, 0.70734024, 0.7068733} Oh nS6 4 2 Oh S6_1 {-0.58944535, 0.5712053, 0.57120806} Oh S6_2 {-0.58944565, -0.5712049, -0.57120824} Oh S6_3 {-0.5824926, -0.58349025, 0.5658989} Oh S6_4 {0.5764604, -0.5864354, 0.5690228} Oh nS4 2 2 Oh S4_1 {0.99993926, -0.007795072, 0.0077921236} Oh S4_2 {7.619045E-7, 0.009661385, -0.9999533} Oh nCs 9 1 Oh Cs_1 {0.0, 0.7071068, -0.7071067} Oh Cs_2 {0.0, -0.7071068, -0.7071068} Oh Cs_3 {0.007949507, 0.020366998, -0.999761} Oh Cs_4 {0.007952394, 0.999761, -0.020367} Oh Cs_5 {1.0, 0.0, 0.0} Oh Cs_6 {0.7030396, 0.014484465, 0.71100324} Oh Cs_7 {0.7030395, 0.71100324, 0.014484464} Oh Cs_8 {0.70023495, -0.008727634, -0.7138592} Oh Cs_9 {0.7030395, -0.71100324, -0.014484464} Oh type nType nUnique Oh E 1 1 Oh Ci 1 1 Oh Cs 9 9 Oh Cn 16 23 Oh Sn 6 12 Oh TOTAL 46 -- displays a table showing point group information. -- notice that not all the operators may be found because of settings of set pointGroupDistanceFactor 0.2 being too tight a restriction. new feature: draw POINTS new feature: draw POLYGON -1 -- these two are identical; POINTS is a bit nicer. load "file:/C:/temp/aflow/binary/AgCd.aflow_binary" 20 //filter "ca=0.5;nopack" select @1 & 1.1 polyhedra 4-16 3.7 unitcell x = within(4, true, "unitcell", {selected}) print x; draw width 0.2 points @{x["points"]} color red mesh nofill translucent new feature: select POLYHEDRA -- selects central atoms of any atoms having polyhedra. new feature: select polyhedra(4) -- selects central atoms of any atoms having tetrahedral polyhedra. new feature: x.find("SMILES","*") -- creates a topology SMILES, involving just * and connections -- does not include stereochemistry -- allows comparison of connection patterns without respect to any other consideration. -- can be used to check equivalences in inorganic crystal structures. code: SMILES code cleaned up. code: most image loading is now asynchronous. (Not BMP, not from PNGJ files with "|" in filename) code: introducing interfaces to allow less use of @j2sNative and more traceability of method calls in Eclipse bug fix: polyhedra broken for number of vertices > 6. -- needed smaller default distanceFactor (set to 1.5; formerly 1.85) -- this setting is for any code: to be released 6/11/15 JmolVersion="14.3.14_2015.06.10c" bug fix: "transparent" PNG images as echos in front still hide pixels code : PNG images with partial transparency are not supported. They COULD be supported, but currently the rendering is in the first pass, but it could be in a later pass. code: g3d.ImageRenderer removed; code moved to g3d bug fix: GaussianDialog fails to write element symbols bug fix: animation buttons go to wrong first frame for FRAME [3 2 1] bug fix: JSmol set echo IMAGE not working properly (Frieda Reichsman) new feature: {atomset}.bondcount({atomset2}) -- counts bonds to a specific set of atoms -- result is an array new feature: [array].pivot -- creates a pivot table using strings, integers, or floats -- result is a hash for which the keys are $ print {*}.label("%a").pivot { "Ag" : 1561 "Cd" : 1360 } $ load $caffeine $ print {_N}.bondCount({_C}) 3 3 2 3 $ print {_N}.bondCount({_C}).pivot { "2" : 1 "3" : 3 } $ JmolVersion="14.3.14_2015.06.08" new feature: [Font] button added to Console _ by itself, not as a function, is shorthand for getProperty("auxiliaryInfo") $ print _.keys boundbox group3Counts group3Lists modelLoadNote models properties someModelsHaveFractionalCoordinates someModelsHaveSymmetry someModelsHaveUnitcells symmetryRange _m by itself, not as a function, is shorthand for getProperty("auxiliaryInfo.models")[_currentFrame] $ print format("json",_m.unitCellParams) [ 0.0,0.0,0.0,0.0,0.0,0.0,0.0,-2.1660376,-2.1660376,0.0,-2.1660376,2.1660376,-4.10273,0.0,0.0,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN ] {atomset}._ by itself delivers a subset array of auxiliaryInfo.models for all models in {atomset} $ print {*}._..1..aflowInfo (first model's aflowInfo) _(key) prepends "auxiliaryInfo.models", delivering a modelCount-length array of information $ print _("aflowInfo[SELECT auid WHERE H__eV___VASP_ < 0]") {atomset}._(key) selects for model Auxiliary info related to models of the specified atoms {atomset}.getProperty(key) defaults to atomInfo, but also allows key to start with "bondInfo" Examples: print _("aflowInfo[select sg where volume_cell > 70]") print {model>10}._("aflowInfo[select sg where volume_cell > 70]") bug fix: [array].find("xxx") should always return a sub-array; previously if there was only one hit, it returned that hit bug fix: [array].find("xxx") should not return string equivalent even if it uses that in the find. JmolVersion="14.3.14_2015.06.07" new feature: _m.xxx _m shortcut for @{getProperty("auxiliaryInfo.models[]")} -- much easier syntax for getting auxiliary information -- was not available, so this was not easily determined -- for example - a dynamic echo with model-specific info that changes when the frame is changed set echo top center echo "@{_m.modelNumber} new feature: _.currentModelIndex _ shortcut for @{getProperty("auxiliaryInfo", "")} -- much easier syntax for getting auxiliary information new feature: new feature: {*}.getProperty("atomInfo.xxx") alternative for getProperty("atominfo.xxx", {*}) new feature: {*}.getProperty("xxx") same as {*}.getProperty("atomInfo.xxx") new feature: {*}.getProperty("bondInfo.xxx") alternative for getProperty("bondinfo.xxx", {*}) new feature: {*}._(...) same as {*}._getProperty(...) -- note that {*}.getProperty was present but undocumented and not useful bug fix: Console should be checking scripts after space-bar is pressed. bug fix: script checking should not trigger screen refresh code: refactoring of vi ewer.JC for label/echo business new feature: set labeloffset range expanded to [-500,500] new feature: set labelOffsetAbsolute x y -- was undocumented as "set labelOffsetExact" but used in state (still available) -- sets label to specific value; same as set labelOffset, but allows 0 in x or y -- range [-500,500] bug fix: dragging labels not working properly bug fix: axisAngle (javajs.util.A4) not resetting angle to 0 --> wrong default orientation saved to state immediately after RESET (broken in 14.1.6_dev_2014.01.16c) JmolVersion="14.3.14_2015.06.05" new feature: load "...." FILL BOUNDBOX new feature: load "...." FILL UNITCELL new feature: load "...." FILL [o va vb vc] new feature: load "...." FILL [o vabc] new feature: load "...." FILL -- loads a crystal structure such that a given volume is packed -- volume can be the current boundbox or the current unitcell -- can specify origin and a,b,c vectors or origin and diagonal vector -- no parameters --> {0 0 0} {10 10 10} -- when not a crystal, just loads this model with the specified boundbox -- simplification of initial idea (6/4/2015) JmolVersion="14.3.14_2015.06.04" new feature: _argCount, _arguments for functions and scripts new feature: _caller for functions -- a hashtable of local VARs defined in the calling function -- note that _caller._caller is not valid. But you can define var caller = _caller and then that will be exposed to the next level of function calls. Or you could use use it as a parameter: function xx() { .... yyy(_caller) ... given t.spt: function showme(a,b,c) { var x = "showme" print "c._arguments =" + (c ? format("json",c._arguments) : "") print "_argCount = " + _argCount + "\nx = " + x print "_caller.x = " + _caller.x print "_caller.caller.x = " + _caller.caller.x print "_arguments = " + format("json", _arguments) print " " } var x = "scriptlevel" var caller = {} showme(1) function show2() { var x = "show2" var caller = _caller showme(5,6,_caller,7,8,9) } show2(4) $ t.spt("testing" ,"here") c._arguments = _argCount = 1 x = showme _caller.x = scriptlevel _caller.caller.x = _arguments = [ 1 ] c._arguments = [ "testing","here" ] _argCount = 6 x = showme _caller.x = show2 _caller.caller.x = scriptlevel _arguments = [ 5,6,{ "x": "scriptlevel","caller": { },"_arguments": [ "testing","here" ] },7,8,9 ] JmolVersion="14.3.14_2015.06.03" new feature: AFLOW binary alloy file reader centers unit cells in all frames at the same point new feature; AFLOW binary alloy file reader can filter "list=xx" to produce a list of values start with xx. load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "list=Hf_a" new feature: AFLOW binary alloy file reader selective for a given composition: load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "Ca=0.5" new feature: AFLOW binary alloy file reader reading -- DATA -- block into associative arrays: load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed print getProperty("auxiliaryInfo.models.aflowInfo['Hf_atom (VASP)']") bug fix: [SELECT ... WHERE ...] can fail with spaces or [ ] in key names. For example: print getProperty("auxiliaryInfo.models.aflowInfo[SELECT Cb,\"Hf_atom [eV](VASP)\" WHERE Cb > 0.4 and Cb< 0.6]") The call to the AFLOWLIB API to do this in Jmol involves forcing use of the POST method. The following link will work only in Jmol: http://aflowlib.mems.duke.edu/php/apool.php?POST?job=awrapper_apool&lattice=all&alloy=AgAu Notice that when Jmol reads these files, it automatically catalogs the models along the lines of composition, and it translates their unit cells to be on a common center from frame to frame. Using a local file, requesting a listing of Hf_atom: load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "list=Hf_a" FileManager opening 1 file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binaryThe Resolver thinks AFLOWfiltering with ;LIST=HF_A;[AgCd] REFERENCE: S. Curtarolo, W. Setyawan, S. Wang, J. Xue, K. Yang, R. H. Taylor, L. J. Nelson, G. L. W. Hart, S. Sanvito, M. Buongiorno Nardelli, N. Mingo, and O. Levy, AFLOWLIB.ORG: a distributed materials properties repository from high-throughput ab initio calculations, Comp. Mat. Sci. 58, 227-235 (2012). [AgCd] REFERENCE: S. Curtarolo, W. Setyawan, G. L. W. Hart, M. Jahnatek, R. V. Chepulskii, R. H. Taylor, S. Wang, J. Xue, K. Yang, O. Levy, M. Mehl, H. T. Stokes, D. O. Demchenko, and D. Morgan, AFLOW: an automatic framework for high-throughput materials discovery, Comp. Mat. Sci. 58, 218-226 (2012). [AgCd] REFERENCE: S. Curtarolo, D. Morgan, and G. Ceder, Accuracy of ab-initio methods in predicting the crystal structures of metals: review of 80 binary alloys, Calphad 29, 163-211 (2005). AgCd 0.00000000000000 11 Hf_atom [eV] (VASP) 0.0 AgCd 0.04347826086957 1 Hf_atom [eV] (VASP) 0.0870304 AgCd 0.07142857142857 1 Hf_atom [eV] (VASP) 0.15737298 AgCd 0.11111111111111 1 Hf_atom [eV] (VASP) -0.011088 AgCd 0.12500000000000 1 Hf_atom [eV] (VASP) -0.027350498 AgCd 0.16666666666667 7 Hf_atom [eV] (VASP) -0.037070002 AgCd 0.17241379310345 1 Hf_atom [eV] (VASP) 0.020694898 AgCd 0.20000000000000 9 Hf_atom [eV] (VASP) -0.0460172 AgCd 0.25000000000000 30 Hf_atom [eV] (VASP) -0.056237496 AgCd 0.33333333333333 42 Hf_atom [eV] (VASP) -0.0609502 AgCd 0.37500000000000 3 Hf_atom [eV] (VASP) -0.0589556 AgCd 0.40000000000000 12 Hf_atom [eV] (VASP) -0.0618938 AgCd 0.41379310344828 1 Hf_atom [eV] (VASP) 0.00122355 AgCd 0.42857142857143 2 Hf_atom [eV] (VASP) -0.037301403 AgCd 0.44444444444444 2 Hf_atom [eV] (VASP) -0.0335542 AgCd 0.46153846153846 1 Hf_atom [eV] (VASP) -0.0150388 AgCd 0.50000000000000 46 Hf_atom [eV] (VASP) -0.068898305 AgCd 0.53846153846154 1 Hf_atom [eV] (VASP) 0.0721082 AgCd 0.55555555555556 2 Hf_atom [eV] (VASP) -0.033519298 AgCd 0.57142857142857 2 Hf_atom [eV] (VASP) -0.0333517 AgCd 0.58620689655172 1 Hf_atom [eV] (VASP) -0.0124974 AgCd 0.60000000000000 12 Hf_atom [eV] (VASP) -0.047418 AgCd 0.61538461538462 1 Hf_atom [eV] (VASP) -0.06818979 AgCd 0.62500000000000 3 Hf_atom [eV] (VASP) -0.040674802 AgCd 0.66666666666667 42 Hf_atom [eV] (VASP) -0.0603182 AgCd 0.75000000000000 29 Hf_atom [eV] (VASP) -0.0485616 AgCd 0.80000000000000 9 Hf_atom [eV] (VASP) -0.0095262 AgCd 0.82758620689655 1 Hf_atom [eV] (VASP) 0.033198204 AgCd 0.83333333333333 7 Hf_atom [eV] (VASP) -0.025705501 AgCd 0.87500000000000 1 Hf_atom [eV] (VASP) 0.0031846298 AgCd 0.88888888888889 1 Hf_atom [eV] (VASP) 0.0286024 AgCd 0.92857142857143 1 Hf_atom [eV] (VASP) 0.114186 AgCd 0.95652173913043 1 Hf_atom [eV] (VASP) 0.065135606 AgCd 1.00000000000000 12 Hf_atom [eV] (VASP) 0.0 Time for openFile(file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary): 288 ms reading 24509 atoms 297 models Notice that I could have used a different listing key. You can load just a single composition by filtering with "Ca=x" load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "ca=0.5" [AgCd] REFERENCE: S. Curtarolo, W. Setyawan, S. Wang, J. Xue, K. Yang, R. H. Taylor, L. J. Nelson, G. L. W. Hart, S. Sanvito, M. Buongiorno Nardelli, N. Mingo, and O. Levy, AFLOWLIB.ORG: a distributed materials properties repository from high-throughput ab initio calculations, Comp. Mat. Sci. 58, 227-235 (2012). [AgCd] REFERENCE: S. Curtarolo, W. Setyawan, G. L. W. Hart, M. Jahnatek, R. V. Chepulskii, R. H. Taylor, S. Wang, J. Xue, K. Yang, O. Levy, M. Mehl, H. T. Stokes, D. O. Demchenko, and D. Morgan, AFLOW: an automatic framework for high-throughput materials discovery, Comp. Mat. Sci. 58, 218-226 (2012). [AgCd] REFERENCE: S. Curtarolo, D. Morgan, and G. Ceder, Accuracy of ab-initio methods in predicting the crystal structures of metals: review of 80 binary alloys, Calphad 29, 163-211 (2005). 46 models The file loader parses all the -- DATA -- information into arrays, so that can all be accessed using getProperty(). For example: print getProperty("auxiliaryInfo.models.aflowInfo['space group POST']") print getProperty("auxiliaryInfo.models.aflowInfo['Hf_atom [eV] (VASP)']") JmolSQL selectors can be used to select out specific records. print getProperty("auxiliaryInfo.models.aflowInfo[SELECT Cb,'Hf_atom [eV] (VASP)' WHERE Cb > 0.4 and Cb< 0.6]") Jmol adds two additional fields, "fileModelNumber" and "modelNumber": print getProperty("auxiliaryInfo.models.aflowInfo[SELECT modelNumber,Ca,'Hf_atom [eV] (VASP)' WHERE Cb > 0.4 and Cb< 0.6]") JmolVersion="14.3.14_2015.06.01b" bug fix: unncessary dialog with LOAD ? when using JSmol/HTML5 JmolVersion="14.3.14_2015.06.01" new feature: preliminary AFLOW AaBb binary file reader - see http://www.aflowlib.org/binary_alloys.php new feature: NBO cfi file writer - print data({*}, "cfi") bug fix: draw pointgroup also draw arrow broken bug fix: write("pdb") not returning string data and instead creating file "pdb" bug fix: VASP reader for in-line atom labels bug fix: measure pending dashed line does not appear JmolVersion="14.3.14_2015.05.25" release; synchronized with 14.2.14 JmolVersion="14.3.13_2015.05.23" bug fix: select conformation=1 broken for non-bio CIF data JmolVersion="14.3.13_2015.05.19" bug fix: CML reader not recognizing "fragment/join/fragment" sequence from http://www.xml-cml.org/schema/schema3/schema.xsd (Stuart Chalk) JmolVersion="14.3.13_2015.05.14" new feature: set contextDepthMax -- sets the maximum depth of contexts, including {}, if{} for{} while{} function{} as well as the SCRIPT command and a number of expression-related situations -- default 100 -- minimum 10 bug fix; 05.12 breaks Jmol.evaluate and Jmol.evaluateVar and print getProperty("variableInfo", exp) bug fix: using historyLevel = ... or scriptlevelMax = ... doesn't really set these bug fix: a number of settings have not been excluded from state scripts, which only should save critical information for the state, not general processing -- no longer saved in state -- no longer read using "set xxxxx" when that is in a state script -- includes: historylevel;imagestate;iskiosk;useminimizationthread; -- includes: showkeystrokes;saveproteinstructurestate;testflag1;testflag2;testflag3;testflag4 JmolVersion="14.3.13_2015.05.12" bug fix: re-entering functions loses if/else state bug fix: more issues with low-resolution linear-z index lines. Need to compromise for isosurfaces and nucleic cartoons and bonds -- which became very slow to render with precision Z placement. JmolVersion="14.3.13_2015.05.08" bug fix: BIND can cause fault bug fix: write "?" can cause fault when [x] box is pushed on window bug fix: set picking dragMolecule, set picking dragMinimizeMolecule, set picking dragLigand broken JmolVersion="14.3.13_2015.05.07" bug fix: x = plane(@1 @2 @3) fails bug fix: isolated bio groups such as AMP, which are not part of biopolymers, can result in crashes when colored or queried about their parameters (Hiroufmi Suzuki) bug fix: new JmolSQL ** feature needed a tweak JmolVersion="14.3.13_2015.05.06" new feature: JmolSQL "drilling" in associative arrays for sub arrays with a given property (Rolf Huehne) -- NOTE ADDED: replaced by WHEREIN in Jmol 14.3.16 -- uses "**" as the SELECT option, sort of the way ** sometimes means "subdirectories of" -- returns an associative array or "" if no match -- example: x = [key_1:[type:"a"],key_2:[type:"b"],key_3:[type:"a"]] z = getProperty(x, "[SELECT ** WHERE type='a']"); show z; z = { "key_1":{ "type":"a" },"key_3":{ "type":"a" } } JmolVersion="14.3.13_2015.05.05" bug fix: set structureModifiedCallback does not work with "JmolScript:...." JmolVersion="14.3.13_2015.05.03" new feature: for msCIF (modulated structure files), setting modulation or using vibration ON now also indicates occupancy changes bug fix: sawtooth and Legendre displacement modulations should set occupancy to 0 outside of their range. JmolVersion="14.3.13_2015.05.02" bug fix: color atoms property vxyz crashes Jmol if no vibrations bug fix: with msCIF, select subsystem=1 does not select anything bug fix: vibrations in trajectories not animating (14.3.6_2014.08.14) JmolVersion="14.3.13_2015.04.30d" bug fix: reading Molden file with no MOs crashes Jmol JmolVersion="14.3.13_2015.04.30c" bug fix: color $id [30 40 50] translucent 0.8 fails bug fix: Jmol.jar was requiring Java 1.7 bug fix: POV-Ray fixed for perspective and orthographic cameras using new z-depth formula. thanks: Many thanks to Laurent Proville for motivating me to look in this issue. JmolVersion="14.3.13_2015.04.29" bug fix: perspective renderer was using the wrong formula for calculating Z depth of pixels: * Note added 4/2015 BH: * * Well, it turns out that the calculation of the intermediate pixel z value * in all methods involving rasterization of lines is incorrect and has been * incorrect since Jmol's inception. I noticed long ago that large triangles such as * produced in DRAW could incorrectly overlay/underlay other objects, but I could * never determine why. It turns out that the assumption that z-value is linear * across a line when perspectiveDepth is TRUE is simply incorrect. * * Basically, the function z(x) is non-linear. Treating it as simply a * linear function results in oddities where lines and planes * -- particularly created using DRAW and large distances -- appear * to be where they are not. * * Through Jmol 13.3.13 we had the standard linear relationship: * * z = (x - xa) / (xb - xa) * (zb - za) + za * * I worked it out, and, amazingly, it should be * * z = (xb - xa) * za * zb / ((xb - x) * zb + (x - xa) * za) * * Note that it is still true that when x = xb, z = zb * and when x = xa, z = za, as required. * * This equation can be rearranged to * * z = a / (b - x) * * where * * a = (xb - xa) * za * (zb / (zb - za)) * * and * * b = (xb * zb - xa * za) / (zb - za) * * These values must be floats, not integers, to work properly, because * these are extrapolations from long distances in some cases. So there is * considerable overhead there. It will take some experimentation to figure this * out. * * The practical implications are for line, cylinder, and triangle drawing. * First-pass corrections are for axes and DRAW objects. They tend to be the * larger objects that result in the issue. * * Also affected is POV-Ray output, because right now POV-Ray is created using * perspective on and plotted as though it were orthographic, but although that * works in x and y, it does not work in z! * JmolVersion="14.3.13_2015.04.27" bug fix: with set dragSelected, highlight does not recognize whole molecule JmolVersion="14.3.13_2015.04.25" code: integration of changes made for SwingJS into JSmol code JmolVersion="14.3.13_2015.04.22" bug fix: loading mmCIF data in-line loses multi-character chain IDs bug fix: with set picking dragSelected with allowMoveAtoms FALSE and allowRotateSelected TRUE rotating the atoms with ALT-left ignores setting of allowMoveAtoms // see footnotes below for ^, #, *, and $ // // settings:^ set picking dragSelected set dragSelected // // move:# drag alt-shift-drag // rotate:#* alt-drag alt-drag // z-shift:# shift-drag (n/a) // // double-click:$ (starts measurement) (sets selected if set picking SELECT) // // ^ set picking dragSelected overrules set dragSelected // # all actions involve whole molecules unless set allowMoveAtoms TRUE // * rotate requires set allowRotateSelected TRUE // $ set dragSelected allows setting of a new molecule with double-click when set picking SELECT // $ set picking dragSelected allows measurements with double-click, as usual code: introduce use of (int... ) syntax in ActionManager simplifies logic JmolVersion="14.3.13_2015.04.17" bug fix: for in/from broken in 14.3.13_2015.04.05 -- entering a FOR loop with empty has pops {...} context one level too far, exiting functions JmolVersion="14.3.13_2015.04.12" code: refactoring PT.isAxxx to AU.isAxxx (array type testing) JmolVersion="14.3.13_2015.04.09b" feature update: EBI validation site updated from wwwdev.ebi to www.ebi -- for example, LOAD *1crn/val JmolVersion="14.3.13_2015.04.09" bug fix: MO calculation hanging when G orbitals are present JmolVersion="14.3.13_2015.04.08" bug fix: echo id myecho "testing" reports "myecho" instead of "testing" JmolVersion="14.3.13_2015.04.07" bug fix: Molden reader broken for Dalton2015 version JmolVersion="14.3.13_2015.04.05b" bug fix: language switching not working from popup menu; bug fix: language bundles not processed in the correct order for variants JmolVersion="14.3.13_2015.04.05" code: rewriting FOR loop code to enhance performance new feature: set showScript -1 -- turns off history (on when commands come from the keyboard) -- stops every-second JavaScript interruptions -- Caution! new feature: for (var i FROM [a, b]) {...} -- same as for (var i = a; i <= b; i++) when a < b -- same as for (var i = a; i >= b; i--) when a > b -- much more efficient bug fix: for (var i in hashArray) {....} broken (also in 14.2; not fixed there) JmolVersion="14.3.13_2015.04.02" bug fix: [3 4 5].min should give integer 3, not decimal 3.0 (same with .max) JmolVersion="14.3.13_2015.04.01b" bug fix: hash values created from named int variables do not clone properly bug fix: hash[key1]..key2.push() does not work properly bug fix: show hash where one of the elements is an empty hash ignores that key bug fix: local var xxx with same name of ..xxx forces lower case xxx JmolVersion="14.3.13_2015.04.01" bug fix: local var xxx with same name of foo..xxx forces lower case xxx new feature: draw polygon [@1 @2 @3...] -- fills polygon with triangles -- order is important -- must be cw or ccw -- does not have to be convex -- indeterminate result if atoms are not coplanar -- example: load $caffeine draw polygon [@5 @7 @12 @13 @1 @3] new feature: ".[a]" notation extended to x.. and allows mixing with .a. function a(){return 1} x = [A:[1,2,3], a:[4,5,6]] $ print x.a.[a()] 4 $ print x..a..[a()] 4 $ print x.a..[a()] 4 $ print x..a..[a()] 4 $ print x..a.[a()] 4 $ y = x.a[1][2]; show y y = [ 4,5 ] JmolVersion="14.3.13_2015.03.30" bug fix: {hash}.Key = value will be stored as "key" rather than "Key" if "key" is also a user-defined function. bug fix: {hash}.key will fail if "key" is also a user-defined function. bug fix: print a where a is an associative arrays fails in JavaScript (since jmol-14.3.7_2014.08.25) JmolVersion="14.3.13_2015.03.27" new feature: "." notation extended to x.[a] disambiguifies x[a][b][c]... allows for variables and expressions in "." notation i = 2 x = [1,[2 3 4 [5 6 7]],3] show x[2].[4].[i] ==> "6" x = [ 1,[ 2,3,4,[ 5,6,7 ],{ "testing":"now" } ],3 ] x[i + 1].[5].["testing"] = "again" show x ==> x = [ 1,[ 2,3,4,[ 5,6,7 ],{ "testing":"again" } ],3 ] JmolVersion="14.3.13_2015.03.25" bug fix: translate SELECTED {1 1 1} @1 not working (works fine without the SELECTED keyword) JmolVersion="14.3.13_2015.03.23" bug fix: isosurface solvent will fail if max volume is smaller than cavity max even though not cavity JmolVersion="14.3.13_2015.03.21" bug fix: JmolVersion="14.3.13_2015.03.20b" broke JSmol due to error in coding URL.js JmolVersion="14.3.13_2015.03.20b" bug fix: popup menu Symmetry broken bug fix: PDB reader does not save unit cell on simple load JmolVersion="14.3.13_2015.03.20" bug fix: use of {*}.xxxx = for(i;{*};....) fails JmolVersion="14.3.13_2015.03.19" bug fix: VASP chgcar surface reader fails to recognize 10-per-line file format JmolVersion="14.3.13_2015.03.16" bug fix: label xxxx does not calculate stringwidth properly; set labeloffset 0 incorrect JmolVersion="14.3.13_2015.03.13" released bug fix: fonts too small with antialiasDisplay (14.2.12) bug fix: PNG generation uses iTXt instead of tEXt; problems with diacritical marks (German translation of "March" month in creation time) JmolVersion="14.3.13_2015.03.11" bug fix; pdb and mmcif readers not doing biomolecule 2 properly bug fix: load filter "bychain" broken bug fix: x.a.push(6) does not work bug fix: (x.a).push(3) does not work bug fix: (x.a)[3] = 5 does not work JmolVersion="14.3.13_2015.03.10" new feature: print command by itself clears JavaScript and Jmol consoles new feature: color polyhedra red blue (edge color blue) bug fix: show state/xxxx does not work JmolVersion="14.3.13_2015.03.07" synchronized with 14.2.12_2015.03.07 bug fix: x[2] = y[2] fails new feature: NBO command with no arguments starts NBO panel (Java application only) JmolVersion="14.3.12_2015.03.05b" synchronized with 14.2.13_2015.03.05 bug fix: reading legacy mapped plane (2ptn-molecular_slice1.jvxl.txt) crashes Jmol JmolVersion="14.3.12_2015.03.05" synchronized with 14.2.13_2015.03.05 released bug fix: (14.3 only) write VRML|MAYA|OBJ|POVRAY broken JmolVersion="14.3.12_2015.03.01" bug fix: late discovery of mmCIF format does not load secondary structure bug fix: reading PNGJ file saved after load with /dssr or /rna3d annotations ignores annotations bug fix: {*}.find("~d~G:C") broken (find with bioSMARTS) new feature: image # the current view as an image new feature: image 300 400 # adjustable size new feature: image "c:/temp/t.bmp" # image from a file new feature: image "" close # close the current view image new feature: image "c:/temp/t.bmp" close # close image from a file new feature: image CLOSE # close all new feature: image ID ... -- id for IMAGE CLOSE; -- displayed in title of frame -- examples: image ID "test" image ID "test" 400 500 image ID "test" "bob.png" image ID "test" close new feature: write IMAGE -- same as IMAGE new feature: write IMAGE 500 500 -- same as IMAGE 500 500 new feature: (JavaScript/HTML5; see JSmol_Console.java) // page designer may indicate one of three divs for images on the page: // _Image_app_holder for IMAGE command by itself (current app image) // _Image__holder for IMAGE ID "xxx" ... or IMAGE "xxx" // where cleaning is with .replace(/\W/g,"_") // _Image_holder for all images not identified as above // if a page div is not identified, then the image will be placed in a new floating div note: experimental SHOW IMAGE now replaced by new command IMAGE JmolVersion="14.3.12_2015.02.26" bug fix: imageFontScaling integer instead of float; does not scale appropriately on resize bug fix: writing image of MO fails to write info (Jmol 12 or before) JmolVersion="14.3.12_2015.02.25c" bug fix: legacy non-XML JVXL files with color mapping should default to RGB color scheme bug fix: Jmol 14.1.2_2013.12.13 disabled some mmCIF file reading for non-wwPDB mmCIF files JmolVersion="14.3.12_2015.02.25b" new feature: random(low,high,seed) -- provides a new seed for the random() function -- seed may be any 48-bit integer. -- x = random(0.0,1.0,121231223) -- low and high are simply placeholders -- does return the first number from this seed -- note that Java and JavaScript will have DIFFERENT seedings -- utilizes https://github.com/davidbau/seedrandom/blob/released/seedrandom.js (appended to java.util.Random.js) JmolVersion="14.3.12_2015.02.25" new feature: show chemical drawing new feature: show drawing -- pops up window with drawing of model -- service is from NCI -- uses SMILES if structure was not loaded using $... (NCI) or :... (PubChem) JmolVersion="14.3.12_2015.02.24" // 02.28 removes "show " from these new feature: show IMAGE -- pops up a frame with the current image -- allows "Save As..." new feature: show IMAGE "filename" -- pops up a frame with the image loaded from a file -- allows "Save As..." new feature: show image 300 400 # adjustable size new feature: show image none # closes all image panels new feature: show image CLOSE # "all" presumed new feature: show image CLOSE "" # the model image new feature: show image CLOSE "c:/temp/t.bmp" # the image for this file new feature: write IMAGE -- same as SHOW IMAGE new feature: write IMAGE 500 500 -- same as SHOW IMAGE 500 500; allows customization of width and height new feature: Windows BMP image reading -- reads 24-bit (full color) as well as 16-, 8-, 4-, 2-, and 1-bit color palette modes -- 14-byte and 40-byte headers only -- does not read compressed modes bug fix: restriction against getting SMILES string for biomolecule lifted bug fix: end-on bonds may appear to disappear bug fix: JavaScript -2.format("%8.3") gives 2.000 not -2.000 bug fix: minimizer treats hydrogen bonds as covalent single bonds code: javajs.img.BMPDecoder code: org.openscience.jmol.app.jmolpanel.ImageDialog JmolVersion="14.3.12_2015.02.19" bug fix: CML reader does not show proper atom names for crystal structures bug fix: POV-Ray renderer does not show proper backbone width (since forever) bug fix: POV-Ray renderer with a translucent surface shows bonds that should be hidden (since 13.1) bug fix: unitcell info for PDB file biomolecule does not show "biomolecule 1" JmolVersion="14.3.12_2015.02.18" bug fix: load filter "biomolecule 1" broken in 14.3.12_2015.02.14 JmolVersion="14.3.12_2015.02.17b" bug fix: writing to PNGJ data to .ZIP file should create a standard ZIP file. -- especially useful now that some zip readers will not open PNGJ files as zip files (with newer 7zip you can right-click file, then select 7zip...open archive...zip) var x = load("t.png", true) write var x "t.zip" bug fix: VASP POSCAR fix for atom symbols in header line JmolVersion="14.3.12_2015.02.17" new feature: set zshadePower 0 -- allows examination of depth buffer and writing to image for external processing set zShadePower 0 set zSlab 100 set zDepth 0 set zShade true write z.jpg set zShade false write rgb.jpg JmolVersion="14.3.12_2015.02.16" new feature: x.dot(y) for planes and points -- was present but undocumented and not working correctly new feature: (undocumented) x.distance.all(y) new feature: load MUTATE "==LYS" -- loads using set appendNew false -- bypasses regeneration of secondary structure -- not to be documented -- issued by MUTATE command only bug fix: write isosurface "./xxx.jvxl" broken -- concatenates "isosurface" with filename bug fix: write ISOSURFACE by itself broken (similarly for write POINTGROUP and others) bug fix: MUTATE command adjustments for saving state bug fix: MUTATE command should not force recreation of shapes bug fix: MUTATE command should not change backbone atoms bug fix: x = measure(a,b) where b is {none} crashes Jmol bug fix: compare({atomA},{atomsB}) should return standard 4x4 matrix, not one involving a rotation about an atom center -- (not adjusted when ROTATESELECTED was fixed in 14.3.11_2014.12.17; Angel Herraez) code: org.jmol.modelsetbio.BioExt -- extracts struts, quaternion plots, polymerInfo, mutate into optional module -- saves 15K in corebio.js JmolVersion="14.3.12_2015.02.11" bug fix: 14.3.12_2015.02.09 breaks MODEL "someTitle" syntax bug fix: MUTATE not properly saved in state bug fix: "USER MOD" not accepted at beginning of PDB file (MolProbity breaking PDB format here) bug fix: 02.10 may break loading ligand files JmolVersion="14.3.12_2015.02.10" bug fix: color $contact1 "roygb" range -0.5 1.0; broken (in state after using CONTACT) bug fix: mmCIF reader does not flag first model of a multimodel set as type PDB JmolVersion="14.3.12_2015.02.09" new feature: frame align {atoms} FIXED -- shifts atom positions in each frame to match first atom in {atoms} -- unlike just frame align {atoms}, frame * will still show alignment -- objects such as DRAW and ISOSURFACE will NOT be shifted -- needs testing new feature: frame align [modelNo] [pt] -- FIXED is assumed -- used in state; shifts a model by a specific amount after removing any current frame alignment JmolVersion="14.3.12_2015.02.07" released bug fix: set meshScale is not being applied to isosurface contours bug fix: zoomTo{xxx} 0 does not center (broken in 13.1.16_dev_2013.05.23) bug fix: appending a model to a model with data can fail bug fix: 02.04 select conformation=1 broken bug fix: 02.04 select within(chain,...) broken bug fix: hydrogen addition should not follow component file ILE7 HG12 != ILE7 HG13 ILE7 HG13 != ILE7 HG12 ARG10 HB2 != ARG10 HB3 ARG10 HB3 != ARG10 HB2 ARG10 HG2 != ARG10 HG3 ARG10 HG3 != ARG10 HG2 ARG10 HD2 != ARG10 HD3 ARG10 HD3 != ARG10 HD2 LEU18 HB3 != LEU18 HB2 LEU18 HB2 != LEU18 HB3 PRO19 HD2 != PRO19 HD3 PRO19 HD3 != PRO19 HD2 ILE25 HG12 != ILE25 HG13 ILE25 HG13 != ILE25 HG12 JmolVersion="14.3.12_2015.02.04" released new feature: print data({*},"xyz") -- (lower case) writes only atom data lines new feature: print data({*},"XYZ", true) -- third parameter TRUE writes all trajectories bug fix: show mouse fails in JavaScript -- we cannot test using AU.isAI() in org.jmol.viewer.binding.Binding -- because of a Java2Script compiler creates standard array [...] -- from new int[] {....} whereas it should create Clazz.newArray() and fill it bug fix: writing of file formats was inconsistent between WRITE and data() (not fixed in 14.2) bug fix: Jmol writing of PDB file data did not include TER records (not fixed in 14.2) bug fix: label %r should print "1" for non-PDB file atoms bug fix: 01.30 mutate {xxx} ~... skips first-listed replacement group identifier bug fix: 01.29 breaks loading non-trajectory file after a trajectory is loaded JmolVersion="14.3.12_2015.01.30b" bug fix: select %w %x %y %z not implemented bug fix; lcaoCartoon broken in 14.3.10_2014.11.27/14.2.12_2015.01.22 bug fix: isosurface id surf1 solvent; select within(2.0, $surf1) broken JmolVersion="14.3.12_2015.01.30" new feature: MUTATE command -- operates only on last model present if multiple models are loaded -- replaces one or more amino acids group with others -- can read from RCSB or from user-specified file -- examples: mutate 33 lys // replace resno=33 with lysine mutate @3 arg // replaces group of atom 3 with arginine mutate @r gly // replaces groups in variable r with glycine mutate 22 "myfile.cif" // user-defined replacement mutate {1-3} ala // replace first three residues with alanine mutate {1-5} GLVAG // (sequence codes) replace residues 1-5 with gly-leu-val-ala-gly mutate {1-3} ~LYS // (force 1-character sequence codes) replace 1-3 with leu-tyr-ser mutate {1-3} A?L // replace 1 with ala, 3 with leu; skip 2 mutate {within(sequence, "GAT")} GYT // replace locations of GAT with GYT (needs testing) mutate 35 @fname // replaces resno=33 with file data (use "==ALA" or "~A" for RCSB) mutate {r} his // same as above; r must be an atom selection bug fix: code fixes relating to calculate structure in 01.29 JmolVersion="14.3.12_2015.01.29" bug fix: 01.28 version does not write correct PDB CONECT records bug fix: 01.22 version may not correctly clear rasmol hydrogen bonds in trajectories code: simplification of BioModel; extraction of legacy Chime messaging into ChimeMessenger class code: extraction of org.jmol.modelset.Trajectory JmolVersion="14.3.12_2015.01.28" bug fix: write "t.pdb" now correctly sequences groups and atoms, even after mutation new feature: resno is user settable JmolVersion="14.3.12_2015.01.27" bug fix: select thisModel does not select all atoms in visible frame set new feature: @@3 for "atomno=3 and thisModel" -- provides a function distinct from @3 when there are multiple models -- includes all atoms in current frame set -- example: load "cyclohexane_movie.xyz" select @10 35 atoms selected select @@10 1 atom selected frame [1 2 4 6] select @@10 4 atoms selected @@10.label = "atom 10" new feature: frame [1 3 5 6] -- sets limited number of frames for animation and frame * -- same as animation frame [1 3 5 6]; frame * new feature: CGO SCREEN option -- CGO [SCREEN z ...] -- reads CGO 2D VERTEX records as screen coordinates, installing them at a depth of z - where z > 0 indicates a percent (0.01 far back; 100 front) - z < 0 indicates an absolute screen z value as -z. - uses 2D VERTEX and other CGO point elements, not 3D -- example: a static border 20% from the back of the model cgo test2 [ SCREEN 20 BEGIN LINE_LOOP VERTEX 10 10 VERTEX 90 10 VERTEX 90 90 VERTEX 10 90 END ] new feature: CGO UVMAP option -- CGO [UVMAP @origin @x @y x0 y0 x1 y1 scaleX scaleY ...] -- 2D VERTEX records are scaled and mapped to a plane defined by @origin @x @y -- example: a parallelogram based on atoms 1, 6, and 11 cgo test1a [ UVMAP @1 @6 @11 0 0 80 80 1 1 BEGIN LINE_LOOP VERTEX 0 0 VERTEX 80 0 VERTEX 80 80 VERTEX 0 80 END ] new feature: CGO PostScript option -- CGO [ PS @origin @x @y ] data "PS" [primitive encapsulated postscript data] end "PS" -- maps 2D EPS data onto a plane defined by an origin point, an x-axis point, and a y-axis point. -- somewhat similar to UV mapping of textures in other programs -- allows 2D data to be superimposed on a model. -- a crude implementation still in development; doesn't properly implement stroke; -- just for drawing lines; does not implement PS fill, gsave, grestore -- just moveto, lineto, newpath, closepath, setlinewidth, scale -- uses %%BoundingBox x0 y0 x1 y1 prolog record to map [x0 y0] to @origin, [x1 0] to @x, and [0 y1] to @y -- used for NBO contour mapping CGO[ PS @{point(-5,-5,0)} @{point(5,-5,0)} @{point(-5,5,0)] data "PS" %!PS-Adobe-2.0 EPSF-1.2 %%Creator: Bob Hanson (from NBO) %%Title: nbo orbital slice %%CreationDate: 1/26/2015 5:36 AM %%DocumentFonts: Helvetica %%BoundingBox: 211 300 428 518 %% note: above numbers are from 0.24*881 0.24*1781 0.24*1256 0.24*2156 %%EndComments %%EndProlog 0.2400 0.2400 scale newpath 3 setlinewidth newpath 881 1256 moveto 1781 1256 lineto 1781 2156 lineto 881 2156 lineto closepath stroke 1241 1717 moveto 1250 1713 lineto ... stroke %%Trailer showpage end "PS" bug fix: CGO LINE_LOOP not closing bug fix: configuration 1 broken bug fix: display configuration=1 broken (in Jmol 12.0, 2011) JmolVersion="14.3.12_2015.01.25" bug fix: image echos broken JmolVersion="14.3.12_2015.01.24" new feature: load NBO CH3CH2CH3 -- retrieves the stucture of propane (in this case) from a local NBO server. -- including inorganics. For example: load nbo "Cr 3::acac" load nbo "Cr 2:::Bz" code: new interface for "services" that can provide valuable information to Jmol over ports or by running executable processes. -- currently just NBO bug fix: MOPAC reader loses two atoms in IRC calculation for MOPAC 2012 bug fix: _slabPlane and _depthPlane not set immediately when slab and depth are set JmolVersion="14.3.12_2015.01.22" released simultaneously with 14.2.12 bug fix: color rockets amino fails bug fix: "color TRANSLUCENT -1" (screened translucency) restored; -- had been removed in 14.3.12_2015.01.20 because broken in jmol-11.7.27_02-27-09 bug fix: atom screened translucency not saved in state bug fix: isosurfaces with screened translucency not restored from JVXL with that bug fix: screened translucent bonds broken code: adding org.jmol.g3d.PixelatorScreened, PixelatorT JmolVersion="14.3.12_2015.01.21" new feature: load =cod/1000041 loads Crystallographic Open Database CIF files bug fix: load =xxx/..... (special database) fails bug fix: (JavaScript) using "Helvetica Neue, Sans-serif" instead of just "Sans-serif" (org.jmol.awtjs2d.JSFont.java) - gets around Safari bug in Safari v. 7 JmolVersion="14.3.11_2015.01.20" released simultaneously with 14.2.11 bug fix: Languages lost in Jmol Application new feature: select :"X" where quotes are used now forces case sensitivity bug fix: DIPOLE command broken in Jmol 14.3.10_2014.11.27 (OK in 14.2) bug fix: for old PDB files with no chain ID, "select :" fails JmolVersion="14.3.11_2015.01.18" new feature: Jmol Application Tools|NBO... (Experimental Only; requires NBOServer) bug fix: Typing select his and :A will set chain selection to be case sensitive due to a bug that processes "his an" as "{his:}an". JmolVersion="14.3.11_2015.01.15" bug fix: modulation x.x and modulation n not described correctly in documentation new feature: modulation T x.x new feature: modulation Q n new feature: modulation T {t1 t2 t3} new feature: modulation Q {q1 q2 q3} JmolVersion="14.3.11_2015.01.12" bug fix: color PMESH reader not working properly JmolVersion="14.3.11_2015.01.11" bug fix: JSpecView -- version/date not appearing in menu bug fix: GIF images bleed into background. bug fix: GIF writing of xxx.gif (three character name) broken. bug fix: proper isosurface capping. Test code: function test(i) { set echo top left echo @i isosurface slab none isosurface cap plane {1 1 1 1} @i refresh } load 1crn.pdb rotate y 60 rotate y -120 isosurface s1 vdw; display none center $s1 for (var i = -2 ; i < 58; i++){test(i)} JmolVersion="14.3.11_2014.12.21" code: major refactoring into BioModel of PDB-specific code in ModelSet new feature: CGO (undocumented command from Jmol 13.1.16; never tested) cgo test1a [ BEGIN LINES VERTEX 0 0 0 VERTEX 2 2 2 VERTEX 2 2 2 VERTEX 3 2 0 END ] cgo test1b [ BEGIN LINE_LOOP VERTEX 4 0 0 VERTEX 6 2 2 VERTEX 5 2 0 END ] cgo test1c [ BEGIN LINE_STRIP VERTEX 4 0 0 VERTEX 6 2 2 VERTEX 5 2 0 END ] cgo test2 [ BEGIN POINTS COLOR 255 0 0 LINE 0 0 3 0 0 3 2 2 COLOR 0 255 0 LINE 0 0 3 2 2 4 2 0 END ] cgo test2b [ BEGIN LINE_LOOP DIAMETER 0.3 VERTEX 4 0 0 VERTEX 6 2 2 VERTEX 5 2 0 END ] new feature: NBO command -- same as MO command, but allows TYPE keyword -- to be developed with, perhaps, different defaults, 2D slices, etc. new feature: NBO TYPE -- options AO, PNAO, NAO, PNHO, NHO, PNBO, NBO, PNLMO, NLMO, MO -- results in immediate loading of .32-.41 file if present -- generally after a .47 archive file has been loaded new feature: ... PLANE {pt1} {pt2} frac12 -- wherever a PLANE parameter is required -- perpendicular plane frac12 of the distance from pt1 to pt2 new feature: x = plane(pt1, pt2, frac12) -- perpendicular plane frac12 of the distance from pt1 to pt2 JmolVersion="14.3.11_2014.12.19" bug fix: JavaScript connect broken due to j2s failure to create bsAromatic when BondCollection created (14.3.7) due to j2s bug in instantiating global definitions in super classes using Clazz_prepareFields bug fix: label, echo, and measurement text should not display when deeper than zSlab with zShade is TRUE bug fix: mmCIF reader load filter biomolecule 1 broken for viruses with symmetry ranges listed as "1-60" with a hyphen bug fix: mmCIF reader coarse-grain load filter bysymop broken bug fix: mmCIF reader coarse-grain load filter bychain broken JmolVersion="14.3.11_2014.12.17" bug fix: rotate selected <4x4 matrix> should not rotate about center of atoms bug fix: use of a subset command will change value of a variable bitset if "select x" is used -- example: x = {*} subset {atomno < 10} print x // just the first 9 select x // just the first 9 subset all print x // but now x itself is truncated; this is not supposed to be the case new feature: SYNC nnnn x -- x is a math expression, possibly just a string, but also possibly an associative array. new feature: SYNC nnnn {type:"command", "command" : command, "var": vname, "data":vdata} -- script command request, with optional definition of a Jmol user variable prior to execution) -- for example: x = {"type":"command","command":"background green; print y", "var": "y", "data":['an array',2]} sync 3000 x -- allows simple transfer of data via JSON strings between applications JmolVersion="14.3.11_2014.12.15" FEATURE CHANGE: JmolViewer interface streamlined -- many esoteric methods removed -- can be reinstated upon request -- many are available via public fields -- for economy of performance and .js file size FEATURE CHANGE: "screened translucency TRANSLUCENT -1" removed (broken in jmol-11.7.27_02-27-09) bug fix: mol2 reader fails to read "THR1" as a PDB group bug fix: PyMOL reader should not reset user variables bug fix: show LIGHTING does not report a full list of settings new feature: reset LIGHTING public void resetLighting() { vwr.setIntProperty("ambientPercent", 45); vwr.setIntProperty("celShadingPower", 10); vwr.setIntProperty("diffusePercent", 84); vwr.setIntProperty("phongExponent", 64); vwr.setIntProperty("specularExponent", 6); // log2 of phongExponent vwr.setIntProperty("specularPercent", 22); vwr.setIntProperty("specularPower", 40); vwr.setIntProperty("zDepth", 0); vwr.setIntProperty("zShadePower", 3); vwr.setIntProperty("zSlab", 50); vwr.setBooleanProperty("specular", true); vwr.setBooleanProperty("celShading", false); vwr.setBooleanProperty("zshade", false); } code: moved PDB-related methods and constants in JC.java to org.jmol.modelsetbio.Resolver -- allows 50K savings in core.z.js code: reduced method sets for Viewer, ModelSet, and several other classes -- a bit contrary to standard practice, I know -- direct access of class fields instead of using methods with just one or two references -- direct access of class fields instead of using getXXX() and setXXX() because these are NOT optimized in JavaScript. JmolVersion="14.3.11_2014.12.09" new feature: Castep reading of .ts files bug fix: array.add("\t",array) broken 2014.12.04 bug fix: array.split("",true) doesn't handle CSV with new lines in quotes JmolVersion="14.3.11_2014.12.06" new feature: MODEL 1 PROPERTY "xxx" x -- adds property to model's auxilliaryInfo -- x may be any valid math expression, for example model 1 property "test" {1.1}.temperature.mul(0.1) -- if x is an array, then these become atom data accessible via %{...} -- for example: x = "1\n2\n3\n".lines model 1 property "mydata" x {model=1}.property_n = {*}.label("%{mydata}") // converts to numbers data "myd @x" // similar, but not model-based label %{myd} bug fix: format() function broken bug fix: SHOW DATA should be cleared when a file is loaded JmolVersion="14.3.11_2014.12.04" new feature: "....".split("",true) // CSV split of string to array of arrays new feature: [...].split("",true) // CSV split of array to array of arrays new feature: "...".split("\t",true) // tab split of string to array of arrays new feature: [...].split("\t",true) // tab split of array to array of arrays new feature: [...][...].join("",true) // CSV join to array of lines new feature: [...][...].join("\t",true) // tab join to array of lines -- example: x = load("test.csv").split("",true) //from CSV print x.join("",true) // back to CSV print x.join("\t",true) // to tab-separated new feature: [...][...].col(n) -- extracts nth column from an array of arrays -- example: x = load("test.csv").split("",true).col(3) //3rd column from CSV JmolVersion="14.3.11_2014.12.02" bug fix: for (x in yUpperCase) fails bug fix: draw SYMOP fails for incommensurate space groups bug fix: incommensurate magnetic CIF reading does not apply magnetic spin operation to spin modulations bug fix: CIF reader can cycle infinitely if loop_ keywords are not followed by any data new feature: Gaussian Input File creation defaults to "opt pop=full gfprint" to generate orbital information by default. FEATURE CHANGE: Gaussian Input File creation moved to Tools menu rather than file...export JmolVersion="14.3.11_2014.11.28" new feature: readers for ESS input types: CFILE, VFILE, MOPAC, NWChem, Gaussian, GAMESS, Orca, PQS -- CFILE and VFILE require CFI:: and VFI:: (or C:: and V::) -- MOPAC requires MND:: -- any of these could also use ZMATRIX:: or INPUT:: bug fix: dynamicMeasurements deprecated in 14.1.1 but not left in as a valid token to allow use JmolVersion="14.3.11_2014.11.27" new feature: GAMESS input reader new feature: NBO .37 archive file coordinate reader (not MOs) new feature: ZMatrixReader also serves as simple input file reader for Q-Chem, Gaussian, Jaguar, MolPro, and ADF, as produced by NBO6Pro JmolVersion="14.3.10_2014.11.27" released as 14.3.10 (note - these were not fixed in 14.2) bug fix: SPIN BRANCH {atomno=2} {atomno=1} does not work code: scriptExt.IsoExt splits CmdExt into two parts -- (note this will require changes to build_03_tojs_stable) code: simplification of SurfaceGenerator bug fix: JVXL files do not record selected contour bug fix: isosurface CONTOUR -n broken (in Jmol 12) bug fix: isosurface "t.jvxl" loading of contoured planes broken bug fix: isosurface plane xy map property atomno broken every other time used new feature: isosurface contour 0 "t.jvxl" will override contour selected in JVXL file new feature: isosurface CONTOUR n i -- n contours; i-th only FEATURE CHANGE: For the ISOSURFACE command, there is an undocumented syntax that the CUTOFF keyword prior to a number is optional, as in "ISOSURFACE 2.0". This was never documented and was never shown in any examples. This change is to require the CUTOFF keyword new feature: isosurface LATTICE {i j k} FIXED -- creates an isosurface from periodic volumetric data with the specified number of unit cells -- "fixed" in the sense that the operation is at load time not at rendering, allowing slabbing and use of WITHIN new feature: isosurface UNITCELL x.x .... -- for periodic lattices only -- adjusts grid by x.x in fractional coordinates -- caution is advised, as the grid is expanded in this process, leading to more grid points and more memory required -- negative x.x results in a selection of a subset of the data centered on the center of the unit cell JmolVersion="14.3.10_2014.11.26" bug fix: hover OFF disables hover callback, but should not bug fix: reading of JVXL file saved with noFill still does fill bug fix: CASTEP DENSITY surface file reader does not do downsampling new feature: VASP CHGCAR default cutoff set to 0.5 new feature: set edsUrlFormatDiff -- specifies difference map location new feature: isosurface "==1blu" -- difference map fo-fc -- defaults to sigma=3 -- automatically implements SIGN option new feature: isosurface RMSD (same as SIGMA) JmolVersion="14.3.9_2014.11.23" released as Jmol 14.3.9 and Jmol 14.2.9 bug fix: isosurface slab plane -xy not recognizing "-" bug fix: PNGJ writing broken bug fix: VASP CHGCAR reader not recognized for primitive cell bug fix: Euler ZYZ and ZXZ for quaternion({0 0 1},theta) where theta < 0 in error JmolVersion="14.3.9_2014.11.17" released as Jmol 14.3.9 and Jmol 14.2.9 new feature: VASP CHGCAR reader new feature: VASP CHGCAR isosurface reader new feature: load HISTORY "saved.his" (Gabor Oszlanyi) -- loads command history with script in saved.his new feature: CTRL-PAGE_UP CTRL-PAGE_DOWN in console (Gabor Oszlanyi) -- searches for next instance of current start of command up or down command history new feature: capture END -- closes capture without annoying popup message -- also for capture CANCEL and just CAPTURE new feature: transparent GIF using WRITE GIFT "xxx.gif" new feature: GIF images use dithering to approximate full palette. new feature: CAPTURE "file.gif" 10 transparent - or CAPTURE "file.gift" -- "gift" automatically changed to "gif" new feature: CAPTURE "filename0000.png" -- captures set of PNG files -- 0000 is not required new feature: CAPTURE "filename0000.gif" -- captures set of GIF files -- 0000 IS required in order to distinguish this from animated GIF bug fix: set labelOffset {1 2 3} or set labelOffset [1 2 3 4 5 6 7] fails if selection does not contain a label at each selected atom bug fix: Molden reader fails to read orbitals if [GEOCONV] is present bug fix: JmolVersion 14.3.3_2014.07.27 broke ligand bond reading when fetching ligands. -- mmCIF reader was not being selected by the Resolver -- Requires an increment of version number to 14.3.9 bug fix: slightly better GIF processing bug fix: GIF writer not properly handling large numbers of colors -- use of CIE L*a*b for color quantification -- nearly identical to GIMP -- uses MEAN_cut (not MEDIAN_cut) -- uses Floyd-Steinberg dithering -- will not discolor background (as GIMP will do) bug fix: GIF and PPM writing broken in JavaScript -- initial putString improperly forces string buffer mode in OC (Output Channel) bug fix: WRITE command should remove "t" or "j" in WRITE xxx.PNGJ, WRITE xxx.PNGT, WRITE xxx.GIFT -- specifically when no PNGJ, GIFT, or PNGT designation is made. bug fix: PDB reader limited to 20 connections per atom bug fix: up-arrow in console may not return command if contains unicode bug fix: antialiasing can subtly change background color bug fix: working on GIF writer -- some success with 256 colors using median-cut with RGB bug fix: GIFT (transparent-background GIF) dithering transparent background bug fix: Legendre for U not implemented in msCIF reader - preliminary bug fix: Legendre for D,U in Jana2006 reader not implemented - preliminary code: code clean-up in GData, Graphics3D, and Export3D code: PDB reader CONECT efficiency released as Jmol 14.3.9 and Jmol 14.2.9 bug fix: set labelOffset {1 2 3} or set labelOffset [1 2 3 4 5 6 7] fails if selection does not contain a label at each selected atom JmolVersion="14.3.9_2014.11.15" new feature: VASP CHGCAR reader new feature: VASP CHGCAR isosurface reader JmolVersion="14.3.9_2014.11.12" bug fix: Molden reader fails to read orbitals if [GEOCONV] is present JmolVersion="14.3.9_2014.11.11" bug fix: JmolVersion 14.3.3_2014.07.27 broke ligand bond reading when fetching ligands. -- mmCIF reader was not being selected by the Resolver -- Requires an increment of version number to 14.3.9 JmolVersion="14.3.8_2014.11.10" bug fix: slightly better GIF processing JmolVersion="14.3.8_2014.11.09" new feature: CAPTURE "filename0000.png" -- captures set of PNG files -- 0000 is not required new feature: CAPTURE "filename0000.gif" -- captures set of GIF files -- 0000 IS required in order to distinguish this from animated GIF bug fix: GIF writer not properly handling large numbers of colors -- use of CIE L*a*b for color quantification -- nearly identical to GIMP -- uses MEAN_cut (not MEDIAN_cut) -- uses Floyd-Steinberg dithering -- will not discolor background (as GIMP will do) bug fix: GIF and PPM writing broken in JavaScript -- initial putString improperly forces string buffer mode in OC (Output Channel) bug fix: WRITE command should remove "t" or "j" in WRITE xxx.PNGJ, WRITE xxx.PNGT, WRITE xxx.GIFT -- specifically when no PNGJ, GIFT, or PNGT designation is made. bug fix: PDB reader limited to 20 connections per atom code: code clean-up in GData, Graphics3D, and Export3D code: PDB reader CONECT efficiency JmolVersion="14.3.8_2014.10.27" bug fix: up-arrow in console may not return command if contains unicode bug fix: antialiasing can subtly change background color bug fix: working on GIF writer -- some success with 256 colors using median-cut with RGB new feature: load HISTORY "saved.his" (Gabor Oszlanyi) -- loads command history with script in saved.his new feature: CTRL-PAGE_UP CTRL-PAGE_DOWN in console (Gabor Oszlanyi) -- searches for next instance of current start of command up or down command history JmolVersion="14.3.8_2014.10.15b" bug fix: GIFT (transparent-background GIF) dithering transparent background JmolVersion="14.3.8_2014.10.15" new feature: capture END -- closes capture without annoying popup message -- also for capture CANCEL and just CAPTURE JmolVersion="14.3.8_2014.10.14" new feature: transparent GIF using WRITE GIFT "xxx.gif" new feature: GIF images use dithering to approximate full palette. new feature: CAPTURE "file.gif" 10 transparent - or CAPTURE "file.gift" -- "gift" automatically changed to "gif" bug fix: Legendre for U not implemented in msCIF reader - preliminary bug fix: Legendre for D,U in Jana2006 reader not implemented - preliminary JmolVersion="14.3.7_2014.10.13" new feature: modulation occupancy settable using {*}.occupancy = {*}.modulation('O',t) -- for example: load "t3.cif" {20 1 1} packed 0.5 connect {_Mn} {_Mn} delete polyhedra bonds {_Mn} collapsed; set echo top right; capture "occ.gif" 120 for (var i = 0; i <= 100; i++) { var f = i/100. modulation @f {*}.occupancy = {*}.modulation("O",f); display _Mn and occupancy > 0; var t = "t=" + f echo @t refresh; } capture bug fix: msCIF reader superspace group operators with mixing of x1,x2,x3 into x4,x5 was still not quite correct. bug fix: data "occupancy set" spelled wrong in state JmolVersion="14.3.7_2014.10.12" bug fix: JSmol/HTML5 SCRIPT command broken (forces async, which is not working yet) -- since 14.3.7_2014.9.17 feature change: DSSR reference to "lonePairs" changed to "isolatedPairs" -- select within(dssr,"isolatedPairs") preferred -- select within(dssr,"lonePairs") still OK bug fix: msCIF reader incorrectly handling multiple Legendre orders bug fix: msCIF reader incorrectly handling superspace operators with x1,x2,x3 mixed into x4,x5 bug fix: CONTACT FULL does not report proper volume (Young ho Jhon) bug fix: (Java only) write FILE fails for string (copy/pasted) data JmolVersion="14.3.7_2014.10.10" bug fix: set waitForMoveTo not controlling script for ROTATE x.x y.y (finite spin) bug fix: capture command not waiting properly for full spin bug fix: msCIF reader: wave vectors of the form {a -a 0} were being ignored. (14.3.6_2014.08.16 and 14.2.6) JmolVersion="14.3.7_2014.10.05" bug fix: isosurface molecular reader misassigning voxel source atom bug fix: JSpecView integration not displaying properly bug fix: JSmol does not allow Info._coverImage JmolVersion="14.3.7_2014.09.30" bug fix: CGD reader for fractional coordinates; alternative EDGE syntax JmolVersion="14.3.7_2014.09.29" bug fix: JavaScript j2sjmol.js -- should not create object .isArray() method as it conflicts with JavaScript Array.isArray bug fix: CGD reader space groups set to Bilbao (origin 2) setting. JmolVersion="14.3.7_2014.09.28" bug fix: Molden reader overlaying MO info and unit cell info new feature: Molden reader adds [CellAxes] block -- three vectors -- a, b, c -- Angstroms assumed; no other option, actually -- Use 0 0 0 for c to indicate slab -- example [CellAxes] (Angs) 2.963407 0.0 0.0 0.0 6.513587 0.0 0.0 0.0 0.0 JmolVersion="14.3.7_2014.09.27" bug fix: interpretation of space group I41 by name only, without operations, drops second (centered) C2 axis. JmolVersion="14.3.7_2014.09.26" new feature: TOPOS Crystal Graph Data (CGD) file reader JmolVersion="14.3.7_2014.09.24" bug fix: exporter generally not allowing creating meshes with PovRAY JmolVersion="14.3.7_2014.09.23" bug fix: Clazz.floatToLong not aliased as Clazz_floatToLong in corebottom2.js/coretop2.js -- causes CAPTURE command to fail for JSmol/HTML5 new feature: {xxx}.find("MF","CH2O") -- returns subset of {xxx} -- first atoms that match formula; not necessarily sequential new feature: {*}.find("MF", TRUE) -- calculates EMPIRICAL formula -- example: $ load $glucose $ print {*}.find("MF") H 12 C 6 O 6 $ print {*}.find("MF",true) H 2 C 1 O 1 new feature: {cell=555}.find("CellFormula"); -- calculates cell formula for specified unit cell -- weights interior 1, face 1/2, edge 1/4, vertex 1/8 -- selection should be a single packed unit cell -- fails with "?" if end result is not integral -- example: $ load quartz.cif packed $ print {*}.find("cellFormula"); O 6 Si 3 new feature: {cell=555}.find("CellFormula", TRUE); -- calculates empirical cell formula for specified unit cell -- weights interior 1, face 1/2, edge 1/4, vertex 1/8 -- selection should be a single packed unit cell -- fails with "?" if end result is not integral -- example: $ load quartz.cif packed $ print {*}.find("cellFormula", true); O 2 Si 1 new feature: label %O -- lists all symmetry operators leading to this position (as a string) -- if more than one operator (contains a comma), this is a special position -- same as %[symmetry] but just a simple list of operators JmolVersion="14.3.7_2014.09.22" FEATURE CHANGE: atoms without vibration will no longer report out as vxyz = {0 0 0} or vx = 0 -- print {atomno=3}.vxyz and {*}.vxyz.all will report -1 instead of {vx vy vz} when atom does not have a vibration -- print {atomno=3}.vx will report "NaN" (also vy and vz) -- label %[vxyz] will be blank -- label %[vx] will be blank (also vy and vz) -- select vxyz >= 0 will select for atoms with vibrations of any magnitude -- select vxyz < 0 will select for atoms without vibrations of any magnitude -- select vx = 0 will NOT select atoms with no vibration vector -- select vx != 0 will NOT select atoms with no vibration vector -- select vx = 0 || vx != 0 will select for atoms with vibrations of any magnitude -- same with modulations and modxyz, modx, mody, modz FEATURE CHANGE: {xxx}.vxyz = a, where a is an array -- no longer throws an exception if a[i] is not a point -- simply does not set that value. -- allows for v = {*}.vxyz.all; {*}.vxyz = v; JmolVersion="14.3.7_2014.09.21" bug fix: magCIF reading with symmetry scaling (-x+1/2,-2x+y,z+1/2,+1 mx,2mx-my,-mz) improperly rotates moments (1.34.cif) JmolVersion="14.3.7_2014.09.20b" bug fix: array sorting broken in JavaScript code: magCIF change to _space_group_symop.magn_ssg_centering_algebraic code: efficiencies in storage of CIF keys bug fix: CIF reader not reading magnetic lattice centering for incommensurately modulated structures bug fix: {*}.modulation("M") not functional bug fix: script queue broken in 2014.09.17 JmolVersion="14.3.7_2014.09.17" bug fix: cartoon OFF does not remove nucleic bases from visible set bug fix: select visible does not recalculate visible set -- after RESTRICT, for instance; Eric Martz -- at least since 14.1.14 load =1d66 cartoons only # if this is omitted, 'select visible' works correctly refresh restrict 28-36:B print {visible} bug fix: x = {visible} does not COPY the visible set bug fix: spin broken in WebGL code: further progress with fully asynchronous HTML5 -- all initial script loading and program start-up -- general LOAD and SCRIPT command processing -- minimization (static resource loading) -- PNGJ file loading JmolVersion="14.3.7_2014.09.16" bug fix: chainCaseSensitive ignored for select :a bug fix: JmolData not reporting out properly JmolVersion="14.3.7_2014.09.15b" bug fix: 14.3.7_2014.09.14 breaks nucleic acid rendering JmolVersion="14.3.7_2014.09.15" bug fix: CARTOON OFF does not remove visibility flag for alpha carbons (introduced in jmol-14.1.17_2014.06.03) JmolVersion="14.3.7_2014.09.14" bug fix: JSmol/HTML5 fails to show rockets bug fix: setting structures after displaying rockets does not reset rockets correctly bug fix: load *xxxx/val validation loading not working (14.3.7_2014.09.07) new feature: load =xxxx/rna3d -- mmCIF only -- fetches http://rna.bgsu.edu/rna3dhub/loops/download/xxxx -- hairpinLoops, internalLoops, junctions -- allows for such constructs as: select within(rna3d,"hairpinLoops") select within(rna3d,"hairpinLoops where index=5") x = getproperty("auxiliaryInfo.models[1].rna3d.internalLoops.5") x = getproperty("auxiliaryInfo.models[1].rna3d.internalLoops")[5] print x { _atoms : ({3023:3062 3639:3706}) _isres : true _path : "internalLoops" index : 5 units : "1S72|1|0|C|153,1S72|1|0|C|154,1S72|1|0|G|182,1S72|1|0|A|183,1S72|1|0|G|184" } y = x._atoms select y new feature: load =xxxx/val new feature: load =xxxx/dom -- extends PDBe validation/domain annotation to RCSB calls new feature: load *xxxx/dssr new feature: load *xxxx/rna3d -- DSSR analysis extended to PDBe calls -- RNA3D analysis extended to RCSB calls JmolVersion="14.3.7_2014.09.12" bug fix: Draw broken in JSmol/HTML5 in 14.3.7_2014.09.07 JmolVersion="14.3.7_2014.09.11" bug fix: Unit cell display and other characteristics offset or wrong when crystallographic coordinates include an intrinsic offset from Cartesian coordinates, as in the case of ENT/mmCIF 1hbb and 2hhb. bug fix: PDB reader not reading SCALEn records; required in certain cases for load =xxxx {1 1 1} JmolVersion="14.3.7_2014.09.10" bug fix: Pending measurements lost when dragging to reposition molecule bug fix: EM files not allowing unit cell creation for PDB or mmCIF files JmolVersion="14.3.7_2014.09.08" bug fix: binary document reader can skip bytes if an http connection fails to deliver the full set of requested bytes in one operation (nonstandard MRC files and PyMOL files) JmolVersion="14.3.7_2014.09.07" code: note new Jmol. in front of ___xxx here code: further work on asynchronous file loading -- uses script state machine to reset state -- xhr used only for data files; DOM for scripts -- caches data files -- principal shown to work -- works for package.js and corexxx.js files -- works for most Java-class xxxx.js files -- fails (requires multiple attempts) for some cases -- animation/vibration/spin threads -- PNGJ file loading -- cleaned up j2sjsmol code -- abandons complex j2s Clazz file loading methods; just uses jQuery new feature: Legendre polynomials for MSCIF file reading bug fix: adds correct dates for code versions of JSmol files bug fix: load quartz.cif {1 1 1};draw symop @1 @5 does not work due to refactoring error 7/9/2014 (14.3.3) bug fix: dssr broken in 14.3.5 bug fix: throw context prior to try/catch within function causes exception bug fix: polyhedra not removed from rendering when central atoms are deleted code: refactoring symmetry info into org.jmol.symmetry.SymmetryDesc JmolVersion="14.3.7_2014.08.29" code: preliminary all-asynchronous JSmol/HTML5 JmolVersion="14.3.7_2014.08.25" bug fix: translation of atoms after deleting atoms having dots on crashes Jmol JmolVersion="14.3.7_2014.08.22" new feature: AXES TYPE "a"|"b"|"c"|"ab"|"ac"|"bc"|"abc" -- for axes position [x y] only shows specified axes new feature: load quartz.cif supercell "2a,2b+a,c;1/2,0,0" -- allows adjusting origin without changing symmetry operations -- same as load quartz.cif filter "cell=2a,2b+a,c;1/2,0,0" -- default lattice set to {555 555 -1} (i.e., PACKED) -- sets packing range based on the supercell -- packing can be avoided by specifying the lattice: load quartz.cif {1 1 1} supercell "2a,2b+a,c;1/2,0,0" doc note: load ... SUPERCELL "2a,2b,2c" is the same as load ... SUPERCELL {2 2 2} except that the packing will be based on the supercell dimensions, not the original cell dimensions, with range 0.02. This can be adjusted using PACKED x.x, which is still a fraction of the supercell dimensions. load quartz.cif supercell "10a, 10b+10a,c" PACKED 0.002 doc note: load ... SUPERCELL ... defaults to PACKED, but simply adding a lattice overrides this: load ... {1 1 1} SUPERCELL ... new feature: load(filename, asbinary, async) -- 3rd parameter loads file asynchronously in HTML5 bug fix: magnetic CIF files incompatible with displacement modulation bug fix: write PNG xxx.png when xxx.png is currently loaded saves 0-length data files bug fix: load ASYNC was documented for 14.1.12_2014.03.10 but never implemented JmolVersion="14.3.7_2014.08.18" bug fix: load quartz.cif supercell "2a,2b+a,c" not working properly JmolVersion="14.3.6_2014.08.17b" released as Jmol 14.3.6 bug fix: modulated magnetic moment scaling by VECTORS MAX x.x not saved in state for modulations that are 0,0,0. bug fix: magnetic CIF reader not automatically showing modulation bug fix: load SUPERCELL {x y z} not working correctly in terms of packing bug fix: load SUPERCELL not working correctly with modulation or magnetic JmolVersion="14.3.6_2014.08.15" new feature: upgrade of application file...export...Gaussian Input File... new feature: pmesh files can contain triangle colors JmolVersion="14.3.6_2014.08.14" bug fix: JavaScript drag-drop clears cache inappropriately when spt file is dropped IMPORTANT NOTE: The problem described here only affects the reading of states that have been created for crystallographic files, and then only if the state was created in Java and then displayed in JavaScript, or vice-versa. The problem is due to the fact that the Java implementation of Jmol uses float values for atom coordinates, while JavaScript is restricted to using only double values. The problem arises when a comparison must be made between two decimal values. After symmetry has been applied, it is possible for atom coordinates to be off in the 4th-7th decimal digit for floats and 14th-17th for doubles in the range -256 to 256. The problem is most acute for inorganic crystal systems where symmetry has been applied and especially after the CONNECT NONE command has been issued. Aspects where a problem might arise include: -- packing of unit cells, where atoms are discarded -- iterating over atoms, where atom order is important -- autobonding, where distances and order are critical -- comparing Cartesian or fractional coordinate values Solution to the problem is to automatically round all fractional atom coordinates to a precision of 0.00001 and all Cartesian atom coordinates to a precision of 0.0001. This forces both double and float implementations to the same value and results in no practical error, since these ranges are well beyond the precision of atom coordinates in crystals. Coincidence is assured for fractional coordinates up to about 126 and for Cartesian coordinates up to about 838. This rounding is not implemented for state or PNGJ file with state version v where v < 140206 || v >= 140300 && v < 140306 and in general only in the case where the file coordinates are fractional. Thus, those files will be read exactly as in the version they were created by. And they will have have the same issues as well. The result is also much cleaner-looking atom coordinates. For example, in JavaScript: print {*}.fxyz {0.33333328149215147 0.999999891271352 1.0000000000000024} {0.6666666148254848 0.999999891271352 1.0000000000000024} {0.9999999844017011 1.000000000000001 0} {0.9999999616049127 0.9999999316096356 0.6290004156275991} {0.9999999709556066 0.9999999596617175 0.3709995843724032} {0.9999999481588181 0.999999891271352 1.0000000000000024} becomes: {0.33333 1 1} {0.66667 1 1} {1 1 0} {1 1 0.629} {1 1 0.371} {1 1 1} new feature: set legacyJavaFloat -- set by Jmol when a state is read that is before 14.2.6 or in the range 14.3.0 - 14.3.5; -- prevents fractional and cartesian coordinate rounding. -- cleared by ZAP or LOAD or loading of any later state script new feature: MOLDEN extensions [SpaceGroup] [Operators] [Cell] JmolVersion="14.3.5_2014.08.10" code: static Txt functions moved to javajs.util.PT new feature: SHOW/WRITE PROPERTIES ... format "%s %i %f %f %f" -- allows specifying the format for a set of up to three properties. -- %s is atom name; %i is atom number bug fix: show PROPERTIES broken bug fix: plot PROPERTIES changes axis settings JmolVersion="14.3.5_2014.08.09" bug fix: magCIF file reading broken for new file format new feature: magCIF file reading for incommensurately modulated magnetic structures -- very preliminary only; not tested new feature: set showModulationVectors true/false -- required now for showing modulation vectors rather than vibration vectors new feature: vibration max x.x new feature: vector max x.x // alternative; the same -- renormalizes all vibrations and vibration/spin vectors to have a maximum value of x.x JmolVersion="14.3.5_2014.08.08" bug fix: CIF operators with n/9 not supported JmolVersion="14.3.5_2014.08.05" bug fix: CIF reader broken for load xxx.cif 1 (14.1.17_2014.06.07) bug fix: CONTACT command not functioning properly with multiple models JmolVersion="14.3.4_2014.08.03" note: Sourceforge release of 14.3.4 and 14.2.4 bug fix: annotation atom sets not adjusted for added hydrogens bug fix: 14.3.3_2014.08.02 broke mmCIF reader bug fix: BinaryDocument (Spartan file) reading broken in 14.1.12_2014.03.18 JmolVersion="14.3.3_2014.08.02" note: Sourceforge release of 14.3.3 and 14.2.3 new feature: point({x,y,z}, true) -- TO screen coordinates new feature: point({sx,sy,sz}, false) -- FROM screen coordinates JmolVersion="14.3.3_2014.08.01" bug fix: move+moveto/zoomto still an issue. summary of new features for annotations, July 17 - Aug 1 new feature: load *1cbs/dom -- loads mmCIF file from EBI along with sequence domain data -- uses URL http://wwwdev.ebi.ac.uk/pdbe/api/mappings/sequence_domains/1cbs?metadata=true&pretty=false -- use example: load *1cbs/dom Domains loaded: CATH 2.40.128.20 GO GO:0001972 GO:0005215 GO:0005501 GO:0005634 GO:0005730 GO:0005737 GO:0005783 GO:0006355 GO:0006810 GO:0007165 GO:0008289 GO:0008544 GO:0016918 GO:0019841 GO:0035115 GO:0042573 GO:0070062 InterPro IPR000463 IPR000566 IPR011038 IPR012674 Pfam PF00061 SCOP 50847 UniProt P29373 Use SHOW DOMAINS for details. $ show domains metadata restapi_version=0.8 metadata date=20140801 metadata url=http://wwwdev.ebi.ac.uk/pdbe/api/mappings/1cbs?pretty=false&metadata=true 1cbs SCOP 50847 identifier=Fatty acid binding protein-like 1cbs SCOP 50847 fold description=Lipocalins 1cbs SCOP 50847 fold sunid=50813 1cbs SCOP 50847 description=Fatty acid binding protein-like 1cbs SCOP 50847 class description=All beta proteins 1cbs SCOP 50847 class sunid=48724 1cbs SCOP 50847 superfamily description=Lipocalins 1cbs SCOP 50847 superfamily sunid=50814 1cbs UniProt P29373 name=RABP2_HUMAN 1cbs UniProt P29373 identifier=RABP2_HUMAN 1cbs GO GO:0005215 name=transporter activity 1cbs GO GO:0005215 identifier=transporter activity 1cbs GO GO:0005215 definition=Enables the directed movement of substances (such as macromolecules, small molecules, ions) into, out of or within a cell, or between cells. 1cbs GO GO:0005215 category=Molecular_function ... 1cbs CATH 2.40.128.20 architecture=Beta Barrel 1cbs CATH 2.40.128.20 identifier=Lipocalin 1cbs CATH 2.40.128.20 name=Cellular retinoic acid binding protein type ii. Chain: a. Engineered:yes 1cbs CATH 2.40.128.20 homology=Lipocalin 1cbs CATH 2.40.128.20 class=Mainly Beta 1cbs CATH 2.40.128.20 topology=Lipocalin 1cbs Pfam PF00061 identifier=Lipocalin / cytosolic fatty-acid binding protein family 1cbs Pfam PF00061 description=Lipocalin / cytosolic fatty-acid binding protein family 1cbs InterPro IPR012674 name=Calycin 1cbs InterPro IPR012674 identifier=Calycin 1cbs InterPro IPR000566 name=Lipocalin/cytosolic fatty-acid binding domain 1cbs InterPro IPR000566 identifier=Lipocalin/cytosolic fatty-acid binding domain 1cbs InterPro IPR011038 name=Calycin-like 1cbs InterPro IPR011038 identifier=Calycin-like 1cbs InterPro IPR000463 name=Cytosolic fatty-acid binding 1cbs InterPro IPR000463 identifier=Cytosolic fatty-acid binding select within(domains,"InterPro where domain.identifier='calycin'") new feature: load *1cbs/val -- loads mmCIF file from EBI along with validation data -- use URL http://wwwdev.ebi.ac.uk/pdbe/api/validation/outliers/all/1cbs?metadata=true&pretty=false -- places that data into property_xxxx arrays -- use examples: load *2x9t/val color property_rsrz "bwr" display group within(5, property_rsrz > 0) found biomolecule 1: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y Validations loaded: property_sidechains (residues: 181) property_rama (residues: 262) property_rsrz (residues: 87, max: 10.6) property_chirals (atoms: 1) property_planes (residues: 21, max: 0.08) property_RNA_suite (residues: 241) property_RNA_pucker (residues: 33) property_bond_angles (atoms: 31, max: 14.12) property_clashes (atoms: 2655, max: 3.42) load *1d66/val select on within(validation,"clashes") new feature: load *1cbs/all -- loads mmCIF file from EBI along with validation and domain data -- may be extended to more types as they arise. new feature: label %[validation.xxxx] -- retrieves comma-separated validation values after load *yyyy/val -- xxxx is an entry in the validation API return, such as clashes or rsrz -- NOT a sum of absolute values, as %[property_xxxx] is for validation data -- example: load *1d66/val select within(validation,"bond_angles") label val=%[validation.bond_angles] new feature: set hoverlabel "%[validation.xxxx]" -- allows customized hover based on validation data -- example: set hoverlabel "%[validation.bond_angles]" new feature: select within(validation, "clashes where value>3") -- selects atoms from "outliers" array -- similar to select within(domains, "....") -- uses sum of absolute values for each atom new feature: print getProperty("validationInfo[select * where _type='clashes']", atomset) -- WHERE close can contain any validation type (see SHOW VALIDATION) -- second parameter can be atom set -- {2.1} for instance -- defaults to current model -- allows uses SQL-like select phrases -- example: set hoverlabel "@{getProperty(\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\").join(',')}" new feature: print getProperty("domainInfo[select * where _type='SCOP']") -- subset of auxiliaryInfo -- assumes model of visible -- second parameter can be atom set: {2.1} for instance -- uses sum of absolute values for each atom -- allows uses SQL-like select phrase: print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']") new feature: SQL NOCACHE flag -- prevents caching when using outside variables or functions -- can be anywhere in the clause -- example: select within(domains,"NOCACHE SCOP where myFunc(domain, _atoms)") new feature: SHOW DOMAINS "some info" -- selects specific records -- text-based matching in all fields and key names -- dot-notation allowed -- examples: show domains name show domains CATH show domains InterPro.IPR002409 show domains Gal4 new feature: SHOW DOMAINS " all" -- shows JSON-like array data -- will involve a circular reference because the domain key points to the parent.parent entry in the main array -- example: load *1cbs/dom show domains InterPro.IPR002409 all { _atoms : ({15:204}) _path : "InterPro.IPR000463" chain_id : "A" domain : { identifier : "Cytosolic fatty-acid binding" mappings : "" name : "Cytosolic fatty-acid binding" } end : { author_insertion_code : "" author_residue_number : 25 residue_number : 25 } entity_id : 1 start : { author_insertion_code : "" author_residue_number : 3 residue_number : 3 } struct_asym_id : "A" } { _atoms : ({32:185}) _path : "InterPro.IPR000463" chain_id : "A" domain : { identifier : "Cytosolic fatty-acid binding" mappings : "" name : "Cytosolic fatty-acid binding" } ... JmolVersion="14.3.3_2014.07.27" bug fix: set pdbAddHydrogens incompatible with mmCIF *xxxx/val new feature: select within(validation, "clashes where value>3") -- selects atoms from "outliers" array -- similar to select within(domains, "....") -- uses sum of absolute values for each atom new feature: print getProperty("validationInfo[select * where _type='clashes']") -- subset of auxiliaryInfo -- WHERE close can contain any validation type, currently including: -- assumes model of visible -- second parameter can be atom set: {2.1} for instance -- allows uses SQL-like select phrase: print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']") -- does NOT use abolute value; report is as an array when select value is used: set hoverlabel "@{getProperty(\\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\\").join(',')}" new feature: print getProperty("domainInfo[select * where _type='SCOP']") -- subset of auxiliaryInfo -- assumes model of visible -- second parameter can be atom set: {2.1} for instance -- uses sum of absolute values for each atom -- allows uses SQL-like select phrase: print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']") JmolVersion="14.3.3_2014.07.26" code: refactoring dssr/domains/validation clases new feature: load *1crs/val -- loads PDBe file with validation data -- places that data into property_xxxx arrays -- use examples: load *2x9t/val color property_rsrz "bwr" display group within(5, property_rsrz > 0) found biomolecule 1: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y Validations loaded: property_sidechains (residues: 181) property_rama (residues: 262) property_rsrz (residues: 87, max: 10.6) property_chirals (atoms: 1) property_planes (residues: 21, max: 0.08) property_RNA_suite (residues: 241) property_RNA_pucker (residues: 33) property_bond_angles (atoms: 31, max: 14.12) property_clashes (atoms: 2655, max: 3.42) load *1d66/val select on within(validation,"clashes") JmolVersion="14.3.3_2014.07.23" bug fix: write PDB fails JmolVersion="14.3.3_2014.07.22" new feature: getProperty(x,"[select a,b,c .... - selection of specific keys to report in getProperty command - does not require star-slash, which could mark end-of-comment new feature: x.in(a,b,c,d...) # suggestion of Sameer Velankar new feature: x.in([a,b,c,d]) - returns 0 (x not in group) or position 1-n new feature: SQL NOCACHE flag - prevents caching when using outside variables or functions - can be anywhere in the clause - example: select within(domains,"NOCACHE ...") JmolVersion="14.3.3_2014.07.20" new feature: load *1cbs/dom - loads domain info from EBI along with mmCIF file - enables seqid (_atom_site.label_seq_id) required for animation - ` information is in the JSON form (in all cases below, additional key/value pairs are allowed): { "" : { } } where is a lower-case PDB id such as 1crs or 1d66 and is one or more records: "" : { } is a database identifier such as: "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC" is one or more records of the form: "" : { } must at the very least contain: "identifier" : "" "mappings" : [ array of ] must minimally be { "chain_id" : "" } but is more likely to contain start/end records: { "chain_id" : "", "start" : , "end" : } must minimally be: { "residue_number" : } but usually also contains "author_residue_number" and "author_insertion_code". - reports to console: Domains loaded: CATH 2.40.128.20 EC GO GO:0001972 GO:0005215 GO:0005501 GO:0005634 GO:0005730 GO:0005737 GO:0005783 GO:0006355 GO:0006810 GO:0007165 GO:0008289 GO:0008544 GO:0016918 GO:0019841 GO:0035115 GO:0042573 GO:0070062 InterPro IPR000463 IPR000566 IPR011038 IPR012674 Pfam PF00061 SCOP 50847 UniProt P29373 Use SHOW DOMAINS for details. new feature: SHOW DOMAINS - displays tab-separated annotation information 1cbs CATH 2.40.128.20 topology=Lipocalin 1cbs Pfam PF00061 identifier=Lipocalin / cytosolic fatty-acid binding protein family 1cbs Pfam PF00061 description=Lipocalin / cytosolic fatty-acid binding protein family 1cbs InterPro IPR012674 name=Calycin 1cbs InterPro IPR012674 identifier=Calycin new feature: SHOW DOMAINS "" - selects specific records - text-based matching in all fields new feature: SHOW DOMAINS " mappings" - adds information about mapping new feature: select within(annotation, "") - allows selection of atoms based on annotations. - can be: - a databaseID: select within(domains,"InterPro") - a specific databaseID.entryID: select within(domains,"InterPro.IPR012674") - a specific databaseID, with WHERE clause: select within(domains,"InterPro where domain.identifier='calycin'") select within(domains,"InterPro where identifier='calycin'") select within(domains,"InterPro where identifier like '*-like*'") note: "annotations" references changed to "domains" bug fix: Jmol application starts in English regardless of language JmolVersion="14.3.3_2014.07.29" new feature: label %[validation.xxxx] -- retrieves comma-separated validation values after load *yyyy/val -- xxxx is an entry in the validation API return, such as clashes or rsrz -- NOT a sum of absolute values, as %[property_xxxx] is for validation data -- example: load *1d66/val select within(validation,"bond_angles") label val=%[validation.bond_angles] new feature: set hoverlabel "%[validation.xxxx]" -- allows customized hover based on validation data -- example: set hoverlabel "%[validation.bond_angles]" JmolVersion="14.3.3_2014.07.27" bug fix: set pdbAddHydrogens incompatible with mmCIF *xxxx/val new feature: select within(validation, "clashes where value>3") -- selects atoms from "outliers" array -- similar to select within(domains, "....") -- uses sum of absolute values for each atom new feature: print getProperty("validationInfo[select * where _type='clashes']") -- subset of auxiliaryInfo -- WHERE close can contain any validation type, currently including: -- assumes model of visible -- second parameter can be atom set: {2.1} for instance -- allows uses SQL-like select phrase: print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']") -- does NOT use abolute value; report is as an array when select value is used: set hoverlabel "@{getProperty(\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\").join(',')}" new feature: print getProperty("domainInfo[select * where _type='SCOP']") -- subset of auxiliaryInfo -- assumes model of visible -- second parameter can be atom set: {2.1} for instance -- uses sum of absolute values for each atom -- allows uses SQL-like select phrase: print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']") JmolVersion="14.3.3_2014.07.26" code: refactoring dssr/domains/validation clases new feature: load *1crs/val -- loads PDBe file with validation data -- places that data into property_xxxx arrays -- use examples: load *2x9t/val color property_rsrz "bwr" display group within(5, property_rsrz > 0) found biomolecule 1: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y Validations loaded: property_sidechains (residues: 181) property_rama (residues: 262) property_rsrz (residues: 87, max: 10.6) property_chirals (atoms: 1) property_planes (residues: 21, max: 0.08) property_RNA_suite (residues: 241) property_RNA_pucker (residues: 33) property_bond_angles (atoms: 31, max: 14.12) property_clashes (atoms: 2655, max: 3.42) load *1d66/val select on within(validation,"clashes") JmolVersion="14.3.3_2014.07.23" bug fix: write PDB fails JmolVersion="14.3.3_2014.07.22" new feature: getProperty(x,"[select a,b,c .... - selection of specific keys to report in getProperty command - does not require star-slash, which could mark end-of-comment new feature: x.in(a,b,c,d...) # suggestion of Sameer Velankar new feature: x.in([a,b,c,d]) - returns 0 (x not in group) or position 1-n new feature: SQL NOCACHE flag - prevents caching when using outside variables or functions - can be anywhere in the clause - example: select within(domains,"NOCACHE ...") JmolVersion="14.3.3_2014.07.20" new feature: load *1cbs/dom - loads domain info from EBI along with mmCIF file - enables seqid (_atom_site.label_seq_id) required for animation - ` information is in the JSON form (in all cases below, additional key/value pairs are allowed): { "" : { } } where is a lower-case PDB id such as 1crs or 1d66 and is one or more records: "" : { } is a database identifier such as: "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC" is one or more records of the form: "" : { } must at the very least contain: "identifier" : "" "mappings" : [ array of ] must minimally be { "chain_id" : "" } but is more likely to contain start/end records: { "chain_id" : "", "start" : , "end" : } must minimally be: { "residue_number" : } but usually also contains "author_residue_number" and "author_insertion_code". - reports to console: Domains loaded: CATH 2.40.128.20 EC GO GO:0001972 GO:0005215 GO:0005501 GO:0005634 GO:0005730 GO:0005737 GO:0005783 GO:0006355 GO:0006810 GO:0007165 GO:0008289 GO:0008544 GO:0016918 GO:0019841 GO:0035115 GO:0042573 GO:0070062 InterPro IPR000463 IPR000566 IPR011038 IPR012674 Pfam PF00061 SCOP 50847 UniProt P29373 Use SHOW DOMAINS for details. new feature: SHOW DOMAINS - displays tab-separated annotation information 1cbs CATH 2.40.128.20 topology=Lipocalin 1cbs Pfam PF00061 identifier=Lipocalin / cytosolic fatty-acid binding protein family 1cbs Pfam PF00061 description=Lipocalin / cytosolic fatty-acid binding protein family 1cbs InterPro IPR012674 name=Calycin 1cbs InterPro IPR012674 identifier=Calycin new feature: SHOW DOMAINS "" - selects specific records - text-based matching in all fields new feature: SHOW DOMAINS " mappings" - adds information about mapping new feature: select within(annotation, "") - allows selection of atoms based on annotations. - can be: - a databaseID: select within(annotations,"InterPro") - a specific databaseID.entryID: select within(annotations,"InterPro.IPR012674 where identifier='calycin'") - a databaseID followed by a WHERE clause: select within(annotations,"InterPro where identifier='calycin'") select within(annotations,"InterPro where identifier like '*-like*'") any text information in the SHOW ANNOTATION report. bug fix: 1-letter sequence for water showing as "I" not "?" bug fix: SHOW SEQUENCE FALSE not giving 1-letter sequences bug fix: for (i in x) where x is an associative array does not work JmolVersion="14.3.3_2014.07.17" new feature: show annotation bug fix: DSSP analysis not returning information to console JmolVersion="14.3.3_2014.07.13" code: refactoring of HTML5 Jmol, JSpecView, and AstexViewer for cleaner interaction with web-page based JavaScript. All interations now go directly through JS bug fix: move and moveto cannot be in the same session JmolVersion="14.3.3_2014.07.12" bug fix: x.func(y) as second operand in a boolean "and" operation where the first operand evaluates to FALSE (so that x.func(y) is never evaluated), triggers a script error. bug fix: set atomPicking, setDrawPicking, pickLabel, pickingSpinRate all should not be in state new feature: load /pdbe/xxxx -- loads CIF file http://www.ebi.ac.uk/pdbe/entry-files/download/xxxx.cif -- can be abbreviated as "*": load *1ai6 -- can be supplemented with annotations (TODO) new feature: {*}.seqid -- mmCIF only -- settable using {*}.seqid = .... -- from _atom_site.label_seq_id -- a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. Data items in the ENTITY_POLY_SEQ category specify the sequence of monomers in a polymer. Allowance is made for the possibility of microheterogeneity in a sample by allowing a given sequence number to be correlated with more than one monomer id - the corresponding ATOM_SITE entries should reflect this heterogeneity. bug fix: model kit menu does not allow setting of new element bug fix: set atomPicking, setDrawPicking should not be in state JmolVersion="14.3.3_2014.07.09" new feature: eval(...) code: org.jmol.util.Measure moved to javajs.util.Measure JmolVersion="14.3.3_2014.07.02" bug fix: getproperty structureInfo can fail with phosphorus monomers bug fix: PDB reader not placing compoundSource in model auxiliary info JmolVersion="14.3.2_2014.06.29" bug fix: MCIF reader misreads magnetic symmetry operators involving xyz scaling bug fix: isosurface "=3hyd" AS "3hyd.omap" fails to save proper file (error in seek() method of javajs.util.binaryDocument) JmolVersion="14.3.1_2014.06.28" bug fix: zz = write("coord") should write untransformed coordinates in XYZ format. It is writing untransformed coordinates in MOL format. bug fix: zz = write("coord", "MOL") should write transformed coordinates in MOL format. It is writing untransformed coordinates. bug fix: write COORD should display untransformed coordinates in XYZ format in the console, but it does not. It writes a JPG file named "coord". bug fix: MCIF reader not reading magnetic centerings 1/3, 2/3 bug fix: JSV jsvAddHighlight broken bug fix: JSmol HTML5 console broken for Safari and Chrome bug fix: CASTEP phonon .geom file reading broken JmolVersion="14.3.0_2014.06.13" RELEASE OF Jmol 14.2.0 Friday, June 13, 2014 new feature: readers with unit cells may load as trajectories bug fix: CASTEP reader broken for multiple cells and geometry optimization JmolVersion="14.1.17_2014.06.12" new feature: protein sidechain minimization -- enabled by set picking dragMinimizeMolecule -- proteins only -- uses MMFF or UFF force field automatically -- important to use set pdbAddHydrogens prior to loading to avoid stereochemical switch (ILE, THR, e.g.) or to be very careful about that JmolVersion="14.1.17_2014.06.11" bug fix: set pdbAddHydrogens fails for structures with ANISOU records bug fix: select x < 0.3 reports error when checking, though it does run when executed bug fix: SMILES for model with nonbonded atoms fails JmolVersion="14.1.17_2014.06.10" bug fix: 06.09 broke unitcell display bug fix: WebPanel error trapping problem; too long file name for tar file synchonized with Jmol 14.0.17 June 9, 2014 bug fix: zoomto broken bug fix: atoms turned off with restrict still clickable JmolVersion="14.1.17" JmolVersion="14.1.17_2014.06.07" FEATURE CHANGE: jmolCommandInput 6th parameter added is default value -- defaults to "help" FEATURE CHANGE: set useArcBall removed -- no longer necessary; never documented -- arcBall is always used anyway FEATURE CHANGE: removed UNITCELL "xxx" where xxx is an isosurface ID -- undocumented -- not necessary, as UNITCELL $xxx or UNITCELL isosurface xxx does as well -- conflicts with new UNITCELL "parent" and other unit cell types FEATURE CHANGE: REMOVED: set fractionalRelative -- an odd quantity -- related specifically to scripts commands using {1/1 1/2 1/3} and cell=nnn -- Its use with cell= was never documented. -- It makes no sense to change the unit cell and not change the meaning of {1/1 1/2 1/3} and cell=nnn -- Only relates to situations where the unit cell has been offset. -- Its presence caused unitcell [{origin} {a} {b} {c}] to fail. -- It should never have been set in state, as it has nothing to do with the state FEATURE CHANGE: default space group names for Int. Tables # 39, 41, 64, 67, 68 added new feature: x= format("JSON", data) -- simple way to generate JSON code. new feature: x = format("base64", data) -- creates base64-encoding of the data -- data can be an array, a byteArray, a string, or a base64-encoded array -- prepends the string with ";base64," new feature: x = format("byteArray", data) -- creates byte array from the data -- data can be an array, a byteArray, a string, or a base64-encoded array new feature: x = format("array", data) -- data can be an array, a byteArray, a string, or a base64-encoded array -- turns byteArrays and strings into integer arrays -- copies arrays if data is an array new feature: load xxxx filter "CELL=va,vb,vc;oa,ob,oc" -- generic cell transformation during load -- applicable to any crystallographic file -- must be the LAST element of a filter -- operators are applied BEFORE this transformation -- can be expanded with {i j k} or {mmm nnn 1} -- can be used to create a supercell with or without offset -- reversed with "cell=!a,b,c:0,0,1/2" -- forces packing, with range based on specified cell dimensions -- example: load t.mcif filter "cell=2a,2b,c:0,0,1/2" new feature: load xxxx filter "NOPACKCELL=va,vb,vc;oa,ob,oc" -- same as CELL= except without any packing new feature: load "cell=parent" or "cell=standard" -- for MCIF files (magnetic spin CIF files -- later, UNITCELL "conventional" displays conventional cell new feature: set showUnitCellInfo TRUE (default) -- set FALSE to hide unit cell information display new feature: unitcell "type" -- type can be "standard" or "parent" for now derived from CIF records -- "primitive" may follow unitcell "standard" unitcell "parent" unitcell "conventional" new feature: unitcell "abc_offset" -- abc_offset is of the form "a,b,c;0,0,0" where a, b, and c, can be any expression involving a, b, and c and 0 can be an offset -- numbers can be expressed fractionally or as decimals -- offset is optional, but semicolon is not -- effect is cumulative -- unit cell is NOT first restored -- reversed using ! -- examples: unitcell "a+b,a-b,c;1/4,1/4,1/4" unitcell "!a+b,a-b,c;1/4,1/4,1/4" unitcell "a+b,a-b,c;" new feature: unitcell {555 575 0} -- 0 here means "draw these cells without internal lines" -- (currently) .uxyz does not scale new feature: unitcell OFFSET and RANGE -- explicit parameters for unitcell {i j k} and unitcell {nnn mmm x} new feature: unitcell BOUNDBOX -- allows calculation of positions relative to boundbox using fractional coordinates -- for example unitcell boundbox draw {1/2 1/2 1/2} unitcell reset new feature: x.push(key,value) for associative array -- same as x.key = value; seems appropriate new feature: x.pop("key") for an associative array -- same as x - "key"; just seems more appropriate new feature: load ORIENTATION or load DATA "...orientation..." ... -- loads a file and preserves current orientation -- creates saved orientation "preload" -- shortcut for save orientation preload;load....;restore orientation preload -- example: load orientation "" // reload file with same orientation new feature: V3000 reading of DATA SGROUP records: -- for example: ... M V30 BEGIN SGROUP M V30 1 DAT 0 ATOMS=(1 1) FIELDNAME=pc FIELDDATA=-0.2344 M V30 1 DAT 0 ATOMS=(1 2) FIELDNAME=pc FIELDDATA=0.3344 M V30 1 DAT 0 ATOMS=(1 3) FIELDNAME=pc FIELDDATA=-0.4344 M V30 END SGROUP ... then partialCharges, for example, can be set using: {*}.partialCharge = {*}.property_pc.all -- optionally, if FIELDNAME contains "partial" then the atom's partial charge is automatically set instead of property_partialCharge -- if more than one field starts with "partial" then the first one indicated in the file is assigned to partialCharge and the any others are left as property_partialXXXX new feature: moveTo AXIS [a,b,c,x,y,z] -- for example: moveTo AXIS a -- rotates the model smoothly to a crystallographic or cartesian axis. -- in the case of abc, the rotation places the remaining two axes to the right and down (International Tables standard) -- in the case of xyz, the rotation places the remaining two axes to the right and up (standard Cartesian orientation) -- for abc, if no unit cell is available, a simple {1 1 1 90 90 90} unit cell is used -- added to application and popup View menus new feature: JSmol: allow for a user callback for customization of menu if (Jmol._showMenuCallback) Jmol._showMenuCallback(menu, x, y); new feature: show(xxx) function -- same as script("show " + xxx) new feature: set showUnitCellDetails TRUE (default) -- FALSE removes a,b,c,alpha,beta,gamma lines new feature: unitcell RESET (or RESTORE) -- returns unit cell to original values and removes offset and scaling -- resets width to fine line new feature: restore UNITCELL -- returns unit cell to original values and removes offset and scaling new feature: show symop n "fmatrix" new feature: show symop @1 @2 "fmatrix" -- gives rational fractional matrix new feature: BilbaoReader NONORM option -- reads displacements as actual values, not normalized new feature: load ... filter "symop=..." -- list of numbers separated by space, for example: load quartz.cif packed filter "symop=2" load quartz.cif packed filter "symop=2 3" new feature: set echo depth x.x for standard echos -- works for 3D echos now as well as 2D echos -- values in percent of depth -- x.x >= 1000 are (x.x % 1000) in front of the 3D position -- x.x <= -1000 are (-x.x % 1000) behind the 3D position new feature: set starWidth -- replaces set set starScale new feature: menu item color--atoms--by scheme--vectors new feature: load "filename" packed x.x -- x.x is the range in fractional coordinates within which an atom can be close to being in the 555 cell but not quite and still be accepted by the atom loading filter. -- default is 0.02 -- in some cases, this adds too many atoms and can be reduced to 0.01 or 0.001 -- modulation reader uses 0.001 strictly. -- for example: load t2.bcs packed 0.01 {1.1}.property_dist = {1.1}.distance.min({1.2}) {1.1}.spacefill={1.1}.property_dist.all color {1.1} property_dist "bwr" range 0 0.5 select 1.2 stars -0.3 set starscale 0.1 frame * unitcell {1.2} new feature: Bilbao Crystallographic Server file reader -- scrapes Bilbao HTML pages for Bilbao structure format -- for example, http://www.cryst.ehu.es/cryst/compstru.html or http://www.cryst.ehu.es/cryst/amplimodes.html -- reads Bilbao standard setting data: 15 13.800 5.691 9.420 90.0 102.3 90.0 7 Pb 1 4e 0.0000 0.2910 0.2500 Pb 2 8f 0.3170 0.3090 0.3520 P 1 8f 0.5990 0.2410 0.4470 O 1 8f 0.6430 0.0300 0.3920 O 2 8f 0.6340 0.4640 0.3740 O 3 8f 0.6420 0.2800 0.6120 O 4 8f 0.4910 0.2220 0.4200 -- identified by 1st and third line being a single integer only (IT spacegroup number and atom count, respectively) new feature: dipole ID m1 ALL {...} -- creates a molecular dipole set with ID -- one dipole per molecule in specified range -- connected to associated molecule in terms of visibility new feature: unit cell display includes k (mCIF) and q (CIF, Jana2006) vectors bug fix: cannot zap model for which atoms are all deleted bug fix: isosurface "=1bna" does not work for zapped file bug fix: label %[x] does not work bug fix: show spacegroup not complete for magnetic and modulated structures bug fix: legacy JVXL file data skipping broken in 14.1.13 bug fix: MO file line includes full path; should be just the filename bug fix: V3000 reader skips 2nd file in multiple files separated by $$$$ bug fix: isosurface color density broken bug fix: isosurface slab @1 @2 @3 broken bug fix: (undocumented) isosurface slab @3 fails when isosurface has not been mapped bug fix: console not properly handling TAB key bug fix: double-click drag doesn't drag the model, and since double-click is determined by time, not location, it appears as though sometimes the model drags and sometimes it does not. Solution is to a) add a localization to double clicking. I think that was removed because of touch interface problems. b) add left-double-drag to left-single-drag for standard rotation bug fix: browser errant zero mouse move causes collapse of rotation matrix due to coding error in arcball routine bug fix: drag-drop followed by model building may fail. bug fix: tm.matrixRotate protected from setting to all zeros (Chrome issue; reason unknown) bug fix: JavaScript state creation not properly representing integral decimal numbers bug fix: draw length pt1 pt2 only makes half the line bug fix: color $m* green blue wild card coloring for isosurfaces doe not work bug fix: {*}.trace = {*}.bfactor crashes Jmol (.bfactor does not exist) bug fix: ramachandran plot scaling off bug fix: color $isosurface1 "rwb" range 3.0 4.5 fails to set color scheme bug fix: write VAR X fails if X is an associative array bug fix: show NMR broken bug fix: H1 simulation not happening in Jmol.jar bug fix: write() function does not work for write("coords") bug fix: vibration vectors may have incorrect length if vector scale and vibration scale are different bug fix: LOAD ... SUPERCELL not saved in state bug fix: CASTEP reader not handling supercell correctly (packing and phonons) bug fix: Jmol 14.1.12 broke atom.fxyz for models that have vibrations. -- atom.fxyz SHOULD change with changes in unit cell, but when an update was made to accommodate modulated subsystems, where different atoms in a model may have different unit cells, this capability was lost for any atom having any sort of vibration other than a modulation. bug fix: set hoverlabel will be ignored if no hover has already taken place bug fix: symmetry operation drawing/description with centering bug fix: Bilbao uses 2nd origin for numerous spacegroups bug fix: magCIF reader using 4x4 determinant, not 3x3 bug fix: file drag-drop doing append if no atoms bug fix: BilbaoReader amplimode correction bug fix: polyhedra not vibrating bug fix: application file open preview not working bug fix: show file only shows file for model 1.1 bug fix: signed applet not accepting drag-drop bug fix: getProperty "fileInfo" for CIF should fix keys (lower case and change '.' to '_') bug fix: problems reading PNGJ files for Jana2006 code: V3000 reader split off from MolReader; saves 2K or so. code: faster calculations involving point-based atom properties such as fx code: TransformManager clean-up; code: Viewer/FileManager clean-up; image loading moved to jzu JmolVersion="14.1.15" JmolVersion="14.1.15_2014.05.08" bug fix: pubChem reader broken new feature: mCIF (magnetic CIF) file reader -- preliminary reader for CIF format development testing -- includes latest proposal in committee as of May 8, 2014 new feature: unitcell [ {origin} {a} {b} {c} ] -- defines unit cell in terms of an origin and three vectors -- just wasn't documented. JmolVersion="14.1.15_2014.05.06" bug fix: CIF reader not filtering atoms by element bug fix: structure command may not properly remove residues from structures (F. Reichmann) bug fix: FRAME n setting frame to n - 1. (F. Reichmann) bug fix: unitcell {0 0 0}; in state leaves unit cell on bug fix: modulation of anisotropic parameters broken bug fix: Jana2006 reader does not accept filter "MODAVE" bug fix: msCIF with filter "MODAXES=X" broken JmolVersion="14.1.15_2014.05.04" new feature: reset PRINT -- clears the output buffer (scriptWait, scriptEcho, evaluateVar bug fix: color property x does not pass script check, so not allowed in web command box bug fix: echo "@{xxx}" may fail but fix: print @b fails for referred variable an array bug fix: xxx.format("%8.-3p") does not work bug fix: [array].format("%8.3p") does not work bug fix: PDB Reader skips first ANISOU record bug fix: SFTP not supported bug fix: fix for measurements not updating with modulation x.x new feature: replace() -- no arguments means "clean whitespace to single space and trim" new feature: replace(x, y, TRUE) -- all occurrences of characters of x will be replaced with y. new feature: mCIF reader -- Bilbao Crystallographic Server format -- magnetic extension to CIF reader new feature: set vectorsCentered -- centers vibration vector on atom -- vector is never animated -- useful for magnetic/spin properties new feature: select xyz > 1.0 -- xyz, fxyz, fuxyz, uxyz, vxyz -- uses length JmolVersion="14.1.14" JmolVersion="14.1.14_2014.04.28" FEATURE CHANGE: Application Tools...Spectrum menu removed -- Issue is that EPFL returns with a new 2D structure, -- and Jmol would have to determine from that an atom selection map. -- we are doing this with JSmol, but not yet with the application. -- Bummer! new feature: getProperty(x, SQL_query) -- Full SQL for any Jmol associative array. -- Result is an array if x is an array. -- example: x = [ 1,2,3,{ "testing":"here","val":33 } ] y = getProperty(x, "SELECT val WHERE testing LIKE 'here'") show y [ 33 ] z = x[4] show z z = { "testing":"here","val":33 } y = getProperty(z, "SELECT val WHERE testing LIKE 'here'") show y 33 new feature: LIKE operator extended to atom expressions --IS case-sensitive (unlike "=") --examples: load =1crn select group like "G*" print "x" like "X" // FALSE new feature: "like" operator, strings only: a LIKE "x" a equals x a LIKE "*x" a ends with x a LIKE "x*" a starts with x a LIKE "*x*" a contains x new feature: rich SQL logic in GETPROPERTY, getProperty(), and within(dssr,"xxxx.yyy..."): -- syntax: [SELECT keys WHERE expression] -- keys indicating only one key, such as "nt1", return just the value -- keys may be a LIKE wildcard such as "nt*" or "*nt" or "*nt*" (but are NOT case sensitive) also return just the value(s) -- keys * or */* means "return all values as an associative array" -- keys */nt1,nt2 means "return a new associative array including only keys nt1 and nt2" -- keys */nt* means "return a new associative array including all keys starting with nt" -- if drilling to this associative array from a list, * or */... returns an array of key/value pairs -- expression may be any standard Jmol expression that does not involve actual Jmol variables (instead, the variable names should all be the keys, and their values will be that given in the key:value pair) -- example: load files "=1ehz/dssr" x = getProperty("auxiliaryInfo.models.1.dssr.basepairs"); print getProperty(x,"[SELECT nt* WHERE bp='C-G']") print getProperty(x, "[SELECT */nt* WHERE Saenger LIKE '19*']") -- keys may be "dotted" -- modelProperties.FreqValue -- but in this case the dotted key (FreqValue here) must be exact case. "modelProperties.freqvalue" would not work. -- example: load C6H6.smol x = getProperty("modelInfo.models[select _ipt where modelProperties.PATH='Frequencies' and modelProperties.FreqValue > 3000]") select modelIndex = x // 6 models selected new feature: JANA2006 reader adds M40 molecular group support -- no TLS modulation -- no local axes (third header line of pos# record) new feature: calculate structure dssr -- fetches http://x3dna.bio.columbia.edu/dssr/?POST?opts=--hl%20--more&model=[pdb data] -- builds auxiliaryInfo.models.n.dssr -- displays summary report -- complements calculate structure dssp, except it is done by the x3dna server at Columbia, not Jmol new feature: (application only) -a --autoAnimationDelay -- delay time in seconds for press-and-hold operation of toolbar animation buttons (default 0.2; set to 0 to disable) new feature: calculate hbonds structure -- now includes DSSR-calculated bonds for nucleic acids new feature: select leadAtom(s) -- selects *.CA, *.P and terminal O in nucleotides new feature: set backboneSteps TRUE -- draws base pair steps between dssr-identified base pairs TRANSCRIPTION/DNA 06-MAR-92 1D66 DNA RECOGNITION BY GAL4: STRUCTURE OF A PROTEIN/DNA COMPLEX found biomolecule 1: D, E, A, B DSSR: a software program for Defining the Secondary Structures of RNA from three-dimensional coordinates v1.0.6-2014apr04, Xiang-Jun Lu ([email protected]) List of 19 base pairs List of 1 helix List of 4 stems List of 1 coaxial stack List of 3 internal loops new feature: load =1msy/dssr -- very simple RCSB/DSSR connection -- loads both files: FileManager opening 1 http://www.rcsb.org/pdb/files/1msy.pdb.gz FileManager opening 1 http://x3dna.bio.columbia.edu/dssr?id=1msy load =1msy/dssr set backboneSteps backbone -0.2 select within(dssr,"helices") color blue select within(dssr,"stems") color red select within (dssr,"singleStranded") color white select within (dssr,"multiplets") color green select within (dssr,"isolatedPairs") // was "lonePairs" color orange select leadatom spacefill 1.5 label %[group1] font label 24 bold set labeloffset 0 0 color label grey new feature: select within(dssr,"subset") -- subsets include aMinorMotifs basePairs bulges coaxialStacks hairpinLoops helices internalLoops junctions kinkTurns kissingLoops lonePairs multiplets riboseZippers singleStranded stems summary -- optionally followed by ".n" where n is a number starting with 1 -- optionally followed by ".linkedBy" for loops, bulges, and junctions -- optionally followed by ".res1" or ".res2" -- can accommodate SQL -- results are cached for individual models -- example: select within(dssr,"multiplets") select within(dssr,"bulges.3") select within(dssr,"bulges.3.linkedBy") select within(dssr,"basePairs[SELECT res* WHERE twist > 1]") new feature: select x = [array or array variable] -- implied OR -- operators other than equals use implied AND new feature: DSSR server -- load files "=1d66" + "=dssr/1d66" DSSR: a software program for Defining the Secondary Structures of RNA from three-dimensional coordinates v1.0.6-2014apr04, Xiang-Jun Lu ([email protected]) -- uses new "concatenate" notation to combine data from two sources -- after loading, try print getProperty("auxiliaryInfo.models.1.dssr") new feature: array.keys.all -- drills down in sequential or associative arrays -- gives all keys as well as number of array elements: load files "=1d66" + "=dssr/1d66" x=getProperty("auxiliaryInfo.models.1.dssr") print x.keys.all basePairs basePairs.19.DSSR basePairs.19.LW basePairs.19.Saenger basePairs.19.bp basePairs.19.id basePairs.19.info basePairs.19.name basePairs.19.nt1 basePairs.19.nt2 coaxialStacks coaxialStacks.1.helix coaxialStacks.1.nts coaxialStacks.1.nts.4.5.DSSR coaxialStacks.1.nts.4.5.LW coaxialStacks.1.nts.4.5.Saenger coaxialStacks.1.nts.4.5.bp coaxialStacks.1.nts.4.5.id coaxialStacks.1.nts.4.5.info coaxialStacks.1.nts.4.5.name coaxialStacks.1.nts.4.5.nt1 coaxialStacks.1.nts.4.5.nt2 coaxialStacks.1.stemCount helices helices.1.basePairs helices.1.basePairs.19.DSSR helices.1.basePairs.19.LW helices.1.basePairs.19.Saenger helices.1.basePairs.19.bp helices.1.basePairs.19.id helices.1.basePairs.19.info helices.1.basePairs.19.name helices.1.basePairs.19.nt1 helices.1.basePairs.19.nt2 helices.1.info internalLoops internalLoops.3.count internalLoops.3.dssrType internalLoops.3.id internalLoops.3.linkedBy internalLoops.3.nts internalLoops.3.nts.3.count internalLoops.3.nts.3.nt internalLoops.3.nts.3.seq stems stems.4.basePairs stems.4.basePairs.5.DSSR stems.4.basePairs.5.LW stems.4.basePairs.5.Saenger stems.4.basePairs.5.bp stems.4.basePairs.5.id stems.4.basePairs.5.info stems.4.basePairs.5.name stems.4.basePairs.5.nt1 stems.4.basePairs.5.nt2 stems.4.info new feature: array.join() -- creates a flat array from an array of arrays: -- example: $x = [1,2,[3,4,5],[6,[7,8,9]]].join() $show x x = [ 1,2,3,4,5,6,7,8,9 ] new feature: DSSR output reading -- Defining the (Secondary) Structures of RNA -- see http://forum.x3dna.org/rna-structures/dssr-software-for-defining-the-%28secondary%29-structures-of-rna/ -- brain-child of Xiang-Jun Lu ([email protected]; Columbia University) -- use system command x3d-dssr.exe --input=xxxx.pdb > xxxx.out -- then in Jmol: load files "xxxx.pdb" + "xxxx.out" -- all DSSR information will be in auxiliaryInfo.models.dssr with the following keys: aMinorMotifs basePairs bulges coaxialStacks hairpinLoops helices internalLoops junctions kinkTurns kissingLoops lonePairs multiplets riboseZippers singleStrandedSegments stems -- all entries are lists. -- most of these list entries have "nt" entries, and those are nucleotide residue identifiers, so Jmol's getProperty() "drill-down" capabilities allow for: x = getProperty("auxiliaryInfo.models.1.dssr.basepairs.nt") select @{x} bug fix: x=3;select atomno=x can fail (E. Martz) bug fix: JSmol deferred (image-covered) applet can produce unwanted multiple canvases (J. Gutow) bug fix: print "x" = "X" returns false; should be TRUE (broken in 14.0/1.10) bug fix: script error in JavaScript xxx.spt stops all subsequent script processing (P. Bays) bug fix: color property_x fails (broken in jmol-14.1.14_2014.04.16) (P. Bays) bug fix: halos ON fails for small vdw radii (A. Herraez) bug fix: CIF reader with bsModels fails -- example: load maleic.cif [3 5 7] bug fix: reading concatenated files from PNGJ with model selected bug fix: reading gzip files from PNGJ fails when concatenated bug fix: group1 codes for nonstandard residues not read from mmCIF (_struct_ref_seq_dif.db_mon_id) or PDB (SEQADV) bug fix: select group="ALA" fails due to select group ..... option bug fix: getProperty("auxiliaryInfo") fails for JavaScript bug fix: Gaussian FCHK file reader fails when no SP coefficients bug fix: set defaultVDW not working (A. Herraez) bug fix: color isosurface range broken (Lucy Cusinato) bug fix: script compiler error: x.x*x.x requiring space: x.x * x.x (Alexander Rose) bug fix: lost H atoms of PDB-designated water (E. Martz) bug fix: mouse rotation can cause loss of model (E. Martz) bug fix: Jana2006 reader not reading groups correctly bug fix: functions called in script defined by script called by this script must be lower case. (A. Rose) bug fix: clickable atoms may not be considered visible for hover bug fix: select color=red should be color="red" to allow for variable after "color=" code: upgrade of Apache Commons CLI (Command Line Interface) to 1.2 from 1.0 code: T4 generalized as extending T3, allowing 4D mesh reading. code: implementation of Andrew Hanson's 3D Ball Roll mouse algorithm -- no significant practical improvement, but nicer mathematics -- a bit more involved, but this is once per mouse move. Doesn't matter. JmolVersion="14.1.13" new feature: load files "xxx" + "yyy" -- concatenates yyy onto xxx as a single string of file data new feature: Gaussian fchk file reader new feature: var x,y,z; -- commas optional -- similar to JavaScript -- initializes the variable to "" JmolVersion="14.1.13_2014.04.03c" bug fix: LOAD command cannot force XML types -- load xmlvasp::vasprun.xml -- load vasp::vasprun.xml -- option without "xml" required only for Odyssey, as there are both Odyssey and XmlOdyssey bug fix: application file open fails when preview is unchecked in Edit|Properties bug fix: vectors using vibration scale, not vector scale bug fix: vector 0.01 misread as if integer "20" (pixel width) bug fix: Gaussian fchk+freq needs to propagate bonding as well to modes bug fix: JDX reading of older Chime-related ##PEAKASSIGNMENTS records bug fix: polyhedra display improperly when some vertex atoms are hidden (Nick Greeves) code: Huge refactoring for JavaScript and judicious post-Google Closure Compiler editing serves to reduce code size by 5% -- to 1.38 MB for core.z.js partially due to additional directory changes in JavaScript and partially due to removing unnecessary final static variable defs. (These are just constants that are never referred to.) JmolVersion="14.1.13_2014.04.02" code: JavaScript additional global reduction new feature: load files "xxx" + "yyy" -- concatenates yyy onto xxx as a single string of file data JmolVersion="14.1.13_2014.04.01d" bug fix: JmolAppletSigned0.jar missing export classes (POV-Ray, VRML, for example) bug fix: Mac Spartan spardir reading -- for web, use zipped up version of spardir new feature: Gaussian fchk file reader bug fix: A=[]; A[3] = 5 not working new feature: var x,y,z; -- commas optional -- similar to JavaScript -- initializes the variable to "" bug fix: var x not isolated to script context bug fix: ellipsoid command broken JmolVersion="14.1.12" JmolVersion="14.1.12_2014.03.30" changes since 14.1.11: new feature: JSpecView getSolutionColor fill/all/none/false -- any combination of these four flags -- fill: fill area under a VIS spectrum with color -- none: remove fill -- all: do this for all spectra, not just the selected spectrum -- false: use interpolation method rather than curve fitting (see jspecview.common.Visible.java for details) new feature: JSpecView PEAK command -- adds PEAK GC/MS "#1" -- #1 here indicates "MS for first GC peak" summary: We now have general ZIP and image file (including PDF) creation in JavaScript independent of Jmol itself. new feature; byteArray type -- from format("byteArray", x) where x is an integer array, or x is a string starting with ";base64," x is any other variable (converted to byte list of string equiv. -- from binary associative arrays new feature: binary associative arrays -- Any array containing "$_BINARY_$" as a key. -- Values may contain raw byte array data, but need not. -- Can be expanded or changed, just like any associative array. -- Seen in string form when in a string context. -- .type of elements will report "byteArray" new feature: x = write("PNGJ") -- Creates a binary associative array equivalent to writing a PNGJ file -- Contains keys "_IMAGE_", "JmolManifest.txt", "state.spt" and all associated files. new feature: write VAR x "filename" or write @x "filename" -- Where x is a byteArray or a (possibly binary) associative array. -- When x is a byteArray, writes binary data to a file. -- When x is an associative array, creates a ZIP file (or PNGJ file, if _IMAGE_ is present and is PNG format), automatically converting strings starting with ";base64," to byte arrays in the ZIP file. To do the same with x a binary array, just use @{array(x)} instead of @x. new feature: x = load("myfile",true) -- Creates a binary associative array variable x that contains the contents of the file. -- data are stored as byte arrays. -- If the file is a standard file, the key "_DATA_" will hold the file data. -- If the file is a PNGJ file, the key "_IMAGE_" will hold the image data, and additional files are keyed by file name. -- If the file is a zip file, the files are keyed by file name. -- Note that x = load("myfile") without "true" loads the contents of the file into x and, if the file is a PNGJ or ZIP file, just loads the list of files in the collection, not the actual data. new feature: filter "ATOM" opposite of filter "HETATM" new feature: load ASYNC .... new feature: script ASYNC .... -- load and script ASYNC start a new asynchronous thread to load the file and then continue after that. -- JSmol/HTML5 only; others ignore new feature: Mol3D reader -- using load "MOL3D::xxx.mol" one can force only 3D mol files to be read -- 2D mol files will throw an error. new feature: show CHEMICAL STDINCHIKEY new feature: show CHEMICAL STDINCHI new feature: load ":inchikey:xxxxx" -- requires STANDARD InChIKey (as from {*}.find("chemical", "stdinchikey") new feature: x = {*}.find("chemical",type) -- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey" -- uses NCI/CADD CIR -- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped -- Note that unlike SHOW CHEMICAL, trailing new line char is removed new feature: x = smilesString.find("chemical",type) -- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey" -- allows going directly from SMILES to other quantities -- uses NCI/CADD CIR -- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped -- Note that unlike SHOW CHEMICAL, trailing new line char is removed bug fix: NWChem reader broken bug fix: JSpecView GC/MS issues bug fix: JSmol callbacks should refer to "jmolApplet0" not "jmolApplet0_object" bug fix: set cameraDepth not working -- note that loading of PyMOL files affects this setting, which is reset only using the INITIALIZE command bug fix: getProperty() function does not recognize a list as a variable and returns it as a string bug fix: Dsn6Reader.java misnamed, causing EDS map file load error in JavaScript only. (I did not know that was even possible!) bug fix: java.io.dataStreamReader.readShort() does not take into account JavaScript equivalence of short and int, causing "-1" to be read as 65535. bug fix: minimum modulationScale set to 1; should be 0.1. bug fix: translucent echo backgrounds broken bug fix: filter "HETATM" does not work bug fix: write XYZ broken by changes to the way arrays are shown with the PRINT command bug fix: x = adfjladj(3) crashes Jmol bug fix: x[0] = "tst" "here" "now" should cause script exception bug fix: isosurface MOLECULAR delivers wrong surface bug fix: spacefill ionic not working bug fix: set cameraDepth disabled bug fix: some translations not being carried out. bug fix: msCIF reader not accepting normalized commensurate Fourier vectors bug fix: JSmol/HTML MSIE local installation AJAX working again (still no binary files) code: variable compression issues in Jmol and JSV code: org.jmol.io and org.jmol.io2 consolidated code: select water hard-coded for speed (2 x faster) code: careful attention to loading of biomolecules results in 160K core bio load savings code: JavaScript core load reduced by 2% (30KB) by changing high-frequency global name "viewer" to "vwr" code: refactoring of image writing code to javajs.img for general use code: refactoring of zip code into javajs.util for general use code: refactoring of minimization code saves 10KB code: isosurface MOLECULAR speed-up by a factor of 10. -- better handling of constants during iteration -- better identification of unnecessary edges and faces JmolVersion="14.1.12_2014.03.27b" bug fix: NWChem reader broken new feature: JSpecView PEAK command -- adds PEAK GC/MS "#1" -- #1 here indicates "MS for first GC peak" bug fix: JSpecView GC/MS issues bug fix: JSmol callbacks should refer to "jmolApplet0" not "jmolApplet0_object" bug fix: set cameraDepth not working -- note that loading of PyMOL files affects this setting, which is reset only using the INITIALIZE command code: variable compression issues in Jmol and JSV JmolVersion="14.1.12_2014.03.21" bug fix: getProperty() function does not recognize a list as a variable and returns it as a string code: org.jmol.io and org.jmol.io2 consolidated code: select water hard-coded for speed (2 x faster) code: careful attention to loading of biomolecules results in 160K core bio load savings code: JavaScript core load reduced by 2% (30KB) by changing high-frequency global name "viewer" to "vwr" code: refactoring of image writing code to javajs.img for general use code: refactoring of zip code into javajs.util for general use code: refactoring of minimization code saves 10KB summary: We now have general ZIP and image file (including PDF) creation in JavaScript independent of Jmol itself. JmolVersion="14.1.12_2014.03.19" new feature: x= format("JSON", data) -- simple way to generate JSON code. new feature: x = format("base64", data) -- creates base64-encoding of the data -- prepends the string with ";base64," new feature; binary byte array -- from array(s) where s starts with ";base64," -- from binary associative arrays new feature: binary associative arrays -- Any array containing "$_BINARY_$" as a key. -- Values may contain raw byte array data, but need not. -- Can be expanded or changed, just like any associative array. -- Seen in string form when in a string context. -- .type of elements will report "byteArray" new feature: x = write("PNGJ") -- Creates a binary associative array equivalent to writing a PNGJ file -- Contains keys "_IMAGE_", "JmolManifest.txt", "state.spt" and all associated files. new feature: write VAR x "filename" or write @x "filename" -- Where x is a byteArray or a (possibly binary) associative array. -- When x is a byteArray, writes binary data to a file. -- When x is an associative array, creates a ZIP file (or PNGJ file, if _IMAGE_ is present and is PNG format), automatically converting strings starting with ";base64," to byte arrays in the ZIP file. To do the same with x a binary array, just use @{array(x)} instead of @x. new feature: x = load("myfile",true) -- Creates a binary associative array variable x that contains the contents of the file file. -- data are stored as raw bytes. -- If the file is a standard file, the key "_DATA_" will hold the file data. -- If the file is a PNGJ file, the key "_IMAGE_" will hold the image data, and additional files are keyed by file name. -- If the file is a zip file, the files are keyed by file name. -- Note that x = load("myfile") without "true" loads the contents of the file into x and, if the file is a PNGJ or ZIP file, just loads the list of files in the collection, not the actual data. JmolVersion="14.1.12_2014.03.18" bug fix: Dsn6Reader.java misnamed, causing EDS map file load error in JavaScript only. (I did not know that was even possible!) bug fix: java.io.dataStreamReader.readShort() does not take into account JavaScript equivalence of short and int, causing "-1" to be read as 65535. JmolVersion="14.1.12_2014.03.17" bug fix: minimum modulationScale set to 1; should be 0.1. new feature: filter "ATOM" opposite of filter "HETATM" bug fix: translucent echo backgrounds broken bug fix: filter "HETATM" does not work bug fix: write XYZ broken by changes to the way arrays are shown with the PRINT command bug fix: x = adfjladj(3) crashes Jmol bug fix: x[0] = "tst" "here" "now" should cause script exception JmolVersion="14.1.12_2014.03.16" code: isosurface MOLECULAR speed-up by a factor of 10. -- better handling of constants during iteration -- better identification of unnecessary edges and faces bug fix: isosurface MOLECULAR delivers wrong surface JmolVersion="14.1.12_2014.03.13" bug fix: spacefill ionic not working bug fix: set cameraDepth disabled JmolVersion="14.1.12_2014.03.10" bug fix: some translations not being carried out. new feature: load ASYNC .... new feature: script ASYNC .... -- load and script ASYNC start a new asynchronous thread to load the file and then continue after that. -- JSmol/HTML5 only; others ignore bug fix: msCIF reader not accepting normalized commensurate Fourier vectors bug fix: JSmol/HTML MSIE local installation AJAX working again (still no binary files) new feature: Mol3D reader new feature: show CHEMICAL STDINCHIKEY new feature: show CHEMICAL STDINCHI new feature: load ":inchikey:xxxxx" -- requires STANDARD InChIKey (as from {*}.find("chemical", "stdinchikey") new feature: x = {*}.find("chemical",type) -- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey" -- uses NCI/CADD CIR -- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped -- Note that unlike SHOW CHEMICAL, trailing new line char is removed new feature: x = smilesString.find("chemical",type) -- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey" -- allows going directly from SMILES to other quantities -- uses NCI/CADD CIR -- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped -- Note that unlike SHOW CHEMICAL, trailing new line char is removed JmolVersion="14.1.11" JmolVersion="14.1.11_2014.03.08" FEATURE CHANGE: associative array .count, .length, .lines removed -- specifically for associative arrays, nothing more -- these were unnecessary equivalents of .size -- change will not be incorporated into Jmol 14.0 new feature: JSpecView readers for ACD/Labs annotated MS, IR, Raman, and UV/VIS -- displays fragments for MS (highlights atoms) -- highlights atoms involved in an IR/Raman stretch -- UV/VIS and Raman untested new feature: JSpecView and Jmol read ACD/Labs assigned spectra block JDX files. -- 2D MOL files with missing hydrogens on hetero atoms. -- fully synced -- drag-drop enabled new feature: associative array standard "dot" notation -- a.test = 33 -- print a.test -- caveat: cannot do this with a.keys, a.size, or a.type -- not implemented in Jmol 14.0 because of the feature change new feature: associative array alternative ".." syntax -- same as JavaScript and Java, but ".." instead of "." -- for example: a["test"] == a..test new feature: .covalentRadius added as more appropriate alias for .covalent new feature: .bondingRadius added as more appropriate alias for .ionic new feature: set bondingVersion -- 0: Jmol default, from OpenBabel 1.100.1 -- uses a mix of covalent and ionic radii for autobonding -- 1: Pyykko and Atsumi, 2009 -- changes the distance criteria for autobonding to be specifically covalent -- saved in state only for file loading; should be unchanged after state loading. new feature: color(color1, color2, n, asHSL) -- returns a color scheme as a string -- colors can be of any nature -- string or point, name or rgb -- n colors; simple interpolation from color1 to color2 -- asHSL must be TRUE or FALSE; -- when TRUE, uses hue/saturation/luminance instead of rgb gradient -- example: $ print color("white", "red", 5, false) [xffffff][xffbfbf][xff7f7f][xff3f3f][xff0000] $ print color("red", "blue", 5, true) [xff0000][xffff00][x00ff00][x00ffff][x0000ff] $ set propertyColorScheme color("yellow","black",50,true) $ color property temperature new feature: added simpler associative array notation: [key:value,...] -- no quotes required -- supplements {"key":value,...} where quotes are still required due to conflict with atom set chain descriptors such as {a:b}. new feature: catchable THROW -- as in Java or JavaScript, allows a way of jumping out of a process. -- outside of try/catch gives the expected error report: $ print "testing" $ throw "testing here" $ print "we will never see this" testing script ERROR: testing here ---- throw >> "testing here" << -- passes a string as the variable thrown_value $ print thrown_value testing here -- can be trapped with try/catch: try{ print "testing" throw "testing here" print "continuing" } catch(e) { print "thrown_value=" + thrown_value; } results in: testing thrown_value=testing here new feature: asynchronous resumable processes -- THROW CONTEXT contextName -- throws a catchable error, but in the process of doing so, creates a script context that allows RESUMING at the point of the throw, unlike anything in JavaScript or Java (or perhaps like a debug mode). -- if within a try/catch phrase, is handled by catch. in which case the error message is simply the context name. -- if not within a try/catch phrase just reports to resume, enter: &contextName -- essentially provides a callback into the running script, so you could, for example, put a running script on hold while you load a file, check variables, etc., then continue. -- can be resumed using RESUME CONTEXT or just & followed by the name of the context: &test resume context &test -- replaces PAUSE/RESUME, now deprecated. -- The current context returns to the highest level, however the variables in the context that was thrown are accessible as though the context variable was an associative array. So, for example, if we have function f(a, b, c) { var x = 5 throw context testing print "x=" + x } f(1,2,3) print "done" The context will be saved as the variable "testing", and we can then test all the variables in that saved context, (and change them before continuing): print testing["x"] 5 testing["x"]++ print testing _path : [script] >> function f _retval : 0 a : 2 b : 2 c : 3 x : 6 -- contexts can be restored using &contextName In the above case, we would get the report: x=6 done new feature: SAVE CONTEXT contextName -- similar to THROW, but does not stop processing. So in the above example, if we change THROW to SAVE, the processing continues, but after it has completed, we can change context variables and run it again. new feature: show SAVED -- same as show SAVE new feature: delete $SAVED savedName delete $SAVED Context_xxxx -- $ is important; case is not. -- allows selective deletion of saved objects -- Contexts always start with "Context_" but the subname "xxxx" in this case will work as well. new feature: RESUME with arguments is synonymous with RESTORE new feature: Better idea for THROW: throw "this is an error" throw x -- that is, throw is like PRINT, not LABEL bug fix: applet language localization skipping translations containing \" bug fix: application language localization does not include defs defined for JmolApplet bug fix: JSpecView/JSME connection with simulated and ACD/Labs annotated spectra bug fix: JSpecView loading simulation now compatible with synced applets bug fix: drag/drop not working for JSV applet bug fix: solid-state NMR calc (Magres) should not apply "nearest-atom-only" algorithm for measure ALL in dipolar coupling measurements bug fix: state contains: zap;load /*data*/ data "append inline" bug fix: zoomto without time goes over 2 seconds, not 1 second bug fix: print "id" + "x" fails (back to 13.2 at least) bug fix: animFrameCallback not reporting for each morph bug fix: inline-if fails if not at end of statement -- Bug goes back to at least 11.8 bug fix: Jmol math fix for new . notation. -- needs testing -- examples: -- note that .. notation works with numbers and in all expressions b = [1 2 3 [ 1 2 [1 2 [1 [testing:"here"] 3]]]] print b..4..3..1 b..2 = 34 b..2..1 = 33 print b..2..1 -- alternative single dot notation also on both sides -- associative arrays only -- no numbers here b = [testing:"here"] b.testing= 33 print b.testing -- note that sequential brackets for arrays work only on the left side of an assignment b = [ [2] 10 11 ] b[1][2]= 33 #NOT print b[1][2] (that's a range) b = [1 2 3 [ 1 2 [1 2 [1 [testing:"here"] 3]]]] b[4][3][3][2].more = "yes" #NOT print b[4][3] (that's a range) -- extends to matrices b = quaternion()%"matrix" b[1] = [1 2 3] b[-1] = [1 2 3] b[2][3] = 2 -- extends to string b = "testing" b[1] = "T" b[1][3] = "T" b["t"] = "T" -- extends to points p = {3 3 3} p.x = 10 p.y = 5 p.z = 3 -- extends to bitsets -- single dots only, not a["color"] or a..color a = {*} a.color = "red" a.property_x = {*}.temperature.all bug fix: state reading broken in most recent version at chemapps bug fix: ++/-- compatibility with no-comma arrays bug fix: print ++b["test"] fails bug fix: ++b["test"] fails bug fix: a[6][8] = "q" not working correctly when a is a string bug fix: {*}.covalent is misleading in that it is a mix of covalent and ionic bonding distances. As such, I have replaced it with data at the Blue Obelisk Data Repository which are from Pyykk?, P. and Atsumi, M. (2009), Molecular Single-Bond Covalent Radii for Elements 1\u2013118. Chem. Eur. J., 15: 186\u2013197. doi: 10.1002/chem.200800987 bug fix: try { ... throw ...} catch {....} continues through catch when resumed. bug fix: anonymous context { ..... } not closed bug fix: JSON of 4x4 matrix (M4) fails bug fix: modelkitmode broken for Java in 14.1.10 code: unused obrador package removed from application code: JavaScript org.jmol.modelset->JM, org.jmol.modelsetbio->JMB code: org.jmol.util.Quaternion moved to javajs.util.Quat code: Refactoring of script.ScriptEvaluator to make it more manageable: * ScriptEval -- entry point and script command code * * extends ScriptExpr -- expression parsing * * extends ScriptParam -- parameter parsing * * extends ScriptError -- error handling * * scriptext.CmdExt -- optionally loaded, less-used commands * scriptext.MathExt -- optionally loaded, less-used functions * scriptext.SmilesExt -- optionally loaded methods for cmds and math code: faster CONNECT [{...}] process for specified bonds JmolVersion="14.1.10" JmolVersion="14.1.10_2014.02.20" new feature: THROW command -- accepts unquoted string or @x simple variable substitution -- examples: throw this is an error or x = "this is an error" throw @x resulting in: this is an error ----line 3 command 3 of try: throw >> "this is an error" << ----line 10 command 1 of t.spt: end ---- script "t.spt" JmolVersion="14.1.10_2014.02.19" bug fix: color atoms formalcharge not saved in state bug fix: averageAtomPosition never updated. bug fix: load of model with one atom does not set center to that atom bug fix: ==/!= comparison not appropriate for arrays or strings -- string/string comparison should be case sensitive, but wasn't -- (you can use x %9999 == y %9999 to force no-case comparison) -- array/array comparison should be element by element and exact -- assoc.array/assoc.array should be key/value by key/value and exact -- int/decimal comparison should be simply numerical, always -- decimal/decimal comparison should be able to be done without the < 1e-6 cutoff -- you can now use [x] == [y] for exact numerical comparison -- string/int and string/decimal comparison should also only be outside of arrays -- all approximations for type1/type2 should be only outside the context of arrays bug fix: array/string assignment broken in 14.1.9 -- a[2] = ... -- a["testing"] = ... bug fix; HTML5 popup frank mini-menu not implemented bug fix: HTML5 popup menu checkboxes not turning off bug fix: zap or zap {atom expression} broken -- does not affect ZAP command without parameters JmolVersion="14.1.9" JmolVersion="14.1.9_2014.02.18" bug fix: recently released 14.0.8 introduced a math bug that caused y = "test" + x.f() to be evaluated as ("test" + x).f() bug fix: long-time multiple unary minus bug (at least 6 years!) that print 3 +(- -3) evaluates to 0, not 6. new feature: WRITE "filename" AS type -- allows setting type at end of WRITE command using AS -- for example: write "t.png" as PNGJ -- meant only for very simple production; no additional parameters. -- all parameterized cases must use standard notation write PNGJ 300 300 "t.png" JmolVersion="14.1.8_2014.02.17" bug fix: JSpecView issues with navigating through spectra bug fix: PyMOL reader multiple bond view bug fix: popup menu fixes bug fix: bond/draw/isosurface picking broken bug fix: [1 -5 6 -2] gives [1 (-5+6-2)] instead of [1 -5 6 -2] bug fix: set defaultLoadScript "{0 0 0}" actually sets that to {1 1 1} -- goes way way back to early Jmol math where there were no point-type variables bug fix: PyMOL reader update for Version 1700 lacking setting 83. bug fix: -m option not working with Jmol.jar bug fix: PNGJ files within ZIP collections not being read. -- full PNGJ models can be extracted from MS Word .docx files. -- for example: show file "t.docx" [Content_Types].xml _rels/.rels word/_rels/document.xml.rels word/document.xml word/media/image1.png word/theme/theme1.xml word/settings.xml word/webSettings.xml docProps/core.xml word/styles.xml word/fontTable.xml docProps/app.xml load t.docx|word/media/image1.png new feature: JSmol Info.z, Info.zIndexBase bug fix: tensor("efg", "value") should return sparce array, not dense for missing tensors bug fix: JSmol now allows writing POVRAY, MAYA, IDTF, VRML, etc. both from Java and from HTML5 code: reworking of export classes bug fix: label @{math expression...} not working bug fix: interpretation of x and @x in select commands and {...} phrases -- Variable substitution has been unintuitive and inconsistent. For instance: x = "C or T" select @x -- works fine print {@x} -- fails The problem is the use of @ to reference the variable NAMED BY another variable within a math expression (print context) but not a select context. For instance: y = 3 x = "y" print x --> "y" print @x --> 3 Such referencing is important for math expressions, but the extension of this to atom expressions is not necessary and not generally useful. -- The current situation is as follows: x = "A or T" select @x --> all A and T groups print {@x} --> nothing (because @x is "the contents of the variable 'A or T'") -- This fix simplifies the situation by not allowing variable-variable referencing within atom expressions bounded by braces, just like within implicit atom expression commands (select, display, hide, delete, etc.). -- The result is much more consistent. The following do exactly what you think they would do: x = "A or T" select @x print {@x} -- The current way of doing this, by defining a temporary atom expression using the DEFINE (or @) command still works: x = "A or T" @y @x select y same as select @x -- Note that the difference between "select x" and "select @x" may be significant: ala = "cys" select ala --> selects all alanines select @ala --> selects all cysteines code: way more efficient for loop -- loop overhead decreased by > 80% bug fix: for(i in ...) does not exit when i is assigned a value, as per documentation bug fix: for(x in ...) command broken and also quite inefficient. JmolVersion="14.1.8_dev_2014.02.06" new feature: set cartoonRibose -- draws in ribose rings, with facets showing puckering -- connects via C4'-C5'-O5'-P explicitly -- shows C3'-O3' for reference. -- disables cartoonBaseEdges (Leontis-Westhof Edges) -- disabled by SET cartoonBaseEdges ON -- suggested by Rick Spinney, Ohio State new feature: anim frame [a,b,c,d] works with negative numbers to indicate ranges: -- anim frame [1, -5, 10, -6] --> [1,2,3,4,5,10,9,8,7,6] -- read as "1 through 5 and then 10 through 6" new feature: Tinker file reader (and FoldingXYZ reader upgrade) -- see http://dasher.wustl.edu/tinker/ -- Can use Tinker:: but this is only required if first line is JUST an atomCount -- accommodates older Tinker format with n-1 atoms for atomCount -- allows for trajectories and desired model number new feature: (actually 13.1 but undocumented) animation frame [ 51 50 49 48 47 46 45 (etc) 27 1 2 3 4 5 6 7 (etc)....] new feature: x = compare({atomset1}, {atomset2}, "MAP") new feature: x = compare({atomset1}, {atomset2}, "MAP", "all") new feature: x = compare({atomset1}, {atomset2}, "MAP", "best") new feature: x = compare({atomset1}, {atomset2}, "MAP", "H") new feature: x = compare({atomset1}, {atomset2}, "MAP", "allH") new feature: x = compare({atomset1}, {atomset2}, "MAP", "bestH") -- generates one or more correlation lists based on non-aromatic SMILES -- optionally includes H atoms -- optionally generates all possible atom mappings -- returns int[][] = [ [a1 b1],[a2 b2],[a3 b3],... ] where an and bn are integer atom indices or list when "all" option is chosen. -- the following will generate one atom correlation map for two structures including hydrogen atoms: load files "a.mol" "b.mol" x = compare({1.1} {2.1} "MAP" "H") (useful for 2D/3D model atom matching) -- the following compares the model of caffeine from NCI to that from PubChem: load $caffeine;load append :caffeine;frame * select 2.1; label %[atomIndex] compare {1.1} {2.1} SMILES rotate translate x = compare({1.1}, {2.1}, "MAP" "bestH") for (a in x) {a1 = a[1];a2=a[2];select atomindex=a1;label @a2} new feature: compare {model1} {model2} SMILES -- no need to give SMILES; Jmol can generate it from {model1} new feature: x = {*}.find("SMILES", "H") -- generates SMILES with explicit H atoms bug fix: substructure() function using SMILES instead of SMARTS, so only full structures; bug fix: better error trapping and messages in SMILES-related methods bug fix: make webexport discovery of path to Jmol.jar and jsmol.zip more robust. bug fix: getProperty extractModel not honoring subset bug fix: set pdbGetHeader TRUE does not capture REMARK3 REMARK290 REMARK350 bug fix: getProperty("JSON",....) should wrap value in {value:...} bug fix: MO persistent translucency broken in 11.x bug fix: show MENU write MENU load MENU all broken in 12.2 bug fix: {*}[n] should be empty if nAtoms <=n bug fix: abinit reader was nonfunctional bug fix: assign atom into into PDB file loses atom names bug fix: y = ([3])[1][1] should be [3] not 3 bug fix: break n nonfunctional bug fix: format() and label() functions limited to 4 arguments; should be unlimited bug fix: errors in paths to js code in web export templates. code: JSmol: applying atom mapping between mol2D and mol3D for viewSets code: refactoring to enable SWING in JavaScript for all menus code: methods from jcampdxReader extracted to org.jmol.jsv.JDXMOLParser code: reader overhaul for setting atom coordinates in a consistent fashion JmolVersion="14.1.7" JmolVersion="14.1.7_dev_2014.01.20" bug fix: 14.0.6 fatally bugged -- unitcell and echo rendering, getProperty JmolVersion="14.1.6" bug fix: translucent geosurface was turned off; JmolVersion="14.1.6_dev_2014.01.19" bug fix: Jmol2.js should have commented lines in Jmol.Info but does not bug fix: JSpecView cannot close "Options...Show Header" panel in HTML5 bug fix: select visible not right after this sequence: load $C\C=C\CC select _C wireframe off spacefill off display !_H select visible // 5 (but nothing is showing) bug fix: for (a in {displayed}) { a.property_x = 3 } construction fails bug fix: FireFox browser in mode to open files in new tabs in the background fails to load second applet of a page unless Jmol.__execDelay is more than 55 ms and the user specifically right-clicks a link to open a page in a new tab. bug fix: write ....?POST? fails bug fix: getproperty broken in 14.1.6_dev_2014.01.15 bug fix: GETPROPERTY command and function can return SV.toString() rather than property escaped value bug fix: getProperty for certain arrays returns string "[object Array]" bug fix: Jmol2.js not working when there is no jmolInitialize() bug fix: _DirectDatabaseCalls not including NMR prediction site bug fix: reading of *co*mmensurately modulated structures (e.g. Lilianite) working bug fix: wrong name for coverimage in WebExport. code: refactored matrix classes javajs.util.M34/M3/M4 code: JSpecView upgrade includes -- operational applet from jnlp -- append options from menus -- file helper for local files using load ? -- file helper for URL using load http://? -- file helper for simulation using load $? code: reader refactoring isolates symmetry aspects update: images and instructions for WebExport JmolVersion="14.1.5" JmolVersion="14.1.5_dev_2014.01.09" bug fix: LCAOCartoon translucency broken bug fix: translucent backbone broken bug fix: pqr,p2n readers broken bug fix: isosurface map property xxx can fail if surface is a fragment that (somehow) has a point not associated with an underlying atom. JmolVersion="14.1.4" JmolVersion="14.1.4_dev_2014.01.05" bug fix: PDB byChain, bySymop not supported. TODO: Add BSPF for symmetry distance checking in AtomSetCollection to speed special-position checking new feature: {xxx}.distance.all({yyy}) returns float[][] of values new feature: expanded unit cell ijk notation: - 111 - 1000 --> center 5,5,5; range 0 to 9 or -5 to +4 - 1000000 - 1999999 --> center 50,50,50; range 0 to 99 or -50 to +49 - 1000000000 - 1999999999 --> center 500, 500, 500; range 0 to 999 or -500 to +499 JmolVersion="14.1.3" JmolVersion="14.1.3_dev_2013.12.29" new feature: filter "MODCELL=x" -- incommensurate composite readers Jana2006 and CIF -- sets base cell to specified subsystem new feature: MSCIF reader now allowing up to d=10; was d=6 new feature: escape pressed cancels pending measurement new feature: {xxx}.getProperty("yyy") -- only for FIRST atom -- returns getProperty("atomInfo.yyy", {xxx})[1] (not xxx.yyy.all) new feature: unitcell {atomset} -- unit cell based on first atom of atom set. -- canceled by any unitcell {none} or other unitcell command other than on/off and width new feature: altloc set for msCIF _atom_site_subsystem_code -- sets % and also configuration -- prevents covalent bonding between subsystems new feature: select ON ; select OFF -- same as selectionHalos ON/OFF -- deprecates selectionHalos command new feature: atomSet1.distance.min(atomSet2, TRUE) new feature: atomSet1.distance.min(point, TRUE) new feature: atomSet1.distance.max(atomSet2, TRUE) new feature: atomSet1.distance.max(point, TRUE) -- returns single closest/furthest atom in atomSet1 from point or atomSet2 bug fix: incommensurate composite structures not packed into unit cell properly bug fix: incommensurate composite structures - wrong unit cell for d > 1 bug fix: if load "" fails, last file name is lost bug fix: print a (operator) b not processing string parameter B consistently across operators bug fix: composite structures reading for JANA2006 M50/M40 files bug fix: capture time slightly off; needs 50 ms addition. This may vary with rendering speeds. bug fix: CIF reader goes into molecular mode even if geom_bond block is all "? ? ? ? ?" bug fix: n-d incommensurate modulated composite structures (preliminary testing) bug fix: getProperty atomInfo broken for modulated atoms bug fix: x.distance.min(y) broken code: generic javajs.util.Matrix class added based on Jama code for inversion using L/U decomposition JmolVersion="14.1.2" JmolVersion="14.1.2_2013.12.13" new feature: JavaScript: JSmol api Jmol.evaluateVar(applet, expression) -- better than Jmol.evaluate because result is a JavaScript variable, not a string. -- DEPRECATING JSmol api Jmol.evaluate(applet, expression) new feature: getProperty("JSON", ....) -- returns JSON code for property -- allows JavaScript: x = Jmol.getPropertyAsArray("variableInfo","some expression") new feature: getProperty variableInfo -- allows retrieval of variables in Java or JSON format -- evaluates expression -- defaults to "all" new feature: modulation adjustable by q and t, up to d=3 // modulation on/off (all atoms) // moduation {atom set} on/off // modulation int q-offset // modulation x.x t-offset // modulation {t1 t2 t3} // modulation {q1 q2 q3} TRUE new feature: pickedList -- ordered array of recently picked atoms -- can be used the same as the PICKED variable, but that is ordered sequentially, not temporally -- twice clicking off structure clears the list -- @{pickedList}[0] last-picked atom -- @{pickedList}[-1] next-to-last-picked atom -- @{pickedList}[-1][0] last two picked atoms new feature: array.pop(), array.push() -- similar to JavaScript -- for example: a=[];a.push("testing");print a.pop() // create a distance t-plot at = [] // t points am = [] // distance measurements var p1 = a.modulation(1e10)[1] var p2 = a2.modulation(1e10)[1] for (var i = 0; i <= 50; i++) { var t = i / 50.0; at.push(t); var b1 = a.modulation(t)[1]; var b2 = b.modulation(t)[1]; var m = distance((p1 + b1).xyz, (p2 + b2).xyz); am.push(m); } d = at.add("\t", am) new feature: modulation scale x.x new feature: caption "xxxxx" x.x -- number of seconds to run new feature: modulation 0.2 // sets t-value new feature: select ON/OFF atom-set -- turns selection halos on or off as well as doing the selection -- convenience only -- for example: select on _O2 select off * new feature: pt1.mul3(pt2) -- returns {pt1.x*pt2.x, pt1.y*pt2.y, pt1.z*pt2.z} -- if both are not points, reverts to simple multiplication new freature: array.mul3(pt2) -- applies mul3 to all elements of array new feature: {atomset}.modulation(type, t) -- delivers P3 (displacement modulation) -- implemented only for type="D" (optional) -- optional t is 0 by default -- if t is missing, the unmodulated displacement is returned bug fix: modulation not distinguishing between q and t; bug fix: modulated measurements not working bug fix: not skipping set defaultLattice "{NaN NaN NaN}" bug fix: isosurface map atomic orbital fails bug fix: vibrational display of modulation with distances doesn't update bug fix: vibration off causes unnecessary warning in console bug fix: draw symop broken bug fix: array.mul(matrix3f) crashes Jmol bug fix: select symop=1555 broken bug fix: set picking dragSelected not working code: refactored CifReader, separating out MMCifReader and MSCifReader code: minor renaming/refactoring of methods in SV code: adds javajs.api.JSONEncodable interface -- super-simple implementation in org.jmol.script.SV -- allows implementations of javajs to deliver custom JSON results JmolVersion="14.1.1_2013.12.04" JmolVersion="13.3.9_dev_2013.12.04" new feature: Jmol._j2sLoadMonitorOpacity (default 55) new feature: load() function, as in print load("xxx"), limited local file reading in applet: -- no root-directory files -- no files without extension -- no files with any "/." in path new feature: JAR files securely signed new feature: applet JAR files include JNLPs (Java Network Launch Protocols) for local file loading new feature: JSmol URL options _USE= _JAR= _J2S= overrides for Info data new feature: (was present but undocumented) print quaternion([array of quaternions]) -- returns spherical mean a la Buss and Fillmore (http://www.math.ucsd.edu/~sbuss/ResearchWeb/spheremean/) new feature: print quaternion([array of quaternions], true) -- returns standard deviation for spherical mean a la Buss and Fillmore (http://www.math.ucsd.edu/~sbuss/ResearchWeb/spheremean/) -- units are angular degrees new feature: named quaternion modulus values -- print quaternion(1,0,0,0)%"matrix" -- options include w x y z normal eulerzxz eulerzyz vector theta axisx axisy axisz axisangle matrix new feature: set celShadingPower -- sets strength of cel shading -- integer values -- default 10 is a thick line -- 5 is a fine line -- 0 turns cel shading off -- negative value removes interior shading -- outline only -- operates on pixel based on normal to light source (power > 0) or user (power < 0) -- sets color to background contrast (black or white) when normal_z < 1 - 2^-(|celShadingPower|/10) new feature: mmCIF reading reports _citation.title in Jmol scripting console new feature: minimize SELECT {atomset} ONLY -- ONLY option excludes all other atoms new feature: minimize {atomset} -- implicit SELECT and ONLY new feature: "extensions" directories in JSmol for contributed JS and SPT scripts -- jsmol/js/ext -- jsmol/spt/ext new feature: load ... filter "ADDHYDROGENS" -- local set pdbAddHydrogens just for one load command new feature: compare {1.1} {2.1} BONDS SMILES new feature: list = compare({atomset1} {atomset2} "SMILES" "BONDS") new feature: list = compare({atomset1} {atomset2} SmartsString "BONDS") new feature: write JSON xxx.json new feature: [#210] JSON {"mol":...} reader -- example (penicillin; no actual line breaks) {"mol":{ "_is2D":false, "_scale":{"x":1,"y":1,"z":1}, "a":[{"x":3.9236999,"y":-0.9222,"z":0.1835},{"x":3.2479,"y":-3.2106004,"z":0.3821},{"x":5.1731,"y":-1.3284999,"z":-0.24640003},{"x":4.4973,"y":-3.6169,"z":-0.0478},{"x":5.4598002,"y":-2.6759,"z":-0.3623},{"x":1.599,"y":-1.4203,"z":0.9663},{"x":-4.2137,"y":0.8188001,"z":2.5929},{"x":-5.7525997,"y":0.1604,"z":0.70350003},{"l":"H","x":-0.92130005,"y":-0.6858,"z":0.8503},{"x":2.961,"y":-1.8632,"z":0.49760002},{"l":"O","x":-4.989,"y":2.5026002,"z":-1.2333001},{"l":"O","x":-1.2756001,"y":1.6640999,"z":-1.9360001},{"l":"O","x":1.104,"y":-1.4738001,"z":-1.3405999},{"l":"O","x":-4.604,"y":3.4702,"z":0.7158},{"x":-4.4305005,"y":2.47,"z":-0.1623},{"x":0.68810004,"y":-1.2541,"z":-0.2227},{"x":-3.5391,"y":1.3063,"z":0.1875},{"x":-1.4742,"y":-0.7,"z":-1.1997},{"x":-1.8847001,"y":0.7218999,"z":-1.4753001},{"l":"H","x":-5.185,"y":4.1949,"z":0.44660002},{"l":"N","x":-0.5887,"y":-0.86149997,"z":-0.043799996},{"x":-2.9578,"y":-0.84800005,"z":-0.8823999},{"x":-4.298,"y":0.3443,"z":1.1408},{"l":"S","x":-3.3189998,"y":-1.1949,"z":0.8809},{"l":"N","x":-3.159,"y":0.59889996,"z":-1.0386},{"l":"H","x":-2.6423,"y":1.6747,"z":0.6855},{"l":"H","x":-3.5207,"y":-1.4693998,"z":-1.5789001},{"l":"H","x":-4.6569,"y":1.8111,"z":2.6771998},{"l":"H","x":-4.7551003,"y":0.123500004,"z":3.2344003},{"l":"H","x":-3.1692,"y":0.86,"z":2.9017},{"l":"H","x":-5.7794,"y":-0.2569,"z":-0.3031},{"l":"H","x":-6.2558002,"y":-0.5187,"z":1.3918},{"l":"H","x":-6.2588997,"y":1.1256,"z":0.71029997},{"l":"H","x":-1.1443,"y":-1.2523,"z":-2.0796},{"l":"H","x":1.1846,"y":-2.1707997,"z":1.6393999},{"l":"H","x":1.6871,"y":-0.46960002,"z":1.4921},{"l":"H","x":3.7012,"y":0.1303,"z":0.2784},{"l":"H","x":2.4957001,"y":-3.9457002,"z":0.62750006},{"l":"H","x":5.9251003,"y":-0.5933,"z":-0.4921},{"l":"H","x":4.7215,"y":-4.6695,"z":-0.13759999},{"l":"H","x":6.4357004,"y":-2.9933,"z":-0.6989}], "b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}] }} -- is2D will trigger minimization -- scale indicates overall scaling present in the "a" records new feature: set particleRadius -- global radius for atoms over the max radius value (16.0) -- defaults to 20.0 new feature: CIF and PDB filters "BYCHAIN" and "BYSYMOP" for virus particulation -- creates just one atom per chain or per symop -- size can be scaled larger than the max of 16 Angstroms using, for example: set particleRadius 30; spacefill 30; // any number over 16 here uses particleRadius instead new feature: symop() function allows symmetry from biomolecule filter for PDB and mmCIF new feature: isosurface SYMMETRY -- applies symmetry operators to isosurface -- more efficient rendering and creation -- default selection is {symop=1} only -- default coloring is to color by symop based on propertyColorScheme -- example: load 1stp filter "biomolecule 1" color property symop isosurface sa resolution 0.8 symmetry sasurface 0 new feature: new atom property: chainNo -- sequentially from 1 for each model; -- chainNo == 0 means "no chain" or chain = '' new feature: new propertyColorScheme "friendly" -- color-blindness-friendly color scheme -- used at RCSD -- example: set propertyColorScheme "friendly" color {chainNo > 0} property chainNo new feature: JSpecView completely Java-free; includes 2D nmr and PDF printing of spectra new feature: WRITE PDF "xxx.pdf" quality > 1 requests landscape mode -- uses efficient custom PDF creation classes -- sizes image to fit if too large new feature: JSpecView adds PDF and 2D NMR for JavaScript new feature: load "==xxx" FILTER "NOIDEAL" -- chemical component load from PDB using the "nonideal" coordinate set bug fix: write CD removed; ChemDoodle has changed formats; use JSON instead bug fix: PDB and CIF files indicated assemblies such as PAU as large negative number bug fix: COMPARE with no rotation starts infinite loop bug fix: looping problem with delay(-1) bug fix: Mouse wheeling for Chrome in JavaScript bug fix: JavaScript popup menu fix for language changes bug fix: JavaScript core components not being processed; Jmol._debugCode not recognized bug fix: unitcell offset incorrectly for biomolecules; origin incorrect for axes. bug fix: isosurface/mo FRONTONLY broken bug fix: language localization broken in JavaScript bug fix: ADF reader not reading MO output from DIRAC Build 201304052106 bug fix: Safari reports yellow Jmol info instead of asking to accept applet -- tag needed to be bug fix: CIF reader not handling _pdbx_struct_assembly_gen.assembly_id properly -- wrong atom set for load =3fsx.cif filter "ASSEMBLY 1" bug fix: [#558 Compatibility issue with ChemDoodle] JSmol error in definition of Number.toString() bug fix: mouse wheel not working properly bug fix: JavaScript J2S compiler error does not coerce int += float to integer bug fix: JavaScript WEBGL option broken bug fix: JavaScript NMRCalculation does not access resources bug fix: JavaScript stereo not implemented bug fix: MOL reader fix for multiple-model file (just 13.3.9_dev) bug fix: MOL reader error with load APPEND -- does not continue atom numbers bug fix: CIF modulation reader not reading linear combinations of cell wave vectors bug fix: CIF reading with filter "BIOMOLECULE 1" fails if only the identity operation bug fix: mmCIF reader not reading all _pdbx_struct_assembly_gen.oper_expression options bug fix: PDB CRYST entry 1.0 1.0 1.0 90 90 90 should mean "no unit cell" regardless of biomolecule filter bug fix: isosurface slab not adapting well for flat molecules such as HEM bug fix: print userfunc() may fail (userfunc() by itself is fine) bug fix: within(helix) not implemented for C-alpha-only polymers bug fix: _modelTitle not updated when a new file is loaded or zapped bug fix: {*}.symop.all not delivering symmetry operator appropriately bug fix: for triple bond in SMILES in URLs bug fix: build.xml missing PDF creation classes bug fix: [#554] for load http://sourceforge.net/p/jmol/code/18631/tree/trunk/Jmol-datafiles/xyz/3structs.xyz?format=raw; zap model!=1.1; bug fix: following Java update, adding proper path check for local signed applet bug fix: {xxx}.property_xx not saved in state (broken 8/7/2013 rev 18518) bug fix: Manifests updated for signed and unsigned applet JAR files bug fix: write fails bug fix: applet scriptWait() method broken bug fix: PyMOL session may display unit cell after read from saved state bug fix: MMCIF reader fails for multiple assembly types bug fix: CIF reader "biomolecule 1" translating to "molecular" rather than "assembly" bug fix: load trajectory with multiple files not working bug fix: JS applet popup menu not closing properly upon language change bug fix: HTML checkbox id attribute not assigned code: refactoring of applet/appletjs code; org.jmol.util.GenericApplet code: refactoring, simplification of buffered readers and buffered input streams. code: JavaScript refactoring, better build_...xml code: JavaScript Integer, Long, Short, Byte, Float, Double all reworked code: disambiguation of GT._ code: Refactored all unnecessarily inner classes to top level code: isolated util/ModulationSet using api/JmolModulationSet code: All applet language localization read from plain .po files -- as for JavaScript already -- no need to compile class files for applet languages -- no language .jar files -- new jsmol/idioma directory holds .po files for both Java and HTML5 code: faster isosurface rendering adding implicit "frontonly" with select {xxx} ONLY code: faster isosurface rendering with implicit "isosurfacepropertySmoothing FALSE" in relevant (integer) cases code: JmolBinary.getBufferedReaderForResource() -- consolidates all references to URL.getContent() and Class.getResource() code: JavaScript work around for inner class problem with variable name reassignment code: work-around for eval(functionName) not working in JavaScript. code: experimenting with ambient occlusion code: Required manifests added for Java Ju51 (January, 2014). code: JmolOutputChannel moved to javajs.util.OutputChannel code: jsmol.php fixed to allow " in saveFile method code: refactoring Parser into javajs.util code: DSSP moved to org.jmol.dssx, reducing JSmol bio load by 20K code: iText package jettisoned, no longer nec, as I wrote my own PDF creator JmolVersion="13.3.7" code; JavaScript comparison, 13.2.7 with 13.3.7. module 13.2.7 13.3.7 dBytes % core.z.js* 781,122 582,590 -198,532 75 corebinary.z.js 10,958 10,852 -106 99 corebio.z.js 199,251 199,249 -2 100 coreconsole.z.js 13,421 13,421 0 100 coremenu.z.js 105,606 107,832 2,226 102 coremin.z.js 113,754 113,938 184 100 coreprop.z.js 28,601 28,918 317 101 corepymol.z.js 153,236 153,271 35 100 corescript.z.js* 430,832 339,062 -91,770 79 corescript2.z.js 159,078 159,078 coresmiles.z.js 90,317 90,317 0 100 corestate.z.js 60,478 49,667 -10,811 82 coresurface.z.js 271,642 271,535 -107 100 coresym.z.js 129,456 129,529 73 100 coretext.z.js 46,033 46,033 corezip.z.js 163,080 92,476 -70,604 57 *core+scripting 1,211,954 921,652 -290,302 76 TOTAL 2,551,754 2,387,768 -163,986 94 JmolApplet0.jar 1,034,203 1,044,111 JmolApplet.jar 2,757,469 2,766,400 JmolVersion="13.3.7_dev_2013.10.01" bug fix: Crystal reader not applying lattice translations bug fix: translations incomplete bug fix: state saving of echo "bottom left" instead does "top left" bug fix: multiple-file crystal structures may fail to load if there is a lattice shift bug fix: space group not being calculated automatically for user-defined space groups bug fix: measures broken code: further consolidation: -- uncompressed(former) gzipped -- JSmol.min.nojq.js 134K 38K -- core.z.js 1583K(1781K) 363K -- corescript.z.js 339K (436K) 83K -- TOTAL 2056K(2217K) 484K (7% reduction) -- JmolApplet0.jar 1038K 1005K JmolVersion="13.3.7_dev_2013.09.30" JmolVersion="13.3.6" bug fix: angle measurements can end with "//nanometers" bug fix: first pending measurement loses label JmolVersion="13.3.6_dev_2013.09.27" new feature: adds remote logging for applet and app via http:// and via function for applet using jmolApplet0._applet.viewer.setLogfile(function(data) {......}) new feature compare {1.1} {2.1} BONDS "smiles" -- does flexible fit based on dihedrals. -- does internal rotation even if ROTATION TRANSLATION are not given (considered a possible bug) -- concatenation of: list = compare({1.1},{2.1},"smiles","BONDS") rotate branch @list 1 compare {1.1} {2.1} SMARTS "smiles" rotate translate so, for example: load files "$tyrosine" "$lysergamide" select 1.1; color bonds red select 2.1; color bonds yellow sm = "c1ccccc1CCN" compare {1.1} {2.1} BONDS @sm rotate translate new feature: show BEST ROTATION / show BEST VOLUME (better than undocumented show rotation best, show rotation volume) new feature: set animationMode "ONCE" "LOOP" "PALINDROME" new feature: show animationMode; x = animationMode new feature: CAPTURE command, including ROCK and SPIN -- application and signed applet only (no JS) -- creates animated GIF -- uses ANIMATION FPS to determine play-back rate. CAPTURE "filename" -- starts capturing -- uses ANIMATION MODE to determine looping -- both PALINDROME and LOOP create looping; ONCE (default) does not CAPTURE "filename" ROCK x|y|z degrees -- does a clean rocking of the molecule about one of the three major axes -- axis and degrees optional; y 5 assumed -- based on: rotate Y 10 10;delay 2.0; rotate Y -10 -10; delay 2.0;rotate Y -10 -10; delay 2.0;rotate Y 10 10;delay 2.0 -- uses LOOP mode CAPTURE "filename" SPIN x|y|z -- does a full spin of the molecule about one of the three major axes -- axis optional; y assumed -- based on: rotate Y 360 30;delay 15.0; -- uses LOOP mode CAPTURE off/on -- temporarily disables/enables capturing CAPTURE "" or just CAPTURE -- end capturing new feature: set drawFontSize // defaults to 14.0 FEATURE CHANGE: added bindings: "drag" and "up" -- may affect power users who use BIND command new: _center CTRL+SHIFT+LEFT+click new: _reset SHIFT+LEFT+double+click mouse actions include one (each) of: SINGLE DOUBLE LEFT MIDDLE RIGHT WHEEL DOWN DRAG UP CLICK for example: SINGLE-RIGHT-CLICK DOUBLE-LEFT-DRAG defaults are SINGLE, LEFT, and CLICK sequence is always: down (drag,drag,drag...) up (click) (only if no drag) Any of these actions may be tapped using bind "" "" Note that adding "+:" to an action bind "" does not replace the Jmol action, just supplements it. $ show mouse _assignNew LEFT+click assign/new atom or bond (requires set picking assignAtom_??/assignBond_?) _center CTRL+SHIFT+LEFT+click center _clickFrank LEFT+click pop up recent context menu (click on Jmol frank) _pickConnect LEFT+click connect atoms (requires set picking CONNECT) _deleteAtom LEFT+click delete atom (requires set picking DELETE ATOM) _deleteBond LEFT+click delete bond (requires set picking DELETE BOND) _depth CTRL+SHIFT+LEFT+double+drag adjust depth (back plane; requires SLAB ON) _dragAtom LEFT+drag move atom (requires set picking DRAGATOM) _dragDrawObject SHIFT+LEFT+drag move whole DRAW object (requires set picking DRAW) _dragDrawPoint ALT+LEFT+drag move specific DRAW point (requires set picking DRAW) _dragLabel SHIFT+LEFT+drag move label (requires set picking LABEL) _dragMinimize LEFT+drag move atom and minimize molecule (requires set picking DRAGMINIMIZE) _dragMinimizeMolecule LEFT+drag move and minimize molecule (requires set picking DRAGMINIMIZEMOLECULE) _dragSelected ALT+SHIFT+LEFT+drag move selected atoms (requires set DRAGSELECTED) _dragZ SHIFT+LEFT+drag drag atoms in Z direction (requires set DRAGSELECTED) _navTranslate LEFT+drag translate navigation point (requires set NAVIGATIONMODE and set picking NAVIGATE) _pickAtom LEFT+click pick an atom _pickIsosurface LEFT+click pick an ISOSURFACE point (requires set DRAWPICKING _pickLabel LEFT+click pick a label to toggle it hidden/displayed (requires set picking LABEL) _pickMeasure LEFT+click pick an atom to include it in a measurement (after starting a measurement or after set picking DISTANCE/ANGLE/TORSION) _pickNavigate CTRL+SHIFT+LEFT+click pick a point or atom to navigate to (requires set NAVIGATIONMODE) _pickPoint LEFT+click pick a DRAW point (for measurements) (requires set DRAWPICKING _popupMenu CTRL+LEFT+down, RIGHT+down pop up the full context menu _reset SHIFT+LEFT+double+click, MIDDLE+double+click reset (when clicked off the model) _rotate LEFT+drag rotate _rotateBranch SHIFT+LEFT+drag rotate branch around bond (requires set picking ROTATEBOND) _rotateSelected ALT+LEFT+drag rotate selected atoms (requires set DRAGSELECTED) _rotateZ ALT+LEFT+drag, SHIFT+RIGHT+drag rotate Z _rotateZorZoom SHIFT+LEFT+drag, MIDDLE+drag rotate Z (horizontal motion of mouse) or zoom (vertical motion of mouse) _select LEFT+double+click select an atom (requires set pickingStyle EXTENDEDSELECT) _selectToggleOr LEFT+click if all are selected, unselect all, otherwise add this group of atoms to the set of selected atoms (requires set pickingStyle DRAG) _setMeasure LEFT+double+click pick an atom to initiate or conclude a measurement _slab CTRL+SHIFT+LEFT+drag adjust slab (front plane; requires SLAB ON) _slabAndDepth CTRL+ALT+SHIFT+LEFT+drag move slab/depth window (both planes; requires SLAB ON) _slideZoom LEFT+drag zoom (along right edge of window) _spinDrawObjectCCW LEFT+drag click on two points to spin around axis counterclockwise (requires set picking SPIN) _spinDrawObjectCW SHIFT+LEFT+drag click on two points to spin around axis clockwise (requires set picking SPIN) _stopMotion LEFT+double+click stop motion (requires set waitForMoveTo FALSE) _swipe LEFT+drag spin model (swipe and release button and stop motion simultaneously) _translate CTRL+ALT+LEFT+drag, CTRL+RIGHT+drag, SHIFT+LEFT+double+drag, MIDDLE+double+drag translate _wheelZoom WHEEL zoom bug fix: JSON NIO port SYNC broken bug fix: print getProperty("image", "width=200;height=300;type=png") not working bug fix: write IMAGE "t.png" not working bug fix: rotate -10 -10 not working bug fix: mouse bindings not distinguishing DOWN/CLICK/DRAG/UP properly bug fix: mouse bindings _center and _reset not working bug fix: show MOUSE not including user-defined mouse bindings bug fix: chains improperly selected in JSmol/HTML5 bug fix: JSmol/HTML5 not allowing drag-drop or file loading from a local drive. bug fix: JSmol/HTML5 not allowing WRITE FILE ? bug fix: JSmol/HTML5 not allowing WRITE xxx.pdb, xxx.mol, etc bug fix: platformSpeed persists but appears unreadable after loading a state bug fix: JavaScript version InputStreamReader not processing non-UTF data correctly bug fix: second reading of older PNG files with embedded script fails due to improper png file caching code: overhaul of image creation methods code: careful attention to core functions yields results in 5% reduction in core download size: -- uncompressed(former) gzipped -- JSmol.min.nojq.js 134K 38K -- core.z.js 1586K(1781K) 364K -- corescript.z.js 378K (436K) 95K -- TOTAL 2098K(2217K) 497K (5% reduction) -- JmolApplet0.jar 1038K 1005K -- Thus, the "real" transfer size -- based on server-side gzipping -- is half the size of Jmol/Java. code: continued refactoring of ScriptEvaluator to ScriptExt code: refactoring to isolate LabelToken and Labels from core JavaScript load code: refactoring, simplification of image output and export -- folders created: org.jmol.image, org.jmol.dialog -- JpgEncoder, Jpg64Encoder, PngEncoder brought to org.jmol.image and made subclasses of ImageEncoder -- PpmEncoder fixed -- ImageEncoder stripped of all unnecessary ImageConsumer/producer business -- org.jmol.export.image.ImageCreator and parts of org.jmol.viewer.stateCreator reorganized into org.jmol.OutputManager, org.jmol.OutputManagerAwt, and org.jmol.OutputManagerJS -- clipboard functions moved into org.jmol.awt and org.jmol.awtjs2d -- org.jmol.io.JmolOutputChannel now serves for just about all output needs. code: major simplification and consolidation of file I/O methods, including exporters, using JmolOutputChannel class. code: only FileOutputStream reference is one reference in org.jmol.awt. code: code merge between 13.2 and 13.3 18 Sept 2013 code: major clean-up of ActionManager JmolVersion="13.3.5" JmolVersion="13.3.5_dev_2013.09.06" new feature: show NMR taps into NMRDB directly -- for now, application only bug fix: CRYSTAL reader not allowing vibration for conventional cell bug fix: JavaScript binary for Safari and Opera new feature: strutureModifiedCallback bug fix: ID @id vector fails JmolVersion="13.3.4" bug fix: select 1-5 broken JmolVersion="13.3.4_dev_2013.08.21" bug fix: JANA2006 reader not processing occupancies -- read now forced to "PACKED" in order to calculate site multiplicity bug fix: CIF reader not reading _CCDC_GEOM_BOND_TYPE record bug fix: File dialog problems with paths having space bug fix: GAMESS reader not reading energies bug fix: TRY failure in a load command followed by a successful load having a loadScript will pop past the second TRY and crash Jmol new feature: _logfile holds full path to logfile code: Incommensurate modulated structure CIF and M50/40 file loading validation -- includes d=1 and d=2 -- Fourier, sawtooth, crenel bug fix: translation not read from state new feature: set platformSpeed [0 to 10] -- basically an expanded "set wireframe OFF" with more options -- only effected during model rotation (including mouse dragging, spin, vibration, and animation) -- default value is 10 (all features; no compromises) -- value >= enables 8 antialiasDisplay (and thus, all features) 7 translucency 6 meshes (contact, draw, isosurface, MO, pmesh, lcaocartoon, CGO) 5 cartoons, rockets, trace, ribbon 4 geosurfaces 3 ellipsoids 2 wireframe and balls 1 none of the above (same as "set wireframeRotation off") 0 [reserved for "auto"] FEATURE CHANGE: set wireframeRotation expanded new feature: show ROTATION BEST -- operates on currently selected atoms -- reports "{quaternion}" new feature: quaternion("best") -- delivers actual quaternion new feature: show ROTATION VOLUME -- calculates approximate best box (from 1495 quaternion-based alternatives) -- reports " {dx dy dz}" -- where is the volume, -- and {dx dy dz} are the dimensions, where dx > dy > dz new feature: rotate BEST new feature: rotate SELECTED BEST new feature: pop-up menu selection "view...best" bug fix: CIF reader does not find Hall name for space groups bug fix: binding names not included in SHOW MOUSE bug fix: "single" touch can fire double-click bug fix: {x}.tensor() command fails when no atom tensors bug fix: isosurface slab not allowing two different slabs for two diffrent isosurfaces bug fix: set wireframeRotation not working ("inMotion" flag not properly read in Viewer). bug fix: screen repaints were being requested far too frequently *indicates when a refresh is made (external apps and applets only) external apps only via loadInline(List)* createModelSetAndReturnError openDOM, openReader, openFile, openFiles via loadModelFromFileRepaint* createModelSetAndReturnError loadInLine(String) via loadInLineScriptRepaint* FileDropper (string drop) via openStringInline* via openStringInlineParamsAppend createModelSetAndReturnError external apps, applet only, via loadInline(String[])* via openStringsInlineParamsAppend createModelSetAndReturnError script LOAD via loadModelFromFile createModelSetAndReturnError script CALCULATE HYDROGENS, PLOT, ZAP (modelkit) via openStringInlineParamsAppend createModelSetAndReturnError script LOAD DATA via loadFileFull and loadInlineScript openStringsInlineParamsAppend createModelSetAndReturnError new feature: incommensurate modulation of ADPs. new feature: Jana2006 M40/M50 file reading bug fix: set loglevel 6 (debugHigh) not working bug fix: {*}.tensor("", "id") not implemented bug fix: {*}.tensor("") not implemented bug fix: {*}.tensor("adp") fails bug fix: {*}.symmetry fails when space group is P1 bug fix: atom tensors lost when merging bug fix: Jsmol menu and console broken in 2013.08.07 when jQuery calls were all moved into JSmolCore.js bug fix: float parser broken in dev_2013.08.07 code: reorganization of ScriptEvaluator into two sections, one optional new feature: COMPARE {atoms} [coords] new feature: COMPARE {atoms} ATOMS {subset1} [coords1] {subset2} [coords2] ... new feature: MODULATION command -- for modulated structures -- operates on currently selected set of atoms -- MODULATION ON -- MODULATION OFF -- MODULATION t -- sets modulation "t" of selected atoms -- MODULATION PLAY t1 t2 -- animates a once-through sequence of t from t1 to t2 -- MODULATION FPS x.x // may be < 1 -- sets speed of animation bug fix: zoom setting lost in state code: incommensurate crystal work -- Uiso, preliminary Uij and subsystems code: incommensurate crystal work -- occupancy Crenel, displacive sawtooths bug fix: shapeInfo not reporting visibility of isosurface code: pdb, cif readers separated into separate packages; p2n, pqr readers with pdb now new feature: Jana2006 reader -- reader for http://jana.fzu.cz/ new feature: CIF reader reads incommensurate modulated structures -- FILTER options include: -- NOSPECIAL (include special atoms for debugging -- MODAVERAGE (do not read modulation -- MODAXES=xyz (select only specific axes -- x, y, and/or z) -- NOSYM (no symmetry read) code: Even faster float parsing bug fix: filter lost after CENTROID or PACKED load option bug fix: set rangeSelected not functional new feature: msCIF file reading of incommensurate modulation data as vibration new feature: msCIF file filter "MODAXES=xxx" where xxx = X,XY,XYZ,YZ,etc. new feature: msCIF file filter "MODAVE" gives average structure with vibration vectors. bug fix: minimization can fail after MMFF switches to UFF. bug fix: CIF reader fix for no element given "phenyl1" in ZjzxlegN.cif JSmol: Jmol form moved to end of body JSmol: All $(xx) references moved to JmolCore.js JmolVersion="13.3.3_dev_2013.07.27" code: reconfigured JSmol build no longer needs jsmol/make directory. bug fix: Gaussian cube format changed and not recognized (extra "1" in third line). bug fix: PDB header don't do trim(); bug fix: isosuface ID @x ... becomes isosurface ID "@x" bug fix: color chain broken bug fix: rockets with color chain bug fix: filter ":X" broken bug fix: O not 2- in PDB adding hydrogens bug fix: NWChem reader error TODO: mouse exit then release doesn't trigger release TODO: ingenol/jsmetest.htm? TODO: minimization set position calculation optimization? TODO: documentation (see below, including % units on measure distance) TODO: isosurface SLAB TRANSLUCENT 0.x color -- inherits color of isosurface when color parameter is absent -- TODO - properly save in JVXL file TODO: PyMOL uniqueAtomSettings for transparency -- will require by-vertex translucent option bug fix: JSmol 2-sided surface color problem due to Java2Script miscoding of Number.shortValue() bug fix: PyMOLMeshReader code clean-up. JmolVersion="13.3.2_dev_2013.07.21" bug fix: PyMOL mesh reader broken for EDS files JmolVersion="13.3.1_dev_2013.07.20" bug fix: MMCIF_PDBX structures not being read bug fix: allow PyMOL PSE files reading as part of a set of files, not just by itself bug fix: quaternion plots not synched with originating structure bug fix: 1skt.cif loses secondary structure (MMCIF_PDBX reader needed) new feature: calculate formalCharge bug fix: set showTiming not functional bug fix: set pdbAddHydrogens does not set formal charge on O(1-) or "O" of H2O (2-) bug fix: PNGJ files not properly caching, and PSE files with DOCACHE option JmolVersion="13.3.0" JmolVersion="13.1.19_dev_2013.07.18" new feature: set exportScale x.x -- adjusts export scale -- only implemented for VRML and X3D exporters new feature: unitcell center {atomset} new feature: unitcell center {fx fy fz} new feature: {*}.ms, {*}.cs %[ms] %[cs] magnetic shielding and chemical shift new feature: label xxx new feature: set shift_H xxx (ppm) new feature: getProperty("nmrInfo") new feature: NMR analysis tools: -- x = measure({a} {b} "isc_hz") -- J coupling -- x = measure({a} {b} "dc_khz") -- dipolar constant -- MEASURE {a} {b} "2://dc_hz" -- dipolar constant -- MEASURE {a} {b} "2:%3.2VALUE//dc_khz" -- dipolar constant -- MEASURE {a} {b} "2://khz" -- defaults to dc_khz -- MEASURE {a} {b} "2://hz" -- defaults to isc_hz -- MEASURE {a} {b} "2://isc_1hz" new feature: {xxx}.tensor(type,what) -- type = "temp", "ms", "efg", etc. -- returns a list of data. isc-type returns a list of lists [index1, index2, value] -- what = "j" (isc-type only) "chi" (efg only) "dc" (dipolar coupling constant; type ignored) "eigenvalues" float[v1,v2,v3] "eigenvectors" P3[V1,V2,V3] "value" Float (v3) "asymMatrix" Matrix3f "symMatrix" Matrix3f "isotropy" Float v_iso=(v1 + v2 + v3)/3 "anisotropy" Float v3 - (v1 + v2)/2 "asymmetry" Float (v2 - v1)/(v3 - v_iso) "eulerzxz" float[] "eulerzyz" float[] "quaternion" Quaternion "indices" float[modelIndex,atomIndex1,atomIndex2] "string" selected readable data "type" anything else -- all key/value pairs new feature: bind "+:" -- added "+:" indicates to NOT unbind Jmol action new feature: ellipsoid OPTIONS "xxxx" -- "xxxx" is a quoted string of options separated by semicolon: "arcs;arrows;axes;ball;dots;fill;wireframe" with optional "no" in front of each new feature: SET ECHO POINT {atom or point} -- allows 2D and 3D echos to have pointers to atoms or points bug fix: set shift_XX not saved in state bug fix: JSmol menu not disappearing upon touch outside menu bug fix: PyMOL surface map reading error bug fix: magres measurement of dipole coupling constants do not reach just min-distance set bug fix: "cs" for Cs symmetry broken in chemicalshift bug fix: cartoons with too small nonzero size will not render anything code: org.jmol.quantum.NMRCalculation smoothly handles J-coupling and dipolar coupling constant display. code: org.jmol.quantum.NMRCalculation implements org.jmol.api.JmolNMRCalculation: public float getQuadrupolarConstant(Tensor efg); public float getJCouplingHz(Atom a1, Atom a2, String type, Tensor t); public float getDipolarConstantHz(Atom a1, Atom a2); public float getDipolarCouplingHz(Atom a1, Atom a2, V3 vField); public JmolList getInteractionTensorList(String type, BS bs); public BS getUniqueTensorSet(BS bs); public JmolList getTensorInfo(String tensorType, String infoType, BS bs); public Map getMinDistances(MeasurementData md); public boolean getState(SB sb); public Object getInfo(String sym); JmolVersion="13.1.17_dev_2013.06.27" new feature: CASTEP reader filter option q=all new feature: set picking DRAGLIGAND -- won't move the protein new feature: CIF reader upgrade to allow multicharacter chain specs. -- See 1bgl_1bgm.cif -- automatically switches to chainCaseSensitive if multi-character or lower-case chains are read in a CIF file. -- note that in certain cases quotation marks will be needed: select chain=0123 NOT OK select :0123 NOT OK select chain="0123" OK select :"0123" OK select :"A*" or :"A'" or :'A"' or :"A\"" TODO: document these: new feature: {atomset1}.distance.min({atomset2}) -- returns an array -- minimum distance of each atom in atomset1 to any atom in atomset2 new feature: {atomset1}.distance.max({atomset2}) -- returns an array -- maximum distance of each atom in atomset1 to any atom in atomset2 note: much of the next compare/branch business was built into a new COMPARE command for Jmol 13.3.6 new feature: list = compare({atomset1} {atomset2} "ccCCN" "BONDS") -- determines the dihedrals that match atomset1 to atomset2 -- returns arrays of length 6n, list[6n] which lists six numbers for each dihedral in the comparison set, including i1 i2 i3 i4 set1value set2value, where i1-i4 are atom indices, and set1value and set2value are the dihedral angles in sets 1 and 2, respectively. -- feeds into the rotate BRANCH @list command new feature: BRANCH @list -- takes a list of 6n numbers from compare function -- rotates all dihedrals in the selected atom set to target values concurrently // application: flexible substructure fit using a SMARTS search load files "$tyrosine" "$lysergamide" select 1.1; color bonds red select 2.1; color bonds yellow sm = "c1ccccc1CCN" list = compare({1.1},{2.1},sm,"BONDS") rotate branch @list 1 compare {1.1} {2.1} SMARTS @sm rotate translate // at this point the two models match almost perfectly among these key atoms. new feature: {1.1}.find("ccCCN", "BONDS") -- finds the first match in the structure to the given SMARTS string -- returns an n-length array of 4-length arrays, list[n][4] -- each list[i] is a set of four atoms in bond-connected order -- full list comprises all dihedrals in the found set of atoms. new feature: set translucent -- default TRUE : translucent objects are fully translucent -- FALSE: translucent objects are opaque to other translucent objects bug fix: CrystalReader broken by recent change to simpleReplace() bug fix: PyMOL movie start frame bug fix: PyMOL putty broken bug fix: pdbAddHydrogens may miss O3' or O5' H atoms at end of DNA strands bug fix: pdbAddHydrogens may miss H in first group of a chain bug fix: set defaultDrawArrowScale broken bug fix: "ligand" should include all _g=0 (nonPDB atoms) bug fix: applet getpropertyAsArray("bondInfo") fails bug fix: JSmol script/scriptWait nuance with moveto. -- when using scriptWait with HTML5, there can be no threading bug fix: invertSelected on trajectory causes nullPointerException bug fix: POLYHEDRA with faceCenterOffset not saved in state properly; EDGES option nonfunctional bug fix: JavaScript not returning arrays properly from Jmol.getPropertyXXXX() -- very important to have {} after j2sNative directive! bug fix: COMPARE could rotate to less-good fit with SMARTS search bug fix: draw ARROW ATOM/BOND broken bug fix: animation MORPH broken for non-PyMOL files -- load trajectory ({0 6}) 1cdr.pdb -- animation MORPH 10 -- animation ON -- load trajectory "test1.pdb" "test2.pdb" -- animation MORPH 30 -- animation ON bug fix: draw ARROW ATOM/BOND broken bug fix: draw ARROW with offset disallows set picking draw adjustments bug fix: concurrent loading of two cif files by two different applets fails bug fix: draw LINEDATA not operative (undocumented, for state; from draw xxx INTERSECT yyy) -- needs revision to create DATA option; can be huge and very long to process state file bug fix: load :2-butanone fails bug fix: PyMOL volume map data saved from PyMOL 1.6 has slightly different data structure bug fix: jvxl reader ignores jvxlVertexColorData bug fix: ellipsoid rendering problems code: MagRes/CASTEP reader upgrades code: color/translucent/opaque clean up in ScriptEvaluator ============================================================================= JmolVersion="13.1.16_a" new feature: set defaults PyMOL -- zoomHeight TRUE -- measurementUnits ANGSTROMS new feature: color BALLS -- distinct from color ATOMS because it doesn't get inherited -- for PyMOL compatability with sphere_color TODO: document these: new feature: restore SCENE "xxxx" nSec new feature: Scene menu -- PyMOL scene names, in order new feature: added parameters to moveTo allows setting cameraDepth, cameraX, and cameraY new feature: moveTo PYMOL [18-element standard PyMOL view matrix] -- used for PSE file loading -- to be used also for scenes [0-8] are 3x3 rotation matrix (row/column inverted) [9,10] are x,y translations (y negative) [11] is distance from camera to center (negative) [12-14] are rotation center coords [15-16] are slab and depth distance from camera (0 to ignore) [17] is field of view; positive for orthographic projection new feature: cache CLEAR -- same as cache REMOVE ALL new feature: load xxx.pse FILTER "DOCACHE" -- specifically for editing large PSE files when included in a state -- caches streamlined file that is still readable by PyMOL (needs testing!) (no electron density map data, for instance -- see HupA_2.pse) -- caches all isosurfaces, creating JVXL equivalents -- should be followed with WRITE xxx.pngj or WRITE xxx.jmol or WRITE xxx.zip -- for example: before: 04/07/2013 07:46 AM 11,929,507 HupA_2.pse $ zap;load "HupA_2.pse" filter 'DOcache' $ write t.zip after: Listing archive: t.zip Physical Size = 395174 Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2013-05-17 06:46:36 ..... 1092432 219718 HupA_2.pse 2013-05-17 06:46:36 ..... 1473760 6589 isosurface_level2 2013-05-17 06:46:36 ..... 25495 11624 state.spt 2013-05-17 06:46:36 ..... 134 119 JmolManifest.txt 2013-05-17 06:46:36 ..... 0 2 Jmol_version_13.1.16_dev_2013.05.17__2013-05-15_07.09 2013-05-17 06:46:36 ..... 158082 156316 preview.png ------------------- ----- ------------ ------------ ------------------------ 2749903 394368 6 files, 0 folders new feature: anim FRAMES [1, 3, 9, 9, 9, 3, 1] -- arbitrary PyMOL-like model list new feature: FRAME n -- same as MODEL n, unless we have PyMOL-like frames -- if have frames, then FRAME 2 goes to the second frame (model 3 in this case) -- MODEL n still always goes to a specific model. -- all relative options -- FIRST LAST PREV NEXT -- refer to frames if there are frames even if the MODEL command is given. new feature: pyMOL PSE state options: LOAD "FOO.PSE" state FILTER "xxxx" -- [state not present; default] load all PyMOL states (one PyMOL state == one Jmol model) -- state = 0 (load only the current PyMOL state) -- state > 0 (load just a specific PyMOL state) -- FILTER "nosurface" -- load PyMOL file without surfaces new feature: getProperty BONDINFO {atomset1} {atomset2} new feature: measurements with IDs and radius/diameter: -- measure ID "xxx" ... -- measure ID "xxx" RADIUS x.y (or DIAMETER x.y) -- renders as dots new feature: set zoomHeight -- FALSE by default -- set TRUE for PyMOL-like resizing (scale only set by height adjustment) new feature: isosurface color density (decimal) - variable decimal point size new feature: PyMOL CGOs as CGO command - needs testing - CGO ID "xxx" [ cgo data (float array) ] - includes basic CGO methods BEGIN GL_POINTS GL_LINES GL_LINESTRIP GL_TRIANGLE GL_TRIANGLE_STRIP GL_TRIANGLE_FAN VERTEX END COLOR NORMAL SIMPLE_LINE SAUSAGE TRICOLOR_TRIANGLE popup: added menu for MEP range -0.1 0.1 PyMOL: uniqueBondSettings working PyMOL: better scene restore; PyMOL: adds SASURFACE option (surface_solvent ON), with "carving" (ProFusion_ABL.pse, scene F6) PyMOL: abstraction of scene setting from reader PyMOL: first phase of reader development complete (working with Jaime Prilusky) -- 104 test models http://ispcsrv3.weizmann.ac.il/a2jmolb/browse -- implementation of standard objects, including: -- atoms with labels -- bonds -- standard PyMOL rendering, including: -- lines -- sticks -- nonbonded (stars) -- nb_spheres -- cartoons of various types (not plank) -- rockets -- ribbon (backbone/trace) -- putty (trace) -- dots -- measures -- simple CGO objects -- molecular surfaces -- electron density as points and meshes -- custom colors -- fog and slab -- morphing movies -- JVXL caching of isosurfaces PyMOL: measurement font/offsets enabled -- adds measure ID "xxx" FONT scale face style -- adds measure ID "xxx" OFFSET [mode, sx, sy, sz, ax, ay, az] -- adds measure ID "xxx" OFFSET {sx, sy, sz} PyMOL: perspective fix for translated center -- H115W.PinM.PSE PyMOL: preliminary scene implementation -- view only -- use RESTORE ORIENTATION xxxxx code: Text.java, Object2d.java moved from shapes to modelset bug fix: COMPARE move of group saved in state may not be correct when restored bug fix: write command doesn't accept parameter sequence IMAGE PNGJ ... (broken in 13.1.14) bug fix: load APPEND with PDB file loses structure (broken in 13.1.15) bug fix: restore command broken bug fix: JavaScript: adding SYNC bug fix: antialiasing or resizing stray lines problem solved (introduced in 11.0, 08/2006!) bug fix: "display add" by itself should not do anything bug fix: Hall translation initialization problem bug fix: JavaScript reading of old-style JVXL files bug fix: Gaussian reader not splitting MO set by model bug fix: polyhedron reading from state bug fix: connect delete not saved in state bug fix: rockets not working for alpha polymer (also in 13.0.16) bug fix: GXL added to carbohydrates bug fix: show state/anim turns "anim" into "animation" bug fix: MoldenReader orbitals are not in energy order; use FILTER "NOSORT" to prevent sorting by energy bug fix: simultaneous spin/animation broken in 13.1.13 bug fix: MoldenReader fix for file blank lines and g,h,i orbitals - also for 13.0.16 bug fix: COMPARE does not allow nSeconds at beginning, as described in documentation bug fix: isosurface VOLUME/AREA SET n cannot return to full array reporting; SET -1 added. bug fix: isosurface VOLUME/AREA always returns an array, possibly of length 0 bug fix: isosurface molecular/solvent can give inappropriate inner surfaces bug fix: show selected includes deleted atoms ============================================================================= JmolVersion="13.1.15" FEATURE CHANGE: default JPEG quality set to 100 (was 75, which looks crappy) new feature: select command parameter completion using [TAB] includes variables new feature: PyMOL-like label offset options: set labelOffset [sx, sy, sz] set labelOffset [mode, sx, sy, sz, ax, ay, az] where sx,sy,sz are screen coord offsets -- in Angstroms -- applied after view rotation -- sy > 0 LOWERS label ax,ay,az are xyz position (in Angstroms; applied before view rotation) mode == 1 indicates xyz position is an offset to the atom position mode != 1 indicates xyz position is absolute defaults: mode == 1; ax = ay = az = 0 new feature: CASTEP energy reading new feature: XCrysDen file reader new feature: VASP POSCAR reader new feature: set cartoonLadders -- no bases, like PyMOL new feature: model CREATE n -- allows "empty" model creation without atoms -- n = number of models to create -- defaults to 1 new feature: "all frames" toolbar button starts/stops PyMOL movies: if(_isMovie){if (_animating) {animation off}else{animation play}} else {frame *} new feature: Jmol/JmolData application -I flag accepts input from System.in and command piping: type t.spt | jmol -I start Jmol with this script Note: if you use a pipe, be sure to make "exitJmol" the last command of the script Add -o for output to System.out. Without the pipe, we are going to control Jmol from a Jmol> prompt on the command line console jmol -Io see messages on input console ...messages from Jmol Jmol> background red;load 1crn.pdb;.... ...messages from Jmol Jmol> exitJmol Add -n for headless operation (will not exit automatically). type t.spt | jmol -Ion Note: if you use a pipe, be sure to make "exitJmol" the last command of the script Add -i for silent operation (no writing to System.output). new feature: dots IGNORE {atom set} ON; new feature: Jmol or JmolData with -g0x0 and load filter "DORESIZE" will automatically resize the image to what is given in the PyMOL file as its default size: JmolData -ns "load t.pse filter 'DORESIZE'" -g0x0 -w "PNGJ:t.png" bug fix: isosurface map property may not reference correct atom bug fix: set isosurfacekey may not work with slabbing bug fix: deleting atoms does not remove bioshape rendering bug fix: isosurface in multi-model context saved in state with wrong model number bug fix: PyMOL label fix, including fonts bug fix: PyMOL rockets, nucleic acid rendering bug fix: write JPG not working in JavaScript bug fix: isosurface ... map property colors not cleared entirely before next mapping bug fix: MSMS reader broken bug fix: labels lost upon z-shading bug fix: isosurface property temperature default smoothing broken in 13.1.13. bug fix: {xxx}.cartoon = {xxx}.temperature.all fails to use correct values (also backbone, trace, etc.) bug fix: isosurface translucent level not re-zeroed properly bug fix: IDTF exporter with translucency fails bug fix: commands f.sort() and f.reverse() fail. bug fix: {;...;} syntax does not work in 13.1 bug fix: select dots > 0 does not work bug fix: JmolData broken code: PyMOL work; CGO command and class CGO extends DRAW preliminary only; preliminary putty; fix for putty+sticks issue code: PyMOL reader localSettings code: PyMOL putty hack for Cover1.pse removed; colix index error fixed code: PyMOL slab and depth; better field of view; even better zslab/zdepth code: PyMOL reader "backbone" (really a trace -- fixed width?) code: PyMOL reader isosurface solvent code: PyMOL reader and full surfaces, mixed bigEndian/littleEndian Pickle reading code: PyMOL reader: cartoon_ladder_mode approximation as cartoons code: PyMOL reader: includes cartoon type 1,4,7 -> trace code: String JmolViewer.runScript(String script) runs script immediately and returns output buffer code: continued work on PyMOL PSE file reader code: simplification of JmolViewer interface and access to global parameters: // several; methods were deprecated and removed in 13.1.15. All are accessible via "getXxxx" methods: abstract public float getFloat(int tok); abstract public int getInt(int tok); abstract public boolean getBoolean(int tok); //abstract public int getAnimationFps(); see getInt(T.animationFps) //abstract public boolean getShowHydrogens(); see getBoolean(T.showhydrogens) //abstract public boolean getShowMeasurements(); see getBoolean(T.showmeasurements) //abstract public boolean getAxesOrientationRasmol(); see getBoolean(T.axesorientationrasmol) //abstract public int getPercentVdwAtom(); see getInt(T.percentvdwatom) //abstract public boolean getAutoBond(); see getBoolean(T.autobond)) //abstract public boolean showModelSetDownload(); deprecated -- was just "true" ============================================================================= JmolVersion="13.1.14" new feature: JVXL vertex-only data encoding "none" allows hand-coding of JVXL files new feature: isosurface efvet reader data "0" is "indicated colors" -- isosurface "test.efvet" 0 JavaScript: WebGL fix involving Collections.list calling ArrayList.add() JavaScript: disambiguation of Mesh() JavaScript: changing to utf-8 String nonbinary reading of .po files JavaScript: localization working code: cleaning up of Escape and checks for array types code: JavaScript does not need a visible canvas to create images -- could allow for "headless" JS operation bug fix: isosurface boundbox plane .... bug fix: isosurface boundbox {pt1} {pt2} plane ... bug fix: JVXL 1.0 format reading broken bug fix: MOL2 reader not properly assigning element symbols bug fix: isosurface slab translucent broken when saved in state bug fix: isosurface slab translucent mesh broken when saved in state bug fix: JavaScript minimization fix bug fix: sync socket connections not working bug fix: "navigate percent" broken bug fix: isosurface area/volume broken bug fix: JavaScript WRITE IMAGE with HTML5 does not allow change of width or height bug fix: WRITE PNGJ does not allow sizing of image bug fix: backbone/spine defs do not take into account phosphorylated proteins. Better: "@backbone protein&(_a>=1&_a<6|_a>=64&_a<72)|nucleic&(_a>=6&_a<14|_a>=72)", "@spine protein&_a>=1&_a<4|nucleic&_a>=6&_a<14&_a!=12", bug fix: getProperty fileInfo fixed and documented bug fix: assign atom does not update selections for elements bug fix: FileDropper broken bug fix: LcaoCartoon "-sp3d" not working bug fix: PyMOL PSE files not accessible by Jmol app File...Open or drag/drop bug fix: incorrect calculation of RMSD for COMPARE and SMILES bug fix: ModelKit menu "SHIFT to rotate" should read "ALT to rotate" bug fix: starting applet console takes two clicks bug fix: JavaScript SMILES bug (String.replaceAll() does not work bug fix: JavaScript LOOP command not implemented ============================================================================= JmolVersion="13.1.13" FEATURE CHANGE: multiple applets no longer share the same lighting space new feature: animation DISPLAY {atomset} - applies a filter to a running animation to display only a certain set of atoms. - for example: load test.pse animation display {act_site} // defined in test.pse new feature: animation MORPH n - where n is a number of frames to be inserted between trajectories - requires previous LOAD TRAJECTORY or the loading of a PyMOL PSE file having a movie (automatically a trajectory) - Jmol will do a linear morph as the animation runs. - for example: load test.pse animation morph 3 - could be used for a linear morph between just two structures: load trajectory "test1.pdb" "test2.pdb" animation morph 32 // animation will run 33 frames new feature: frame -x.y - negative decimals indicate a linear morph is requested between two trajectory frames. - for example: load test.pse frame -3.5 new feature: set celShading TRUE -- produces cel shading effect - see http://en.wikipedia.org/wiki/Cel_shading - introduced by N David Brown new Feature: Experimenting with ellipsoid {atom set} and ellipsoid $isosurfaceID new feature: PyMOL PSE reader enhancements -- labels, simple surfaces, measures new feature: isosurface xxxx MAP property COLOR -- allows inheritance of color from underlying atom (as in PyMOL) new feature: UHBD grid file reader new feature: DelPhi grid file reader new feature: load =xxx/ where xxx is a database code that can be set up in the future by a user. -- currently including mp MaterialsProject http://www.materialsproject.org/materials/%FILE/cif -- along with ligand, nci, nmr, pdb, pubchem -- see JmolConstants.databases for the full list. -- note that nci can take an additional tag such as /names after the name, and pubchem can take one before it: load =mp/1 load =nci/caffeine load =pubchem/caffeine load =pubchem/cid/2345 print(load('=nci/caffeine/names')) bug fix: set picking IDENT when picking is already ident can cancel a pending measurement bug fix: applet does not refresh when mouse exits with pending measurement bug fix: labels within fog should be hidden bug fix: load CENTROID does not always work -- wrong implicit normalization flag (was -1 instead of 1) bug fix: property_xxx does not work (since 10/3/12, 13.1.7) bug fix: The "show history" command is supposed to clear out the "show history" command itself, but only if it is a top-level command (from the console), but it does more than that if it is part of script("show history"). Probably true with all recent versions of Jmol. bug fix: isosurface binary file reading (MRC, CCP4, O, binary PMESH, etc.) broken bug fix: JavaScript: zoomTo [seconds > 0]... and restore rotation|orientation [name] [seconds > 0] not waiting code: Refactoring class names to reduce JSmol JavaScript footprint ScriptVariable --> SV Token --> T BitSet --> BS BitSetUtil --> BSUtil Colix --> C Point3f --> P3 Point3fi --> P3i StringXBuilder --> SB Vector3f --> V3 JmolConstants --> JC code: shader functions removed from Colix; Shader class made nonstatic code: refactored to allow scriptless JavaScript. (reduces initial core code load size by 25%, to 2.5Mb) ============================================================================= version="13.1.12" new feature: PDB reading of X-PLOR using hybrid-36 and NAMD files using hex -- see https://www.schrodinger.com/AcrobatFile.php?type=supportdocs&type2=&ident=530 -- see http://cci.lbl.gov/cctbx_sources/iotbx/pdb/hybrid_36.py new feature: load xxx.pdb filter "TYPE i,n" -- loads custom text fields into the "atomType" property of an atom upon customized PDB file loading where i is the number of the column (starting with 1) and n is the number of columns -- text is trimmed -- e.g. load xxx.pdb filter "TYPE 73,4" loads four characters starting at column 73 as "atomType" (segID) -- to convert to a numerical value, convert that to .property_foo: load xxx.pdb filter "type 22,4"; {*}.property_seqNo = {*}.atomType new feature: PDB filter "TYPE 73,4=xxx" -- loads four characters starting at column 73 (1-based) as "atomType" -- loads only those atoms with atom types starting with "xxx" new feature: axes labels "a" "b" "c" "xxx" where "xxx" is the label for the origin bug fix: PDB file reading of remediated 1A7Y and 1E9W error due to too many CONECT bonds -- now reads HEADER columns 63-66 for 4-digit PDB ID. -- only if this ID is absent will the number of CONECT bonds be checked in decision to autobond bug fix/update: revision of the pages that make the About menu (application) in each language. -- Some changes that had been formerly applied to the English page are now in all. (Removal of copyright date in text) -- All About_xx.html files are now encoded and saved in UTF-8 w/o BOM, except Chinese which is in GB2312/GB18030. -- Extended characters in tr and zh that had become corrupt across revisions were restored from old ones. -- Several html header tags updated or added (html5 doctype, charset, lang) -- Hopefully all will display correctly after these changes! JavaScript: fix for SMILES matcher and compare({*},{*},"isomer") -- j2s reminder: Can't use Java new int[n][]; must use org.jmol.util.ArrayUtil.newInt2(n) JavaScript: going to Float64Array for all noninteger arrays -- all numbers double Note that this could cause differences with Jmol, but I think we will have to live with that. The problem was with (new Float32Array([13.48]))[0] != 13.48. So instead of trying to force floats, it seems to make more sense to me to force doubles, using Float64Array instead of Float32Array. Thanks given to Ira Hanson for clearing this up for me. JavaScript: JSmol writes PNG, PNGJ, JMOL, ZIP files from a web page JavaScript: JSmol writes text files from a web page ============================================================================= version="13.1.11" new feature: Jmol app "recent files" recognizes if file was drag-dropped or opened via "File Open" new feature: color cartoons red blue -- front/back colors -- preliminary - only for hermiteLevel = 0, not cartoonFancy -- a bit rough at the edges -- not in state bug fix: 13.1 does not calculate partial charges (mark/reset fault in reading resource files) bug fix: MOPAC2012 files not recognized bug fix: patch 3581394 - small fixes for cartoon meshes bug fix: 13.1.8 does not display translucent bonds when only bonds are translucent JavaScript: flat cartoons for WebGL using mesh JavaScript: adds XML model file readers -- tested: VASP, XODYDATA, CML, Chem3D, MolPro, XSD code: refactoring for JavaScript popup/modelkit menus code: GT optimization, refactoring code: Naga sockets upgrade to Naga-3_0. (MolecularPlayground and jsonKiosk) ============================================================================= version="13.1.10" FEATURE CHANGE: set perspectiveMode removed -- nonlinear version 10 perspective mode no longer supported bug fix: !quit was not stopping animation and vibration bug fix: slowed zoomTo in Java version of 13.1.9 bug fix: PDB occupancies for first atoms may be 0.0 instead of 1.0 (broken in 11.7) bug fix: select *W does not work bug fix: setEllipsoid... options not implemented for nonthermal ellipsoids in 13.0 or 13.1 bug fix: nonthermal ellipsoids broken in 13.1. JavaScript: !quit and navigation enabled JavaScript: script queue enabled JavaScript: move thread implemented; needs navigation threads code: JmolApplet0_Navigate.jar and JmolApplet0_Parallel.jar added code: Navigator separated from TransformManager11 code: TransformManager10 removed code: TransformManager11 combined with TransformManager ============================================================================= version=13.1.9 new feature: MO or (ISOSURFACE MO) DENSITY -- electron density -- same as MO [1] SQUARED new feature: MO HOMO|LUMO|NEXT|PREV|[c1 n2 c2 n2...] SQUARED -- Squares wave functions as it combines them. -- That is, displays the collective electron density (if occupied) -- if [...] is not given, groups orbitals by energy -- examples: load c6h6.smol;mo homo squared // displays symmetric squared sum of two degenerate orbitals load co2.smol; mo homo squared // displays cylindrical electron density mo next squared // lumo, provided homo was just displayed bug fix: Molden reader tweaks bug fix: Jmol application toolbar picking tool should not select none bug fix: ellipsoid rendering fails bug fix: translucent echo oddities in Jmol 13.1.8 bug fix: lost volume rendering in 13.1.8 bug fix: CASTEP density reader fails to reset origin to 0 0 0 in mapping bug fix: UTF files with BOM (byte order marker) present not read correctly bug fix: UTF files within GZIP or ZIP files not read correctly bug fix: set picking draw no longer works in Jmol 13.0 or 13.1 bug fix: translucent echo backgrounds lost in 13.1.8 bug fix: select resno=@{n+3} fails in 12.2, 13.0, and 13.1 bug fix: isosurface AtomicOrbital broken in 13.1.8 JavaScript: removing ambiguity in AtomObject in setColix(short, int, int) and (int, short, int) JavaScript: binary Spartan SMOL reader enabled - nice IEEE calculator: http://www.merlyn.demon.co.uk/js-exact.htm#DW4 JavaScript: delay, hover, animation, vibration, moveto, spin, timeout JavaScript: full binary loading for JavaScript -- tested only in Firefox, but specifically designed for Chrome's insistence that synchronized AJAX processes must not be binary JavaScript: base64 translation of encoded binary strings from JS file reading prefix: ";base64," initiates decoding. JavaScript: com.json JSON package removed due to licensing issues JavaScript: JSmol -- all references to InputStream.read(byte[]) --> InputStream.read(byte[], 0, len) to speed file reading processing JavaScript: JSmol -- float[].clone(), int[].clone() not supported in Java2Script JavaScript: java.text.DateFormat not supported in Java2Script JavaScript: Note -- org.jmol.adapter.smarter.Atom is not fully cloned (anisoBorU and ellipsoid are not copied and their values must be considered "final") code: adding quotes to above properties allows them to be used in JavaScript; j2sNative in JmolConstants.java code: refactoring org.jmol.util into org.jmol.io and org.jmol.io2 ============================================================================= version=13.1.8 new feature: much better text rendering using 3-bit translucency bug fix: boundbox $pmeshID, center $pmeshID, and zoomto $pmeshID not implemented bug fix: stronger (bold) frame labels bug fix: no automatic change to bold for antialiasDisplay or PovRAY bug fix: try/catch not working when embedded in another context bug fix: JmolData not producing output for PRINT commands bug fix: JmolData setting haveDisplay true, then failing to get mouse manager bug fix: MRC file reader not setting default cutoff correctly bug fix: (13.1 only) MRC/DNS6 file readers fail bug fix: MRC surface file reader with symmetry error bug fix: (13.1 only) minimization broken code: clearing font cache upon zap. code: HTML5-only JavaScript full text working code: HTML5-only JavaScript version working ============================================================================= version=13.1.7 FEATURE CHANGE: getProperty isosurfaceInfo no longer returns vertex data new feature: getProperty isosurfaceData returns vertex data new feature: set cartoonFancy -- creates elliptical ribbon for cartoons -- if ribbonAspectRatio is its default value of 16, it is reset to 4 while cartoonFancy = true. bug fix: (13.1 only) reading of states with select BONDS fails to select bonds broken in 13.1.6 bug fix: (13.1 only) centered/right-aligned text only aligned after first line bug fix: export WRL missing various objects requiring transformMatrixInv bug fix: export may be missing protein cartoon turn bug fix: set ribbonAspectRatio improperly widens ribbon bug fix: zShadePower should not be static (affecting all applets/Jmol application frames) bug fix: write OBJ xxx.obj not working (but write xxx.obj is fine) bug fix: cartoons (with hermiteLevel > 1) adjusted to have smooth normals between segments (Alexander Rose) also, hermiteLevel >= 6 now gives ellipse cross-section recommended settings: set hermiteLevel 6;set ribbonAspectRatio 4 bug fix: JmolControls.js had broken radio buttons bug fix: DRAW {x y z} "title" can fail in multimodel cases with translucency ============================================================================= version=13.1.6 new feature: showTiming new feature: CIF reader reads assembly information -- load =1vif.cif filter "ASSEMBLY 1" -- load =1vif.cif filter "ASSEMBLY 1;$A" # just label_asym_id A -- load =1vif.cif filter "ASSEMBLY 1;!$C" # just label_asym_id values not C new feature: LOAD "xxx.cif" APPEND "appendedData" @x -- specifically for CIF files, reads a CIF file, appending string in variable -- intentionally not documented. -- feature particularly for RCSB (John Westbrook), so, for example: Var x = load("test.txt") load "1vif-early.cif" append "appendedData" @x FILTER "assembly 1;$A" -- or in one line: load "1vif-early.cif" append "appendedData" @{load("test.txt")} FILTER "assembly 1;$A" -- where, perhaps, x = _pdbx_struct_assembly_gen.assembly_id 1 _pdbx_struct_assembly_gen.oper_expression 1,2,3,4 _pdbx_struct_assembly_gen.asym_id_list A,B,C # loop_ _pdbx_struct_oper_list.id _pdbx_struct_oper_list.symmetry_operation 1 x,y,z 2 y,x,-z+1 3 -x+1,-y+1,z 4 -y+1,-x+1,-z+1 # new feature: LOAD "xxx.cif" APPEND DATA "appendedData" .... end "appendedData" -- specifically for CIF files, reads a CIF file, appending string in lines of script -- intentionally not documented -- most important for saving the state: load "1vif-early.cif" append data "appendedData" _pdbx_struct_assembly_gen.assembly_id 1 _pdbx_struct_assembly_gen.oper_expression 1,2,3,4 _pdbx_struct_assembly_gen.asym_id_list A,B,C # loop_ _pdbx_struct_oper_list.id _pdbx_struct_oper_list.symmetry_operation 1 x,y,z 2 y,x,-z+1 3 -x+1,-y+1,z 4 -y+1,-x+1,-z+1 # end "appendedData" FILTER "assembly 1;$A" -- option reserved to allow different data names for different purposes -- not general yet -- specific to CIF reader. bug fix: PDB 4B2Q, with faulty (incomplete) REMARK 350 not read code: successfully refactored for JavaScript (see http://chemapps.stolaf.edu/jmol/jsmol-10-1/jsmol2.htm) -- note that all code development is done in Jmol, then Java src code is transferred to JSmol project -- adding: javax.util.BitSet javax.util.StringXBuilder -- streamlining: javax.vecmath... -- removed all references to StringBuffer -- StringXBuilder allows optimization of performance in JavaScript -- workaround for Java2Script compiler bug setting "char x;" to 0 -- Java2Script compiler is not distinguishing int[] from float[] when creating the array -- StringXBuilder takes care of adding ".0" to floats and doubles, but we need to be on the lookout for not places where we are constructing a string where the difference between an int and a float is significant. -- optimize class hierarchy return by cataloging classes as org_jmol_xxxx in addition to org.jmol.xxxx -- tie in graphics on JavaScript side -- add fonts -- add "billboard" objects such as labels, 3D echos, etc. -- add 2D echos -- ultimately write an asynchronous version of JSmol code: org.jmol.jvxl.readers classes accessed reflexively (for JavaScript optimization) code: JSmol classes incorporated into Jmol code -- org.jmol.awtjs, org.jmol.appletjs, org.jmol.exportjs code: refactored for JavaScript (mostly removing ambiguity in method names) ============================================================================= version=13.1.5 bug fix: CASTEP PHONON files not loading code: refactored for JavaScript ============================================================================= version=13.1.4 new feature: ISOSURFACE PLANE ... MAP ... LATTICE {i j k} [volume data] -- allows periodic volume data to be mapped to a plane based on a specified translational lattice -- for example: isosurface plane x=2 map LATTICE {1 2 2} "data.dat" new feature: POLYHEDRA {atom1} to {atoms_including_atom1} -- polyhedra with or without central atom, but with a reference atom bug fix: translate selected x ... bug bug fix: ISOSURFACE saving in state broken 7/30/12 in 13.0.RC3 bug fix: simple isosurface PLANE not saved in state bug fix: isosurface command with MAP from state when saved to state may fail bug fix: 13.1.2 offsets label positions incorrectly code: refactored for JavaScript ============================================================================= version=13.1.3 bug fix: 13.1.2 breaks loading of ZIP files bug fix: CUBE reader reading atom Z numbers as partial charge bug fix: 13.1.2 breaks LOAD ? ============================================================================= version=13.1.2 new feature: cache ADD "filename" -- adds a file into the memory cache as a set of bytes new feature: cache REMOVE "filename"|ALL -- removes a file from the cache new feature: show cache -- displays the cache as an array new feature: cache() function -- returns the cache as an associative array {filename: nBytes, filename: nbytes,...} new feature: write INLINE "xxxx" "filename" for example: write INLINE "testing" "myfile.txt" for example: write INLINE @{load("$caffeine")} "caffeine.mol" new feature: set defaultDropScript for drag-drop and File|Open bug fix: translate x 0 does not recenter the model in the window bug fix: PDB polymers of length 1 allow size to be set and appear {visible} but are not bug fix: OPEN dialog doesn't allow for no PDB cartoons. bug fix: open dialog for 1-residue PDB files does not show atoms. bug fix: pngj storage of Spartan directory zip files or Spartan directories cannot be read because the PNGJ files created do not contain the necessary files from the directory code: (JmolViewer) public void cacheFile(String fileName, byte[] bytes) -- allows a mechanism for applets or embedding apps to deliver file content as bytes -- for applets, first getPropertyAsJavaObject("Viewer") code: refactored for Java2Script due to inner class bug there. ============================================================================= version=13.0.1 APPLET: -- a new OOP JavaScript interface (Jmol-JSO) allowing nonJava options such as ChemDoodle and GLmol as well as JME/JSpecView connectivity -- JmolData full "headless" operation for server-side processing BIOPHYSICS: -- COMPARE command FILE READING: -- reading of JCAMP-DX files having structure/spectra assignment data using ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview) -- Gaussian log reading of Natural Transition Orbitals -- automatic PNGJ file caching for immensely faster loading of PNGJ files from remote servers FILE WRITING: -- write PNGJ files encapsulate all model file data into one PNG file -- write image 400 400 PNGJ "http://....." POSTs JMOL or IMAGE or structure to a server as application/octet-stream -- write MOL adds partial charge data as > in SDF format -- multiple-scene PNGJ files allowing minimal or full data loading and scripted animations ISOSURFACES: -- isosurface caching -- isosurface MOVE [[...matrix4f...]] moves/rotates an isosurface (for the state) MINIMIZATION: -- MMFF94/UFF minimization and energy calculation MOLECULAR DATA: -- show CHEMICAL -- show NMR MOLECULAR PLAYGROUND: -- MolecularPlayground -- remote status and remote control SOLID-STATE PHYSICS: -- solid state physics support SPECTROSCOPY: -- integration of JSpecView into Jmol, including 2D spectral display and manipulation STRUCTURE SEARCHING: -- extended Jmol SMARTS searching -- PubChem search for name (which can be a CAS number), cid, or SMILES using ":" ============================================================================= version=13.0.RC7_dev bug fix: isosurface CAVITY not saved in state ============================================================================= version=13.0.RC6 bug fix: isosurface CAVITY not saved in state bug fix: Gaussian reader not reading "AO basis set in the form of general basis input" properly ("Gen" keyword) bug fix: Gaussian reader not reading "7D 0" correctly bug fix: Trajectories still broken for PDB files code: all import foo.*; removed, specified ============================================================================= version=13.0.RC5 bug fix: broke trajectories in 13.0.RC4 ============================================================================= version=13.0.RC4 new feature: write SCENE PNG|PNGJ "xxxx.spt" option to create PNG or PNGJ files (same file, just different extension) new feature: "menu" as sole contents of a script pops up the context menu -- joins category of special commands, including "exit" "pause" and "quit" bug fix: load append TRAJECTORY (upper case) fails bug fix: load append trajectory "$mannose" fails (loads two models) bug fix: load trajectory "maleic.cif" fails with cryptic error message (not appropriate for trajectory loading) bug fix: undocumented and inaccurate CALCULATE VOLUME removed ============================================================================= version=13.0.RC3 new feature: automatic PNGJ file caching for immensely faster loading new feature: write MOL adds partial charge data as > in SDF format new feature: isosurface CACHE .... -- parameter CACHE along with isosurface creation or alone instructs Jmol to immediately create JVXL data for the specified surface and to load that data instead. The surface remains in memory (in this version of Jmol) can can be used again using cache://isosurface_ where is the isosurface ID such as "isosurface1". -- The command ISOSURFACE CACHE alone will cache the current isosurface -- If the cache is no longer needed, then RESET CACHE will release the memory used to hold the JVXL data for the isosurface -- The result should be essentially equivalent to the original command. (It is recommended that the original be a relatively simple command, because not all nuances of an isosurface may be stored in the JVXL data.) -- THIS OPTION IS NOT COMPATIBLE WITH SAVING THE STATE AS AN SPT FILE. -- Instead, one needs to save the state in PNGJ or JMOL format, where the cached isosurface can be reloaded from a file saved in the PNGJ or JMOL zip directory bug fix: load a model, then load append TRAJECTORY -- will fail bug fix: load APPEND xxx where xxx is FILE, INLINE, SMILES, TRAJECTORY, MODEL all save incorrect LOAD command in state bug fix: shelx reader (.res) not assigning space group name or applying normalization ============================================================================= version=13.0.RC2 bug fix: isosurface molecular producing artifacts bug fix: isosurface select {...} molecular not excluding all other atoms for troughs new feature: Gaussian log reading of Natural Transition Orbitals new feature: isosurface MOVE [[...matrix4f...]] moves/rotates an isosurface (for the state) bug fix: isosurface moved by atom connection not saved correctly in state bug fix: isosurface SET n not read properly from JVXL file. ant fix: changing the way Jmol.properties is handled vis-a-vis # and underscores bug fix: isosurface SOLVENT producing artifacts --- needed minimum resolution bug fix: isosurface with selected set not delivering just those vertices for within distance calc bug fix: isosurface CONNECT in documentation but never implemented bug fix: isosurface SET n not saved in state or JVXL file. bug fix: Gaussian reader fails for 2-digit basis orbital names such as "12XX" bug fix: PNGJ creation not handling same-file or same-name issues. bug fix: isosurface SOLVENT producing cavity-like artifacts bug fix: SCENE writing with toggle (pause scene 2 ... pause scene 2) in error bug fix: SCENE min spt script needs wrapping by pathForAllFiles bug fix: isosurface MINSET or SET not compatible with SLAB bug fix: show $d1 where d1 is a DRAW object broken bug fix: calculate hydrogens incorrect for proteins ============================================================================= version=13.0.RC1 -- a new OOP JavaScript interface allowing nonJava options and JME/JSpecView connectivity -- MMFF94/UFF minimization and energy calculation -- integration of JSpecView into Jmol, including 2D spectral display and manipulation -- reading of JCAMP-DX files having structure/spectra assignment data ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview) -- multiple-scene PNGJ files allowing minimal or full data loading and scripted animations -- write PNGJ files encapsulate all model file data into one PNG file -- extended Jmol SMARTS searching -- show CHEMICAL -- show NMR -- solid state physics support -- MolecularPlayground -- remote status and remote control -- COMPARE command -- JmolData full "headless" operation for server-side processing -- PubChem search for name (which can be a CAS number), cid, or SMILES using ":" -- isosurface caching -- write image 400 400 PNGJ "http://....." POSTs JMOL or IMAGE or structure to a server as application/octet-stream ============================================================================= version=12.3.33 (13.0.RC1) new feature: full JSpecView support for NMR -- integration, peak listing, measurements -- printing with peak measurements new feature: measure(a b "minArray") -- measures minimum distance from atom set a to atom set b atom by atom -- return array with number of elements corresponding to the number of selected atoms -- for example: {1.1}.property_distTo12 = measure({1.1}, {1.2} "minArray"); color property_distTo12 new feature: {x}.property_d = [....] -- allows for [....] to have length of the number of atoms in {x} in which case the values are assigned on a 1:1 basis new feature: PDB reader reads gromacs-created "pdb_wide_format" files and also automatically reads PQR based on gromacs REMARK bug fix: select within(1.0, withinallmodels, 1.1) and 1.2 causes exception bug fix: script xxx(yyy).spt broken ============================================================================= version=12.3.32 FEATURE CHANGE: LOAD "myfile.xxx" with no additional parameters where xxx is "png" or "pngj" or "spt" now assumes these are scripts and runs SCRIPT "myfile.spt" instead new feature: write SCENE "xxxx.spt" -- creates pngj files -- using "xxxx.png" will STILL USE "xxxx.spt" but will create PNGJ files with ".png" extensions -- scene creation with linked PNGJ files -- xxxx.spt should include "pause scene n" commands, which are then used to separate the script into separate scenes. "n" must be an integer. -- Two files are created for each scene (pngj unles: xxxx_scene_n.min.pngj very small; does not contain anything more than an image, JmolManifest.spt, and scene.spt xxxx_scene_n.all.pngj adds all necessary files, plus script.spt -- Either of these files can be used, but if x.min.pngj is used, then x.all.pngj needs to be present as well in the same directory. new feature: drawHover displays ID for isosurface and reports to hoverCallback new feature: load "$$xxxxx" loads 2D version, not 3D (used for JmolData connection with JME) -- basically, use of two $ signs results in drop of "&get3d=True" from NCI call bug fix: compiler not synchronized; allows jmolEvaluate() to fail if two threads access it simultaneously bug fix: getproperty isosurface after a "no-surface" isosurface call like load $water;isosurface sasurface fails bug fix: color for hbonds/ssbonds backbone incorrect ============================================================================= version=12.3.31 bug fix: isosurface plane ... within ... map ... fails bug fix: write broken in 12.3.30 ============================================================================= version=12.3.30 new feature: atom properties sx, sy, sz, and sxyz -- screen coordinates new feature: app flag -r restricts file access -- like -R, but allows reading of ".spt" files new feature: load("http://.....?POST?_PNGJBIN_") -- accompanies load("http://....?POST?_PNG_") and load("http://....?POST?_PNGJ_") -- sends PNGJ image to server as byte array instead of as application/octet-stream instead of Base64-encoded string and application/x-www-form-urlencoded -- return value is whatever server is set up to send new feature: select within(distance, $drawID) bug fix: isosurface plane... map property temperature not working bug fix: PNG files written by Jmol from 12.3.7 - 12.3.29 have incorrect checksum. Browsers do not seem to care, but Java does when loading a background image in Jmol! bug fix: background image NONE fails bug fix: if(...) statement (no braces) broken in 12.3.21 ============================================================================= version=12.3.29 new feature: (JmolCore.js/JmolApplet.js/JmolCD.js/JmolApi.js) -- changes "useChemDoodleOnly" to "disableJmol" in preparation for non-ChemDoodle plug-ins similar to JmolCD.js -- allows for default values for Info -- adds Info.src -- similar to src in an tag -- turned into LOAD "xxx.png" -- more efficient coding new feature: set MESHSCALE (default 1) also allows isosurface/mo mesh scaling -- was DOTSCALE in 12.3.26, but that is not appropriate new feature: Mopac archive reader, including internal coord. defs -- use FILTER "NOCENTER" to NOT center atoms in unit cell -- use CENTROID for complete molecules with centroids within unit cell -- use PACKED CENTROID for complete molecules with any atoms within unit cell -- properties stored in auxiliaryInfo use getProperty auxiliaryInfo or x = getProperty("auxiliaryInfo".foo) to retrieve new feature: set pathForAllFiles "..." -- all files, local or remote, will be taken from the indicated path -- the indicated path may be a zip file entry (ending with "|") -- automatically reset to '' in case of an unrecoverable error in execution -- used for creating JMOL files containing user scripts instead of a state -- disallows all writing and image creation -- scripts including prompts to read wildcard files (for example, "load ?") will still prompt for those and read them properly new feature: write SCRIPT ["scriptFileName", "filename2","filename3",...] PNGJ|JMOL... -- syntax is WRITE SCRIPT followed by an array of file names then whatever else is necessary to create the PNGJ or JMOL file -- for example: write script ["wind.spt"] test.jmol -- Creates a single PNGJ or JMOL file that instead of containing the state contains the script and additional files listed by the user. The first script is run, and it is presumed that the other files are needed for full execution of that script. -- Allows for creating PNGJ and JMOL files that run as animations, not just final states. -- Jmol will automatically add any files current to the state, but other files not indicated by the state (script files especially) required for the script to run need to be indicated by the user. -- When the script is executed, pathForAllFiles is set to the zip file itself. Thus, even scripts containing references such as "script2.spt" or "=xxxx" can be run, provided the user supplies script2.spt xxxx.pdb.gz as one of the required filenames. -- Note that if a file is saved locally using LOAD =xxxx AS t.pdb, Jmol will automatically use the local file reference to t.pdb, not the RCSB reference. -- If the file is loaded using only LOAD =xxxx, then Jmol will reload the remote file and store it in the PNGJ/JMOL file as xxxx.pdb.gz. bug fix: Jmol 12.3.28 breaks writing JMOL/PNGJ files -- Jmol 12.3.28 release DELETED bug fix: modelkit mode creating atoms after load "@x" fails bug fix: script javascript:xxxx() broken for Jmol object javascript bug fix: JmolCore.js fix for getPropertyAsArray bug fix: draw arrows not adjustable using set picking draw bug fix: Exception for select within(molecule,...) when atoms have been deleted ============================================================================= version=12.3.28 DELETED 6/10/2012 due to breaking of JMOL/PNGJ format new feature: isosurface ... map PERIODIC ... -- allows mapping grid-based data beyond the unit cell defining its grid new feature: write VIBRATION n -- writes 20 * n frames -- n periods -- some issues with first frame and value of n new feature: load PACKED CENTROID -- only complete molecules having one or more atoms within or on the face of the unit cell -- may not preserve # of atoms of unit cell -- reverts to simple PACKED if this is a single-molecule solid (such as diamond) new feature: unitcell $isosurfaceID new feature: unitcell [{center}, {a}, {b}, {c}] -- sets unit cell for current model only new feature: "plot data" command by itself opens a new frame with just one atom in it, at (0,0,0) new feature: isosurface SLAB BRILLOUIN (or WIGNERSEITZ) -- transposes an isosurface into the Brillouin-zone/Wigner-Seitz unit cell -- based on the isosurface's vectors if there is no unit cell for this model. -- for creating isosurfaces of Fermi surfaces bug fix: LOAD with SPACEGROUP or RANGE or UNITCELL should default to {555 555 -1} (packed) lattice bug fix: JVXL reading of mapped data does not use file's rendering option for lighting bug fix: default measure dotted lines are too thin for export bug fix: measures not offset correctly when given width in line. ============================================================================= version=12.3.27 new feature: [menu] vibration [*,/] 2 new feature: XSF isosurface reader new feature: load CENTROID -- only complete molecules having centroid in unit cell -- preserves # of atoms of unit cell bug fix: write PNGJ broken in 12.3.26 bug fix: 12.3.26 breaks Jmol/JspecView connection bug fix: draw pointgroup scale x.x -- changing x.x does not revise point group bug fix: reading of JVXL-version 1 (nonXML) files does not display colors bug fix: translate y 10 works, but translate Y 10 does not ============================================================================= version=12.3.26 new feature: Jmol SMARTS searching can include full Jmol selection syntax within an atom primitive using the "atomType" option and "select:": load caffeine.xyz print {*}.find('{c}$(select _N and connected(2, _C))') new feature: model ID "xxx" (or frame ID....) -- sets the model's ID to "xxx" -- can be used to switch to that model using model "xxx" -- can be targeted file-specifically using "filename#xxx" -- if two models have the same ID and no filename is given, then the first model found becomes the current model -- used for correlating non-Jmol synced applets new feature: script "t.spt"(...variables...) -- quotes are optional if file name does not include " " or "(" -- "script" is optional if file name is quoted or ends with ".spt" -- allows passing variables to a script much like a function call -- variables will be in VAR named "_arguments" within that script (like JavaScript) -- _arguments, like all arrays in Jmol, is 1-based, 0-terminated (unlike JavaScript) -- _arguments is unsettable by the user -- for standard script functions, _arguments will be [] -- for example, if test.spt is simply "show _arguments", then load $caffeine test.spt({*}, {*}.xyz ,35, [1,2,3,4]) will output: _arguments = [({0:23}),{-0.086670786 -0.02787502 5.6667876E-4},35,[1,2,3,4]] new feature: set forcefield "UFF" or "MMFF" -- default is MMFF -- automatically switches to UFF if atom types cannot be set -- minimizationCallback reports actual force field used new feature: set energyUnits kJ|kcal new feature: antialiased display and image creation uses larger mesh scaling for cleaner look code: adding empirical rules to MMFF94 calculation checkmm.spt;checkAllEnergies checking calculated energies for 761 models 1 COMKAQ E= -7.3250003 Eref= -7.6177 diff= 0.2926998 2 DUVHUX10 E= 64.759995 Eref= 64.082855 diff= 0.6771393 3 FORJIF E= 35.978 Eref= 35.833878 diff= 0.14412308 4 JADLIJ E= 25.104 Eref= 24.7038 diff= 0.4001999 5 PHOSLA10 E= 111.232994 Eref= 112.07078 diff= 0.8377838 6 PHOSLB10 E= -93.479004 Eref= -92.64081 diff= 0.8381958 for 761 atoms, 6 have energy differences outside the range -0.1 to 0.1 with a standard deviation of 0.05309403 bug fix: nested SMARTS strings can give incorrect response load data "mol" C:/jmol-dev/bobtest/t6.mol __Jmol-12_05191218593D 1 1.00000 0.00000 0 Jmol version 12.3.26 2012-05-19 18:34 EXTRACT: ({0 3 4}) 3 2 0 0 0 0 1 V2000 2.89480 4.81990 0.01710 N 0 0 0 0 0 0 3.52580 2.75730 -0.17290 N 0 0 0 0 0 0 3.94370 4.03730 -0.25710 C 0 0 0 0 0 0 1 3 2 0 0 0 2 3 1 0 0 0 M END end "mol" select search("$([#7][#6]([#7&!$([#7][O])])=[#7])") show selected was returning 1 atom, but should be 0 (because there are only two N atoms!) bug fix: measurementUnits = "au" does not work bug fix: select 1.0 fails bug fix: COMPARE broken bug fix: Writing file into .jmol file after reading it from another results in the whole zip file being copied into the new .jmol file. ============================================================================= version=12.3.25 new feature: MMFF94 single point energy calculation and minimization set forcefield "MMFF" checkmm.spt checkmm "AMHTAR01";minimize energy AMHTAR01 Initial E = 66.180 kcal/mol # should be 66.18011 checkmm "ARGIND11";minimize energy ARGIND11 Initial E = -207.436 kcal/mol # should be -207.43598 validation complete. The following 13 structures (of 761) do not validate to within 0.1 kcal/mol 1 COMKAQ E= -7.3250003 Eref= -7.6177 diff= 0.2926998 -- MMFF94 ignores 1 of 5-membered ring torsions for a 1-oxo-2-oxa-bicyclo[3.2.0]heptane -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 2 DUVHUX10 E= 64.759995 Eref= 64.082855 diff= 0.6771393 -- MMFF94 ignores 5-membered ring issue for S-S-containing ring -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 3 FORJIF E= 35.978 Eref= 35.833878 diff= 0.14412308 -- MMFF94 uses some sort of undocumented empirical rule used for 1 torsion not found in tables -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 4 JADLIJ E= 25.104 Eref= 24.7038 diff= 0.4001999 -- ignores 5-membered ring for S (note, however, this is not the case in BODKOU) -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 5 KEPKIZ E= 61.127 Eref= 61.816277 diff= 0.68927765 -- MMFF94 requires empirical rule parameters -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 6 PHOSLA10 E= 111.232994 Eref= 112.07078 diff= 0.8377838 -- MMFF94 ignores all 5-membered ring torsions in ring with P -- (note, however, this is not the case in CUVGAB) -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate 7 PHOSLB10 E= -93.479004 Eref= -92.64081 diff= 0.8381958 -- MMFF94 ignores all 5-membered ring torsions in ring with P -- (note, however, this is not the case in CUVGAB) -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate empirical-rule-requiring models: (all are nonaromatic heterocycles) 8 ERULE_01 E= -22.582 Eref= -21.515108 diff= 1.0668926 9 ERULE_02 E= 29.407999 Eref= 29.799572 diff= 0.39157295 10 ERULE_03 E= -3.326 Eref= -2.9351802 diff= 0.3908198 11 ERULE_04 E= -2.572 Eref= -2.31007 diff= 0.26193 12 ERULE_07 E= 2.873 Eref= 3.16775 diff= 0.29474998 (fixed in 123.3.26 by correcting angle calc) 13 ERULE_08 E= 33.734 Eref= 34.41382 diff= 0.6798172 bug fix: compare {22-31} {7-16} subset {*.ca} should work without ATOMSET next bug fix: compare {22-31} {7-16} should work, using {spine} as default bug fix: isosurface molecular for certain flat models will fail to cap H atoms bug fix: calculate partial charge fails after model kit changes (because Bond[] bonds field not cleaned bug fix: dipole command fails after model kit changes code: refactoring of minimize for generalization ============================================================================= version=12.3.24 new feature: SMARTS search for atom type using quotes: ["37"]-["58"] new feature: SMARTS option /aromaticdouble/ allows distinguishing between aromatic single and double bonds new feature; SMARTS option /aromaticstrict/ checks 6-electron rule for aromatics new feature: CALCULATE partialCharge does MMFF94 charge calculation -- all atom types validated -- charge values validated to +- 0.001001 over the 761-atom dative validation set new feature: isosurface CACHE -- creates a JVXL version of the surface (possibly outside of Jmol, but that's not implemented yet) -- saved by write JMOL as a JVXL file "isosurface_ID" (where ID is the original isosurface ID) within the JMOL zip collection -- Warning! not saved using write SPT ***ALWAYS*** use write JMOL or write PNGJ after using the CACHE option, not write SPT -- invoked by isosurface file "cache://isosurface_ID" -- cleared by reset CACHE -- allows rapid recreation of an isosurface across file loads -- possibly limited to a subset of surface types -- not fully tested new feature: write ... "http://....." -- POSTs JMOL or IMAGE or structure or whatever to a server as application/octet-stream -- to be used in Proteopedia for saving a fully self-contained state new feature: load filter "CENTER" -- centers models on the first model as they are loaded new feature: load filter "NAME=..." -- loads only those models with a name that contains ... new feature: calculate partialcharge -- works on currently selected set of atoms -- uses MMFF94 charge calculation (unverified; most certainly not quite correct) -- preliminary only; working on validation bug fix: x = {"c1": 3}; if(x["c1"]) should return TRUE code: Simple way to assign MMFF94 atom types and partial charges -- N,S-containing compounds not validated; CHO-containing compounds partially validated bug fix: MOL2 reader assuming PDB for non-PDB format files (such as MMFF94-dative.mol2) bug fix: label %W not working properly for non-PDB files bug fix: write MOL does not save partial-single bond as type 8 ("ANY") bug fix: set echo IMAGE fails (since 12.3.20) code: (applet) JmolCore.js free of need for JSON ============================================================================= version=12.3.23 new feature: (applet) new interface for Jmol as an HTML object as well as full support on all platforms using a ChemDoodle fall-back option for Java/Applet-challenged platforms (iPad,iPhone,Android) Note that Jmol.js is no longer required, but not all of the features of Jmol.js are in place yet allows Jmol applets to be created on a page with more flexibility and extendability possibly using infrastructure of ChemDoodle for multiplatform doodlable structures required/optional libraries (preferably in the following order): jQuery.min.js -- required for ChemDoodle or any server-based options gl-matrix-min.js -- required for ChemDoodle option mousewheel.js -- required for ChemDoodle option ChemDoodleWeb.js -- required for ChemDoodle option JmolCore.js -- required JmolApplet.js -- required JmolCD.js -- required for ChemDoodle option JmolApi.js -- required Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) or applet-challenged (Android/iPhone) platforms, with automatic switching to whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" or some combination of those -- and of course, you are free to rewrite the logic below! Allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted server that delivers raw data files rather than specialized JSON mol data. Access to iChemLabs server is not required for simple file-reading operations and database access. PubChem and image services are provided by a server-side PHP program running JmolData.jar with flags -iR (at St. Olaf College). For your installation, you should consider putting JmolData.jar and jmolcd.php on your own server. Nothing more than these two files is needed on the server. The NCI and RCSB databases are accessed via direct AJAX if available (xhr2). new feature: PubChem search for name (which can be a CAS number), cid, or SMILES using ":" from pubChemFormat = "http://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/%FILE/SDF?record_type=3d"; (many thanks to Evan Bolton and Paul Thiessen (NIH) for their assistance on this. load :name:tylenol # or load :tylenol load :cas:103-90-2 # or load :103-90-2 load :cid:1983 # or load :1983 load :smiles:C/C=C/C bug fix: callback functions for modular calls: applet0.readCallback(....) bug fix: Molden reader problems reading frequencies bug fix: VASP reader with {n n n} and vibration vectors problem bug fix: in 2bat, SIA was considered part of the carbohydrate chain because we were not checking bonding ============================================================================= version=12.3.22 new feature: Jmol extensions to ChemDoodle allow display of Jmol, ChemDoodle-equivalent (simple model only), or just an image with server-side JmolData.jar support. JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, [email protected] 4/16/2012 requires ChemDoodleWeb.js and ChemDoodleWeb-libs.js prior to JmolCD.js allows Jmol applets to be created on a page with more flexibility and extendability using much of the infrastructure of ChemDoodle. allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) or applet-challenged (Android/iPhone) platforms, with automatic switching to whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" or some combination of those -- and of course, you are free to rewrite the logic below! allows ChemDoodle-like 2D and 3D canvases that can load files via a privately hosted server that delivers raw data files rather than specialized JSON mol data. access to iChemLabs server is not required for simple file-reading operations and database access. Database and image services are provided by a server-side PHP program running JmolData.jar with flags -iR. In this case, the NCI and RCSB databases are accessed via a St. Olaf College server, but for your installation, you should consider putting JmolData.jar and jmolcd.php on your own server. Nothing more than these two files is needed on the server. new feature: write CD (simple ChemDoodle JSON format -- atoms and bonds only) For example: java -jar JmolData.jar -iRJ "load $tylenol;print write('cd')" generates: {"mol":{"a":[{"x":0.20549999,"y":0.8303,"z":0.3823},{"x":0.6906,"y":-1.4656999,"z":-0.14220001},{"x":1.5485,"y":1.1359,"z":0.2829},{"x":2.0332,"y":-1.1585,"z":-0.24180001},{"x":-3.9799001,"y":-0.1617,"z":0.1295},{"l":"H","x":4.2731,"y":0.35680005,"z":0.7047},{"l":"H","x":-1.8655999,"y":-1.6522,"z":0.6012},{"x":-0.2273,"y":-0.4718,"z":0.17},{"x":2.4650002,"y":0.1425,"z":-0.029099999},{"l":"O","x":-2.1741998,"y":1.1759001,"z":-0.59169996},{"l":"O","x":3.7872,"y":0.4441,"z":-0.1268},{"x":-2.5170999,"y":0.1262,"z":-0.089999996},{"l":"N","x":-1.5898,"y":-0.78279996,"z":0.2712},{"l":"H","x":-0.50740004,"y":1.6029,"z":0.6296},{"l":"H","x":0.35450003,"y":-2.4786,"z":-0.3079},{"l":"H","x":1.8853,"y":2.1487997,"z":0.4477},{"l":"H","x":2.7472,"y":-1.9314001,"z":-0.485},{"l":"H","x":-4.3884,"y":-0.65880007,"z":-0.7504},{"l":"H","x":-4.0964003,"y":-0.8086,"z":0.9991},{"l":"H","x":-4.513,"y":0.7739,"z":0.2986}],"b":[{"b":8,"e":10},{"b":9,"e":11,"o":2},{"b":7,"e":12},{"b":11,"e":12},{"b":0,"e":7,"o":2},{"b":1,"e":7},{"b":0,"e":2},{"b":2,"e":8,"o":2},{"b":3,"e":8},{"b":1,"e":3,"o":2},{"b":4,"e":11},{"b":5,"e":10},{"b":6,"e":12},{"b":0,"e":13},{"b":1,"e":14},{"b":2,"e":15},{"b":3,"e":16},{"b":4,"e":17},{"b":4,"e":18},{"b":4,"e":19}]}} (this ended up NOT being used in the Jmol extension to ChemDoodle) new feature: (JmolData) -iR (silent, restricted) mode sends output from PRINT and ECHO commands to SYSOUT and also restricts the application to no local file read/writing bug fix: "connect;" command in states saved prior to 11.9.24 and then read by versions after that The order in which Jmol created bonds changed in 11.9.24. Due to this, Jmol must check for the version number of Jmol used to create a state, and if it was before this point, it must apply "legacy" autobonding methods. Unfortunately, if that state from pre-11.9.24 versions contains the "connect;" command, which it would if someone used the CONNECT command by itself to regenerate all bonds in a model PRIOR to saving the state (Proteopedia does this), then those scripts will be misread in versions 11.9.24-12.2.21/12.3.21. bug fix: antialiasDisplay does not show drag-box properly bug fix: SMARTS syntax [${xxx}n] and [${xxx}m-n] changed to [$n{xxx}] and [$m-n{xxx}] to avoid conflict with specifying isotope ============================================================================= version=12.3.21 new feature: app flag -R restricts file access -- no local file reading; no writing, no logging // disables WRITE, LOAD file:/, set logFile // command line -g and -w options ARE available for final writing of image // for use with headless operation new feature: app flag -T headless timeout delay for "exitJmol" note: Headless operation with image creation works perfectly using JmolData.jar java -Djava.awt.headless=true -Xmx512m -jar "JmolData.jar" -RJ "load $tylenol;" -g1000x1000 -wJPG:t.jpg see also: http://leshazlewood.com/2009/08/26/linux-javaawtheadless-and-the-display-environment-variable/ // determined by GraphicsEnvironment.isHeadless() // from java -Djava.awt.headless=true // disables command threading // disables DELAY, TIMEOUT, PAUSE, LOOP, GOTO, SPIN , ANIMATION ON // turns SPIN into just ROTATE new feature: JSpecView JCamp-MOL files can reference model="$xxxx" -- model retrieved from NCI bug fix: PDB reader and state scripts created with 12.1.51-12.2.20 and 12.3.0-12.3.20 state scripts prior to those versions with multiple models and also select BOND commands will read the bond indexes incorrectly and, in addition, will assign proper CONECT links only to the last model bug fix: if (....) # comment fails bug fix: Molden reader hack for bad Molden files with ** instead of atom number in [GTO] bug fix: headless creation of JPG fails bug fix: spin .... 30 takes 30 to be number of degrees, not rate version=12.3.20 -- skipped ============================================================================= version=12.3.19 new feature: select baseModel for JSpecView new feature; model {atomset} -- model of first atom in this set bug fix: set dragSelected disallows popup menu bug fix: MOPAC (PUBLIC DOMAIN) output reader can fail on reading vibrations bug fix: Spartan 10 archives have .gz and .carc files. This fix adds .gz reading; work-around is that Spartan 10 allows saving of Archive without carc compression, which is a proprietary format. From Wavefunction: "If you want all files to use the "text" version, you can go to the Options->Preferences->X-Platform pane and make sure "Use Binary Archive" is unchecked." bug fix: rotateSelected of models that have had dots at one point retrieved from a state file fails code: refactored org.jmol.g3d.[Normix3d,Shade3D] --> org.jmol.util.[Normix, Shader] code: refactored org.jmol.geodesic.Geodesic --> org.jmol.util.Geodesic bug fix: Jmol defaults not being loaded with startup option -n (no display) bug fix: UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName() failed for non-graphics system, and even though it is an exception, it isn't trapped by try/catch. bug fix: point() function does not accept 3x1 array bug fix: show x where x is a matrix does not have ',' before tabs, so it can't be clipped directly back into Jmol code: better coding for quaternions ============================================================================= version=12.3.18 new feature: JSpecView reads and displays 2D spectra very quickly -- all tested JCamp-DX 6.0 files readable. -- JSpecView 2.0.10176 bug fix: allow for alternating list/hash entry: for example: print getproperty("jspecview","##TITLE")["items"][1]["spectra"][1]["id"] instead of: print ((getproperty("jspecview","##TITLE")["items"][1])["spectra"][1])["id"] bug fix: GaussianReader not reading "Natural Orbitals" section from B3LYP 6-31g sp gfprint pop(full,NO) bug fix: Jmol support for ZIP collection of JDX files read properly bug fix: support for file reading with BOM UTF-8, UTF-16, or UTF-32 bug fix: script processor not recognizing UTF-8 Binary Order Mark at start of script bug fix: (undocumented) POLYHEDRA {...} to {...} with COLOR or TRANSLUCENT fails bug fix: POLYHEDRA command or COLOR POLYHEDRA can change selection bug fix: PDB reader doesn't recognize 16 LINK records at start of file bug fix: script xxxx(xxx)xxx/xx.xxx fails at "(" due to revision 16201 2011-10-02 ============================================================================= version=12.3.17 new feature: (JspecView 2.0.10033) new script commands (indicated with *) UNKNOWN("?"), APPLETID("APPLETID"), APPLETREADYCALLBACKFUNCTIONNAME("APPLETREADYCALLBACKFUNCTIONNAME"), AUTOINTEGRATE("AUTOINTEGRATE", "TF"), BACKGROUNDCOLOR("BACKGROUNDCOLOR", "C"), *CLOSE("CLOSE", "spectrumId or fileName or ALL"), COMPOUNDMENUON("COMPOUNDMENUON", "TF"), COORDCALLBACKFUNCTIONNAME("COORDCALLBACKFUNCTIONNAME"), COORDINATESCOLOR("COORDINATESCOLOR", "C"), COORDINATESON("COORDINATESON", "TF"), *DEBUG("DEBUG", "TF"), DISPLAYFONTNAME("DISPLAYFONTNAME", "fontName"), ENABLEZOOM("ENABLEZOOM", "TF"), ENDINDEX("ENDINDEX"), *EXPORT("EXPORT", "[JPG,PNG,XY,...] \"filename\""), GETSOLUTIONCOLOR("GETSOLUTIONCOLOR", ""), GRIDCOLOR("GRIDCOLOR", "C"), GRIDON("GRIDON", "TF"), *INTEGRATE("INTEGRATE", ""), INTEGRALPLOTCOLOR("INTEGRALPLOTCOLOR"), INTEGRATIONRATIOS("INTEGRATIONRATIOS"), INTERFACE("INTERFACE"), *IRMODE("IRMODE", "A or T or ?"), *LABEL("LABEL", "x y [color and/or \"text\"]"), *LOAD("LOAD", "[APPEND] \"fileName\""), MENUON("MENUON"), OBSCURE("OBSCURE"), *OVERLAY("OVERLAY", "spectrumID, spectrumID, ..."), PEAKCALLBACKFUNCTIONNAME("PEAKCALLBACKFUNCTIONNAME"), PLOTAREACOLOR("PLOTAREACOLOR", "C"), PLOTCOLOR("PLOTCOLOR", "C"), PLOTCOLORS("PLOTCOLORS"), REVERSEPLOT("REVERSEPLOT", "TF"), SCALECOLOR("SCALECOLOR", "C"), SPECTRUM("SPECTRUM", "spectrumID"), SPECTRUMNUMBER("SPECTRUMNUMBER"), STARTINDEX("STARTINDEX"), SYNCCALLBACKFUNCTIONNAME("SYNCCALLBACKFUNCTIONNAME"), SYNCID("SYNCID"), TITLEBOLDON("TITLEBOLDON", "TF"), TITLECOLOR("TITLECOLOR", "C"), TITLEFONTNAME("TITLEFONTNAME", "fontName"), UNITSCOLOR("UNITSCOLOR", "C"), VERSION("VERSION"), XSCALEON("XSCALEON", "TF"), XUNITSON("XUNITSON", "TF"), YSCALEON("YSCALEON", "TF"), YUNITSON("YUNITSON", "TF"), *ZOOM("ZOOM", "OUT or x1,x2"); new feature: allows simpler color scheme definition color property occupancy "myscheme=red green blue" Var x = ["red","green","blue"]; color property occupancy @{"myscheme=" + x} bug fix: JCampDX reader resolving should allow spaces before "##TITLE" bug fix: jvxl issue when color PHASE and translucent -- upon reading JVXL doesn't handle translucency right -- upon writing SPT doesn't preserve colors bug fix: user variable lower case "x" not cleared by "X = none" bug fix: draw HELIX fails for residue numbers < 0 code: better Enum structure using name() ============================================================================= version=12.3.16 new feature: (application) SYNC ON; sync * "JSpecView:..." sends commands to JSpecView new feature: (JSpecView) accepts commands using public syncScript(script) bug fix: GAMESS-US reader error reading NBOs bug fix: print [2, 3, 4].mul([3,4,5]) fails bug fix: missing ANISOU records cause file-read error in PDB files bug fix: JCAMP-DX reading by JSpecView for tiered BLOCK files ============================================================================= version=12.3.15 new feature: JCAMP-DX file reading -- reading of ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview) new feature: context menu Spectra submenu new feature: JSpecView integration into Jmol application -- if model/peak-enhanced JDX file is read, clicking on an atom or switching to an IR vibration or MS fragment displays the appropriately highlighted spectrum/fragment new feature: sync ~ 'Select: xxx' -- xxx can include file="xxx" model="xxx" atoms="xxx" select="xxx" script="xxx" -- file and model combined as model ID "file#model" -- will automatically load the file if the given file#model ID is not found -- atoms = list of atom numbers separated by commas: 1,2,3 --> @1 or @2 or @3 -- select is any valid selection such as THR or 1-30 -- automatically adds "visible &" to atoms or select -- requires sync ON new feature: NFF neutral file format reader (http://paulbourke.net/dataformats/nff/nff1.html) for electron microscopy data exported from IMOD new feature: preliminary JCAMP-DX file reader, where is present new feature: when picking struts or delete bond or measure, distance shows as per usual measurement bug fix: SLAB unit cell not showing all lines bug fix: CRYSTAL reader needs to change to MOLECULAR when X(ANGSTROMS) found (fullerene slab) bug fix: Popup Menu item hbond calculate should not require PDB ============================================================================= version=12.3.14 bug fix: state after frame RANGE or frame 0 not saved properly (state saves "frame all" instead of "frame 0") bug fix: frame n does not work properly after load APPEND bug fix: measurement units may appear as full word "nanometers" instead of "nm" bug fix: user bindings do not access _atomPicked -- solution is to add _ATOM _BOND _POINT _OBJECT to user binding actions ============================================================================= version=12.3.13 new feature: isosurface SCALE extends to volume file readers new feature: zoom $isosurface1 0 -- scales to match isosurface boundbox bug fix: getProperty("bondinfo",[{13}]) gets info for atom 13 instead of bond 13 bug fix: isosurface offset does not change boundbox or zoom/center points note to Bob: jpe needs update of img/blank.js js/top_buttons.js htm1/quickvs.js,qv_msgs.js molview/JmolAppletSigned.jar ============================================================================= version=12.3.12 bug fix: symmetry popup submenu not enabled bug fix: show spacegroup not working bug fix: lcaocartoon for allene central carbon py incorrect bug fix: antialiasdisplay (and image writing) not compatible with scaleAngstromsPerInch bug fix: last group of protein cartoon will not display if it is not helix and not sheet bug fix: getproperty MENU does not work bug fix: PDB reader of multiple-bond files with duplicated bonds does not ignore duplicate ============================================================================= version=12.3.11 new feature: plot ramachandran -- now those points .phi and psi return values -- load 1crn.pdb;plot ramachandran;print {2.1}.psi new feature: LOAD .... filter "reverseModels" -- does just that -- for IRC calculation transition state -> minimum reversal new feature: measures "2:%VALUE %UNITS//xx" -- where xx is a specified unit such as nm or Angstroms -- overrides set measurementUnits -- fixes state problem when units or labels are changed after measurements are made -- operates on selected measurements only (or all, if no measurements are selected) bug fix: frame 0 during animation can cause exception bug fix: changes in defaultDistanceLabel not always preserved in state correctly bug fix: parameters can be set to invalid values using xxx = ... instead of set xxx ... bug fix: (Application) proper Edit...Preferences dialog action ============================================================================= version=12.3.10 new feature: _animTimeSec new feature: Application -- press and hold animation next/prev button to continuously run animation new feature: write PDB adds CONECT records -- for all multiple bonding and all HETATM bonds -- uses CONECT i j j to indicate multiple bonding new feature: compare {from} {to} FRAME -- aligns frames automatically -- particularly nice for IRC calculation animations -- for example: compare {file=2} {1.1} FRAME -- can be followed by quaternion, atom, or SMILES options -- for example: compare {file=2} {1.1} FRAME ATOMS @1 @5 @2 @8 @3 @9 (all of file 2 atoms moved) file 2 atoms 1,2,3 aligned with file 1.1 atoms 5,8,9) -- if {to} is a subset of {from}, then FRAME is unnecessary, and if ATOMS is included, then just the list of alignment atoms is necessary. For example: compare {*} {1.1} compare {*} {1.1} atoms @1 @2 @3 -- see http://chemapps.stolaf.edu/jmol/docs/examples-12/mp for more examples bug fix: script @{x} fails bug fix: Molecular Playground should allow for set allowGestures OFF to disallow swipe bug fix: lcaoCartoon dual color p orbitals giving white for one lobe new feature: set echo myecho SCALE 0.3 -- for image scaling bug fix: after "ZAP; LOAD append" show orientation will have incorrect zyz script bug fix: function call with @x or @1 in parameters fails bug fix: PNGJ reading remote fails bug fix: H5T should not be used as a lead atom ever, because of set showHydrogens FALSE bug fix: adding H atoms to mol2 file faulty bug fix: load xxx.png;write PNGJ xxx.png (to same file as loaded) fails ============================================================================= version=12.3.9 new feature: FRAME DELAY x.y -- specific delay (in seconds) in animation at a given frame -- applies to all currently in-frame models bug fix: set isKiosk should: (a) not be reversible (b) not allow file saves other than logging (c) not allow prompt dialogs (d) not allow console or popup menu or ScriptEditor bug fix: background colors saved to state can be off very slightly bug fix: draw PLANE with three vertices problems after save -- four-atom planes, not three bug fix: x = file("?") fails on Cancel bug fix: delay not allowed within try{...} ============================================================================= version=12.3.8 new feature: MolecularPlayground -- remote status and remote control -- see for example http://chemapps.stolaf.edu/jmol/mpstatus.php -- set topic, subtopic, delay from a web page -- set banner and image for website from Jmol new feature: load("http://.....?POST?_PNG_") or load("http://....?POST?_PNGJ_") -- sends PNG or PNGJ image to server -- return value is whatever server is set up to send -- used by MolecularPlayground at St. Olaf to send current state to web server new feature: polyhedra FULLYLIT -- useful for zeolites along with COLLAPSED new feature: ZMATRIX upgraded to allow all forms of Gaussian input http://www.gaussian.com/g_tech/g_ur/c_zmat.htm bug fix: set picking DRAW does not work on polygon sets bug fix: set picking DRAW does not report position change bug fix: MPJmolApp (Molecular Playground) problems when navigation is on bug fix: CifReader (molecular type, with GEOM_BOND records) adds extra atoms when embedded in JMOL or PNGJ file or part load FILES command bug fix: PdbReader -- crystallographic non-PDB files not checking special positions ============================================================================= version=12.3.7 new feature: "Write PNG+JMOL" added to application and signed applet menu code: dispensing with InputStream in favor of BufferedInputStream new feature: write PNGJ -- creates a PNG file with appended JMOL (zip) data containing all necessary files, MANIFEST, and script file. -- viewable in directories as an "icon" and readable by image readers -- draggable back into Jmol and readable using LOAD -- PNG file includes: -- iTXt field "Jmol Type\0PNGJxxxxxxxxx+yyyyyyyyy" where xxxxxxxxx is a pointer to the ZIP data yyyyyyyyy is the number of ZIP data bytes -- iTXt field "Software\0Jmol 12.3.7 2011-10-11 15:30" -- iTXt field "Creation Time\0Tue, 24 Nov 2011 19:56:10 -0600" -- yyyyyyyyy bytes of .JMOL zip data -- show FILE "xxx.PNG" will show list of contained files. -- show state FILE "xxx.PNG" will extract state -- show FILE "xxx.PNG|1crn.pdb" for example will extract file new feature: simple Z-Matrix reader -- invoked by ZMATRIX:: or file starting with #ZMATRIX -- lines starting with # are comments, which can contain jmolscript: -- blank lines are ignored #ZMATRIX -- methane C H 1 1.089000 H 1 1.089000 2 109.4710 H 1 1.089000 2 109.4710 3 120.0000 H 1 1.089000 2 109.4710 3 -120.0000 -- allows bond order specification #ZMATRIX -- CO2 C O 1 1.3000 2 O 1 1.3000 2 180 2 -- any position number may be replaced by a unique atom name, with number: #ZMATRIX -- CO2 C1 O1 C1 1.3000 2 O2 C1 1.3000 O1 180 2 -- allows for dummy atoms Xn, allowing for positioning: #ZMATRIX -- CO2 X1 X2 X1 1.0 C1 X1 1.0 X2 90 O1 C1 1.3000 X2 90 X1 0 2 O2 C1 1.3000 O1 180 X2 0 2 -- negative distance indicates that the second angle is a normal angle, not a dihedral #ZMATRIX -- NH3 (using simple angles only) N1 H1 N1 1.0 H2 N1 1.0 H1 107 H3 N1 -1.0 H1 107 H2 107 -- negative distance and one negative angle reverses the chirality #ZMATRIX -- NH3 (using simple angles only; reversed chirality) N1 H1 N1 1.0 H2 N1 1.0 H1 107 H3 N1 -1.0 H1 -107 H2 107 -- symbolics may be used -- they may be listed first or last #ZMATRIX dist 1.0 angle 107 N1 H1 N1 dist H2 N1 dist H1 angle H3 N1 -dist H1 angle H2 angle -- If #ZMATRIX is not the start of the file, MOPAC style is assumed. The first two lines will be considered to be comments and ignored: AM1 Ethane C C 1 r21 H 2 r32 1 a321 H 2 r32 1 a321 3 d4213 H 2 r32 1 a321 3 -d4213 H 1 r32 2 a321 3 60. H 1 r32 2 a321 3 180. H 1 r32 2 a321 3 d300 r21 1.5 r32 1.1 a321 109.5 d4213 120.0 d300 300.0 bug fix: show orientation shows incorrect zyz format if reset uses file-based orientation matrix (smol, Sygress) bug fix: isosurface plane xy map mep code: MPJmolApp work bug fix: user variables should not be rest by INITIALIZE in an spt file bug fix: x3d/vrml outputting unnecessary spheres -- bond caps within opaque atoms removed (not precisely correct to do that) bug fix: minimization broken bug fix: contact still not quite right -- setting default to +0.0 instead of +0.25 ============================================================================= version=12.3.6 new feature: load files "xxx.tlsout" "xxxx.pdb" -- loads REFMAC-style TLS data into xxxx.pdb new feature: contact SASURFACE -- ignores solvent (as does CAP) bug fix: contact command hbond/clash cutoff not sensitive to H-O/N vs O/N-O/N -- set to -1.2 for H-N/O, -1.0 for N/O-N/O bug fix: contact command default probe radius should be 0.0 except for VDW (0.25) bug fix: minimize constraint CLEAR broken bug fix: constraints not reported in show minimization bug fix: set measures off broken bug fix: contact color density broken bug fix: contact volume report not correct for color density bug fix: MO HOMO not set properly when using LUMO = "lowest E > 0" (GAMESS-US reader) bug fix: zSlab settings not stored properly in parameters; should have default zSlab = 50 ============================================================================= version=12.3.5 new feature: color isosurface PHASE color1 color2 -- allows post-isosurface creation coloring by phase (atomicOrbitals) bug fix: isosurface scale 0.5 plane... broken if no atoms present bug fix: isosurface color density broken bug fix: set PdbAddHydrogens does not transfer C atomSymmetry to H atoms bug fix: contact() function not working when typed from console bug fix: set axesOrientationRasmol not working properly (since 11.5.51) code: org.jmol.modelsetbio.BioModel localizes more bio-only code into modelsetbio package code: removal of org.jmol.modelset.Polymer code: refactoring and organizing RepaintManager and ShapeManager ============================================================================= version=12.3.4 bug fix: frame x.y - y.z not working bug fix: with antialiasDisplay, dragMolecule goes 1/2 speed of cursor bug fix: nucleic acid residues with HO5' may render last group strangely (since 12.0.RC16, 6/6/2010) bug fix: workaround for weird Mac Point3i(Point3i pt) class initializer bug bug fix: array.bin(low,high,binSize) not documented and can cause exception bug fix: MO readers can fail if inappropriate filter "TLS" is given bug fix: PDB TLS error reading TLS data missing "NUMBER OF COMPONENTS" line ============================================================================= version=12.3.3 new feature: ellipsoid SET 1; ellipsoid SET 2; -- TLS ellipsoids are dual -- TLS-S is SET 1; TLS-T is SET 2 -- after issuing this command, further size or color commands affect only that set -- needs verification by Ethan Merrit new feature: load xxx.pdb filter "TLS" -- loads TLS data new feature: atom property property_tlsGroup new feature: MolecularPlayground now accepts messages to the banner: message banner: xxxxxxx new feature: MolecularPlayground fully functional. This application (MPJmolApp) is part of a three-part suite that runs on a Mac mini involving: "Hub" [name] for overall control (Mac app; not open source yet) MPKinectDriver for obtaining motion events (Mac app; not open source yet) MPJmolApp for displaying the results (source here) The Hub and MPJmolApp communicate over local port 31416, sending JSON messages back and forth. (See note in org.jmol.app.jsonkiosk.JsonNioService.java) For demonstrations of the installation at St. Olaf College, see the following YouTube videos: http://www.youtube.com/watch?v=iQRkuku8ry0 http://www.youtube.com/watch?v=XCRrRZe1j6g http://www.youtube.com/watch?v=FTTIVWGtFD0 For details relating to the original Molecular Playground installation at U. Mass.-Amherst, see http://molecularPlayground.org Note that all of the functionality of the original MP are present in MPJmolApp new feature: MolecularPLayground can now ignore all Hub requests for commands and content changes, thus allowing its own configuration script to drive the presentation instead of the Hub's. So the Hub can be used simply as an interface to the Kinect driver. This just allows a simpler development interface -- a simple three-column Excel file can be used to drive a presentation. (see org.jmol.molecularplayground.biophysics.xlsx) -- MPJmolApp looks for the file MpJmolAppConfig.spt -- This file can override MPJmolApp's default parameters: NIOContentPath -- default: System.getProperty("user.dir").replace('\\', '/') + "/Content-Cache/%ID%/%ID%.json" -- ignored if NIOcontentDisabled ends up true (see below) NIOterminatorMessage -- default: "MP_DONE" NIObannerEnabled -- default: true NIOcontentScript -- default: (not present, setting NIOcontentDisabled=false) NIOcontentDisabled -- default: true if NIOcontentScript is present; false if not NIOmotionDisabled -- default: false -- The script in MpJmolAppConfig.spt is run, along with whatever default settings are generated by the above checks. -- Parameters are set by querying the Viewer for those Jmol variables. -- If NIOcontentDisabled is true, then all JSON messages from the Hub of types "content", "command", and "banner" are ignored. It is still important that the running script send "MP_DONE" messages periodically (within every 6 minutes) so that the Hub knows that MPJmolApp is still alive and does not try to restart it. -- If NIOmotionDisabled is true, then all JSON messages from the Hub of types "move", "sync", and "touch" are ignored. -- These are checked every time a JSON command is received, so the running script can specifically turn off motion detection if that or content detection if that is desired. -- Note that MPJmolApp has a full console and menu that are available on the operator's screen, (which is just mirrored to the projector). This allows for parameter setting and adjustments on the fly. new feature: show NMR -- predicted NMR spectrum -- uses http://www.nmrdb.org/predictor?smiles=xxxx -- requires NCI SMILES due to bug at nmrdb not allowing "." bug fix: CRYSTAL reader not properly setting model properties bug fix: userFunction(x,@y) should operate as per all math -- parens - value of variable pointed to by y -- x = myfunc(x, @y) same action as just myfunc(x, @y) bug fix: userFunction x @y -- no parens - should operate as value of x and value of y -- @ is unnecessary but allowed bug fix: set echo "myecho" [10 10%] not working bug fix: apiPlatform not correctly accessed in JpegEncoder bug fix: reading of JVXL files for color density fails to color properly bug fix: .... vdw 100.0% --- should be OK with float there, even if it rounds. code: refactored for Molecular Playground and Jmol Android -- several System.out. messages present. code: refactoring adapter XML readers ============================================================================= version=12.3.2 new feature: compare("XXX","XXXX","ISOMER") comparison now includes "AMBIGUOUS STEREOCHEMISTRY!" new feature: show chemical XXXXX where XXXXX is any NCI Cactus information token: stdinchikey Standard InChIKey stdinchi Standard InChI smiles SMILES ficts FICTS Identifier ficus FICuS Identifier uuuuu uuuuu Identifier hashisy Cactvs HASHISY sdf SD File names Names iupac_name IUPAC Name cas CAS Registry Number(s) chemspider_id ChemSpider ID mw Molecular Weight formula Chemical Formula h_bond_donor_count Number of Hydrogen Bond Donors h_bond_acceptor_count Number of Hydrogen Bond Acceptors h_bond_center_count Number of Hydrogen Bond Acceptors and Donors rule_of_5_violation_count Number of Rule of 5 Violations rotor_count Number of Freely Rotatable Bonds effective_rotor_count Number of Effectively Rotatable Bonds ring_count Number of Rings ringsys_count Number of Ring Systems bug fix: array.bin(low,high,binSize) not documented and can cause exception new feature: PQR write option bug fix: load append twice can cause zap to be in wrong place in state file bug fix: for (x IN {*}) ... makes x a bitset and leads to array[1] for x.atomName bug fix: for (x IN {*}.bonds) does not work bug fix: POV-Ray export of cartoons broken bug fix: script javascript:xxxx() broken new feature: set vectorSymmetry -- displays vibration vectors as double-ended arrows. bug fix: SMILES comparison when the number of stereocenters is not the same is wrong code: popup/modelkit refactoring to isolate awt/Swing references bug fix: connection deletion removes all measurements -- can't imagine why... code: JmolModelKitInterface part of apiPlatform call code: JmolPromptInterface replaced with apiPlatform call ============================================================================= version=12.3.1 new feature: CASTEP reader (take 2) -- reads Mulliken files by default, Hirshfield with filter "CHARGE=HIRSH" -- reads spins into {*}.property_spin. label is %[property_spin] -- reads Born charge tensors as atom ellipsoids bug fix: H2,H3 connected to terminal N of protein not backbone bug fix: select PROTEIN selects non-PDB atoms bug fix: Molden reader does not read "Sym=X" (missing space after '=') bug fix: Molden reader does not read angstrom units bug fix: color isosurface {atomset} does not work if isosurface has not already been mapped. bug fix: PDB reader not reading Rasmol-style files with multiple bonding CONECT 1 2 2 or CONECT 1 2 CONECT 1 2 means for Rasmol double bond between atoms 1 and 2 code: experimenting with fragmentation of applet core classes into _1b, _1c, _1d, _1e, _1f version=12.3.0 October 4, 2011