Jmol.___JmolDate="$Date: 2015-01-20 12:29:14 -0600 (Tue, 20 Jan 2015) $"
Jmol.___fullJmolProperties="src/org/jmol/viewer/Jmol.properties"
	
# THIS IS THE RELEASE BRANCH 
# BUG FIXES ONLY, PLEASE


Jmol.___JmolVersion="14.2.11_2015.01.20"

released simultaneously with 14.3.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 caching. 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 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 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 <nboType>
  -- 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 "<annotationRecordIinfo> 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  : "<circular reference>"
		      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  : "<circular reference>"
		      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):
	
	 { "<pdbID>" : { <databaseInformation> } }
	 
	 where <PdbID> is a lower-case PDB id such as 1crs or 1d66
	 and <databaseInformation> is one or more records:
	 
	       "<databaseID>" : { <entryInfo> }
	      
	  <dataBaseID> is a database identifier such as: 
	       "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC"
	       
	  <entryInfo> is one or more records of the form:
	     
	     "<entryID>" : { <entry> }
	     
	 <entry> must at the very least contain:
	 
	    "identifier" : "<some identifier>"
	    "mappings" : [ array of <mapping> ]
	    	    
	 <mapping> must minimally be
	    
	    { "chain_id" : "<author chainIdentifier>" }
	    
	 but is more likely to contain start/end records:
	    
	    { "chain_id" : "<author chainIdentifier>", 
		  "start" : <residueRecord>,	    
		  "end" : <residueRecord>	    
	    }
	      
	 <residueRecord> must minimally be:
	 
	 	{ "residue_number" : <mmCIF _atom_site.label_seq_id> }
	 	
	 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 "<annotationRecordIinfo>"
	- selects specific records
	- text-based matching in all fields

new feature: SHOW DOMAINS "<annotationRecordIinfo> mappings"
	- adds information about mapping
	
new feature: select within(annotation, "<query>")

	- allows selection of atoms based on annotations. 
	- <query> 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):
	
	 { "<pdbID>" : { <databaseInformation> } }
	 
	 where <PdbID> is a lower-case PDB id such as 1crs or 1d66
	 and <databaseInformation> is one or more records:
	 
	       "<databaseID>" : { <entryInfo> }
	      
	  <dataBaseID> is a database identifier such as: 
	       "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC"
	       
	  <entryInfo> is one or more records of the form:
	     
	     "<entryID>" : { <entry> }
	     
	 <entry> must at the very least contain:
	 
	    "identifier" : "<some identifier>"
	    "mappings" : [ array of <mapping> ]
	    	    
	 <mapping> must minimally be
	    
	    { "chain_id" : "<author chainIdentifier>" }
	    
	 but is more likely to contain start/end records:
	    
	    { "chain_id" : "<author chainIdentifier>", 
		  "start" : <residueRecord>,	    
		  "end" : <residueRecord>	    
	    }
	      
	 <residueRecord> must minimally be:
	 
	 	{ "residue_number" : <mmCIF _atom_site.label_seq_id> }
	 	
	 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 "<annotationRecordIinfo>"
	- selects specific records
	- text-based matching in all fields

new feature: SHOW DOMAINS "<annotationRecordIinfo> mappings"
	- adds information about mapping
	
new feature: select within(annotation, "<query>")

	- allows selection of atoms based on annotations. 
	- <query> 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: load *1cbs/all
 -- preliminary only
  
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
   
TO HERE

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 (xiangjun@x3dna.org)
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 (xiangjun@x3dna.org)

 -- 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 (3dna.lu@gmail.com; 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 <model Number> 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<int[][]> 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  <expression>
 -- 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 = '<space>'
  
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 <width> <height> <quality> "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
 -- <object> tag needed to be <applet>
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 <percent> 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 <type> <filename> 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 "<some mouse action>" "<jmol action or script>"
    			
    			Note that adding "+:" to an action
    			
	    			bind "<some mouse action" "+:<script...>"
    			
    			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 "<volume> {dx dy dz}"
   -- where <volume> 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 <color red>xxx</color>
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 "+:<script...>" 
 -- 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<Tensor> getInteractionTensorList(String type, BS bs);
  public BS getUniqueTensorSet(BS bs);
  public JmolList<Object> getTensorInfo(String tensorType, String infoType, BS bs);
  public Map<String, Float> 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 <nseconds> 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 > <JMOL_PARTIAL_CHARGES> 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 > <JMOL_PARTIAL_CHARGES> in SDF format
new feature: isosurface CACHE <surface creation parameters> ....
 -- 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_<ID> where <ID> 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 <image src="xxx.png" /> 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, hansonr@stolaf.edu  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 <seconds> 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 <rate>, ANIMATION ON
   // turns SPIN <rate> <end> into just ROTATE <end>
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 <models></models> 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 <radius>
 -- 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} <color>  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

