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

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

New in version 14.1.14 Beta (April 26th, 2014)

new feature: getProperty(x, SQL_query):

Full SQL for any Jmol associative array.

Result is an array if x is an array.

new feature: LIKE operator extended to atom expressions:

as for other atom expressions, is not case-sensitive

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*"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)

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:

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

new feature: load =1msy/dssr:

very simple RCSB/DSSR connection

loads both files:

new feature: select within(dssr,"subset"):

subsets include

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

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"

uses new "concatenate" notation to combine data from two sources

after loading, try

new feature: array.keys.all:

drills down in sequential or associative arrays

gives all keys as well as number of array elements

new feature: array.join():

creates a flat array from an array of arrays:

new feature: DSSR output reading:

Defining the (Secondary) Structures of RNA

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:

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.)

When x is an 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.

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

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

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.

contexts can be restored using &contextName

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.

When x is an 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.

new feature:

filter "ATOM" opposite of filter "HETATM"

new feature - load ASYNC .... script ASYNC:

load and script ASYNC start a new asynchronous thread to load the file and then continue after that.

supplements {"key":value,...} where quotes are still required due to conflict with atom set chain descriptors such as {a:b}.

new feature: catchable THROW

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.

contexts can be restored using &contextName

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.

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.

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" TODO: PyMOL electron density map data itself (meshes are done)

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

parameter CACHE along with isosurface creation or alone instructs Jmol to immediately create JVXL data for the specified surface and to load that data instead. The surface remains in memory (in this version of Jmol) can can be used again using cache://isosurface_ where is the isosurface ID such as "isosurface1".

The command ISOSURFACE CACHE alone will cache the current isosurface

If the cache is no longer needed, then RESET CACHE will release the memory used to hold the JVXL data for the isosurface

The result should be essentially equivalent to the original command. (It is recommended that the original be a relatively simple command, because not all nuances of an isosurface may be stored in the JVXL data.)

THIS OPTION IS NOT COMPATIBLE WITH SAVING THE STATE AS AN SPT FILE.

Instead, one needs to save the state in PNGJ or JMOL format, where the cached isosurface can be reloaded from a file saved in the PNGJ or JMOL zip directory

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: 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

New in version 12.2.19 (April 2nd, 2012)

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

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.

FEATURE CHANGE: DSSP default for "calculate structure"-- old way is now "calculate structure RAMACHANDRAN"

FEATURE CHANGE: DSSP default for LOAD of PDB file with no header.

in previous versions, Jmol used a ramachandran-angle-based calculation for secondary structure determination when a PDB file had no HELIX or SHEET records.It just seems reasonable to use the industry-standard DSSP method instead.

new feature: The Jmol application can now communicate via socketswith other Jmol applications or specialized servers.

The SYNC command has been expanded to make this very easy: sync -nnnn starts a server on local port nnnn accepting only local connectionssync nnnn "background white" (from another app, generally) would execute thatcommand on the app acting as a server You can also do this from one app frame to another, because they are independentinstances of Jmol.

Jmol can provide server service to other apps using: sync -3000[start other app, connecting on 3000]sync 3000 ..... Because once the server is started and another app has connected,Jmol will send messages to that other app, not itself. To test the service within one application, just create the server and sendcommands to itself using a negative port number: sync -3000;sync -3000 'Mouse: rotateZBy 30'

Note that all these moves utilize the Jmol sync functionality originally intended forapplets. So any valid sync command may be used with the "sync" style. These includeessentially all the actions that a user can make with a mouse, including thefollowing, where the notation represents a number of a given type. Theseevents interrupt any currently running script, just as with typical mouse actions. "centerAt "-- set {ptx,pty,ptz} at screen (x,y)"rotateMolecule ""rotateXYBy ""rotateZBy ""rotateZBy " (with center reset)"rotateArcBall ""spinXYBy "-- a "flick" gesture"translateXYBy ""zoomBy ""zoomByFactor ""zoomByFactor " (with center reset)

new feature: preliminary QuantumEspresso XML readernew feature: Jmol Application flags -k and -P-- -k kiosk mode: like applet, but with a banner across the top-- -P JSON NIO client mode over port -- for JSON NIO, use -J or -j to set nioContentPath and nioTerminatorMessageto the desired values. For example:Jmol -k -P 31461 -j "nioContentPath='./%ID%/%ID%.json';nioTerminatorMessage='SCRIPT_DONE'"

new feature: Jmol.js adds jmolSwitchToSignedApplet().This needed a new tag that is now inserted around the applet.

bug fix: contact command not symmetricSet A should generally be the ligand. However, consider note:// check for O--H...N or O...H--N and not considering// hydrogens and still have a filter// a bit of asymmetry here: set A may or may not have H atoms added.// This is particularly important for aminesThe issue here is that we do not assume that hydrogens have beenadded to ligands. So we make some allowances there.

bug fix: SMILES [#6]-[#6] should not match bonds in benzene, only biphenyl

bug fix: 12.1.51 breaks mo reading from Chem3D XML, which was not working anyway, but now is. # bug fix: isosurface slab -@xxxx... will negate variable xxxx if it is a plane # bug fix: contact {setA} {setB} should not allow overall of setA and setB unless NCI.

angleXY-angle in XY plane (decimal in radians) anglefromZ- angle from Z axis (decimal in radians) these angles specify the direction vector perpendicular to the slice.

position - 0-100 (% in decimal) specifies the position along the vector as a percent of the boundbox diagonal. 50% is origin.

thickness - slice thickness as a percentage of the boundbox diagonal (0-100 in decimal format).

slice left on - creates a transparent plane at the left of the slice.

slice right on - creates the right plane

slice right|left off - turns them off.

implemented: isosurface slab [several options, see above] does all of the above except left/right transparent planes, which I think could be implemented differently.

New in version 12.1.49 Prerelease (June 10th, 2011)

new feature: set zSlab {atom expression or point}; set zShade ON

sets the front of the shading to be at a position in space

very nice for ligands!

FEATURE CHANGE: default zShadePower set to 3

bug fix: MarchingCubes not reading last plane of data

code: isosurface NCI (promolecular) reads progressively

new feature: isosurface NCI (noncovalent interactions)

NCIPLOT promolecule calculation for reduced density.

Plots reduced density mapped with ABS(rho)*SIGN(lambda2) where lambda2 is the middle eigenvalue of the Hessian matrix of promolecular electron density. Innovates a discrete SCF option not available in NCIPLOT itself.

bug fix: draw/show pointGroup not correct when {0 0 0} is not center of model bug fix: draw pointGroup deletes all draw objects, not just of this model's point group

bug fix: multimodel show pointGroup does not reset when frame is changed

New in version 12.1.37 Prerelease (February 28th, 2011)

new feature: you can put element numbers in place of element symbols in XYZ files, and you can have a sixth column that is radius e.g. elemno x y z charge radius or (for just the radius with no charge) elemno x y z - radius note that charge can be formal (integer) or partial (decimal)

New in version 12.0.34 (February 28th, 2011)

bug fix: set PICKING OFF nonfunctional

bug fix: unnecessary moveto commands in state

bug fix: CTRL-SHIFT-LEFT on Macintosh must be pressed with LEFT first. go figure... (Old, old problem fixed)

-- problem was that CTRL-SHIFT-LEFT-DRAG specifically was delivered as CTRL-SHIFT-MOVE