1Jmol.___JmolDate="$Date: 2021-12-31 18:52:23 -0600 (Fri, 31 Dec 2021) $"
2Jmol.___fullJmolProperties="src/org/jmol/viewer/Jmol.properties"
3
4# THIS IS THE TRUNK - for development and release
5
6# NOTE -- developement is moving to GitHub. See https://github.com/BobHanson/Jmol-SwingJS
7
8# Developers: to add a description of changes you have made,
9#  add it on a line below the "Jmol.___JmolVersion=..." line.
10#  Don't use Jmol.___ in your text, as that is the key for stripping out
11#  the information saved in the JAR version of this file.
12#  The quotes above	 look odd for a parameter file, but they are
13#  important for the JavaScript version of Jmol.
14#
15# A full Jmol/JSpecView/JSmol release requires the following:
16#
17# 1. Generate a new version number. This should be done as in the following examples,
18#    listed in order of appearance:
19#
20#    previous     new
21#
22#    14.8.10  14.8.11-beta-2016-12-20 a beta release of 14.8.11 with a timestamp for Dec 20, 2016
23#    14.8.10  14.8.11                 bug fixes only - patch level
24#    14.8.10  14.9.1                  new features - minor version level (tag for Maven, create branch)
25#    14.8.10  15.1.1                  new features - major version level (tag for Maven, create branch)
26#
27#  The distinction between major and minor is arbitrary.
28#
29#  Note that -beta releases will be to https://sourceforge.net/projects/jmol/files/Jmol-beta
30#  while full releases will be to https://sourceforge.net/projects/jmol/files/Jmol.
31#
32# 2. Create a new Jmol.___... line and remove "Jmol.___" from the line for the
33#    previous release; failure to do remove this line will use the original release number,
34#    not the new one, since this is a property file.
35#
36# 3. Commit this change.
37#
38# 4. Run jsmol build_11_fromJmol.xml
39#
40# 5. Refresh the JSmol project
41#
42# 6. Run jsmol build_12_tosite.xml
43#
44# 7. Run jsmol build_13_tojs.xml
45#
46# 8. Run jmol build.xml (including dist, which also initiates a release now)
47#
48
49
50# TODO: fix UNDO
51# TODO: check RN=X=NR stereo
52# TODO: symop() is largely undocumented
53# TODO: load CENTROID is udocumented ??
54
55# NOTE: This is the older, non-SwingJS, version of Jmol.
56
57# TODO: isosurface cavity delivers nonsense volume due to unclosed surface
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79Jmol.___JmolVersion="14.32.7"
80  also 15.2.7
81
82bug fix: JavaScript error on file reading can cause infinite loop
83bug fix: toJSON for primitive arrays creating string arrays ["1","2"]
84bug fix: dynamic PDB menu items not refreshing after file load if menu is not already created
85bug fix: MUTATE with pdbAddHydrogens fails and crashes Jmol
86
87new feature: expanded MUTATE options
88 -- examples:
89
90	mutate 33 LYS
91	mutate ALA34 G
92	mutate {ALA.CA}[2] G
93	mutate {1-3} GAL
94	mutate {1-3} A
95	mutate {1-3} ~LYS (that is, LEU-TYR-SER)
96	mutate {1-3} G_L
97	mutate {1-4} "GLY-AlA"
98	mutate ALA34 "myAla.pdb" (from a file)
99	mutate ALA34 "==SEP"	(from RCSB)
100	mutate @3 @res	(using variables)
101
102
103new feature: MUTATE CREATE option
104 -- creates peptides with specified sequence and secondary structure (phi/psi)
105 -- examples:
106    mutate create aaaaaaa   // defaults to alpha
107    mutate create "lys-ala-ser" // uses one-letter and three-letter codes
108    mutate create ppppp "3-10" // 16 pre-defined phi/psi sequences:
109
110		"alpha"	[ -65, -40 ]
111		"3-10"	[ -74, -4 ]
112		"pi"	[ -57.1, -69.7 ]
113		"alpha-L"	[ 57.1, 4 ]
114		"helix-II"	[ -79, 150 ]
115		"collagen"	[ -51, 153 ]
116		"beta"	[ -140, 130 ]
117		"beta-120"	[ -120, 120 ]
118		"beta-135"	[ -135, 135 ]
119		"extended"	[ 180, 180 ]
120		"turn-I"	[ -60, -30, -90, 0 ]
121		"turn-II"	[ -60, 120, 80, 0 ]
122		"turn-III"	[ -60, -30, -60, -30 ]
123		"turn-I'"	[ 60, 30, 90, 0 ]
124		"turn-II'"	[ 60, -120, -80, 0 ]
125		"turn-III'"	[ 60, 30, 60, 30 ]
126
127new feature: MODELKIT MUTATE
128 - same as MUTATE, but associated (and documented) with model kit
129
130new feature: modelkit CONNECT @1 @2 [0,1,2,3,4,5,p,m] (default 1)
131
132
133 modelkit [ON(nada)/OFF/DISPLAY/HIDE]
134
135  MODELKIT CENTER point or atoms (point can be fractional by adding "/1" to at least one coord)
136
137  -- action options include alternatives to the given commands (assign is undocumented)
138
139  modelkit ASSIGN ATOM [symbol|pl|mi] point
140  modelkit ASSIGN ATOM @1 [symbol|pl|mi]
141  modelkit ASSIGN ATOM @1 [symbol|pl|mi] point
142  modelkit ASSIGN BOND (integer) [0,1,2,3,4,5,p,m] (default P)
143  modelkit ASSIGN BOND {atom1 atom2} [0,1,2,3,4,5,p,m] (default P)
144  modelkit ASSIGN BOND @1 @2 [0,1,2,3,4,5,p,m] (default P)
145
146  modelkit CONNECT @1 @2 [0,1,2,3,4,5,p,m] (default 1)
147
148  modelkit ROTATE ...  (same as ROTATE for example, ROTATE BOND @1 @2 degrees)
149  modelkit ROTATESELECTED (same as ROTATESLECTED)
150
151 view mode
152  MODELKIT SYMOP [n]
153  MODELKIT SYMOP "x,-y,z"
154  MODELKIT SYMOP [[4x4 matrix]]
155  MODELKIT OFFSET [{i j k}/NONE]
156
157  -- configuration options include the following; CAPS is default:
158
159  MODELKIT SET addHydrogens [TRUE|false]
160  MODELKIT SET autobond [true|FALSE]
161  MODELKIT SET clickToSetElement [TRUE|false]
162  MODELKIT SET showSymopInfo [TRUE|false]
163  MODELKIT SET bondtype [0,1,2,3,4,5,p,m]
164  MODELKIT SET element [name or symbol]
165  MODELKIT SET MODE [molecular|view|edit]
166  MODELKIT SET UNITCELL [EXTEND|PACKED]
167
168 edit mode -- not implemented
169
170  MODELKIT SET SYMMETRY [APPLYFULL|APPLYLOCAL|RETAINLOCAL] // not implemented
171  MODELKIT POINT point or atoms // not implemented
172
173  -- configuration options can be given sequentially within one MODELKIT command or in individual commands
174  -- examples:
175
176  modelkit set mode view symop 5 center @3
177  modelkit set mode view symop 5 center @3 offset {0 0 0}   // unitized [0,1)
178
179
180JmolVersion="14.32.6"
181  also 15.2.6
182
183bug fix: (JavaScript only) insignificant script processing error reported in JavaScript console
184bug fix: InChI for deutero compounds not working
185bug fix: InChI failure should show "?" not SMILES
186
187JmolVersion="14.32.5"
188  also 15.2.5
189
190bug fix: show INCHI  broken in 14.32.5
191
192new feature: hack added for reading invalid CIF files created by Materials Studio
193
194Apache Log4J vulnerability checked (not applicable)
195
196Confirming that Jmol.jar (any version) is not affected by the CVE-2021-45046:
197	Apache Log4j2 Thread Context Message Pattern and Context Lookup Pattern vulnerable to
198	a denial of service attack as described by Apache,�or any other Log4j2 vulnerability.
199
200Several checks support this finding:
201
202 1) Jmol is compiled using Java 6. Log4j2.x requires at least Java 7.
203 2) Jmol itself does not use Log4j. We use a much simpler, extremely streamlined custom class,
204 	org.jmol.util.Logger, with only a very simple interface.
205 3) Jmol does incorporate JNI-InChI 1.03_1, which does utilize Log4j. However, JNI-InChI 1.03_1
206 	utilizes Log4j1, not Log4j2.
207 4) Log4j1.x is not impacted by this vulnerability.
208 5) The suggested mitigation -- simply removing org/apache/logging/log4j/core/lookup/JndiLookup.class
209 	from the distributed JAR file (Jmol.jar, JmolData.jar) is unnecessary, as Jmol.jar does not
210 	contain even the org/apache/logging package, much less any class file that starts with "Jndi".
211 6) As part of this version update the ANT task
212 	<delete file="${appjars.dir}/org/apache/logging/log4j/core/lookup/JndiLookup.class" />
213 	has been added to build.xml just in case any future version of any dependency might include that class.
214
215
216JmolVersion="14.32.4"
217  also 15.2.4
218
219feature change: MODELKIT no longer by default does drag-to-bond with default autobonding
220  - autobonding leads to results unexpected by the user -- should not be the default setting
221  - use MODELKIT SET AUTOBOND TRUE to re-enable this feature if desired
222  - easy enough to drag to bond atoms without this
223
224new feature: MODELKIT set autobond true
225 -- when dragging to create a new bond to a new atom, automatically check vicinity of the new atom for bonding
226 -- default now set to FALSE
227
228new feature: MODELKIT set hidden true
229 -- hides the modelkit menu but retains the picking and hover highlights
230
231new feature: PWmat atom.config reader http://pwmatus.com/manual
232
233bug fix: modelkit does not preserve setPicking setting in quiet mode
234bug fix: modelkit autobonding is too aggressive; needs to be settable
235
236
237JmolVersion="14.32.3"
238  also 15.2.3
239
240bug fix: (JavaScript only) insignificant script processing error reported in JavaScript console
241bug fix: various ModelKit issues.
242
243JmolVersion="14.32.2"
244  also 15.2.2
245
246bug fix: ModelKit shows wrong hover labels
247bug fix: LOAD APPEND after adding atoms via modelkit does not by default append new
248bug fix: state saved after deleting atoms in modelKitMode uses appendNew true, creating several fragment models
249bug fix: Java app modelkit icon does not clear when a structure is loaded
250
251new feature: modelkitCallback
252 -- String value is "ON" or "OFF"
253 -- for example: set modelkitcallback "jmolScript:print 'modelkitmode=' + modelkitmode"
254
255new feature: MODELKIT command
256 -- was introduced for 15.0.2 / 14.29.25, but was not documented
257 -- allows scripting of Jmol Modelkit functions
258 -- turning the modelkit on/off - same as SET MODELKITMODE:
259
260   modelkit ON
261   modelkit OFF
262
263 -- note that the modelkit does not have to be ON for the following functionality.
264
265 -- note that the modelkit does not have to be ON for the following functionality.
266
267 -- configuration options include the following, where (xxx) is optional, CAPS is default:
268
269
270   modelkit addHydrogens [TRUE|false]
271     -- setting this false turns off the automatic addition of hydrogens
272   modelkit clickToSetElement [TRUE|false]
273     -- setting this removes the ability to change elements other than H by clicking on them
274   modelkit showSymopInfo
275     -- setting this false stops the modelkit from showing space group symmetry information
276
277  -- configuration options can be given sequentially within one MODELKIT command or in individual commands
278
279   modelkit addHydrogens FALSE clickToSetElement TRUE;
280
281 -- MODELKIT actions:
282
283   modelkit assign atom @3 "C"
284     -- changes atom 3 to carbon, with concomitant bond distance change and addition of H
285   modelkit assign atom "C"  {3 3 3}
286     -- adds a carbon at {3 3 3} but does not bond anything to it
287   modelkit assign atom @25 "O" {3 4.2 3}
288     -- adds an O atom connected to @25 and at the default distance on the line between @25 and {3 4.2 3}
289   modelkit assign bond @1 @2 <type>
290     -- where type can be 0,1,2,3,4,5,p,m
291       - p indicates +, increment (cycles 1 2 3 1)
292       - m indicates -, decrement (stops at 0)
293     -- with associated changes in hydrogen count
294   modelkit connect @25 @26
295     -- connects two atoms, adjusting hydrogen atoms according to standard hybridization
296
297 new feature: SHOW MODELKIT addhydrogens
298 new feature: SHOW MODELKIT clickToSetelement
299 new feature: SHOW MODELKIT showSymOpInfo
300
301 new feature: getProperty("modelkitinfo")
302   -- delivers an associative array of information about the modelkit
303
304
305JmolVersion="14.31.61"
306  also 15.1.61
307
308new feature: JSpecView reading Bruker NMR 1D and 2D directories and ZIP files
309  - drag any file from a Bruker directory or the directory itself into JSpecView
310
311new feature: allow select within(cell,555)
312
313new feature: symop(pointGroupOperation, atom, pointGroupInfoObject)
314 -  where pointGroupOperation is of the form S6 or S6.1 or S6^3 or S6.1^3
315    and ^n means nth power
316    and .i means ith element of this type
317 - return point result of operation of the point group operation on an atom
318   - for example: print symop("C2.1", @3)
319 - without atom, returns matrix
320   - for example: print symop("C2.1")
321 - without pointInfoGroupObject defaults to the point group of the current model, pointGroup()
322
323new feature: pointgroup() returns pointGroupInfo object same as getProperty("pointgroupinfo")
324
325bug fix: JmolTable.java example does not point to correct site
326bug fix: CIFReader some first models 0 atoms
327
328JmolVersion="14.31.60"
329  also 15.1.60
330
331fix for CIFReader not reading multi-model CIF files.
332
333JmolVersion="14.31.59"
334  also 15.1.59
335
336bug fix: CIFReader should allow unlooped items for all needed tags
337bug fix: JSpecView writer broken in 15.1.50 2021.08.10
338
339JmolVersion="14.31.58"
340  also 15.1.58
341
342bug fix: adjustments to TopoCifParser pre-release of Topology.dic
343
344JmolVersion="14.31.57"
345  also 15.1.57
346
347bug fix: magCIF can not handle fractions 2/5, 3/10, etc.
348
349JmolVersion="14.31.56"
350  also 15.1.56
351
352bug fix: compare({2.1}, {1.1}, "map", "H") broken
353
354
355JmolVersion="14.31.55"
356  also 15.1.55
357
358new feature: COMPARE {2.1} {1.1} BONDS SMILES HYDROGEN
359 - adds HYDROGEN check for aligning methyl and methylene groups properly
360
361bug fix: (-1.4567).format("%5.2f") missing minus sign
362bug fix: UnitCell transform should be included in COMPARE FRAME
363bug fix: CifReader fix for lack of case sensitivity in some GEOM_* records for some COD and CCDC files
364bug fix: FilesReader fails with zip file pipe
365bug fix: Polyhedra SMILES not working for chirality check -- was never fully tested
366bug fix: Resolver can fail for certain CIF files resolved to MOL incorrectly
367bug fix: TopoCif update
368
369new feature: COMPARE additions:
370
371    // compare FRAMES
372    // compare {model1} {model2} POLYHEDRA
373    // compare {model1} {model2} SUBSET {polyhedra} POLYHEDRA
374    // compare {model1} {model2} ATOMS @atom1 @atom2 POLYHEDRA
375    // compare FRAMES POLYHEDRA
376
377new feature: compare() additions
378
379        // A, B, int[] map
380        // A, B, int[] map, stddev
381
382
383JmolVersion="14.31.54"
384  also 15.1.54
385
386bug fix: TopoCifParser bugs
387
388new feature: load "xxx" filter "TOPOL"
389 -load _topol_* data
390 -no symmetry applied
391 -display net 1 by default
392
393new feature: load "xxx" {1 1 1} filter "TOPOL"
394 -load _topol_* data
395 -display the {1 1 1} unit cell, with symmetry (this could be fill or packed, etc.)
396 -display net 1 by default
397
398new feature: load "xxx" {1 1 1} filter "TOPOLNet=2"
399 -load _topol_* data
400 -display net.id==2 by default
401
402new feature: load "xxx" {1 1 1} filter "TOPOLNet=Net_2"
403 -load _topol_* data
404 -display net.label=='Net_2' by default
405
406
407JmolVersion="14.31.53"
408  also 15.1.53
409
410bug fix: TopoCifParser bugs fixed
411bug fix: {metal} included Xx
412bug fix: symop() function not relating file-based operators
413bug fix: print symop(3,"xyzOriginal") does not show original (file-bsaed) symmetry operation
414new feature: symop(3, [1 1 0]) adds specified "cif2-style" translation to symmetry operation.
415new feature: symop(@1, @61, "cif2") returns the "cif2" format of this operation.
416    - developed for working with TopologyCIF data
417	- <symop> [i j k]
418	- For example:
419
420	$ load =ams/quartz 1 packed
421	$ print symop(@1,@3,"cif2")
422	2 [0 0 0]
423	3 [0 0 0]
424
425	$ print symop(@1,@13,"cif2")
426	2 [1 0 0]
427	3 [1 0 0]
428
429new feature: print symop(...."canonical")
430new feature: print symop(n, [i j k], ...)
431  $ print symop(3, [1 0 1])
432
433
434
435
436JmolVersion="14.31.52"
437  also 15.1.52
438
439bug fix: JavaScript does not return to correct scrpt level after DELAY
440
441JmolVersion="14.31.51"
442  also 15.1.51 (take 2)
443
444new feature: ISOSURFACE DENSITY option
445 - checks for cryo-EM data from EBI/EMDB and, if that exists, uses it; otherwise uses x-ray diffraction data
446bug fix: problems with ISOSURFACE in 14.31.50
447bug fix: EM isosurface not saved in state.
448
449JmolVersion="14.31.50"
450  also 15.1.50
451
452bug fix: JSpecView upgrade for misc. JDXReader issues
453bug fix: Jmol file dropper not asking to resize (broken in 15.1.46/14.31.46)
454bug fix: Jmol not reading EBI cryo-EM files from density server.
455bug fix: Jmol not using EBI submap feature of density server for full-structure volumes
456
457new feature: ISOSURFACE *.../full
458  - returns the FULL EBI volume data, not just one localized around a structure
459
460JmolVersion="14.31.49"
461  also 15.1.49
462
463bug fix: JSpecView not using ##FIRSTX for diff-dup x values after first.
464bug fix: JSpecView version not showing
465
466new feature: isosurface "*em"
467 - same as *emdb, just simpler.
468
469JmolVersion="14.31.48"
470  also 15.1.48
471
472  bug fix: JavaScript isosurface asynchronous file loader
473           failing to finalize, causing refresh in later-called
474           function to not return.
475
476  bug fix: Filenames and directories with unicode accents not saved in ZIP, PNGJ, JMOL files.
477
478  bug fix: Locally loaded JavaScript files not save in ZIP, PNGJ, JMOL
479
480JmolVersion="14.31.47"
481  also 15.1.47
482
483new feature: isosurface "*emdb/nnnn"
484 - retrieves the cryo-EM surface EMD-nnnn
485 - uses http://ftp.ebi.ac.uk/pub/databases/emdb/structures/EMD-%file/map/emd_%file.map.gz
486   (https did not work in Java due to certificate issues)
487
488new feature: isosurface "*emdb/=xxxx"
489 - looks up the EMDB id for the cryo-EM surface associated with pdb id xxxx
490 - first uses https://www.ebi.ac.uk/emdb/api/search/fitted_pdbs:%file?fl=emdb_id,map_contour_level_value&wt=csv
491 - then uses http://ftp.ebi.ac.uk/pub/databases/emdb/structures/EMD-%file/map/emd_%file.map.gz
492
493new feature: isosurface "*emdb" (or "*emdb/" or "*emdb/=")
494 - uses the current model's PDB ID with *emdb/=xxxx"
495
496JmolVersion="14.31.46"
497  also 15.1.46
498
499bug fix: Drag-drop of PNGJ can fail due to SCRIPT command not accepting "spt::" type identifier
500
501JmolVersion="14.31.45"
502  also 15.1.45
503
504bug fix: model kit changes for atomName and element not saved in state (since Jmol 14.28?)
505
506JmolVersion="14.31.44"
507  also 15.1.44
508
509bug fix: Incorrect implementation of double value from string in JCAMP-DX format
510bug fix: V3000 reader does not recognize 2D mol file setting
511bug fix: 2D->3D can invert stereocenters having C-H bond.
512
513JmolVersion="14.31.43"
514  also 15.1.43
515
516new feature: hbondHDistanceMaximum maximum O--H distance in hydrogen bonds
517 - only in the case of actual hydrogen bonds, not pseudo-hydrogen bonds
518 - hbondsDistanceMaximum now aliased to hbondNODistanceMaximum for clarity
519
520JmolVersion="14.31.42"
521  also 15.1.42
522
523bug fix: GaussianReader fix for reading frequencies giving NullPointerException
524
525bug fix: mmCIF reader was requiring optional auth_XXXX fields
526
527bug fix: jspecview reading pimentoGCMS2.dx empty $$MODEL= causes NullPointerException
528
529bug fix: better MMFF94 and UFF for 2D -> 3D
530new feature: adds MMFF2D and UFF2D forcefields that involve stronger
531             fields for no-hydrogen (UFF2D) and added-hydrogen (MMFF2D) minimization
532new feature: adds set testflag2 TRUE to stop FILTER "2D" after first stage, before UFF2D+MMFF2D minimization
533
534JmolVersion="14.31.41"
535  also 15.1.41
536
537bug fix: (JSmol only - not SwingJS) modelkit bond assignment fails due to old transpiler bug
538 -- was failing to convert char to int and back properly
539
540JmolVersion="14.31.40"
541  also 15.1.40
542
543bug fix: eval("JSON",json) fix to allow [...] or {...}
544bug fix: ellipsoid ISO saved in state with wrong size
545
546new feature: set checkCIR
547 -- retrieves the NCI/CADD Chemical Identifier Resolver URL
548 -- currently contacts chemapps.stolaf.edu/resolver
549 -- places return JSON information into _.cirInfo
550 -- reports _.cirInfo.status as "OK" if successful or "unavailable" if not
551
552new feature: Jmol's first load '$' or https://cactus.nci.nih/gov call does checkCIR
553
554new feature: Loading cactus.nic.nih/gov/chemical/structure file will resolve that name
555
556JmolVersion="14.31.39"
557  also 15.1.39
558
559bug fix: GAMESS reader broken
560
561JmolVersion="14.31.38"
562  also 15.1.38
563
564bug fix: TopoCIF 0.9.2 upgrade for _topol_node and _topol_net
565bug fix: JSpecView SVG export missing in menu and broken
566
567
568JmolVersion="14.31.37"
569  also 15.1.37
570
571bug fix: removing default dependency for XmlUtils and PO
572
573JmolVersion="14.31.36"
574  also 15.1.36
575
576bug fix: capture broken in 14.31.34
577
578JmolVersion="14.31.35"
579  also 15.1.35
580
581adds GamessReader MOPAC parameters from F90 files provided by Jimmy Stewart for MO reading
582 -- note that GAMESS uses only s and p orbitals for the MOPAC option
583adds GamessReader MOPAC option
584 -- forces using MOPAC slaters rather than gaussian contraction when g.c. is present
585adds MoldenReader [STO] ANGS and MOPAC options (zeta in 1/Angs; apply MOPAC scaling)
586
587JmolVersion="14.31.34"
588  also 15.1.34
589
590bug fix: NBO type change not saved in state
591bug fix: NBO auxiliary files (output.36, output.46, etc.) not saved in PNGJ,JMOL,ZIP files
592
593JmolVersion="14.31.33"
594  also 15.1.33
595
596new feature: Allow replacement of PNG data in PNGJ
597
598  x = load("toHenry2_pngj.png",true)
599  y = load("bob.png")
600  x._IMAGE_ = y._DATA
601  write var x "toHenryFromBob.png"
602
603
604JmolVersion="14.31.32"
605  also 15.1.32
606
607bug fix: isosourface MOLECULAR and SASURFACE should never drop below 1.5/(probe radius)
608bug fix: (second release) getProperty("isosurfaceData") broken
609
610JmolVersion="14.31.31"
611  also 15.1.31
612
613bug fix: isosurface ... NCI ""  broken (in 14.5.2)
614bug fix: plane definitions totally messed up in 14.31.26
615
616JmolVersion="14.31.30"
617  also 15.1.30
618
619bug fix: load ? outside of function duplicates next commands
620bug fix: (JS) Safari 14 not downloading files using DataURI
621
622JmolVersion="14.31.29"
623  also 15.1.29
624
625bug fix: FileDropper does not recognize .txt file as possible script
626
627JmolVersion="14.31.28"
628  also 15.1.28
629
630
631new feature: Jmol SMILES bond atropisomerism ^nm- and ^^nm-
632 -- indicates atropisomerism (bond chirality in biaryl systems)
633 -- ^ and ^^ for bonds similar to @ and and @@ for atoms
634 -- n and m are single-digit bond selectors, generally one of 1, 2, or 3
635 -- n = 1/2/3 means "reference atom is first/second/third connection
636    to the atom on the left; m = 1/2/3 the same for the atom on the right.
637 -- ^- and ^^- same as ^22- and ^^22-, respectively
638 -- example:
639
640
641   load $biphenol
642   connect @2 @7 atropisomer
643   print {*}.find("SMARTS","c1(O)cccc{c1^^-c2}ccccc2O")
644
645   ({1 6})
646
647  Here the "^^-" is short for "^^22- and refers to the two carbons with connected oxygen atoms:
648
649new feature:  mol1.find(mol2, "MAP" + flags, format)
650 - creates a correlation map of atoms of mol1 to atoms of mol2
651 - mol1 and mol2 are atom sets such as {1.1} and {1.2}
652 - uses SMILES; Jmol SMILES directive flags such as "hydrogen" or "open" can be added
653 - format indicates the format to use for the results
654 	- can be "name", "index", "number" or any valid label, such as "%a %i"
655 	- defaults to "number"
656 - returns a map (associative array) containing keys:
657    - smiles: the SMILES string used for the match
658    - BS1 : atomset for mol1
659    - BS2 : atomset for mol2
660    - SMILEStoBS1 : array correlating SMILES atoms to BS1
661    - SMILEStoBS2 : array correlating SMILES atoms to BS2
662    - BS1toBS2  : array correlating BS1 to BS2 (indexes are for mol1; values are mol2)
663	- MAP1to2 : array of [a,b] pairs, where a is format for mol1, b is format for mol2
664    - key : format used in mapping
665
666 - example:
667
668	load files ":caffeine" "$caffeine"
669	info =  {1.1}.find({2.1},"map", "name")
670	print info.SMILES
671	print info.key + ": " + info.MAP1to2.format("JSON")
672
673	  O=C1c2c3N(C)C(=O)N1C.[n]2(C)c[n]3
674
675	  name: [ [ "O1","O14" ],[ "O2","O4" ],[ "N3","N5" ],[ "N4","N10" ],[ "N5","N1" ],
676	  [ "N6","N8" ],[ "C7","C12" ],[ "C8","C7" ],[ "C9","C13" ],[ "C10","C3" ],
677	  [ "C11","C9" ],[ "C12","C6" ],[ "C13","C11" ],[ "C14","C2" ] ]
678
679	info =  {1.1}.find({2.1},"map hydrogen", "number")
680	print info.SMILES
681	print info.key + ": " + info.MAP1to2.format("JSON")
682
683	/hydrogen/O=C1c2c3N4[C@@]([H])([H])[H].N51[C@@]([H])([H])[H].C54=O.[n]62[C@]([H])([H])[H].c6([H])[n]3
684
685	number: [ [ 1,14 ],[ 2,4 ],[ 3,5 ],[ 4,10 ],[ 5,1 ],[ 6,8 ],[ 7,12 ],
686	[ 8,7 ],[ 9,13 ],[ 10,3 ],[ 11,9 ],[ 12,6 ],[ 13,11 ],[ 14,2 ],[ 15,21 ],
687	[ 16,18 ],[ 17,20 ],[ 18,19 ],[ 19,22 ],[ 20,23 ],[ 21,24 ],[ 22,15 ],[ 23,17 ],[ 24,16 ] ]
688
689bug fix: x.label("%a %D") wrong value for %D
690
691JmolVersion="14.31.27"
692  also 15.1.27
693
694bug fix: {*}.bonds.length not working
695
696bug fix: array.find(n) should not do a string seach and return match.
697 - return array of array indices, 1-based.
698 - example: [11 3 1 2 1].find(1) == [3 5], not [1 3 5]
699
700newly documented:
701
702Polyhedra command allows for min and max radius
703  -- polyhedra 2.8 3.0 @3
704
705setting DSSR on the fly:
706
707   model 1 property dssr "1d66.dssr"   // file containing data
708   model 1 property dssr @{load("1d66.dssr")} // actual data
709   select iloops
710
711
7124-order bond in MOL file using 14 for bond order
713 -- Jmol extension for MOL file format to allow 4-bond
714 -- example: [Re2Cl8](2-)
715 -- see https://en.wikipedia.org/wiki/Quadruple_bond
716
7175-order bond in MOL file using 15 for bond order
718 -- Jmol extension for MOL file format to allow 5-bond
719 -- example: [Mo2Cl8](4-)
720 -- see https://en.wikipedia.org/wiki/Quintuple_bond
721
7226-order bond in MOL file using 16 for bond order
723 -- Jmol extension for MOL file format to allow 6-bond
724 -- example: Mo2
725 -- see https://en.wikipedia.org/wiki/Sextuple_bond
726
727
728DRAW polygon @face @points
729 -- draws a filled polygon based on arrays of atom indices
730 -- @face is an array of integers, not necessarily wound correctly
731 -- @points is an atom bitset or an array of points (optional, defaults to {*}
732 -- for example:
733
734 	  load $p4
735	  x = {*}.find("*1**1","map");
736	  draw ID p4r polygon @{x[1]} color red
737	  draw ID p4b polygon @{x[2]} color blue
738	  draw ID p4y polygon @{x[3]} color yellow
739	  draw ID p4g polygon @{x[4]} color green
740
741
742DRAW polyhedron @faces @points
743 -- draws sets of polygons based on arrays of atom indices
744 -- @faces is an array of array of integers, not necessarily wound correctly
745 -- @points is an atom bitset or an array of points (optional, defaults to {*}
746 -- for example:
747
748  	  load $caffeine
749	  draw polyhedron @{{*}.find("*1****1||*1*****1","map")}
750
751 	  load $p4
752	  draw ID p polyhedron @{{*}.find("*1**1","map")} color red
753
754POLYHEDRON ID xxx @faces @points
755 -- @faces is an array of array of integers, not necessarily wound correctly
756 -- @points is an atom bitset or an array of points (optional, defaults to {*}
757
758  	  load $p4
759	  polyhedra ID p4 @{{*}.find("*1**1","map")}
760
761array.format(headings) Transform an array of arrays into an array of associative arrays based on "column" headings, and vice-versa. For example, if y = [[1,2],[3,4]], then <b>z = y.format(["a","b"])</b> will set z to [ {{ "a": 1,"b": 2 }},{{ "a": 3, "b": 4 }} ]. And, in reverse, <b>z.format(["a","b"])</b> will be back to [[1,2],[3,4]]
762array.format("JSON") Formats a serial or associative array as JSON.
763array.format("%5.3f\t%5s") Formats an array or array of arrays into a multiline string using sprintf format.
764
765arrayOfArrays.col(n) selects out the nth column from an array of arrays.
766                     For example, retrieving the third column from CSV data:
767                     col3 = load("data.csv").split("",true).col(3).
768
769SHOW CHEMICAL  -- fully described NIH/CADD options
770
771SHOW xxxx /yyyy  Adding "/xxxx" to the command, such as SHOW file/cell will filter
772                 the output only to lines containing the text after the slash character.
773
774Jmol PolySMILES -- described
775
776JmolSQL -- more description; adds WHEREIN; replaces older ** notation
777
778load HISTORY "saved.his"  -- loads command history with script in saved.his
779
780load(filename, asbinary, async) -- 3rd parameter loads file asynchronously in HTML5
781
782frame align [modelNo] [pt]  -- FIXED is assumed; used in state; shifts a model by a specific amount after removing any current frame alignment
783
784x.dot(y) for point.dot(plane)
785
786CIF 2.0 file reader added
787
788set zshadePower 0  -- allows examination of depth buffer and writing to image for external processing
789
790Windows BMP image reading -- reads 24-bit (full color) as well as 16-, 8-, 4-, 2-, and 1-bit color palette modes
791                          -- 14-byte and 40-byte headers only; does not read compressed modes
792
793Write and data({atomset},type) expanded to: CIF|CML|CFI|MOL|PDB|PQR|SDF|CD (ChemDoodle)|JSON|QCJSON|V2000|V3000|XYZ|XYZRN|XYZVIB
794
795x.find("SMILES","top")  -- creates a topology SMILES, involving just * and connections; does not include stereochemistry;
796                        -- allows comparison of connection patterns without respect to any other consideration.
797                        -- can be used to check equivalences in inorganic crystal structures.
798						-- example: load $caffeine;$ print {*}.find("SMILES","top") =>  *1(*)*(*)*2*3*(*)*1*.*2(*)**3
799
800load "" fill UNITCELL PRIMITIVE     (for files that are conventional)
801load "" fill UNITCELL CONVENTIONAL  (for VASP files, which are primitive cells)
802
803polyhedra WIGNER      // Wigner-Seitz cell
804polyhedra BRILLOUIN   // 1st Brillouin zone
805polyhedra BRILLOUIN 1 // 1st Brillouin zone
806polyhedra BRILLOUIN 2 // 2nd Brillouin zone
807polyhedra BRILLOUIN -1 // Wigner-Seitz cell
808polyhedra scale 3.0 BRILLOUIN 1  // scaled 1st Brillouin zone
809
810POLYHEDRA edgesOnly    -- shows just edges; operates on ALL polyhedra, not just selected; complements edges, noEdges, frontEdges
811
812select within(d, $p1) where $p1 is a polyhedron ID
813  -- d = 0 is "on or within the polyhedron"
814  -- d < 0 is "-d angstroms within polyhedron"
815  -- d > 0 is "within d angstroms of polyhedron"
816
817LOAD will read BZ2-compressed files
818
819WRITE "SDF" implements atom value V  nnn ... information
820 -- requires assigning the data property name "atom_values" in the model's molData property
821 -- for example:
822
823  $ load $2,3-dichlorobutane
824  $ molData = {"atom_values":"chirality"}
825  $ model properties "molData" molData
826  $ write dcb.sdf
827
828 -- note that if the model already has a molData property, then use the following to append to it:
829
830  $ molData = (_M.molData ? _M.molData : {})
831  $ molData.atom_values = "chirality"
832  $ model properties "molData" molData
833
834x = load("filename","JSON") -- loads JSON data into variable
835
836{atom}.chirality -- uses Cahn-Ingold-Prelog rules to assign R or S to a carbon center
837                 -- ignores sulfur and nitrogen chirality, generally
838
839{atom}.cipRule   -- CIP sequence rule deciding this center; one of 1a, 1b, 2, 3, 4a, 4b, 4c, 5, or blank
840
841load =chebi/nnnnnn -- chEBI 2D molecule load, with minimal 100-step minimization
842
843set debugHigh   -- same as set loglevel 6 - debugging only
844
845x.split(true) -- does a white-space token split of the string value of x
846
847CALCULATE CHIRALITY {atom set}  -- optionally limited to the given atom set (or the currently selected atoms by default)
848
849set jmolInJSpecView  -- allows Jmol window to NOT be embedded in JSpecView when JSpecView is opened in Jmol; default TRUE
850
851WRITE ISOSURFACE "t.pmesh"; WRITE ISOSURFACE "t.pmb"
852  -- creates ASCII (.pmesh) or binary (.pmb) file (a Jmol-specific file format)
853  -- relatively compact format
854  -- can speed up loading of meshes and contours
855  -- for filled surfaces, use .jvxl instead
856  -- read back into Jmol using ISOSURFACE "t.pmesh"/"t.pmb"
857  -- note that binary files are NOT RECOMMENDED for JSmol because some platforms cannot read them locally
858  -- example:
859
860  load $methane
861  isosurface plane {0 0 0 1} map vdw contours 20
862  write ISOSURFACE contour.pmb
863  isosurface contour.pmb
864
865set labelfor {atomset} "value"
866 -- allows setting of label without changing current selection
867 -- uses same syntax as LABEL command after {atomset}
868 -- for example:
869
870   set labelfor @atoms @myLabel
871   set labelfor {atomno <= 3} @{["a","b","c"]}
872   set labelfor {_C && chirality != ""} "%[atomname] %[chirality]"
873
874color NUCLEIC  -- for nucleic only (others will be grey) -- based on DSSR nucleic color scheme: G green, C yellow, A red, T blue, U cyan
875
876set cartoonBlocks; set cartoonBlockHeight x.x -- for nucleic only -- uses DSSR data if present (using calculate structure DSSR or load =xxxx/dssr)
877 -- displays a DSSR block for each base based on dssr.nts.frame -- x.x is height of box in Angstroms (default 0.5)
878
879color property DSSR type
880 -- where type is one of:
881	bulges
882	coaxStacks
883	hairpins
884	hbonds
885	helicies
886	iloops
887	isoCanonPairs
888	junctions
889	kissingLoops
890	multiplets
891	nonStack
892	nts
893	pairs
894	ssSegments
895	stacks
896	stems
897 -- color is based on index into the list of the given structures
898 -- 0 (not of that structure), 1 (first entry), 2 (second entry), etc.
899 -- for example:
900
901		    load =4fe5/dssr
902		    cartoons only;set cartoonSteps;
903		    color property dssr junctions
904
905x = {*}.find(smartsString,"map") -- returns an array of arrays of atom indices (0-based)
906 -- indicates exact correlation between atoms in {*} and atoms of smartsString
907 -- only unique sets of atoms are found, not every possibility
908 -- for example:
909
910	load $caffeine
911	s = show("smiles") // N1(C)C(=O)c2c3N(C)C1=O.[n]2(C)c[n]3
912	print {*}.find(s,"map").format("JSON")
913	[ [ 0,1,12,13,11,6,4,5,2,3,9,10,8,7 ] ]
914
915	load :caffeine
916	print {*}.find(s,"map").format("JSON")
917	[ [ 4,13,8,0,6,7,2,11,9,1,3,12,10,5 ] ]
918
919
920MACRO bz; createWS("p1")    (still not documented)
921  -- creates a Wigner-Seitz cell as polygon id "p1"
922  -- requires current unit cell to be primitive to work correctly
923  -- polyhedron can be shifted using POLYHEDRA OFFSET
924  -- default ID "pbz1_1_" for just CREATEWS()
925
926
927POLYHEDRA UNITCELL
928 -- creates a polyhedron (12-gon in this case) around each of the
929    currerntly selected atoms that has that bonding environment
930 -- DOES NOT require atoms at these positions - can simply use the
931    unit cell and periodicity to find the relevant atom positions.
932 -- will check bonding as necessary using autobonding parameters
933 -- accepts all standard polyhedra options. For example:
934
935    polyhedra 12,16 3.5 UNITCELL
936
937array.getProperty("xxxx") -- same as getproperty(array, "xxxx")
938  -- drills down into an array of associative arrays to get sublist
939  -- can be used with [SELECT ... WHERE]
940
941SELECT x  where x is an array of integers or array of array of integers
942
943connect NBO <nbotype>
944    - connect atoms in the currently visible model using a resonance structure configuration found in an NBO .46 or .nbo file
945	- where <nbotype> is one of alpha|beta|46|46a|46b|nrtstr_n|nrtstra_n|rs_n|rsa_n|rsb_n
946
947label %[nbo];
948    - label an atom using a resonance structure configuration found in an NBO .46 or .nbo file
949    - requires a previous connect NBO
950
951set nboCharges (default true)
952  - determines whether formal charges are also displayed with LABEL %[nbo]
953
954CONNECT for quintuple and sextuple bonds.
955  -- connect @1 @2 quintuple
956  -- connect @1 @2 sextuple
957  -- readily saved in state
958  -- saving in MOL file as bond type 15 and 16
959
960set labelOffset [mode sx sy sz ax ay az]
961   set labelOffset [sx, sy, sz]
962   set labelOffset [mode, sx, sy, sz, ax, ay, az]
963
964 where
965
966   sx,sy,sz are screen coord offsets
967    -- applied after view rotation
968    -- sy > 0 LOWERS label
969   ax,ay,az are xyz position (in Angstroms; applied before view rotation)
970   mode == 0 indicates xyz position is absolute and sx sy sz are Angstroms
971   mode == 1 indicates xyz position is relative to atom position and sx sy sz are Angstroms
972   mode == 2 indicates xyz is absolute, and sx sy sz positions are screen pixels
973   mode == 3 indicates xyz is relative, and sx sy sz positions are screen pixels
974   defaults: mode == 1; ax = ay = az = 0
975
976getProperty("cifInfo", "c:/temp/test.cif")
977 -- reads CIF file data in structured format
978 -- automatically uses CIF 1.0 or CIF 2.0, as needed.
979 -- if file name is missing, uses current model file
980
981
982load AUDIO audiofilename
983 -- JavaScript can read WAV, MP3, and OGG files
984 -- application can read WAV files
985
986polyhedra AUTO ...
987  -- sets polyhedron radius automatically, using "MAXIMUM GAP" rule
988  -- see Zur Abgrenzung der Koordinationssphäre und Ermittlung der Koordinationszahl in Kristallstrukturen
989         G. O. Brunner, D. Schwarzenbach, Zeitschrift fur Kristallographie - Crystalline Materials, 1971, vol 133, issues 1-6 127-133
990         http://www.degruyter.com/view/j/zkri.1971.133.issue-1-6/zkri.1971.133.16.127/zkri.1971.133.16.127.xml?rskey=sfBNTx&result=1
991
992polyhedron -x.x ....
993 -- sets maximum radius for gap calculation to be x.x
994
995print @1.label("%[unitid]")
996  -- generates unit IDs for atoms or residues
997  -- unit IDs are a proposed general standard for representing atoms and residues in biomolecules
998  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
999  -- options follow "-":
1000
1001  $ print {atomno=3}.label("%[unitid]")     // includes residue and atom
1002  |1|A|G|1|OP1|||
1003
1004  $ print {atomno=3}.label("%[unitid-r]")   // residue only
1005  |1|A|G|1||||
1006
1007  $ print {atomno=3}.label("%[unitid-mr]")  // adds model id
1008  1EHZ|1|A|G|1||||
1009
1010  $ print {atomno=3}.label("%[unitid-mra]") // full unitID
1011  1EHZ|1|A|G|1|OP1|||
1012
1013  $ print {atomno=3}.label("%[unitid-mrat]") // full unitID, right-trimmed
1014  1EHZ|1|A|G|1|OP1
1015
1016  -- Note that the full 8-line unit ID is produced under all circumstances.
1017     This is  important, because string-matching of unit ids will not work
1018     without all fields completed. For example:
1019
1020     |1|A|G|1
1021
1022     would match
1023
1024     |1|A|G|11
1025
1026     without the closing "|". Likewise,
1027
1028     |1|A|G|11
1029
1030     is not a match for the insertion residue
1031
1032     |1|A|G|11|||3|
1033
1034  -- [Editorial note: I agree that it was ill-advised to put the insertion
1035      code at the end. This makes it impossible to efficiently match
1036      residues in full-atom unit IDs.]
1037
1038  -- Note that in an actual atom label, one needs to add "\n" at the end
1039     and have the label in quotes in order to avoid having "|" mean "new line"
1040
1041    label "%[unitid]\n"
1042
1043  not just
1044
1045    label %[unitid]
1046
1047  This is a consequence of having defined "|" as new line early on in Jmol
1048  development.
1049
1050select within("1ehz|1|A|G|45||||")
1051print within("1ehz|1|A|G|45||||")
1052  -- unit IDs
1053  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
1054  -- used for annotations, validations, dssr, and rna-3d processing
1055  -- pdbid|model|chain|RESNAME|resno|ATOMNAME|altcode|inscode|symmetry
1056  -- can truncate trailing (but not leading) pipe symbols
1057    1ehz|1|A|G|15, |1|A|G|15|C2
1058  -- requires at minimum a model number, chain, and residue number
1059    |1|A||15
1060  -- ATOMNAME blank indicates full residue, with altcode indicating "this alt_id or no alt_id" (a configuration)
1061  -- ATOMNAME nonblank indicates one atom, with altcode indicating "exactly this alt_id" (a location)
1062  -- can be multiple, white space, comma, "]", "[", and double quote ignored
1063    1ehz|1|A|G|15||||,1ehz|1|A|U|59||||,1ehz|1|A|C|60|||
1064
1065select shortcuts for nucleic acid structures
1066  -- for example: select junctions; select kissingloops
1067  -- activated after load =xxxx/dssr or calculate structure dssr
1068  -- includes:
1069    "@bulges within(dssr,'bulges')",
1070    "@coaxStacks within(dssr,'coaxStacks')",
1071    "@hairpins within(dssr,'hairpins')",
1072    "@hbonds within(dssr,'hbonds')",
1073    "@helices within(dssr,'helices')",
1074    "@iloops within(dssr,'iloops')",
1075    "@isoCanonPairs within(dssr,'isoCanonPairs')",
1076    "@junctions within(dssr,'junctions')",
1077    "@kissingLoops within(dssr,'kissingLoops')",
1078    "@multiplets within(dssr,'multiplets')",
1079    "@nonStack within(dssr,'nonStack')",
1080    "@nts within(dssr,'nts')",
1081    "@naChains within(dssr,'naChains')",
1082    "@pairs within(dssr,'pairs')",
1083    "@ssSegments within(dssr,'ssSegments')",
1084    "@stacks within(dssr,'stacks')",
1085    "@stems within(dssr,'stems')",
1086
1087
1088mapOfMaps.array(k)
1089 -- generates an array of maps from a map of maps by
1090    storing all top-level map keys under key k in lower-level map
1091 -- reversed by another .array(k)
1092 -- causes a script exception if mapOfMaps is not a map of maps
1093
1094arrayOfMaps.array(k)
1095 -- generates a map of maps from an array of maps by
1096    removing each map's key k and using that as the key for that map value
1097 -- reversed by another .array(k)
1098 -- causes a script exception if arrayOfMaps is not an array of maps or key k is not present in all maps
1099
1100Jmol SMILES/SMARTS generic polySMILES polyhedron option @PHn
1101 -- does a SMILES search for the local coordination environment around a center.
1102 -- particularly valuable for inorganic compounds and metallic or intermetallic network crystal structures
1103
1104write CIF (only minimal)
1105
1106
1107@1.find("crystalClass", pt)
1108  -- generates a list of points based on a model's crystal class (point group)
1109  -- uses @1 just to find the unit cell and space group
1110  -- optional pt is used as a generator (defaults to @1)
1111  -- example:
1112   load =ams/calcite 1
1113   x = @3.find("crystalClass")
1114   print pointgroup(x).name
1115   draw points @x
1116   polyhedra ID p {0 0 0} to @x
1117
1118
1119pointgroup("spacegroup", @1)
1120 -- analyzes the point group (crystal class) of a crystal.
1121 -- uses three irrational-coordinate points to generate all possible operators
1122 -- creates a map with keys (somewhat variable depending upon axes present):
1123
1124	C2
1125	C3
1126	Ci
1127	Cs
1128	S6
1129	detail
1130	distanceTolerance
1131	linearTolerance
1132	nAtoms
1133	nC2
1134	nC3
1135	nCi
1136	nCn
1137	nCs
1138	nS6
1139	nSn
1140	nTotal
1141	name
1142	points
1143	principalAxis
1144
1145
1146
1147x = pointgroup([array of points],center)
1148  -- center is optional, defaulting to average of the points
1149  -- returns a map:
1150    pts = [ {-1.0132 0.585 0.0012999999},{1.0132 0.585 0.0012999999},{0.0 -1.17 0.0012999999} ]
1151    print pointgroup(pts,{0 0 0})
1152	{
1153	  "C2"  :
1154	  [
1155	    {0.8660127 -0.50001717 0.0022222984}
1156	    {-0.8660127 -0.50001717 0.0022222984}
1157	    {0.0 0.99999756 0.002222217}
1158	  ]
1159	  "C3"  :
1160	  [
1161	    {0.0019245904 -0.0011111083 -0.99999756}
1162	  ]
1163	  "Cs"  :
1164	  [
1165	    {0.0019245904 -0.0011111085 -0.99999756}
1166	    {-0.49998164 -0.866036 0.0}
1167	    {0.49998164 -0.866036 0.0}
1168	    {1.0 0.0 0.0}
1169	  ]
1170	  "S3"  :
1171	  [
1172	    {0.0019245904 -0.0011111083 -0.99999756}
1173	  ]
1174	  "center"  :  {0.0 0.0 0.0}
1175	  "detail"  :  "# 3 atoms;"
1176	  "distanceTolerance"  :  0.2
1177	  "linearTolerance"  :  8.0
1178	  "nAtoms"  :  3
1179	  "nC2"  :  3
1180	  "nC3"  :  1
1181	  "nCi"  :  0
1182	  "nCn"  :  4
1183	  "nCs"  :  4
1184	  "nS3"  :  1
1185	  "nSn"  :  1
1186	  "nTotal"  :  12
1187	  "name"  :  "D3h"
1188	  "principalAxis"  :  {0.0019245904 -0.0011111083 -0.99999756}
1189	  "principalPlane"  :  {0.0019245904 -0.0011111085 -0.99999756}
1190	}
1191
1192
1193calculate symmetry  polyhedra {atomset}
1194  -- selectively calculates polyhedra.
1195  -- for example: calculate symmetry polyhedra {polyhedra(4)}
1196
1197calculate symmetry  polyhedra id
1198  -- selectively calculates polyhedra for a given ID.
1199  -- for example: calculate symmetry polyhedra "poly1"
1200
1201
1202_hoverLabel
1203   -- reports general hover label set by hover command
1204
1205_hoverEnabled
1206  -- reports if hover is enabled or not
1207
1208 /invertStereo/ flag for SMARTS search
1209  -- allows quick check for enantiomers
1210  -- example: select search("/invertStereo/C[C@H](Br)CC") will match (R)-2-bromobutane
1211              even though it is for (S)-2-bromobutane
1212
1213{*}.find("SMILES/open")
1214 -- generates OpenSMILES string for selected atoms
1215 -- applies OpenSMILES aromaticity rules for 5-, 6-, and 7-membered rings
1216 -- not chemical -- allows exocyclic c=C bonds and [nH] in 6-membered rings
1217 -- also adds atom class if property_atomClass is nonzero
1218 -- for example:
1219
1220	$ load $2-butanol
1221	$ @2.property_atomclass=2
1222	$ @3.property_atomclass=3
1223	$ @5.property_atomclass=5
1224	$ print {*}.find("smiles/open")
1225
1226		C[C@H:2]([OH:5])[CH2:3]C
1227
1228set window width height
1229set window [width height]
1230set window "xxx.png"
1231
1232
1233point(unitcell, {i, j, k})
1234  -- returns the Cartesian point corresponding to a specific coordinate in a unit cell system.
1235  -- unitcell is an array of the form [origin, va, vb, vc]
1236  -- {i j k} is a point in the unit cell
1237  -- for general use -- does not require actual setting of the model's unit cell
1238
1239UNITCELL TRANSFORM @m4x4
1240  -- direct 4x4 matrix transformation of a unit cell
1241
1242unitcell("a=...,b=...,c=...,alpha=...,beta=...,gamma=....")
1243 - array of center and three vectors
1244 - example:
1245 $ print unitcell("a=10,b=10,c=20,alpha=90,beta=90,gamma=129")
1246{0.0 0.0 0.0}
1247{10.0 0.0 0.0}
1248{-6.293203 7.7714605 0.0}
1249{-8.742278E-7 -1.8328565E-6 20.0}
1250
1251load ... unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
1252
1253unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
1254  -- only the numbers are read; everything else is ignored, so order is important here
1255  -- uses the format created by show unitcell/a
1256
1257unitcell RECIPROCAL 2
1258  -- as integer, multiples of pi
1259
1260unitcell reciprocal x.x
1261  -- allows scaling of reciprocal cell, similar to unitcell("reciprocal", x.x)
1262
1263expanded unitcell() function
1264 -- adds additional types: "A", "B", "C", "I", "F"
1265 -- default is the lattice type of the model's space group
1266 -- not just cubic; "BCC" is converted to "I"
1267 -- for example:
1268
1269	 load =ams/silicon 15 packed   // Cmca
1270	 draw id "uc" diameter 0.1 unitcell mesh nofill color black
1271	 unitcell @{unitcell("primitive")}
1272	 color unitcell red
1273	 unitcell 0.1
1274	 axes unitcell
1275	 axes on
1276
1277
1278calculate hydrogens TRUE
1279 -- calculates hydrogens and multiple bonding
1280 -- same as
1281
1282    calculate hydrogens
1283    connect aromatic modify
1284    calculate aromatic
1285
1286 -- similar to, but not identical to set pdbAddHydrogens
1287 -- allows reasonable addition of multiple bonds to proteins after loading
1288
1289
1290
1291
1292JmolVersion="14.31.26"
1293  also 15.1.26
1294
1295new feature: $isosurface.getProperty("values"), $isosurface.getProperty("vertices") corrected for invalid vertices
1296
1297bug fix: getProperty("isosurfaceData.vertices") returning too many vertices
1298 - retrieves only the vertices that are on the surface, not excluded vertices
1299 - retrieves only vertices for selected sets if using SET or SUBSET
1300 - works best with ISOSURFACE sasurface (much faster than SOLVENT or MOLECULAR)
1301 - can be used with ISOSURFACE solvent or ISOSURFACE molecular
1302   with careful adjustment of solvent probe diameter (1.2 recommended, not 1.4)
1303   and RESOLUTION
1304 - with 1.4, there is a tendency to get interior artifacts
1305 - note that this function will return "null" if there is no isosurface or if
1306   no single isosurface is selected (by issuing ISOSURFACE ID xxx ON, for instance)
1307
1308new feature: getProperty("isosurfaceData.allVertices")
1309 - returns all vertices, even those excluded as interior artifacts or from unselected sets
1310
1311load =6nef
1312isosurface sasurface
1313x=$isosurface1.getproperty("vertices")
1314{*}.property_d = {*}.distance.min(x)
1315color property_d
1316slab 50; slab on
1317draw points @x  // to visualize the surface points themselves
1318
1319bug fix: Cif2Reader should accept UTF-8 signature "BOM" of three bytes 0xEF 0xBB 0xBF (not 0xFEFF)
1320
1321JmolVersion="14.31.25"
1322  also 15.1.25
1323
1324bug fix: isosurface set 1   showing 2nd largest, should show largest
1325bug fix: save state for isosurface with one set off by one
1326bug fix: getProperty("isosurfaceData") fails for pocket cavities
1327
1328JmolVersion="14.31.24"
1329  also 15.1.24
1330
1331note: isosurface #sets is from print getProperty("shapeInfo.Isosurface[1].volume").length
1332bug fix: isosurface set 0   not working
1333bug fix: calculate surfacedistance fails -- wrong parameter in Java method call
1334bug fix: MoldenReader requires [MO] to be last tag
1335bug fix: MoldenReader should not report energy units (not always eV)
1336bug fix: DnD script into script console should run that script.
1337bug fix: AboutDialog using old splash image
1338
1339JmolVersion="14.31.23"
1340  also 15.1.23
1341
1342bug fix: STL and hermite display missing last two residues of trace
1343
1344JmolVersion="14.31.22"
1345  also 15.1.22
1346
1347new feature: isosurface subset [1 3 5] cavity vdw
1348 - allows more than one set to be displayed
1349
1350new feature: isosurface cavity 1.2 50 vdw
1351 - increases maximum envelope radius from 10 to 50
1352 - note that large envelope radii can produce artifacts for pocket cavities
1353 - for example:
1354
1355  load =1wp1  filter "biomolecule 1"
1356  isosurface set 1 select {protein} only pocket cavity 3 20
1357  isosurface slab none slab plane x=0
1358
1359JmolVersion="14.31.21"
1360  also 15.1.21
1361
1362new feature: InChIKey generation:
1363       load $morphine; print {*}.find("inchi", "key");
1364   - can be combined with any other valid inchi flag:
1365       load $morphine;print {*}.find("inchi","srel key");
1366
1367new feature: {*}.inchi(options) same as {*}.find("inchi",options);
1368	   load $morphine; print {*}.inchi("key");
1369
1370new feature: InChI or InChIKey from SMILES using .inchi():
1371   print "CCCC".inchi()  // uses load("$CCCC")
1372   print "CCCC".inchi("key")
1373
1374new feature: InChI or InChIKey from NCI or PubChem shortcut using .inchi():
1375   print "$caffeine".inchi();
1376   print "$CCCC".inchi();
1377   print ":caffeine".inchi("key");
1378   print ":smiles:CCCC".inchi();
1379
1380new feature: InChI or InChIKey from any MOL file data source using .inchi():
1381   print load("foo.mol").inchi("key");
1382
1383new feature: InChIKey from InChI:
1384
1385	$ x = ":morphine".inchi()
1386	$ print x
1387	InChI=1S/C17H19NO3/c1-18-7-6-17-10-3-5-13(20)16(17)21-15-12(19)4-2-9(14(15)17)8-11(10)18/h2-5,10-11,13,16,19-20H,6-8H2,1H3/t10-,11+,13-,16-,17-/m0/s1
1388	$ print x.inchi("key")
1389	BQJCRHHNABKAKU-KBQPJGBKSA-N
1390
1391
1392
1393bug: "xxx".find("sequence") assumes xxx is a set of one-character residue IDs
1394
1395new feature: adds "xxx".find("sequence",true)
1396 - case-sensitive text search
1397
1398new feature: adds "xxx".find("sequence",false)
1399 - case-insensitive text search
1400
1401
1402JmolVersion="14.31.20"
1403  also 15.1.20
1404
1405bug fix: GamessReader should read ENERGY, MP2, CSDD, and CSDD(T) energy types (Mark Perri)
1406 - adds _M.EnergyType
1407
1408bug fix: VaspOutcarReader upgrade for Vasp6
1409
1410new feature: initialize INCHI
1411   - for JavaScript specifically, loads the inchi-wasm module asynchronously.
1412   - allows the very first call to {*}.find("inchi") to be active.
1413   - note that a very first call to Jmol.evaluateVar(applet,"{*}.find('inchi')") will still fail.
1414
1415new feature: {*}.find("inchi")
1416new feature: {*}.find("inchi",flags)
1417   - generates InChIs from modelset atoms
1418   - integrates jni-inchi-0.7-jar-with-dependencies.jar
1419   - uses inchi-wasm for JavaScript (R.Apodaca https://github.com/rapodaca/inchi-wasm)
1420   - flags include (https://www.inchi-trust.org/technical-faq-2):
1421        perception flags: DoNotAddH SNon NEWPSOFF
1422        stereo flags: SRel SRac SUCF
1423        more flags: NEWPSOFF SUU SLUUD RecMet FixedH KET 15T
1424        java-only flags: key outputsdf (Java only; still no InChIKey for JavaScript)
1425   - JavaScript is InChI 1.05; Java is still 1.03
1426   - note: JavaScript-only directories _WASM and _ES6 should not be processed by Google Closure Compiler
1427
1428JmolVersion="14.31.19"
1429  -- was released as an overwrite of 14.31.18 :(
1430
1431JmolVersion="14.31.18"
1432 also 15.1.18
1433
1434  bug fix: MacSpartan Release 1.0.3 (ancient!) skips orientation and orbitals
1435  bug fix: SHOW SPACEGROUP fails for nonstandard space group (=ams/quartz)
1436
1437
1438  new feature: Topology CIF (TopoCifParser.java) reading of _topol_xxx records
1439          topoCIF filter "topos_type=x" where x is v, vw, hb, or some concatentation of those using "+"
1440          topoCIF filter "topos_ignore" skips reading of _topol records, reading as standard CIF
1441
1442  undocumented: set hiddenLinesDashed (14.8.0)
1443
1444
1445JmolVersion="14.31.17"
1446  also 15.1.17
1447
1448  bug fix: print 2 > 1.0 gives false. typo introduced 2020.10.02 causes int[>,<,>=,<=] float to fail
1449  bug fix: minimizer step reports should be in user units, not native
1450  bug fix: minimizer initial/final reports should state "/mol" for units
1451
1452JmolVersion="14.31.16"
1453  also 15.1.16
1454
1455  new feature: (undocumented) now("message")
1456  new feature: now("message","format")
1457
1458  bug fix: print load("t.tar") should act as load("t.tar|.") to give directory
1459  bug fix: MO linear combination should not show type in info
1460  bug fix: MO squared should show ^2 in info
1461
1462// there is no 14.31.15
1463
1464JmolVersion="14.31.14"
1465  also 15.1.15
1466
1467new feature: TAR file reader with zip-like entry loading
1468  load "t.tar|guest/77317/output.log"
1469
1470new feature: GenNBOReader supports older NBO 3.0 output.properties rather than missing .46 labels file
1471new feature: NBO command expanded to allow named orbitals
1472   NBO "C1-C2"
1473   NBO TYPE PNBO "C1-C2"
1474
1475JmolVersion="14.31.13"
1476  also 15.1.14
1477
1478bug fix: MoldenReader fails to read [5F] if that record is after the [MO] block.
1479bug fix: GenNBOReader does not accept spherical s, p designations: 151 152 153 (wh6-a.31)
1480
1481JmolVersion="14.31.12"
1482 also 15.1.14
1483
1484bug fix: minimization constraint broken in 14.29.45
1485
1486JmolVersion="14.31.11"
1487 also 15.1.13
1488
1489bug fix: adds fix in script compiler for nonbreaking
1490         space nbsp; \u00a0 from clipping browser text
1491
1492JmolVersion="14.31.10"
1493  also 15.1.12
1494
1495bug fix: dots -1.0 does not imply ONLY
1496
1497JmolVersion="14.31.9"
1498  also 15.1.11
1499
1500bug fix: set pdbaddhydrogens does not work with PDB files that have some H atoms (but no multiple bonds)
1501bug fix: MOVETO quaternion   jumps (seconds=0) if crude check for change fails
1502
1503JmolVersion="14.31.8"
1504  also 15.1.10
1505
1506new feature: point(["{1,2,3}","{2,3,4}",....])
1507bug fix: large integer number != operator failure
1508bug fix: fuxyz vs. fxyz and uxyz
1509distribution: JSpecview not built in 14.31.5
1510
1511JmolVersion="14.31.7"
1512  also 15.1.9
1513
1514bug fix: PSE file saved to PNGJ may not fully reload (missing surface, for example)
1515bug fix: atom.occupancy of 0.01 saved as 0.0
1516
1517JmolVersion="14.31.6"
1518  also 15.1.8
1519bug fix: msCIF reader not reading ICDD Fourier modulated file.
1520
1521JmolVersion="14.31.5"
1522
1523bug fix: https for NMRDB
1524bug fix: JSpecview applies ##SHIFTREFERENCE as HZ for data in PPM
1525bug fix: JSpecview must ignore ##SHIFTREFERENCE for JEOL, at least for $$ JEOL NMR v1.10
1526
1527JmolVersion="14.31.4"
1528
1529bug fix: print format("%0.-3s", "testing")   "-" does nothing
1530
1531new feature: isosurface S1 VAL [points or atoms] SELECT....
1532  - calculates isosurface values for a set of points or atoms
1533  - values are created during surface constructions, not after
1534  - for solvent and molecular surfaces, negative value is "inside"; positive is "outside"
1535  - surfaces that are not calculated will give 0 for all values
1536
1537new feature: $s1.getProperty("values");
1538  - retrieves the array of values produced by isosurface s1 VAL
1539  - example:
1540
1541		  load $caffeine
1542		  isosurface s1 value {*} select {!_H} only vdw 50% translucent
1543		  {*}.property_d  = $s1.getproperty("value")
1544		  color property_d
1545
1546bug fix: NWChem reader does not ignore file-save data block properly
1547bug fix: get property fileInfo initially or after ZAP throws exception
1548bug fix: isosurface map colorscheme "rwb" fails, whereas color isosurface "rwb" works
1549
1550JmolVersion="14.31.3"
1551
1552bug fix: Jmol app does not allow width smaller than about 350 pixels
1553
1554JmolVersion="14.31.2"
1555
1556bug fix: draw pointgroup C2 3   draws all C2 axes, not just the third
1557
1558JmolVersion="14.31.1"
1559
1560bug fix: SYNC/sockets should not automatically subscribe to CLICK (which includes drag events)
1561bug fix: "WRITE IMAGE width height" (with no file name) causes array out of bounds exception
1562bug fix: SYNC command sending not working with raw JSON or Jmol associative arrays
1563
1564JmolVersion="14.31.0"
1565
1566new feature: Switch to Java 7, allowing for string-based switch and Files.readAllBytes().
1567
1568bug fix: ellipsoids "csa" scale 0.5 on   does not scale
1569bug fix: implicit refresh required after translateSelected
1570
1571new feature: Gaussian reader reads NMR shielding tensors as "csa"
1572for example:
1573
1574	load EtOH-nmr.out
1575	frame 2;
1576	wireframe only
1577	ellipsoids set "csa" scale 0.5
1578	ellipsoids on
1579
1580new feature: Gaussian reader reads NMR_J_coupling data
1581new feature: atom properties can be float[][] arrays
1582 -- for atom-atom values
1583new feature: MEASUREMENT property_xxx
1584 -- for 2D float[][] properties
1585new feature: MEASUREMENT VALUE x.x
1586 -- sets a fixed value for a standard measurement
1587new feature: measurement unit "+xxx" means abs(value)
1588 -- specifically, "+hz" useful for calculation data
1589new feature: measurement "+hz" units automatically use property_J values
1590new feature: MEASUREMENT "<unit>" where <unit> is valid measurement unit
1591new feature: measure() allows "property_xxx"
1592new feature: measure() allows "<unit>"
1593for example:
1594
1595load EtOH-nmr.out
1596frame 2;
1597print @@3.property_J.format("JSON")
1598
1599 >> [ [ 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-5.8511596,132.96,0.0,-2.16701,3.6352599,1.4761999,1.5346,-0.042426,-11.6895 ] ]
1600
1601print measure(@@2, {model=2}, "property_J", "").format("JSON")
1602
1603 >> [ 124.307,0.0,132.96,119.271,9.69322,0.75008297,4.29308,-6.40836,115.875 ]
1604
1605
1606measure @@2 @@3 "+hz"  // "+hz" for absolute value and indicates we want to use this property
1607
1608measure @@2 @@3 property_J "hz"
1609
1610print measure(@@2, @@3, "property_J", "hz")
1611
1612 >> property_J 	133.0 	"133.0 hz" 	C2/2 #2 	H3/2 #3
1613
1614print measure(@@2, @@8, "property_J", "+hz")
1615
1616 >> property_J 	6.4 	"6.4 hz" 	C2/2 #2 	O8/2 #8
1617
1618
1619new feature: SYNC sockets completely rewritten, allowing for substantially more
1620             feedback and simpler JSON-based interface. Many features of the
1621             Molecular Playground now implemented in Jmol itself. Features include:
1622              - simplification of sockets, allowing for just one that is use for
1623                input and outoput
1624              - default short-message callbacks for all significant callbacks
1625              - added set XxxxCallback SYNC:ON and SYNC:OFF for subscribing to
1626                full callback Object[] data information.
1627              - better JSON creation/parsing
1628              - simpler class structure
1629              - allows Molecular Playground-like gestures to be socket-defined.
1630
1631             This from org.openscience.jmol.appl.jsonkiosk.JsonNioService:
1632
1633/**
1634 * A class for interacting with Jmol over local sockets.
1635 *
1636 * See also org.molecularplayground.MPJmolApp.java for how this works.
1637 * Note that this service does not require MPJmolApp -- it is a package
1638 * in the standard Jmol app.
1639 *
1640 * Listens over a port on the local host for instructions on what to display.
1641 * Instructions come in over the port as JSON strings.
1642 *
1643 * This class uses the Naga asynchronous socket network I/O package (NIO), the
1644 * JSON.org JSON package and Jmol.
1645 *
1646 * http://code.google.com/p/naga/
1647 *
1648 * Initial versions of this code, including the JSON-base protocol were created
1649 * by Adam Williams, U-Mass Amherst see http://MolecularPlayground.org and
1650 * org.openscience.jmol.molecularplayground.MPJmolApp.java
1651 *
1652 * <code>
1653 *
1654 * Sequence of events:
1655 *
1656 * 1) Jmol initiates server listening on a port using the JmolScript
1657 *    command with an arbitrary negative port number.
1658 *    (-30000 used here just for an example):
1659 *
1660 *    sync -30000
1661 *
1662 * This can be done also through the command line using
1663 *
1664 *    jmol -P -30000
1665 *
1666 * or
1667 *
1668 *    jmol --port -30000
1669 *
1670 * Jmol will respond to System.out:
1671 *
1672 *    JsonNioServerThread-JmolNioServer JsonNioServerSocket on 30000
1673 *
1674 *
1675 * 2) Client sends handshake to port 30000. As with all communications to this service,
1676 *    there must be no new-line characters (\n) ANYWHERE in the JSON being sent EXCEPT
1677 *    for a single message terminator:
1678 *
1679 *
1680 *   {"magic": "JmolApp", "role": "out"}\n
1681 *
1682 * where "out" here indicates that this socket is for Jmol (reply) output.
1683 *
1684 * Jmol will reply with the 30-byte response:
1685 *
1686 *   {"type":"reply","reply":"OK"}\n
1687 *
1688 * (The client may see only 29 bytes, as it may or may not strip the final \n.)
1689 *
1690 * Optionally, the client may also indicate a specified port for Jmol input.
1691 * But typically this is just the currently active port.
1692 *
1693 *   {"magic": "JmolApp", "role": "in"}\n
1694 *
1695 *   Jmol will reply with
1696 *
1697 *   {"type": "reply", "reply": "OK"}\n;
1698 *
1699 *
1700 * 3) Client sequentially sends Jmol script commands over the "in" socket:
1701 *
1702 *   {"type": "command", "command": command}
1703 *
1704 * where required command is some JSON-escaped string such as "rotate x 30" or "load $caffeine".
1705 * For example:
1706 *
1707 *   {"type": "command", "command": "var atoms = {_C or _H};select atoms"}\n
1708 *
1709 *
1710 * For the rest of this discussion, we will use the Jmol command that communicates with another Jmol instance
1711 * rather than this JSON context:
1712 *
1713 *   SYNC 30000 "var atoms = {_C or _H};select atoms"
1714 *
1715 * in this case.
1716 *
1717 *
1718 * 4) Jmol throughout this process is sending replies that come
1719 *    from the Jmol Statuslistener class. For example:
1720 *
1721 *  {"type":"reply","reply":"SCRIPT:script 8 started"}
1722 *  {"type":"reply","reply":"SCRIPT:Script completed"}
1723 *  {"type":"reply","reply":"SCRIPT:Jmol script terminated"}
1724 *
1725 * Note that your client will be subscribed to many of the Jmol status callbacks
1726 * (see org.openscience.jmol.app.jmolpanel.StatusListener), including:
1727 *
1728 *    LOADSTRUCT
1729 *    ANIMFRAME
1730 *    SCRIPT
1731 *    ECHO
1732 *    PICK
1733 *    CLICK
1734 *    RESIZE
1735 *    ERROR
1736 *    MINIMIZATION
1737 *    STRUCTUREMODIFIED
1738 *
1739 * All scripts and callback messages run in order but asynchronously in Jmol. You do not need
1740 * to wait for one script to be finished before issuing another; there is a queue that handles that.
1741 * If you want to be sure that a particular script has been run, simply add a MESSAGE command
1742 * as its last part:
1743 *
1744 *    sync 30000 "background blue;message The background is blue now"
1745 *
1746 *  and it will appear as a SCRIPT callback:
1747 *
1748 *     {"type":"reply","reply":"SCRIPT:The background is blue now"}
1749 *
1750 *  after which you can handle that event appropriately.
1751 *
1752 *  The SCRIPT callback can be particularly useful to monitor:
1753 *
1754 *   sync 30000 "backgrund blue"
1755 *
1756 *  {"type":"reply","reply":"SCRIPT:script compiler ERROR: command expected\n----\n          >>>> backgrund blue <<<<"}
1757 *
1758 *  Note that the ERROR callback does not fire for compile errors,
1759 *  only for errors found while running a parsed script:
1760 *
1761 *  {"type":"reply","reply":"ERROR:ScriptException"}
1762 *
1763 *  Note that all of these messages are "thumbnails" in the sense that they are just a message string.
1764 *  You can subscribe to a full report for any of these callbacks using 'SYNC:ON' for the
1765 *  callback function:
1766 *
1767 *     set XxxxxCallback SYNC:ON
1768 *
1769 *  For example, issuing
1770 *
1771 *     sync 30000 "load $caffeine"
1772 *
1773 *  gives the simple reply:
1774 *
1775 *     {"type":"reply","reply":"LOADSTRUCT:https://cactus.nci.nih.gov/chemical/structure/caffeine/file?format=sdf&get3d=true"}
1776 *
1777 *  but after
1778 *
1779 *     sync 30000 "set LoadStructCallback 'SYNC:ON'
1780 *
1781 *  we get additional details, an array of data with nine elements:
1782 *
1783 *  {"type":"reply","reply":["LOADSTRUCT",
1784 *                           "https://cactus.nci.nih.gov/chemical/structure/caffeine/file?format=sdf&get3d=true",
1785 *                           "file?format=sdf&get3d=true",
1786 *                           "C8H10N4O2", null, 3, "1.1", "1.1", null]}
1787 *
1788 *  Exact specifications for these callbacks are not well documented.
1789 *  See org.jmol.viewer.StatusManager code for details.
1790 *
1791 *  Remove the callback listener using
1792 *
1793 *     set XxxxxCallback SYNC:OFF
1794 *
1795 *  Note that unlike Java, you get only one SYNC callback; this is not an array of listeners.
1796 *
1797 *
1798 * 5) Shutdown can be requested by sending
1799 *
1800 *   {"type": "quit"}\n
1801 *
1802 *  or by issuing the command
1803 *
1804 *    sync 30000 "exitjmol"
1805 *
1806 *
1807 * Note that the Molecular Playground implemented an extensive set of gesture-handling methods
1808 * that are also available via this interface. Many of these methods utilize the JmolViewer.syncScript()
1809 * method, which directly manipulates the display as though someone were using a mouse.
1810 *
1811 *   {"type" : "move", "style" : "rotate", "x" : deltaX, "y", deltaY }
1812 *   {"type" : "move", "style" : "translate", "x" : deltaX, "y", deltaY }
1813 *   {"type" : "move", "style" : "zoom", "scale" : scale }  (1.0 = 100%)
1814 *   {"type" : "sync", "sync" : syncText }
1815 *   {"type" : "touch",
1816 *        "eventType" : eventType,
1817 *        "touchID"   : touchID,
1818 *        "iData"     : idata,
1819 *        "time"      : time, "x" : x, "y" : y, "z" : z }
1820 *
1821 *   For details on the "touch" type, see org.jmol.viewer.ActionManagerMT::processEvent
1822 *
1823 *   Note that all of the move and sync commands utilize the Jmol sync functionality originally
1824 *   intended for applets. So any valid sync command may be used with the "sync" style. These include
1825 *   essentially all the actions that a user can make with a mouse, including the
1826 *   following, where the notation <....> represents a number of a given type. These
1827 *   events interrupt any currently running script, just as with typical mouse actions.
1828 *
1829 *   "centerAt <int:x> <int:y> <float:ptx> <float:pty> <float:ptz>"
1830 *      -- set {ptx,pty,ptz} at screen (x,y)
1831 *   "rotateMolecule <float:deltaX> <float:deltaY>"
1832 *   "rotateXYBy <float:deltaX> <float:deltaY>"
1833 *   "rotateZBy <int:degrees>"
1834 *   "rotateZBy <int:degrees> <int:x> <int:y>" (with center reset)
1835 *   "rotateArcBall <int:x> <int:y> <float:factor>"
1836 *   "spinXYBy <int:x> <int:y> <float:speed>"
1837 *      -- a "flick" gesture
1838 *   "translateXYBy <float:deltaX, float:deltaY>"
1839 *   "zoomBy <int:pixels>"
1840 *   "zoomByFactor <float:factor>"
1841 *   "zoomByFactor <float:factor> <int:x> <int:y>" (with center reset)
1842 *
1843 *
1844 * </code>
1845 */
1846
1847JmolVersion="14.30.3"
1848
1849new feature: FAHReader  FAH:: reads FoldingAtHome Top.json and FrameNNN.json files
1850 -- FAH:: is required for Frame files but not the Top file.
1851 -- automatic calculation of structure using DSSP
1852 -- Both files are required; three load options:
1853
1854    LOAD FILES "ViewerTop.json" + "ViewerFrame22.json" // explicit joining to two files
1855
1856    LOAD ViewerTop.json;
1857    LOAD XYZ FAH::ViewerFrame22.json   // first the atoms, then the coordinates
1858
1859    LOAD FAH::ViewerFrame22.json        // just the coordinates with associated ViewerTop.json assumed present
1860
1861 -- Subsequent calls to LOAD XYZ will replace coordinates and recalculate DSSP only.
1862
1863
1864JmolVersion="14.30.2"
1865
1866bug fix: CrystalReader fails to read models in CRYSTAL17 double-walled nanotube file tn0.out
1867
1868JmolVersion="14.30.1"
1869
1870new feature: (undocumented) set picking dragMolecule
1871 -- acts like set picking dragSelected
1872 -- LEFT-drag to translate; ALT-LEFT-drag to rotate
1873 -- useful for two more molecules (covalently bonded units)
1874
1875new feature: set picking dragModel
1876 -- acts like set picking dragMolecule or dragSelected
1877 -- LEFT-drag to translate; ALT-LEFT-drag to rotate
1878 -- useful for two more models not loaded using set appendNew FALSE
1879
1880
1881JmolVersion="14.30.0"
1882
1883
1884bug fix: CrystalReader for slab nanotubes.
1885 - note that we are not processing the nonstandard helical symmetry operations
1886
1887Note - The move to a new minor version (14.30) is due to changes in the
1888------ Jmol Java/SwingJS application, not the JavaScript version. In particular,
1889------ changes in the way the org.openscience.jmol.app classes are
1890------ organized required taking this step.
1891
1892new feature: set minimizationMaxAtoms
1893  - maximum number of atoms allowed for MMFF minimization
1894  - defaults to 200
1895
1896new feature: MEASURE SEARCH "{[H]}CC{[H]}"
1897  - uses SMARTS searching, selecting only the specified atoms
1898    (in this case, all vicinal hydrogen atoms attached to carbon)
1899  - actually available but undocumented since 2013
1900
1901new feature: SET MEASUREMENTUNITS HZ
1902  - for example, set measurementUnits HZ; MEASURE SEARCH "{[H]}CC{[H]}"  will display all 1H-1H coupling constants for a model
1903  - display calculated three-bond (standard vicinal) H-H J coupling constants (SMARTS {[H]}CC{[H]}) calculated
1904    using Haasnoot-Altona-Karplus substituent electronegativity-adjusted algorithm instead of distances
1905  - If there are fewer than three substituents on each central atom, or if
1906    either central atom is not carbon, defaults to general Karplus equation.
1907  - see org.jmol.quantum.NMRCalculation.java for algorithm and bibliographic details
1908  - expanded from use in solid-state NMR to any model EXCEPT magres files,
1909    which instead use HZ in association with solid-state tensors
1910
1911new feature: SET MEASUREMENTUNITS NOE_HZ
1912  - adds NOE calculation for H atoms that are more then three bonds apart
1913    along with vicinal and geminal
1914  - not validated; from Janocchio 1.1 (https://sourceforge.net/projects/janocchio/)
1915
1916new feature: Janocchio application included as a plugin (preliminary)
1917  - Java only; totally experimental; VERY preliminary
1918  - org.openscience.jmol.app.janocchio
1919  - required some refactoring of Jmol app classes
1920  - commit number 22001!
1921
1922new feature: LOAD ... CENTROID
1923  - for molecular crystal structures
1924  - loads one or more unit cells (as specified by {nx ny nz})
1925    exploring covalent bonding so that molecules that have their centroid
1926    (center of geometry) within the specified block of cells are built.
1927  - available but undocumented since 2011
1928  - example: load =cod/1001253 {1 1 1} centroid
1929    note that {1 1 1} here is unnecessary, as it is the default
1930
1931bug fix: "DOMReader" not "DOMReadaer" in File Manager
1932
1933JmolVersion="14.29.55"
1934
1935bug fix: show chemical image has no image
1936bug fix: dotted lines with antialiasing are too thin and half the spacing
1937
1938JmolVersion="14.29.54"
1939
1940new feature: ELLIPSOID ID xx axes [...] [...] [...]
1941new feature: ELLIPSOID ID xx axes [ [...][...][...] ]
1942new feature: ELLIPSOID ID xx axes [ pt pt pt ]
1943new feature: ELLIPSOID ID xx axes matrix3f
1944new feature: ELLIPSOID ID xx scale [ a b c ]
1945new feature: ELLIPSOID ID xx scale pt
1946
1947new feature: set macroDirectory [default: https://chemapps.stolaf.edu/jmol/macros]
1948 - holds macros.json, which points to macro files
1949 - no longer hard-coded into Jmol
1950
1951new feature: adds MACRO topond
1952new feature: adds MACRO crystal
1953new feature: adds MACRO topology
1954new feature: adds filter "topos" to load command to allow for hypothetical unit cells with dimension a=1.
1955
1956bug fix: symop(@1,@2,"matrix") should give an array of matricies, one for each relevant operation
1957bug fix: print (-0.0001).format("%3.2f") should print 0.00, not -0.00
1958bug fix: CRYSTAL reader fixes for TOPOND output
1959bug fix: MOLDEN fix for allowing beta set to start with (nCoef + 1)
1960
1961JmolVersion="14.29.53"
1962
1963bug fix: PyMOL PSE reader broken for broken PyMOL 2.3.0
1964
1965JmolVersion="14.29.52"
1966
1967bug fix: CASTEP reader broken by Siesta %block check in Resolver
1968
1969
1970JmolVersion="14.29.51"
1971
1972bug fix: (undocumented) measure ID "xx" ... buggy
1973
1974	-fixes measure vertical center when using ID
1975    -adds id, hidden, visible to getproperty measurementInfo
1976
1977JmolVersion="14.29.50"
1978
1979bug fix: SiestaReader upgrade
1980bug fix: load =3dna/val   validation loading does not work
1981
1982JmolVersion="14.29.49"
1983
1984bug fix: isosurface cutoff +0.3   does not work to indicate positive only for difference electron density maps
1985bug fix: load =3dna/val   validation loading does not work (same reason as 14.29.28)
1986
1987JmolVersion="14.29.48"
1988
1989bug fix: LOAD xxxx:: broken in 14.29.25
1990
1991JmolVersion="14.29.47"
1992
1993bug fix: standard PDB files (no hydrogens and no multiple bonds) should not require /aromaticPlanar/
1994         in search() selection.
1995
1996JmolVersion="14.29.46"
1997
1998bug fix: ModelKit menu broken in 14.29.45
1999
2000JmolVersion="14.29.45"
2001
2002bug fix: Java applet fails with class not found / static reference error
2003bug fix: Spartan reader files missing from applet JAR collection
2004bug fix: SDF writing should preserve order of user data
2005
2006bug fix: symop(@3, @4, "array") should return the full set of all the operators that map atom 3 to atom 4
2007
2008new feature  intersection(ptLine, vLine, ptCenter, radius)
2009  -- intersection of a line with a sphere -- return list of 0, 1, or 2 points
2010
2011new feature: (array-of-hash).pivot(key)
2012 -- turns an array of hashes into a hash of arrays of hashes
2013 -- like a pivot table for an array, but based on the value of a hash
2014    key within each hash element of the array, not the element itself
2015 -- returns a (hash-of-arrays-of-hashes) of the array elements grouped
2016    by the stringified values of the specified key.
2017 -- for example:
2018
2019 	a = [
2020 	 {label:"C3", id:1},
2021 	 {label:"C3", id:2},
2022 	 {label:"C2", id:3}
2023 	 	]
2024
2025 	a.pivot("label") = {
2026 		"C3":[{label:"C3", id:1}, {label:"C3", id:2}],
2027 		"C2":[{label:"C2", id:3}]
2028 	 	}
2029
2030new feature: (array-of-hash).pivot(key1, key2, ...,sep)
2031 -- returns a (hash-of-array-of-hash) of the array elements grouped by the values of these keys,
2032        combined as a string using the separator given as the last parameter
2033 -- for example:
2034
2035 $ load =ams/halite 1 packed
2036 $ invariants = symop(@3,@3,"array")
2037 $ uniqueOps = invariants.pivot("label", "axispoint", "axisVector", "+")
2038
2039 This code is cataloging all of operators of space group #255 (F m 3 m) that
2040 leave atom 3 unchanged -- invariant. There are 48 such operations, but some of
2041 them are about the same axis. The two rotations for a given C3 or C4 are now combined
2042 into one element of uniqueOps, since they both have the same label, axispoint, and axisVector,
2043 just different rotations.
2044
2045new feature: SHOW xxxx/!whatever
2046 -- show lines without whatever using /!
2047
2048new feature MODELKIT command
2049 -- particularly designed for crystallographic work
2050 -- turning the modelkit on/off - same as SET MODELKITMODE:
2051
2052   modelkit (ON)
2053   modelkit OFF
2054
2055 -- configuration options include the following, where (xxx) is optional, CAPS is default:
2056
2057 MODELKIT  addHydrogens [TRUE|false]
2058 MODELKIT  clickToSetElement [TRUE|false]
2059 MODELKIT  showSymopInfo [TRUE|false]
2060
2061 MODELKIT  (mode) MOLECULAR
2062 MODELKIT  (mode) view
2063 MODELKIT  (mode)  edit
2064 MODELKIT
2065 MODELKIT  (unitcell) EXTEND
2066 MODELKIT  (unitcell) packed
2067
2068 MODELKIT  (edit) APPLYFULL
2069 MODELKIT  (edit) applyLocal
2070 MODELKIT  (edit) retainLocal
2071 MODELKIT   MODELKIT
2072 MODELKIT  (view) symop [n]
2073 MODELKIT  (view) symop "x,-y,z"
2074 MODELKIT  (view) symop [[4x4 matrix]]
2075
2076 MODELKIT  (view) offset {i j k}
2077
2078 MODELKIT  center @n
2079 MODELKIT  center {point} (can be fractional by adding "/1" to at least one coord)
2080 MODELKIT  center {atoms}
2081
2082 MODELKIT  (set) element [name or symbol]
2083
2084
2085 -- configuration options can be given sequentially within one MODELKIT command or in individual commands
2086
2087
2088 -- examples:
2089
2090  modelkit mode view symop 5 center @3
2091  modelkit mode view symop 5 center @3 offset {0 0 0}   // unitized [0,1)
2092
2093 -- action options include alternatives the commands in bold (ASSIGN is undocumented):
2094
2095  modelkit ROTATE ...  (for example, ROTATE BOND @1 @2 degrees)
2096  modelkit ROTATESELECTED ...
2097  modelkit ASSIGN ATOM @1 [symbol|pl|mi]
2098  modelkit ASSIGN BOND @1 [0,1,2,3,4,5,p,m]
2099  modelkit ASSIGN CONNECT @1 @2
2100
2101new feature DRAW SYMOP @2 OFFSET {1 0 0}
2102
2103 -- allows lattice OFFSET, where {0 0 0} is always into the unitcell [0, 1)
2104
2105
2106bug fix: MINIMIZE CONSTRAINT for dihedral does not work.
2107new feature set mkAddHydrogens    default true; set false to not add H atoms when working with modelkitmode
2108
2109JmolVersion="14.29.44"
2110
2111bug fix: 0 + {3.4, 0, 0} should give 3, not 0
2112bug fix:
2113
2114JmolVersion="14.29.43"
2115
2116bug fix: navigate TRACE does not work in JavaScript
2117bug fix: navigate TRACE followed by "quit" in console will not restart
2118
2119JmolVersion="14.29.42"
2120
2121bug fix: MolReader not assigning _M.dimension to "2D" or "3D", just the overall auxiliaryInfo.dimension
2122
2123JmolVersion="14.29.41"
2124
2125bug fix: CrystalReader does not skip over INFORMATION or WARNING line in CRYSTAL output files
2126
2127bug fix: symop("x,y,z",{0 0 1}) does not return correct value for unit cells oriented by a b c axes
2128
2129bug fix: OutputManager and FileManager fix for WRITE PDB "https://..." sending information to a server
2130
2131bug fix: JSmolJME.js miscodings cause error message in JSME
2132
2133bug fix: nmr_predict_HC.htm not correlating signals to structure correctly
2134
2135bug fix: JSpecView peak tabs for simulation or correlation in JmolJDX not proper width
2136
2137JmolVersion="14.29.40"
2138
2139bug fix: centerAt AVERAGE fix
2140
2141JmolVersion="14.29.39"
2142
2143new feature: capture SCRIPT "some script"
2144  - captures the given script
2145new feature: DELAY 1 while capturing inserts a one-second delay into the GIF animation
2146  - thus, the following is a +/-20-degree looping rock
2147    around the Y axis with a 2-second wait at each end:
2148
2149    CAPTURE "t.gif" LOOP SCRIPT "rotate y 20 20;delay 2;rotate y -40 -40;delay 2;rotate y 20 20;"
2150
2151bug fix: JSpecView inline loading fails due to null file name assignment - now "[inline]"
2152bug fix: JSpecView inline loading does not save data needed for export SOURCE
2153
2154
2155JmolVersion="14.29.38"
2156
2157bug fix: modelkit needs more slop for touch drag release and clicking
2158
2159new feature: CRYSTAL TOPOND TRHO and TLAT reader
2160  -- reads critical point information in Bader analysis
2161
2162JmolVersion="14.29.37"
2163
2164new feature: MO titleformat "...%3.1E"..." allows rounding of energy value
2165bug fix: (Java only) Jmol console does not accept paste with first character = '\n'
2166
2167JmolVersion="14.29.36"
2168
2169bug fix: getProperty("filecontents",filename) does not work.
2170
2171JmolVersion="14.29.35"
2172
2173bug fix: Jmol.jar does not contain JSpecView class files
2174
2175JmolVersion="14.29.34"
2176
2177bug fix: processing of MagneticCIF _space_group_magn.transform_BNS_Pp_abc  '-a+b,c,a+b;1/2,1,1/2'
2178         fails
2179
2180JmolVersion="14.29.33"
2181
2182bug fix: (JavaScript only) in state creation for wireframe and measure
2183          for integer Angstrom size, for example WIREFRAME 1.0
2184
2185JmolVersion="14.29.32"
2186
2187bug fix: (JavaScript only) script with raw {...} expression fails to compile
2188
2189JmolVersion="14.29.31"
2190
2191bug fix: (JavaScript only) ModelKit checkboxes broken in atom submenu. (JSmol jsmoljs/JmolMenu.js)
2192
2193JmolVersion="14.29.30"
2194
2195RELEASE NOTE: JmolApplet*.jar Java files are no longer distributed in JSmol.zip.
2196              See the main release zip file for these.
2197
2198bug fix: H--Y hydrogen bonds miscalculated due to length maximum miscoded in 14.29.27
2199    // JmolVersion="14.29.30" 01/27/2019 -- fixes bug of 10/29/2018
2200
2201JmolVersion="14.29.29"
2202
2203new feature: print intersection(point vLine center radius) // 11/28/18
2204 - returns a list of 0 to 2 points representing the intersection of
2205 - a line through point with vector vLine and a sphere of radius about center
2206 - allows for 3D building with constraints of a screen coordinate and a
2207   distance from an atom
2208
2209doc fix: intersection(point1 point2 point3) should be intersection(point1 vector1 point2)
2210 - closest point to point2 on a line through point1 in the direction vector1
2211
2212bug fix: intersection() function changes value of point2
2213
2214bug fix: CrystalReader not reading vibration data for fragment calculation
2215
2216JmolVersion="14.29.28"
2217
2218bug fix: modelkit appending broken in 14.29.25 10/10/18
2219
2220new feature: assign atom "C" {2 2 2}
2221 - adds an unbonded atom at the given position
2222
2223JmolVersion="14.29.27"
2224
2225new feature: CrystalReader auxiliary info:
2226 *
2227 *  primitiveToCrystal  M3 transforming primitive lattice to conventional lattice
2228 *
2229 *  mat4PrimitiveToCrystal  M4 for use in transforming symmetry operations
2230 *
2231 *  mat4CrystalToPrimitive  M4 convenience inverse of mat4PrimitiveToCrystal
2232 *
2233 *  fileSymmetryOperations  List<String> symmetry operators (primitive)
2234 *
2235 *  Drawing primitive unitcell operations:
2236 *
2237 *  ops = _M.fileSystemOperations
2238 *
2239 *    DRAW SYMOP @{ops[2]}
2240 *
2241 *  If using the conventional cell, you can use its operators, or you can
2242 *  limit yourself this primitive subset using:
2243 *
2244 *    mp2c = _M.mat4PrimitiveToCrystal
2245 *
2246 *    mc2p = _M.mat4CrystalToPrimitive
2247 *
2248 *    DRAW SYMOP @{mc2p * ops[2] * mp2c}
2249 *
2250bug fix: CrystalReader not showing proper primitive cell with UNITCELL PRIMITIVE
2251bug fix: missing == for matrix3f and matrix4f
2252bug fix: draw symop with offset unitcell misses planes
2253bug fix: calculate hbond too generous for H--Y bond length -- max set at 2.2 Angstroms
2254bug fix: Jmol application "first frame" toolbar button broken
2255bug fix: script "inline" broken
2256
2257JmolVersion="14.29.26"
2258
2259bug fix: unitcell command with fractional translation fails
2260bug fix: CRYSTAL slab file can end up with emtpy-atom model
2261
2262JmolVersion="14.29.25"
2263
2264bug fix: MCIF (magnetic cif) reader does not handle symmetry operations with n/16.
2265
2266JmolVersion="14.29.24"
2267
2268bug fix: set language broken for Jmol application
2269bug fix: CRYSTAL reader can read one last 0-atom model
2270bug fix: 3-membered aziridine with non-H substituent should be chiral.
2271bug fix: isosurface "?" fails in JavaScript
2272
2273JmolVersion="14.29.23"
2274
2275bug fix: draw HKL {1 2 2} (undocumented) not working
2276bug fix: draw PLANE @pickedList  not working
2277bug fix: draw intercept unitcell PLANE @pickedList not working
2278
2279JmolVersion="14.29.22"
2280
2281bug fix: (JSmol only) menu items that are checkboxes do not work
2282
2283https://sourceforge.net/p/jsmol/code/HEAD/tree/trunk/dist/tmp/coremenu.z.js?format=raw
2284https://sourceforge.net/p/jsmol/code/HEAD/tree/trunk/dist/tmp/corejsvmenu.z.js?format=raw
2285
2286can be placed in j2s/core as a quick fix
2287
2288JmolVersion="14.29.21"
2289
2290bug fix: set measurement 5 (integer; pixels) produces no line.
2291bug fix: polyhedra flat restored
2292
2293JmolVersion="14.29.20"
2294
2295feature change: removes (older, nonfunctional) NBO plug-in. (See GitHub Jmol-SwingJS)
2296new feature: allows plugin.properties to contain ";disabled", removing it from the Plug-In menu
2297new feature: adds ISOSURFACE [f1, filename1, f2, filename2, ...]
2298 - allows linear combination of isosurfaces
2299 - all grids must be identical (not checked internally - no error if this is not the case)
2300 - example is comparing crystal surface struture with and without binding of a surface molecule
2301 - e.g.   ISOSURFACE [1, "PtO.cube", -1, "Pt.cube", -1, "O.cube"]
2302 - can map a plane
2303 - e.g.   ISOSURFACE PLANE x=0.1 map [1, "PtO.cube", -1, "Pt.cube", -1, "O.cube"]
2304 - recommend using ISOSURFACE CACHE to convert to JVXL before saving as PNGJ
2305
2306
2307JmolVersion="14.29.19" // 2018.08.31
2308
2309bug fix: LOAD <old CRYSTAL output file> may not work (CrystalReader.java)
2310bug fix: LOAD ... supercell fails with multiple models (XtalSymmetry.java)
2311bug fix: state creation Spacefill output "2" not "2.0" (missing PT.escF(f) call in StateCreator.java)
2312
2313JmolVersion="14.29.18" // 2018.06.16
2314
2315bug fix: (JavaScript) modulation vector state in PNGJ or state not read back correctly from data
2316			 ("1.4E-45" read as 1.399999...e-45)
2317bug fix: SHOW SPACEGROUP with group 167 will show too many n-glides; three are g-glides
2318
2319JmolVersion="14.29.17" // 2018.06.15
2320
2321bug fix: magnetic modulations not factoring in static moment correctly
2322bug fix: symop(@1, @2, "id") does not return 1-N id of operation
2323bug fix: show spacegroup fails to show detailed operation list (broken in 14.20.5 8/30/17)
2324bug fix: getproperty spacegroupinfo broken for incommensurate cases
2325bug fix: unitcell "-a,-b,c;0,0,0.50482" not working
2326bug fix: unitcell("-a,-b,c;0,0,0.5") not working
2327bug fix: cif reader does not recognize PRIMITIVE keyword
2328bug fix: Guassian reader can fail if no lines are present after vibration section
2329
2330JmolVersion="14.29.16" // 2018.06.06
2331
2332bug fix: unitcell("a=10 b=10,c=20,alpha=90,beta=90,gamma=129") crashes Jmol
2333bug fix: pointgroup(x) crashes Jmol when x is a set of points
2334bug fix: UNITCELL parent not working
2335bug fix: Brillouin Zone id set to "" for unknown reason
2336bug fix: SMILES allene R/S chirality broken for some connections
2337 - print "C1.CC=[C@@]=[CH]1".find("smiles","chirality").join("") should be PP, not MM
2338
2339bug fix: undocumented unitcell {1500500500 1500500501 1} not working
2340 - notation for expanding cell=555 to 1000 cells (1000jjjkkk-1999jjjkkk)
2341 - due to large integer not being stored in float properly in Java
2342 - related to 1505050 1505051, which does work (expands capability to 100 cells, 100jjkk-199jjkk)
2343
2344bug fix: load xxxx FILL UNITCELL broken (should not need "conventional" or "primitive")
2345
2346bug fix: MSCIFReader not recognizing atom_site_Fourier_wave_vector_q1_coef
2347
2348bug fix: Magnetic incommensurate files crashing unnecessarily
2349
2350new feature: getproperty spaceGroupInfo
2351
2352
2353JmolVersion="14.29.15"
2354
2355new feature: print {xxx}.find("SMILES/molecule","CC...")
2356new feature: print {xxx}.find("SMARTS/molecule","CC...")
2357 - molecule-based SMILES or SMARTS
2358 - returns an array of matching molecules in {xxx}
2359 - array.count gives number of matching molecules
2360
2361bug fix: [array].distance.min([array]) does not work
2362
2363bug fix: Bilbao reader does not allow for a blank line that is " "
2364
2365bug fix: CrystalReader not reading vibrations properly for filter "CONV"
2366
2367bug fix: SMILES should allow [C@+1]
2368
2369JmolVersion="14.29.14"
2370
2371bug fix: MO calculation can truncate MO if moleule is shifted too far prior to creation of MO
2372
2373bug fix: MOL reader user data column-81 continuation '+' fix
2374
2375bug fix: LOAD OFFSET option can skip first atom
2376
2377bug fix: CIPChirality -- Rule 6 adds set ciprule6full option for rr bicyclo[2.2.2]octane in/out business
2378bug fix: CIPChirality -- Rule 5 adds needed S-ref
2379bug fix: CIPChirality -- Rule 4b/Rule 5 ordering correction
2380bug fix: CIPChirality -- should indicate M/P for allene-centered spiro case BH64_084
2381bug fix: CIPChirality -- should indicate "e/z" instead of E/Z" for special cases of a single enantiomorphic pair
2382bug fix: CIPChirality -- duplicates and mass Rule 2 fix JL_008
2383
2384JmolVersion="14.29.13"
2385
2386new feature: running CALCULATE CHIRALITY will generate
2387             a CIPInfo entry in the model's auxiliary info
2388             array indicating the decision
2389             points in the stereochemical analysis:
2390
2391    $ load $inositol
2392	$ select @14
2393	$ calculate chirality
2394	R
2395	$ print _M.CIPInfo.C14
2396		O8	--------------
2397		   1a
2398		C13	--------------
2399				(R)lll
2400		   4b
2401				(R)ll
2402		C16	--------------
2403		   1a
2404		H20	--------------
2405
2406
2407	- building of this structure disabled using SET TESTFLAG2
2408
2409
2410new feature: "<smiles string>".find("smiles","chirality")
2411 - creates an array indicating the stereochemical designator (R,S,r,s,M,P,m,p,E,Z) at each atom in the SMILES string
2412 - no structure is necessary
2413 - for example:
2414
2415 $ load $1,4-dihydroxycyclohexane
2416 $ calculate chirality
2417 rr
2418 $ show smiles
2419 "O[C@@H]1CC[C@@H](O)CC1"
2420 zap
2421 $ print "O[C@@H]1CC[C@@H](O)CC1".find("smiles","chirality").format("JSON")
2422 [ "","r","","","r","","","" ]
2423
2424 $ print "[C@@H]1(C)CC[C@H]2C(C)C.C1[C@@H]2O".find("smiles","chirality").format("JSON")
2425 [ "R","","","","S","","","","","S","" ]
2426
2427bug fix: CIP chirality did not recognize large conjugated rings as "mancude-like"
2428bug fix: model kit should not change selection when inverting a stereocenter
2429
2430bug fix: WRITE xxx.PDB not writing CONECT records
2431
2432JmolVersion="14.29.12"
2433
2434bug fix: jsmol.php security fix for sites implementing their own Info.serverURL
2435
2436bug fix: CrystalReader filer "conv" fix
2437
2438bug fix: MSCIFReader not recognizing atom_site_Fourier_wave_vector_q_coef
2439bug fix: MSCIFReader not recognizing atom_site_Fourier_wave_vector_q<n>_coef and _x,_y,_z in same block
2440
2441bug fix: GaussianReader broken for high-precision frequency data (broken in 14.29.10)
2442
2443new feature: GaussianReader orientation filters (default is ALL)
2444   -- filter 'orientation:input' (includes Z-Matrix)
2445   -- filter 'orientation:standard'
2446   -- filter 'orientation:all'
2447   -- note that vibrations are only returned if orientation is ALL or STANDARD
2448
2449new feature: CrystalReader returns atom property_irreducible:
2450   -- select property_irreducible > 0
2451   -- display property_irreducible > 0
2452
2453new feature: CrystalReader adds ellipsoid set "raman"
2454
2455
2456JmolVersion="14.29.11"
2457
2458bug fix: CrystalReader not handling symmetry for filter "conv"
2459bug fix: CrystalReader not properly generating vibrational modes
2460
2461code: refactored for SwingJS
2462code: refactored CrystalReader
2463
2464JmolVersion="14.29.10"
2465
2466bug fix: GaussianReader for fixed atoms in freq calculation
2467
2468JmolVersion="14.29.9v"
2469
2470bug fix: NBO
2471
2472JmolVersion="14.29.9"
2473
2474bug fix: NBO -- normalizations validated using allyl.nn for all types
2475
2476code: total switch to javajs.util.BS from javajs.util.BS
2477
2478JmolVersion="14.29.8"
2479
2480bug fix: NBO
2481
2482JmolVersion="14.29.7"
2483
2484bug fix: NBO
2485
2486
2487JmolVersion="14.29.6"
2488
2489bug fix: Matrix4f, Matrix3f should be output in format consistent with an matrix, not an array
2490 -- should not have space between opening and closing brackets
2491 -- should not use commas (not a critical distinction)
2492
2493 [[0.8362213	-0.5062382	0.21084802	52.988747]
2494  [0.5394281	0.8285579	-0.15003058	20.076633]
2495  [-0.09874859	0.23919612	0.96593684	46.393887]
2496  [0.0	0.0	0.0	1.0]]
2497
2498bug fix: genNBO reader failing for G orbitals (even though we cannot process them, the reader at least load them
2499
2500new feature: set infoFontSize
2501  -- for MO and NBO command
2502  -- default 20
2503
2504bug fix: red file load error message is too small to read
2505  -- font size increased to 20
2506
2507code: modular loading of F,G,H,I MO calculations only when needed
2508
2509JmolVersion="14.29.5" // released 2018.02.08
2510
2511bug fix:  (Java application only) Incorrect class file in Jmol.jar causes BOUNDBOX ON to fail
2512
2513JmolVersion="14.29.4" // released 2018.02.07
2514
2515bug fix: set hbondsrasmol false fails with O atom-only HOH group
2516bug fix: calculate pointgroup does not change with new atom positions
2517
2518JmolVersion="14.29.3" // released 2018.02.03
2519
2520bug fix: mac cut/paste enabled for Macs
2521bug fix: set autobond corrected
2522bug fix: changing an atom's element should delete all partial charges
2523bug fix: load AUDIO "xxx.wav"  broken in Java
2524bug fix: load AUDIO "xxx.wav"  broken in JavaScript
2525bug fix: loading of pdb file does not report HET = .... to console
2526bug fix: CONTACT leading to no contacts crashes Jmol.
2527bug fix: load FILES with filter does not work
2528bug fix: load =xxxx/val with filter does not save in state
2529   solution was to change "+" to "-" to indicate special two-file loading in this case
2530
2531new feature: set label picking icon in application
2532new feature: set label picking does not require shift for drag
2533new feature: set label picking allows double-click to set the label
2534
2535new feature: drag-drop of PNGJ into script opens editor (for movie.spt; use not implemented)
2536
2537new feature: set allowAudio (default TRUE)
2538
2539new feature: AUDIOcallback
2540 - used to continue after completion of an audio clip
2541 - parameter is a hashtable with information about the audio clip
2542
2543new feature: load AUDIO "xxx.wav" FILTER "...options..."
2544 - filter options include:
2545 -  id='....'  an identifier for this audio clip
2546 -  loop       loop until told to stop
2547 -  start='...', play='...', stop='...', ended='...' callback scripts allowed
2548 -  single word arguments allowed - for example, id=a2 ended=audioDone()
2549
2550note: These features will be included in a future AUDIO command
2551
2552JmolVersion="14.29.1" // released 2018.01.25
2553
2554new feature: select peptide, defined as:
2555				 protein && within(chain,monomer>1)&!within(chain,monomer>12)
2556
2557bug fix: isosurface EDS not working for mmCIF files.
2558
2559JmolVersion="14.28.4" // released 2018.01.25
2560
2561bug fix: script "minimize; calculate partialcharge" can cause exception
2562
2563bug fix: partial charges not reset to 0 after atom type change as with
2564          {_N}[2].element = "O"
2565
2566bug fix: isosurface CACHE should store isosurface as byte[] not String
2567         otherwise it is not saved in a subsequent WRITE xxx.PNG AS PNGJ
2568
2569
2570JmolVersion="14.28.3" // released 2018.01.19
2571
2572bug fix: mmtf broken - needs "/v1.0/"
2573bug fix: BCIF/CIF volume reader not properly assigning axes in some cases
2574bug fix: GAMESS reader does not work with symmetry indicated in input deck
2575
2576JmolVersion="14.28.2" // released 2018.01.17
2577
2578new feature: isosurface eds
2579 - generates electron density surface 2fo-fc for current PDB model
2580 - trimmed to structure
2581 - note that isosurface eds AS "t.bcif" will save the full data block to a BCIF file
2582
2583new feature: isosurface within 3 {e20:A} eds
2584 - generates electron density surface 2fo-fc for current PDB model
2585 - localized to WITHIN 	specification
2586 - note that adding AS "t.bcif" will save only the retrieved localized block to a BCIF file
2587
2588new feature: isosurface edsdiff
2589 - generates electron density surface fo-fc for current PDB model
2590 - trimmed to structure
2591
2592new feature: isosurface "=1eve/full"
2593 - generates electron density surface 2fo-fc for 1eve
2594 - reads and shows full data set, not trimmed to structure
2595
2596new feature: isosurface "=1eve/diff"
2597 - generates electron density surface fo-fc for 1eve
2598
2599new feature: isosurface "=1eve/diff/full"
2600 - generates electron density surface fo-fc for 1eve
2601 - reads and shows full data set, not trimmed to structure
2602
2603bug fix: for BCIF/CIF EBI density server data, switch to sigma_sampled from sigma_source
2604
2605JmolVersion="14.28.1" // released 2018.01.14
2606
2607new feature: WRITE CONTACT xxx.jvxl
2608 - saves a JVXL file for a contact
2609 - reload using ISOSURFACE xxx.jvxl, not CONTACT
2610
2611new feature: write contact "cache://t.jvxl"
2612 - saves a contact as a jvxl file in the cache
2613
2614new feature: isosurface "cache://t.jvxl"
2615 - loads an isosurface from a cached JVXL file
2616
2617new feature: generalized use of cache://
2618 - cache:// saves or retrieves files from the FileManager cache
2619 - cleared upon ZAP
2620 - for example, the following transfers a contact to an isosurface for saving to a PNGJ file
2621
2622    load =1eve
2623	zoom {e20:a} 0
2624	contact {e20:A} hbond
2625	write contact cache://t.jvxl
2626	isosurface cache://t.jvxl
2627	contact delete
2628	write t3.png as PNGJ
2629
2630
2631new feature: isosurface reads EBI density server files (BinaryCIF and CIF)
2632 -- for example:
2633   isosurface "https://www.ebi.ac.uk/pdbe/densities/x-ray/1eve/box/-3.434,55.646996,59.195/7.479,70.943,74.928?space=cartesian&encoding=bcif"
2634   isosurface "https://www.ebi.ac.uk/pdbe/densities/x-ray/1eve/box/-3.434,55.646996,59.195/7.479,70.943,74.928?space=cartesian&encoding=cif"
2635
2636new feature: Jmol automatically uses EBI density server BinaryCIF files when "within" keyword is used.
2637 -- for example:
2638
2639   load =1eve
2640   display e20
2641   zoom {displayed} 0
2642   isosurface within 4 {e20:A} "=1eve"
2643
2644 -- allows testing of non-binary CIF electron density files using .cif:
2645
2646   isosurface within 4 {e20:A} "=1eve.cif"
2647
2648bug fix: loading, modifying, and resaving a PNGJ file fails in Java
2649bug fix: JavaScript JSmol improperly saves a PNGJ file within a PNGJ file
2650
2651JmolVersion="14.27.2"
2652
2653new feature: frame MO
2654 - goes to first frame with a molecular orbital
2655
2656bug fix: [UNK] missing in atom identities, even when part of actual structures such as 3A0B
2657
2658bug fix: polyhedra ID p1 @11 to {connected(@11)} not working
2659  -- allows for $p1.getProperty(....)
2660
2661bug fix: load(filename, "JSON") should allow for files that start with "[" rather than "{"
2662
2663bug fix: JSJSON parser fails for leading whitespace in map values
2664
2665code: additions to QCJSONWriter and QCJSONReader
2666  - working with Jmol-datafiles/qcjson/preliminary
2667  - "QCJSON 0-0-0.Jmol_14.27.2__2017-12-11_09:38",
2668
2669JmolVersion="14.27.1" released 2017.12.11
2670
2671new feature: functions write("zip") and write("jmol")
2672 - allows creating a binary variable containing zip data
2673 - does not include preview.png (unlike write xxx.zip or xxx.jmol)
2674 - includes any local files (as for WRITE command)
2675 - "zip"  does not include remote-access files
2676 - "jmol" DOES include remote-access files
2677 - allows use of .pop() and .push() to remove, modify, or add files
2678 - same as write xxx.zip; x = load("xxx.zip",true) -- except includes no preview.png
2679
2680 - for example:
2681
2682   load $caffeine
2683   x = write("jmol")
2684   x.push("mydata","testing")
2685   write var x "test.zip"
2686   y = load("test.zip", true)
2687   print y.keys
2688      ...
2689   print y.mydata
2690
2691     testing
2692
2693   load test.zip
2694      ...
2695
2696   load $caffeine
2697   x = write("jmol")
2698   zap
2699   load var x
2700
2701
2702bug fix: CIPChirality adds "mancude system" averaging of atomic numbers in Rule 1a
2703
2704JmolVersion="14.26.1"
2705
2706new feature: experimental qcjson write format - ALPHA only
2707
2708bug fix: decimal formatter failing for 9.9999999 to 5 digits
2709bug fix: Jaguar reader not reading MOs; (working, but still does not read STO-3G)
2710
2711bug fix: direct call to sun.audio on some systems fails;
2712 -- moved to class openscience.jmol.jmolPanel.JmolAudio
2713 -- accessed by reflection, so not loaded unless needed.
2714
2715code - synchronized with NBOServe project. (2017.11.10)
2716
2717JmolVersion="14.25.2"
2718
2719bug fix: DCD (trajectory) reader failing when periodic lattice info is present
2720
2721JmolVersion="14.25.1"
2722
2723>> TODO NEEDS DOCUMENTING:
2724
2725new feature: polyhedra WIGNER      // Wigner-Seitz cell
2726new feature: polyhedra BRILLOUIN   // 1st Brillouin zone
2727new feature: polyhedra BRILLOUIN 1 // 1st Brillouin zone
2728new feature: polyhedra BRILLOUIN 2 // 2nd Brillouin zone
2729new feature: polyhedra BRILLOUIN -1 // Wigner-Seitz cell
2730new feature: polyhedra scale 3.0 BRILLOUIN 1  // scaled 1st Brillouin zone
2731
2732bug fix: MOL file reader should not autobond if number of bonds is 0.
2733
2734JmolVersion="14.24.2" // 2017.11.08
2735
2736bug fix: invertSelected was not clearing chirality
2737bug fix: JmolAppletSigned0.jar fails -- missing org/apache/tools
2738bug fix: SHOW SMILES sometimes missing allene chirality
2739bug fix: hbondsDistanceMaximum should not be limited by 2.5 max; increased maximum to 3.5
2740bug fix: hbondsDistanceMaximum and hbondsAngleMinimum should not be in state
2741
2742code: moved scriptEval.cmdInvertSelected to scriptext.cmdExt
2743
2744JmolVersion="14.24.1" // 2017.11.05
2745
2746new feature: MACRO bz; createWS("p1")
2747  -- creates a Wigner-Seitz cell as polygon id "p1"
2748  -- requires current unit cell to be primitive to work correctly
2749  -- polyhedron can be shifted using POLYHEDRA OFFSET
2750  -- default ID "pbz1_1_" for just CREATEWS()
2751
2752
2753new feature POLYHEDRA edgesOnly
2754  -- shows just edges
2755  -- operates on ALL polyhedra
2756  -- complements edges, noEdges, frontEdges
2757
2758new feature: select within(d, $p1) where $p1 is a polyhedron ID
2759  -- d = 0 is "on or within the polyhedron"
2760  -- d < 0 is "-d angstroms within polyhedron"
2761  -- d > 0 is "within d angstroms of polyhedron"
2762
2763bug fix: POLYHEDRA edges should inherit color, not use black as default
2764
2765bug fix: calculate CHIRALITY may fail to show Z for some seqCis systems
2766
2767new macros:
2768
2769    "aflow", "http://aflowlib.mems.duke.edu/users/jmolers/jmol/spt/AFLOW.spt", "AFLOW macros",
2770    "bz", "http://aflowlib.mems.duke.edu/users/jmolers/jmol/spt/bz.spt", "Brillouin Zone/Wigner-Seitz macros"
2771
2772
2773code: biomodel classes are being loaded prematurely due to @cystine definition involving cys.sg instead of cys and atomname=sg
2774
2775JmolVersion="14.23.1" // 2017.11.02
2776
2777new feature: load "" fill UNITCELL PRIMITIVE     (for files that are conventional)
2778new feature: load "" fill UNITCELL CONVENTIONAL  (for VASP files, which are primitive cells)
2779
2780bug fix: primitive unit cell incorrect for rhombohedral lattice space groups
2781         (trigonal R...; 146, 148, 155, 160, 161, 166, 167)
2782bug fix: (AFLOW specific) CIF for trigonal and hexagonal cells (itn 143-194) should orient rotated 60 deg cw
2783bug fix: LOAD ... SUPERCELL {2 2 2} broken
2784
2785JmolVersion="14.22.2"
2786
2787bug fix: PubChem partial charges are only to 0.01 precision, so a test in dipole creation of
2788         balanced charges must allow for more than that -- changed to 0.015. Case in point: :PF3.
2789
2790JmolVersion="14.22.1" // 2017.10.28
2791
2792new feature: draw BOUNDBOX BEST
2793 -- draws the best box around currently selected atoms
2794
2795bug fix: a.distance.min(b).min should not report 0 if a == b. (testing atom against itself should be skipped)
2796bug fix: SHOW BEST ROTATION just shows the current rotation, not the best rotation to use to get to the best view
2797bug fix: rotate BEST can fail with flat structures
2798bug fix: LOAD "" FILE BOUNDBOX does not include all atoms
2799
2800JmolVersion="14.21.1" // 2017.10.22
2801
2802new feature: set noDelay true sets all time delays to 0 and forces all file operations to be synchronous
2803
2804bug fix: CIP adds S4 symmetry check in Rule 6
2805bug fix: chirality broken for JavaScript in MSIE 11 due to range error
2806bug fix: Should be able to save PNGJ from menu even if zapped (because there might be a surface)
2807
2808JmolVersion="14.20.9"
2809
2810bug fix: JavaScript does not handle saving PNGJ from modified PNGJ
2811bug fix: JavaScript command SHOW NMR broken
2812
2813JmolVersion="14.20.8" // 2017.10.07
2814
2815bug fix: STEREO DTI never implemented for Java, only JavaScript
2816bug fix: color property_xxxx broken
2817bug fix: platformSpeed not actuated for wheel zoom.
2818
2819JmolVersion="14.20.7"
2820
2821bug fix: calculate chirality broken for JSmol (missing Integer.compare)
2822
2823JmolVersion="14.20.6"
2824
2825bug fix: MO HOMO + n delivers HOMO + 2*n
2826code: more efficient CIPChirality using breadth-first scanning for chirality descriptors
2827
2828JmolVersion="14.20.5" // 2017.08.29
2829
2830bug fix: isosurface intersect unitcell broken
2831bug fix: show spacegroup does not report H-M name
2832
2833JmolVersion="14.20.4" // 2017.08.09
2834
2835bug fix: SpartanSMOL reader for iSpartan files does not read charges or vibrational mode data
2836bug fix: CIPChirality fix for BH64_075; adding Rule 3b.
2837bug fix: CIPChirality new Rule 6 covers all special spiro cases and C3-symmetry
2838bug fix: SMILES generator fails for [2H]/C=C/[1H]
2839bug fix: write SDF fails for 1H. (Must use M  ISO.)
2840
2841JmolVersion="14.20.3" // 2017.07.20
2842
2843bug fix: ROTATE should not stop spin if it does not initiate a spin
2844bug fix: CIPChirality tests for CIP1966#31,#32 douple spirans and C3 compounds
2845bug fix: CIPChirality for Rule 2 using atomic masses and not for duplicate atoms
2846bug fix: MOL file reading where isotope is indicated in atom line and V item
2847bug fix: MOL reader fails for H1, D, T isotopes indicated as symbols along with isotope difference
2848
2849
2850JmolVersion="14.20.2" // 2017.07.09
2851
2852bug fix: CIPChirality adding presort for Rules 4a and 4c (test12.mol; 828 lines)
2853bug fix: write SDF and write MOL do not set atom parity field
2854bug fix: JavaScript JSmol broken for chirality due to bug in Clazz.clone(obj)
2855
2856bug fix: Upgrade of natural abundance average masses (no significant changes here):
2857
2858  // all numbers except radionuclides from:
2859  // Atomic weights of the elements 2013 (IUPAC Technical Report)
2860  // Juris Meija, Tyler B. Coplen, Michael Berglund, Willi A. Brand, Paul De Bi�vre,
2861  // Manfred Gr�ning, Norman E. Holden, Johanna Irrgeher, Robert D. Loss, Thomas Walczyk,
2862  // Thomas Prohaska  Published Online: 2016-02-24 | DOI: https://doi.org/10.1515/pac-2015-0305
2863  // https://www.degruyter.com/view/j/pac.2016.88.issue-3/pac-2015-0305/pac-2015-0305.xml
2864
2865    /* 1 H */ 1.008f, 4.002f,
2866    /* 2 Li */ 6.9675f, 9.012f,      10.8135f, 12.0106f, 14.006f, 15.999f, 18.998f, 20.1797f,
2867    /* 3 Na */ 22.989f, 24.307f,     26.981f, 28.084f, 30.973f, 32.059f, 35.4515f, 39.948f,
2868    /* 4 K */ 39.0983f, 40.078f, 44.955f, 47.867f, 50.9415f, 51.9961f, 54.938f, 55.845f, 58.933f, 58.6934f, 63.546f, 65.38f, 69.723f, 72.63f, 74.921f, 78.971f, 79.904f, 83.798f,
2869    /* 5 Rb */ 85.4678f, 87.62f, 88.905f, 91.224f, 92.906f, 95.95f, 98.91f, 101.07f, 102.905f, 106.42f, 107.8682f, 112.414f, 114.818f, 118.71f, 121.76f, 127.6f, 126.904f, 131.293f,
2870    /* 6 Cs, Ba, actinides */132.905f, 137.327f, 138.905f, 140.116f, 140.907f, 144.242f, 144.9f,  150.36f, 151.964f, 157.25f, 158.925f, 162.5f, 164.93f, 167.259f, 168.934f, 173.054f, 174.9668f,
2871    /* 6 Hf */  178.49f,180.947f,183.84f,186.207f,190.23f,192.217f,195.084f,196.966f,200.592f,204.3835f,207.2f,208.98f,210f, 210f, 222f,
2872    /* 7 Fr, Ra, lanthanides */ 223f, 226.03f, 227.03f, 232.0377f, 231.035f, 238.028f, 237.05f, 239.1f, 243.1f, 247.1f, 247.1f, 252.1f, 252.1f, 257.1f, 256.1f, 259.1f, 260.1f,
2873    /* 7 Rf - Mt */ 261f, 262f, 263f, 262f, 265f, 268f
2874
2875
2876JmolVersion="14.20.1" // 2017.07.06
2877
2878new feature: BZ2 compressed file reader
2879  -- uses org.apache.tools.bzip2.CBZip2InputStream v. 1.9.6
2880  -- Apache license
2881
2882bug fix: ADF reader not accepting Xx.name atom ids
2883
2884bug fix: SMILES generator can show wrong @/@@ or stereochemical type for some allenes and cumulenes
2885bug fix: CIPChirality additional Rules 1b, 4b, and 4c fixes (substituted cubanes; multiple branched branches; 841 lines)
2886
2887JmolVersion="14.19.1"  // 2017.06.25
2888
2889new feature: WRITE "SDF" implements atom value V  nnn ... information
2890 -- requires assigning the data property name "atom_values" in the model's molData property
2891 -- for example:
2892
2893  $ load $2,3-dichlorobutane
2894  $ molData = {"atom_values":"chirality"}
2895  $ model properties "molData" molData
2896  $ write dcb.sdf
2897
2898 -- note that if the model already has a molData property, then use the following to append to it:
2899
2900  $ molData = (_M.molData ? _M.molData : {})
2901  $ molData.atom_values = "chirality"
2902  $ model properties "molData" molData
2903
2904new feature: x = load("filename","JSON")
2905 -- loads JSON data into variable
2906
2907bug fix: CIPChirality: minor fixes for Rule 4b and 5 for BH64_012-015; better atropisomer check
2908bug fix; SPIN QUATERNION
2909bug fix: CENTERAT ABSOLUTE broken (since forever?)
2910bug fix: SPIN QUATERNION {0 0 -1 0} still does a positive, not negative, rotation
2911 (solution is to apply a miniscule rotation of 1e-10 degrees)
2912
2913bug fix: script array context [3 -0] becomes [3], as in [3 - 0]
2914
2915bug fix: SET ANTIALIASDISPLAY requires click [via resizeImage()]
2916bug fix: CIP gives wrong alkene root distance for cyclopropene
2917bug fix: WRITE of structure file does not report number of atoms and warn if selected is different from this molecule
2918bug fix: WRITE MOL using format 10f.5 instead of 10f.4 for x, y, z coordinates
2919bug fix: MOL/SDF files should truncate lines at 80 characters.
2920
2921JmolVersion="14.18.1"  // 2017.06.06
2922
2923bug fix: CIP misses Rule 4b cases where a branching atom has R or S chirality.
2924 -- see test_bt_P4.mol and test_bt_O3.mol (BH64.65 and BH64.66)
2925 -- see AY236.179 (3D structure was diasteriomer, so I missed that)
2926
2927bug fix: WRITE MOL should not generate > <JMOL_PARTIAL_CHARGES> because it is  not SDF format
2928bug fix: WRITE SDF should generate > <JMOL_PARTIAL_CHARGES> with a trailing space
2929
2930bug fix: (SMILES) targetString.find("SMILES",patternString) will fail for .[C@H]2 (new group and attached to a connection number)
2931bug fix: SHOW CHEMICAL SMILES fails when logLevel is set > 4
2932
2933new feature: WRITE SDF writes > <.... user data
2934 -- can be set using   MODEL PROPERTY "molData" x  where x is an associative array
2935 -- can be read using _M.molData
2936
2937new feature: associativeArray.pop() -- clears associativeArray
2938new feature: assArray1.push(assArray2) -- adds all key/value entries in assArray2 to assArray1.
2939new feature: assArray1 + assArray2  -- adds all key/value entries into a new associative array. (Complements a1 - a2)
2940
2941
2942JmolVersion="14.17.2" // 2017.06.03
2943
2944bug fix: WRITE FILE not working when file has been cached.
2945bug fix: array.find("regex...","") does not reset RegExp each time it runs RegExp.exec() so does not find all possibilities
2946
2947code: CIPChirality.java fully interfaced using SimpleNode and SimpleEdge
2948
2949JmolVersion="14.17.1"  // 2017.05.27
2950
2951new feature: atom property x.cipRule
2952 -- CIP sequence rule deciding this center
2953 -- one of 1a, 1b, 2, 3, 4a, 4b, 4c, 5, or blank
2954
2955bug fix: polyhedra broken in Jmol 14.10.0
2956
2957bug fix: finalizing CIP algorithm
2958 -- adding spiro chirality from P-93.5.3
2959 -- completing root path for auxiliary descriptors
2960
2961bug fix: JSmol: JSME/JSmol 2D->3D fails when one H of a CH2 is explicitly wedge and the other H is implicit (not shown at all). (JSmolJME.js)
2962
2963code:
2964
2965/**
2966 * A full validated relatively efficient implementation of Cahn-Ingold-Prelog
2967 * rules for assigning R/S, M/P, and E/Z stereochemical descriptors. Based on
2968 * IUPAC Blue Book rules of 2013.
2969 * https://iupac.org/projects/project-details/?project_nr=2001-043-1-800
2970 *
2971 * Features include:
2972 *
2973 *  - deeply validated
2974 *
2975 *  - implemented in Java (Jmol) and JavaScript (JSmol)
2976 *
2977 *  - only two Java classes; roughly 1000 lines
2978 *
2979 *  - efficient, one-pass process for each center using a single finite digraph for all auxiliary descriptors
2980 *
2981 *  - exhaustive processing of all 8 sequence rules (1a, 1b, 2, 3, 4a, 4b, 4c, 5)
2982 *
2983 *  - includes R/S, r/s, M/P (axial, not planar), E/Z
2984 *
2985 *  - covers any-length odd and even cumulenes
2986 *
2987 *  - uses Jmol conformational SMARTS to detect atropisomers and helicenes
2988 *
2989 *  - covers chiral phosphorus and sulfur, including trigonal pyramidal and tetrahedral
2990 *
2991 *  - properly treats complex combinations of R/S, M/P, and seqCis/seqTrans centers (Rule 4b)
2992 *
2993 *  - properly treats neutral-species resonance structures using fractional atomic mass and a modified Rule 1b
2994 *
2995 *  - implements CIP spiro rule (BB P-93.5.3.1)
2996 *
2997 *  - detects small rings (fewer than 8 members) and removes E/Z specifications for such
2998 *
2999 *  - detects chiral bridgehead nitrogens
3000 *
3001 *  - reports atom descriptor along with the rule that ultimately decided it
3002 *
3003 * Primary 236-compound Chapter-9 validation set (AY-236) provided by Andres
3004 * Yerin, ACD/Labs (Moscow).
3005 *
3006 * Mikko Vainio also supplied a 64-compound testing suite (MV-64), which is
3007 * available on SourceForge in the Jmol-datafiles directory.
3008 * (https://sourceforge.net/p/jmol/code/HEAD/tree/trunk/Jmol-datafiles/cip).
3009 *
3010 * Additional test structures provided by John Mayfield.
3011 *
3012 * Additional thanks to the IUPAC Blue Book Revision project, specifically
3013 * Karl-Heinz Hellwich for alerting me to the errata page for the 2013 IUPAC
3014 * specs (http://www.chem.qmul.ac.uk/iupac/bibliog/BBerrors.html), Gerry Moss
3015 * for discussions, Andres Yerin for discussion and digraph checking.
3016 *
3017 * Many thanks to the members of the BlueObelisk-Discuss group, particularly
3018 * Mikko Vainio, John Mayfield (aka John May), Wolf Ihlenfeldt, and Egon Willighagen, for
3019 * encouragement, examples, serious skepticism, and extremely helpful advice.
3020 *
3021
3022
3023JmolVersion="14.16.1" // 2017.05.19
3024
3025new feature: load =chebi/nnnnnn
3026  -- chEBI 2D molecule load, with minimal 100-step minimization
3027  --
3028
3029bug fix: CML reader does not read 2D wedge/hash information
3030
3031bug fix: CIP fix for missing branch descriptors; 984 lines
3032
3033bug fix: CIP adds helicene M/P chirality
3034  - validated using CCDC structures HEXHEL02 HEXHEL03 HEXHEL04 ODAGOS ODAHAF
3035  - http://pubs.rsc.org/en/content/articlehtml/2017/CP/C6CP07552E
3036
3037code: CIP: additional simplification;
3038code: CIP status: implementation complete, including:
3039         All subrules implemented fully: 1a, 1b, 2, 3, 4a, 4b, 4c, 5
3040         R/S, E/Z, M/P (odd-cumulene and helicene), r/s, seqCis/seqTrans (as Z/E)
3041         fused benzenoid aromatic Mancude ring "Kekule weighted" atom number adjustments
3042
3043 * Added logic to Rule 1b: The root distance for a Kekule-ambiguous duplicate
3044 * atom is its own sphere, not the sphere of its duplicated atom.
3045 *
3046 * Stated more precisely:
3047 *
3048 * Proposed amended Sequence Rule 1:
3049 *
3050 * (1a) higher atomic number precedes lower;
3051 *
3052 * (1b) in comparing two duplicate nodes, lower root distance precedes higher
3053 * root distance, where "root distance" is defined:
3054 *
3055 * (i) in the case of a duplicate atom for which the atomic number is averaged
3056 * over two or more atoms in applying Rule 1a, the distance from the duplicate
3057 * node itself to the root node; and
3058 *
3059 * (ii) in all other cases, the distance of its corresponding nonduplicated atom
3060 * node to the root node.
3061 *
3062
3063JmolVersion="14.15.4" // 2017-05-13
3064
3065bug fix: INVERTSELECTED ATOM not documented; functionality of INVERTSTEREO SELECTED folded into it, and INVERTSELECTED STEREO deprecated
3066 -- inverts ring or chain stereochemistry
3067 -- adds that keyword ATOM is optional, so INVERTSELECTED @2  works
3068
3069bug fix: @n for "atom n" not working in several script-checking contexts where {atoms} works.
3070
3071bug fix: CIP full implementation; simplified algorithm - 984 lines
3072bug fix: CIP Rule 1b modification to ensure aromatic rings do not result in false positive for R/S (binap2)
3073  -- specifically that the duplicate atom is given a root distance equal to its sphere, not that of its duplicated atom
3074bug fix: CIP chiral bridgehead N designations missing
3075bug fix: CIP Assignment of auxiliary r/s not functional (AY-236.201,202)
3076bug fix: CIP basic "mancude" atom number adjustment for heteroatoms
3077 -- implemented for benzenoids (benzene, pyridine, pyrazine) and fused benzenoids only
3078
3079new feature: set debugHigh
3080  -- same as set loglevel 6 - debugging only
3081  -- debugging only; not considered significant enough to increment minor version
3082
3083JmolVersion="14.15.3" // 2017-05-08
3084
3085bug fix: SMARTS search for atropisomeric bond that is in an alicyclic ring fails (Fred Ziegler)
3086  - used for M/P chirality check
3087  - for example:
3088           load $c1cc2c3-c4c5CC2.c5ccc4C.c3(C)c1
3089           select on smarts("a-a")
3090           calculate chirality
3091           print {*}.chirality.join("")
3092
3093            MM
3094
3095bug fix: use of the less preferred name of Jmol token that has two optional
3096         forms ("fix" vs "fixed") as a VAR does not assign that variable name
3097bug fix: set cartoonRibose misses the C1'-O4' and O3'-P(+1) edges
3098bug fix: JVXL reader not reading Gaussian files with "1" in the third line, 5th field
3099bug fix: CIP M/P chirality
3100  test: load "$2,2'-dibromobiphenyl"; calculate chirality; print {*}.chirality.join("")
3101bug fix: CIP chirality nearly fully validated on ACD/Labs AY-236 set, with some unimplemented aspects:
3102
3103var skip = ({27 229}) || // E/Z only; missing chirality
3104           ({95 96 98 99 100 101 102 103 104 108 109 110 111 112 200}) || // trigonal planar, square planar, or hypervalent
3105           ({32 33})  || // helicene // added in Jmol 14.15.5
3106           ({201 202})|| // spirocyclic central (redundant) atom designation missing (axial designation option)
3107           ({212 213})|| // chiral conformation 1,4-benzene in a ring
3108           ({38 84})  || // ignore -- 38: Mancude for cyclopentadienyl; 84: unknown error with P compound
3109           ({203})    || // // chiral bridgehead amine  // fixed in Jmol 14.15.5
3110
3111Issue: Full implementation of the rules requires a slight modification of Rule 1b.
3112Specifically, aromatic duplicate atoms must reference the sphere of their own parent, not their
3113duplicated atom.
3114
3115 Three structures appear to be in error in the IUPAC Blue Book 2013.
3116
3117,"147":"r,,,R,,,,r,,,S" // r,,,R,,,,r,,,R chiral phosphine -- I think Jmol is right; disagrees with BB P-93.5.1.1.2 for S vs R
3118,"227":"SrSEErS" // S,,,,,,,r,S,,,,,,,E,,r,r  //  -- I think Jmol is right; disagrees with BB P-93.5.7.2 for S vs. r
3119,"230":"@2D RrRsR" // r,,,R,,,,s,,,R // p 1282   -- I believe Jmol is correct, disagrees with BB P-93.6
3120
3121 One structure awaiting full implementation of Rule 4b across all chirality types, R/S, M/P, and seqCis/seqTrans
3122
3123 ,"170":"Spp" // Jmol is missing the S -- mix of R/S and M/P for Rule 4b
3124
3125 - 939 lines
3126
3127JmolVersion="14.15.2" // 4/29/17
3128
3129bug fix: CIP chirality adds axial chirality (M/P[Ra/Sa], m/p[ra/sa]) for cumulenes
3130bug fix: CIP chirality adds atropisomer chirality (M/P[Ra/Sa], m/p[ra/sa]) for biaryls
3131bug fix: CIP chirality adds cumulene E/Z chirality
3132 -- 816 lines
3133 -- validation data are at https://sourceforge.net/p/jmol/code/HEAD/tree/trunk/Jmol-datafiles/cip/
3134 -- validates for 160 structures (some duplicates; both cip_examples.zip and stereo_test_cases.sdf)
3135 -- validates for all cases considered:
3136   -- simple R/S and E/Z
3137   -- small-ring removal of E/Z
3138   -- parallel-strand Rule 4b and Rule 5 (Mata)
3139   -- pseudochiral r/s and m/p
3140   -- odd and even cumulenes
3141   -- atropisomers
3142   -- P, S, As, Se, Sb, Te, Bi, Po trigonal pyramidal and tetrahedral
3143   -- imine and diazine E/Z chirality
3144
3145JmolVersion="14.15.1" // 4/28/17
3146
3147new feature: x.split(true)
3148 -- does a white-space token split of the string value of x
3149
3150new feature: MOL/SDF reader reads M  ISO  lines for isotopes
3151
3152bug fix: CIP chirality adds P, S, As, Se, Sb, Te, Bi, Po trigonal pyramidal and tetrahedral
3153bug fix: CIP chirality adds imine and diazine E/Z chirality
3154bug fix: CIP chirality broken for carbonyl groups
3155bug fix: CIP chirality E/Z should not be indicated for rings of size < 8
3156
3157bug fix: values not saved in state for cartoonBlockHeight, cartoonBlocks, and cartoonSteps
3158bug fix: write MO broken
3159bug fix: set cartoonBlockHeight (for DSSR nucleic acid rendering) fails
3160
3161code: CIPChirality.java 779 lines Rules 1-5 validated on 145 compounds
3162  - see https://sourceforge.net/p/jmol/code/HEAD/tree/trunk/Jmol-datafiles/cip/
3163code: CIP optimizations
3164
3165JmolVersion="14.14.1" // 4/19/17
3166
3167new feature: CALCULATE CHIRALITY {atom set}
3168  -- starts with basic CIP Rule 1-2 determination of R/S and E/Z.
3169  -- continues with Rules 3-5, which require full-molecule analysis.
3170  -- work in progress:
3171     -- Rules 1 and 2 complete
3172     -- Rule 3 (E/Z) implemented
3173     -- Rule 4 partially implemented
3174        -- simple linear sequences of R/S ok
3175     -- Rule 5 implemented
3176  -- caveates
3177     -- no pseudochirality
3178     -- not cyclitols
3179     -- does not distinguish rings, so inserts "Z" into ring bonds
3180     -- only validated on
3181
3182  -- optionally limited to the given atom set (or the currently selected atoms by default)
3183
3184new feature: set jmolInJSpecView
3185  -- allows Jmol window to NOT be embedded in JSpecView when JSpecView is opened in Jmol
3186  -- default TRUE
3187
3188new feature: WRITE ISOSURFACE "t.pmesh"; WRITE ISOSURFACE "t.pmb"
3189  -- creates ASCII (.pmesh) or binary (.pmb) file (a Jmol-specific file format)
3190  -- relatively compact format
3191  -- can speed up loading of meshes and contours
3192  -- for filled surfaces, use .jvxl instead
3193  -- read back into Jmol using ISOSURFACE "t.pmesh"/"t.pmb"
3194  -- note that binary files are NOT RECOMMENDED for JSmol because some platforms cannot read them locally
3195  -- example:
3196
3197  load $methane
3198  isosurface plane {0 0 0 1} map vdw contours 20
3199  write ISOSURFACE contour.pmb
3200  isosurface contour.pmb
3201
3202
3203bug fix: mesh capper producing gaps
3204bug fix: CIP chirality fixed for rule ordering; validated for IUPAC Rules 1, 2, and 3 (though still some questions about Rule 3)
3205bug fix: print getProperty("cifinfo") without file name fails
3206
3207
3208JmolVersion="14.13.1" // 2017.04.09
3209
3210new feature: MOL V2000 reader loads > <dataname> blocks into _M.molData
3211
3212new feature: set labelfor {atomset} "value"
3213 -- allows setting of label without changing current selection
3214 -- uses same syntax as LABEL command after {atomset}
3215 -- for example:
3216
3217   set labelfor @atoms @myLabel
3218   set labelfor {atomno <= 3} @{["a","b","c"]}
3219   set labelfor {_C && chirality != ""} "%[atomname] %[chirality]"
3220
3221bug fix: {*}.chirality with triple bonds fails
3222bug fix: {*}.chirality fix for duplicate atoms check
3223
3224bug fix: dotted line has extra dot: measure ID m @1 @4 radius 0.1
3225bug fix: NBO H-BOND and MODEL focus issues
3226
3227
3228JmolVersion="14.12.1"
3229
3230bug fix: NBO update
3231bug fix: JavaScript bug - missing  Math.signum(f) - causes {atom}.chirality to not work in JSmol
3232
3233JmolVersion="14.12.0" // 2017-04-06
3234
3235new feature: {atom}.chirality
3236  -- uses Cahn-Ingold-Prelog rules to assign R or S to a carbon center
3237  -- ignores sulfur chirality
3238  -- may not fully implement high symmetry cases
3239  -- not fully tested
3240  -- Checked using:
3241
3242function checkchiral(m) {
3243  if (m)  load @m
3244  background label yellow
3245  color labels black
3246  select _C
3247  label %[atomname]
3248  refresh
3249  var b = {_C}
3250  for (var a in b) {
3251    var c = a.chirality;
3252    print _smilesString + " " + a + c
3253    if (c) {
3254       select a
3255       c = a.atomname + " " + c
3256       label @c
3257    }
3258  }
3259  select *
3260}
3261
3262checkchiral("$(R)-glycidol")
3263delay 1
3264checkchiral("$glucose")
3265delay 1
3266checkchiral("$(2S,3R)-2,3-oxiranediol")
3267delay 1
3268checkchiral("$(S)-2-butanol")
3269delay 1
3270checkchiral("$(R)-2-butanol")
3271delay 1
3272checkchiral("$(2S,3R)-2,3-butanediol")
3273delay 1
3274checkchiral("$(2S,3S)-2,3-butanediol")
3275delay 1
3276checkchiral("$(2R,3R)-2,3-butanediol")
3277delay 1
3278checkchiral("$(2R,3S)-2,3-butanediol")
3279delay 1
3280checkchiral("$1,4-dimethylcyclohexane")
3281delay 1
3282checkchiral("$cholesterol") // (3S,8S,9S,10R,13R,14S,17R) and sidechain R
3283
3284
3285JmolVersion="14.11.3" // 2017-04-06
3286
3287bug fix: partial bond order for orders > 3 not working
3288 -- for example: connect {_C} {_C} partial 5.3
3289bug fix: NBO MODEL loading with no file name goes to wrong directory
3290bug fix: NBO job names need to be cleaned and set if necessary
3291bug fix: some sort of bad build for DSSR
3292
3293JmolVersion="14.11.2" // 2017-04-04
3294
3295bug fix: NBO fixes
3296bug fix: backboneSteps moved to cartoonSteps
3297    // order of checking for TRUE is:
3298    // cartoonBlocks, cartoonBaseEdges, cartoonSteps, cartoonLadders, cartoonRibose
3299
3300JmolVersion="14.11.1" // 2017-04-03
3301
3302bug fix: set cartoonBlocks; set cartoonBlockHeight x.x
3303 -- needs to be cartoon, not backbone (needs to be single-monomer based)
3304 -- replaces set backboneBlocks; set backboneBlockHeight x.x from 14.11.0
3305 -- for nucleic only
3306 -- overrides set cartoonSteps and cartoonBaseEdges
3307 -- uses DSSR data if present (using calculate structure DSSR or load =xxxx/dssr)
3308 -- displays a DSSR block for each base based on dssr.nts.frame
3309 -- x.x is height of box in Angstroms (default 0.5)
3310
3311bug fix: NBO communications upgrade - still has bug in NPA atom charge query
3312
3313JmolVersion="14.11.0" // released 4/1/2017
3314
3315new feature: color NUCLEIC
3316 -- for nucleic only (others will be grey)
3317 -- based on DSSR nucleic color scheme:
3318      G green, C yellow, A red, T blue, U cyan
3319
3320new feature: set backboneBlocks; set backboneBlockHeight x.x
3321 -- but see bug fix above
3322 -- for nucleic only
3323 -- overrides set backboneSteps
3324 -- uses DSSR data if present (using calculate structure DSSR or load =xxxx/dssr)
3325 -- displays a DSSR block for each base based on dssr.nts.frame
3326 -- x.x is height of box in Angstroms (default 0.5)
3327
3328new feature: color property DSSR type
3329 -- where type is one of:
3330	bulges
3331	coaxStacks
3332	hairpins
3333	hbonds
3334	helicies
3335	iloops
3336	isoCanonPairs
3337	junctions
3338	kissingLoops
3339	multiplets
3340	nonStack
3341	nts
3342	pairs
3343	ssSegments
3344	stacks
3345	stems
3346 -- color is based on index into the list of the given structures
3347 -- 0 (not of that structure), 1 (first entry), 2 (second entry), etc.
3348 -- for example:
3349
3350		    load =4fe5/dssr
3351		    backbone -0.5;set backboneSteps;
3352		    color property dssr junctions
3353            color {color=red} grey   // just making "not this type" grey instead of red
3354
3355    [ most bases are grey, but one region is green and one region is blue ]
3356
3357
3358bug fix: drag-drop of PDB file with isolated nucleic acids gives odd unbonded look
3359bug fix: set drawPicking TRUE does not report pending measurement
3360bug fix: DSSR calculation should reset after atom coordinate changes
3361bug fix: using Jmol.scriptWait() within a callback will not work, as it will overwrite the currently running eval object
3362
3363
3364JmolVersion="14.10.0" // released 3/25/2017
3365
3366new feature: x = {*}.find(smartsString,"map")
3367 -- returns an array of arrays of atom indices (0-based)
3368 -- indicates exact correlation between atoms in {*} and atoms of smartsString
3369 -- only unique sets of atoms are found, not every possibility
3370 -- for example:
3371
3372      load $caffeine
3373      print {*}.find("*1*****1", "map").format("JSON")
3374
3375        [ [ 0,2,4,6,11,12 ] ]
3376
3377new feature: SELECT @x  where x is an array of integers or array of array of integers
3378 -- selects atoms from array rather than from a bitset
3379 -- note that variable must be used, as SELECT [1,2,3] would look for PDB group "1,2,3"
3380 -- for example:
3381
3382      load $caffeine
3383      x = {*}.find("*1*****1", "map")[0]
3384      select @x
3385
3386        6 atoms selected
3387
3388new feature: DRAW polygon @face @points
3389 -- draws a filled polygon based on arrays of atom indices
3390 -- @face is an array of integers, not necessarily wound correctly
3391 -- @points is an atom bitset or an array of points (optional, defaults to {*}
3392 -- for example:
3393
3394 	  load $p4
3395	  x = {*}.find("*1**1","map");
3396	  draw ID p4r polygon @{x[1]} color red
3397	  draw ID p4b polygon @{x[2]} color blue
3398	  draw ID p4y polygon @{x[3]} color yellow
3399	  draw ID p4g polygon @{x[4]} color green
3400
3401
3402new feature: DRAW polyhedron @faces @points
3403 -- draws sets of polygons based on arrays of atom indices
3404 -- @faces is an array of array of integers, not necessarily wound correctly
3405 -- @points is an atom bitset or an array of points (optional, defaults to {*}
3406 -- for example:
3407
3408  	  load $caffeine
3409	  draw polyhedron @{{*}.find("*1****1||*1*****1","map")}
3410
3411 	  load $p4
3412	  draw ID p polyhedron @{{*}.find("*1**1","map")} color red
3413
3414new feature: POLYHEDRON ID xxx @faces @points
3415 -- @faces is an array of array of integers, not necessarily wound correctly
3416 -- @points is an atom bitset or an array of points (optional, defaults to {*}
3417
3418  	  load $p4
3419	  polyhedra ID p4 @{{*}.find("*1**1","map")}
3420
3421new feature: 4-order bond in MOL file using 14 for bond order
3422 -- Jmol extension for MOL file format to allow 4-bond
3423 -- example: [Re2Cl8](2-)
3424 -- see https://en.wikipedia.org/wiki/Quadruple_bond
3425
3426new feature: 5-order bond in MOL file using 15 for bond order
3427 -- Jmol extension for MOL file format to allow 5-bond
3428 -- example: [Mo2Cl8](4-)
3429 -- see https://en.wikipedia.org/wiki/Quintuple_bond
3430
3431new feature: 6-order bond in MOL file using 16 for bond order
3432 -- Jmol extension for MOL file format to allow 6-bond
3433 -- example: Mo2
3434 -- see https://en.wikipedia.org/wiki/Sextuple_bond
3435
3436new feature: load "=xxxx/dssr--xxx=yyy"
3437 -- allows adding specialized options to dssr
3438 -- --xxx=yyy added on to &opt= search item
3439
3440bug fix: DSSR fix for multi-model PDB file
3441bug fix: DSSR - 4fe5 HPA ligand causes set backboneSteps true to fail
3442bug fix: EXIT command with -n command line flag does not exit Jmol
3443bug fix: echo renderer may not show correct font size
3444bug fix: POLYHEDRA ID id OFFSET {x y z} broken
3445bug fix: ScriptManager debug output being sent even if -i (silent) command line option set.
3446
3447JmolVersion="14.9.1"  released 2/19/2017
3448
3449
3450bug fix: bad release file for 14.9.0
3451
3452JmolVersion="14.9.0"
3453
3454new feature: connect NBO <nbotype>
3455    - connect atoms in the currently visible model using a resonance structure configuration found in an NBO .46 or .nbo file
3456	- where <nbotype> is one of alpha|beta|46|46a|46b|nrtstr_n|nrtstra_n|rs_n|rsa_n|rsb_n
3457
3458new feature: label %[nbo];
3459    - label an atom using a resonance structure configuration found in an NBO .46 or .nbo file
3460    - requires a previous connect NBO
3461
3462new feature: set nboCharges (default true)
3463  - determines whether formal charges are also displayed with LABEL %[nbo]
3464
3465new feature: quintuple and sextuple bonds.
3466  -- connect @1 @2 quintuple
3467  -- connect @1 @2 sextuple
3468  -- readily saved in state
3469  -- adding MOL file bond type 15 and 16 for these -- a bit of a hack, of course.
3470
3471new feature: Viewer.runScriptCautiously(String) replacement name for older Viewer.runScript(String)
3472
3473new feature: plugin main menu item.
3474 - allows integrated additions to Jmol
3475 - Just has NBO at this time; could have more, as it is a simple interface.
3476 - created automatically from reading org/openscience/jmol/app/plugins/plugin.properties,
3477   which just contains a list of name=class  pairs:
3478
3479     # plugin.properties
3480
3481     NBO=org.gennbo.NBOPlugin
3482
3483new feature: startup options -U nbo  or --plugin nbo
3484 - starts Jmol in NBO mode, as if the Plugins...NBO menu item had been clicked
3485 - could be generalized, but do not that more than just nbo in place at this time
3486 - case insensitive
3487
3488new feature: NBO n BETA  - for GenNBOReader nth beta orbital; could be expanded
3489
3490bug fix: SHOW CHEMICAL JME (from NCI CIR) does not properly return formal charges
3491
3492bug fix: JSpecView, when open in application, does not allow ZAP
3493
3494bug fix: draw POINTGROUP crashes Jmol if model is not first model
3495
3496bug fix: DRAW circle rendering broken (load $2-butene ; draw pointGroup)
3497
3498bug fix: NBO/ISOSURFACE command - Displaying BETA orbitals for NBO types (NHO, PNBO, etc.) that
3499         are from a file other than the current file causes read failure and no orbital display.
3500
3501bug fix: Viewer.runScript(String) now uses evaluateExpression(T[])
3502
3503Lesson learned: Never mix viewer.runScript() and viewer.runScriptQueued() calls.
3504                What will happen is that the unqueued calls will corrupt the
3505                queued calls. However, if you use viewer.evaluateExpression("script('....')"),
3506                that is also synchronous, and it uses a new ScriptEval() to isolate it from
3507                the script being queued. You still have the problem that the scripts could
3508                mess up each other, but at least it will not cause catastrophic failure.
3509
3510
3511bug fix: *.CA should pick up calcium in a PDB file
3512
3513bug fix: cfi format (for NBOPro) writing broken
3514  - from using the command
3515
3516      x = data({*}, 'cfi')
3517
3518bug fix: La and Ac should be in transitionmetal
3519
3520bug fix: GenNBO reader not recognizing FILTER "BETA"
3521
3522code: NBO options extended using the NBO VIEW or NBO OPTIONS "..." command options
3523
3524  protected boolean jmolOptionNOZAP = false; // do no zap between modules
3525  protected boolean jmolOptionNOSET = false; // do not use NBO settings by default
3526  protected boolean jmolOptionVIEW = false;  // present only the VIEW option
3527  protected boolean jmolOptionNONBO = false; // do not try to contact NBOServe
3528
3529noting previously undocumented:
3530
3531 set fontscaling true; font label 10 arial plain 0.020
3532
3533  - last number is a fontscaling factor that allows one to set a font size for
3534  - labels in angstroms. Roughly, this pointSize * factor is in Angstroms.
3535  - if label is changed, one must use set fontscaling FALSE; label .... ; fontScaling TRUE;
3536
3537
3538JmolVersion="14.8.1"
3539
3540bug fix: isosurface color "user" as an equivalent to isosurface colorscheme "user" broken
3541bug fix: color isosurface range 1 122  ignores preset isosurface color scheme and just uses the default color scheme
3542
3543
3544JmolVersion="14.8.0"
3545
3546JmolVersion="14.8.0-beta-2016-12-17"
3547
3548Release Note: switching to semantic versioning (http://semver.org/)
3549Release Note: When releasing beta version, append "-beta-YYYYMMDD"
3550
3551Release Note: new features listed are since first release of 14.5.4 (2016.04.30)
3552
3553new feature: set echo OFFSET {sx sy sz}
3554 -- sets the echo offset to a specific screen Angstrom offset
3555
3556new feature: set echo OFFSET [mode sx sy sz ax ay az] never implemented
3557 -- see set labelOffset
3558
3559new feature: set labelOffset [mode sx sy sz ax ay az] (3.1.15, never documented)
3560
3561   set labelOffset [sx, sy, sz]
3562   set labelOffset [mode, sx, sy, sz, ax, ay, az]
3563
3564 where
3565
3566   sx,sy,sz are screen coord offsets
3567    -- applied after view rotation
3568    -- sy > 0 LOWERS label
3569   ax,ay,az are xyz position (in Angstroms; applied before view rotation)
3570   mode == 0 indicates xyz position is absolute and sx sy sz are Angstroms
3571   mode == 1 indicates xyz position is relative to atom position and sx sy sz are Angstroms
3572   mode == 2 indicates xyz is absolute, and sx sy sz positions are screen pixels
3573   mode == 3 indicates xyz is relative, and sx sy sz positions are screen pixels
3574   defaults: mode == 1; ax = ay = az = 0
3575
3576new feature: fully implemented CIF 2.0 reader
3577
3578new feature: MagCIF reader upgraded to new IUCr standard
3579 -- first CIF 2.0 format implemented by IUCr
3580 -- see http://comcifs.github.io/magCIF.dic.html
3581
3582new feature: x = getProperty("cifInfo", "c:/temp/test.cif")
3583 -- reads CIF file data in structured format
3584 -- automatically uses CIF 1.0 or CIF 2.0, as needed.
3585 -- if file name is missing, uses current model file
3586
3587new feature: autocalculation of MMFF94 partial charges
3588 -- isosurface ... map MEP
3589 -- DIPOLE MOLECULAR
3590 -- no need to preface these with CALCULATE PARTIALCHARGE
3591
3592new feature: 3DPrinter-compatible VRML and STL writing.
3593  -- mesh only; does not use high-level objects Cone, Cylinder, Sphere
3594  -- extensive use of dEF and USE for small-footprint VMRL files
3595  -- STL is binary generally, but will be ASCII using SET DEBUG TRUE
3596  -- write t.wrl
3597  -- write t.stl
3598
3599new feature: measure ID "test" radius 0.0 font 15.0 SansSerif Plain align CENTER @1 @2 "test"
3600 -- radius 0.0 turns off line (optional)
3601 -- font... sets font (optional)
3602 -- align [left|right|center|none] sets text alignment (optional)
3603 -- requires ID
3604
3605new feature: allowance for external app loading of binary (mmtf) files
3606  or any other file using a simple interface:
3607  Viewer.openReader(fullPathName, reader)
3608
3609new feature: Jmol reads PyMOL 1.8 PSE files with "set dump_binary, 1"
3610
3611new feature: load AUDIO audiofilename
3612 -- Java and JavaScript applet can read WAV, MP3, and OGG files
3613 -- application can read WAV files]
3614
3615new feature: settable chain string using {atomset}.chain = "xxx"
3616
3617new feature: set hiddenLinesDashed
3618 -- when set TRUE, hidden lines in unit cells and boundbox are rendered as dashed lines.
3619 -- default is FALSE
3620
3621new feature: polyhedron -x.x ....
3622 -- sets maximum radius for gap calculation to be x.x
3623
3624new feature: $pbz1_1_.getProperty(x) where x is "info",
3625              "faces", "faceTriangles", "faceCount",
3626              "face_areas", "face_types", "face_points",
3627              "vertices", ...more...
3628  -- polyhedra informationoru
3629
3630new feature: unitcell("a=...,b=...,c=...,alpha=...,beta=...,gamma=....")
3631 - array of center and three vectors
3632 - example:
3633 $ print unitcell("a=10,b=10,c=20,alpha=90,beta=90,gamma=129")
3634{0.0 0.0 0.0}
3635{10.0 0.0 0.0}
3636{-6.293203 7.7714605 0.0}
3637{-8.742278E-7 -1.8328565E-6 20.0}
3638
3639new feature: load ... unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
3640
3641new feature: unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
3642  -- only the numbers are read; everything else is ignored, so order is important here
3643  -- uses the format created by show unitcell/a
3644
3645new feature: unitcell RECIPROCAL 2
3646  -- as integer, multiples of pi
3647
3648
3649new feature: polyhedra AUTO ...
3650  -- sets polyhedron radius automatically, using "MAXIMUM GAP" rule
3651  -- see Zur Abgrenzung der Koordinationssph�re und Ermittlung der Koordinationszahl in Kristallstrukturen
3652         G. O. Brunner, D. Schwarzenbach, Zeitschrift f�r Kristallographie - Crystalline Materials, 1971, vol 133, issues 1-6 127-133
3653         http://www.degruyter.com/view/j/zkri.1971.133.issue-1-6/zkri.1971.133.16.127/zkri.1971.133.16.127.xml?rskey=sfBNTx&result=1
3654
3655new feature: unitcell reciprocal x.x
3656  -- allows scaling of reciprocal cell, similar to unitcell("reciprocal", x.x)
3657
3658new feature: write CIF
3659  -- just a very simple CIF file, P1 format
3660  -- allows writing a simple CIF file with changed coordinates after a UNITCELL command
3661
3662new feature: full implementation of OpenSMILES and OpenSMARTS in Jmol
3663  see http://opensmiles.org and http://www.moldb.net/opensmarts
3664
3665new feature: C13 NMR prediction from http://www.nmrdb.org/service/jsmol13c?smiles=CCCC
3666 -- although we send MOL file, not SMILES here.
3667 -- actuated with
3668
3669   SHOW NMR H1   // H1 1H H or just SHOW NMR all default to this
3670   SHOW NMR C13  // or C or 13C
3671   SHOW NMR none // close JSpecView
3672
3673new feature: Jmol now implements a way of indicating atropisomer chirality.
3674 -- measured dihedral angle is clockwise-positive front-to-back, as for Jmol dihedrals
3675 -- matching with {*}.find("SMILES","...a^nm-a...") where n and m are 1, 2, or 3
3676    indicate first, second, or third, respectively, and indicate which bonds of
3677    the biaryl bond, as written, are to the reference atoms.
3678 -- for example:
3679
3680   $ load $biphenol
3681   $ connect @{@7|@8} @{@1|@2} atropisomer
3682   $ print {*}.find("SMARTS","c1(O)ccccc1^23-c2c(O)cccc2")
3683
3684  ({0:13})
3685
3686  Explained below.
3687
3688new feature: CONNECT {pair1} {pair2} ATROPISOMER
3689 -- creates a new bond of type atropisomer (bond chirality in biaryl systems)
3690 -- each pair must include the bonded atom and its reference connected atom
3691 -- example:
3692
3693   $ load $biphenol
3694   $ connect @{@7|@8} @{@1|@2} atropisomer
3695   $ getProperty bondinfo[7].type
3696
3697   bondinfo[7].type	"atropisomer_23"
3698
3699new feature: BONDORDER ATROPISOMER_nm
3700  -- not for general use; will be found in state file
3701  -- for example:
3702
3703    select BONDS ({6});
3704    bondOrder atropisomer_23;
3705
3706new feature: Jmol SMILES bond atropisomerism ^nm- and ^^nm-
3707 -- indicates atropisomerism (bond chirality in biaryl systems)
3708 -- ^ and ^^ for bonds similar to @ and and @@ for atoms
3709 -- n and m are single-digit bond selectors, generally one of 1, 2, or 3
3710 -- n = 1/2/3 means "reference atom is first/second/third bonded
3711 -- ^- and ^^- same as ^22- and ^^22-, respectively
3712 -- example:
3713
3714   $ load $biphenol
3715   $ connect @{@7|@8} @{@1|@2} atropisomer
3716   $ print {*}.find("SMARTS","c1(O)cccc{c1^23-c2}c(O)cccc2")
3717
3718   ({1 6})
3719
3720  Here the "^23-" refers to the two carbons with connected oxygen atoms, because the second
3721  bond listed for the carbon on the left is to the c1(O) atom, and the third bond listed for
3722  the carbon on the right is to the other c(O) atom. Note that bond numbering includes the
3723  implicit bond to the atom coming from the atom on its left, which for the second carbon,
3724  starts with the atropisomeric bond itself, at least in this case.
3725
3726             1*23  1*23
3727     c1(O)ccccc1^23-c2c(O)cccc2
3728
3729
3730JmolVersion="14.7.5_2016.12.17"
3731
3732bug fix: incorrect referencing of pt.fxyz and pt.xyz when unit cells have offsets
3733
3734JmolVersion="14.7.5_2016.12.06"
3735
3736bug fix: DSSR final touches
3737
3738 -- see https://chemapps.stolaf.edu/jmol/docs/misc/JmolSQLforDSSR.pdf
3739
3740    After loading a file from the PDB with the /dssr attribute:
3741
3742    LOAD  =1ehz/dssr
3743
3744	The associative array _M.dssr holds the DSSR information. This array has the following main keys and subkeys of interest to this discussion:
3745
3746	bulges
3747	coaxStacks
3748	coaxStacks.stems
3749	hairpins
3750	hbonds
3751	helicies
3752	helicies.pairs
3753	iloops
3754	isoCanonPairs
3755	junctions
3756	kissingLoops
3757	kissingLoops.hairpins
3758	multiplets
3759	nonStack
3760	nts
3761	pairs
3762	ssSegments
3763	stacks
3764	stems
3765	stems.pairs
3766
3767	Each key or subkey is itself an array of associative arrays. For example,
3768
3769	LOAD =1ehz/dssr
3770	PRINT _M.dssr.stems.length
3771	PRINT _M.dssr.stems[1].pairs.length
3772	PRINT _M.dssr.stems[1].pairs[1]
3773	PRINT _M.dssr.pairs.select("where name='Imino'")
3774	PRINT _M.dssr.pairs.select("where name != 'WC'").count
3775	PRINT _M.dssr.coaxStacks[1].stems.select("where strand1='GACAC' or strand2='GACAC'")[1].pairs.count
3776	x = "GACAC"
3777	PRINT _M.dssr.coaxStacks[1].stems.select("where strand1=x or  strand2=x")[1].pairs.count
3778	SELECT  "|1|A|A|44||||"
3779	SELECT  @{_M.dssr.pairs.select("where name != 'WC'")}
3780	SELECT ON within(dssr, "nts")
3781	SELECT ON within(dssr, "nts[WHERE v0>17 and v1 <-39]")
3782	SELECT ON within(dssr, "nts.2")
3783	SELECT ON within(dssr, "nts[WHERE v0>1 and v1 <0].2")
3784
3785JmolVersion="14.7.5_2016.12.02"
3786
3787new feature: fully implemented CIF 2.0 reader
3788
3789new feature: x = getProperty("cifInfo", "c:/temp/test.cif")
3790 -- reads CIF file data in structured format
3791 -- automatically uses CIF 1.0 or CIF 2.0, as needed.
3792 -- if file name is missing, uses current model file
3793
3794JmolVersion="14.7.4_2016.11.28"
3795
3796new feature: MagCIF reader upgraded to new IUCR standard
3797 -- see http://comcifs.github.io/magCIF.dic.html
3798 -- only required these two key changes:
3799
3800    // old: _magnetic_space_group.transform_from_parent_Pp_abc
3801    // new: _parent_space_group.child_transform_Pp_abc
3802
3803    // old: _magnetic_space_group.transform_to_standard_Pp_abc
3804    // new: _space_group_magn.transform_BNS_Pp_abc
3805
3806JmolVersion="14.7.4_2016.11.22"
3807
3808new feature: adds MagCIF reader based on http://comcifs.github.io/magCIF.dic.html
3809new feature: adds CIF array [...] reading (as a string only; reader needs to parse this)
3810
3811JmolVersion="14.7.4_2016.11.05"
3812
3813bug fix: miscalculates vector scale and direction for incommensurate modulation of magnetic spin
3814bug fix: MoleculeInfo.nElements incremented by number of elements on each subsequent call rather
3815    rather than being properly reset to zero before recalculating.
3816
3817JmolVersion="14.7.4_2016.11.02"
3818
3819bug fix: load x.cif {1 1 1} (where that file has no unitcell) throws a loading error
3820
3821JmolVersion="14.7.4_2016.10.26"
3822
3823bug fix: POV-Ray output spheres too large -- somehow broken in 14.6.4_2016.10.15
3824
3825JmolVersion="14.7.4_2016.10.23"
3826
3827code: netscape.jar references isolated to org.jmol.applet.Jmol
3828
3829JmolVersion="14.7.4_2016.10.21"
3830
3831bug fix: menu item for X3D export delivers STL; item for STL not functional
3832bug fix: X3D export includes extraneous VRML text
3833bug fix: load "@x" not saved in state properly
3834bug fix: IDTF exporter broken in Jmol 14.7.4_2016.10.02
3835
3836JmolVersion="14.7.4_2016.10.15"
3837
3838bug fix: (JSmolJavaExt.js) JSmol/HTML5  WRITE xxx.stl not working.
3839bug fix: STL export can place two endcaps in the same location
3840
3841JmolVersion="14.7.4_2016.10.09"
3842
3843new feature: autocalculation of MMFF94 partial charges
3844 -- isosurface ... map MEP
3845 -- DIPOLE MOLECULAR
3846 -- no need to preface these with CALCULATE PARTIALCHARGE
3847
3848bug fix: MOL and V3000 readers should add implicit partial charges of 0 when only some partial charges are given
3849
3850bug fix: fine lines or dots rendered around boxes in ROCKETS
3851
3852bug fix: SET MEASUREMENTS x.x  is 10x too wide
3853
3854bug fix: MO command does not allow SQUARED with PLANE
3855bug fix: MO command SQUARED does not reset cutoff to its square
3856bug fix: MO command does not preserve SQUARED after PLANE command
3857
3858bug fix: MOLDEN reader does not accept [MOLDEN FORMAT]
3859
3860bug fix: WRL/X3D/STL surface closure for rockets, cartoons, polyhedra, ellipsoids, geosurface, draw
3861bug fix: triangle renderer miscalculates z-index, causing some hidden triangle bits to show
3862
3863code: refactoring of line rastering improves efficiency
3864
3865JmolVersion="14.7.4_2016.10.02"
3866
3867new feature: 3DPrinter-compatible VRML and STL writing.
3868  -- mesh only; does not use high-level objects Cone, Cylinder, Sphere
3869  -- extensive use of dEF and USE for small-footprint VMRL files
3870  -- STL is binary generally, but will be ASCII using SET DEBUG TRUE
3871  -- write t.wrl
3872  -- write t.stl
3873
3874JmolVersion="14.7.3_2016.09.29"
3875
3876bug fix: COD CIF files have mixed-lower case atom labels (H5a) in bonds def, causing Jmol to miss bonds.
3877bug fix: rogue System.out.println for text rendering.
3878
3879JmolVersion="14.7.3_2016.09.21"
3880
3881bug fix: print compare({1.1}, {2.1}, "MAP", "H") broken in 14.6.0_2016.06.14
3882
3883JmolVersion="14.7.3_2016.09.18" released
3884
3885new feature: show chemical formula reads formula from CIF
3886
3887bug fix: write MENU broken for non-English language (UTF-8 strings not correctly encoded using base64)
3888bug fix: write PNGJ should not store "#_DOCACHE_" in PNGJ file
3889bug fix: JSmol echo image loading from PNGJ can fail
3890bug fix: load "" after pasting in structure to load fails
3891
3892JmolVersion="14.7.2_2016.09.12"
3893
3894new feature: measure ID "test" radius 0.0 font 15.0 SansSerif Plain align CENTER @1 @2 "test"
3895 -- radius 0.0 turns off line (optional)
3896 -- font... sets font (optional)
3897 -- align [left|right|center|none] sets text alignment (optional)
3898 -- requires ID
3899
3900JmolVersion="14.7.2_2016.09.01"
3901
3902bug fix: show vdw USER broken
3903bug fix: COMPARE {1.1} {2.1} SMILES  should be ignoring stereochemistry
3904bug fix: CIF subsystem reader broken
3905
3906JmolVersion="14.7.2_2016.08.30"
3907
3908bug fix: SMILES comparison of two strings will report incorrect stereochemistry
3909
3910JmolVersion="14.7.2_2016.08.29"
3911
3912bug fix: load FILES does not deliver _modelFileName for individual models
3913bug fix: NCI/CADD reader not escaping "\" in SMILES (javajs.util.PT.escapeUrl)
3914
3915JmolVersion="14.6.2_2016.08.28"
3916syncronized and released as 14.6.2_2016.08.28
3917
3918new feature: allowance for external app loading of binary (mmtf) files
3919  or any other file using a simple interface:
3920  Viewer.openReader(fullPathName, reader)
3921
3922bug fix: RCSB -> https  "https://files.rcsb.org/download/%FILE.pdb"
3923
3924bug fix: EBI sites to https
3925bug fix: Spartan 16 reader may have empty first model
3926bug fix: 2D model show SMILES uses @SP -- should be /nostereo/ based on _.dimension == "2D"
3927bug fix: NCI/CADD now requires "get3d=true" not "get3d=True"
3928
3929code: Unit test includes binary types PyMOL and MMTF
3930
3931JmolVersion="14.7.1_2016.08.20"
3932
3933feature change: updated links to EBI electron density maps (formerly Uppsala; for isosurface "*xxxx")
3934
3935    "pdbemap", "http://www.ebi.ac.uk/pdbe/coordinates/files/%file.ccp4",
3936    "pdbemapdiff", "http://www.ebi.ac.uk/pdbe/coordinates/files/%file_diff.ccp4"
3937
3938code: recoding in javajs.util.Measure.calculateQuaternionRotation (Andrew Hanson)
3939
3940JmolVersion="14.7.1_2016.08.11"
3941
3942bug fix: PyMOL dump_binary file reading fixes
3943
3944JmolVersion="14.7.1_2016.08.09"
3945sycnronized with Jmol 14.6.1
3946bug fix: upgrade of RCSB mmtf format reading to version 0.2 specs
3947
3948  	       load =2tbv.mmtf {1 1 1} filter "biomolecule 1;*.ca"
3949
3950
3951JmolVersion="14.7.1_2016.08.08"
3952
3953new feature: Jmol reads PyMOL 1.8 PSE files with "set dump_binary, 1"
3954
3955JmolVersion="14.7.1_2016.07.29"
3956
3957bug fix: COMPARE command can fail if an atom has no bonds
3958
3959JmolVersion="14.7.1_2016.07.24"
3960
3961bug fix: write x.pdb for multimodel file does not work.
3962
3963JmolVersion="14.7.1_2016.07.11"
3964
3965sychronized with Jmol 14.6
3966
3967bug fix: Jmol SMILES not allowing for insertion-code search
3968 -- adds "^" for insertion code: [G#129^A.*]
3969
3970
3971JmolVersion="14.7.0_2016.07.06"
3972
3973bug fix: Jmol can crash on point group calculation for small polyhedra
3974
3975JmolVersion="14.7.0_2016.06.30"
3976
3977bug fix: cartoon rendering broken in 2016.06.28
3978
3979JmolVersion="14.7.0_2016.06.28"
3980
3981bug fix: using an exporter (write VRML, eg) with cartoonsFancy will break rendering after that
3982bug fix: after loading PNGJ data, using write FILE crashes Jmol
3983
3984JmolVersion="14.7.0_2016.06.27"
3985
3986new feature: load AUDIO audiofilename
3987 -- Java and JavaScript applet can read WAV, MP3, and OGG files
3988 -- application can read WAV files]
3989
3990
3991<<< above is not documented TODO
3992
3993
3994JmolVersion="14.7.0_2016.06.23"
3995
3996bug fix: nn.? and nn.* are not processed properly as float nn.
3997         For example: print (35 == 35.? "yes" : "no") cause script exception
3998
3999JmolVersion="14.7.0_2016.06.22"
4000
4001new feature: settable chain string using {atomset}.chain = "xxx"
4002
4003bug fix: compare(a,b,"isomer") does not detect ENANTIOMER (broken in 14.5.5)
4004bug fix: missing error trap for unsettable property setting
4005bug fix: load models {0 0 1} ... fails in script compiler
4006
4007JmolVersion="14.7.0_2016.06.21"
4008
4009bug fix: x3d export shows partial bond as standard bond
4010
4011JmolVersion="14.7.0_2016.06.14"
4012
4013bug fix: reading of protein structure for a group that is not in a polymer causes null pointer exception
4014
4015new feature: set hiddenLinesDashed
4016 -- when set TRUE, hidden lines in unit cells and boundbox are rendered as dashed lines.
4017 -- default is FALSE
4018
4019JmolVersion="14.7.0_2016.05.27"
4020
4021new feature: polyhedron -x.x ....
4022 -- sets maximum radius for gap calculation to be x.x
4023
4024JmolVersion="14.7.0_2016.05.26"
4025
4026bug fix: set hermiteLevel -4 allows hermite during mouse move but not spinning
4027bug fix: QchemReader not
4028
4029JmolVersion="14.7.0_2016.05.25"
4030
4031bug fix: polyhedron faces not generated correctly when postions are very close together (still)
4032bug fix: polyhedron face areas not calculated correctly
4033
4034new feature: $pbz1_1_.getProperty(x) where x is "info",
4035              "faces", "faceTriangles", "faceCount",
4036              "face_areas", "face_types", "face_points",
4037              "vertices", ...more...
4038  -- polyhedra information
4039
4040new feature: print unitcell("a=...,b=...,c=...,alpha=...,beta=...,gamma=....")
4041new feature: load ... unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
4042new feature: unitcell "a=...,b=...,c=...,alpha=...,beta=...,gamma=...."
4043  -- only the numbers are read; everything else is ignored, so order is important here
4044  -- uses the format created by show unitcell/a
4045
4046new feature: unitcell RECIPROCAL 2
4047  -- as integer, multiples of pi
4048
4049JmolVersion="14.7.0_2016.05.24"
4050
4051bug fix: localization broken due to too-old GNU msgfmt version.
4052bug fix: splash image not appearing in Jmol application  Help...about Jmol
4053bug fix: Jmol application Help may not appear at all
4054bug fix: switching out of hermite "fancy" cartoons doesn't actually do that.
4055
4056
4057code: removing unnecessary	J/api/JmolBioMeshRenderer.js
4058   -- when I started working with Java2Script, I thought that
4059      all references to a class had to be removed and an interface used instead
4060      if modularization was to work in JavaScript. But it turns out only "new Xxx()"
4061      will trigger that request. This might be something I changed in j2sjmol.js early
4062      on; I cannot remember.
4063
4064new feature: polyhedra AUTO ...
4065  -- sets polyhedron radius automatically, using "MAXIMUM GAP" rule
4066  -- see Zur Abgrenzung der Koordinationssph�re und Ermittlung der Koordinationszahl in Kristallstrukturen
4067         G. O. Brunner, D. Schwarzenbach, Zeitschrift f�r Kristallographie - Crystalline Materials, 1971, vol 133, issues 1-6 127-133
4068         http://www.degruyter.com/view/j/zkri.1971.133.issue-1-6/zkri.1971.133.16.127/zkri.1971.133.16.127.xml?rskey=sfBNTx&result=1
4069
4070JmolVersion="14.7.0_2016.05.23"
4071
4072new feature: unitcell reciprocal x.x
4073  -- allows scaling of reciprocal cell, similar to unitcell("reciprocal", x.x)
4074
4075new feature: write CIF
4076  -- just a very simple CIF file, P1 format
4077  -- allows writing a simple CIF file with changed coordinates after a UNITCELL command
4078
4079bug fix: calculate pointgroup polyhedra "xxx" does not work
4080bug fix: draw pointgroup $xxx does not work for named polyhedra
4081bug fix: named polyhedra set visibility broken
4082bug fix: colors light(and dark)grey and light(and dark)gray should be synonymous
4083bug fix: isosurface SILENT should pass that to readers
4084
4085popup menu: reorganization of color... submenu
4086
4087JmolVersion="14.7.0_2016.05.17"
4088
4089new feature: full implementation of OpenSMILES and OpenSMARTS in Jmol
4090  see http://opensmiles.org and http://www.moldb.net/opensmarts
4091
4092code: unnecessary org.jmol.util.BNode removed; methods now part of org.jmol.util.Node
4093
4094new feature: C13 NMR prediction from http://www.nmrdb.org/service/jsmol13c?smiles=CCCC
4095 -- although we send MOL file, not SMILES here.
4096 -- actuated with
4097
4098   SHOW NMR H1   // H1 1H H or just SHOW NMR all default to this
4099   SHOW NMR C13  // or C or 13C
4100   SHOW NMR none // close JSpecView
4101
4102new feature: Jmol now implements a way of indicating atropisomer chirality.
4103 -- measured dihedral angle is clockwise-positive front-to-back, as for Jmol dihedrals
4104 -- matching with {*}.find("SMILES","...a^nm-a...") where n and m are 1, 2, or 3
4105    indicate first, second, or third, respectively, and indicate which bonds of
4106    the biaryl bond, as written, are to the reference atoms.
4107 -- for example:
4108
4109   $ load $biphenol
4110   $ connect @{@7|@8} @{@1|@2} atropisomer
4111   $ print {*}.find("SMARTS","c1(O)ccccc1^23-c2c(O)cccc2")
4112
4113  ({0:13})
4114
4115  Explained below.
4116
4117new feature: CONNECT {pair1} {pair2} ATROPISOMER
4118 -- creates a new bond of type atropisomer (bond chirality in biaryl systems)
4119 -- each pair must include the bonded atom and its reference connected atom
4120 -- example:
4121
4122   $ load $biphenol
4123   $ connect @{@7|@8} @{@1|@2} atropisomer
4124   $ getProperty bondinfo[7].type
4125
4126   bondinfo[7].type	"atropisomer_23"
4127
4128new feature: BONDORDER ATROPISOMER_nm
4129  -- not for general use; will be found in state file
4130  -- for example:
4131
4132    select BONDS ({6});
4133    bondOrder atropisomer_23;
4134
4135new feature: Jmol SMILES bond atropisomerism ^nm- and ^^nm-
4136 -- indicates atropisomerism (bond chirality in biaryl systems)
4137 -- ^ and ^^ for bonds similar to @ and and @@ for atoms
4138 -- n and m are single-digit bond selectors, generally one of 1, 2, or 3
4139 -- n = 1/2/3 means "reference atom is first/second/third bonded
4140 -- ^- and ^^- same as ^22- and ^^22-, respectively
4141 -- example:
4142
4143   $ load $biphenol
4144   $ connect @{@7|@8} @{@1|@2} atropisomer
4145   $ print {*}.find("SMARTS","c1(O)cccc{c1^23-c2}c(O)cccc2")
4146
4147   ({1 6})
4148
4149  Here the "^23-" refers to the two carbons with connected oxygen atoms, because the second
4150  bond listed for the carbon on the left is to the c1(O) atom, and the third bond listed for
4151  the carbon on the right is to the other c(O) atom. Note that bond numbering includes the
4152  implicit bond to the atom coming from the atom on its left, which for the second carbon,
4153  starts with the atropisomeric bond itself, at least in this case.
4154
4155             1*23  1*23
4156     c1(O)ccccc1^23-c2c(O)cccc2
4157
4158<<< above is not documented TODO
4159
4160
4161bug fix: MolPRO reader broken
4162
4163bug fix: Jmol SMILES directive /noaromatic/ should ignore ":" bond type
4164bug fix: Jmol SMILES directive /aromaticDouble/ not implemented for SMILES
4165buf fix; Jmol SMARTS measurements should be required to come after branches
4166bug fix: Jmol SMILES parser should require connection numbers to be placed prior to branches
4167bug fix: Jmol SMILES should not allow (.t!50,60,70,80)
4168bug fix: Jmol SMILES should treat  search("[THR.*][THR.*]") should select all atoms in each group
4169bug fix: Jmol SMILES should return ({}) not ERROR if no atoms are involved
4170
4171code: StateCreator and Shape getStateInfo methods simplified and condensed
4172
4173JmolVersion="14.5.4_2016.04.30"
4174
4175new feature: 13C Simulated spectra (but without correlation yet)
4176
4177bug fix: bondorder command broken in 14.1.8_2014.02.17
4178bug fix: polyhedra COLLAPSED option in conjunction with UNITCELL breaks rendering
4179bug fix: "axis" keyword dropped from vocabulary, disabling MOVETO AXIS...
4180
4181JmolVersion="14.5.4_2016.04.25"
4182
4183new feature: (JavaScript) Jmol.loadFileFromDialog(jmolApplet0)
4184 -- asynchronous file loading on demand
4185 -- can be model file, but can also be script, dssr data - anything
4186 -- can be a local file or a URL
4187 -- see dssr.htm
4188 -- for example:
4189
4190      Jmol.jmolButton("jmolApplet0", [function(){Jmol.loadFileFromDialog(jmolApplet0)}],"Open File")
4191
4192new feature: setting DSSR on the fly:
4193
4194   model 1 property dssr "1d66.dssr"   // file containing data
4195   model 1 property dssr @{load("1d66.dssr")} // actual data
4196   select iloops
4197
4198<<< above is not documented TODO
4199
4200
4201bug fix: show spaceGroup can crash after load ... filter "biomolecule 1"
4202
4203bug fix: load =1auy.cif {1 1 1} does not complete atoms in unit cell
4204         for files with noncrystallographic symmetry operations (_struct_ncs...) such as viral capsids
4205
4206bug fix: load =1auy.cif {1 1 1} filter "BIOMOLECULE 1;*.ca" does not work
4207
4208code: =xxxx/DSSR path changed to http://dssr-jmol.x3dna.org from http://x3dna.bio.columbia.edu/dssr
4209
4210
4211JmolVersion="14.5.4_2016.04.24"
4212
4213new feature: show chemical xxx  where xxx is one of the file types:
4214
4215     alc cdxml cerius charmm cif cml ctx gjf gromacs hyperchem jme
4216     maestro mol mol2 sybyl2 mrv pdb sdf sdf3000 sln smiles xyz
4217
4218   retrieves this information for the currently selected set of atoms
4219   from the the NCI CACTVS Resolver.
4220
4221   Note that the PDB writer is nonstandard, and "SDF" no longer returns
4222   the 2D mol file, only the 3D mol file.
4223
4224   Can be used as the show() function: x = show("chemical jme")
4225
4226<<< above is not documented TODO
4227
4228
4229new feature: print {*}.find("SMILES/hydrogen/") adds hydrogen atoms
4230
4231<<< above is not documented TODO
4232
4233
4234feature note: JSME upgraded to JSME_2015-12-06-2
4235
4236bug fix: NCI switch to using /sdf for 3D rather than 2D, breaks jsv_predict2.html
4237  -- requires converting mrv format to jme:
4238
4239		function getJMEHs() {
4240			var x= show("chemical mrv")
4241			var x2 = x.split('x2="')[2].split('"')[1].split(' ')
4242			var y2 = x.split('y2="')[2].split('"')[1].split(' ')
4243			var el = x.split('elementType="')[2].split('"')[1].split(' ')
4244			var s =  '' + {*}.size + ' ' + {*}.bonds.size + ' ' + el.join(x2).join(y2).join(' ').replace('\n',' ')
4245			var b = x.split("<bond ")
4246			for (var i = 2; i <= b.length; i++) {
4247				 var bi = b[i]
4248				 var at = bi.split('atomRefs2="')[2].split('"')[1].replace('a','')
4249				 var n = (bi.find('>W<') ? -1 : bi.find('>H<') ? -2 : bi.split('order="')[2].split('"')[1])
4250				 s += ' ' +  at + ' ' + n
4251			}
4252			return s
4253		}
4254        load $morphine
4255		x = getJMEHs()
4256		print x
4257
4258
4259bug fix: show VARIABLES broken
4260bug fix: after load =xxxx/dssr, selection "naChains" is defined, but it is not an atom list
4261bug fix: hyperchem reader may not interpret aromatic correctly
4262bug fix: show chemical ... will not use the correct structure if it came from NCI and has been changed via modelKitMode.
4263
4264code: JmolBioModelSet and BioModel untangled
4265code: JmolBioModelSet moved to org.jmol.modelsetbio.BioModelSet
4266code: JmolBioModelSet changed from interface to class
4267code: unnecessary JmolBioResolver interface removed
4268
4269JmolVersion="14.5.4_2016.04.23"
4270
4271FEATURE CHANGE: Jmol 14.5.4_2016.04.23 by default will implement DSSP 2.0 as described in
4272                Int. J. Mol. Sci. 2014, 15, 7841-7864; doi:10.3390/ijms15057841
4273                and implemented at http://www.cmbi.ru.nl/dssp.html.
4274	            This change only affects helices that have bulges, indicating them
4275	            more appropriately as pi helices rather than alpha helices.
4276
4277	            The original version of DSSP, "DSSP 1.0" will be available using
4278
4279	            calculate structure DSSP 1.0
4280	            show DSSP 1.0
4281	            load ... filter "DSSP1"
4282
4283	            This change is for 14.5 only, not 14.4, which remains DSSP 1.0
4284
4285code: unnecessary org.jmol.modelset.JmolBioModel interface removed
4286code: unnecessary org.jmol.api.DSSPInterface removed
4287code: DSSP 1.0/2.0 switch in ModelLoader only necessary while 14.4 and 14.5 are being compiled in parallel
4288
4289JmolVersion="14.5.4_2016.04.22"
4290
4291bug fix: on loading, crystallographic file reading fails when applying symmetry
4292bug fix: on loading, user-defined space groups using Hall symbol fails
4293bug fix: SHELX reader broken
4294
4295
4296JmolVersion="14.5.4_2016.04.21"
4297
4298bug fix: CIF files with missing tags that Jmol needs fail to load at all.
4299         (Not necessarily a bad thing, but it is not supposed to fail so dramatically.)
4300bug fix: mmCIF/mmTF reader does not complete symmetry for biomolecules when there is a lattice.
4301         for example:
4302
4303  	       load =2tbv.mmtf {1 1 1} filter "biomolecule 1;*.ca"
4304  	       backbone off; spacefill 200%
4305  	       color property symop
4306
4307bug fix: mmCIF, PDB, and mmTF readers with lattice indicated does not show unit cell
4308
4309JmolVersion="14.5.4_2016.04.19"
4310
4311new feature: preliminary MMTF reader
4312  -- MacroMolecular Transmission Format (MMTF, from RTSB)
4313  -- see https://github.com/rcsb/mmtf/blob/master/spec.md#overview
4314  -- binary format for file transfer and molecule construction
4315  -- uses MessagePack binary JSON format
4316  -- entirely experimental; not for general consumption
4317  -- biomolecule processing works
4318  -- DSSP secondary structure is read
4319
4320 *
4321 * JmolData RCSB MMTF (macromolecular transmission format) file reader
4322 *
4323 * see https://github.com/rcsb/mmtf/blob/master/spec.md
4324 *
4325 * /full/ specification as of 2016.4.18 is implemented,including:
4326 *
4327 * reading atoms, bonds, and DSSR secondary structure
4328 *
4329 *   load =1f88.mmtf
4330 *
4331 *
4332 * reading space groups and unit cells, and using those as per other readers
4333 *
4334 *   load =1crn.mmtf {1 1 1}
4335 *
4336 * reading bioassemblies (biomolecules) and applying those transformations
4337 *
4338 *   load =1auy.mmtf FILTER "biomolecule 1;*.CA,*.P"
4339 *
4340 * reading biomolecules and lattices, and loading course-grained
4341 *
4342 *   load =1auy.mmtf {2 2 1} filter "biomolecule 1;bychain";spacefill 30.0; color property symop
4343 *
4344 *
4345
4346bug fix: certain viral capsid CIF files will fail to load due to this line: XAU '(X0)(1-10,21-25)' A,B,C
4347bug fix: DSSR selection includes too many atoms
4348bug fix: PSE reader broken in JmolData.jar; no issue with Jmol.jar or JSmol
4349bug fix: PSE reader for Pymol 1.7.5 files may not set some models visible
4350bug fix: PSE reader not processing (sele) and related selections
4351
4352new feature: set window width height
4353new feature: set window [width height]
4354new feature: set window "xxx.png"
4355
4356new feature: getProperty("shapeInfo.echo")
4357 -- a 1-length array (because all shapeInfo results are arrays
4358 -- shapeInfo.echo[0] contains an associative array based on echo names
4359 -- currently only include keys name, imageWidth, imageHeight, and imageFile
4360
4361	$ set echo myecho image 'http://noys3.weizmann.ac.il/a2jb/browse?sn=testSet/dna-a/pymol.png'
4362	$ print getProperty("shapeInfo.echo[0]")
4363	{
4364	  "myecho"  :
4365	  {
4366	    "imageFile"  :  "http://noys3.weizmann.ac.il/a2jb/browse?sn=testSet/dna-a/pymol.png"
4367	    "imageHeight"  :  500
4368	    "imageWidth"  :  500
4369	    "name"  :  "myecho"
4370	   }
4371	 }
4372
4373 -- idea is to allow access to image dimensions for any file image
4374 -- for example, for a MacPyMOL session file, because those do not contain width and height information,
4375    we don't have the width and height we need to recreate the model window and associated Jmol image,
4376    but we can also read the associated PyMOL-generated PNG file and get the dimensions that way
4377
4378	    load 'xxxx.pse' filter 'DORESIZE;DOCACHE'
4379	    set echo myecho image 'xxxx.png'
4380	    var a = getProperty('shapeInfo.echo[0].myecho')
4381	    set echo myecho off
4382	    write PNGJ @{a.imageWidth} @{a.imageHeight} 'xxxx-jmol.png'
4383
4384    thus temporarily loading the PyMOL image just long enough to get its dimensions; not actually viewing it
4385
4386bug fix: SET nihResolverFormat   does not work; using "=" does work.
4387		 (There should be no reason to set this; Jmol is automatically changing those to "https".)
4388
4389JmolVersion="14.5.4_2016.04.14"
4390
4391bug fix: Jmol 14.5.4_2016.04.13 will fail to read PDB files from scripts referencing http://www.rcsb.org/pdb/
4392 -- does not affect http://www.rcsb.org/pdb/ligand
4393 -- does not affect load =xxxx or load ==xxx
4394 -- does not affect PNGJ files
4395 -- only affects scripts that specifically reference that site (e.g. state scripts created prior to 4/13/2016)
4396
4397bug fix: selection of dssr elements using select within(dssr,"pairs[where...]") is not working
4398 -- example after fix:
4399    $ load =1d66/dssr
4400	$ print _M.dssr.pairs.select("where bp='G-C'")[1]
4401	{
4402	  "DSSR"  :  "cW-W"
4403	  "LW"  :  "cWW"
4404	  "Saenger"  :  "19-XIX"
4405	  "bp"  :  "G-C"
4406	  "index"  :  3
4407	  "name"  :  "WC"
4408	  "nt1"  :  "|1|D|DG|3||||"
4409	  "nt2"  :  "|1|E|DC|36||||"
4410	 }
4411   $ select within(dssr,"pairs")
4412   773 atoms selected
4413   $ select within(dssr,"pairs[where bp='G-C']")
4414   243 atoms selected
4415   $ select within(dssr,"pairs[where name='WC']")
4416   691 atoms selected
4417
4418 -- Note that this works because SELECT can find unit ids ("|1|E|DC|36||||") in any string.
4419    For example:
4420
4421    $ select "|1|E|DC|36||||"
4422    19 atoms selected
4423
4424
4425
4426JmolVersion="14.5.4_2016.04.13"
4427
4428bug fix: JSmol cannot load RCSB ligand files
4429bug fix: "axis" unintentionally made reserved word in "14.4.4_2016.03.19"
4430bug fix: symop(@1 @2) broken
4431bug fix: symop() taking default unitcell from "current" -- should be that it
4432         REQUIRES a prefix "{xxx}." if @1 or @2 are not indicated and there are
4433         multiple models (because it is a general function, not a script command).
4434
4435bug fix: models from PyMOL reader do not save atom colors in state when balls are colored
4436
4437new feature: "$isosurface1".getProperty("atoms")
4438 -- returns atoms associated with this surface
4439 -- for example, the atoms used to make a molecular surface
4440
4441 <<< above is not documented TODO
4442
4443
4444
4445new feature: show xxx /yyy
4446  -- filters any SHOW command for lines containing "yyy" (case insensitive)
4447  -- examples:
4448
4449  	$ show symop/glide
4450  	$ show set/zoom
4451  	$ show state/draw
4452  	$ show file "test.xyz" /H
4453  	$ show file "/remark 900"
4454  	$ show variables/sym
4455
4456 <<< above is not documented TODO
4457
4458
4459new feature: symop(3,@3,"atom")
4460  -- returns target atom or atoms
4461
4462new feature: show symop 3 @3 "atom"
4463  -- shows target atom or atoms
4464
4465<<< above is not documented TODO
4466
4467
4468JmolVersion="14.5.4_2016.04.11"
4469
4470new feature: symop() options:
4471  symop(op)
4472    -- returns the 4x4 matrix representation of this operator
4473  symop(op, atom)
4474    -- returns the point generated by operator op on atom
4475    -- op may be a positive or negative integer indictating the operation (or its reverse)
4476       to apply from the loaded space group -- for example, symop(3, @1) or symop(-4, {atomindex=16})
4477    -- op may be a string such as "x+1/2,1/2-y,z" representing a specific generic operation
4478  symop(atom1, atom2)
4479    -- returns the description of the first of possibly several operations that take atom1 to atom2, for example:
4480       "2-fold screw axis|translation: 1/2 0 0"
4481  symop(atom1, atom2, n)
4482    -- returns the description of the nth operation that takes atom1 to atom2
4483  symop(...point...)
4484    -- any place an atom can be used in symop(), one can substitute an xyz coordinate.
4485    -- for example, symop(@1, {1/2 1/2 1/2})
4486  {atomset}.symop(...)
4487    -- when more than one model is loaded, prepending any symop function with an atom set specifies which
4488       atoms, space group, and unit cell are being referenced. For example, {2.1}.symop(5) operates only on
4489       atoms in the first model of the second loaded file, using the appropriate space group and unit cell.
4490       In this way, "@1" will designate one atom only, provided only one model is showing (using the FRAME/MODEL command).
4491       If only one model has been loaded, there is no need to use this syntax; symop(...) will do the same.
4492  symop(..., outputType)
4493   -- All uses of symop() and {atomset}.symop() can be extended using a final parameter that
4494     changes the default output described above to be something else. Options for outputType include:
4495
4496     "draw"    Returns the Jmol script illustrating this operation with DRAW commands.
4497
4498       $ print symop(3,"draw")
4499        draw ID draw_* delete
4500        draw ID draw_frame1X diameter 0.15{5.5172 1.9683 2.7802}{6.5172 1.9683 2.7802} color red
4501        ...
4502
4503     "full"    Returns the tab-separated Jones-Faithful string and descriptor for this operation.
4504
4505       $ print symop(3,"full")
4506        -x,-y,-z(mx,my,mz)  	Ci: 0 0 0
4507
4508     "lattice" Returns the lattice type associated with the space group involving this operation.
4509
4510     "list"    Specifically when two atoms or points are specified, returns a string list of all operations
4511               taking the first to the second.
4512
4513       $ print symop(@3,@21,"list")
4514			5	x+1/2,-y+1/2,-z+1/2(-mx,my,mz)	2-fold screw axis|translation: 1/2 0 0|time-reversed
4515			7	-x+1/2,y+1/2,z+1/2(-mx,my,mz)	n-glide plane|translation: 0 1/2 1/2|time-reversed
4516
4517               Note that this string can be turned into a standard array using .lines.split("\t",true):
4518
4519       $ print symop(@3,@21,"list").lines.split("\t",true)
4520		  [
4521		    5
4522		    x+1/2,-y+1/2,-z+1/2(-mx,my,mz)
4523		    2-fold screw axis|translation: 1/2 0 0|time-reversed
4524		  ]
4525		  [
4526		    7
4527		    -x+1/2,y+1/2,z+1/2(-mx,my,mz)
4528		    n-glide plane|translation: 0 1/2 1/2|time-reversed
4529		  ]
4530
4531     "array"   Returns an associative array that contains critical information relating to this operation.
4532
4533       $ load =magndata/0.34
4534       $ print symop(3,"array")
4535		{
4536		  "inversionCenter"  :  {0.0 0.0 0.0}
4537		  "label"  :  "Ci: 0 0 0"
4538		  "matrix"  :
4539		  [
4540		  [-1.0,	0.0,	0.0,	0.0]
4541		  [0.0,	-1.0,	0.0,	0.0]
4542		  [0.0,	0.0,	-1.0,	0.0]
4543		  [0.0,	0.0,	0.0,	1.0] ]
4544		  "timeReversal"  :  1
4545		  "xyz"  :  "-x,-y,-z(mx,my,mz)"
4546		  "xyzOriginal"  :  "-x,-y,-z,m"
4547		 }
4548
4549	   In addition, all possible keys of this array may be used as well for outputType. These include:
4550
4551	       "axisVector", "cartesianTranslation", "centeringVector", "fractionalTranslation",
4552         "inversionCenter", "label", "matrix", "plane", "rotationAngle",
4553         "timeReversal", "unitTranslation", "xyz", and "xyzOriginal"
4554
4555     Three of these that may be less than obvious are explained below:
4556
4557     "centeringVector"  For operations that are pure lattice translations, returns the vector
4558                        for this centering in fractional coordinates.
4559
4560     "timeReversal"     This quantity is 0 for standard space groups. Magnetic space group
4561                        operations also include the possibility of inversion of the spin
4562                        along with any 3D symmetry operation. This inversion characteristic
4563                        is referred to as "time reversal" and takes the value of 1 or -1.
4564
4565     "unitTranslation"  Symmetry operations involving two atoms may include an extra
4566                        lattice translation if the two atoms are in different unit cells.
4567                        This translation is above and beyond any fractional lattice centering
4568                        that this operator incorporates for a face- or body-centered space group.
4569
4570     "id"               A number 1 - N, where N is the number of symmetry operators in the space group.
4571     					(added in Jmol 14.29.17)
4572
4573<<< above is not documented TODO
4574
4575new feature: show spacegroup/xxxxx
4576
4577 -- selects lines from a space group report similar to the way show state/xxxx works
4578 -- example:
4579
4580  load =ams/quartz 1
4581  show spacegroup/Class
4582
4583new feature: show/draw symop @1 @2
4584 -- gives full list of matching symmetry operations
4585 -- example:
4586
4587	$ load =magndata/1.23 {444 555 1} packed
4588	$ show symop  @153 @299
4589
4590    1	x+2,y,z2(mx,my,mz)	translation: 2 0 -2
4591    5	-x,-y,-z(mx,my,mz)	Ci: 0 0 0
4592    11	x+2,-y,-z(-mx,my,mz)	2-fold screw axis|translation: 2 0 0|time-reversed
4593    15	-x,y,z2(-mx,my,mz)	c-glide plane|translation: 0 0 -2|time-reversed
4594
4595new feature: show/draw symop @1 @2 n
4596 -- shows or draws the nth symmetry operation relating atom 1 to atom 2
4597 -- example:
4598
4599	$ load =magndata/1.23 {444 555 1} packed
4600	$ show symop  @153 @299 3
4601
4602    11	x+2,-y,-z(-mx,my,mz)	2-fold screw axis|translation: 2 0 0|time-reversed
4603
4604new feature: print pointgroup("spacegroup", @1)
4605 -- analyzes the point group (crystal class) of a crystal.
4606 -- uses three irrational-coordinate points to generate all possible operators
4607 -- creates a map with keys (somewhat variable depending upon axes present):
4608
4609	C2
4610	C3
4611	Ci
4612	Cs
4613	S6
4614	detail
4615	distanceTolerance
4616	linearTolerance
4617	nAtoms
4618	nC2
4619	nC3
4620	nCi
4621	nCn
4622	nCs
4623	nS6
4624	nSn
4625	nTotal
4626	name
4627	points
4628	principalAxis
4629
4630new feature: draw SPACEGROUP
4631 -- draws all operations in space group
4632
4633new feature: draw POINTGROUP SPACEGROUP
4634 -- draws crystal class symmetry operations for a space group
4635 -- uses point group style, with circular planes
4636
4637new feature: @1.find("crystalClass", pt)
4638  -- generates a list of points based on a model's crystal class (point group)
4639  -- uses @1 just to find the unit cell and space group
4640  -- optional pt is used as a generator (defaults to @1)
4641  -- example:
4642   load =ams/calcite 1
4643   x = @3.find("crystalClass")
4644   print pointgroup(x).name
4645   draw points @x
4646   polyhedra ID p {0 0 0} to @x
4647
4648bug fix: qchem reader fails to switch to spherical D/F basis for second structure
4649bug fix: pointGroup secondary axis in yellow is too hard to see -- using "orange" instead
4650
4651JmolVersion="14.5.4_2016.04.05b"
4652
4653bug fix: unitcell primitive for A,B,C-centered lattices rotated 90 degrees from
4654         NRL standard (Michael Mehl, U.S. Naval Research Laboratory)
4655bug fix: polyhedra COLLAPSED do not have correct normal vectors
4656bug fix: assocArray.bin() should allow "TRUE" option
4657bug fix: =mp/24972 not working after switch to https
4658
4659new feature: adds SHOW SMILES/bio  and {*}.find("SMILES/bio") options:
4660    /bio              Jmol bioSMILES with header and chain comments
4661	/bionocomments    no chain comments (but still one header with comments)
4662	/bioatomcomments  full atom comments
4663	/biocovalent      indicates covalent S-S crosslinking using ":" notation
4664	/biohbond         indicates hydrogen bonds using ":" notation
4665	/biounmatched     allows unmatched rings
4666
4667new feature: SMILES/nonaromatic same as SMILES/noaromatic
4668
4669JmolVersion="14.5.4_2016.04.03"
4670
4671bug fix: draw SCALE x.x symop has no effect; good to be able to scale down the arrow
4672bug fix: draw symop can fail for second call
4673
4674JmolVersion="14.5.4_2016.03.31"
4675
4676bug fix: load $xxxx broken; http://cactus --> https://cactus
4677bug fix: _geom_bond_distance starting with "." halts CIF file reading
4678
4679JmolVersion="14.5.4_2016.03.29"
4680
4681code: ru.po updated (Angel Herraez)
4682
4683bug fix: SMILES generator still broken in 14.4.4_2016.03.25
4684bug fix: smiles1.find("SMILES",smiles2) broken in 14.4.3_2016.03.06
4685
4686new feature: Polyhedra command allows for min and max radius
4687  -- polyhedra 2.8 3.0 @3
4688
4689bug fix: unitcell PRIMITIVE for rhombohedral groups not implemented
4690bug fix: unitcell("primitive","R")  not implemented
4691
4692bug fix: WRITE IMAGE with negative width or height should throw a Jmol ScriptException
4693bug fix: draw ... [x y] does not position properly with antialias true
4694bug fix: allow AXES TYPE "" or non-recognized to be same as "abc"
4695bug fix: AXES TYPE "ab" should also be allowed when offset or center is set
4696bug fix: labels should not change size when creating images of
4697         different size than screen when angstromsPerInch != 0.
4698bug fix: if...BREAK|CONTINUE in unbracketed context does not properly
4699         place implicit END IF when TRUE clause is on next line
4700         AND next statement after that is another IF command:
4701            if (xxxx)
4702              break;
4703            if (yyyy)
4704              zzzz;
4705          becomes
4706            if (xxxx) {
4707              break;
4708              if (yyyy) {
4709                zzzz;
4710              }
4711            }
4712          instead of
4713            if (xxxx) {
4714              break;
4715            }
4716            if (yyyy) {
4717              zzzz;
4718            }
4719
4720
4721JmolVersion="14.5.4_2016.03.25"
4722
4723new feature: moveto AXIS <a|b|c|-a|-b|-c> coupled with <1|2|3|4>
4724 -- indicates direction of axis ("-a" indicates "a pointing away")
4725 -- and clockwise position 1(top left), 2(top right), 3(bottom right), and 4(bottom left)
4726 -- defaults a == a1, b == -b1, c == c4
4727 -- slight modification of what was released in 03.21
4728
4729bug fix: JavaScript Jmol.evaluateVar() does not properly escape JSON strings
4730bug fix: SMILES generator broken in 03.23
4731
4732JmolVersion="14.5.4_2016.03.24b"
4733
4734
4735bug fix: axes/unitcell/boundbox appear 10x too thick after recalling from state
4736 -- broken in JmolVersion="14.5.4_2016.03.21"
4737
4738bug fix: polyhedra fix for overlapping face triangles
4739bug fix: magnetic spin vector trail disappears when not vibrating
4740bug fix: magnetic spin vector trail does not reset if set vectorscale <n> where <n> is less than current
4741
4742JmolVersion="14.5.4_2016.03.24"
4743
4744bug fix: NCI requires stereochemistry to rings to be prior to a branch:
4745         C\1(/C)=C\C=C.C/1=C not C(/C)\1=C\C=C.C/1=C
4746
4747new feature: x.bin() method allows return of an array listing both the bound and the count
4748 -- example:
4749
4750 		$ print {*}.bonds.length.all.bin(1,2,0.1,TRUE).format("json")
4751		[ [ 1.0,10.0 ],[ 1.1,0.0 ],[ 1.2,0.0 ],[ 1.3,3.0 ],[ 1.4,2.0 ],[ 1.5,1.0 ],[ 1.6,0.0 ],[ 1.7,0.0 ],[ 1.8,0.0 ],[ 1.9000001,0.0 ] ]
4752
4753
4754new feature: load =magndata/1.1.37
4755 -- links to the MAGNDATA database at http://webbdcrista1.ehu.es/magndata
4756 --     "magndata", "http://webbdcrista1.ehu.es/magndata/mcif/%FILE.mcif",
4757
4758new feature: set vectorTrail n
4759 -- adds a trail onto a modulating vector (as for an incommensurate magnetic spin)
4760 -- n trails are made, typically in a fan-like pattern that trails the spinning vector
4761      load =magndata/1.1.37
4762      set vectortrace 20
4763      set vibrationperiod 2
4764      vibration on
4765
4766bug fix: saving a state after using LOAD "" (empty quotes)
4767         after pasting data directly into the application creates an unreadable state
4768
4769new feature: unitcell ON  adds #nnn (international table number) to cell description if found
4770
4771bug fix: {*}.find("CHEMICAL","NAMES") only reports one name.
4772
4773code: more efficient identifying space group
4774
4775JmolVersion="14.5.4_2016.03.22"
4776
4777bug fix: select picking invertstereo  broken
4778
4779bug fix: unitcell PRIMITIVE does not work as reported 3/21
4780bug fix: unitcell("conventional","F") does not work
4781bug fix: crystal systems with translational symmetry may have duplication of symmetry operators
4782
4783
4784JmolVersion="14.5.4_2016.03.21"
4785
4786new feature: axes OFFSET x.x
4787 -- applies offset of x.x in fractional coordinates in each axis direction
4788 -- AXES OFFSET -0.1   same as   AXES CENTER {-0.1 -0.1 -0.1/1}
4789
4790new feature: expanded unitcell() function
4791 -- adds additional types: "A", "B", "C", "I", "F"
4792 -- default is the lattice type of the model's space group
4793 -- not just cubic; "BCC" is converted to "I"
4794 -- for example:
4795
4796	 load =ams/silicon 15 packed   // Cmca
4797	 draw id "uc" diameter 0.1 unitcell mesh nofill color black
4798	 unitcell @{unitcell("primitive")}
4799	 color unitcell red
4800	 unitcell 0.1
4801	 axes unitcell
4802	 axes on
4803
4804new feature: expanded UNITCELL command to include PRIMITIVE option for any space group
4805
4806bug fix: SMILES matcher not allowing azulene to be aromatic
4807
4808bug fix: OpenSMILES matcher not allowing non-chemist Hueckel 4+2 interpretation
4809
4810bug fix: SMILES generator not adding "-" for biphenyl Ar-Ar bond
4811
4812bug fix: set picking invertSTEREO  does not work on open-ring systems
4813
4814bug fix: SMARTS [R] matching all atoms
4815
4816bug fix: dashed lines not visible in measurements, unit cells, and axes
4817
4818bug fix: axes 0.01  produces thick 20-pixel-wide lines
4819 -- solution was to drop that to 0.001 for this effect
4820
4821JmolVersion="14.5.4_2016.03.14"
4822
4823bug fix: Polyhedra with verticies that are also centers of polyhedra for atoms that were visible
4824         but are no longer visible do not update screen positions properly
4825
4826JmolVersion="14.5.4_2016.03.13"
4827
4828new feature: polyhedra POINTS x.y
4829  -- adds variable size spherical points at corners of polyhedra
4830  -- color is that of element, or black
4831
4832new feature: show SMILES/xxxx
4833 -- xxxx = open, strict, openstrict, mmff94
4834
4835new feature: show chemical NAME
4836 -- singular "name" gives just the first name; "names" gives full list
4837
4838new feature: full implementation of OpenSMILES aromatic model
4839
4840TODO: DOCUMENT-->>>
4841
4842new feature: {*}.find("SMILES/open")
4843 -- generates OpenSMILES string for selected atoms
4844 -- applies OpenSMILES aromaticity rules for 5-, 6-, and 7-membered rings
4845 -- not chemical -- allows exocyclic c=C bonds and [nH] in 6-membered rings
4846 -- also adds atom class if property_atomClass is nonzero
4847 -- for example:
4848
4849	$ load $2-butanol
4850	$ @2.property_atomclass=2
4851	$ @3.property_atomclass=3
4852	$ @5.property_atomclass=5
4853	$ print {*}.find("smiles/open")
4854
4855		C[C@H:2]([OH:5])[CH2:3]C
4856
4857new feature: /open option for smiles.find("SMILES", pattern)
4858 -- applies OpenSMILES model of aromaticity
4859 -- finds aromaticity-normalized pattern "in" aromaticity-normalized smiles
4860 -- can be after SMILES or as beginning of pattern
4861	$ print "OC1=CC(N)=CC=C1".find("SMILES","NC1=CC(O)=CC=C1")
4862	0
4863	$ print "OC1=CC(N)=CC=C1".find("SMILES/open","NC1=CC(O)=CC=C1")
4864	8
4865	$ print "OC1=CC(N)=CC=C1".find("SMILES","/open/NC1=CC(O)=CC=C1")
4866	8
4867
4868new feature: compare("smile1","/open/smiles2")
4869 -- applies OpenSMILES model of aromaticity
4870 -- checks for match of atom class if present (default value 0 matches "not present")
4871 -- does aromaticity normalization on both strings
4872	$ print compare("OC1=CC(N)=CC=C1", "NC1=CC(O)=CC=C1", "isomer")
4873	CONSTITUTIONAL ISOMERS
4874	$ print compare("OC1=CC(N)=CC=C1", "/open/NC1=CC(O)=CC=C1", "isomer")
4875	IDENTICAL
4876
4877new feature: {*}.find("SMILES/strict")
4878 -- generates OpenSMILES string for selected atoms
4879 -- applies standard Hueckel aromaticity rules for 5-, 6-, and 7-membered rings
4880 -- does not allow exocyclic c=C bonds or [nH] in 6-membered rings
4881 -- does not create atom classes
4882 -- also for compare() and search()
4883
4884new feature: {*}.find("SMILES/open strict")
4885 -- same as just /strict, but also generates atom classes if present as property_atomClass
4886 -- also for compare() and search()
4887
4888new feature: {*}.find("SMILES/mmff94")
4889 -- applies a very STRICT, chemically meaningful Hueckel 4+2 Rule
4890 -- adds allowance for only a 1-electron contribution to 6-membered rings (three double bonds)
4891 -- also for compare() and search()
4892
4893new feature: optional processing of OpenSMILES [CH2:002] ":<n>" atom class.
4894 -- positive integer value only
4895 -- checks the atom property property_atomclass
4896 -- for SMARTS, [:0] means "without an atomclass"
4897 -- for SMARTS, [!:0] means "any non-zero atomclass"
4898 -- for SMARTS, same as [$(select property_atomclass=n)]
4899 -- only enabled with Jmol SMILES directive "/open/"; otherwise ignored
4900 -- for example:
4901
4902	$ load $2-butanol
4903	$ show smiles
4904
4905  		C[C@H](O)CC
4906
4907	$ @2.property_atomclass=2
4908	$ @3.property_atomclass=3
4909	$ @5.property_atomclass=5
4910
4911	$ select *
4912		15 atoms selected
4913	$ select on search("/open/[:3]")
4914		1 atoms selected
4915	$ select on search("/open/[!:3]")
4916		14 atoms selected
4917	$ select on search("/open/[:0]")
4918		12 atoms selected
4919	$ select on search("/open/[!:0]")
4920		3 atoms selected
4921	$ select on search("/open/[!:3 & !:0]")
4922		2 atoms selected
4923
4924new feature: UNITCELL TRANSFORM @m4x4
4925  -- direct 4x4 matrix transformation of a unit cell
4926
4927new feature: calculate symmetry  polyhedra {atomset}
4928  -- selectively calculates polyhedra.
4929  -- for example: calculate symmetry polyhedra {polyhedra(4)}
4930
4931new feature: calculate symmetry  polyhedra id
4932  -- selectively calculates polyhedra for a given ID.
4933  -- for example: calculate symmetry polyhedra "poly1"
4934
4935
4936new feature: atom set can be specified in polyhedra() function:
4937  -- print {2.1}.polyhedra(3)
4938  -- print {2.1}.polyhedra("....polySMILES string...")
4939
4940TODO: document <<<----------
4941
4942new feature: WRITE MOL67 xxx.mol
4943 -- writes MOL format with bonds of type 6 or 7 (aromatic single/double; rarely significant)
4944
4945
4946bug fix: SMILES should not be returned with comments for internal processing or sending to PubChem or others
4947
4948bug fix: SHOW chemical SMILES can be off because it was using the name, not the SMILES string
4949 -- sometimes - e.g. "menthol" - the name has no chirality, but the structure does (of course).
4950
4951bug fix: Jmol 14.3.16_2015.09.15 broke first-match-only flag in SMILES mapping
4952
4953bug fix: POLYHEDRA when selection halos are on, all have edges
4954
4955bug fix: moving of polyhedron will fail if corner of polyhedron is an atom
4956
4957bug fix: macro functions cannot be used later in same script as a MACRO command
4958 -- presence of MACRO command now removes check for unknown command name exception
4959
4960bug fix: Tripos MOL2 reader does not read element symbols properly
4961
4962bug fix: default write MOL file should not indicate aromatic bond types 6 and 7
4963 -- corrects the fact that these bonds are reserved for queries
4964 -- only affects cases where that bond type has been set (after calculate aromatic or loading of ligand CIF files
4965
4966
4967JmolVersion="14.5.4_2016.03.08"
4968
4969bug fix: OpenSMILES even-atom cumulene stereochemistry not implemented
4970 -- examples (reporting "DIASTEREOMERS")
4971   print compare("F/C=C=C=C/F","F/C=C=C=C\\F","isomer")
4972   load $F-C=C=C=C-F;print compare("F/C=C=C=C\\F",{1.1},"isomer")
4973
4974bug fix: SMILES generator unnecessarily over-expressing double-bond / and \.
4975
4976new feature: (JSmol) standard InChI generator (see inchi.htm, inchi/*)
4977 -- JavaScript library for generation of InChIs
4978 -- runs completely in JavaScript
4979 -- equivalent to SHOW CHEMICAL stdinchi
4980 -- about 900 KB
4981
4982
4983JmolVersion="14.5.3_2016.03.06"
4984
4985bug fix: Inconsistent use of "DIASTEREOMERS" (preferred) and "DIASTERIOMERS" (incorrect)
4986
4987JmolVersion="14.5.3_2016.03.05"
4988
4989bug fix: SMILES TB trigonal bipyramidal stereochemistry not functional
4990bug fix: SMILES [@TBn] not recognizing n > 2
4991
4992bug fix: SMILES OH octahedral stereochemistry error
4993bug fix: SMILES [@OHn] not recognizing n > 2
4994
4995bug fix: SMILES SP square planar stereochemistry will report ENANTIOMERS rather than DIASTEREOMERS
4996
4997JmolVersion="14.5.3_2016.03.03b"
4998
4999bug fix: CIF reader _atom_site_cartn_x incompatible with _geom_bond
5000 -- this fix now allows Jmol to read very simple CIF files that are equivalent to unlimited-atom MOL files
5001 -- _ccdc_geom_bond_type is not required, defaulting to S
5002 -- _ccdc_geom_bond_types include S, D, T, Q (quadruple), and A (aromatic)
5003
5004	data_icosahedron
5005	loop_
5006	_atom_site_label
5007	_atom_site_Cartn_x
5008	_atom_site_Cartn_y
5009	_atom_site_Cartn_z
5010	C01  0.0000000000  0.0000000000  9.5105651630
5011	C02  8.5065080835  0.0000000000  4.2532540418
5012	C03  2.6286555606  8.0901699437  4.2532540418
5013	C04 -6.8819096024  5.0000000000  4.2532540418
5014	C05 -6.8819096024 -5.0000000000  4.2532540418
5015	C06  2.6286555606 -8.0901699437  4.2532540418
5016	C07  6.8819096024  5.0000000000 -4.2532540418
5017	C08 -2.6286555606  8.0901699437 -4.2532540418
5018	C09 -8.5065080835  0.0000000000 -4.2532540418
5019	C10 -2.6286555606 -8.0901699437 -4.2532540418
5020	C11  6.8819096024 -5.0000000000 -4.2532540418
5021	C12  0.0000000000  0.0000000000 -9.5105651630
5022	loop_
5023	_geom_bond_atom_site_label_1
5024	_geom_bond_atom_site_label_2
5025	_ccdc_geom_bond_type
5026	C01 C02 S
5027	C01 C03 S
5028	C01 C04 S
5029	C01 C05 S
5030	C01 C06 S
5031	C02 C03 S
5032	C03 C04 S
5033	C04 C05 S
5034	C05 C06 S
5035	...etc...
5036
5037
5038JmolVersion="14.5.3_2016.03.03"
5039
5040bug fix: after SET echo ALL, background echo ... changes text color, not background color
5041
5042JmolVersion="14.5.3_2016.03.02"
5043
5044bug fix: JavaScript reference to j2s for working gif does not recognize Info.j2sPath
5045
5046JmolVersion="14.5.3_2016.02.28"
5047
5048bug fix: cyclic peptides do not complete loop for cartoons, backbone, etc. (1SFI)
5049
5050JmolVersion="14.5.3_2016.02.27"
5051
5052bug fix: [function:"yyy",Function:"zzz"] fails to retain key capitalization after first entry for special names
5053bug fix: (JavaScript only) polyhedra not saved in state
5054bug fix: (Applet) broken image in coverImage
5055bug fix: polyhedra DELETE can crash Jmol if polyhedra are not colored
5056
5057JmolVersion="14.5.3_2016.02.17"
5058
5059bug fix: slab/depth SET do not behave properly
5060bug fix: select VISIBLE is not properly set based on slab/depth SET
5061
5062bug fix: _GEOM_BOND reading in CIF files nonfunctional.
5063 -- broken in 13.3.4_dev_2013.08.21
5064 -- result is that between 8/21/2013 and 2/15/2016 the CIF reader
5065    would not recognize _GEOM_BOND and so also not create whole molecules
5066    as it was designed to do when those are present.
5067 -- no impact on states created within this version range
5068 -- no impact on mmCIF reader
5069 -- only impact is upon Materials Studio-generated files such as
5070    http://www.rsc.org/suppdata/cc/c2/c2cc34714h/c2cc34714h.txt
5071    (supplemental mat. for http://pubs.rsc.org/en/Content/ArticleLanding/2012/CC/c2cc34714h)
5072    See Jmol list discussion: https://sourceforge.net/p/jmol/mailman/message/31308577/
5073
5074
5075JmolVersion="14.5.2_2016.02.14"
5076
5077FEATURE CHANGE: JSmol default for Info._disableInitialConsole changed to true
5078 -- no longer necessary with JSmol_spinner.gif
5079
5080new feature: j2s/img/JSmol_spinner.gif implemented (Angel Herraez)
5081 -- as default for Info._appletLoadingImage
5082 -- use Info._appletLoadingImage = "none" to disable
5083
5084new feature: j2s/img/cursor_wait.gif animation implemented
5085
5086bug fix: STRUCTURE statement (utilized in RESTORE STRUCTURE) broken
5087 -- broken in Jmol 14.4.0_2015.10.30
5088
5089bug fix: EBI assembly CIF files that are multi-model files will be by chain, not by model.
5090  -- result was that each chain became a new model
5091  -- for example: see http://www.ebi.ac.uk/pdbe/static/entry/download/2lev-assembly-1.cif.gz
5092
5093bug fix: XmlMolProReader does not recognize FILTER "NOMO"
5094
5095bug fix: JSmol has never shown cursors
5096
5097JmolVersion="14.5.2_2016.02.09"
5098
5099new feature: invertselected ATOMS {ring atoms to invert}
5100 -- inverts ring stereochemistry
5101 -- requires prior selection of all atoms to be involved in the inversion
5102
5103bug fix: SMARTS pattern [ALA.*] not working without biological polymer type indication
5104bug fix: SMARTS pattern [r500] not working outside of MINIMIZE
5105
5106
5107JmolVersion="14.5.2_2016.02.06"
5108
5109new feature: isosurface BACKSHELL
5110  -- displays just the back side of an isosurface
5111  -- works by reversing the normals, then showing front only
5112  -- similar to isosurface slab 50, but better if object is far from spherical
5113  -- works with PMESH, MO, CONTACT as well
5114  -- reverted using isosurface NOBACKSHELL
5115
5116new feature: isosurface "*xxxx"
5117  -- accesses EBI test site for ED maps at http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file.ccp4
5118  -- uses default sigma 1.0
5119
5120new feature: isosurface "**xxxx"
5121  -- accesses EBI test site for ED difference maps at http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file_diff.ccp4
5122  -- uses default sigma 3.0
5123
5124bug fix: JSmol not identifying .ccp4 file extension as binary
5125bug fix: isosurface "==xxxx" not setting default omap cutoff and sigma 3.0
5126bug fix: small MRC map files mistaken for DELPHI files.
5127bug fix: MRC/CCP4 surface/map files still sometimes inside out.
5128
5129JmolVersion="14.5.2_2016.02.05"
5130
5131
5132bug fix: MRC/CCP4 surface/map files sometimes inside out.
5133
5134bug fix: LOAD $benzene; SHOW smiles should give c1ccccc1 not c1=cc=cc=c1
5135
5136JmolVersion="14.5.2_2016.02.04"
5137
5138bug fix: JVXL files saved from models that involve full model rotate/translateSelected
5139         do not get restored properly.
5140
5141bug fix: molecular orbitals do not move with atoms
5142         when full molecule is moved using rotateSelected or translateSelected
5143
5144code: better loading of surfaces -- no longer requires javajs.util.XmlUtil
5145code: removal of unnecessary api interfaces MinimizerInterface, VolumeDataInterface, QuantumPlaneCalculationInterface, MOCalculationInterface, MepCalculationInterface
5146
5147JmolVersion="14.5.2_2016.02.03"
5148
5149bug fix: IboView/Molpro XML reader validated for multi-molecule XML files
5150 -- to concatenate Molpro XML files, you must supply a new root tag as well as
5151    remove all <?...?> directives.
5152 -- DOS CMD file example:
5153
5154      catxml.bat ibo*.xml test.xml
5155
5156    where catxml.bat is:
5157
5158		copy /b %1 _temp
5159		echo ^<OUTER^> > %2
5160		type _temp | find /V "<?" >> %2
5161		echo ^</OUTER^> >> %2
5162
5163
5164
5165JmolVersion="14.5.1_2016.02.01"
5166
5167bug fix: IboView/Molpro XML Reader validated for reading orbitals
5168
5169code: new abstract reader XmlMOReader
5170
5171
5172JmolVersion="14.5.1_2016.01.28"
5173
5174bug fix: MOs need to move with atoms and be restored from state properly
5175  after use of ROTATESELECTED.
5176  -- note that fix for 14.4 does not include state saving, as that would break previous subversions
5177
5178code: JmolZipUtilities interface removed
5179code: JmolBinary reduced to just all Spartan-related methods
5180
5181JmolVersion="14.5.1_2016.01.25"
5182
5183bug fix: Spartan file reader not working properly after MacSpartan -> Spartan14 upgrade
5184
5185JmolVersion="14.5.1_2016.01.16"
5186
5187bug fix: mol, xyz readers not reporting model name like other readers
5188
5189new feature: variable _versionDate
5190  $ show _versionDate
5191  _versionDate = "14.4.1_2016.01.16  2016-01-15 17:25"
5192
5193
5194new feature: x = pointgroup([array of points],center)
5195  -- center is optional, defaulting to average of the points
5196  -- returns a map:
5197    pts = [ {-1.0132 0.585 0.0012999999},{1.0132 0.585 0.0012999999},{0.0 -1.17 0.0012999999} ]
5198    print pointgroup(pts,{0 0 0})
5199	{
5200	  "C2"  :
5201	  [
5202	    {0.8660127 -0.50001717 0.0022222984}
5203	    {-0.8660127 -0.50001717 0.0022222984}
5204	    {0.0 0.99999756 0.002222217}
5205	  ]
5206	  "C3"  :
5207	  [
5208	    {0.0019245904 -0.0011111083 -0.99999756}
5209	  ]
5210	  "Cs"  :
5211	  [
5212	    {0.0019245904 -0.0011111085 -0.99999756}
5213	    {-0.49998164 -0.866036 0.0}
5214	    {0.49998164 -0.866036 0.0}
5215	    {1.0 0.0 0.0}
5216	  ]
5217	  "S3"  :
5218	  [
5219	    {0.0019245904 -0.0011111083 -0.99999756}
5220	  ]
5221	  "center"  :  {0.0 0.0 0.0}
5222	  "detail"  :  "# 3 atoms;"
5223	  "distanceTolerance"  :  0.2
5224	  "linearTolerance"  :  8.0
5225	  "nAtoms"  :  3
5226	  "nC2"  :  3
5227	  "nC3"  :  1
5228	  "nCi"  :  0
5229	  "nCn"  :  4
5230	  "nCs"  :  4
5231	  "nS3"  :  1
5232	  "nSn"  :  1
5233	  "nTotal"  :  12
5234	  "name"  :  "D3h"
5235	  "principalAxis"  :  {0.0019245904 -0.0011111083 -0.99999756}
5236	  "principalPlane"  :  {0.0019245904 -0.0011111085 -0.99999756}
5237	}
5238
5239code: polyhedra, pointgroup, load =ams/, load "xxxx#_DOCACHE_" features from 14.5 added to 14.4
5240
5241JmolVersion="14.5.1_2016.01.15"
5242
5243bug fix: d = [start:1,end:10] fails due to reserved word "end" (also "select", "case", "default", "if", "for", etc.)
5244bug fix: color "chain" (with quotes) should work, allowing for x="chain"; color @x
5245bug fix: inappropriate use of REGEX in ["a","b"].find("x")
5246bug fix: ".xxx" should be allowed as a math continuation:
5247
5248   print script("show spacegroup all")
5249   			.split()
5250			.find("Hall symbol:")
5251
5252JmolVersion="14.5.1_2016.01.09"
5253
5254code: (JavaScript) refactoring to allow faster, cleaner load for biomodels
5255
5256JmolVersion="14.5.1_2016.01.08"
5257
5258bug fix: labels, echos, and measurements improperly shaded when z-shaded with nonblack background
5259bug fix: rendering error when set zshade followed by set antialiasdisplay
5260
5261code: (JavaScript) refactoring to reduce extraneous file download
5262
5263JmolVersion="14.5.1_2016.01.06"
5264
5265bug fix: labels, echos, and measurements disappear when z-shaded
5266
5267JmolVersion="14.5.1_2016.01.04"
5268
5269bug fix: (JvxlReader) Jmol 12 mapped isosurface jvxl files do not show mapped color
5270bug fix: setting default label properties using select none;.... fails
5271bug fix: setting cartoons on for phosphorus-only polymers fails
5272bug fix: undocumented model-based draw [array of points] broken
5273 -- points only
5274 -- selects from visible frames (frame *, for example)
5275 -- load cyclohexane_movie.xyz; frame *; draw @{{C5}.split().sub({1,0,0})
5276
5277JmolVersion="14.5.1_2016.01.01"
5278
5279bug fix: file dropping of JVXL files does not work
5280bug fix: Mesh capper not working for multiple cuts due to unclosed surface cut
5281 -- for example: load maleic.cif 1;select on atomindex=6;lcaocartoon scale 1.0 CAP unitcell "cpk"
5282bug fix: Escape.e(P4) returns value for Escape.e(T3) -- only affects SurfaceTool
5283bug fix: (JSmol only) Java return (int) fValue(x); will return  "NaN" instead of "0" for x NaN
5284 -- JSmol script 0 + "test" will print "NaN" rather than "0"
5285
5286JmolVersion="14.5.1_2015.12.23b"
5287
5288bug fix: JavaScript error reporting uses alert() instead of just setting the error message
5289bug fix: PyMOL 1.8 PSE files cannot be read because of missing settings
5290
5291code: more efficient loading of PyMOL .pse session files
5292
5293JmolVersion="14.5.1_2015.12.23"
5294
5295bug fix: PyMOL 1.8 PSE files cannot be read
5296bug fix: dots broken when colored none
5297bug fix: color cartoons red blue not saved in state
5298bug fix: color cartoons red blue flipping red/blue in sheets
5299
5300JmolVersion="14.5.1_2015.12.21"
5301
5302bug fix: color [0xffffff] should not be case-sensitive -- [0Xffffff] should be OK
5303bug fix: set spin fps ... fails
5304
5305JmolVersion="14.5.1_2015.12.20"
5306
5307code: (JavaScript) adding use of array.slice and implementing Java byte[] as JavaScript Int8Array()
5308
5309bug fix: array handling for labels very inefficient
5310bug fix: y = javascript("x") only creates string equivalent of x, not actual numerical/object values
5311bug fix: y = javascript("x") draws "x" from wrapped anonymous function using eval() instead of global context using window.eval()
5312
5313JmolVersion="14.5.1_2015.12.14"
5314
5315bug fix: JSmol (JSmolCore.js) check for MS Edge browser, which does not support dataURI
5316
5317JmolVersion="14.5.0_2015.12.13"
5318
5319
5320new feature: "#_DOCACHE_" suffix for file name loading tells Jmol to insert full structure into any state
5321 -- allows SPT files to preserve the original file (as in all PNGJ files)
5322 -- for example:
5323    load caffeine.xyz#_DOCACHE_
5324	show state
5325		...
5326		function _setFileState() {
5327		    DATA "file_caffeine.xyz#_DOCACHE_"
5328		24
5329
5330		N     1.31200   -1.04790    0.00250
5331		C     2.24650   -2.17620    0.00310
5332		...
5333		H    -4.16720   -0.83950    0.51680
5334		    END "file_caffeine.xyz#_DOCACHE_";
5335		...
5336		  load /*file*/"c:/jmol-dev/bobtest/caffeine.xyz#_DOCACHE_";
5337		}
5338		...
5339 -- repeated calls to caffeine.xyz#_DOCACHE_ use the cached version, not the actual file
5340 -- calls to caffeine.xyz still ignore the cache.
5341 -- also addded to Jmol 14.4.0, but left undocumented
5342
5343
5344new feature: load =ams loads data from American Mineralogist Crystal Structure Database
5345 -- many thanks given to Robert Downs and Alex Pires for enabling this functionality.
5346 -- fetches data from http://rruff.geo.arizona.edu/AMS
5347 -- employs "#_DOCACHE_" flag because some of these data files may change after database maintenance
5348 -- three modes. Only the first, using _database_code_amcsd, is guaranteed to be stable over time,
5349   =ams/<nnnnnnn>  (seven-digit database code) loads that specific structure based on _database_code_amcsd
5350      load =ams/0014673
5351      show _modelfile
5352	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?amcsd=14673&action=showcif#_DOCACHE_"
5353   =ams/<nnnnn>  (less than seven-digit id) loads that specific structure based on sequential id code
5354      load =ams/10000
5355      show _modelfile
5356	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?id=10000&action=showcif#_DOCACHE_"
5357   =ams/<mineralName> loads all structures for a specified named mineral.
5358      load =ams/diamond
5359      show _modelfile
5360	  _modelfile = "http://rruff.geo.arizona.edu/AMS/viewJmol.php?mineral=diamond&action=showcif#_DOCACHE_"
5361  -- thus, all of the following are equivalent as of 12/13/2015:
5362
5363	    load =ams/0008986
5364	    load =ams/10000
5365	    load =ams/srilankite 4
5366
5367     However, it is possible that new structures will be added to srilankite, making
5368     this not the fourth structure, and the five-digit code 10000 can change after
5369     database maintenance.
5370 -- also addded to Jmol 14.4.0, but left undocumented
5371
5372new feature: drawing of spheres in 2D window
5373  -- as percent position or absolute, as for ECHO
5374  -- diameter is % if position is %; otherwise it is pixels
5375  -- examples:
5376
5377    draw d1 diameter 5 [90 90 %] color blue  // percent position; 5% diameter
5378	draw d2 diameter 15 [90 90] color blue   // absolute position; 15-pixel diameter
5379	draw dO diameter 2 [80 90 %] color @{ {_O}.color }
5380	set echo eO [95 90 %]; echo "O"
5381
5382  -- can be used in the context of an element key:
5383
5384	background white
5385	load $caffeine
5386	  function createElementKey() {
5387		var y = 90
5388		for (var e in {*}.element.pivot){
5389			var c = {element=@e}.color
5390			draw ID @{"d_"+ e} diameter 2 [90 @y %] color @c
5391			set echo ID @{"e_" + e} [91 @{y-1} %]
5392			echo @e
5393			font echo 24 bold sansserif
5394			color echo black
5395			y -= 5
5396		}
5397	  }
5398	createElementKey
5399
5400
5401new feature: additional predefined sets for periodic table:
5402    "@nonmetal _H,_He,_B,_C,_N,_O,_F,_Ne,_Si,_P,_S,_Cl,_Ar,_As,_Se,_Br,_Kr,_Te,_I,_Xe,_At,_Rn",
5403    "@metal !nonmetal",
5404    "@alkaliMetal _Li,_Na,_K,_Rb,_Cs,_Fr",
5405    "@alkalineEarth _Be,_Mg,_Ca,_Sr,_Ba,_Ra",
5406    "@nobleGas _He,_Ne,_Ar,_Kr,_Xe,_Rn",
5407    "@metalloid _B,_Si,_Ge,_As,_Sb,_Te",
5408    "@transitionMetal elemno>=21&elemno<=30|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112",
5409    "@lanthanide elemno>=57&elemno<=71",
5410    "@actinide elemno>=89&elemno<=103",
5411
5412    note added: last three changed 1/28/17 as per advice of Frank Weinhold:
5413
5414        // added La, Ac as per Frank Weinhold - these two are not f-block
5415    "@transitionMetal elemno>=21&elemno<=30|elemno=57|elemno=89|elemno>=39&elemno<=48|elemno>=72&elemno<=80|elemno>=104&elemno<=112",
5416    // removed La
5417    "@lanthanide elemno>57&elemno<=71",
5418    // removed Ac
5419    "@actinide elemno>89&elemno<=103",
5420
5421  -- useful for removal of metal-metal bonds in inorganic systems
5422     and for specifying polyhedra:
5423
5424    connect {metal} {metal} delete
5425    polyhedra bonds {metal}
5426
5427bug fix: zoomTo not setting time to 0 in the case of scriptWait
5428bug fix: set selectAllModels should restrict action of display/hide as well
5429bug fix: set selectAllModels not working appropriately
5430bug fix: set selectAllModels should not be saved in state
5431bug fix: JmolData.jar does not update atom screen positions upon REFRESH or select {visible}
5432bug fix: JmolData.jar -p flag does not work properly
5433bug fix: model 0 issued when more than one PDB file is open does not execute model *
5434bug fix: PDB reader broken for filter "biomolecule n"
5435bug fix: mmCIF reader can fail to pop up menu when biomolecule is present.
5436bug fix: JSON generation from arrays broken in HTML5 version due to browser changes in Array.toString().
5437bug fix: DCD reader broken.
5438bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array
5439 -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME
5440bug fix: {atomset}.sxyz gives incorrect screen coordinate when antialiased
5441bug fix: point(pt, true|false) also modifies pt itself
5442bug fix: point({atomset}, true) gives incorrect screen coordinate when antialiased.
5443bug fix: point({atomset}, false) gives incorrect Cartesian coordinate when antialiased.
5444bug fix: popup menu item "Surfaces...Off" resets atom selection
5445bug fix: files with names containing "[]" cannot be loaded.
5446bug fix: {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555
5447bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms
5448bug fix: getproperty SHAPEINFO fails if CGO is present
5449bug fix: CGO from state deletes DRAW objects
5450bug fix: CGO not properly isolated to current model; "fixed" not implemented
5451bug fix: draw ARC|ARROW|CURVE|LINE|VERTICES @x where x is an array does not work
5452bug fix: loading mmCIF files where label_asym_id != auth_asym_id will apply biomolecule symmetry to wrong chain
5453bug fix: echo "" fails in applet
5454bug fix: 3x3 and 4x4 matrix multiplication of points changes the point itself.
5455
5456code: BSUtil.cardinalityOf cleanup.
5457code: synchronizing Jmol-NBO branch
5458
5459JmolVersion="14.5.0_2015.11.06"
5460
5461bug fix: restoring bonds to a model having fewer bonds than the model for which they were saved throws an exception
5462bug fix: CIF reader does not read incommensurately modulated magCIF files
5463bug fix: WRITE xxx.ZIP  crashes Jmol
5464bug fix: POLYHEDRA ... {xxx} TO {yyy} not working
5465
5466JmolVersion="14.5.0_2015.11.03"
5467
5468bug fix: FOR without {} but with ";" after sole statement
5469         followed immediately by second FOR improperly loops
5470  for (var i from [1,5])
5471    print i;
5472  for (var i from [1,5])
5473    print i
5474
5475bug fix: OXT missing from BACKBONE selection
5476bug fix: (JSmol) CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id
5477
5478new feature: polyhedra ID xxx SCALE x.x
5479  -- ID named polyhedra only
5480  -- x.x is the scaling factor, initially 1
5481  -- x.x > 0 does normal scaling
5482  -- x.x < 0 does "explode" from {0 0 0} (for higher-order Brillouin zones, for instance)
5483
5484bug fix: slabbing should reset area and volume of isosurface
5485bug fix: meshSlicer may fail to add edge to sliced pmesh
5486
5487FEATURE CHANGE: (Application only for now) PDB default for =xxxx
5488  -- changed to
5489    "pdb", "http://ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/%c2%c3/pdb%file.ent.gz"
5490  -- will be complemented with file.ent for non-binary transfer, but that is not implemented yet at RCSB
5491  -- mmCIF counterpart not implemented yet.
5492  -- not HTML5 because for that we need the option to remove .gz
5493
5494new feature: set testflag3 TRUE  gives random triangle effect to polyhedra
5495
5496new feature: POLYHEDRON ID "xxx" OFFSET {3 3 3}
5497 -- allows cartesian offset of named polyhedra
5498
5499bug fix: bug fix: empty format crashes Jmol --  print "testing".format("")
5500bug fix: polyhedron volume will be incorrect if there is a
5501         face triangle that has no edges visible (requires a six or more sided face)
5502
5503bug fix: nested if...{...if... } else {...} gives compiler syntax error:
5504
5505  if (i=1) {
5506    print "i=1"
5507    if (j=1)
5508      print "j != 1"
5509  } else {                // } closes if (j=1) instead of if (i=1) {
5510    print "i != 1"
5511  }
5512
5513JmolVersion="14.5.0_2015.10.29"
5514
5515bug fix: after CALCULATE HYDROGENS TRUE and then deleting hydrogens, hydrogens are not added to aromatic rings in PDB models
5516bug fix: reading saved state after adding hydrogen atoms results in infinite loop
5517
5518JmolVersion="14.5.0_2015.10.28"
5519
5520bug fix: XODYDATA file reader does not read bond info or formal charge // changes in 14.4.0_2015.10.28
5521
5522FEATURE CHANGE: default RCSB/PDB load format (=xxxx) changed to http://ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/%c2%c3/pdb%file.ent.gz
5523
5524new feature: (JSmol) adding access-allow-origin status for cdn.rcsb.org and ftp.wwpdb.org.
5525
5526JmolVersion="14.5.0_2015.10.27"
5527
5528code: unnecessary FRAME commands removed from state
5529bug fix: polyhedra not read from state (14.5 only)
5530
5531JmolVersion="14.5.0_2015.10.24"
5532
5533bug fix: [{1,2,3},{4,5,6}].average fails
5534bug fix: [{1,2,3},{4,5,6}].pivot should return "NaN"
5535
5536JmolVersion="14.5.0_2015.10.22"
5537
5538bug fix: CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id
5539bug fix: WRITE .... AS does not properly allow for unquoted file name
5540
5541JmolVersion="14.5.0_2015.10.21"
5542
5543bug fix:  write c:/temp..... AS PNGJ  does not work without quotes that way; it should
5544
5545JmolVersion="14.5.0_2015.10.20"
5546
5547new feature: polyhedra with arbitrary center and vertices, without atom center
5548  -- for example:
5549     polyhedra ID "myid" {0 0 0} TO [{1 1 -1}, {1 -1 1}, {-1 1 1}, {-1 -1 -1}] # tetrahedron around origin
5550     polyhedra ID "myid" @{{*}.xyz} TO @{{*}.xyz.all}  # polyhedron to center of all atoms
5551
5552bug fix: set platformSpeed 1 for pmesh fails
5553bug fix: polyhedron EDGES fails
5554bug fix: @{ {"hash":{0.1 0.1 0.1},...} } fails (attempts to turn "," into "OR")
5555  -- solution is to not allow "," for OR within associative arrays
5556
5557JmolVersion="14.5.0_2015.10.18"
5558
5559new feature: x = within(0.01, [array of points])
5560 -- cleans points of duplicates with a tolerance of 0.001 Angstroms
5561 -- allows multiple pmesh faces to be turned into polyhedra using:
5562
5563   faces = []
5564	for (var i = 1; i <= nPlanes; i++) {
5565	  var f = ("$f" + i).getProperty("face")
5566	  faces.push(f)
5567	}
5568   polyhedra @1 to @{within(0.01, faces.join())} color white
5569
5570new feature: $pmeshID.getProperty("faces")
5571 -- returns an array of points
5572 -- cleaned so that it is one point per linear edge, regardless of how
5573    it has been slabbed
5574
5575new feature: resolution 0.001 with PMESH and ISOSURFACE planes
5576 -- allows for minimum number of triangles.
5577
5578bug fix: Polyhedra can have missing triangle for hexagonal faces
5579bug fix: calculate symmetry can break Jmol if unit cell has been changed
5580bug fix: DRAW POLYGON front/back nature of winding was reversed.
5581
5582JmolVersion="14.5.0_2015.10.17"
5583
5584bug fix: if (...) \n { .... not working (where brace is on next line)
5585bug fix: CIF reader will read empty second model for IUCr files with terminal data_global block
5586bug fix: polyhedra bonds unitcell can cause error in HTML5
5587bug fix: nucleic backbone should include O atoms on P and C
5588bug fix: nucleic spine should not include C2'
5589bug fix: pmesh/isosurface RESOLUTION 0.0001 with plane can cause loss of some or all of the plane
5590         -- resolution 0.0001 creates just a minimum of triangles to construct the plane.
5591bug fix: set testflag4;isosurface ... ; does not generate normals
5592bug fix: (Application) set refreshing false shows Jmol console in model frame (Java bug??)
5593
5594JmolVersion="14.5.0_2015.10.14"
5595
5596NOTE: GoDaddy's inadvertent forcing of revocation of the secure certificate for Jmol
5597      has disabled ALL applets created since Oct 15, 2014. This is a mandatory upgrade.
5598
5599
5600bug fix: SHOW PROPERTY IDENTIFY crashes Jmol.
5601
5602JmolVersion="14.5.0_2015.10.13"
5603JmolVersion="14.4.0_2015.10.13"
5604JmolVersion="14.3.16_2015.10.13"
5605
5606code: compatibility checks with new brace-less if/for/while
5607
5608note: Use of multi-line IF/END IF, FOR/END FOR, WHILE/END WHILE
5609      is not compatible with newer JavaScript-like single-line non-brace flow:
5610
5611      Java/JavaScript style:
5612
5613        function test () {
5614		 for (var i = 0; i < 5; i++)
5615		  if (i < 2)
5616		    print -i
5617		}
5618
5619      VB style:
5620
5621        function test ()
5622		 for (var i = 0; i < 5; i++)
5623		  if (i < 2)
5624		    print -i
5625		  end if
5626		 end for
5627		end function
5628
5629      The compiler is set to start with assumption that Java/JavaScript
5630      is the active mode but switches to VB style if END XXX is found
5631
5632Note: Use of single-line   if (...) ..... else ..... endif   is allowed
5633      in either mode. In this syntax, the final "endif" is optional
5634
5635Note: END DATA is not affected
5636
5637JmolVersion="14.3.16_2015.10.12"
5638
5639code fix: debug comments in isosurface solvent slowing it down significantly
5640
5641bug fix: PARALLEL/PROCESS not working
5642bug fix: SHOW DATA does not return model data
5643bug fix: draw CURVE pt1 pt2   does not work
5644bug fix: pmesh command cannot read files from zip files
5645         because "binary" option is set, and FileManager is returning the wrong input stream
5646
5647new feature: unitcell() function
5648  -- returns unitcell as an array in the form [origin, va, vb, vc]
5649  -- first parameter is optional unitcell itself; absence uses current model's unit cell.
5650  -- optional last parameter: scale
5651  -- signatures:
5652    unitcell()   // uses current unit cell
5653    unitcell(uc) // copies unit cell
5654    unitcell(uc, "reciprocal") // reciprocal lattice for specified unit cell
5655    unitcell("reciprocal") // reciprocal lattice for current model's unit cell
5656    unitcell(ucconv, "primitive","BCC"|"FCC") // convert conventional to primitive
5657    unitcell("primitive","BCC"|"FCC")
5658    unitcell(ucprim, "conventional","BCC"|"FCC")  // convert primitive to conventional
5659    unitcell("conventional","BCC"|"FCC")
5660    unitcell(origin, [va, vb, vc]) // user-defined unit cell; just produces [origin, va, vb, vc]
5661    unitcell(origin, pta, ptb, ptc) // user-defined unit cell using four points
5662 -- compatible with UNITCELL command:
5663
5664    UNITCELL @{unitcell("reciprocal")}
5665    draw unitcell
5666    UNITCELL RESET
5667
5668
5669new feature: point(unitcell, {i, j, k})
5670  -- returns the Cartesian point corresponding to a specific coordinate in a unit cell system.
5671  -- unitcell is an array of the form [origin, va, vb, vc]
5672  -- {i j k} is a point in the unit cell
5673  -- for general use -- does not require actual setting of the model's unit cell
5674
5675JmolVersion="14.3.16_2015.10.09"
5676
5677bug fix:  print 'CCC'.find("SMILES") should throw a ScriptException, not a Java exception
5678
5679new feature: Gaussian log file reader reads spin density scalars as property_spin
5680
5681JmolVersion="14.3.16_2015.10.06"
5682
5683new feature: print within(distance, point, array_of_points)
5684  -- point array distance iterator
5685  -- returns subarray of points (in differing order, probably) of array_of_points
5686     that are within distance of point.
5687
5688bug fix: MRC surface reader: new version of EMAN2 leaves out alpha,beta,gamma; does not load properly
5689
5690bug fix: for (a in {*}) with no VAR fails if a has already been defined as an integer
5691
5692bug fix: better error reporting
5693
5694new feature: load =aflow/AgAu
5695 -- easy access to binary metal alloy CIF files
5696 -- http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary
5697
5698bug fix: braceless if/for fix from 10.04
5699
5700JmolVersion="14.3.16_2015.10.04"
5701
5702bug fix: changing bond order of X-H using set picking assignBond_2 generates error messages and removes atoms
5703
5704
5705new feature: if, for, and while can all operate using no braces for single-line bodies
5706  -- similar to JavaScript and Java
5707  -- examples:
5708
5709   for(var i = 0; i < 10; i++)
5710     for(var j = 0; j < 10; j++)
5711       print i*j
5712
5713   if (i == 1)
5714     print i
5715   else
5716     print 0
5717
5718bug fix: translucent echo backgrounds not saved in state properly
5719
5720
5721JmolVersion="14.3.16_2015.10.01"
5722
5723bug fix: for (; i < 10; i++)  not working
5724bug fix: for (;;i++)  not working
5725bug fix: for (;;)  not working
5726
5727JmolVersion="14.3.16_2015.10.01"
5728
5729bug fix: hydrogens added to backbone should be part of "backbone" definition
5730  -- no-hydrogen definition is _bb
5731
5732TODO: document ------>>>>
5733
5734new feature: calculate hydrogens TRUE
5735 -- calculates hydrogens and multiple bonding
5736 -- same as
5737
5738    calculate hydrogens
5739    connect aromatic modify
5740    calculate aromatic
5741
5742 -- similar to, but not identical to set pdbAddHydrogens
5743 -- allows reasonable addition of multiple bonds to proteins after loading
5744
5745bug fix: connect aromatic should not touch H atoms or atoms with 4 or more covalent bonds
5746bug fix: calculate hydrogen should consider backbone N sp2
5747bug fix: {backbone} should include attached H atoms
5748bug fix: calculate hydrogens should not place H atoms on water
5749
5750JmolVersion="14.3.16_2015.09.29"
5751
5752note: I am using "map" for "associative array" now
5753
5754
5755new feature: mapOfMaps.array(k)
5756 -- generates an array of maps from a map of maps by
5757    storing all top-level map keys under key k in lower-level map
5758 -- reversed by another .array(k)
5759 -- causes a script exception if mapOfMaps is not a map of maps
5760
5761new feature: arrayOfMaps.array(k)
5762 -- generates a map of maps from an array of maps by
5763    removing each map's key k and using that as the key for that map value
5764 -- reversed by another .array(k)
5765 -- causes a script exception if arrayOfMaps is not an array of maps or key k is not present in all maps
5766
5767JmolVersion="14.3.16_2015.09.28b"
5768
5769bug fix: draw ramachandran broken
5770
5771JmolVersion="14.3.16_2015.09.28"
5772
5773new feature: array.sort("key")
5774 -- sorts an array of associative arrays by the specified associative array key.
5775 -- example:
5776
5777	load sf6.smol
5778	x= _M.moData.mos.select("energy,index where energy<0")
5779	x.sort("energy").reverse
5780	print x
5781
5782	  {
5783	    "energy"  :  -0.67001194
5784	    "index"  :  35
5785	   }
5786	  {
5787	    "energy"  :  -0.67001194
5788	    "index"  :  34
5789	   }
5790	  {
5791	    "energy"  :  -0.67001194
5792	    "index"  :  33
5793	   }
5794	  {
5795	    "energy"  :  -0.70143324
5796	    "index"  :  32
5797	   }
5798	   ...
5799
5800new feature: JmolSQL xxxx.select("<keys> WHEREIN <clause>")
5801  -- replaces ** idea
5802  -- assumes values of xxxx are themselves associative arrays
5803  -- indicates that the clause should be applied only to the values for the selected keys
5804  -- returns an associative array that holds only those keys for which the clause is true *for them*
5805  -- works also for array xxxx where each element of xxxx is an associative array,
5806     in which case it returns a subarray of xxxx involving the matching values.
5807  -- example:
5808
5809   abc = [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ]
5810   print abc.select("A* wherein b>2").format("JSON")
5811
5812     { "AA": { "b": 4 } }
5813
5814   Compare this to the following, where we are are checking for validity of abc itself:
5815
5816   abc = [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ]
5817   print abc.select("A* where B.b=2").format("JSON")
5818
5819     { "A": { "b": 1 },"AA": { "b": 4 } }
5820
5821
5822   abc2 = [
5823      [ A:[b:1], B:[b:2], C:[b:3, d:50], AA:[b:4] ],
5824      [ A:[b:11], B:[b:22], C:[b:33, d:5050], AA:[b:40] ]
5825      ]
5826   print abc2.select("A* wherein b>2").format("JSON")
5827
5828   [ { "AA": { "b": 4 } },{ "A": { "b": 11 },"AA": { "b": 40 } } ]
5829
5830new feature: JmolSQL xxxx.select("(<keys>) WHERE/WHEREIN <clause>")
5831  -- parentheses around keys replaces ";" idea
5832  -- indicates to return an array of values rather than a key/value pair
5833  -- works also for array xxxx where each element of xxxx is an array or associative array,
5834     in which case it returns an array of matching values, without keys.
5835  -- example:
5836
5837   load =1ehz/dssr
5838   print _M.dssr.hbonds.select("distance where res_long like '*|C|72|*'")
5839	  {
5840	    "distance"  :  2.832
5841	   }
5842	  {
5843	    "distance"  :  2.879
5844	   }
5845	  {
5846	    "distance"  :  2.838
5847	   }
5848
5849	print _M.dssr.hbonds.select("(distance) where res_long like '*|C|72|*'")
5850
5851		2.832
5852		2.879
5853		2.838
5854
5855	print _M.dssr.hbonds.select("(distance) where res_long like '*|C|72|*'").average
5856
5857		2.8496666
5858
5859
5860JmolSQL
5861
5862JmolSQL is a Jmol math syntax that is designed to query information related to molecular structure. The idea is that associative arrays, with key/value pairs, and especially arrays of associative arrays, are data, and those arrays themselves can be thought of as a mini database. These sorts of data can be found in Jmol in the a model's auxiliary info (variable _M), including validation data returned from LOAD =xxxx/val (_M.validation), sequence domain data returned from LOAD =xxxx/dom (_M.domains), and secondary structure information returned from LOAD =xxxx/dssr (_M.dssr) or LOAD=xxxx/rna3d (_M.rna3d). In addition, the getProperty() function returns a wide variety of data relating to model attributes, including getProperty("atomInfo") and getProperty("bondInfo") among several others.
5863
5864The original conception of JmolSQL was in the context of the getProperty() function -- for example:
5865
5866load $caffeine
5867print getProperty("atomInfo[SELECT atomno,coord WHERE shape LIKE 'trigonal planar']")
5868
5869  {    "atomno"  :  1    "coord"  :  {1.312 -1.0479 0.0025}   }  {    "atomno"  :  3    "coord"  :  {1.7906001 0.20809999 9.999999E-4}   }   ...
5870More recent development widens this use to any array data, and use of the .select() function rather than getProperty() is recommended for general use. Thus, alternatively we can use:
5871
5872print getProperty("atomInfo").select("atomno,coord WHERE shape LIKE 'trigonal planar' ")
5873
5874
5875object.SELECT("keys WHERE/WHEREIN phrase")
5876There are three parts to JmolSQL: object, keys, and an optional WHERE or WHEREIN phrase. The object can be either an associative array [key1:value1, key2:value2, key3:value3] or an array of associative arrays, usually all having the same set of keys.
5877
5878Associative Arrays
5879When the top-level object is an associative array, .select() can be used to select
5880out subsets of that array, either as a single associative array or as an array of values.
5881
5882abc.select("...")
5883The simplest form of .select() returns a subset of abc. Wild cards can be interspersed with additional keys, for example, "a*,b" or "*_id". In each such case, the case-sensitive LIKE operation is used to match keys.
5884
5885abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
5886print  abc.select("A").format("JSON")
5887
5888{ "A": { "b": 1 } }
5889abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
5890print  abc.select("A*").format("JSON")
5891
5892{ "A": { "b": 1 },"AA": { "b": 3,"d": 50 } }
5893abc.select("(...)")
5894Using parentheses around the list of keys delivers a list of values of b for only the the subset of xyz for which a=1:
5895
5896abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
5897print  abc.select("(A,B)").format("JSON")
5898
5899[ { "b": 2 },{ "b": 1 } ]
5900
5901Arrays of Associative Arrays
5902In addition to operating on an associative array directly, JmolSQL can operate on an array of associative arrays. Generally we assume here that the elements of that array are associative arrays that all have the same set of keys. This is the essence of a database.  Whether or not the associative arrays have the same keys is not important for Jmol. For example, the getProperty("atomInfo") returns an array giving the information for each atom that is loaded:
5903
5904load $caffeine
5905x = getProperty("atomInfo")
5906print x.count
5907
590824
5909print x[1]
5910
5911{  "_ipt"  :  0  "atomIndex"  :  0  "atomno"  :  1  "bondCount"  :  3  "clickabilityFlags"  :  48  "colix"  :  -32761  "color"  :  "[x3050f8]"  "coord"  :  {1.312 -1.0479 0.0025}  "element"  :  "nitrogen"  "elemno"  :  7  "formalCharge"  :  0  "info"  :  "N1 #1"  "model"  :  "1"  "partialCharge"  :  0.0  "radius"  :  0.7416667  "shape"  :  "trigonal planar"  "spacefill"  :  0.3565  "sym"  :  "N"  "visibilityFlags"  :  63  "visible"  :  true  "x"  :  1.312  "y"  :  -1.0479  "z"  :  0.0025 }
5912These data can be "queried" using  JmolSQL.
5913
5914xyz.select("...")
5915Creates the sublist of associative arrays having the selected subset of keys:
5916
5917xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
5918print xyz.select("b").format("JSON")
5919
5920[ { "b": 11 },{ "b": 22 },{ "b": 33 } ]
5921print x.select("atomno,element")
5922  {    "atomno"  :  1    "element"  :  "nitrogen"   }  {    "atomno"  :  2    "element"  :  "carbon"   }  {    "atomno"  :  3    "element"  :  "carbon"   }  {    "atomno"  :  4    "element"  :  "oxygen"   }   ...
5923xyz.select("(...)")
5924Adding parentheses creates a list of only the values for the specified keys:
5925xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
5926print xyz.select("(b)").format("JSON")
5927
5928[ 11,22,33 ]
5929xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
5930print xyz.select("(a,b)").format("JSON")
5931
5932[ 11,1,22,2,33,3 ]
5933load $caffeine
5934print getProperty("atomInfo").select("(element)").pivot
5935{  "carbon"  :  8  "hydrogen"  :  10  "nitrogen"  :  4  "oxygen"  :  2 }
5936The assumption when using (keys) is that you want to know all these values,
5937but you don't care what order they are in (because that will not be predictable)
5938and you don't care about their exact context. An example is a list of bonds for
5939which we just want to know all the atoms involved, but the atoms are listed
5940under "atom1" and "atom2" in each bond array.
5941
5942load =1ehz/dssr
5943select on @{_M.dssr.hbonds.select("(atom1_id,atom2_id)")}
5944
5945206 atoms selected
5946
5947Using WHERE
5948WHERE is used to select a subset of the elements of an array based on specific
5949key-value relationships.
5950
5951xyz.select("... WHERE ...")
5952Delivers all key/value pairs in the subset of xyz element associative arrays
5953for which the WHERE clause is true for that element.
5954
5955xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
5956print xyz.select("* where a<3 and b<20").format("JSON")
5957
5958[ { "b": 11,"a": 1 } ]
5959load $caffeine
5960print getProperty("atomInfo").select("atomno,element WHERE shape LIKE 'trigonal planar' ").format("JSON")
5961
5962[ { "element": "nitrogen","atomno": 1 },{ "element": "carbon","atomno": 3 },{ "element": "nitrogen","atomno": 5 },{ "element": "carbon","atomno": 7 },{ "element": "carbon","atomno": 9 },{ "element": "nitrogen","atomno": 10 },{ "element": "carbon","atomno": 12 },{ "element": "carbon","atomno": 13 } ]
5963
5964
5965xyz.select("(...) where ...")
5966Using parentheses around the list of keys delivers a list of
5967values for only the subset of xyz for which the WHERE clause is true:
5968
5969xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
5970print xyz.select("(b) where a>1").format("JSON")
5971
5972[ 22,33 ]
5973load $caffeine
5974 print getProperty("atomInfo").select("(shape) WHERE shape").pivot
5975{  "bent"  :  1  "tetrahedral"  :  3  "trigonal planar"  :  8 }
5976Note that "WHERE shape" here just excludes all cases where shape is the empty string, since empty strings in Jmol evaluate as FALSE. (In this case that involves hydrogen atoms.)
5977
5978For example, finding all the hydrogen bonds created by DSSR for a given residue:
5979
5980load =1ehz/dssr
5981x = _M.dssr.hbonds.select("(distance) where res_long like '*|A|C|72|*'");
5982print x.format("JSON")
5983print format("%5.3f",x.average)
5984
5985[ 2.832,2.879,2.838 ]    2.850
5986Array "Drilling"
5987
5988WHERE will "drill down" through arrays of arrays to find
5989elements that are associative arrays, returning a flat array of those objects:
5990
5991xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
5992print xyz.select("a* where a>0").format("JSON")
5993
5994[ { "a": 1 },{ "a": 2 },{ "a": 3,"aa": 44 } ]
5995xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
5996print xyz.select("(b) where a>0").format("JSON")
5997
5998[ 11,22,33 ]
5999
6000WHERE vs. WHEREIN
6001Starting with Jmol 14.4, JmolSQL includes an additional option, WHEREIN. This option
6002allows selecting specific key/value pairs for which the value is itself an associative
6003array, and *that array* has a specific set of key/value relationships. Thus, the
6004clause is checked one level deeper in the structure.
6005
6006For example, given the associative array
6007
6008abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6009
6010we can select out only those keys for which type='a':
6011
6012abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6013print abc.select("* WHEREIN type='a'").format("JSON");
6014
6015{ "key_3": { "i": 3,"type": "a" },"key_1": { "i": 1,"type": "a" } }
6016All of the options that involve WHERE also apply to WHEREIN. For example,
6017multiple keys can be specified, and keys can be surrounded by parentheses
6018to return just the values instead of key/value pairs:
6019
6020abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6021print abc.select("(key_1,key2) WHEREIN type='a'").format("JSON");
6022
6023[ { "i": 1,"type": "a" } ]
6024In addition, WHEREIN can be applied to arrays as well as associative arrays.
6025In this case, the WHEREIN phrase applies to the elements of that array, which
6026are assumed to be associative arrays. For example, we can get a list of just
6027the occupied orbitals produced by Gaussian that are of a given symmetry:
6028
6029load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6030print _M.moData.select("mos wherein occupancy>0").select("(symmetry)").pivot
6031
6032{  "(A1)--O"  :  6  "(A2)--O"  :  1  "(B1)--O"  :  1  "(B2)--O"  :  4 }
6033Note that this use of WHEREIN with arrays in this way can also be accomplished
6034more directly with WHERE:
6035
6036load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6037print _M.moData.mos.select("(symmetry) where occupancy>0").pivot
6038
6039{  "(A1)--O"  :  6  "(A2)--O"  :  1  "(B1)--O"  :  1  "(B2)--O"  :  4 }
6040load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6041x= _M.moData.select("mos wherein occupancy>0 and symmetry like '(B2)*' ")
6042print x.select("(index)").format("JSON")
6043
6044[ 1,5,8,10 ]
6045
6046
6047
6048
6049After taking a close look at this, I decided this was getting too cryptic. I think this is much simpler. This long email message summarizes the JmolSQL business, starting with Jmol 11.3.16_2015.09.28. See http://chemapps.stolaf.edu/jmol/zip/jmol-14.3.16_2015.09.28.zip
6050
6051JmolSQL
6052JmolSQL is a Jmol math syntax that is designed to query information related to molecular structure. The idea is that associative arrays, with key/value pairs, and especially arrays of associative arrays, are data, and those arrays themselves can be thought of as a mini database. These sorts of data can be found in Jmol in the a model's auxiliary info (variable _M), including validation data returned from LOAD =xxxx/val (_M.validation), sequence domain data returned from LOAD =xxxx/dom (_M.domains), and secondary structure information returned from LOAD =xxxx/dssr (_M.dssr) or LOAD=xxxx/rna3d (_M.rna3d). In addition, the getProperty() function returns a wide variety of data relating to model attributes, including getProperty("atomInfo") and getProperty("bondInfo") among several others.
6053
6054The original conception of JmolSQL was in the context of the getProperty() function -- for example:
6055
6056load $caffeine
6057print getProperty("atomInfo[SELECT atomno,coord WHERE shape LIKE 'trigonal planar']")
6058
6059  {
6060    "atomno"  :  1
6061    "coord"  :  {1.312 -1.0479 0.0025}
6062   }
6063  {
6064    "atomno"  :  3
6065    "coord"  :  {1.7906001 0.20809999 9.999999E-4}
6066   }
6067   ...
6068
6069More recent development widens this use to any array data, and use of the .select() function rather than getProperty() is recommended for general use. Thus, alternatively we can use:
6070
6071print getProperty("atomInfo").select("atomno,coord WHERE shape LIKE 'trigonal planar' ")
6072
6073
6074object.SELECT("keys WHERE/WHEREIN phrase")
6075There are three parts to JmolSQL: object, keys, and an optional WHERE or WHEREIN phrase. The object can be either an associative array [key1:value1, key2:value2, key3:value3] or an array of associative arrays, usually all having the same set of keys.
6076
6077Associative Arrays
6078When the top-level object is an associative array, .select() can be used to select
6079out subsets of that array, either as a single associative array or as an array of values.
6080
6081abc.select("...")
6082The simplest form of .select() returns a subset of abc. Wild cards can be interspersed with additional keys, for example, "a*,b" or "*_id". In each such case, the case-sensitive LIKE operation is used to match keys.
6083
6084abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
6085print  abc.select("A").format("JSON")
6086
6087{ "A": { "b": 1 } }
6088
6089abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
6090print  abc.select("A*").format("JSON")
6091
6092{ "A": { "b": 1 },"AA": { "b": 3,"d": 50 } }
6093
6094abc.select("(...)")
6095Using parentheses around the list of keys delivers a list of values of b for only the the subset of xyz for which a=1:
6096
6097abc = [ A:[b:1],B:[b:2],AA:[b:3, d:50] ]
6098print  abc.select("(A,B)").format("JSON")
6099
6100[ { "b": 2 },{ "b": 1 } ]
6101
6102
6103Arrays of Associative Arrays
6104In addition to operating on an associative array directly, JmolSQL can operate on an array of associative arrays. Generally we assume here that the elements of that array are associative arrays that all have the same set of keys. This is the essence of a database.  Whether or not the associative arrays have the same keys is not important for Jmol. For example, the getProperty("atomInfo") returns an array giving the information for each atom that is loaded:
6105
6106load $caffeine
6107x = getProperty("atomInfo")
6108print x.count
6109
611024
6111
6112print x[1]
6113
6114{
6115  "_ipt"  :  0
6116  "atomIndex"  :  0
6117  "atomno"  :  1
6118  "bondCount"  :  3
6119  "clickabilityFlags"  :  48
6120  "colix"  :  -32761
6121  "color"  :  "[x3050f8]"
6122  "coord"  :  {1.312 -1.0479 0.0025}
6123  "element"  :  "nitrogen"
6124  "elemno"  :  7
6125  "formalCharge"  :  0
6126  "info"  :  "N1 #1"
6127  "model"  :  "1"
6128  "partialCharge"  :  0.0
6129  "radius"  :  0.7416667
6130  "shape"  :  "trigonal planar"
6131  "spacefill"  :  0.3565
6132  "sym"  :  "N"
6133  "visibilityFlags"  :  63
6134  "visible"  :  true
6135  "x"  :  1.312
6136  "y"  :  -1.0479
6137  "z"  :  0.0025
6138 }
6139
6140These data can be "queried" using  JmolSQL.
6141
6142xyz.select("...")
6143Creates the sublist of associative arrays having the selected subset of keys:
6144
6145xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
6146print xyz.select("b").format("JSON")
6147
6148[ { "b": 11 },{ "b": 22 },{ "b": 33 } ]
6149
6150print x.select("atomno,element")
6151  {
6152    "atomno"  :  1
6153    "element"  :  "nitrogen"
6154   }
6155  {
6156    "atomno"  :  2
6157    "element"  :  "carbon"
6158   }
6159  {
6160    "atomno"  :  3
6161    "element"  :  "carbon"
6162   }
6163  {
6164    "atomno"  :  4
6165    "element"  :  "oxygen"
6166   }
6167   ...
6168xyz.select("(...)")
6169Adding parentheses creates a list of only the values for the specified keys:
6170
6171xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
6172print xyz.select("(b)").format("JSON")
6173
6174[ 11,22,33 ]
6175
6176xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
6177print xyz.select("(a,b)").format("JSON")
6178
6179[ 11,1,22,2,33,3 ]
6180
6181load $caffeine
6182print getProperty("atomInfo").select("(element)").pivot
6183{
6184  "carbon"  :  8
6185  "hydrogen"  :  10
6186  "nitrogen"  :  4
6187  "oxygen"  :  2
6188 }
6189
6190The assumption when using (keys) is that you want to know all these values,
6191but you don't care what order they are in (because that will not be predictable)
6192and you don't care about their exact context. An example is a list of bonds for
6193which we just want to know all the atoms involved, but the atoms are listed
6194under "atom1" and "atom2" in each bond array.
6195
6196load =1ehz/dssr
6197select on @{_M.dssr.hbonds.select("(atom1_id,atom2_id)")}
6198
6199206 atoms selected
6200
6201
6202Using WHERE
6203WHERE is used to select a subset of the elements of an array based on specific
6204key-value relationships.
6205
6206xyz.select("... WHERE ...")
6207Delivers all key/value pairs in the subset of xyz element associative arrays
6208for which the WHERE clause is true for that element.
6209
6210xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
6211print xyz.select("* where a<3 and b<20").format("JSON")
6212
6213[ { "b": 11,"a": 1 } ]
6214
6215load $caffeine
6216print getProperty("atomInfo").select("atomno,element WHERE shape LIKE 'trigonal planar' ").format("JSON")
6217
6218[ { "element": "nitrogen","atomno": 1 },{ "element": "carbon","atomno": 3 },{ "element": "nitrogen","atomno": 5 },{ "element": "carbon","atomno": 7 },{ "element": "carbon","atomno": 9 },{ "element": "nitrogen","atomno": 10 },{ "element": "carbon","atomno": 12 },{ "element": "carbon","atomno": 13 } ]
6219
6220
6221xyz.select("(...) where ...")
6222Using parentheses around the list of keys delivers a list of
6223values for only the subset of xyz for which the WHERE clause is true:
6224
6225xyz = [ [a:1,b:11],[a:2,b:22],[a:3,b:33] ]
6226print xyz.select("(b) where a>1").format("JSON")
6227
6228[ 22,33 ]
6229
6230load $caffeine
6231 print getProperty("atomInfo").select("(shape) WHERE shape").pivot
6232{
6233  "bent"  :  1
6234  "tetrahedral"  :  3
6235  "trigonal planar"  :  8
6236 }
6237
6238Note that "WHERE shape" here just excludes all cases where shape is the empty string, since empty strings in Jmol evaluate as FALSE. (In this case that involves hydrogen atoms.)
6239
6240For example, finding all the hydrogen bonds created by DSSR for a given residue:
6241
6242load =1ehz/dssr
6243x = _M.dssr.hbonds.select("(distance) where res_long like '*|A|C|72|*'");
6244print x.format("JSON")
6245print format("%5.3f",x.average)
6246
6247[ 2.832,2.879,2.838 ]
62482.850
6249
6250Array "Drilling"
6251
6252WHERE will "drill down" through arrays of arrays to find
6253elements that are associative arrays, returning a flat array of those objects:
6254
6255xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
6256print xyz.select("a* where a>0").format("JSON")
6257
6258[ { "a": 1 },{ "a": 2 },{ "a": 3,"aa": 44 } ]
6259
6260xyz = [ [[a:1,b:11], [a:0,b:0]],[[[a:2,b:22]]],[[a:3,b:33,aa:44]] ]
6261print xyz.select("(b) where a>0").format("JSON")
6262
6263[ 11,22,33 ]
6264
6265
6266WHERE vs. WHEREIN
6267Starting with Jmol 14.4, JmolSQL includes an additional option, WHEREIN. This option
6268allows selecting specific key/value pairs for which the value is itself an associative
6269array, and *that array* has a specific set of key/value relationships. Thus, the
6270clause is checked one level deeper in the structure.
6271
6272For example, given the associative array
6273
6274abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6275
6276we can select out only those keys for which type='a':
6277
6278abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6279print abc.select("* WHEREIN type='a'").format("JSON");
6280
6281{ "key_3": { "i": 3,"type": "a" },"key_1": { "i": 1,"type": "a" } }
6282
6283All of the options that involve WHERE also apply to WHEREIN. For example,
6284multiple keys can be specified, and keys can be surrounded by parentheses
6285to return just the values instead of key/value pairs:
6286
6287abc = [key_1:[type:"a", i:1],key_2:[type:"b", i:2],key_3:[type:"a", i:3]]
6288print abc.select("(key_1,key2) WHEREIN type='a'").format("JSON");
6289
6290[ { "i": 1,"type": "a" } ]
6291
6292In addition, WHEREIN can be applied to arrays as well as associative arrays.
6293In this case, the WHEREIN phrase applies to the elements of that array, which
6294are assumed to be associative arrays. For example, we can get a list of just
6295the occupied orbitals produced by Gaussian that are of a given symmetry:
6296
6297load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6298print _M.moData.select("mos wherein occupancy>0").select("(symmetry)").pivot
6299
6300{
6301  "(A1)--O"  :  6
6302  "(A2)--O"  :  1
6303  "(B1)--O"  :  1
6304  "(B2)--O"  :  4
6305 }
6306
6307Note that this use of WHEREIN with arrays in this way can also be accomplished
6308more directly with WHERE:
6309
6310load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6311print _M.moData.mos.select("(symmetry) where occupancy>0").pivot
6312
6313{
6314  "(A1)--O"  :  6
6315  "(A2)--O"  :  1
6316  "(B1)--O"  :  1
6317  "(B2)--O"  :  4
6318 }
6319
6320load http://chemapps.stolaf.edu/jmol/jsmol/data/no2_nbo.log.gz 2 filter "alpha"
6321x= _M.moData.select("mos wherein occupancy>0 and symmetry like '(B2)*' ")
6322print x.select("(index)").format("JSON")
6323
6324[ 1,5,8,10 ]
6325
6326
6327TODO: document <<<<<-------
6328
6329
6330JmolVersion="14.3.16_2015.09.25"
6331
6332bug fix: HBONDS DELETE  broken since 14.1.2
6333
6334JmolVersion="14.3.16_2015.09.23"
6335
6336bug fix: within(0.0, {0 0 0}) fails when no atoms in model
6337
6338JmolVersion="14.3.16_2015.09.22"
6339
6340bug fix: for(var x in ...) does not respect "var"
6341
6342bug fix: x.format("JSON") fails for recursive x
6343  -- arrays or associative arrays can be recursive
6344  -- detection of recursion during SHOW, x.format("JSON"), and @x (deep copy)
6345     now delivers empty array or associative array
6346  -- works also with expressions using @{...}:  x = @{y.select("* where atomno > 10")}
6347
6348  -- example:
6349
6350		$ a = [[1,2],3]
6351		$ a..2 = a
6352		$ print a.format("JSON")
6353
6354			    [ [ 1,2 ],[ [ 1,2 ],[  ] ] ]
6355
6356		$ a = [b:1]
6357		$ a.b = a
6358		$ print a.format("JSON")
6359
6360		    { "b": { "b": {  } } }
6361
6362		$ y = @x
6363		$ show y
6364
6365		    y = { "b":{ "b":{  } } }
6366
6367
6368new feature: x = @a
6369  -- deep copy for a = array or associative array
6370  -- @a for string variable still gets the value of the variable named by variable a
6371  -- math environment only, not SELECT
6372
6373new feature: for allows one continuation line, as in JavaScript and Java
6374  -- for example:
6375	for (i = 1; i <= 3; i++)
6376  	  print i;
6377
6378bug fix: for (key in hash){...} fails upon functional iteration (deepCopy)
6379  -- code was reusing the FOR variable when it should have been caching it in the context stack
6380
6381JmolVersion="14.3.16_2015.09.21"
6382
6383new feature: Raster3D triangle-only file reader (for DSSR cartoon-block representation)
6384  -- see http://skuld.bmsc.washington.edu/raster3d/html/render.html
6385
6386bug fix: minor fixes for DSSR
6387
6388bug fix: print within(0, "XXX", ...) ignores the "XXX" entirely. Should throw an error (Ron Mignery)
6389bug fix: print within(0, "vdw", ...) ignores "vdw"; should accept that as "vanderwaal"
6390bug fix: print within(-1.0, "vanderwaal", ...) ignores "vanderwaal" and does a fractional-coordinate calculation
6391
6392JmolVersion="14.3.16_2015.09.20"
6393
6394FEATURE CHANGE: 3DNA DSSR has switched over to JSON; some array names are changed.
6395
6396
6397TODO: document ----->>>
6398
6399new feature: print @1.label("%[unitid]")
6400  -- generates unit IDs for atoms or residues
6401  -- unit IDs are a proposed general standard for representing atoms and residues in biomolecules
6402  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
6403  -- options follow "-":
6404
6405  $ print {atomno=3}.label("%[unitid]")     // includes residue and atom
6406  |1|A|G|1|OP1|||
6407
6408  $ print {atomno=3}.label("%[unitid-r]")   // residue only
6409  |1|A|G|1||||
6410
6411  $ print {atomno=3}.label("%[unitid-mr]")  // adds model id
6412  1EHZ|1|A|G|1||||
6413
6414  $ print {atomno=3}.label("%[unitid-mra]") // full unitID
6415  1EHZ|1|A|G|1|OP1|||
6416
6417  $ print {atomno=3}.label("%[unitid-mrat]") // full unitID, right-trimmed
6418  1EHZ|1|A|G|1|OP1
6419
6420  -- Note that the full 8-line unit ID is produced under all circumstances.
6421     This is  important, because string-matching of unit ids will not work
6422     without all fields completed. For example:
6423
6424     |1|A|G|1
6425
6426     would match
6427
6428     |1|A|G|11
6429
6430     without the closing "|". Likewise,
6431
6432     |1|A|G|11
6433
6434     is not a match for the insertion residue
6435
6436     |1|A|G|11|||3|
6437
6438  -- [Editorial note: I agree that it was ill-advised to put the insertion
6439      code at the end. This makes it impossible to efficiently match
6440      residues in full-atom unit IDs.]
6441
6442  -- Note that in an actual atom label, one needs to add "\n" at the end
6443     and have the label in quotes in order to avoid having "|" mean "new line"
6444
6445    label "%[unitid]\n"
6446
6447  not just
6448
6449    label %[unitid]
6450
6451  This is a consequence of having defined "|" as new line early on in Jmol
6452  development.
6453
6454bug fix: quoted labels containing \n are supposed to ignore | as new-line char
6455
6456new feature: select shortcuts for nucleic acid structures
6457  -- for example: select junctions; select kissingloops
6458  -- activated after load =xxxx/dssr or calculate structure dssr
6459  -- includes:
6460    "@bulges within(dssr,'bulges')",
6461    "@coaxStacks within(dssr,'coaxStacks')",
6462    "@hairpins within(dssr,'hairpins')",
6463    "@hbonds within(dssr,'hbonds')",
6464    "@helices within(dssr,'helices')",
6465    "@iloops within(dssr,'iloops')",
6466    "@isoCanonPairs within(dssr,'isoCanonPairs')",
6467    "@junctions within(dssr,'junctions')",
6468    "@kissingLoops within(dssr,'kissingLoops')",
6469    "@multiplets within(dssr,'multiplets')",
6470    "@nonStack within(dssr,'nonStack')",
6471    "@nts within(dssr,'nts')",
6472    "@naChains within(dssr,'naChains')",
6473    "@pairs within(dssr,'pairs')",
6474    "@ssSegments within(dssr,'ssSegments')",
6475    "@stacks within(dssr,'stacks')",
6476    "@stems within(dssr,'stems')",
6477
6478
6479TODO: document <<<<<-------
6480
6481JmolVersion="14.3.16_2015.09.15"
6482
6483bug fix: JSME's noncanonical SMILES does not match Jmol's standard SMILES for aromatics
6484 -- solution is to use /noncanonical/ with find().
6485
6486bug fix: JSmol does not automatically start non-English language
6487
6488
6489TODO: document ------>>>
6490
6491new feature: SMILES /noncanonical/
6492  -- matches Jmol's aromatic with JSME's "noncanonical" aromatic
6493  $ load $aspirin
6494  $ show smiles
6495    c1=cc=cc2=c1C(O)=O.O2C(C)=O
6496  $ print {*}.find("smiles", "/noncanonical/C1=CC=CC(OC(C)=O)=C1C(O)=O")
6497    ({0:20})
6498  $ print "c1=cc=cc2=c1C(O)=O.O2C(C)=O".find("smiles", "/noncanonical/C1=CC=CC(OC(C)=O)=C1C(O)=O")
6499    13
6500
6501new feature: {*}.find("SMILES", "NOAROMATIC")
6502 -- creates nonaromatic (noncanonical) SMILES
6503
6504new feature: JmolSQL x.select("...")
6505  -- shortcut for x.getProperty("[select ... ]")
6506  -- x should by an associative array  {key:value,..} or a sequential array [a,b,c,d]
6507
6508new feature: JmolSQL {associative array}.select("xxx** where...")
6509  -- double * indicates desire to return full sub-arrays, with keys
6510  -- "all keys starting with "xxx";
6511  -- uses LIKE
6512  -- can be at beginning or end or both: xxx**, **xxx, **xxx**
6513  -- WHERE clause is optional
6514  -- similar to [array].select("** where
6515
6516
6517
6518
6519TODO: document <<<<<-------
6520
6521JmolVersion="14.3.16_2015.09.14"
6522
6523bug fix: load data [2D mol structure...] filter "2D" not working
6524bug fix: Crystallographic Open Database CIF files have unusual atom_site_label ("MgT")
6525         and no atom_site_type_symbol, leading to missing element assignments
6526
6527JmolVersion="14.3.16_2015.09.09"
6528
6529#ignore:
6530#new feature: SMILES/SMARTS atom designations [C(xxxx)]
6531#   -- allows pointing to the same atom without connection numbers
6532#   -- (xxxx) may be anything, including just ()
6533#   -- definition may be anywhere in bracketed atom specification
6534#   -- any additional primitives in referring expression will be ignored
6535#   -- involves only a very simple addition to parser code
6536#   -- Jmol is not currently creating these strings, just interpreting them
6537#   -- rationale:
6538#
6539#      One basic aspect of SMILES is that it efficiently uses numbers to
6540#      indicate connectivity using a process of "opening" bonds and "closing" them.
6541#      Along with radical (.) notation, this is totally sufficient for describing
6542#      any connected network of atoms, including situations where the ordering
6543#      of connections is critical (e.g., in describing stereochemistry). Basically,
6544#      one can simply list all the atoms in an arbitrary order as single-atom
6545#      components (separated by "."), then assign bonds as desired, in whatever
6546#      order is desired.
6547#
6548#      The problem comes when attempting to indicate stereochemistry for
6549#      centers with more than six substituents or with geometries that are
6550#      outside the standard set of AL, TH, TP, SP, and OH. In such cases,
6551#      there may arise situations where the ordering of unbonded substituents
6552#      will be critical. An example is crystal structures of metals and metal
6553#      alloys. In this situation there are no covalent bonds. The need is to
6554#      be able to compare two such crystal structures.
6555#
6556#      The solution is to create SMARTS and SMILES strings for complex
6557#      "atomic environments" consisting of a central atom and any number of
6558#      nearby atoms, using a cutoff radius rather than a bonding pattern.
6559#      One possibility is to create a "pseudobond" that connects the central
6560#      atom to all of its connected atoms, but this is not really necessary and
6561#      slows processing significantly. Instead, the [@PHn] syntax proposed here
6562#      allows the polyhedral environment to be specified only for the polyhedron
6563#      itself, exclusive of the central atom.
6564#
6565#      By providing a means of referring to a specific previously defined atom in a
6566#      SMILES or SMARTS string, we can allow an atom in such an arrangement
6567#      to be part of two different polyhedra.
6568#
6569#      Thus, although isolated polySMARTS can be implemented without atom referents,
6570#      extending that to more complex multi-atom polySMARTS searches requires them.
6571#
6572#   -- example, simple branched organic
6573#
6574#		$ load $t-butylmethylether
6575#		$ select on search("[O][C(a)H0].[C(a)]C")
6576#
6577#		5 atoms selected
6578#
6579#      same as
6580#
6581#		$ select on search("[O][CH0](C)")
6582#
6583#   -- note that [C(2)] and [O(2)] are not sensible and may be disallowed.
6584#
6585
6586code: javajs.util reconciled with swingjs project
6587
6588bug fix: polyhedra.stereoSmiles --> polyhedra.polySmiles
6589
6590new feature: polyhedron.polySmiles adds central atom
6591
6592  -- example:
6593
6594		load SF6.smol -1
6595		polyhedra
6596		calculate symmetry polyhedra
6597		x = {polyhedra}.polyhedra.polySmiles
6598		print x
6599
6600		//* S1 #1 *//	[S@PH6].
6601		//* F6 #7 *//	[F]1234.
6602		//* F2 #3 *//	[F]5672.
6603		//* F3 #4 *//	[F]849%10.
6604		//* F4 #5 *//	[F]%11%10%126.
6605		//* F1 #2 *//	[F]937%12.
6606		//* F5 #6 *//	[F]8%1151
6607
6608	    print  polyhedron(x).atomname
6609
6610		S1
6611
6612JmolVersion="14.3.16_2015.09.08"
6613
6614code: Efficient JSON parser javajs.util.JSONParser
6615  -- requires object being parsed to be an object (bounded by "{" and "}")
6616
6617JmolVersion="14.3.16_2015.09.06"
6618
6619new feature: 3DNA DSSR JSON mode
6620 -- http://x3dna.bio.columbia.edu/dssr/report.php?id=1ehz&opts=--more%20--json=ebi-no-str-id
6621 -- uses unit ids
6622 -- preliminary version is /dssr1 but will replace /dssr
6623
6624  load =1ehz/dssr1
6625  cartoons only;
6626  color @{within(dssr,"junctions")} blue
6627  color @{within(dssr,"hairpins")} white
6628
6629new feature: JSON dssr loading and interpretation
6630	load =1ehz
6631	dssr = eval(load("1ehz.dssr.json"));
6632	y = within(dssr.junctions)
6633	color @y blue
6634
6635bug fix: dssr = "testing"  works, but then print dssr  just prints "DSSR"
6636  -- was true for all within() function keywords, such as substructure, search, sequence, etc.
6637
6638new feature: select within("1ehz|1|A|G|45||||")
6639new feature: print within("1ehz|1|A|G|45||||")
6640  -- unit IDs
6641  -- see http://rna.bgsu.edu/main/rna-3d-hub-help/unit-ids
6642  -- used for annotations, validations, dssr, and rna-3d processing
6643  -- pdbid|model|chain|RESNAME|resno|ATOMNAME|altcode|inscode|symmetry
6644  -- can truncate trailing (but not leading) pipe symbols
6645    1ehz|1|A|G|15, |1|A|G|15|C2
6646  -- requires at minimum a model number, chain, and residue number
6647    |1|A||15
6648  -- ATOMNAME blank indicates full residue, with altcode indicating "this alt_id or no alt_id" (a configuration)
6649  -- ATOMNAME nonblank indicates one atom, with altcode indicating "exactly this alt_id" (a location)
6650  -- can be multiple, white space, comma, "]", "[", and double quote ignored
6651    1ehz|1|A|G|15||||,1ehz|1|A|U|59||||,1ehz|1|A|C|60|||
6652
6653  //  Unit Identifier Specification
6654  //
6655  //  We describe the type and case sensitivity of each field in the list below. In addition, we list which item in the mmCIF the data for each field comes from. We also show several examples of the IDs and their interpretation at the end.
6656  //
6657  //  Unit ids can also be used to identify atoms. When identifying entire residues, the atom field is left blank.
6658  //
6659  //      PDB ID Code
6660  //          From PDBx/mmCIF item: _entry.id
6661  //          4 characters, case-insensitive
6662  //      Model Number
6663  //          From PDBx/mmCIF item: _atom_site.pdbx_PDB_model_num
6664  //          integer, range 1-99
6665  //      Chain ID
6666  //          From PDBx/mmCIF item: _atom_site.auth_asym_id
6667  //          <= 4 character, case-sensitive
6668  //      Residue/Nucleotide/Component Identifier
6669  //          From PDBx/mmCIF item: _atom_site.label_comp_id
6670  //          1-3 characters, case-insensitive
6671  //      Residue/Nucleotide/Component Number
6672  //          From PDBx/mmCIF item: _atom_site.auth_seq_id
6673  //          integer, range: -999..9999 (there are negative residue numbers)
6674  //      Atom Name (Optional, default: blank)
6675  //          From PDBx/mmCIF item: _atom_site.label_atom_id
6676  //          0-4 characters, case-insensitive
6677  //          blank means all atoms
6678  //      Alternate ID (Optional, default: blank)
6679  //          From PDBx/mmCIF item: _atom_site.label_alt_id
6680  //          Default value: blank
6681  //          One of ['A', 'B', '0'], case-insensitive
6682  //      Insertion Code (Optional, default: blank)
6683  //          From PDBx/mmCIF item: _atom_site.pdbx_PDB_ins_code
6684  //          1 character, case-insensitive
6685  //      Symmetry Operation (Optional, default: 1_555)
6686  //          As defined in PDBx/mmCIF item: _pdbx_struct_oper_list.name
6687  //          5-6 characters, case-insensitive
6688  //          For viral icosahedral structures, use \u201CP_\u201D + model number instead of symmetry operators. For example, 1A34|1|A|VAL|88|||P_1
6689  //
6690  //  Examples
6691  //
6692  //      Chain A in 1ABC = \u201C1ABC|1|A\u201D
6693  //      Nucleotide U(10) chain B of 1ABC = \u201C1ABC|1|B|U|10\u201D
6694  //      Nucleotide U(15A) chain B, default symmetry operator = \u201C1ABC|1|B|U|15|||A\u201D
6695  //      Nucleotide C(25) chain D subject to symmetry operation 2_655 = \u201C1ABC|1|D|C|25||||2_655\u201D
6696  //
6697  //  Unit ids for entire residues can contain 4, 7, or 8 string separators (|).
6698
6699
6700TODO: document <<<<<-------
6701
6702bug fix: after atom deletion, atom iterator still finds atoms.
6703  -- was not reinitializing the binary search after atom deletion
6704  -- affects polyhedra, within()
6705		$ load $caffeine
6706		$ delete _N
6707		4 atoms deleted
6708		$ print {*}.count
6709		20
6710		$ print within(14.0, {c6}).count
6711		24
6712
6713JmolVersion="14.3.16_2015.09.05"
6714
6715new feature: POLYHEDRA
6716  -- same as POLYHEDRA BONDS {selected}
6717new feature: POLYHEDRA 4
6718  -- same as POLYHEDRA 4 BONDS {selected}
6719new feature: POLYHEDRA OFFSET 1.4
6720  -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4
6721new feature: POLYHEDRA COLLAPSED 1.4
6722  -- same as POLYHEDRA COLLAPSED faceCenterOffset 1.4
6723
6724code: Polyhedra work, including more efficient algorithms for completing set of faces
6725
6726bug fix: tracking down thread-safe issue in application console
6727bug fix: in Java, mouse should not lose control if moved out of application
6728
6729JmolVersion="14.3.16_2015.09.04"
6730
6731bug fix: Mac OS does not add modifiers (left, right, ctrl, etc.) to drag operations
6732
6733
6734JmolVersion="14.3.16_2015.08.31"
6735
6736bug fix: MOVE command with 0 time does not work
6737
6738JmolVersion="14.3.16_2015.08.31"
6739
6740bug fix: plot property  with nothing more throws Exception
6741bug fix: Gaussian Dialog does not add final line ending when saving
6742
6743new feature: Jmol SMILES/SMARTS generic polySMILES polyhedron option @PHn(....)
6744 -- totally generic; will work with any number of connected atoms
6745 -- suitable replacement for all TP, OH, etc.
6746 -- standard equivalence to [C@] is [C@PH4(234)]
6747 -- standard equivalence to [C@@] is [C@PH4(432)]
6748 -- "reverse" option via "!": [C@PH4(!234)]
6749 -- designation around any or all of the attached atoms is possible. For tetrahedra, this is
6750    redundant, but for higher number of vertices, it may not be. This designation is
6751    done using "." to separate atoms.
6752 -- so [C@] is [C@PH4(234)] or [C@PH4(!432)] or [C@PH4(.134)]
6753 -- implied H as in [CH@] will be atom 1 if this is the first atom; 2 if not -- Br[CH@]....
6754    (same as in standard tetrahedral)
6755
6756 -- not implemented yet for SMARTS searching of SMILES strings
6757
6758		$ load $2-bromobutane
6759		$ show smiles
6760		Br[C@@H](C)CC
6761		$ print {*}.find("Br[C@](C)(H)CC")
6762		({0:5})
6763		$ print {*}.find("Br[C@PH4(234)](C)(H)CC")
6764		({0:5})
6765		$ print {*}.find("Br[C@PH4(234)](H)(C)CC")
6766		({})
6767		$ print {*}.find("Br[C@PH4(432)](H)(C)CC")
6768		({0:5})
6769		$ print {*}.find("Br[CH@@](C)CC")
6770		({0:4})
6771		$ print {*}.find("Br[CH@PH4(.134)](C)CC")
6772		({0:4})
6773		$ print {*}.find("Br[CH@PH4(!.134)](C)CC")
6774		({})
6775
6776 -- :)
6777
6778
6779JmolVersion="14.3.16_2015.08.30"
6780
6781code: refactoring of smiles package
6782
6783new feature: preliminary no-limit SMILES polyhedron stereochemistry @PHn
6784  -- very preliminary
6785  -- the format relies on specifying the order of bonds, so it
6786     creates a new component for each atom in the polyhedron, and it
6787     then arranges all bonds listed in @/CCW or @@/CW rotation as projected
6788     into the plane perpendicular to the line connecting the given (polygon vertex)
6789     atom and the (central) reference atom.
6790  -- example:
6791
6792		$ load $methane
6793		$ polyhedra 4
6794		$ calculate symmetry polyhedra
6795		C1 #1 Td
6796
6797		$ print @1.polyhedra.polySmiles
6798		//* C1 #1 *//	[C@PH4].
6799		//* H5 #5 *//	[H]123.
6800		//* H2 #2 *//	[H]245.
6801		//* H3 #3 *//	[H]356.
6802		//* H4 #4 *//	[H]641
6803
6804  -- thus, stereochemistry is set based on the winding of the atom environment.
6805  -- the reference atom is listed first, but it need not be connected to the other
6806     atoms, and in fact for polyhedra we leave it out (note that it is not connected)
6807  -- there is no limit to the number of connections any particular connecting atom
6808     can have. So this covers all general SMILES stereochemistry.
6809  -- a match is when the proper winding is found for all vertices.
6810
6811        load $C(Br)(Cl)F
6812		color chlorine blue
6813		polyhedra 4 bonds distancefactor 3.0
6814		calculate symmetry polyhedra
6815		print @1.polyhedra.polySmiles
6816
6817		C1 #1 C1
6818
6819		//* C1 #1 *//	[C@PH4].
6820		//* H5 #5 *//	[H]123.
6821		//* Br2 #2 *//	[Br]245.
6822		//* Cl3 #3 *//	[Cl]356.
6823		//* F4 #4 *//	[F]641
6824		$ invertselected
6825		$ polyhedra 4 bonds distancefactor 3.0
6826		calculate symmetry polyhedra
6827		print @1.polyhedra.polySmiles
6828
6829		C1 #1 C1
6830
6831		//* C1 #1 *//	[C@PH4].
6832		//* H5 #5 *//	[H]123.
6833		//* Br2 #2 *//	[Br]245.
6834		//* Cl3 #3 *//	[Cl]641.
6835		//* F4 #4 *//	[F]356
6836
6837
6838new feature: Jmol SMILES and SMARTS accepts look-back bond targeting using (n)
6839             where n is the sequential atom in the pattern.
6840  -- for example:
6841
6842      $load cyclopentane
6843      print {*}.find("CCCCC(1)")   # cyclopentane ring
6844
6845  -- will be very important in building around [@PHn] stereochemistry, because these
6846     components need to have no other connections, at least at the point of description.
6847     Then if we need to attach to these, we can do so by connecting using this look-back
6848     technique.
6849
6850bug fix: Jmol bioSMARTS string-based search not implemented correctly
6851	-- for example, "~p~AC:A".find("SMARTS","~p~A:C", true) should give [[2,1]]
6852
6853new feature: Jmol SMILES trigonal pyramidal stereochemistry
6854  -- same as tetrahedral, put without the fourth group.
6855
6856new feature: {*}.find("SEQ")
6857new feature: {*}.find("SEQ", true)
6858new feature: {*}.find("SEQ", "H")
6859 -- no-comment Jmol bioSMILES:
6860
6861	 $ load =3ll2
6862	 $ print {carbohydrate}.find("seq")
6863	  ~c~[MAN][MAN][MAN].~c~[MAN][MAN].~c~[MAN][MAN][MAN]
6864	 $ print {carbohydrate}.find("seq", true)
6865
6866
6867
6868code: much more efficient selection for groups, types of monomers, polymers, etc.
6869
6870bug fix: {*}.find("SMILES",true) should default to covalent crosslinks
6871bug fix: {*}.find("SEQUENCE",true) should not include hydrogen bonded crosslinks
6872
6873undocumented feature: Jmol bioSMILES includes ~c~ for carbohydrate
6874  -- for example:
6875
6876   $ load =3LL2
6877	SUGAR BINDING PROTEIN                   28-JAN-10   3LL2
6878	MONOMERIC GRIFFITHSIN IN COMPLEX WITH A HIGH-MANNOSE BRANCHED
6879	CARBOHYDRATE
6880	found biomolecule 1: A
6881
6882   $ select carbohydrate
6883	168 atoms selected
6884   $ show smiles true
6885	//* Jmol bioSMILES 14.3.16_2015.08.29  2015-08-29 12:03 1 *//
6886	//* chain A CARBOHYDRATE 122 *// ~c~[MAN]:1[MAN]:2[MAN] //* 124 *//.
6887	//* chain A CARBOHYDRATE 125 *// ~c~[MAN]:2[MAN] //* 126 *//.
6888	//* chain A CARBOHYDRATE 127 *// ~c~[MAN]:1[MAN][MAN] //* 129 *//
6889
6890
6891new feature: show SMILES TRUE
6892  -- shows bioSMILES
6893new feature:  {*}.find("SEQUENCE","H") adds hydrogen-bonded crosslinks
6894
6895bug fix: select within(polymer, water) should select nothing
6896bug fix: select !within(polymer, *) should not select nothing
6897
6898bug fix: SMILES/SMARTS not accepting two separate processing directives such as /noaromatic/ /nostereo/
6899new feature: GaussianReader reads high precision vibrational mode data
6900  -- Gaussian input options must include Freq=(HPModes)
6901new feature: GaussianRedaer filter "NOHP" flag ignores high precision vibrational mode log info
6902new feature: Gaussian FCHK file reader reads vibrational modes
6903  -- Gaussian input options must include Freq=(SaveNormalModes)
6904
6905JmolVersion="14.3.16_2015.08.26"
6906
6907new feature: SMARTS conformational search no longer limited to one range.
6908  -- example:
6909
6910    select on search("{[CH3]}(.t:50,70,-70,-50)CC{[CH3]}")
6911
6912
6913JmolVersion="14.3.16_2015.08.25b"
6914
6915bug fix: {3/, 2/, 1/} notation broken
6916
6917JmolVersion="14.3.16_2015.08.25"
6918
6919
6920bug fix: JmolThread should use setTimeout in resumeEval
6921
6922new feature: JmolSMILES $(.x:1,2,3,4,5,6,7,8)
6923    -- x is oen of d,a,t
6924	-- up to four ranges per measurement
6925new feature: print  {2.1}.find("SMILES",{1.1})
6926
6927bug fix: compare() function returning matrix with translation about center, not origin
6928bug fix: print compare({1.1},{2.1}, "SMILES", "stddev") broken
6929bug fix: select search("[$(select atomno < 5)]")  broken
6930bug fix: select search("[$(select atomno < 5) or @5]")  broken
6931
6932new feature: _hoverLabel
6933   -- reports general hover label set by hover command
6934
6935new feature: _hoverEnabled
6936  -- reports if hover is enabled or not
6937
6938bug fix: calculate partialCharge does not store result if all values are 0 (Otis Rothenberger)
6939bug fix: still problems with aTest = "testing"; x = [aTest:aTest] or a = [property_MYINFO:aTest] (Rolf Huehne)
6940bug fix: cross(a,b) broken
6941bug fix: write PDB broken; works without "PDB" keyword broken in 14.3.15_2015.06.18
6942
6943
6944new feature: /invertStereo/ flag for SMARTS search
6945  -- allows quick check for enantiomers
6946  -- example: select search("/invertStereo/C[C@H](Br)CC") will match (R)-2-bromobutane
6947              even though it is for (S)-2-bromobutane
6948
6949FEATURE CHANGE: Definitions of dna, rna, purine, and pyrimidine were ambiguous and
6950                not particularly viable for group fragments. This is much clearer
6951                now: Fragments and P-only and N-only monomers are identified by
6952                name only:
6953
6954  // These masks are only used for P-only and N-only polymers
6955  // or cases where there are so few atoms that a monomer's type
6956  // cannot be determined by checking actual atoms and connections.
6957  // They are used for NucleicMonomer or AminoMonomer classes only as
6958  // a last resort.
6959  //
6960  //             I  A G
6961  //   purine:   100101 = 0x25
6962
6963  //              UT C
6964  // pyrimidine: 011010 = 0x1A
6965  //
6966  //            +IUTACGDIUTACG IUTACG
6967  //        rna: 110000 000000 110111 = 0x30037
6968
6969  //            +IUTACGDIUTACG IUTACG
6970  //        dna: 001111 111111 001000 = 0x0FFC8
6971
6972
6973bug fix: SMILES recognizes atom name [*.CA] but not residue name [ALA.*]
6974bug fix: Jmol BioSMILES broken
6975
6976bug fix: set cartoonLadders with phosphorus-only polymers crashes Jmol
6977
6978bug fix: protein and nucleic are not set properly for non-monomer groups (Eric Martz)
6979 -- broken in Jmol 14.3.11 (12/13/2014)
6980 -- general definition of protein is from having CA, C, and N. But there
6981    are situations where we know it is protein from its group name (ALA,LEU..)
6982    despite the fact that it is just one atom. Same for nucleic.
6983 -- note that non-canonical (HETERO) amino acids or nucleic bases that do not have
6984    the requisite atoms to identify them as such will still not test positive for
6985    "protein" or "nucleic".
6986
6987JmolVersion="14.3.16_2015.08.21"
6988
6989bug fix: Tools...Spectra...JSpecView broken
6990
6991JmolVersion="14.3.16_2015.08.21"
6992
6993new feature: load var x
6994  -- same as load "@x"
6995  -- similar in syntax to write var x t.png
6996  -- example:
6997
6998  var x = load("quartz.cif")
6999  load var x {1 1 1}
7000
7001bug fix: creating and running and saving binary hash from PNGJ fails
7002  -- allows creating an associative binary array from a PNGJ file
7003     then modifying it and loading that variable
7004     then saving it as a new PNGJ file
7005  -- initial PNGJ file is not necessary if binary array x is created by some other means
7006  -- example:
7007
7008      var x = load("test.png",true)
7009      load "@x"
7010      write test2.png as PNGJ
7011
7012bug fix: hover callback is not supposed to be stopped with HOVER OFF
7013bug fix: atom.sx and atom.sy and atom.sz report incorrectly when antialiasing is on
7014bug fix: write VAR x "test.png" creates a ZIP file instead of a PNGJ file when x is from load("test.png",true)
7015bug fix: write test.png as PNGJ (without initial quotes) fails
7016
7017JmolVersion="14.3.16_2015.08.19"
7018
7019bug fix: PyMOL reader does not load surface from PNGJ file
7020bug fix: PDB reader can skip assignments of secondary structure after first structure loaded during session
7021
7022JmolVersion="14.3.16_2015.08.18"
7023
7024bug fix: PyMOL reader not reading "H69" as "helix" (RGS-Ga_8pdb_structures_aligned_S90_20.5.15.pse)
7025bug fix: PyMOL labels offset in Y direction (down.pse) see http://noys3.weizmann.ac.il/a2jb/browse
7026bug fix: PyMOL session with isosurface cannot be read from state
7027known bug: RGS-Ga_8pdb_structures_aligned_S90_20.5.15.pse has two frames; showing frame 2 with no displayed atoms
7028
7029JmolVersion="14.3.16_2015.08.17"
7030
7031bug fix: select %? not working
7032bug fix: select ^? not working
7033
7034
7035JmolVersion="14.3.16_2015.08.17"
7036released
7037
7038bug fix: PDB reader cuts off long titles.
7039bug fix: slab setting by wheel can be unintentional
7040bug fix: wheeling slab could run range unintentionally way too high or low
7041
7042new feature: slab/depth setting.
7043
7044  -- these enable wheel actions
7045
7046    bindAction(SINGLE|CTRL|WHEEL, ActionManager.ACTION_wheelZoom);
7047    bindAction(SINGLE|SHIFT|WHEEL, ActionManager.ACTION_wheelZoom);
7048    bindAction(SINGLE|CTRL|SHIFT|WHEEL, ActionManager.ACTION_wheelZoom);
7049
7050  -- these enable slab-wheel actions
7051
7052    bindAction(SINGLE|CTRL|WHEEL, ActionManager.ACTION_slab);
7053    bindAction(SINGLE|SHIFT|WHEEL, ActionManager.ACTION_depth);
7054    bindAction(SINGLE|CTRL|SHIFT|WHEEL, ActionManager.ACTION_slabAndDepth);
7055
7056
7057JmolVersion="14.3.16_2015.08.16"
7058
7059run up to full documentation
7060
7061JmolVersion="14.3.16_2015.08.15"
7062
7063new feature: xxx.array
7064 -- forces xxx if xxx is already an array, otherwise returns an array created from xxx.
7065 -- matrix3f and matrix4f are converted to standard 3x3 or 4x4 arrays; others are returned as [ xxx ].
7066 -- can be used to force an array where a string or other single value will be returned.
7067 -- particularly useful to force an array from a bitset operation that is evaluated for one atom.
7068 -- example:
7069
7070       print {altloc=='A'}.sort  # causes an error if {altloc="A"} is one atom
7071       print {altloc=='A'}.array.sort # forces an array [ "A" ]
7072
7073bug fix: x.array.pivot returns "NaN" for empty array -- should return an empty associative array
7074
7075JmolVersion="14.3.16_2015.08.14"
7076
7077bug fix: label "3%"  reads "3null"
7078bug fix: {*}.label = ... resets offsets, fonts, and alignment
7079bug fix: label "3%%" is saved in the state as "3%"
7080
7081JmolVersion="14.3.16_2015.08.13"
7082
7083released
7084
7085JmolVersion="14.3.16_2015.08.12"
7086
7087released - but a bad build
7088
7089bug fix: set labeloffset 4 4  (specifically) just centers label
7090bug fix: var b = a..B  fails (found by Rolf Huehne)
7091  -- non-lower-case associative array name same as user variable name
7092     turned into lower case and then looked up as a["b"] instead of a["B"], so not found
7093
7094bug fix: show xxx (variable) broken in 4.3.15_2015.06.13
7095
7096JmolVersion="14.3.16_2015.08.11"
7097
7098released
7099
7100bug fix: a = {*}.label("%[xxx]") does not work.
7101bug fix: "".format([a,b]) crashes Jmol
7102
7103new feature: load <mmCIF file> filter "addBonds"
7104 -- processes _struct_conn records
7105 -- inter-group connections only
7106 -- includes _struct_conn bond types:
7107		covale           covalent bond
7108		covale_base      covalent modification of a nucleotide base
7109		covale_phosphate covalent modification of a nucleotide phosphate
7110		covale_sugar     covalent modification of a nucleotide sugar
7111		disulf           disulfide bridge
7112		metalc           metal coordination
7113 -- ignores _struct_conn bond types:
7114		hydrog  hydrogen bond
7115		mismat  mismatched base pairs
7116		modres  covalent residue modification
7117		saltbr  ionic interaction
7118
7119new feature: load *1crn*
7120 -- loads PDBe "updated" CIF files to allow CONECT-like bond creation
7121 -- for example, http://www.ebi.ac.uk/pdbe/static/entry/1h68_updated.cif
7122 -- suitable replacement for PDB CONECT
7123 -- processes _chem_comp_bond and _struct_conn categories
7124 -- presence of _chem_comp_bond will process _struct_conn as well, regardless of filter "addbonds"
7125      (because _chem_comp bonds are only intra-group, and for full CONECT-like behavior, we need all bonds)
7126
7127JmolVersion="14.3.15_2015.08.09"
7128
7129bug fix: CML reader can fail (e.g. nsc244a.cml)
7130
7131code: refactoring of JmolDataManager
7132
7133JmolVersion="14.3.15_2015.08.08"
7134
7135new feature: atom property "monomer" same as %g
7136new feature: atom property "seqcode" same as %r
7137new feature: load "test.pdb" from write property atomno temperature now restores values for atomno and temperature for points on plot
7138
7139bug fix: label %g does not indicate group index in chain
7140bug fix: JSmol does not recognize label %W %g %r %O etc. with single digits where there is no %[xxx] equivalent
7141
7142bug fix: "print stateVersion" not reporting as documented.
7143bug fix: write property atomno temperature "test.pdb" does not preserve long residue names from CIF files or long atom names from other file types
7144
7145JmolVersion="14.3.15_2015.08.06"
7146
7147bug fix: stereo setting should not be saved in state.
7148  -- though saved, it was not by default set to normal,
7149  -- thus influencing later loads.
7150
7151bug fix: STEREO not implemented in JavaScript
7152
7153new feature: STEREO DTI
7154  -- left/right dual panel, as just STEREO
7155  -- compresses width by 50% for DTI mode (Dimension Technologies, Inc.)
7156
7157bug fix: calculate STRUTS broken for 3dfr, with peptide ligand MTX
7158
7159JmolVersion="14.3.15_2015.08.01"
7160
7161bug fix: SMARTS matching broken for [r5] ring designation
7162
7163bug fix: reference to functions as commands requires lower case:
7164  -- for example:
7165  function F(a){ print a }
7166  F("test") // OK
7167  f("test") // OK
7168  f "test"  // OK
7169  F "test"  // fails
7170
7171
7172JmolVersion="14.3.15_2015.07.30b"
7173
7174bug fix: JavaScript deletion of array elements fails for int[] arrays.
7175
7176JmolVersion="14.3.15_2015.07.30"
7177
7178new feature: set multipleBondBananas TRUE
7179  -- displays multiple bonds as banana bonds
7180  -- does not carry over after model loading
7181
7182new feature: set multipleBondSpacing 0.15; set multipleBondRadiusFactor -1.0
7183  -- positive number for spacing but negative for radiusFactor rotates fixed multiple bonds 90 degrees.
7184
7185bug fix: magnetic spin vectors do not render properly (broken in 14.3.13_2015.05.12)
7186
7187JmolVersion="14.3.15_2015.07.29"
7188
7189new feature: [Font] button added to ScriptEditor
7190
7191bug fix: config 2 and  select config=2 may not work properly (still)
7192bug fix: minimization of PCl4 (==PC4) does not auto-switch to UFF from MMFF94 (bond key not set)
7193
7194FEATURE CHANGE: org.jmol.awtjs.swing.Dimension dependency removed from JmolViewer and JmolStatusListener interfaces
7195  -- changed to int[]
7196
7197JmolVersion="14.3.15_2015.07.22"
7198
7199bug fix: config 1  does not work; listing is not complete.
7200
7201JmolVersion="14.3.15_2015.07.11"
7202
7203bug fix: format("%5.-5i") broken -- only shows right  four  digits if # digits is 5.
7204bug fix: write PDB broken for some systems (14.3.12)
7205
7206JmolVersion="14.3.15_2015.07.09"
7207
7208released as 14.2.15_2015.07.09
7209
7210
7211bug fix: load "xxx" 1 {10 10 10} does not recognize lattice information when model number is given (broken in 07.07)
7212
7213JmolVersion="14.3.15_2015.07.08c"
7214
7215bug fix: load files "xxx.png|xxxx" "xxx.png|zzzz"  not read from state properly
7216bug fix: polyhedra not saved in state property
7217bug fix: moving atoms with 4x4 matrix not saved in state
7218bug fix: moving of an atom having a polyhedron fails to move the polyhedron as well
7219
7220
7221new feature: smiles2.find("SMILES",smiles1, asMap, allMappings)
7222  -- asMap = TRUE (default false) indicates you want an atom
7223     correlation map indicating positions in smiles2 corresponding to smiles1
7224  -- allMappings = TRUE (default false) indicates you want
7225     all mappings, not just the first found
7226  -- returns a number, -1, 0, n>0 when asMap is false (allMappings ignored)
7227  -- returns int[] when allMappings is false
7228  -- returns int[][] when allMappings is true
7229  -- example:
7230    var s1 = atom1.polyhedron.getProperty("SMILES")
7231    var coords = atom2.polyhedron.getProperty("vertices")
7232    var s2 = atom2.polyhedron.getProperty("SMILES")
7233    var coords2 = atom2.polyhedron.getProperty("vertices")
7234    var map12 = s2.find("SMILES", s1, true, false)
7235    var coords2Mapped = []
7236    for (var i in map12) coords2Mapped.push(coords2[i + 1])
7237    coords2 = coords2Mapped
7238    var mat = compare(coords1, coords2)
7239    select {1.1}
7240    rotateselected @mat
7241
7242JmolVersion="14.3.15_2015.07.07c"
7243
7244bug fix: x.getProperty("[select name where composition[1] == 0.5]")
7245 -- the [ there is tripping us up. True, ..1 could be used instead as well.
7246
7247JmolVersion="14.3.15_2015.07.07b"
7248
7249bug fix: 2015.07.06 breaks text writing in JSmol
7250bug fix: Crystal reader cannot handle   TOTAL ENERGY CORRECTED... line
7251
7252new feature: JSmol  Jmol._persistentMenu = true
7253 -- allows menu to persist and not be removed
7254
7255new feature: JSmol  <div id=JmolApplet0_console></div>  sets a place on the page for the JSmol console.
7256
7257new feature: load xxx filter "latticeScaling=1.2"
7258  -- scales model based on a crystal lattice
7259	  -- allows volume matching for crystal comparison
7260
7261bug fix: SMARTS processing with "." may not find substructure
7262
7263JmolVersion="14.3.15_2015.07.03"
7264
7265bug fix: mmCIF reader does not recognize load MODEL ...
7266bug fix: PDB reader should be reading load "" [1 3 4] as MODEL record numbers, not sequential numbers
7267bug fix: load MODELS "" [1 3 4] does not work (although load "" [1 3 4], without with MODELS keyword, works)
7268
7269clarification:
7270
7271  load "" 1             # loads the first model in a file when not PDB or mmCIF.
7272  load "" 1             # loads the model with MODEL 1 record for a PDB file.
7273  load "" 1             # loads the model with _atom_site.pdbx_PDB_model_num = 1 for an mmCIF file
7274  load "" [1]           # same as load "" 1; brackets allow for more than one model, for instance [1 3 5]
7275  load MODELS ({1}) ""  # always loads the SECOND model in a file
7276
7277
7278
7279JmolVersion="14.3.15_2015.06.30"
7280
7281bug fix: POVRay and VRML exporters mishandle label backgrounds
7282bug fix: exports not handling rockets correctly
7283
7284JmolVersion="14.3.15_2015.06.19c"
7285
7286bug fix: 1/{a b c} gives 0, not 1/length({a b c})
7287
7288JmolVersion="14.3.15_2015.06.19b"
7289
7290new feature: MACRO command
7291 -- runs predefined script, generally defining new functions of general use
7292 -- contributions welcome!
7293 -- will be expanded
7294
7295		$ macro aflow
7296		running http://aflowlib.mems.duke.edu/users/jmolers/jmol/spt/AFLOW.spt
7297		aflowLoad(binaryAlloy) loaded
7298		aflowBinaries loaded
7299		aflowDualArray(binaryAlloy, a, b) loaded
7300		aflowDualWrite loaded
7301		aflowConvexHull(binaryAlloy) loaded
7302		aflowCheckBinary(binaryAlloy) loaded
7303		aflowGetPG(binaryAlloy, a, range1, range2,radius) loaded
7304		$ aflowLoad("AgAu")
7305		294 models
7306
7307		$ print aflowConvexHull
7308		  {
7309		    "Cb"  :  0.0
7310		    "Hf_eV_VASP"  :  0.0
7311		    "modelNumber"  :  2
7312		   }
7313		  {
7314		    "Cb"  :  0.25
7315		    "Hf_eV_VASP"  :  -0.0472733
7316		    "modelNumber"  :  26
7317		   }
7318		  {
7319		    "Cb"  :  0.5
7320		    "Hf_eV_VASP"  :  -0.085589
7321		    "modelNumber"  :  180
7322		   }
7323		  {
7324		    "Cb"  :  0.75
7325		    "Hf_eV_VASP"  :  -0.0463823
7326		    "modelNumber"  :  25
7327		   }
7328		  {
7329		    "Cb"  :  1.0
7330		    "Hf_eV_VASP"  :  0.0
7331		    "modelNumber"  :  260
7332		   }
7333
7334bug fix: AFLOW binary file reader can fail with certain VASP formats containing
7335         both in-line atom labels and atom elements prior to #elements line. (AlPd#5, for example)
7336
7337JmolVersion="14.3.15_2015.06.19"
7338
7339new feature: pt.distance(plane,ptRef)
7340 -- returns a negative distance if pt and ptRef are on different sides of the plane
7341 -- useful for constructing 3D convex hulls and polyhedra, where all points
7342    must be on the same side of all planes
7343
7344new feature: removing empty array values using array.find() and opposite using array.find("")
7345 -- "empty" means an entry that is "", [], or {}
7346 -- for example:
7347
7348   print [0 3 4 "" 5 {} [] 6].find()
7349
7350     [0 3 4 5 6]
7351
7352   print [0 3 4 "" 5 {} [] 6].find("")
7353     [ "" {} [] ]
7354
7355bug fix: msCIF reader can hang if occupancy is not fractional
7356bug fix: JSmol applet not returning full set of parameters in animFrameCallback
7357bug fix: load FILL command can fail if base unit cell is not part of the needed set for the specified volume
7358
7359JmolVersion="14.3.15_2015.06.18"
7360
7361new feature: polyhedra ONLY
7362
7363new feature: calculate symmetry POLYHEDRA
7364  -- sets values for ShapeInfo.Polyhedra.smiles, .smarts, and .pointGroup
7365
7366bug fix: wireframe ONLY (RESTRICT) executes polyhedral DELETE instead of OFF
7367bug fix: Polygons not indicating visibility when they are the only thing visible.
7368bug fix: x[++y] did not increment y. x[y++] and other contexts were fine
7369
7370JmolVersion="14.3.15_2015.06.17"
7371
7372new feature: extracting array of sequential arrays from array of associative arrays
7373 -- pull out just the values desired into a sequential array
7374 -- example, where b is an array of associative arrays [....., energy:..., pointGroup....]
7375
7376 	  print b.format(["energy", "pointGroup"])
7377
7378new feature: array of sequential arrays formatting using array.format("format")
7379 -- example
7380
7381	  energy_pg = b.format(["energy", "pointGroup"])
7382	  print energy_pg.format("%5.3f\t%5s")
7383
7384new feature: associative array binning:
7385 -- creates a pivot table of the bins
7386 -- adds keys "_bin", "_binMin", and "_binMax" to the initial array
7387 -- example:
7388
7389
7390    load "AgAu.aflow_binary"
7391    polyhedra 4-24 3.65 unitcell translucent 0.2
7392	m = _("aflowInfo[Select modelNumber where Cb=0.5]")
7393	b = {@1  and model=m}.polyhedra.all.getProperty("[select energy,pointGroup,modelNumber");
7394	c = b.bin(-0.1,0.1,0.02,"energy")
7395	print b.format(["energy", "pointGroup"]).sort(1).reverse.format("%5.3f  %5s")
7396
7397
7398
7399new feature: polyhedra highlight with select ON or set selectionHalos ON
7400
7401new feature: getProperty("ShapeInfo.polyhedra") includes keys
7402				atomIndex
7403				atomNumber
7404				center
7405				energy  // from model auxiliaryInfo _m.Energy, if available
7406				faceCount
7407				faces
7408				modelIndex
7409				modelNumber
7410				smarts
7411				smiles
7412				vertexCount
7413				vertices
7414
7415new feature: polyhedra properties "smiles" and "smarts"
7416 -- uses JmolSMILES, extending SMILES for periodic structures
7417 -- smiles is a SMILES string for the polyhedron, not including its center atom.
7418 -- smarts is smiles but replacing atom descriptors with *
7419 -- can be searched for using x = polyhedron(s) where s is SMILES or SMARTS
7420
7421
7422
7423new feature: polyhedron(smiles)
7424new feature: polyhedron(smarts)
7425 -- searches for a polyhedron (which must be already present) matching the given SMILES
7426 -- for example:
7427
7428        // load a set of binary alloy structures
7429 		load "AgAu.aflow_binary"
7430 		// generate all polyhedra on the first atom of each model
7431 		select @1
7432 		polyhedra 4-24 3.65 unitcell translucent 0.2
7433 		// find all SMARTS codes for 12-vertex polyhedra; taking the first
7434		x= polyhedra(12).polyhedra.all.getProperty("smarts")[1]
7435		// find central atoms for all similar polyhedra
7436		y= polyhedra(x)
7437		// get their model numbers
7438		print y.model.all
7439		z= y.model.all
7440		// make the current frame set just those models
7441		frame @z
7442
7443 -- not fully worked out
7444
7445new feature: array.getProperty("xxxx")
7446  -- same as getproperty(array, "xxxx")
7447  -- drills down into an array of associative arrays to get sublist
7448  -- can be used with [SELECT ... WHERE]
7449
7450
7451bug fix: ++x and x++ do not increment properly when in expressions
7452	// no problem here because it is compiled as "x = x + 1"
7453		x = 0
7454		x++
7455		print "x should be 1 " + x
7456
7457	// x does not increment, but the test passes
7458		x = 0
7459		if (++x) {
7460		print "good"
7461		}
7462		print "x should be 1 " + x
7463
7464	// x does not increment, but the test passes ("bad" is not printed)
7465		x = 0
7466		if (x++) {
7467		 print "bad"
7468		}
7469		print "x should be 1 " + x
7470		x = 0
7471	// works
7472		x++
7473	// y is OK, but x does not increment
7474		y = x++
7475		print "x should be 2 " + x
7476		x = 0
7477	// z is OK, but x does not increment
7478		z = ++x
7479		print "x should be 1 " + x
7480
7481    // result:
7482
7483		x should be 1 1
7484		good
7485		x should be 1 0
7486		x should be 1 0
7487		x should be 2 1
7488		x should be 1 0
7489
7490JmolVersion="14.3.15_2015.06.16"
7491bug fix: msCIF reader failing for Legendre polynomials of order greater than 4
7492  -- JavaScript fix for new double[m + 1][]
7493  -- must use AU.newDouble2(m + 1);
7494
7495JmolVersion="14.3.15_2015.06.14c"
7496
7497bug fix: var firstPARAM  = "p1_b"; x = [FIRSTParam: "p1_a"]; results in lowering of case as [firstparam:....]
7498bug fix: set drawPicking draw;set drawpicking  does not show handles
7499bug fix; point group not calculated when the selected atoms are a subset of a model
7500bug fix: x.find("SMILES") is incorrect for structures that have hypervalent atoms and branches such as inorganic nitrates
7501bug fix: msCIF reading with two models, and only one has displacement modulation causes "render error" crash
7502bug fix: msCIF reader failing for Legendre polynomials of order greater than 4
7503bug fix: DRAW for quadrilateral broken when perspective depth is turned off.
7504bug fix: SET ECHO IMAGE broken in JavaScript version
7505
7506
7507new feature: POLYHEDRA 12 UNITCELL
7508 -- creates a polyhedron (12-gon in this case) around each of the
7509    currerntly selected atoms that has that bonding environment
7510 -- DOES NOT require atoms at these positions - can simply use the
7511    unit cell and periodicity to find the relevant atom positions.
7512 -- will check bonding as necessary using autobonding parameters
7513 -- accepts all standard polyhedra options. For example:
7514
7515    polyhedra 12,16 3.5 UNITCELL
7516
7517new feature: POLYHEDRA 4-16
7518 -- allows a range of unit cell bonding patterns.
7519 -- in this case, same as 4,5,6,7,8,9,10,11,12,13,14,15,16
7520
7521    polyhedra 4-16 3.5 UNITCELL
7522
7523new feature: getProperty shapeInfo.polyhedra
7524
7525    print getProperty("shapeInfo.polyhedra[1]").keys
7526
7527		_ipt
7528		center
7529		modelIndex
7530		planeCount
7531		polygons
7532		vertexCount
7533		vertices
7534
7535new feature: draw POINTS [ array of points ]
7536
7537	 draw diameter 0.2 points @{getProperty("shapeInfo.polyhedra[1].vertices")}
7538
7539new feature: show pointgroup POLYHEDRON
7540 -- uses points from the polyhedron of the first selected atom
7541 -- recommended to use specific atom reference in POLYHEDRA command:
7542
7543    select @21
7544    polyhedron 3.5 UNITCELL
7545    show pointgroup polyhedron
7546
7547
7548$ show pointgroup polyhedron
7549# 13 atoms
7550
7551
7552Oh	Ci	{2.1020985 -4.3122215 2.1430104}
7553
7554Oh	nC4	3	2
7555Oh	C4_1	{0.99993926, -0.007795072, 0.0077921236}
7556Oh	C4_2	{7.8514034E-7, -0.9997856, -0.020707628}
7557Oh	C4_3	{7.619045E-7, 0.009661385, -0.9999533}
7558
7559Oh	nC3	4	2
7560Oh	C3_1	{-0.58944535, 0.5712053, 0.57120806}
7561Oh	C3_2	{-0.58944565, -0.5712049, -0.57120824}
7562Oh	C3_3	{-0.5824926, -0.58349025, 0.5658989}
7563Oh	C3_4	{0.5764604, -0.5864354, 0.5690228}
7564
7565Oh	nC2	9	1
7566Oh	C2_1	{0.7004682, -0.71362424, -0.0092081865}
7567Oh	C2_2	{0.7004673, 0.009209763, 0.7136251}
7568Oh	C2_3	{0.99993926, -0.007795072, 0.0077921236}
7569Oh	C2_4	{-0.70046806, -0.71362436, -0.009208187}
7570Oh	C2_5	{-8.22445E-7, 0.7071046, -0.707109}
7571Oh	C2_6	{7.8514034E-7, -0.9997856, -0.020707628}
7572Oh	C2_7	{0.7056006, -0.019795598, -0.70833325}
7573Oh	C2_8	{7.619045E-7, 0.009661385, -0.9999533}
7574Oh	C2_9	{5.440252E-7, 0.70734024, 0.7068733}
7575
7576Oh	nS6	4	2
7577Oh	S6_1	{-0.58944535, 0.5712053, 0.57120806}
7578Oh	S6_2	{-0.58944565, -0.5712049, -0.57120824}
7579Oh	S6_3	{-0.5824926, -0.58349025, 0.5658989}
7580Oh	S6_4	{0.5764604, -0.5864354, 0.5690228}
7581
7582Oh	nS4	2	2
7583Oh	S4_1	{0.99993926, -0.007795072, 0.0077921236}
7584Oh	S4_2	{7.619045E-7, 0.009661385, -0.9999533}
7585
7586Oh	nCs	9	1
7587Oh	Cs_1	{0.0, 0.7071068, -0.7071067}
7588Oh	Cs_2	{0.0, -0.7071068, -0.7071068}
7589Oh	Cs_3	{0.007949507, 0.020366998, -0.999761}
7590Oh	Cs_4	{0.007952394, 0.999761, -0.020367}
7591Oh	Cs_5	{1.0, 0.0, 0.0}
7592Oh	Cs_6	{0.7030396, 0.014484465, 0.71100324}
7593Oh	Cs_7	{0.7030395, 0.71100324, 0.014484464}
7594Oh	Cs_8	{0.70023495, -0.008727634, -0.7138592}
7595Oh	Cs_9	{0.7030395, -0.71100324, -0.014484464}
7596
7597Oh	type	nType	nUnique
7598Oh	E	  1	  1
7599Oh	Ci	  1	  1
7600Oh	Cs	  9	  9
7601Oh	Cn	 16	 23
7602Oh	Sn	  6	 12
7603Oh		TOTAL	 46
7604
7605
7606 -- displays a table showing point group information.
7607 -- notice that not all the operators may be found because of settings of
7608    set pointGroupDistanceFactor 0.2  being too tight a restriction.
7609
7610new feature: draw POINTS <list of points or array of points>
7611new feature: draw POLYGON <list of points or array of points> -1
7612  -- these two are identical; POINTS is a bit nicer.
7613
7614load "=aflow/AgAu" 20
7615
7616select @1 & 1.1
7617polyhedra 4-16 3.7 unitcell
7618
7619x = within(4, true, "unitcell", {selected})
7620print x;
7621
7622draw width 0.2 points @{x["points"]} color red mesh nofill translucent
7623
7624
7625new feature: select POLYHEDRA
7626 -- selects central atoms of any atoms having polyhedra.
7627
7628new feature: select polyhedra(4)
7629 -- selects central atoms of any atoms having tetrahedral polyhedra.
7630
7631new feature: x.find("SMILES","*")
7632 -- creates a topology SMILES, involving just * and connections
7633 -- does not include stereochemistry
7634 -- allows comparison of connection patterns without respect to any other consideration.
7635 -- can be used to check equivalences in inorganic crystal structures.
7636
7637
7638code: SMILES code cleaned up.
7639code: most image loading is now asynchronous. (Not BMP, not from PNGJ files with "|" in filename)
7640code: introducing interfaces to allow less use of @j2sNative and more traceability of method calls in Eclipse
7641
7642
7643
7644bug fix: polyhedra broken for number of vertices > 6.
7645 -- needed smaller default distanceFactor (set to 1.5; formerly 1.85)
7646 -- this setting is for any
7647
7648code: to be released 6/11/15
7649
7650JmolVersion="14.3.14_2015.06.10c"
7651
7652bug fix: "transparent" PNG images as echos in front still hide pixels
7653
7654code : PNG images with partial transparency are not supported.
7655       They COULD be supported, but currently the rendering is
7656       in the first pass, but it could be in a later pass.
7657
7658code: g3d.ImageRenderer removed; code moved to g3d
7659
7660bug fix: GaussianDialog fails to write element symbols
7661bug fix: animation buttons go to wrong first frame for FRAME [3 2 1]
7662
7663bug fix: JSmol set echo IMAGE not working properly (Frieda Reichsman)
7664
7665new feature: {atomset}.bondcount({atomset2})
7666   -- counts bonds to a specific set of atoms
7667   -- result is an array
7668
7669new feature: [array].pivot
7670  -- creates a pivot table using strings, integers, or floats
7671  -- result is a hash for which the keys are
7672
7673$ print {*}.label("%a").pivot
7674{
7675  "Ag"  :  1561
7676  "Cd"  :  1360
7677 }
7678
7679
7680$ load $caffeine
7681$ print {_N}.bondCount({_C})
7682	3
7683	3
7684	2
7685	3
7686
7687$ print {_N}.bondCount({_C}).pivot
7688{
7689  "2"  :  1
7690  "3"  :  3
7691 }
7692$
7693
7694
7695JmolVersion="14.3.14_2015.06.08"
7696
7697new feature: [Font] button added to Console
7698
7699
7700 _ by itself, not as a function, is shorthand for getProperty("auxiliaryInfo")
7701
7702 $ print _.keys
7703
7704 boundbox
7705 group3Counts
7706 group3Lists
7707 modelLoadNote
7708 models
7709 properties
7710 someModelsHaveFractionalCoordinates
7711 someModelsHaveSymmetry
7712 someModelsHaveUnitcells
7713 symmetryRange
7714
7715
7716 _m by itself, not as a function, is shorthand for getProperty("auxiliaryInfo.models")[_currentFrame]
7717
7718 $ print format("json",_m.unitCellParams)
7719
7720  [ 0.0,0.0,0.0,0.0,0.0,0.0,0.0,-2.1660376,-2.1660376,0.0,-2.1660376,2.1660376,-4.10273,0.0,0.0,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN ]
7721
7722
7723 {atomset}._  by itself delivers a subset array of auxiliaryInfo.models  for all models in {atomset}
7724
7725 $ print {*}._..1..aflowInfo
7726
7727 (first model's aflowInfo)
7728
7729
7730 _(key) prepends "auxiliaryInfo.models", delivering a modelCount-length array of information
7731
7732 $ print _("aflowInfo[SELECT auid WHERE H__eV___VASP_ < 0]")
7733
7734
7735 {atomset}._(key) selects for model Auxiliary info related to models of the specified atoms
7736
7737 {atomset}.getProperty(key) defaults to atomInfo, but also allows key to start with "bondInfo"
7738
7739 Examples:
7740
7741 print _("aflowInfo[select sg where volume_cell > 70]")
7742
7743 print {model>10}._("aflowInfo[select sg where volume_cell > 70]")
7744
7745
7746bug fix: [array].find("xxx") should always return a sub-array; previously if there was only one hit, it returned that hit
7747bug fix: [array].find("xxx") should not return string equivalent even if it uses that in the find.
7748
7749JmolVersion="14.3.14_2015.06.07"
7750
7751new feature: _m.xxx   _m shortcut for @{getProperty("auxiliaryInfo.models[<currentModel>]")}
7752 -- much easier syntax for getting auxiliary information
7753 -- <currentModel> was not available, so this was not easily determined
7754 -- for example - a dynamic echo with model-specific info that changes when the frame is changed
7755    set echo top center
7756    echo "@{_m.modelNumber}
7757
7758new feature: _.currentModelIndex  _  shortcut for @{getProperty("auxiliaryInfo", "")}
7759 -- much easier syntax for getting auxiliary information
7760new feature:
7761
7762new feature: {*}.getProperty("atomInfo.xxx")  alternative for getProperty("atominfo.xxx", {*})
7763new feature: {*}.getProperty("xxx")  same as {*}.getProperty("atomInfo.xxx")
7764new feature: {*}.getProperty("bondInfo.xxx") alternative for getProperty("bondinfo.xxx", {*})
7765new feature: {*}._(...)  same as {*}._getProperty(...)
7766 -- note that {*}.getProperty was present but undocumented and not useful
7767
7768bug fix: Console should be checking scripts after space-bar is pressed.
7769bug fix: script checking should not trigger screen refresh
7770
7771code: refactoring of vi	ewer.JC for label/echo business
7772
7773new feature: set labeloffset range expanded to [-500,500]
7774
7775new feature: set labelOffsetAbsolute x y
7776 -- was undocumented as "set labelOffsetExact" but used in state (still available)
7777 -- sets label to specific value; same as set labelOffset, but allows 0 in x or y
7778 -- range [-500,500]
7779
7780bug fix: dragging labels not working properly
7781bug fix: axisAngle (javajs.util.A4) not resetting angle to 0 --> wrong default orientation saved to state immediately after RESET (broken in 14.1.6_dev_2014.01.16c)
7782
7783JmolVersion="14.3.14_2015.06.05"
7784
7785new feature: load "...." FILL BOUNDBOX
7786new feature: load "...." FILL UNITCELL
7787new feature: load "...." FILL [o va vb vc]
7788new feature: load "...." FILL [o vabc]
7789new feature: load "...." FILL
7790
7791 -- loads a crystal structure such that a given volume is packed
7792 -- volume can be the current boundbox or the current unitcell
7793 -- can specify origin and a,b,c vectors or origin and diagonal vector
7794 -- no parameters --> {0 0 0} {10 10 10}
7795 -- when not a crystal, just loads this model with the specified boundbox
7796 -- simplification of initial idea (6/4/2015)
7797
7798JmolVersion="14.3.14_2015.06.04"
7799
7800new feature: _argCount, _arguments for functions and scripts
7801
7802new feature: _caller for functions
7803 -- a hashtable of local VARs defined in the calling function
7804 -- note that _caller._caller is not valid. But you can define
7805
7806   var caller = _caller
7807
7808 and then that will be exposed to the next level of function calls.
7809 Or you could use use it as a parameter:
7810
7811   function xx() {
7812    ....
7813    yyy(_caller)
7814    ...
7815
7816given t.spt:
7817
7818function showme(a,b,c) {
7819  var x = "showme"
7820  print "c._arguments =" + (c ? format("json",c._arguments) : "<n/a>")
7821  print "_argCount = " + _argCount + "\nx = " + x
7822  print "_caller.x = " + _caller.x
7823  print "_caller.caller.x = " + _caller.caller.x
7824  print "_arguments = " + format("json", _arguments)
7825  print " "
7826}
7827
7828var x = "scriptlevel"
7829var caller = {}
7830showme(1)
7831
7832function show2() {
7833 var x = "show2"
7834 var caller = _caller
7835 showme(5,6,_caller,7,8,9)
7836}
7837show2(4)
7838
7839
7840$ t.spt("testing" ,"here")
7841c._arguments = <n/a>
7842_argCount = 1
7843x = showme
7844_caller.x = scriptlevel
7845_caller.caller.x =
7846_arguments = [ 1 ]
7847
7848c._arguments = [ "testing","here" ]
7849_argCount = 6
7850x = showme
7851_caller.x = show2
7852_caller.caller.x = scriptlevel
7853_arguments = [ 5,6,{ "x": "scriptlevel","caller": {  },"_arguments": [ "testing","here" ] },7,8,9 ]
7854
7855
7856JmolVersion="14.3.14_2015.06.03"
7857
7858new feature: AFLOW binary alloy file reader centers unit cells in all frames at the same point
7859
7860new feature; AFLOW binary alloy file reader can filter "list=xx" to produce a list of values start with xx.
7861
7862   load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "list=Hf_a"
7863
7864
7865new feature: AFLOW binary alloy file reader selective for a given composition:
7866
7867   load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "Ca=0.5"
7868
7869new feature: AFLOW binary alloy file reader reading -- DATA -- block into associative arrays:
7870
7871   load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed
7872   print getProperty("auxiliaryInfo.models.aflowInfo['Hf_atom (VASP)']")
7873
7874
7875bug fix: [SELECT ... WHERE ...] can fail with spaces or [ ] in key names. For example:
7876
7877    print getProperty("auxiliaryInfo.models.aflowInfo[SELECT Cb,\"Hf_atom [eV](VASP)\" WHERE Cb > 0.4 and Cb< 0.6]")
7878
7879
7880The call to the AFLOWLIB API to do this in Jmol involves forcing use of the POST method. The following link will work only in Jmol:
7881
7882  http://aflowlib.mems.duke.edu/php/apool.php?POST?job=awrapper_apool&lattice=all&alloy=AgAu
7883
7884Notice that when Jmol reads these files, it automatically catalogs the models along the lines of composition, and it translates their unit cells to be on a common center from frame to frame.
7885
7886Using a local file, requesting a listing of Hf_atom:
7887
7888  load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "list=Hf_a"
7889
7890FileManager opening 1 file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary
7891The Resolver thinks AFLOW
7892filtering with ;LIST=HF_A;
7893[AgCd] REFERENCE: S. Curtarolo, W. Setyawan, S. Wang, J. Xue, K. Yang, R. H. Taylor, L. J. Nelson, G. L. W. Hart, S. Sanvito, M. Buongiorno Nardelli, N. Mingo, and O. Levy, AFLOWLIB.ORG: a distributed materials properties repository from high-throughput ab initio calculations, Comp. Mat. Sci. 58, 227-235 (2012).
7894[AgCd] REFERENCE: S. Curtarolo, W. Setyawan, G. L. W. Hart, M. Jahnatek, R. V. Chepulskii, R. H. Taylor, S. Wang, J. Xue, K. Yang, O. Levy, M. Mehl, H. T. Stokes, D. O. Demchenko, and D. Morgan, AFLOW: an automatic framework for high-throughput materials discovery, Comp. Mat. Sci. 58, 218-226 (2012).
7895[AgCd] REFERENCE: S. Curtarolo, D. Morgan, and G. Ceder, Accuracy of ab-initio methods in predicting the crystal structures of metals: review of 80 binary alloys, Calphad 29, 163-211 (2005).
7896AgCd    0.00000000000000    11    Hf_atom [eV] (VASP)    0.0
7897AgCd    0.04347826086957    1    Hf_atom [eV] (VASP)    0.0870304
7898AgCd    0.07142857142857    1    Hf_atom [eV] (VASP)    0.15737298
7899AgCd    0.11111111111111    1    Hf_atom [eV] (VASP)    -0.011088
7900AgCd    0.12500000000000    1    Hf_atom [eV] (VASP)    -0.027350498
7901AgCd    0.16666666666667    7    Hf_atom [eV] (VASP)    -0.037070002
7902AgCd    0.17241379310345    1    Hf_atom [eV] (VASP)    0.020694898
7903AgCd    0.20000000000000    9    Hf_atom [eV] (VASP)    -0.0460172
7904AgCd    0.25000000000000    30    Hf_atom [eV] (VASP)    -0.056237496
7905AgCd    0.33333333333333    42    Hf_atom [eV] (VASP)    -0.0609502
7906AgCd    0.37500000000000    3    Hf_atom [eV] (VASP)    -0.0589556
7907AgCd    0.40000000000000    12    Hf_atom [eV] (VASP)    -0.0618938
7908AgCd    0.41379310344828    1    Hf_atom [eV] (VASP)    0.00122355
7909AgCd    0.42857142857143    2    Hf_atom [eV] (VASP)    -0.037301403
7910AgCd    0.44444444444444    2    Hf_atom [eV] (VASP)    -0.0335542
7911AgCd    0.46153846153846    1    Hf_atom [eV] (VASP)    -0.0150388
7912AgCd    0.50000000000000    46    Hf_atom [eV] (VASP)    -0.068898305
7913AgCd    0.53846153846154    1    Hf_atom [eV] (VASP)    0.0721082
7914AgCd    0.55555555555556    2    Hf_atom [eV] (VASP)    -0.033519298
7915AgCd    0.57142857142857    2    Hf_atom [eV] (VASP)    -0.0333517
7916AgCd    0.58620689655172    1    Hf_atom [eV] (VASP)    -0.0124974
7917AgCd    0.60000000000000    12    Hf_atom [eV] (VASP)    -0.047418
7918AgCd    0.61538461538462    1    Hf_atom [eV] (VASP)    -0.06818979
7919AgCd    0.62500000000000    3    Hf_atom [eV] (VASP)    -0.040674802
7920AgCd    0.66666666666667    42    Hf_atom [eV] (VASP)    -0.0603182
7921AgCd    0.75000000000000    29    Hf_atom [eV] (VASP)    -0.0485616
7922AgCd    0.80000000000000    9    Hf_atom [eV] (VASP)    -0.0095262
7923AgCd    0.82758620689655    1    Hf_atom [eV] (VASP)    0.033198204
7924AgCd    0.83333333333333    7    Hf_atom [eV] (VASP)    -0.025705501
7925AgCd    0.87500000000000    1    Hf_atom [eV] (VASP)    0.0031846298
7926AgCd    0.88888888888889    1    Hf_atom [eV] (VASP)    0.0286024
7927AgCd    0.92857142857143    1    Hf_atom [eV] (VASP)    0.114186
7928AgCd    0.95652173913043    1    Hf_atom [eV] (VASP)    0.065135606
7929AgCd    1.00000000000000    12    Hf_atom [eV] (VASP)    0.0
7930Time for openFile(file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary): 288 ms
7931reading 24509 atoms
7932297 models
7933
7934Notice that I could have used a different listing key.
7935
7936You can load just a single composition by filtering with "Ca=x"
7937
7938  load "file:/C:/jmol-dev/bobtest/aflow/binary/AgCd.aflow_binary" {2 2 2} packed filter "ca=0.5"
7939
7940[AgCd] REFERENCE: S. Curtarolo, W. Setyawan, S. Wang, J. Xue, K. Yang, R. H. Taylor,
7941L. J. Nelson, G. L. W. Hart, S. Sanvito, M. Buongiorno Nardelli, N. Mingo, and O. Levy, AFLOWLIB.ORG: a distributed materials properties repository from high-throughput ab initio calculations, Comp. Mat. Sci. 58, 227-235 (2012).
7942[AgCd] REFERENCE: S. Curtarolo, W. Setyawan, G. L. W. Hart, M. Jahnatek, R. V. Chepulskii, R. H. Taylor, S. Wang, J. Xue, K. Yang, O. Levy, M. Mehl, H. T. Stokes, D. O. Demchenko, and D. Morgan, AFLOW: an automatic framework for high-throughput materials discovery, Comp. Mat. Sci. 58, 218-226 (2012).
7943[AgCd] REFERENCE: S. Curtarolo, D. Morgan, and G. Ceder, Accuracy of ab-initio methods in predicting the crystal structures of metals: review of 80 binary alloys, Calphad 29, 163-211 (2005).
7944
794546 models
7946
7947
7948The file loader parses all the -- DATA -- information into arrays, so that can all be accessed using getProperty(). For example:
7949
7950  print getProperty("auxiliaryInfo.models.aflowInfo['space group POST']") print getProperty("auxiliaryInfo.models.aflowInfo['Hf_atom [eV] (VASP)']")
7951
7952JmolSQL selectors can be used to select out specific records.
7953
7954  print getProperty("auxiliaryInfo.models.aflowInfo[SELECT Cb,'Hf_atom [eV] (VASP)' WHERE Cb > 0.4 and Cb< 0.6]")
7955
7956
7957Jmol adds two additional fields, "fileModelNumber" and "modelNumber":
7958
7959  print getProperty("auxiliaryInfo.models.aflowInfo[SELECT modelNumber,Ca,'Hf_atom [eV] (VASP)' WHERE Cb > 0.4 and Cb< 0.6]")
7960
7961
7962JmolVersion="14.3.14_2015.06.01b"
7963
7964bug fix: unncessary dialog with LOAD ?   when using JSmol/HTML5
7965
7966JmolVersion="14.3.14_2015.06.01"
7967
7968new feature: preliminary AFLOW AaBb binary file reader
7969 - see http://www.aflowlib.org/binary_alloys.php
7970
7971new feature: NBO cfi file writer
7972 - print data({*}, "cfi")
7973
7974bug fix: draw pointgroup  also draw arrow  broken
7975bug fix: write("pdb") not returning string data and instead creating file "pdb"
7976bug fix: VASP reader for in-line atom labels
7977bug fix: measure pending dashed line does not appear
7978
7979JmolVersion="14.3.14_2015.05.25"
7980
7981release; synchronized with 14.2.14
7982
7983JmolVersion="14.3.13_2015.05.23"
7984
7985bug fix: select conformation=1  broken for non-bio CIF data
7986
7987JmolVersion="14.3.13_2015.05.19"
7988
7989bug fix: CML reader not recognizing "fragment/join/fragment" sequence
7990         from http://www.xml-cml.org/schema/schema3/schema.xsd (Stuart Chalk)
7991
7992JmolVersion="14.3.13_2015.05.14"
7993
7994new feature: set contextDepthMax
7995  -- sets the maximum depth of contexts, including {}, if{} for{} while{} function{}
7996     as well as the SCRIPT command and a number of expression-related situations
7997  -- default 100
7998  -- minimum 10
7999
8000bug fix; 05.12 breaks Jmol.evaluate and Jmol.evaluateVar and print getProperty("variableInfo", exp)
8001bug fix: using historyLevel = ... or scriptlevelMax = ...  doesn't really set these
8002bug fix: a number of settings have not been excluded from state scripts, which
8003         only should save critical information for the state, not general processing
8004  -- no longer saved in state
8005  -- no longer read using "set xxxxx" when that is in a state script
8006  -- includes: historylevel;imagestate;iskiosk;useminimizationthread;
8007  -- includes: showkeystrokes;saveproteinstructurestate;testflag1;testflag2;testflag3;testflag4
8008
8009JmolVersion="14.3.13_2015.05.12"
8010
8011bug fix: re-entering functions loses if/else state
8012bug fix: more issues with low-resolution linear-z index lines.
8013         Need to compromise for isosurfaces and nucleic cartoons and bonds
8014         -- which became very slow to render with precision Z placement.
8015
8016JmolVersion="14.3.13_2015.05.08"
8017
8018bug fix: BIND can cause fault
8019bug fix: write "?"  can cause fault when [x] box is pushed on window
8020bug fix: set picking dragMolecule, set picking dragMinimizeMolecule, set picking dragLigand   broken
8021
8022JmolVersion="14.3.13_2015.05.07"
8023
8024bug fix: x = plane(@1 @2 @3)  fails
8025
8026bug fix: isolated bio groups such as AMP, which are not part of biopolymers, can result in crashes
8027         when colored or queried about their parameters (Hiroufmi Suzuki)
8028
8029bug fix: new JmolSQL ** feature needed a tweak
8030
8031JmolVersion="14.3.13_2015.05.06"
8032
8033new feature: JmolSQL "drilling" in associative arrays for sub arrays with a given property (Rolf Huehne)
8034   -- NOTE ADDED: replaced by WHEREIN in Jmol 14.3.16
8035   -- uses "**" as the SELECT option, sort of the way ** sometimes means "subdirectories of"
8036   -- returns an associative array or "" if no match
8037   -- example:
8038
8039    x = [key_1:[type:"a"],key_2:[type:"b"],key_3:[type:"a"]]
8040	z = getProperty(x, "[SELECT ** WHERE type='a']");
8041	show z;
8042
8043		z = { "key_1":{ "type":"a" },"key_3":{ "type":"a" } }
8044
8045JmolVersion="14.3.13_2015.05.05"
8046
8047bug fix: set structureModifiedCallback does not work with "JmolScript:...."
8048
8049JmolVersion="14.3.13_2015.05.03"
8050
8051new feature: for msCIF (modulated structure files), setting modulation or using vibration ON
8052             now also indicates occupancy changes
8053bug fix: sawtooth and Legendre displacement modulations should set occupancy to 0 outside of their range.
8054
8055JmolVersion="14.3.13_2015.05.02"
8056
8057bug fix: color atoms property vxyz crashes Jmol if no vibrations
8058bug fix: with msCIF, select subsystem=1 does not select anything
8059bug fix: vibrations in trajectories not animating (14.3.6_2014.08.14)
8060
8061JmolVersion="14.3.13_2015.04.30d"
8062
8063bug fix: reading Molden file with no MOs crashes Jmol
8064
8065JmolVersion="14.3.13_2015.04.30c"
8066
8067bug fix: color $id [30 40 50] translucent 0.8  fails
8068bug fix: Jmol.jar was requiring Java 1.7
8069bug fix: POV-Ray fixed for perspective and orthographic cameras using new z-depth formula.
8070thanks: Many thanks to Laurent Proville for motivating me to look in this issue.
8071
8072JmolVersion="14.3.13_2015.04.29"
8073
8074bug fix: perspective renderer was using the wrong formula for calculating Z depth of pixels:
8075
8076 * Note added 4/2015 BH:
8077 *
8078 * Well, it turns out that the calculation of the intermediate pixel z value
8079 * in all methods involving rasterization of lines is incorrect and has been
8080 * incorrect since Jmol's inception. I noticed long ago that large triangles such as
8081 * produced in DRAW could incorrectly overlay/underlay other objects, but I could
8082 * never determine why. It turns out that the assumption that z-value is linear
8083 * across a line when perspectiveDepth is TRUE is simply incorrect.
8084 *
8085 * Basically, the function z(x) is non-linear. Treating it as simply a
8086 * linear function results in oddities where lines and planes
8087 *  -- particularly created using DRAW and large distances -- appear
8088 * to be where they are not.
8089 *
8090 * Through Jmol 13.3.13 we had the standard linear relationship:
8091 *
8092 *   z = (x - xa) / (xb - xa) * (zb - za) + za
8093 *
8094 * I worked it out, and, amazingly, it should be
8095 *
8096 *   z = (xb - xa) * za * zb / ((xb - x) * zb + (x - xa) * za)
8097 *
8098 * Note that it is still true that when x = xb, z = zb
8099 * and when x = xa, z = za, as required.
8100 *
8101 * This equation can be rearranged to
8102 *
8103 *   z = a / (b - x)
8104 *
8105 * where
8106 *
8107 *  a = (xb - xa) * za * (zb / (zb - za))
8108 *
8109 * and
8110 *
8111 *  b = (xb * zb - xa * za) / (zb - za)
8112 *
8113 * These values must be floats, not integers, to work properly, because
8114 * these are extrapolations from long distances in some cases. So there is
8115 * considerable overhead there. It will take some experimentation to figure this
8116 * out.
8117 *
8118 * The practical implications are for line, cylinder, and triangle drawing.
8119 * First-pass corrections are for axes and DRAW objects. They tend to be the
8120 * larger objects that result in the issue.
8121 *
8122 * Also affected is POV-Ray output, because right now POV-Ray is created using
8123 * perspective on and plotted as though it were orthographic, but although that
8124 * works in x and y, it does not work in z!
8125 *
8126
8127
8128JmolVersion="14.3.13_2015.04.27"
8129
8130bug fix: with set dragSelected, highlight does not recognize whole molecule
8131
8132JmolVersion="14.3.13_2015.04.25"
8133
8134code: integration of changes made for SwingJS into JSmol code
8135
8136
8137JmolVersion="14.3.13_2015.04.22"
8138
8139bug fix: loading mmCIF data in-line loses multi-character chain IDs
8140
8141bug fix: with set picking dragSelected with allowMoveAtoms FALSE and allowRotateSelected TRUE
8142         rotating the atoms with ALT-left ignores setting of allowMoveAtoms
8143
8144    // see footnotes below for ^, #, *, and $
8145    //
8146    // settings:^    set picking dragSelected             set dragSelected
8147    //
8148    // move:#                 drag                          alt-shift-drag
8149    // rotate:#*          alt-drag                                alt-drag
8150    // z-shift:#        shift-drag                                  (n/a)
8151    //
8152    // double-click:$  (starts measurement)       (sets selected if set picking SELECT)
8153    //
8154    // ^ set picking dragSelected overrules set dragSelected
8155    // # all actions involve whole molecules unless   set allowMoveAtoms TRUE
8156    // * rotate requires   set allowRotateSelected TRUE
8157    // $ set dragSelected allows setting of a new molecule with double-click when    set picking SELECT
8158    // $ set picking dragSelected allows measurements with double-click, as usual
8159
8160
8161code: introduce use of (int... ) syntax in ActionManager simplifies logic
8162
8163JmolVersion="14.3.13_2015.04.17"
8164
8165bug fix: for in/from broken in 14.3.13_2015.04.05
8166 -- entering a FOR loop with empty has pops {...} context one level too far, exiting functions
8167
8168JmolVersion="14.3.13_2015.04.12"
8169
8170code: refactoring PT.isAxxx to AU.isAxxx  (array type testing)
8171
8172JmolVersion="14.3.13_2015.04.09b"
8173
8174feature update: EBI validation site updated from wwwdev.ebi to www.ebi
8175 -- for example, LOAD *1crn/val
8176
8177JmolVersion="14.3.13_2015.04.09"
8178
8179bug fix: MO calculation hanging when G orbitals are present
8180
8181JmolVersion="14.3.13_2015.04.08"
8182
8183bug fix: echo id myecho "testing" reports "myecho" instead of "testing"
8184
8185JmolVersion="14.3.13_2015.04.07"
8186
8187bug fix: Molden reader broken for Dalton2015 version
8188
8189JmolVersion="14.3.13_2015.04.05b"
8190
8191bug fix: language switching not working from popup menu;
8192bug fix: language bundles not processed in the correct order for variants
8193
8194JmolVersion="14.3.13_2015.04.05"
8195
8196code: rewriting FOR loop code to enhance performance
8197
8198new feature: set showScript -1
8199  -- turns off history (on when commands come from the keyboard)
8200  -- stops every-second JavaScript interruptions -- Caution!
8201
8202new feature: for (var i FROM [a, b]) {...}
8203  -- same as for (var i = a; i <= b; i++) when a < b
8204  -- same as for (var i = a; i >= b; i--) when a > b
8205  -- much more efficient
8206
8207bug fix: for (var i in hashArray) {....}  broken (also in 14.2; not fixed there)
8208
8209JmolVersion="14.3.13_2015.04.02"
8210
8211bug fix: [3 4 5].min should give integer 3, not decimal 3.0 (same with .max)
8212
8213JmolVersion="14.3.13_2015.04.01b"
8214
8215bug fix: hash values created from named int variables do not clone properly
8216bug fix: hash[key1]..key2.push()  does not work properly
8217bug fix: show hash  where one of the elements is an empty hash ignores that key
8218bug fix: local var xxx with same name of ..xxx forces lower case xxx
8219
8220JmolVersion="14.3.13_2015.04.01"
8221
8222bug fix: local var xxx with same name of foo..xxx forces lower case xxx
8223
8224new feature: draw polygon [@1 @2 @3...]
8225  -- fills polygon with triangles
8226  -- order is important -- must be cw or ccw
8227  -- does not have to be convex
8228  -- indeterminate result if atoms are not coplanar
8229  -- example:
8230
8231		load $caffeine
8232		draw polygon [@5 @7 @12 @13 @1 @3]
8233
8234new feature: ".[a]" notation extended to x.. and allows mixing with .a.
8235	function a(){return 1}
8236	x = [A:[1,2,3], a:[4,5,6]]
8237	$ print x.a.[a()]
8238	 4
8239	$ print x..a..[a()]
8240	 4
8241	$ print x.a..[a()]
8242	 4
8243	$ print x..a..[a()]
8244	 4
8245	$ print x..a.[a()]
8246	 4
8247	$ y = x.a[1][2]; show y
8248	 y = [ 4,5 ]
8249
8250JmolVersion="14.3.13_2015.03.30"
8251
8252bug fix: {hash}.Key = value will be stored as "key" rather than "Key" if "key" is also a user-defined function.
8253bug fix: {hash}.key will fail if "key" is also a user-defined function.
8254bug fix: print a  where a is an associative arrays fails in JavaScript (since jmol-14.3.7_2014.08.25)
8255
8256JmolVersion="14.3.13_2015.03.27"
8257
8258new feature: "." notation extended to x.[a]
8259  disambiguifies x[a][b][c]...
8260  allows for variables and expressions in "." notation
8261  i = 2
8262  x = [1,[2 3 4 [5 6 7]],3]
8263  show x[2].[4].[i]
8264   ==> "6"
8265  x = [ 1,[ 2,3,4,[ 5,6,7 ],{ "testing":"now" } ],3 ]
8266  x[i + 1].[5].["testing"] = "again"
8267  show x
8268   ==> x = [ 1,[ 2,3,4,[ 5,6,7 ],{ "testing":"again" } ],3 ]
8269
8270
8271JmolVersion="14.3.13_2015.03.25"
8272
8273bug fix: translate SELECTED {1 1 1} @1 not working (works fine without the SELECTED keyword)
8274
8275JmolVersion="14.3.13_2015.03.23"
8276
8277bug fix: isosurface solvent will fail if max volume is smaller than cavity max even though not cavity
8278
8279JmolVersion="14.3.13_2015.03.21"
8280
8281bug fix: JmolVersion="14.3.13_2015.03.20b" broke JSmol due to error in coding URL.js
8282
8283JmolVersion="14.3.13_2015.03.20b"
8284
8285bug fix: popup menu Symmetry broken
8286bug fix: PDB reader does not save unit cell on simple load
8287
8288JmolVersion="14.3.13_2015.03.20"
8289
8290bug fix: use of {*}.xxxx = for(i;{*};....) fails
8291
8292JmolVersion="14.3.13_2015.03.19"
8293
8294bug fix: VASP chgcar surface reader fails to recognize 10-per-line file format
8295
8296JmolVersion="14.3.13_2015.03.16"
8297
8298bug fix: label <color ...> xxxx </color>  does not calculate stringwidth properly; set labeloffset 0 incorrect
8299
8300JmolVersion="14.3.13_2015.03.13"
8301released
8302
8303bug fix: fonts too small with antialiasDisplay (14.2.12)
8304bug fix: PNG generation uses iTXt instead of tEXt; problems with diacritical marks (German translation of "March" month in creation time)
8305
8306JmolVersion="14.3.13_2015.03.11"
8307
8308bug fix; pdb and mmcif readers not doing biomolecule 2 properly
8309bug fix: load filter "bychain" broken
8310bug fix: x.a.push(6) does not work
8311bug fix: (x.a).push(3) does not work
8312bug fix: (x.a)[3] = 5  does not work
8313
8314JmolVersion="14.3.13_2015.03.10"
8315
8316new feature: print  command by itself clears JavaScript and Jmol consoles
8317
8318new feature: color polyhedra red blue (edge color blue)
8319
8320bug fix: show state/xxxx does not work
8321
8322JmolVersion="14.3.13_2015.03.07"
8323synchronized with 14.2.12_2015.03.07
8324
8325bug fix: x[2] = y[2] fails
8326
8327new feature: NBO command with no arguments starts NBO panel (Java application only)
8328
8329JmolVersion="14.3.12_2015.03.05b"
8330synchronized with 14.2.13_2015.03.05
8331
8332bug fix: reading legacy mapped plane (2ptn-molecular_slice1.jvxl.txt) 	crashes Jmol
8333
8334JmolVersion="14.3.12_2015.03.05"
8335synchronized with 14.2.13_2015.03.05
8336released
8337
8338bug fix: (14.3 only) write VRML|MAYA|OBJ|POVRAY  broken
8339
8340JmolVersion="14.3.12_2015.03.01"
8341
8342bug fix: late discovery of mmCIF format does not load secondary structure
8343bug fix: reading PNGJ file saved after load with /dssr or /rna3d annotations ignores annotations
8344bug fix: {*}.find("~d~G:C")  broken (find with bioSMARTS)
8345
8346new feature: image             # the current view as an image
8347new feature: image 300 400     # adjustable size
8348new feature: image "c:/temp/t.bmp" # image from a file
8349
8350new feature: image "" close    # close the current view image
8351new feature: image "c:/temp/t.bmp" close # close image from a file
8352new feature: image CLOSE       # close all
8353
8354new feature: image ID ...
8355 -- id for IMAGE CLOSE;
8356 -- displayed in title of frame
8357 -- examples:
8358
8359     image ID "test"
8360     image ID "test" 400 500
8361     image ID "test" "bob.png"
8362     image ID "test" close
8363
8364new feature: write IMAGE
8365 -- same as IMAGE
8366
8367new feature: write IMAGE 500 500
8368 -- same as IMAGE 500 500
8369
8370new feature: (JavaScript/HTML5; see JSmol_Console.java)
8371  // page designer may indicate one of three divs for images on the page:
8372  // <appletID>_Image_app_holder for IMAGE command by itself (current app image)
8373  // <appletID>_Image_<cleaned id or filename>_holder  for IMAGE ID "xxx" ... or IMAGE "xxx"
8374  //   where cleaning is with .replace(/\W/g,"_")
8375  // <appletID>_Image_holder for all images not identified as above
8376  // if a page div is not identified, then the image will be placed in a new floating div
8377
8378
8379note: experimental SHOW IMAGE now replaced by new command IMAGE
8380
8381JmolVersion="14.3.12_2015.02.26"
8382
8383bug fix: imageFontScaling integer instead of float; does not scale appropriately on resize
8384bug fix: writing image of MO fails to write info (Jmol 12 or before)
8385
8386JmolVersion="14.3.12_2015.02.25c"
8387bug fix: legacy non-XML JVXL files with color mapping should default to RGB color scheme
8388bug fix: Jmol 14.1.2_2013.12.13 disabled some mmCIF file reading for non-wwPDB mmCIF files
8389
8390
8391JmolVersion="14.3.12_2015.02.25b"
8392
8393new feature: random(low,high,seed)
8394 -- provides a new seed for the random() function
8395 -- seed may be any 48-bit integer.
8396 -- x = random(0.0,1.0,121231223)
8397 -- low and high are simply placeholders
8398 -- does return the first number from this seed
8399 -- note that Java and JavaScript will have DIFFERENT seedings
8400 -- utilizes https://github.com/davidbau/seedrandom/blob/released/seedrandom.js
8401    (appended to java.util.Random.js)
8402
8403JmolVersion="14.3.12_2015.02.25"
8404
8405new feature: show chemical drawing
8406new feature: show drawing
8407 -- pops up window with drawing of model
8408 -- service is from NCI
8409 -- uses SMILES if structure was not loaded using $... (NCI) or :... (PubChem)
8410
8411JmolVersion="14.3.12_2015.02.24"
8412
8413// 02.28 removes "show " from these
8414
8415new feature: show IMAGE
8416 -- pops up a frame with the current image
8417 -- allows "Save As..."
8418
8419new feature: show IMAGE "filename"
8420 -- pops up a frame with the image loaded from a file
8421 -- allows "Save As..."
8422
8423new feature: show image 300 400     # adjustable size
8424new feature: show image none        # closes all image panels
8425new feature: show image CLOSE                 # "all" presumed
8426new feature: show image CLOSE ""              # the model image
8427new feature: show image CLOSE "c:/temp/t.bmp" # the image for this file
8428
8429new feature: write IMAGE
8430 -- same as SHOW IMAGE
8431
8432new feature: write IMAGE 500 500
8433 -- same as SHOW IMAGE 500 500; allows customization of width and height
8434
8435new feature: Windows BMP image reading
8436 -- reads 24-bit (full color) as well as 16-, 8-, 4-, 2-, and 1-bit color palette modes
8437 -- 14-byte and 40-byte headers only
8438 -- does not read compressed modes
8439
8440bug fix: restriction against getting SMILES string for biomolecule lifted
8441bug fix: end-on bonds may appear to disappear
8442bug fix: JavaScript -2.format("%8.3") gives 2.000 not -2.000
8443
8444bug fix: minimizer treats hydrogen bonds as covalent single bonds
8445
8446code: javajs.img.BMPDecoder
8447code: org.openscience.jmol.app.jmolpanel.ImageDialog
8448
8449JmolVersion="14.3.12_2015.02.19"
8450
8451bug fix: CML reader does not show proper atom names for crystal structures
8452bug fix: POV-Ray renderer does not show proper backbone width (since forever)
8453bug fix: POV-Ray renderer with a translucent surface shows bonds that should be hidden (since 13.1)
8454bug fix: unitcell info for PDB file biomolecule does not show "biomolecule 1"
8455
8456JmolVersion="14.3.12_2015.02.18"
8457
8458bug fix: load filter "biomolecule 1" broken in 14.3.12_2015.02.14
8459
8460JmolVersion="14.3.12_2015.02.17b"
8461
8462bug fix: writing to PNGJ data to .ZIP file should create a standard ZIP file.
8463  -- especially useful now that some zip readers will not open PNGJ files as zip files
8464     (with newer 7zip you can right-click file, then select 7zip...open archive...zip)
8465
8466  var x = load("t.png", true)
8467  write var x "t.zip"
8468
8469
8470bug fix: VASP POSCAR fix for atom symbols in header line
8471
8472JmolVersion="14.3.12_2015.02.17"
8473
8474new feature: set zshadePower 0
8475 -- allows examination of depth buffer and writing to image for external processing
8476
8477		set zShadePower 0
8478		set zSlab 100
8479		set zDepth 0
8480		set zShade true
8481		write z.jpg
8482		set zShade false
8483		write rgb.jpg
8484
8485JmolVersion="14.3.12_2015.02.16"
8486
8487new feature:  x.dot(y) for planes and points -- was present but undocumented and not working correctly
8488new feature: (undocumented) x.distance.all(y)
8489
8490new feature: load MUTATE "==LYS"
8491 -- loads using set appendNew false
8492 -- bypasses regeneration of secondary structure
8493 -- not to be documented
8494 -- issued by MUTATE command only
8495
8496bug fix: write isosurface "./xxx.jvxl" broken  -- concatenates "isosurface" with filename
8497bug fix: write ISOSURFACE  by itself broken (similarly for write POINTGROUP and others)
8498bug fix: MUTATE command adjustments for saving state
8499bug fix: MUTATE command should not force recreation of shapes
8500bug fix: MUTATE command should not change backbone atoms
8501bug fix: x = measure(a,b) where b is {none} crashes Jmol
8502bug fix: compare({atomA},{atomsB}) should return standard 4x4 matrix, not one involving a rotation
8503         about an atom center
8504  -- (not adjusted when ROTATESELECTED was fixed in 14.3.11_2014.12.17; Angel Herraez)
8505
8506code: org.jmol.modelsetbio.BioExt
8507 -- extracts struts, quaternion plots, polymerInfo, mutate into optional module
8508 -- saves 15K in corebio.js
8509
8510JmolVersion="14.3.12_2015.02.11"
8511
8512bug fix: 14.3.12_2015.02.09 breaks   MODEL "someTitle"   syntax
8513bug fix: MUTATE not properly saved in state
8514bug fix: "USER  MOD" not accepted at beginning of PDB file (MolProbity breaking PDB format here)
8515bug fix: 02.10 may break loading ligand files
8516
8517JmolVersion="14.3.12_2015.02.10"
8518
8519bug fix: color $contact1 "roygb" range -0.5 1.0; broken (in state after using CONTACT)
8520bug fix: mmCIF reader does not flag first model of a multimodel set as type PDB
8521
8522
8523JmolVersion="14.3.12_2015.02.09"
8524
8525new feature: frame align {atoms} FIXED
8526 -- shifts atom positions in each frame to match first atom in {atoms}
8527 -- unlike just frame align {atoms}, frame * will still show alignment
8528 -- objects such as DRAW and ISOSURFACE will NOT be shifted
8529 -- needs testing
8530
8531new feature: frame align [modelNo] [pt]
8532 -- FIXED is assumed
8533 -- used in state; shifts a model by a specific amount after removing any current frame alignment
8534
8535JmolVersion="14.3.12_2015.02.07"
8536released
8537
8538bug fix: set meshScale is not being applied to isosurface contours
8539bug fix: zoomTo{xxx} 0  does not center (broken in 13.1.16_dev_2013.05.23)
8540bug fix: appending a model to a model with data can fail
8541bug fix: 02.04 select conformation=1 broken
8542bug fix: 02.04 select within(chain,...) broken
8543
8544bug fix: hydrogen addition should not follow component file
8545	ILE7 HG12 != ILE7 HG13
8546	ILE7 HG13 != ILE7 HG12
8547
8548	ARG10 HB2 != ARG10 HB3
8549	ARG10 HB3 != ARG10 HB2
8550	ARG10 HG2 != ARG10 HG3
8551	ARG10 HG3 != ARG10 HG2
8552	ARG10 HD2 != ARG10 HD3
8553	ARG10 HD3 != ARG10 HD2
8554
8555	LEU18 HB3 != LEU18 HB2
8556	LEU18 HB2 != LEU18 HB3
8557
8558	PRO19 HD2 != PRO19 HD3
8559	PRO19 HD3 != PRO19 HD2
8560
8561	ILE25 HG12 != ILE25 HG13
8562	ILE25 HG13 != ILE25 HG12
8563
8564
8565
8566JmolVersion="14.3.12_2015.02.04"
8567released
8568
8569new feature: print data({*},"xyz")
8570  -- (lower case) writes only atom data lines
8571
8572new feature: print data({*},"XYZ", true)
8573  -- third parameter TRUE writes all trajectories
8574
8575bug fix: show mouse  fails in JavaScript
8576  -- we cannot test using AU.isAI() in org.jmol.viewer.binding.Binding
8577  -- because of a Java2Script compiler creates standard array [...]
8578  -- from new int[] {....} whereas it should create Clazz.newArray() and fill it
8579bug fix: writing of file formats was inconsistent between WRITE and data()  (not fixed in 14.2)
8580bug fix: Jmol writing of PDB file data did not include TER records (not fixed in 14.2)
8581bug fix: label %r should print "1" for non-PDB file atoms
8582bug fix: 01.30 mutate {xxx} ~... skips first-listed replacement group identifier
8583bug fix: 01.29 breaks loading non-trajectory file after a trajectory is loaded
8584
8585JmolVersion="14.3.12_2015.01.30b"
8586
8587bug fix: select %w %x %y %z not implemented
8588bug fix; lcaoCartoon broken in 14.3.10_2014.11.27/14.2.12_2015.01.22
8589bug fix: isosurface id surf1 solvent; select within(2.0, $surf1) broken
8590
8591JmolVersion="14.3.12_2015.01.30"
8592
8593new feature: MUTATE command
8594 -- operates only on last model present if multiple models are loaded
8595 -- replaces one or more amino acids group with others
8596 -- can read from RCSB or from user-specified file
8597 -- examples:
8598      mutate 33 lys          // replace resno=33 with lysine
8599      mutate @3 arg          // replaces group of atom 3 with arginine
8600      mutate @r gly          // replaces groups in variable r with glycine
8601      mutate 22 "myfile.cif" // user-defined replacement
8602      mutate {1-3} ala	     // replace first three residues with alanine
8603      mutate {1-5} GLVAG     // (sequence codes) replace residues 1-5 with gly-leu-val-ala-gly
8604      mutate {1-3} ~LYS      // (force 1-character sequence codes) replace 1-3 with leu-tyr-ser
8605      mutate {1-3} A?L       // replace 1 with ala, 3 with  leu; skip 2
8606      mutate {within(sequence, "GAT")} GYT // replace locations of GAT with GYT (needs testing)
8607      mutate 35 @fname       // replaces resno=33 with file data (use "==ALA" or "~A" for RCSB)
8608      mutate {r} his         // same as above; r must be an atom selection
8609
8610
8611bug fix: code fixes relating to calculate structure in 01.29
8612
8613JmolVersion="14.3.12_2015.01.29"
8614
8615bug fix: 01.28 version does not write correct PDB CONECT records
8616bug fix: 01.22 version may not correctly clear rasmol hydrogen bonds in trajectories
8617code: simplification of BioModel; extraction of legacy Chime messaging into ChimeMessenger class
8618code: extraction of org.jmol.modelset.Trajectory
8619
8620JmolVersion="14.3.12_2015.01.28"
8621
8622bug fix: write "t.pdb" now correctly sequences groups and atoms, even after mutation
8623
8624new feature: resno is user settable
8625
8626JmolVersion="14.3.12_2015.01.27"
8627
8628bug fix: select thisModel does not select all atoms in visible frame set
8629
8630new feature: @@3 for "atomno=3 and thisModel"
8631 -- provides a function distinct from @3 when there are multiple models
8632 -- includes all atoms in current frame set
8633 -- example:
8634
8635  load "cyclohexane_movie.xyz"
8636  select @10
8637     35 atoms selected
8638  select @@10
8639     1 atom selected
8640  frame [1 2 4 6]
8641  select @@10
8642     4 atoms selected
8643  @@10.label = "atom 10"
8644
8645
8646new feature: frame [1 3 5 6]
8647 -- sets limited number of frames for animation and frame *
8648 -- same as animation frame [1 3 5 6]; frame *
8649
8650new feature: CGO SCREEN option
8651 -- CGO [SCREEN z ...]
8652 -- reads CGO 2D VERTEX records as screen coordinates, installing them at a depth of z
8653  - where z > 0 indicates a percent (0.01 far back; 100 front)
8654  -       z < 0 indicates an absolute screen z value as -z.
8655  - uses 2D VERTEX and other CGO point elements, not 3D
8656 -- example: a static border 20% from the back of the model
8657
8658cgo test2 [ SCREEN 20
8659 BEGIN LINE_LOOP
8660 VERTEX 10 10
8661 VERTEX 90 10
8662 VERTEX 90 90
8663 VERTEX 10 90
8664 END
8665]
8666
8667new feature: CGO UVMAP option
8668 -- CGO [UVMAP @origin @x @y x0 y0 x1 y1 scaleX scaleY ...]
8669 -- 2D VERTEX records are scaled and mapped to a plane defined by @origin @x @y
8670 -- example: a parallelogram based on atoms 1, 6, and 11
8671
8672cgo test1a [ UVMAP @1 @6 @11 0 0 80 80 1 1
8673 BEGIN LINE_LOOP
8674 VERTEX 0 0
8675 VERTEX 80 0
8676 VERTEX 80 80
8677 VERTEX 0 80
8678 END
8679]
8680
8681new feature: CGO PostScript option
8682 -- CGO [ PS @origin @x @y ] data "PS" [primitive encapsulated postscript data] end "PS"
8683 -- maps 2D EPS data onto a plane defined by an origin point, an x-axis point, and a y-axis point.
8684 -- somewhat similar to UV mapping of textures in other programs
8685 -- allows 2D data to be superimposed on a model.
8686 -- a crude implementation still in development; doesn't properly implement stroke;
8687 -- just for drawing lines; does not implement PS fill, gsave, grestore
8688 -- just moveto, lineto, newpath, closepath, setlinewidth, scale
8689 -- uses %%BoundingBox x0 y0 x1 y1 prolog record
8690    to map [x0 y0] to @origin, [x1 0] to @x, and [0 y1] to @y
8691 -- used for NBO contour mapping
8692
8693CGO[ PS @{point(-5,-5,0)} @{point(5,-5,0)} @{point(-5,5,0)] data "PS"
8694%!PS-Adobe-2.0 EPSF-1.2
8695%%Creator: Bob Hanson (from NBO)
8696%%Title: nbo orbital slice
8697%%CreationDate: 1/26/2015 5:36 AM
8698%%DocumentFonts: Helvetica
8699%%BoundingBox: 211 300 428 518
8700%% note: above numbers are from 0.24*881 0.24*1781 0.24*1256 0.24*2156
8701%%EndComments
8702%%EndProlog
8703 0.2400 0.2400 scale
8704 newpath
8705  3 setlinewidth
8706 newpath
8707  881 1256 moveto
8708 1781 1256 lineto
8709 1781 2156 lineto
8710  881 2156 lineto
8711 closepath
8712 stroke
8713 1241 1717 moveto
8714 1250 1713 lineto
8715...
8716 stroke
8717%%Trailer
8718showpage
8719end "PS"
8720
8721bug fix: CGO LINE_LOOP not closing
8722bug fix: configuration 1  broken
8723bug fix: display configuration=1  broken (in Jmol 12.0, 2011)
8724
8725JmolVersion="14.3.12_2015.01.25"
8726
8727bug fix: image echos broken
8728
8729JmolVersion="14.3.12_2015.01.24"
8730
8731new feature: load NBO CH3CH2CH3
8732 -- retrieves the stucture of propane (in this case) from a local NBO server.
8733 -- including inorganics. For example:
8734
8735	 load nbo "Cr 3::acac"
8736	 load nbo "Cr 2:::Bz"
8737
8738code: new interface for "services" that can provide valuable information to Jmol
8739      over ports or by running executable processes.
8740 -- currently just NBO
8741
8742
8743bug fix: MOPAC reader loses two atoms in IRC calculation for MOPAC 2012
8744bug fix: _slabPlane and _depthPlane not set immediately when slab and depth are set
8745
8746JmolVersion="14.3.12_2015.01.22"
8747released simultaneously with 14.2.12
8748
8749bug fix: color rockets amino fails
8750bug fix: "color TRANSLUCENT -1" (screened translucency) restored;
8751  -- had been removed in 14.3.12_2015.01.20 because broken in jmol-11.7.27_02-27-09
8752bug fix: atom screened translucency not saved in state
8753bug fix: isosurfaces with screened translucency not restored from JVXL with that
8754bug fix: screened translucent bonds broken
8755
8756code: adding org.jmol.g3d.PixelatorScreened, PixelatorT
8757
8758JmolVersion="14.3.12_2015.01.21"
8759
8760new feature: load =cod/1000041  loads Crystallographic Open Database CIF files
8761
8762bug fix: load =xxx/..... (special database) fails
8763bug fix: (JavaScript) using "Helvetica Neue, Sans-serif" instead of just "Sans-serif" (org.jmol.awtjs2d.JSFont.java)
8764 - gets around Safari bug in Safari v. 7
8765
8766
8767JmolVersion="14.3.11_2015.01.20"
8768released simultaneously with 14.2.11
8769
8770bug fix: Languages lost in Jmol Application
8771
8772new feature: select :"X"  where quotes are used now forces case sensitivity
8773
8774bug fix: DIPOLE command broken in Jmol 14.3.10_2014.11.27 (OK in 14.2)
8775
8776bug fix: for old PDB files with no chain ID, "select :" fails
8777
8778JmolVersion="14.3.11_2015.01.18"
8779
8780new feature: Jmol Application Tools|NBO... (Experimental Only; requires NBOServer)
8781
8782bug fix: Typing select his and :A  will set chain selection to be case sensitive due to a bug that
8783         processes   "his an" as "{his:}an".
8784
8785
8786JmolVersion="14.3.11_2015.01.15"
8787
8788bug fix: modulation x.x  and modulation n  not described correctly in documentation
8789
8790new feature: modulation T x.x
8791new feature: modulation Q n
8792new feature: modulation T {t1 t2 t3}
8793new feature: modulation Q {q1 q2 q3}
8794
8795
8796JmolVersion="14.3.11_2015.01.12"
8797
8798bug fix: color PMESH reader not working properly
8799
8800JmolVersion="14.3.11_2015.01.11"
8801
8802bug fix: JSpecView -- version/date not appearing in menu
8803bug fix: GIF images bleed into background.
8804bug fix: GIF writing of xxx.gif (three character name) broken.
8805bug fix: proper isosurface capping. Test code:
8806
8807		function test(i) {
8808			set echo top left
8809			echo @i
8810			isosurface slab none
8811			isosurface cap plane {1 1 1 1} @i
8812			refresh
8813		}
8814
8815		load 1crn.pdb
8816		rotate y 60
8817		rotate y -120
8818		isosurface s1 vdw;
8819		display none
8820		center $s1
8821		for (var i = -2	; i < 58; i++){test(i)}
8822
8823
8824JmolVersion="14.3.11_2014.12.21"
8825
8826code: major refactoring into BioModel of PDB-specific code in ModelSet
8827
8828new feature: CGO (undocumented command from Jmol 13.1.16; never tested)
8829
8830cgo test1a [
8831 BEGIN LINES
8832 VERTEX 0 0 0 VERTEX 2 2 2
8833 VERTEX 2 2 2 VERTEX 3 2 0
8834 END
8835]
8836
8837cgo test1b [
8838 BEGIN LINE_LOOP
8839 VERTEX 4 0 0
8840 VERTEX 6 2 2
8841 VERTEX 5 2 0
8842 END
8843]
8844
8845cgo test1c [
8846 BEGIN LINE_STRIP
8847 VERTEX 4 0 0
8848 VERTEX 6 2 2
8849 VERTEX 5 2 0
8850 END
8851]
8852
8853cgo test2 [
8854 BEGIN POINTS
8855 COLOR 255 0 0
8856 LINE 0 0  3 0 0 3 2 2
8857 COLOR 0 255 0
8858 LINE 0 0  3 2 2 4 2 0
8859 END
8860]
8861
8862cgo test2b [
8863 BEGIN LINE_LOOP
8864 DIAMETER 0.3
8865 VERTEX 4 0 0
8866 VERTEX 6 2 2
8867 VERTEX 5 2 0
8868 END
8869]
8870
8871
8872new feature: NBO command
8873  -- same as MO command, but allows TYPE keyword
8874  -- to be developed with, perhaps, different defaults, 2D slices, etc.
8875
8876new feature: NBO TYPE <nboType>
8877  -- options AO, PNAO, NAO, PNHO, NHO, PNBO, NBO, PNLMO, NLMO, MO
8878  -- results in immediate loading of .32-.41 file if present
8879  -- generally after a .47 archive file has been loaded
8880
8881new feature: ... PLANE {pt1} {pt2} frac12
8882   -- wherever a PLANE parameter is required
8883   -- perpendicular plane frac12 of the distance from pt1 to pt2
8884
8885new feature: x = plane(pt1, pt2, frac12)
8886   -- perpendicular plane frac12 of the distance from pt1 to pt2
8887
8888JmolVersion="14.3.11_2014.12.19"
8889
8890bug fix: JavaScript connect broken
8891         due to j2s failure to create bsAromatic when BondCollection created (14.3.7)
8892         due to j2s bug in instantiating global definitions in super classes using Clazz_prepareFields
8893
8894bug fix: label, echo, and measurement text should not display when deeper
8895         than zSlab with zShade is TRUE
8896bug fix: mmCIF reader load filter biomolecule 1
8897         broken for viruses with symmetry ranges listed as "1-60" with a hyphen
8898bug fix: mmCIF reader coarse-grain load filter bysymop broken
8899bug fix: mmCIF reader coarse-grain load filter bychain broken
8900
8901JmolVersion="14.3.11_2014.12.17"
8902
8903bug fix: rotate selected <4x4 matrix> should not rotate about center of atoms
8904bug fix: use of a subset command will change value of a variable bitset if "select x" is used
8905 -- example:
8906   x = {*}
8907   subset {atomno < 10}
8908   print x // just the first 9
8909   select x // just the first 9
8910   subset all
8911   print x // but now x itself is truncated; this is not supposed to be the case
8912
8913
8914new feature: SYNC nnnn x
8915  -- x is a math expression, possibly just a string, but also possibly an associative array.
8916
8917new feature: SYNC nnnn {type:"command",  "command" : command, "var": vname, "data":vdata}
8918  -- script command request, with optional definition of a Jmol user variable prior to execution)
8919  -- for example:
8920	  x = {"type":"command","command":"background green; print y", "var": "y", "data":['an array',2]}
8921	  sync 3000 x
8922  -- allows simple transfer of data via JSON strings between applications
8923
8924
8925JmolVersion="14.3.11_2014.12.15"
8926
8927FEATURE CHANGE: JmolViewer interface streamlined
8928  -- many esoteric methods removed
8929  -- can be reinstated upon request
8930  -- many are available via public fields
8931  -- for economy of performance and .js file size
8932
8933FEATURE CHANGE: "screened translucency TRANSLUCENT -1"  removed (broken in jmol-11.7.27_02-27-09)
8934
8935bug fix: mol2 reader fails to read "THR1" as a PDB group
8936
8937bug fix: PyMOL reader should not reset user variables
8938
8939bug fix: show LIGHTING does not report a full list of settings
8940
8941new feature: reset LIGHTING
8942  public void resetLighting() {
8943    vwr.setIntProperty("ambientPercent",  45);
8944    vwr.setIntProperty("celShadingPower", 10);
8945    vwr.setIntProperty("diffusePercent",  84);
8946    vwr.setIntProperty("phongExponent",   64);
8947    vwr.setIntProperty("specularExponent", 6); // log2 of phongExponent
8948    vwr.setIntProperty("specularPercent", 22);
8949    vwr.setIntProperty("specularPower",   40);
8950    vwr.setIntProperty("zDepth",           0);
8951    vwr.setIntProperty("zShadePower",      3);
8952    vwr.setIntProperty("zSlab",           50);
8953
8954    vwr.setBooleanProperty("specular",    true);
8955    vwr.setBooleanProperty("celShading", false);
8956    vwr.setBooleanProperty("zshade",     false);
8957  }
8958
8959code: moved PDB-related methods and constants in JC.java to org.jmol.modelsetbio.Resolver
8960  -- allows 50K savings in core.z.js
8961
8962code: reduced method sets for Viewer, ModelSet, and several other classes
8963 -- a bit contrary to standard practice, I know
8964 -- direct access of class fields instead of using methods with just one or two references
8965 -- direct access of class fields instead of using getXXX() and setXXX()
8966    because these are NOT optimized in JavaScript.
8967
8968JmolVersion="14.3.11_2014.12.09"
8969
8970new feature: Castep reading of .ts files
8971
8972bug fix: array.add("\t",array) broken 2014.12.04
8973bug fix: array.split("",true) doesn't handle CSV with new lines in quotes
8974
8975JmolVersion="14.3.11_2014.12.06"
8976
8977new feature: MODEL 1 PROPERTY "xxx" x
8978  -- adds property to model's auxilliaryInfo
8979  -- x may be any valid math expression, for example
8980     model 1 property  "test" {1.1}.temperature.mul(0.1)
8981  -- if x is an array, then these become atom data accessible via %{...}
8982  -- for example:
8983	  x = "1\n2\n3\n".lines
8984	  model 1 property "mydata" x
8985  	  {model=1}.property_n = {*}.label("%{mydata}") // converts to numbers
8986
8987  	  data "myd @x"	// similar, but not model-based
8988	  label %{myd}
8989
8990
8991bug fix: format() function broken
8992bug fix: SHOW DATA  should be cleared when a file is loaded
8993
8994JmolVersion="14.3.11_2014.12.04"
8995
8996new feature: "....".split("",true) // CSV split of string to array of arrays
8997new feature: [...].split("",true) // CSV split of array to array of arrays
8998new feature: "...".split("\t",true) // tab split of string to array of arrays
8999new feature: [...].split("\t",true) // tab split of array to array of arrays
9000new feature: [...][...].join("",true) // CSV join to array of lines
9001new feature: [...][...].join("\t",true) // tab join to array of lines
9002  -- example:
9003   x = load("test.csv").split("",true) //from CSV
9004   print x.join("",true) // back to CSV
9005   print x.join("\t",true) // to tab-separated
9006new feature: [...][...].col(n)
9007  -- extracts nth column from an array of arrays
9008  -- example:
9009   x = load("test.csv").split("",true).col(3) //3rd column from CSV
9010
9011
9012JmolVersion="14.3.11_2014.12.02"
9013
9014bug fix: for (x in yUpperCase) fails
9015bug fix: draw SYMOP fails for incommensurate space groups
9016bug fix: incommensurate magnetic CIF reading does not apply magnetic spin operation to spin modulations
9017bug fix: CIF reader can cycle infinitely if loop_ keywords are not followed by any data
9018
9019new feature: Gaussian Input File creation defaults to "opt pop=full gfprint" to generate orbital information by default.
9020FEATURE CHANGE: Gaussian Input File creation moved to Tools menu rather than file...export
9021
9022JmolVersion="14.3.11_2014.11.28"
9023
9024new feature: readers for ESS input types: CFILE, VFILE, MOPAC, NWChem, Gaussian, GAMESS, Orca, PQS
9025  -- CFILE and VFILE require CFI:: and VFI:: (or C:: and V::)
9026  -- MOPAC requires MND::
9027  -- any of these could also use ZMATRIX:: or INPUT::
9028
9029
9030bug fix: dynamicMeasurements deprecated in 14.1.1 but
9031         not left in as a valid token to allow use
9032
9033JmolVersion="14.3.11_2014.11.27"
9034
9035new feature: GAMESS input reader
9036new feature: NBO .37 archive file coordinate reader (not MOs)
9037new feature: ZMatrixReader also serves as simple input file reader
9038             for Q-Chem, Gaussian, Jaguar, MolPro, and ADF, as produced by NBO6Pro
9039
9040
9041JmolVersion="14.3.10_2014.11.27"
9042
9043released as 14.3.10
9044
9045(note - these were not fixed in 14.2)
9046
9047bug fix: SPIN BRANCH {atomno=2} {atomno=1}   does not work
9048
9049code: scriptExt.IsoExt splits CmdExt into two parts
9050 -- (note this will require changes to build_03_tojs_stable)
9051code: simplification of SurfaceGenerator
9052
9053bug fix: JVXL files do not record selected contour
9054bug fix: isosurface CONTOUR -n broken (in Jmol 12)
9055bug fix: isosurface "t.jvxl" loading of contoured planes broken
9056bug fix: isosurface plane xy map property atomno broken every other time used
9057
9058new feature: isosurface contour 0 "t.jvxl" will override contour selected in JVXL file
9059
9060new feature: isosurface CONTOUR n i
9061  -- n contours; i-th only
9062
9063FEATURE CHANGE: For the ISOSURFACE command, there is an undocumented
9064     syntax that the CUTOFF keyword prior to a number is optional,
9065     as in "ISOSURFACE 2.0". This was never documented and was never
9066     shown in any examples. This change is to require the CUTOFF keyword
9067
9068new feature: isosurface LATTICE {i j k} FIXED
9069  -- creates an isosurface from periodic volumetric data
9070     with the specified number of unit cells
9071  -- "fixed" in the sense that the operation is at load time
9072     not at rendering, allowing slabbing and use of WITHIN
9073
9074new feature: isosurface UNITCELL x.x ....
9075  -- for periodic lattices only
9076  -- adjusts grid by x.x in fractional coordinates
9077  -- caution is advised, as the grid is expanded in this process,
9078     leading to more grid points and more memory required
9079  -- negative x.x results in a selection of a subset of the data
9080     centered on the center of the unit cell
9081
9082JmolVersion="14.3.10_2014.11.26"
9083
9084bug fix: hover OFF disables hover callback, but should not
9085bug fix: reading of JVXL file saved with noFill still does fill
9086bug fix: CASTEP DENSITY surface file reader does not do downsampling
9087
9088new feature: VASP CHGCAR default cutoff set to 0.5
9089new feature: set edsUrlFormatDiff
9090  -- specifies difference map location
9091
9092new feature: isosurface "==1blu"
9093  -- difference map fo-fc
9094  -- defaults to sigma=3
9095  -- automatically implements SIGN option
9096
9097new feature: isosurface RMSD (same as SIGMA)
9098
9099JmolVersion="14.3.9_2014.11.23"
9100
9101released as Jmol 14.3.9 and Jmol 14.2.9
9102
9103bug fix: isosurface slab plane -xy  not recognizing "-"
9104bug fix: PNGJ writing broken
9105bug fix: VASP CHGCAR reader not recognized for primitive cell
9106bug fix: Euler ZYZ and ZXZ for quaternion({0 0 1},theta) where theta < 0 in error
9107
9108
9109JmolVersion="14.3.9_2014.11.17"
9110
9111released as Jmol 14.3.9 and Jmol 14.2.9
9112
9113new feature: VASP CHGCAR reader
9114new feature: VASP CHGCAR isosurface reader
9115
9116new feature: load HISTORY "saved.his" (Gabor Oszlanyi)
9117 -- loads command history with script in saved.his
9118
9119new feature: CTRL-PAGE_UP CTRL-PAGE_DOWN in console (Gabor Oszlanyi)
9120 -- searches for next instance of current start of command up or down command history
9121
9122new feature: capture END
9123 -- closes capture without annoying popup message
9124 -- also for capture CANCEL and just CAPTURE
9125
9126new feature: transparent GIF using WRITE GIFT "xxx.gif"
9127new feature: GIF images use dithering to approximate full palette.
9128new feature: CAPTURE "file.gif" 10 transparent
9129 - or CAPTURE "file.gift" -- "gift" automatically changed to "gif"
9130
9131new feature: CAPTURE "filename0000.png"
9132  -- captures set of PNG files
9133  -- 0000 is not required
9134
9135new feature: CAPTURE "filename0000.gif"
9136  -- captures set of GIF files
9137  -- 0000 IS required in order to distinguish this from animated GIF
9138
9139bug fix: set labelOffset {1 2 3} or set labelOffset [1 2 3 4 5 6 7]
9140         fails if selection does not contain a label at each selected atom
9141
9142bug fix: Molden reader fails to read orbitals if [GEOCONV] is present
9143
9144bug fix: JmolVersion 14.3.3_2014.07.27 broke ligand bond reading when fetching ligands.
9145  -- mmCIF reader was not being selected by the Resolver
9146  -- Requires an increment of version number to 14.3.9
9147
9148bug fix: slightly better GIF processing
9149
9150bug fix: GIF writer not properly handling large numbers of colors
9151  -- use of CIE L*a*b for color quantification
9152  -- nearly identical to GIMP
9153  -- uses MEAN_cut (not MEDIAN_cut)
9154  -- uses Floyd-Steinberg dithering
9155  -- will not discolor background (as GIMP will do)
9156
9157bug fix: GIF and PPM writing broken in JavaScript
9158  -- initial putString improperly forces string buffer mode in OC (Output Channel)
9159
9160bug fix: WRITE command should remove "t" or "j" in WRITE xxx.PNGJ, WRITE xxx.PNGT, WRITE xxx.GIFT
9161  -- specifically when no PNGJ, GIFT, or PNGT designation is made.
9162
9163bug fix: PDB reader limited to 20 connections per atom
9164
9165bug fix: up-arrow in console may not return command if contains unicode
9166bug fix: antialiasing can subtly change background color
9167
9168bug fix: working on GIF writer -- some success with 256 colors using median-cut with RGB
9169
9170bug fix: GIFT (transparent-background GIF) dithering transparent background
9171
9172bug fix: Legendre for U not implemented in msCIF reader - preliminary
9173bug fix: Legendre for D,U in Jana2006 reader not implemented - preliminary
9174
9175code: code clean-up in GData, Graphics3D, and Export3D
9176code: PDB reader CONECT efficiency
9177
9178released as Jmol 14.3.9 and Jmol 14.2.9
9179
9180bug fix: set labelOffset {1 2 3} or set labelOffset [1 2 3 4 5 6 7]
9181         fails if selection does not contain a label at each selected atom
9182
9183
9184JmolVersion="14.3.9_2014.11.15"
9185
9186new feature: VASP CHGCAR reader
9187new feature: VASP CHGCAR isosurface reader
9188
9189JmolVersion="14.3.9_2014.11.12"
9190
9191bug fix: Molden reader fails to read orbitals if [GEOCONV] is present
9192
9193JmolVersion="14.3.9_2014.11.11"
9194
9195bug fix: JmolVersion 14.3.3_2014.07.27 broke ligand bond reading when fetching ligands.
9196  -- mmCIF reader was not being selected by the Resolver
9197  -- Requires an increment of version number to 14.3.9
9198
9199JmolVersion="14.3.8_2014.11.10"
9200
9201bug fix: slightly better GIF processing
9202
9203JmolVersion="14.3.8_2014.11.09"
9204
9205new feature: CAPTURE "filename0000.png"
9206  -- captures set of PNG files
9207  -- 0000 is not required
9208
9209new feature: CAPTURE "filename0000.gif"
9210  -- captures set of GIF files
9211  -- 0000 IS required in order to distinguish this from animated GIF
9212
9213bug fix: GIF writer not properly handling large numbers of colors
9214  -- use of CIE L*a*b for color quantification
9215  -- nearly identical to GIMP
9216  -- uses MEAN_cut (not MEDIAN_cut)
9217  -- uses Floyd-Steinberg dithering
9218  -- will not discolor background (as GIMP will do)
9219
9220bug fix: GIF and PPM writing broken in JavaScript
9221  -- initial putString improperly forces string buffer mode in OC (Output Channel)
9222
9223bug fix: WRITE command should remove "t" or "j" in WRITE xxx.PNGJ, WRITE xxx.PNGT, WRITE xxx.GIFT
9224  -- specifically when no PNGJ, GIFT, or PNGT designation is made.
9225
9226bug fix: PDB reader limited to 20 connections per atom
9227
9228code: code clean-up in GData, Graphics3D, and Export3D
9229code: PDB reader CONECT efficiency
9230
9231
9232JmolVersion="14.3.8_2014.10.27"
9233
9234bug fix: up-arrow in console may not return command if contains unicode
9235bug fix: antialiasing can subtly change background color
9236
9237bug fix: working on GIF writer -- some success with 256 colors using median-cut with RGB
9238
9239new feature: load HISTORY "saved.his" (Gabor Oszlanyi)
9240 -- loads command history with script in saved.his
9241
9242new feature: CTRL-PAGE_UP CTRL-PAGE_DOWN in console (Gabor Oszlanyi)
9243 -- searches for next instance of current start of command up or down command history
9244
9245JmolVersion="14.3.8_2014.10.15b"
9246
9247bug fix: GIFT (transparent-background GIF) dithering transparent background
9248
9249JmolVersion="14.3.8_2014.10.15"
9250
9251new feature: capture END
9252 -- closes capture without annoying popup message
9253 -- also for capture CANCEL and just CAPTURE
9254
9255JmolVersion="14.3.8_2014.10.14"
9256
9257new feature: transparent GIF using WRITE GIFT "xxx.gif"
9258new feature: GIF images use dithering to approximate full palette.
9259new feature: CAPTURE "file.gif" 10 transparent
9260 - or CAPTURE "file.gift" -- "gift" automatically changed to "gif"
9261
9262bug fix: Legendre for U not implemented in msCIF reader - preliminary
9263bug fix: Legendre for D,U in Jana2006 reader not implemented - preliminary
9264
9265JmolVersion="14.3.7_2014.10.13"
9266
9267new feature: modulation occupancy settable using {*}.occupancy = {*}.modulation('O',t)
9268 -- for example:
9269
9270		load "t3.cif" {20 1 1} packed 0.5
9271		connect {_Mn} {_Mn} delete
9272		polyhedra bonds {_Mn} collapsed;
9273		set echo top right;
9274		capture "occ.gif" 120
9275		for (var i = 0; i <= 100; i++) {
9276		 var f = i/100.
9277		 modulation @f
9278		 {*}.occupancy = {*}.modulation("O",f);
9279		 display  _Mn and occupancy > 0;
9280		 var t = "t=" + f
9281		 echo @t
9282		 refresh;
9283		}
9284		capture
9285
9286bug fix: msCIF reader superspace group operators with mixing of x1,x2,x3 into x4,x5
9287         was still not quite correct.
9288
9289bug fix: data "occupancy set" spelled wrong in state
9290
9291JmolVersion="14.3.7_2014.10.12"
9292
9293bug fix: JSmol/HTML5 SCRIPT command broken (forces async, which is not working yet)
9294 -- since 14.3.7_2014.9.17
9295
9296feature change: DSSR reference to "lonePairs" changed to "isolatedPairs"
9297 -- select within(dssr,"isolatedPairs") preferred
9298 -- select within(dssr,"lonePairs") still OK
9299
9300bug fix: msCIF reader incorrectly handling multiple Legendre orders
9301bug fix: msCIF reader incorrectly handling superspace operators with x1,x2,x3 mixed into x4,x5
9302bug fix: CONTACT FULL does not report proper volume (Young ho Jhon)
9303bug fix: (Java only) write FILE fails for string (copy/pasted) data
9304
9305JmolVersion="14.3.7_2014.10.10"
9306
9307bug fix: set waitForMoveTo not controlling script for ROTATE x.x y.y (finite spin)
9308bug fix: capture command not waiting properly for full spin
9309bug fix: msCIF reader: wave vectors of the form {a -a 0} were being ignored.
9310         (14.3.6_2014.08.16 and 14.2.6)
9311
9312JmolVersion="14.3.7_2014.10.05"
9313
9314bug fix: isosurface molecular reader misassigning voxel source atom
9315bug fix: JSpecView integration not displaying properly
9316bug fix: JSmol does not allow Info._coverImage
9317
9318JmolVersion="14.3.7_2014.09.30"
9319
9320bug fix: CGD reader for fractional coordinates; alternative EDGE syntax
9321
9322JmolVersion="14.3.7_2014.09.29"
9323
9324bug fix: JavaScript j2sjmol.js -- should not create object .isArray() method as it conflicts with
9325   JavaScript Array.isArray
9326
9327bug fix: CGD reader space groups set to Bilbao (origin 2) setting.
9328
9329
9330JmolVersion="14.3.7_2014.09.28"
9331
9332bug fix: Molden reader overlaying MO info and unit cell info
9333
9334new feature: Molden reader adds [CellAxes] block
9335 -- three vectors -- a, b, c
9336 -- Angstroms assumed; no other option, actually
9337 -- Use 0 0 0 for c to indicate slab
9338 -- example
9339  [CellAxes] (Angs)
9340	2.963407 0.0 0.0
9341	0.0 6.513587 0.0
9342	0.0 0.0 0.0
9343
9344
9345JmolVersion="14.3.7_2014.09.27"
9346
9347bug fix: interpretation of space group I41 by name only, without operations,
9348 drops second (centered) C2 axis.
9349
9350
9351JmolVersion="14.3.7_2014.09.26"
9352
9353new feature: TOPOS Crystal Graph Data (CGD) file reader
9354
9355JmolVersion="14.3.7_2014.09.24"
9356
9357bug fix: exporter generally not allowing creating meshes with PovRAY
9358
9359JmolVersion="14.3.7_2014.09.23"
9360
9361bug fix: Clazz.floatToLong not aliased as Clazz_floatToLong in corebottom2.js/coretop2.js
9362 -- causes CAPTURE command to fail for JSmol/HTML5
9363
9364new feature: {xxx}.find("MF","CH2O")
9365 -- returns subset of {xxx}
9366 -- first atoms that match formula; not necessarily sequential
9367
9368new feature: {*}.find("MF", TRUE)
9369 -- calculates EMPIRICAL formula
9370 -- example:
9371	$ load $glucose
9372	$ print {*}.find("MF")
9373	H 12 C 6 O 6
9374	$ print {*}.find("MF",true)
9375	H 2 C 1 O 1
9376
9377new feature: {cell=555}.find("CellFormula");
9378 -- calculates cell formula for specified unit cell
9379 -- weights interior 1, face 1/2, edge 1/4, vertex 1/8
9380 -- selection should be a single packed unit cell
9381 -- fails with "?" if end result is not integral
9382 -- example:
9383	$ load quartz.cif packed
9384	$ print {*}.find("cellFormula");
9385	O 6 Si 3
9386
9387new feature: {cell=555}.find("CellFormula", TRUE);
9388 -- calculates empirical cell formula for specified unit cell
9389 -- weights interior 1, face 1/2, edge 1/4, vertex 1/8
9390 -- selection should be a single packed unit cell
9391 -- fails with "?" if end result is not integral
9392 -- example:
9393	$ load quartz.cif packed
9394	$ print {*}.find("cellFormula", true);
9395	O 2 Si 1
9396
9397new feature: label %O
9398 -- lists all symmetry operators leading to this position (as a string)
9399 -- if more than one operator (contains a comma), this is a special position
9400 -- same as %[symmetry] but just a simple list of operators
9401
9402JmolVersion="14.3.7_2014.09.22"
9403
9404FEATURE CHANGE: atoms without vibration will no longer report out as vxyz = {0 0 0} or vx = 0
9405 -- print {atomno=3}.vxyz and {*}.vxyz.all will report -1
9406	instead of {vx vy vz} when atom does not have a vibration
9407 -- print {atomno=3}.vx  will report "NaN" (also vy and vz)
9408 -- label %[vxyz] will be blank
9409 -- label %[vx] will be blank (also vy and vz)
9410 -- select vxyz >= 0 will select for atoms with vibrations of any magnitude
9411 -- select vxyz < 0 will select for atoms without vibrations of any magnitude
9412 -- select vx = 0 will NOT select atoms with no vibration vector
9413 -- select vx != 0 will NOT select atoms with no vibration vector
9414 -- select vx = 0 || vx != 0 will select for atoms with vibrations of any magnitude
9415 -- same with modulations and modxyz, modx, mody, modz
9416
9417FEATURE CHANGE: {xxx}.vxyz = a,  where a is an array
9418 -- no longer throws an exception if a[i] is not a point
9419 -- simply does not set that value.
9420 -- allows for  v = {*}.vxyz.all; {*}.vxyz = v;
9421
9422
9423JmolVersion="14.3.7_2014.09.21"
9424
9425bug fix: magCIF reading with symmetry scaling (-x+1/2,-2x+y,z+1/2,+1 mx,2mx-my,-mz)
9426         improperly rotates moments (1.34.cif)
9427
9428JmolVersion="14.3.7_2014.09.20b"
9429
9430bug fix: array sorting broken in JavaScript
9431
9432code: magCIF change to _space_group_symop.magn_ssg_centering_algebraic
9433code: efficiencies in storage of CIF keys
9434
9435bug fix: CIF reader not reading magnetic lattice centering for incommensurately modulated structures
9436bug fix: {*}.modulation("M") not functional
9437
9438bug fix: script queue broken in 2014.09.17
9439
9440JmolVersion="14.3.7_2014.09.17"
9441
9442bug fix: cartoon OFF does not remove nucleic bases from visible set
9443bug fix: select visible does not recalculate visible set
9444 -- after RESTRICT, for instance; Eric Martz
9445 -- at least since 14.1.14
9446		load =1d66
9447		cartoons only # if this is omitted, 'select visible' works correctly
9448		refresh
9449		restrict 28-36:B
9450		print {visible}
9451
9452bug fix: x = {visible} does not COPY the visible set
9453bug fix: spin broken in WebGL
9454
9455code: further progress with fully asynchronous HTML5
9456 -- all initial script loading and program start-up
9457 -- general LOAD and SCRIPT command processing
9458 -- minimization (static resource loading)
9459 -- PNGJ file loading
9460
9461JmolVersion="14.3.7_2014.09.16"
9462
9463bug fix: chainCaseSensitive ignored for select :a
9464bug fix: JmolData not reporting out properly
9465
9466
9467JmolVersion="14.3.7_2014.09.15b"
9468
9469bug fix: 14.3.7_2014.09.14 breaks nucleic acid rendering
9470
9471JmolVersion="14.3.7_2014.09.15"
9472
9473bug fix: CARTOON OFF does not remove visibility flag for alpha carbons
9474         (introduced in jmol-14.1.17_2014.06.03)
9475
9476JmolVersion="14.3.7_2014.09.14"
9477
9478bug fix: JSmol/HTML5 fails to show rockets
9479bug fix: setting structures after displaying rockets does not reset rockets correctly
9480
9481bug fix: load *xxxx/val  validation loading not working (14.3.7_2014.09.07)
9482
9483new feature: load =xxxx/rna3d
9484 -- mmCIF only
9485 -- fetches http://rna.bgsu.edu/rna3dhub/loops/download/xxxx
9486 -- hairpinLoops, internalLoops, junctions
9487 -- allows for such constructs as:
9488       select within(rna3d,"hairpinLoops")
9489       select within(rna3d,"hairpinLoops where index=5")
9490       x = getproperty("auxiliaryInfo.models[1].rna3d.internalLoops.5")
9491       x = getproperty("auxiliaryInfo.models[1].rna3d.internalLoops")[5]
9492	   print x
9493		{
9494		  _atoms  :  ({3023:3062 3639:3706})
9495		  _isres  :  true
9496		  _path  :  "internalLoops"
9497		  index  :  5
9498		  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"
9499		}
9500	   y = x._atoms
9501       select y
9502
9503new feature: load =xxxx/val
9504new feature: load =xxxx/dom
9505 -- extends PDBe validation/domain annotation to RCSB calls
9506
9507new feature: load *xxxx/dssr
9508new feature: load *xxxx/rna3d
9509 -- DSSR analysis extended to PDBe calls
9510 -- RNA3D analysis extended to RCSB calls
9511
9512JmolVersion="14.3.7_2014.09.12"
9513
9514bug fix: Draw broken in JSmol/HTML5 in 14.3.7_2014.09.07
9515
9516JmolVersion="14.3.7_2014.09.11"
9517
9518bug fix: Unit cell display and other characteristics offset or wrong when
9519         crystallographic coordinates include an intrinsic offset from
9520         Cartesian coordinates, as in the case of ENT/mmCIF 1hbb and 2hhb.
9521
9522bug fix: PDB reader not reading SCALEn records; required in certain cases for load =xxxx {1 1 1}
9523
9524
9525JmolVersion="14.3.7_2014.09.10"
9526
9527bug fix: Pending measurements lost when dragging to reposition molecule
9528bug fix: EM files not allowing unit cell creation for PDB or mmCIF files
9529
9530JmolVersion="14.3.7_2014.09.08"
9531
9532bug fix: binary document reader can skip bytes if an http connection
9533         fails to deliver the full set of requested bytes in one operation
9534         (nonstandard MRC files and PyMOL files)
9535
9536JmolVersion="14.3.7_2014.09.07"
9537
9538code: note new Jmol. in front of ___xxx here
9539
9540code: further work on asynchronous file loading
9541  -- uses script state machine to reset state
9542  -- xhr used only for data files; DOM for scripts
9543  -- caches data files
9544  -- principal shown to work
9545  -- works for package.js and corexxx.js files
9546  -- works for most Java-class xxxx.js files
9547  -- fails (requires multiple attempts) for some cases
9548     -- animation/vibration/spin threads
9549     -- PNGJ file loading
9550  -- cleaned up j2sjsmol code
9551  -- abandons complex j2s Clazz file loading methods; just uses jQuery
9552
9553new feature: Legendre polynomials for MSCIF file reading
9554
9555bug fix: adds correct dates for code versions of JSmol files
9556bug fix: load quartz.cif {1 1 1};draw symop @1 @5 does not work
9557	     due to refactoring error 7/9/2014 (14.3.3)
9558bug fix: dssr broken in 14.3.5
9559bug fix: throw context prior to try/catch within function causes exception
9560bug fix: polyhedra not removed from rendering when central atoms are deleted
9561
9562code: refactoring symmetry info into org.jmol.symmetry.SymmetryDesc
9563
9564JmolVersion="14.3.7_2014.08.29"
9565
9566code: preliminary all-asynchronous JSmol/HTML5
9567
9568JmolVersion="14.3.7_2014.08.25"
9569
9570bug fix: translation of atoms after deleting atoms having dots on crashes Jmol
9571
9572JmolVersion="14.3.7_2014.08.22"
9573
9574new feature: AXES TYPE "a"|"b"|"c"|"ab"|"ac"|"bc"|"abc"
9575 -- for axes position [x y] only shows specified axes
9576
9577new feature: load quartz.cif supercell "2a,2b+a,c;1/2,0,0"
9578 -- allows adjusting origin without changing symmetry operations
9579 -- same as load quartz.cif filter "cell=2a,2b+a,c;1/2,0,0"
9580 -- default lattice set to {555 555 -1} (i.e., PACKED)
9581 -- sets packing range based on the supercell
9582 -- packing can be avoided by specifying the lattice:
9583     load quartz.cif {1 1 1} supercell "2a,2b+a,c;1/2,0,0"
9584
9585doc note: load ... SUPERCELL "2a,2b,2c" is the same as load ... SUPERCELL {2 2 2}
9586          except that the packing will be based on the supercell dimensions, not the
9587          original cell dimensions, with range 0.02.
9588          This can be adjusted using PACKED x.x, which is still a fraction of the supercell dimensions.
9589          load quartz.cif supercell "10a, 10b+5a,c" PACKED 0.002
9590
9591doc note: load ... SUPERCELL ... defaults to PACKED, but simply adding a lattice overrides this:
9592          load ... {1 1 1} SUPERCELL ...
9593
9594new feature: load(filename, asbinary, async)
9595 -- 3rd parameter loads file asynchronously in HTML5
9596
9597<<< above is not documented TODO
9598
9599
9600bug fix: magnetic CIF files incompatible with displacement modulation
9601bug fix: write PNG xxx.png  when xxx.png is currently loaded saves 0-length data files
9602bug fix: load ASYNC was documented for 14.1.12_2014.03.10 but never implemented
9603
9604JmolVersion="14.3.7_2014.08.18"
9605
9606bug fix: load quartz.cif supercell "2a,2b+a,c" not working properly
9607
9608JmolVersion="14.3.6_2014.08.17b"
9609released as Jmol 14.3.6
9610
9611bug fix: modulated magnetic moment scaling by VECTORS MAX x.x not saved in state
9612         for modulations that are 0,0,0.
9613bug fix: magnetic CIF reader not automatically showing modulation
9614bug fix: load SUPERCELL {x y z} not working correctly in terms of packing
9615bug fix: load SUPERCELL not working correctly with modulation or magnetic
9616
9617JmolVersion="14.3.6_2014.08.15"
9618
9619new feature: upgrade of application file...export...Gaussian Input File...
9620
9621new feature: pmesh files can contain triangle colors
9622
9623JmolVersion="14.3.6_2014.08.14"
9624
9625bug fix: JavaScript drag-drop clears cache inappropriately when spt file is dropped
9626
9627IMPORTANT NOTE: The problem described here only affects the reading of states that
9628	have been created for crystallographic files, and then only if the
9629	state was created in Java and then displayed in JavaScript,
9630	or vice-versa.
9631
9632	The problem is due to the fact that the Java implementation
9633	of Jmol uses float values for atom coordinates, while JavaScript
9634	is restricted to using only double values. The problem arises when
9635    a comparison must be made between two decimal values. After symmetry
9636    has been applied, it is possible for atom coordinates to be off in the
9637    4th-7th decimal digit for floats and 14th-17th for doubles in the
9638    range -256 to 256.
9639
9640    The problem is most acute for inorganic crystal systems where
9641    symmetry has been applied and especially after the CONNECT NONE command
9642    has been issued.
9643
9644    Aspects where a problem might arise include:
9645     -- packing of unit cells, where atoms are discarded
9646     -- iterating over atoms, where atom order is important
9647     -- autobonding, where distances and order are critical
9648     -- comparing Cartesian or fractional coordinate values
9649
9650    Solution to the problem is to automatically round all fractional
9651    atom coordinates to a precision of 0.00001 and all Cartesian
9652    atom coordinates to a precision of 0.0001. This forces both
9653    double and float implementations to the same value and
9654    results in no practical error, since these ranges are
9655    well beyond the precision of atom coordinates in crystals.
9656    Coincidence is assured for fractional coordinates up to
9657    about 126 and for Cartesian coordinates up to about 838.
9658
9659    This rounding is not implemented for state or PNGJ file
9660    with state version v where
9661
9662        v < 140206 || v >= 140300 && v < 140306
9663
9664    and in general only in the case where the file coordinates are
9665    fractional. Thus, those files will be read exactly as in the
9666    version they were created by. And they will have have the same
9667    issues as well.
9668
9669    The result is also much cleaner-looking atom coordinates.
9670    For example, in JavaScript:
9671
9672    print {*}.fxyz
9673
9674	    {0.33333328149215147 0.999999891271352 1.0000000000000024}
9675		{0.6666666148254848 0.999999891271352 1.0000000000000024}
9676		{0.9999999844017011 1.000000000000001 0}
9677		{0.9999999616049127 0.9999999316096356 0.6290004156275991}
9678		{0.9999999709556066 0.9999999596617175 0.3709995843724032}
9679		{0.9999999481588181 0.999999891271352 1.0000000000000024}
9680
9681    becomes:
9682
9683		{0.33333 1 1}
9684		{0.66667 1 1}
9685		{1 1 0}
9686		{1 1 0.629}
9687		{1 1 0.371}
9688		{1 1 1}
9689
9690
9691new feature: set legacyJavaFloat
9692 -- set by Jmol when a state is read that is before 14.2.6 or in the range 14.3.0 - 14.3.5;
9693 -- prevents fractional and cartesian coordinate rounding.
9694 -- cleared by ZAP or LOAD or loading of any later state script
9695
9696new feature: MOLDEN extensions [SpaceGroup] [Operators] [Cell]
9697
9698JmolVersion="14.3.5_2014.08.10"
9699
9700code: static Txt functions moved to javajs.util.PT
9701
9702new feature: SHOW/WRITE PROPERTIES ... format "%s %i %f %f %f"
9703 -- allows specifying the format for a set of up to three properties.
9704 -- %s is atom name; %i is atom number
9705
9706bug fix: show PROPERTIES broken
9707bug fix: plot PROPERTIES changes axis settings
9708
9709JmolVersion="14.3.5_2014.08.09"
9710
9711bug fix: magCIF file reading broken for new file format
9712
9713new feature: magCIF file reading for incommensurately modulated magnetic structures
9714 -- very preliminary only; not tested
9715
9716new feature: set showModulationVectors true/false
9717 -- required now for showing modulation vectors rather than vibration vectors
9718
9719new feature: vibration max x.x
9720new feature: vector max x.x  // alternative; the same
9721 -- renormalizes all vibrations and vibration/spin vectors to have a maximum value of x.x
9722
9723
9724
9725JmolVersion="14.3.5_2014.08.08"
9726
9727bug fix: CIF operators with n/9 not supported
9728
9729JmolVersion="14.3.5_2014.08.05"
9730
9731bug fix: CIF reader broken for load xxx.cif 1  (14.1.17_2014.06.07)
9732bug fix: CONTACT command not functioning properly with multiple models
9733
9734JmolVersion="14.3.4_2014.08.03"
9735note: Sourceforge release of 14.3.4 and 14.2.4
9736
9737bug fix: annotation atom sets not adjusted for added hydrogens
9738bug fix: 14.3.3_2014.08.02 broke mmCIF reader
9739bug fix: BinaryDocument (Spartan file) reading broken in 14.1.12_2014.03.18
9740
9741JmolVersion="14.3.3_2014.08.02"
9742note: Sourceforge release of 14.3.3 and 14.2.3
9743
9744new feature: point({x,y,z}, true)
9745 -- TO screen coordinates
9746
9747new feature: point({sx,sy,sz}, false)
9748 -- FROM screen coordinates
9749
9750JmolVersion="14.3.3_2014.08.01"
9751
9752bug fix: move+moveto/zoomto still an issue.
9753
9754summary of new features for annotations, July 17 - Aug 1
9755
9756new feature: load *1cbs/dom
9757 -- loads mmCIF file from EBI along with sequence domain data
9758 -- uses URL http://wwwdev.ebi.ac.uk/pdbe/api/mappings/sequence_domains/1cbs?metadata=true&pretty=false
9759 -- use example:
9760
9761	load *1cbs/dom
9762
9763		Domains loaded:
9764		   CATH  2.40.128.20
9765		   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
9766		   InterPro  IPR000463 IPR000566 IPR011038 IPR012674
9767		   Pfam  PF00061
9768		   SCOP  50847
9769		   UniProt  P29373
9770
9771		Use SHOW DOMAINS for details.
9772
9773	$ show domains
9774
9775		metadata	restapi_version=0.8
9776		metadata	date=20140801
9777		metadata	url=http://wwwdev.ebi.ac.uk/pdbe/api/mappings/1cbs?pretty=false&metadata=true
9778		1cbs	SCOP	50847	identifier=Fatty acid binding protein-like
9779		1cbs	SCOP	50847	fold	description=Lipocalins
9780		1cbs	SCOP	50847	fold	sunid=50813
9781		1cbs	SCOP	50847	description=Fatty acid binding protein-like
9782		1cbs	SCOP	50847	class	description=All beta proteins
9783		1cbs	SCOP	50847	class	sunid=48724
9784		1cbs	SCOP	50847	superfamily	description=Lipocalins
9785		1cbs	SCOP	50847	superfamily	sunid=50814
9786		1cbs	UniProt	P29373	name=RABP2_HUMAN
9787		1cbs	UniProt	P29373	identifier=RABP2_HUMAN
9788		1cbs	GO	GO:0005215	name=transporter activity
9789		1cbs	GO	GO:0005215	identifier=transporter activity
9790		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.
9791		1cbs	GO	GO:0005215	category=Molecular_function
9792		...
9793		1cbs	CATH	2.40.128.20	architecture=Beta Barrel
9794		1cbs	CATH	2.40.128.20	identifier=Lipocalin
9795		1cbs	CATH	2.40.128.20	name=Cellular retinoic acid binding protein type ii. Chain: a. Engineered:yes
9796		1cbs	CATH	2.40.128.20	homology=Lipocalin
9797		1cbs	CATH	2.40.128.20	class=Mainly Beta
9798		1cbs	CATH	2.40.128.20	topology=Lipocalin
9799		1cbs	Pfam	PF00061	identifier=Lipocalin / cytosolic fatty-acid binding protein family
9800		1cbs	Pfam	PF00061	description=Lipocalin / cytosolic fatty-acid binding protein family
9801		1cbs	InterPro	IPR012674	name=Calycin
9802		1cbs	InterPro	IPR012674	identifier=Calycin
9803		1cbs	InterPro	IPR000566	name=Lipocalin/cytosolic fatty-acid binding domain
9804		1cbs	InterPro	IPR000566	identifier=Lipocalin/cytosolic fatty-acid binding domain
9805		1cbs	InterPro	IPR011038	name=Calycin-like
9806		1cbs	InterPro	IPR011038	identifier=Calycin-like
9807		1cbs	InterPro	IPR000463	name=Cytosolic fatty-acid binding
9808		1cbs	InterPro	IPR000463	identifier=Cytosolic fatty-acid binding
9809
9810	select within(domains,"InterPro where domain.identifier='calycin'")
9811
9812new feature: load *1cbs/val
9813 -- loads mmCIF file from EBI along with validation data
9814 -- use URL http://wwwdev.ebi.ac.uk/pdbe/api/validation/outliers/all/1cbs?metadata=true&pretty=false
9815 -- places that data into property_xxxx arrays
9816 -- use examples:
9817
9818	  load *2x9t/val
9819	  color property_rsrz "bwr"
9820	  display group within(5, property_rsrz > 0)
9821
9822		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
9823
9824		Validations loaded:
9825		  property_sidechains (residues: 181)
9826		  property_rama (residues: 262)
9827		  property_rsrz (residues: 87, max: 10.6)
9828		  property_chirals (atoms: 1)
9829		  property_planes (residues: 21, max: 0.08)
9830		  property_RNA_suite (residues: 241)
9831		  property_RNA_pucker (residues: 33)
9832		  property_bond_angles (atoms: 31, max: 14.12)
9833		  property_clashes (atoms: 2655, max: 3.42)
9834
9835	  load *1d66/val
9836	  select on within(validation,"clashes")
9837
9838new feature: load *1cbs/all
9839 -- loads mmCIF file from EBI along with validation and domain data
9840 -- may be extended to more types as they arise.
9841
9842new feature: label %[validation.xxxx]
9843 -- retrieves comma-separated validation values after load *yyyy/val
9844 -- xxxx is an entry in the validation API return, such as clashes or rsrz
9845 -- NOT a sum of absolute values, as %[property_xxxx] is for validation data
9846 -- example:
9847		load *1d66/val
9848		select within(validation,"bond_angles")
9849		label val=%[validation.bond_angles]
9850
9851new feature: set hoverlabel "%[validation.xxxx]"
9852 -- allows customized hover based on validation data
9853 -- example:
9854    	set hoverlabel "%[validation.bond_angles]"
9855
9856new feature: select within(validation, "clashes where value>3")
9857 -- selects atoms from "outliers" array
9858 -- similar to select within(domains, "....")
9859 -- uses sum of absolute values for each atom
9860
9861new feature: print getProperty("validationInfo[select * where _type='clashes']", atomset)
9862 -- WHERE close can contain any validation type (see SHOW VALIDATION)
9863 -- second parameter can be atom set -- {2.1} for instance -- defaults to current model
9864 -- allows uses SQL-like select phrases
9865 -- example:
9866
9867   set hoverlabel "@{getProperty(\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\").join(',')}"
9868
9869new feature: print getProperty("domainInfo[select * where _type='SCOP']")
9870 -- subset of auxiliaryInfo
9871 -- assumes model of visible
9872 -- second parameter can be atom set: {2.1} for instance
9873 -- uses sum of absolute values for each atom
9874 -- allows uses SQL-like select phrase:
9875
9876   print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']")
9877
9878
9879new feature: SQL NOCACHE flag
9880 -- prevents caching when using outside variables or functions
9881 -- can be anywhere in the clause
9882 -- example:
9883       select within(domains,"NOCACHE SCOP where myFunc(domain, _atoms)")
9884
9885new feature: SHOW DOMAINS "some info"
9886 -- selects specific records
9887 -- text-based matching in all fields and key names
9888 -- dot-notation allowed
9889 -- examples:
9890	   show domains name
9891	   show domains CATH
9892	   show domains InterPro.IPR002409
9893	   show domains Gal4
9894
9895new feature: SHOW DOMAINS "<annotationRecordIinfo> all"
9896 -- shows JSON-like array data
9897 -- will involve a circular reference because the domain key
9898     points to the parent.parent entry in the main array
9899 -- example:
9900		load *1cbs/dom
9901  	   	show domains InterPro.IPR002409 all
9902
9903		  {
9904		    _atoms  :  ({15:204})
9905		    _path  :  "InterPro.IPR000463"
9906		    chain_id  :  "A"
9907		    domain  :
9908		    {
9909		      identifier  :  "Cytosolic fatty-acid binding"
9910		      mappings  : "<circular reference>"
9911		      name  :  "Cytosolic fatty-acid binding"
9912		     }
9913		    end  :
9914		    {
9915		      author_insertion_code  :  ""
9916		      author_residue_number  :  25
9917		      residue_number  :  25
9918		     }
9919		    entity_id  :  1
9920		    start  :
9921		    {
9922		      author_insertion_code  :  ""
9923		      author_residue_number  :  3
9924		      residue_number  :  3
9925		     }
9926		    struct_asym_id  :  "A"
9927		   }
9928		  {
9929		    _atoms  :  ({32:185})
9930		    _path  :  "InterPro.IPR000463"
9931		    chain_id  :  "A"
9932		    domain  :
9933		    {
9934		      identifier  :  "Cytosolic fatty-acid binding"
9935		      mappings  : "<circular reference>"
9936		      name  :  "Cytosolic fatty-acid binding"
9937		     }
9938	     ...
9939
9940
9941
9942JmolVersion="14.3.3_2014.07.27"
9943
9944bug fix: set pdbAddHydrogens incompatible with mmCIF *xxxx/val
9945
9946new feature: select within(validation, "clashes where value>3")
9947 -- selects atoms from "outliers" array
9948 -- similar to select within(domains, "....")
9949 -- uses sum of absolute values for each atom
9950
9951new feature: print getProperty("validationInfo[select * where _type='clashes']")
9952 -- subset of auxiliaryInfo
9953 -- WHERE close can contain any validation type, currently including:
9954 -- assumes model of visible
9955 -- second parameter can be atom set: {2.1} for instance
9956 -- allows uses SQL-like select phrase:
9957
9958   print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']")
9959
9960 -- does NOT use abolute value; report is as an array when select value is used:
9961
9962   set hoverlabel "@{getProperty(\\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\\").join(',')}"
9963
9964
9965new feature: print getProperty("domainInfo[select * where _type='SCOP']")
9966 -- subset of auxiliaryInfo
9967 -- assumes model of visible
9968 -- second parameter can be atom set: {2.1} for instance
9969 -- uses sum of absolute values for each atom
9970 -- allows uses SQL-like select phrase:
9971
9972   print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']")
9973
9974
9975JmolVersion="14.3.3_2014.07.26"
9976
9977code: refactoring dssr/domains/validation clases
9978
9979new feature: load *1crs/val
9980 -- loads PDBe file with validation data
9981 -- places that data into property_xxxx arrays
9982 -- use examples:
9983
9984	  load *2x9t/val
9985	  color property_rsrz "bwr"
9986	  display group within(5, property_rsrz > 0)
9987
9988found 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
9989
9990Validations loaded:
9991  property_sidechains (residues: 181)
9992  property_rama (residues: 262)
9993  property_rsrz (residues: 87, max: 10.6)
9994  property_chirals (atoms: 1)
9995  property_planes (residues: 21, max: 0.08)
9996  property_RNA_suite (residues: 241)
9997  property_RNA_pucker (residues: 33)
9998  property_bond_angles (atoms: 31, max: 14.12)
9999  property_clashes (atoms: 2655, max: 3.42)
10000
10001
10002	  load *1d66/val
10003	  select on within(validation,"clashes")
10004
10005
10006JmolVersion="14.3.3_2014.07.23"
10007
10008bug fix: write PDB fails
10009
10010JmolVersion="14.3.3_2014.07.22"
10011
10012new feature:  getProperty(x,"[select a,b,c ....
10013    - selection of specific keys to report in getProperty command
10014    - does not require star-slash, which could mark end-of-comment
10015
10016new feature:  x.in(a,b,c,d...)   # suggestion of Sameer Velankar
10017new feature:  x.in([a,b,c,d])
10018    - returns 0 (x not in group) or position 1-n
10019
10020new feature: SQL NOCACHE flag
10021    - prevents caching when using outside variables or functions
10022    - can be anywhere in the clause
10023    - example:
10024       select within(domains,"NOCACHE ...")
10025
10026JmolVersion="14.3.3_2014.07.20"
10027
10028new feature: load *1cbs/dom
10029	- loads domain info from EBI along with mmCIF file
10030	- enables seqid (_atom_site.label_seq_id) required for animation
10031	- ` information is in the JSON form (in all cases below,
10032		additional key/value pairs are allowed):
10033
10034	 { "<pdbID>" : { <databaseInformation> } }
10035
10036	 where <PdbID> is a lower-case PDB id such as 1crs or 1d66
10037	 and <databaseInformation> is one or more records:
10038
10039	       "<databaseID>" : { <entryInfo> }
10040
10041	  <dataBaseID> is a database identifier such as:
10042	       "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC"
10043
10044	  <entryInfo> is one or more records of the form:
10045
10046	     "<entryID>" : { <entry> }
10047
10048	 <entry> must at the very least contain:
10049
10050	    "identifier" : "<some identifier>"
10051	    "mappings" : [ array of <mapping> ]
10052
10053	 <mapping> must minimally be
10054
10055	    { "chain_id" : "<author chainIdentifier>" }
10056
10057	 but is more likely to contain start/end records:
10058
10059	    { "chain_id" : "<author chainIdentifier>",
10060		  "start" : <residueRecord>,
10061		  "end" : <residueRecord>
10062	    }
10063
10064	 <residueRecord> must minimally be:
10065
10066	 	{ "residue_number" : <mmCIF _atom_site.label_seq_id> }
10067
10068	 but usually also contains "author_residue_number" and "author_insertion_code".
10069
10070	- reports to console:
10071
10072	Domains loaded:
10073	   CATH  2.40.128.20
10074	   EC
10075	   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
10076	   InterPro  IPR000463 IPR000566 IPR011038 IPR012674
10077	   Pfam  PF00061
10078	   SCOP  50847
10079	   UniProt  P29373
10080	Use SHOW DOMAINS for details.
10081
10082new feature: SHOW DOMAINS
10083    - displays tab-separated annotation information
10084
10085		1cbs	CATH	2.40.128.20	topology=Lipocalin
10086		1cbs	Pfam	PF00061	identifier=Lipocalin / cytosolic fatty-acid binding protein family
10087		1cbs	Pfam	PF00061	description=Lipocalin / cytosolic fatty-acid binding protein family
10088		1cbs	InterPro	IPR012674	name=Calycin
10089		1cbs	InterPro	IPR012674	identifier=Calycin
10090
10091new feature: SHOW DOMAINS "<annotationRecordIinfo>"
10092	- selects specific records
10093	- text-based matching in all fields
10094
10095new feature: SHOW DOMAINS "<annotationRecordIinfo> mappings"
10096	- adds information about mapping
10097
10098new feature: select within(annotation, "<query>")
10099
10100	- allows selection of atoms based on annotations.
10101	- <query> can be:
10102		- a databaseID:
10103
10104			select within(domains,"InterPro")
10105
10106		- a specific databaseID.entryID:
10107
10108			select within(domains,"InterPro.IPR012674")
10109
10110		- a specific databaseID, with WHERE clause:
10111
10112			select within(domains,"InterPro where domain.identifier='calycin'")
10113			select within(domains,"InterPro where identifier='calycin'")
10114			select within(domains,"InterPro where identifier like '*-like*'")
10115
10116
10117
10118
10119note: "annotations" references changed to "domains"
10120bug fix: Jmol application starts in English regardless of language
10121
10122JmolVersion="14.3.3_2014.07.29"
10123
10124new feature: label %[validation.xxxx]
10125 -- retrieves comma-separated validation values after load *yyyy/val
10126 -- xxxx is an entry in the validation API return, such as clashes or rsrz
10127 -- NOT a sum of absolute values, as %[property_xxxx] is for validation data
10128 -- example:
10129		load *1d66/val
10130		select within(validation,"bond_angles")
10131		label val=%[validation.bond_angles]
10132
10133new feature: set hoverlabel "%[validation.xxxx]"
10134 -- allows customized hover based on validation data
10135 -- example:
10136    	set hoverlabel "%[validation.bond_angles]"
10137
10138JmolVersion="14.3.3_2014.07.27"
10139
10140bug fix: set pdbAddHydrogens incompatible with mmCIF *xxxx/val
10141
10142new feature: select within(validation, "clashes where value>3")
10143 -- selects atoms from "outliers" array
10144 -- similar to select within(domains, "....")
10145 -- uses sum of absolute values for each atom
10146
10147new feature: print getProperty("validationInfo[select * where _type='clashes']")
10148 -- subset of auxiliaryInfo
10149 -- WHERE close can contain any validation type, currently including:
10150 -- assumes model of visible
10151 -- second parameter can be atom set: {2.1} for instance
10152 -- allows uses SQL-like select phrase:
10153
10154   print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']")
10155
10156 -- does NOT use abolute value; report is as an array when select value is used:
10157
10158   set hoverlabel "@{getProperty(\"validationInfo[select value where _type='bond_angles' and (_atoms and {hovered})]\").join(',')}"
10159
10160
10161new feature: print getProperty("domainInfo[select * where _type='SCOP']")
10162 -- subset of auxiliaryInfo
10163 -- assumes model of visible
10164 -- second parameter can be atom set: {2.1} for instance
10165 -- uses sum of absolute values for each atom
10166 -- allows uses SQL-like select phrase:
10167
10168   print getProperty("domainInfo[select * where _type='SCOP' and _domain like '508']")
10169
10170
10171JmolVersion="14.3.3_2014.07.26"
10172
10173code: refactoring dssr/domains/validation clases
10174
10175new feature: load *1crs/val
10176 -- loads PDBe file with validation data
10177 -- places that data into property_xxxx arrays
10178 -- use examples:
10179
10180	  load *2x9t/val
10181	  color property_rsrz "bwr"
10182	  display group within(5, property_rsrz > 0)
10183
10184found 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
10185
10186Validations loaded:
10187  property_sidechains (residues: 181)
10188  property_rama (residues: 262)
10189  property_rsrz (residues: 87, max: 10.6)
10190  property_chirals (atoms: 1)
10191  property_planes (residues: 21, max: 0.08)
10192  property_RNA_suite (residues: 241)
10193  property_RNA_pucker (residues: 33)
10194  property_bond_angles (atoms: 31, max: 14.12)
10195  property_clashes (atoms: 2655, max: 3.42)
10196
10197
10198	  load *1d66/val
10199	  select on within(validation,"clashes")
10200
10201
10202JmolVersion="14.3.3_2014.07.23"
10203
10204bug fix: write PDB fails
10205
10206JmolVersion="14.3.3_2014.07.22"
10207
10208new feature:  getProperty(x,"[select a,b,c ....
10209    - selection of specific keys to report in getProperty command
10210    - does not require star-slash, which could mark end-of-comment
10211
10212new feature:  x.in(a,b,c,d...)   # suggestion of Sameer Velankar
10213new feature:  x.in([a,b,c,d])
10214    - returns 0 (x not in group) or position 1-n
10215
10216new feature: SQL NOCACHE flag
10217    - prevents caching when using outside variables or functions
10218    - can be anywhere in the clause
10219    - example:
10220       select within(domains,"NOCACHE ...")
10221
10222JmolVersion="14.3.3_2014.07.20"
10223
10224new feature: load *1cbs/dom
10225	- loads domain info from EBI along with mmCIF file
10226	- enables seqid (_atom_site.label_seq_id) required for animation
10227	- ` information is in the JSON form (in all cases below,
10228		additional key/value pairs are allowed):
10229
10230	 { "<pdbID>" : { <databaseInformation> } }
10231
10232	 where <PdbID> is a lower-case PDB id such as 1crs or 1d66
10233	 and <databaseInformation> is one or more records:
10234
10235	       "<databaseID>" : { <entryInfo> }
10236
10237	  <dataBaseID> is a database identifier such as:
10238	       "CATH", "SCOP", "InterPro", "UniProt", "GO", "EC"
10239
10240	  <entryInfo> is one or more records of the form:
10241
10242	     "<entryID>" : { <entry> }
10243
10244	 <entry> must at the very least contain:
10245
10246	    "identifier" : "<some identifier>"
10247	    "mappings" : [ array of <mapping> ]
10248
10249	 <mapping> must minimally be
10250
10251	    { "chain_id" : "<author chainIdentifier>" }
10252
10253	 but is more likely to contain start/end records:
10254
10255	    { "chain_id" : "<author chainIdentifier>",
10256		  "start" : <residueRecord>,
10257		  "end" : <residueRecord>
10258	    }
10259
10260	 <residueRecord> must minimally be:
10261
10262	 	{ "residue_number" : <mmCIF _atom_site.label_seq_id> }
10263
10264	 but usually also contains "author_residue_number" and "author_insertion_code".
10265
10266	- reports to console:
10267
10268	Domains loaded:
10269	   CATH  2.40.128.20
10270	   EC
10271	   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
10272	   InterPro  IPR000463 IPR000566 IPR011038 IPR012674
10273	   Pfam  PF00061
10274	   SCOP  50847
10275	   UniProt  P29373
10276	Use SHOW DOMAINS for details.
10277
10278new feature: SHOW DOMAINS
10279    - displays tab-separated annotation information
10280
10281		1cbs	CATH	2.40.128.20	topology=Lipocalin
10282		1cbs	Pfam	PF00061	identifier=Lipocalin / cytosolic fatty-acid binding protein family
10283		1cbs	Pfam	PF00061	description=Lipocalin / cytosolic fatty-acid binding protein family
10284		1cbs	InterPro	IPR012674	name=Calycin
10285		1cbs	InterPro	IPR012674	identifier=Calycin
10286
10287new feature: SHOW DOMAINS "<annotationRecordIinfo>"
10288	- selects specific records
10289	- text-based matching in all fields
10290
10291new feature: SHOW DOMAINS "<annotationRecordIinfo> mappings"
10292	- adds information about mapping
10293
10294new feature: select within(annotation, "<query>")
10295
10296	- allows selection of atoms based on annotations.
10297	- <query> can be:
10298		- a databaseID:
10299
10300			select within(annotations,"InterPro")
10301
10302		- a specific databaseID.entryID:
10303
10304			select within(annotations,"InterPro.IPR012674 where identifier='calycin'")
10305
10306		- a databaseID followed by a WHERE clause:
10307
10308			select within(annotations,"InterPro where identifier='calycin'")
10309			select within(annotations,"InterPro where identifier like '*-like*'")
10310
10311
10312
10313
10314	any text information in the
10315	  SHOW ANNOTATION report.
10316
10317bug fix: 1-letter sequence for water showing as "I" not "?"
10318bug fix: SHOW SEQUENCE FALSE not giving 1-letter sequences
10319bug fix: for (i in x)   where x is an associative array does not work
10320
10321JmolVersion="14.3.3_2014.07.17"
10322
10323new feature: load *1cbs/all
10324 -- preliminary only
10325
10326new feature: show annotation
10327
10328bug fix: DSSP analysis not returning information to console
10329
10330JmolVersion="14.3.3_2014.07.13"
10331
10332code: refactoring of HTML5 Jmol, JSpecView, and AstexViewer for cleaner
10333      interaction with web-page based JavaScript. All interations now
10334      go directly through JS
10335
10336bug fix: move and moveto cannot be in the same session
10337
10338JmolVersion="14.3.3_2014.07.12"
10339
10340bug fix: x.func(y) as second operand in a boolean "and" operation
10341         where the first operand evaluates to FALSE
10342         (so that x.func(y) is never evaluated), triggers a script error.
10343bug fix: set atomPicking, setDrawPicking, pickLabel, pickingSpinRate
10344         all should not be in state
10345
10346new feature: load /pdbe/xxxx
10347 -- loads CIF file http://www.ebi.ac.uk/pdbe/entry-files/download/xxxx.cif
10348 -- can be abbreviated as "*":
10349
10350     load *1ai6
10351
10352 -- can be supplemented with annotations (TODO)
10353
10354new feature: {*}.seqid
10355 -- mmCIF only
10356 -- settable using {*}.seqid = ....
10357 -- from _atom_site.label_seq_id
10358 -- a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category.
10359     Data items in the ENTITY_POLY_SEQ category specify the sequence
10360     of monomers in a polymer. Allowance is made for the possibility
10361     of microheterogeneity in a sample by allowing a given sequence
10362     number to be correlated with more than one monomer id - the
10363     corresponding ATOM_SITE entries should reflect this heterogeneity.
10364
10365bug fix: model kit menu does not allow setting of new element
10366bug fix: set atomPicking, setDrawPicking should not be in state
10367
10368JmolVersion="14.3.3_2014.07.09"
10369
10370new feature: eval(...)
10371
10372code: org.jmol.util.Measure moved to javajs.util.Measure
10373
10374JmolVersion="14.3.3_2014.07.02"
10375
10376bug fix: getproperty structureInfo can fail with phosphorus monomers
10377bug fix: PDB reader not placing compoundSource in model auxiliary info
10378
10379JmolVersion="14.3.2_2014.06.29"
10380
10381bug fix: MCIF reader misreads magnetic symmetry operators involving xyz scaling
10382bug fix: isosurface "=3hyd" AS "3hyd.omap" fails to save proper file
10383         (error in seek() method of javajs.util.binaryDocument)
10384
10385JmolVersion="14.3.1_2014.06.28"
10386
10387bug fix: zz = write("coord") should write untransformed coordinates in XYZ format. It is writing untransformed coordinates in MOL format.
10388bug fix: zz = write("coord", "MOL") should write transformed coordinates in MOL format. It is writing untransformed coordinates.
10389bug fix: write COORD should display untransformed coordinates in XYZ format in the console, but it does not. It writes a JPG file named "coord".
10390bug fix: MCIF reader not reading magnetic centerings 1/3, 2/3
10391bug fix: JSV jsvAddHighlight broken
10392bug fix: JSmol HTML5 console broken for Safari and Chrome
10393bug fix: CASTEP phonon .geom file reading broken
10394
10395JmolVersion="14.3.0_2014.06.13"
10396
10397RELEASE OF Jmol 14.2.0 Friday, June 13, 2014
10398
10399new feature: readers with unit cells may load as trajectories
10400
10401bug fix: CASTEP reader broken for multiple cells and geometry optimization
10402
10403JmolVersion="14.1.17_2014.06.12"
10404
10405new feature: protein sidechain minimization
10406 -- enabled by set picking dragMinimizeMolecule
10407 -- proteins only
10408 -- uses MMFF or UFF force field automatically
10409 -- important to use set pdbAddHydrogens prior to loading
10410     to avoid stereochemical switch (ILE, THR, e.g.)
10411     or to be very careful about that
10412
10413JmolVersion="14.1.17_2014.06.11"
10414
10415bug fix: set pdbAddHydrogens fails for structures with ANISOU records
10416bug fix: select x < 0.3 reports error when checking, though it does run when executed
10417bug fix: SMILES for model with nonbonded atoms fails
10418
10419JmolVersion="14.1.17_2014.06.10"
10420
10421bug fix: 06.09 broke unitcell display
10422bug fix: WebPanel error trapping problem; too long file name for tar file
10423
10424synchonized with Jmol 14.0.17 June 9, 2014
10425
10426bug fix: zoomto broken
10427bug fix: atoms turned off with restrict still clickable
10428
10429JmolVersion="14.1.17"
10430JmolVersion="14.1.17_2014.06.07"
10431
10432FEATURE CHANGE: jmolCommandInput 6th parameter added is default value
10433 -- defaults to "help"
10434
10435FEATURE CHANGE: set useArcBall removed
10436 -- no longer necessary; never documented
10437 -- arcBall is always used anyway
10438
10439FEATURE CHANGE: removed UNITCELL "xxx" where xxx is an isosurface ID
10440 -- undocumented
10441 -- not necessary, as UNITCELL $xxx or UNITCELL isosurface xxx  does as well
10442 -- conflicts with new UNITCELL "parent" and other unit cell types
10443
10444FEATURE CHANGE: REMOVED: set fractionalRelative
10445 -- an odd quantity -- related specifically to scripts commands
10446     using {1/1 1/2 1/3} and cell=nnn
10447 -- Its use with cell= was never documented.
10448 -- It makes no sense to change the unit cell and not change the
10449     meaning of {1/1 1/2 1/3} and cell=nnn
10450 -- Only relates to situations where the unit cell has been offset.
10451 -- Its presence caused unitcell [{origin} {a} {b} {c}] to fail.
10452 -- It should never have been set in state, as it has nothing to do with the state
10453
10454FEATURE CHANGE: default space group names for Int. Tables # 39, 41, 64, 67, 68 added
10455
10456new feature: x= format("JSON", data)
10457 -- simple way to generate JSON code.
10458
10459new feature: x = format("base64", data)
10460 -- creates base64-encoding of the data
10461 -- data can be an array, a byteArray, a string, or a base64-encoded array
10462 -- prepends the string with ";base64,"
10463
10464new feature: x = format("byteArray", data)
10465 -- creates byte array from the data
10466 -- data can be an array, a byteArray, a string, or a base64-encoded array
10467
10468new feature: x = format("array", data)
10469 -- data can be an array, a byteArray, a string, or a base64-encoded array
10470 -- turns byteArrays and strings into integer arrays
10471 -- copies arrays if data is an array
10472
10473new feature: load xxxx filter "CELL=va,vb,vc;oa,ob,oc"
10474 -- generic cell transformation during load
10475 -- applicable to any crystallographic file
10476 -- must be the LAST element of a filter
10477 -- operators are applied BEFORE this transformation
10478 -- can be expanded with {i j k} or {mmm nnn 1}
10479 -- can be used to create a supercell with or without offset
10480 -- reversed with "cell=!a,b,c:0,0,1/2"
10481 -- forces packing, with range based on specified cell dimensions
10482 -- example:
10483   load t.mcif filter "cell=2a,2b,c:0,0,1/2"
10484
10485new feature: load xxxx filter "NOPACKCELL=va,vb,vc;oa,ob,oc"
10486 -- same as CELL=  except without any packing
10487
10488new feature: load filter "cell=parent" or "cell=standard"
10489 -- for MCIF files (magnetic spin CIF files
10490 -- later, UNITCELL "conventional" displays conventional cell
10491
10492new feature: set showUnitCellInfo TRUE (default)
10493 -- set FALSE to hide unit cell information display
10494
10495new feature: unitcell "type"
10496 -- type can be "standard" or "parent" for now
10497     derived from CIF records
10498 -- "primitive" may follow
10499   unitcell "standard"
10500   unitcell "parent"
10501   unitcell "conventional"
10502
10503new feature: unitcell "abc_offset"
10504 -- abc_offset is of the form "a,b,c;0,0,0"
10505     where a, b, and c, can be any expression involving a, b, and c
10506     and 0 can be an offset
10507 -- numbers can be expressed fractionally or as decimals
10508 -- offset is optional, but semicolon is not
10509 -- effect is cumulative -- unit cell is NOT first restored
10510 -- reversed using !
10511 -- examples:
10512
10513    unitcell "a+b,a-b,c;1/4,1/4,1/4"
10514    unitcell "!a+b,a-b,c;1/4,1/4,1/4"
10515    unitcell "a+b,a-b,c;"
10516
10517new feature: unitcell {555 575 0}
10518 -- 0 here means "draw these cells without internal lines"
10519 -- (currently) .uxyz does not scale
10520
10521new feature: unitcell OFFSET and RANGE
10522 -- explicit parameters for unitcell {i j k} and unitcell {nnn mmm x}
10523
10524new feature: unitcell BOUNDBOX
10525 -- allows calculation of positions relative to boundbox using fractional coordinates
10526 -- for example
10527
10528     unitcell boundbox
10529     draw {1/2 1/2 1/2}
10530     unitcell reset
10531
10532new feature: x.push(key,value) for associative array
10533 -- same as x.key = value; seems appropriate
10534
10535new feature: x.pop("key") for an associative array
10536 -- same as x - "key"; just seems more appropriate
10537
10538new feature: load ORIENTATION or load DATA "...orientation..." ...
10539 -- loads a file and preserves current orientation
10540 -- creates saved orientation "preload"
10541 -- shortcut for save orientation preload;load....;restore orientation preload
10542 -- example:
10543       load orientation "" // reload file with same orientation
10544
10545new feature: V3000 reading of DATA SGROUP records:
10546 -- for example:
10547 		...
10548		M  V30 BEGIN SGROUP
10549		M  V30 1 DAT 0 ATOMS=(1 1) FIELDNAME=pc FIELDDATA=-0.2344
10550		M  V30 1 DAT 0 ATOMS=(1 2) FIELDNAME=pc FIELDDATA=0.3344
10551		M  V30 1 DAT 0 ATOMS=(1 3) FIELDNAME=pc FIELDDATA=-0.4344
10552		M  V30 END SGROUP
10553   		...
10554   	then partialCharges, for example, can be set using:
10555   	   {*}.partialCharge = {*}.property_pc.all
10556 -- optionally, if FIELDNAME contains "partial" then the atom's partial charge
10557    is automatically set instead of property_partialCharge
10558 -- if more than one field starts with "partial" then the
10559    first one indicated in the file is assigned to partialCharge
10560    and the any others are left as property_partialXXXX
10561
10562new feature: moveTo AXIS [a,b,c,x,y,z]
10563 -- for example: moveTo AXIS a
10564 -- rotates the model smoothly to a crystallographic or cartesian axis.
10565 -- in the case of abc, the rotation places the remaining two axes
10566     to the right and down (International Tables standard)
10567 -- in the case of xyz, the rotation places the remaining two axes
10568     to the right and up (standard Cartesian orientation)
10569 -- for abc, if no unit cell is available, a simple {1 1 1 90 90 90} unit cell is used
10570 -- added to application and popup View menus
10571
10572new feature: JSmol: allow for a user callback for customization of menu
10573  if (Jmol._showMenuCallback)
10574		Jmol._showMenuCallback(menu, x, y);
10575
10576new feature: show(xxx) function
10577 -- same as script("show " + xxx)
10578
10579new feature: set showUnitCellDetails TRUE (default)
10580 -- FALSE removes a,b,c,alpha,beta,gamma lines
10581
10582new feature: unitcell RESET (or RESTORE)
10583 -- returns unit cell to original values and removes offset and scaling
10584 -- resets width to fine line
10585
10586new feature: restore UNITCELL
10587 -- returns unit cell to original values and removes offset and scaling
10588
10589new feature: show symop n "fmatrix"
10590new feature: show symop @1 @2 "fmatrix"
10591 -- gives rational fractional matrix
10592
10593new feature: BilbaoReader NONORM option -- reads displacements as actual values, not normalized
10594
10595new feature: load ... filter "symop=..."
10596 -- list of numbers separated by space, for example:
10597     load quartz.cif packed filter "symop=2"
10598     load quartz.cif packed filter "symop=2 3"
10599
10600new feature: set echo depth x.x for standard echos
10601 -- works for 3D echos now as well as 2D echos
10602 -- values in percent of depth
10603 -- x.x >= 1000 are (x.x % 1000) in front of the 3D position
10604 -- x.x <= -1000 are (-x.x % 1000) behind the 3D position
10605
10606new feature: set starWidth
10607 -- replaces set set starScale
10608
10609new feature: menu item color--atoms--by scheme--vectors
10610
10611new feature: load "filename" packed x.x
10612 -- x.x is the range in fractional coordinates within which an atom
10613     can be close to being in the 555 cell but not quite and still be
10614     accepted by the atom loading filter.
10615 -- default is 0.02
10616 -- in some cases, this adds too many atoms and can be reduced to 0.01 or 0.001
10617 -- modulation reader uses 0.001 strictly.
10618 -- for example:
10619
10620		load t2.bcs packed 0.01
10621		{1.1}.property_dist =  {1.1}.distance.min({1.2})
10622		{1.1}.spacefill={1.1}.property_dist.all
10623		color {1.1} property_dist "bwr" range 0 0.5
10624		select 1.2
10625		stars -0.3
10626		set starscale 0.1
10627		frame *
10628		unitcell {1.2}
10629
10630new feature: Bilbao Crystallographic Server file reader
10631 -- scrapes Bilbao HTML pages for Bilbao structure format
10632 -- for example, http://www.cryst.ehu.es/cryst/compstru.html
10633     or http://www.cryst.ehu.es/cryst/amplimodes.html
10634 -- reads Bilbao standard setting data:
10635		15
10636		13.800 5.691 9.420 90.0 102.3 90.0
10637		7
10638		Pb    1   4e    0.0000 0.2910 0.2500
10639		Pb    2   8f    0.3170 0.3090 0.3520
10640		P     1   8f    0.5990 0.2410 0.4470
10641		O     1   8f    0.6430 0.0300 0.3920
10642		O     2   8f    0.6340 0.4640 0.3740
10643		O     3   8f    0.6420 0.2800 0.6120
10644		O     4   8f    0.4910 0.2220 0.4200
10645 -- identified by 1st and third line being a single integer only
10646     (IT spacegroup  number and atom count, respectively)
10647
10648new feature: dipole ID m1 ALL {...}
10649 -- creates a molecular dipole set with ID
10650 -- one dipole per molecule in specified range
10651 -- connected to associated molecule in terms of visibility
10652
10653new feature: unit cell display includes k (mCIF) and q (CIF, Jana2006) vectors
10654
10655bug fix: cannot zap model for which atoms are all deleted
10656bug fix: isosurface "=1bna" does not work for zapped file
10657bug fix: label %[x] does not work
10658bug fix: show spacegroup not complete for magnetic and modulated structures
10659bug fix: legacy JVXL file data skipping broken in 14.1.13
10660bug fix: MO file line includes full path; should be just the filename
10661bug fix: V3000 reader skips 2nd file in multiple files separated by $$$$
10662bug fix: isosurface color density broken
10663bug fix: isosurface slab @1 @2 @3 broken
10664bug fix: (undocumented) isosurface slab @3   fails when isosurface has not been mapped
10665bug fix: console not properly handling TAB key
10666bug fix: double-click drag doesn't drag the model, and
10667         since double-click is determined by time, not location,
10668         it appears as though sometimes the model drags and
10669         sometimes it does not. Solution is to
10670           a) add a localization to double clicking. I think that
10671              was removed because of touch interface problems.
10672           b) add left-double-drag to left-single-drag for standard rotation
10673
10674bug fix: browser errant zero mouse move
10675         causes collapse of rotation matrix
10676         due to coding error in arcball routine
10677
10678bug fix: drag-drop followed by model building may fail.
10679bug fix: tm.matrixRotate protected from setting to all zeros (Chrome issue; reason unknown)
10680bug fix: JavaScript state creation not properly representing integral decimal numbers
10681bug fix: draw length pt1 pt2 only makes half the line
10682bug fix: color $m* green blue wild card coloring for isosurfaces doe not work
10683bug fix: {*}.trace = {*}.bfactor  crashes Jmol (.bfactor does not exist)
10684bug fix: ramachandran plot scaling off
10685bug fix: color $isosurface1 "rwb" range 3.0 4.5   fails to set color scheme
10686bug fix: write VAR X fails if X is an associative array
10687bug fix: show NMR broken
10688bug fix: H1 simulation not happening in Jmol.jar
10689bug fix: write() function does not work for write("coords")
10690bug fix: vibration vectors may have incorrect length if vector scale and vibration scale are different
10691bug fix: LOAD ... SUPERCELL not saved in state
10692bug fix: CASTEP reader not handling supercell correctly (packing and phonons)
10693
10694bug fix: Jmol 14.1.12 broke atom.fxyz for models that have vibrations.
10695 -- atom.fxyz SHOULD change with changes in unit cell, but when an update was
10696     made to accommodate modulated subsystems, where different atoms in a
10697     model may have different unit cells, this capability was lost for any
10698     atom having any sort of vibration other than a modulation.
10699
10700bug fix: set hoverlabel will be ignored if no hover has already taken place
10701
10702bug fix: symmetry operation drawing/description with centering
10703bug fix: Bilbao uses 2nd origin for numerous spacegroups
10704
10705bug fix: magCIF reader using 4x4 determinant, not 3x3
10706
10707bug fix: file drag-drop doing append if no atoms
10708bug fix: BilbaoReader amplimode correction
10709bug fix: polyhedra not vibrating
10710bug fix: application file open preview not working
10711bug fix: show file only shows file for model 1.1
10712bug fix: signed applet not accepting drag-drop
10713bug fix: getProperty "fileInfo" for CIF should fix keys (lower case and change '.' to '_')
10714bug fix: problems reading PNGJ files for Jana2006
10715
10716code: V3000 reader split off from MolReader; saves 2K or so.
10717code: faster calculations involving point-based atom properties such as fx
10718code: TransformManager clean-up;
10719code: Viewer/FileManager clean-up; image loading moved to jzu
10720
10721
10722JmolVersion="14.1.15"
10723JmolVersion="14.1.15_2014.05.08"
10724
10725bug fix: pubChem reader broken
10726
10727new feature: mCIF (magnetic CIF) file reader
10728 -- preliminary reader for CIF format development testing
10729 -- includes latest proposal in committee as of May 8, 2014
10730
10731new feature: unitcell [ {origin} {a} {b} {c} ]
10732 -- defines unit cell in terms of an origin and three vectors
10733 -- just wasn't documented.
10734
10735
10736JmolVersion="14.1.15_2014.05.06"
10737
10738bug fix: CIF reader not filtering atoms by element
10739bug fix: structure command may not properly remove residues from structures (F. Reichmann)
10740bug fix: FRAME n  setting frame to n - 1.  (F. Reichmann)
10741bug fix: unitcell {0 0 0};   in state leaves unit cell on
10742bug fix: modulation of anisotropic parameters broken
10743bug fix: Jana2006 reader does not accept filter "MODAVE"
10744bug fix: msCIF with filter "MODAXES=X" broken
10745
10746JmolVersion="14.1.15_2014.05.04"
10747
10748new feature: reset PRINT
10749 -- clears the output buffer (scriptWait, scriptEcho, evaluateVar
10750bug fix: color property x   does not pass script check, so not allowed in web command box
10751bug fix: echo "@{xxx}" may fail
10752but fix: print @b fails for referred variable an array
10753bug fix: xxx.format("%8.-3p") does not work
10754bug fix: [array].format("%8.3p") does not work
10755bug fix: PDB Reader skips first ANISOU record
10756bug fix: SFTP not supported
10757bug fix: fix for measurements not updating with modulation x.x
10758
10759new feature: replace()
10760 -- no arguments means "clean whitespace to single space and trim"
10761
10762new feature: replace(x, y, TRUE)
10763 -- all occurrences of characters of x will be replaced with y.
10764
10765new feature: mCIF reader
10766 -- Bilbao Crystallographic Server format
10767 -- magnetic extension to CIF reader
10768
10769new feature: set vectorsCentered
10770 -- centers vibration vector on atom
10771 -- vector is never animated
10772 -- useful for magnetic/spin properties
10773
10774new feature: select xyz > 1.0
10775 -- xyz, fxyz, fuxyz, uxyz, vxyz
10776 -- uses length
10777
10778JmolVersion="14.1.14"
10779JmolVersion="14.1.14_2014.04.28"
10780
10781FEATURE CHANGE: Application Tools...Spectrum menu removed
10782 -- Issue is that EPFL returns with a new 2D structure,
10783 -- and Jmol would have to determine from that an atom selection map.
10784 -- we are doing this with JSmol, but not yet with the application.
10785 -- Bummer!
10786
10787new feature: getProperty(x, SQL_query)
10788 -- Full SQL for any Jmol associative array.
10789 -- Result is an array if x is an array.
10790 -- example:
10791		x = [ 1,2,3,{ "testing":"here","val":33 } ]
10792		y = getProperty(x, "SELECT val WHERE testing LIKE 'here'")
10793		show y
10794
10795		[ 33 ]
10796
10797		z = x[4]
10798		show z
10799
10800		z = { "testing":"here","val":33 }
10801
10802		y = getProperty(z, "SELECT val WHERE testing LIKE 'here'")
10803		show y
10804
10805		33
10806
10807new feature: LIKE operator extended to atom expressions
10808 --IS case-sensitive (unlike "=")
10809 --examples:
10810    load =1crn
10811    select group like "G*"
10812    print "x" like "X"  // FALSE
10813
10814new feature: "like" operator, strings only:
10815     a LIKE "x"    a equals x
10816     a LIKE "*x"   a ends with x
10817     a LIKE "x*"   a starts with x
10818     a LIKE "*x*"  a contains x
10819
10820new feature: rich SQL logic in GETPROPERTY, getProperty(), and within(dssr,"xxxx.yyy..."):
10821 -- syntax: [SELECT keys WHERE expression]
10822 -- keys indicating only one key, such as "nt1", return just the value
10823 -- keys may be a LIKE wildcard such as "nt*" or "*nt" or "*nt*" (but are NOT case sensitive)
10824     also return just the value(s)
10825 -- keys * or */* means "return all values as an associative array"
10826 -- keys */nt1,nt2  means "return a new associative array including only keys nt1 and nt2"
10827 -- keys */nt*  means "return a new associative array including all keys starting with nt"
10828 -- if drilling to this associative array from a list,  * or */... returns an array of key/value pairs
10829 -- expression may be any standard Jmol expression that does not involve actual Jmol variables
10830     (instead, the variable names should all be the keys, and their values will be that given in the key:value pair)
10831 -- example:
10832	load files "=1ehz/dssr"
10833	x = getProperty("auxiliaryInfo.models.1.dssr.basepairs");
10834    print getProperty(x,"[SELECT nt* WHERE bp='C-G']")
10835    print getProperty(x, "[SELECT */nt* WHERE Saenger LIKE '19*']")
10836 -- keys may be "dotted" -- modelProperties.FreqValue -- but in this case
10837     the dotted key (FreqValue here) must be exact case. "modelProperties.freqvalue" would not work.
10838 -- example:
10839    load C6H6.smol
10840    x = getProperty("modelInfo.models[select _ipt where modelProperties.PATH='Frequencies' and modelProperties.FreqValue > 3000]")
10841	select modelIndex = x  // 6 models selected
10842
10843new feature: JANA2006 reader adds M40 molecular group support
10844 -- no TLS modulation
10845 -- no local axes (third header line of pos# record)
10846
10847new feature: calculate structure dssr
10848 -- fetches http://x3dna.bio.columbia.edu/dssr/?POST?opts=--hl%20--more&model=[pdb data]
10849 -- builds auxiliaryInfo.models.n.dssr
10850 -- displays summary report
10851 -- complements calculate structure dssp, except it is done by the x3dna server at Columbia, not Jmol
10852
10853new feature: (application only) -a --autoAnimationDelay
10854 -- delay time in seconds for press-and-hold operation of
10855     toolbar animation buttons (default 0.2; set to 0 to disable)
10856
10857new feature: calculate hbonds structure
10858 -- now includes DSSR-calculated bonds for nucleic acids
10859
10860new feature: select leadAtom
10861 -- selects *.CA, *.P and terminal O in nucleotides
10862
10863
10864new feature: set backboneSteps TRUE
10865 -- draws base pair steps between dssr-identified base pairs
10866
10867TRANSCRIPTION/DNA                       06-MAR-92   1D66
10868DNA RECOGNITION BY GAL4: STRUCTURE OF A PROTEIN/DNA COMPLEX
10869found biomolecule 1: D, E, A, B
10870
10871DSSR: a software program for Defining the Secondary
10872Structures of RNA from three-dimensional coordinates
10873v1.0.6-2014apr04, Xiang-Jun Lu (xiangjun@x3dna.org)
10874List of 19 base pairs
10875List of 1 helix
10876List of 4 stems
10877List of 1 coaxial stack
10878List of 3 internal loops
10879
10880
10881new feature: load =1msy/dssr
10882 -- very simple RCSB/DSSR connection
10883 -- loads both files:
10884		FileManager opening 1 http://www.rcsb.org/pdb/files/1msy.pdb.gz
10885		FileManager opening 1 http://x3dna.bio.columbia.edu/dssr?id=1msy
10886
10887	load =1msy/dssr
10888	set backboneSteps
10889	backbone -0.2
10890	select within(dssr,"helices")
10891	color blue
10892	select within(dssr,"stems")
10893	color red
10894	select within (dssr,"singleStranded")
10895	color white
10896	select within (dssr,"multiplets")
10897	color green
10898	select within (dssr,"isolatedPairs") // was "lonePairs"
10899	color orange
10900	select leadatom
10901	spacefill 1.5
10902	label %[group1]
10903	font label 24 bold
10904	set labeloffset 0 0
10905	color label grey
10906
10907new feature: select within(dssr,"subset")
10908 -- subsets include
10909		aMinorMotifs
10910		basePairs
10911		bulges
10912		coaxialStacks
10913		hairpinLoops
10914		helices
10915		internalLoops
10916		junctions
10917		kinkTurns
10918		kissingLoops
10919		lonePairs
10920		multiplets
10921		riboseZippers
10922		singleStranded
10923		stems
10924		summary
10925  -- optionally followed by ".n" where n is a number starting with 1
10926  -- optionally followed by ".linkedBy" for loops, bulges, and junctions
10927  -- optionally followed by ".res1" or ".res2"
10928  -- can accommodate SQL
10929  -- results are cached for individual models
10930  -- example:
10931
10932     select within(dssr,"multiplets")
10933     select within(dssr,"bulges.3")
10934     select within(dssr,"bulges.3.linkedBy")
10935     select within(dssr,"basePairs[SELECT res* WHERE twist > 1]")
10936
10937new feature: select x = [array or array variable]
10938 -- implied OR
10939 -- operators other than equals use implied AND
10940
10941new feature: DSSR server
10942 -- load files "=1d66" + "=dssr/1d66"
10943
10944         DSSR: a software program for Defining the Secondary
10945         Structures of RNA from three-dimensional coordinates
10946         v1.0.6-2014apr04, Xiang-Jun Lu (xiangjun@x3dna.org)
10947
10948 -- uses new "concatenate" notation to combine data from two sources
10949 -- after loading, try
10950
10951     print getProperty("auxiliaryInfo.models.1.dssr")
10952
10953
10954new feature: array.keys.all
10955 -- drills down in sequential or associative arrays
10956 -- gives all keys as well as number of array elements:
10957
10958    load files "=1d66" + "=dssr/1d66"
10959    x=getProperty("auxiliaryInfo.models.1.dssr")
10960    print x.keys.all
10961
10962basePairs
10963basePairs.19.DSSR
10964basePairs.19.LW
10965basePairs.19.Saenger
10966basePairs.19.bp
10967basePairs.19.id
10968basePairs.19.info
10969basePairs.19.name
10970basePairs.19.nt1
10971basePairs.19.nt2
10972coaxialStacks
10973coaxialStacks.1.helix
10974coaxialStacks.1.nts
10975coaxialStacks.1.nts.4.5.DSSR
10976coaxialStacks.1.nts.4.5.LW
10977coaxialStacks.1.nts.4.5.Saenger
10978coaxialStacks.1.nts.4.5.bp
10979coaxialStacks.1.nts.4.5.id
10980coaxialStacks.1.nts.4.5.info
10981coaxialStacks.1.nts.4.5.name
10982coaxialStacks.1.nts.4.5.nt1
10983coaxialStacks.1.nts.4.5.nt2
10984coaxialStacks.1.stemCount
10985helices
10986helices.1.basePairs
10987helices.1.basePairs.19.DSSR
10988helices.1.basePairs.19.LW
10989helices.1.basePairs.19.Saenger
10990helices.1.basePairs.19.bp
10991helices.1.basePairs.19.id
10992helices.1.basePairs.19.info
10993helices.1.basePairs.19.name
10994helices.1.basePairs.19.nt1
10995helices.1.basePairs.19.nt2
10996helices.1.info
10997internalLoops
10998internalLoops.3.count
10999internalLoops.3.dssrType
11000internalLoops.3.id
11001internalLoops.3.linkedBy
11002internalLoops.3.nts
11003internalLoops.3.nts.3.count
11004internalLoops.3.nts.3.nt
11005internalLoops.3.nts.3.seq
11006stems
11007stems.4.basePairs
11008stems.4.basePairs.5.DSSR
11009stems.4.basePairs.5.LW
11010stems.4.basePairs.5.Saenger
11011stems.4.basePairs.5.bp
11012stems.4.basePairs.5.id
11013stems.4.basePairs.5.info
11014stems.4.basePairs.5.name
11015stems.4.basePairs.5.nt1
11016stems.4.basePairs.5.nt2
11017stems.4.info
11018
11019
11020
11021new feature: array.join()
11022 -- creates a flat array from an array of arrays:
11023 -- example:
11024	 $x = [1,2,[3,4,5],[6,[7,8,9]]].join()
11025	 $show x
11026        x = [ 1,2,3,4,5,6,7,8,9 ]
11027
11028new feature: DSSR output reading
11029 -- Defining the (Secondary) Structures of RNA
11030 -- see http://forum.x3dna.org/rna-structures/dssr-software-for-defining-the-%28secondary%29-structures-of-rna/
11031 -- brain-child of Xiang-Jun Lu (3dna.lu@gmail.com; Columbia University)
11032 -- use system command x3d-dssr.exe --input=xxxx.pdb > xxxx.out
11033 -- then in Jmol:
11034       load files "xxxx.pdb" + "xxxx.out"
11035 -- all DSSR information will be in auxiliaryInfo.models.dssr with the following keys:
11036
11037		aMinorMotifs
11038		basePairs
11039		bulges
11040		coaxialStacks
11041		hairpinLoops
11042		helices
11043		internalLoops
11044		junctions
11045		kinkTurns
11046		kissingLoops
11047		lonePairs
11048		multiplets
11049		riboseZippers
11050		singleStrandedSegments
11051		stems
11052
11053 -- all entries are lists.
11054 -- most of these list entries have "nt" entries, and those
11055     are nucleotide residue identifiers, so Jmol's
11056     getProperty() "drill-down" capabilities allow for:
11057
11058       x = getProperty("auxiliaryInfo.models.1.dssr.basepairs.nt")
11059  	   select @{x}
11060
11061bug fix: x=3;select atomno=x can fail (E. Martz)
11062bug fix: JSmol deferred (image-covered) applet can produce unwanted multiple canvases (J. Gutow)
11063
11064bug fix: print "x" = "X" returns false; should be TRUE (broken in 14.0/1.10)
11065bug fix: script error in JavaScript xxx.spt stops all subsequent script processing (P. Bays)
11066bug fix: color property_x fails (broken in jmol-14.1.14_2014.04.16) (P. Bays)
11067bug fix: halos ON fails for small vdw radii (A. Herraez)
11068bug fix: CIF reader with bsModels fails
11069 -- example:
11070     load maleic.cif [3 5 7]
11071bug fix: reading concatenated files from PNGJ with model selected
11072bug fix: reading gzip files from PNGJ fails when concatenated
11073bug fix: group1 codes for nonstandard residues not read from mmCIF (_struct_ref_seq_dif.db_mon_id) or PDB (SEQADV)
11074bug fix: select group="ALA" fails due to select group ..... option
11075bug fix: getProperty("auxiliaryInfo") fails for JavaScript
11076bug fix: Gaussian FCHK file reader fails when no SP coefficients
11077bug fix: set defaultVDW not working (A. Herraez)
11078bug fix: color isosurface range broken (Lucy Cusinato)
11079bug fix: script compiler error: x.x*x.x requiring space: x.x * x.x (Alexander Rose)
11080bug fix: lost H atoms of PDB-designated water (E. Martz)
11081bug fix: mouse rotation can cause loss of model (E. Martz)
11082bug fix: Jana2006 reader not reading groups correctly
11083bug fix: functions called in script defined by script called by this script
11084         must be lower case. (A. Rose)
11085bug fix: clickable atoms may not be considered visible for hover
11086bug fix: select color=red  should be   color="red"  to allow
11087         for variable after "color="
11088
11089code: upgrade of Apache Commons CLI (Command Line Interface) to 1.2 from 1.0
11090
11091code: T4 generalized as extending T3, allowing 4D mesh reading.
11092code: implementation of Andrew Hanson's 3D Ball Roll mouse algorithm
11093     -- no significant practical improvement, but nicer mathematics
11094     -- a bit more involved, but this is once per mouse move. Doesn't matter.
11095
11096JmolVersion="14.1.13"
11097
11098new feature: load files "xxx" + "yyy"
11099 -- concatenates yyy onto xxx as a single string of file data
11100
11101new feature: Gaussian fchk file reader
11102
11103new feature:  var x,y,z;
11104 -- commas optional
11105 -- similar to JavaScript
11106 -- initializes the variable to ""
11107
11108
11109JmolVersion="14.1.13_2014.04.03c"
11110
11111bug fix: LOAD command cannot force XML types
11112 -- load xmlvasp::vasprun.xml
11113 -- load vasp::vasprun.xml
11114    -- option without "xml" required only for Odyssey, as there are both Odyssey and XmlOdyssey
11115bug fix: application file open fails when preview is unchecked in Edit|Properties
11116
11117bug fix: vectors using vibration scale, not vector scale
11118bug fix: vector 0.01 misread as if integer "20" (pixel width)
11119bug fix: Gaussian fchk+freq needs to propagate bonding as well to modes
11120bug fix: JDX reading of older Chime-related ##PEAKASSIGNMENTS records
11121
11122bug fix: polyhedra display improperly when some vertex atoms are hidden (Nick Greeves)
11123
11124code: Huge refactoring for JavaScript and judicious post-Google Closure Compiler
11125      editing serves to reduce code size by 5% -- to 1.38 MB for core.z.js
11126      partially due to additional directory changes in JavaScript and
11127      partially due to removing unnecessary final static variable defs.
11128      (These are just constants that are never referred to.)
11129
11130JmolVersion="14.1.13_2014.04.02"
11131
11132code: JavaScript additional global reduction
11133new feature: load files "xxx" + "yyy"
11134 -- concatenates yyy onto xxx as a single string of file data
11135
11136JmolVersion="14.1.13_2014.04.01d"
11137
11138bug fix: JmolAppletSigned0.jar missing export classes (POV-Ray, VRML, for example)
11139bug fix: Mac Spartan spardir reading
11140 -- for web, use zipped up version of spardir
11141
11142new feature: Gaussian fchk file reader
11143
11144bug fix: A=[]; A[3] = 5  not working
11145
11146new feature:  var x,y,z;
11147 -- commas optional
11148 -- similar to JavaScript
11149 -- initializes the variable to ""
11150
11151
11152bug fix: var x not isolated to script context
11153bug fix: ellipsoid command broken
11154
11155JmolVersion="14.1.12"
11156JmolVersion="14.1.12_2014.03.30"
11157
11158changes since 14.1.11:
11159
11160new feature: JSpecView getSolutionColor fill/all/none/false
11161 -- any combination of these four flags
11162 -- fill: fill area under a VIS spectrum with color
11163 -- none: remove fill
11164 -- all:  do this for all spectra, not just the selected spectrum
11165 -- false: use interpolation method rather than curve fitting
11166     (see jspecview.common.Visible.java for details)
11167
11168new feature: JSpecView PEAK command -- adds PEAK GC/MS "#1"
11169 -- #1 here indicates "MS for first GC peak"
11170
11171summary: We now have general ZIP and image file (including PDF) creation in
11172         JavaScript independent of Jmol itself.
11173
11174new feature; byteArray type
11175 -- from format("byteArray", x) where
11176        x is an integer array, or
11177        x is a string starting with ";base64,"
11178        x is any other variable (converted to byte list of string equiv.
11179 -- from binary associative arrays
11180
11181new feature: binary associative arrays
11182 -- Any array containing "$_BINARY_$" as a key.
11183 -- Values may contain raw byte array data, but need not.
11184 -- Can be expanded or changed, just like any associative array.
11185 -- Seen in string form when in a string context.
11186 -- .type of elements will report "byteArray"
11187
11188new feature: x = write("PNGJ")
11189 -- Creates a binary associative array equivalent to writing a PNGJ file
11190 -- Contains keys "_IMAGE_", "JmolManifest.txt", "state.spt"
11191     and all associated files.
11192
11193new feature: write VAR x "filename"
11194        or   write @x "filename"
11195 -- Where x is a byteArray or a (possibly binary) associative array.
11196 -- When x is a byteArray, writes binary data to a file.
11197 -- When x is an associative array, creates a ZIP file
11198     (or PNGJ file, if _IMAGE_ is present and is PNG format),
11199     automatically converting strings starting with ";base64," to
11200     byte arrays in the ZIP file. To do the same with x a binary
11201     array, just use @{array(x)} instead of @x.
11202
11203new feature: x = load("myfile",true)
11204 -- Creates a binary associative array variable x that contains the contents of
11205     the file.
11206 -- data are stored as byte arrays.
11207 -- If the file is a standard file, the key "_DATA_" will hold the file data.
11208 -- If the file is a PNGJ file, the key "_IMAGE_" will hold the image data,
11209     and additional files are keyed by file name.
11210 -- If the file is a zip file, the files are keyed by file name.
11211 -- Note that x = load("myfile") without "true" loads the contents of
11212  	 the file into x and, if the file is a PNGJ or ZIP file, just loads
11213  	 the list of files in the collection, not the actual data.
11214
11215new feature: filter "ATOM" opposite of filter "HETATM"
11216
11217new feature: load ASYNC ....
11218new feature: script ASYNC ....
11219 -- load and script ASYNC start a new asynchronous thread to load the file
11220     and then continue after that.
11221 -- JSmol/HTML5 only; others ignore
11222
11223new feature: Mol3D reader
11224 -- using load "MOL3D::xxx.mol" one can force only 3D mol files to be read
11225 -- 2D mol files will throw an error.
11226
11227new feature: show CHEMICAL STDINCHIKEY
11228new feature: show CHEMICAL STDINCHI
11229
11230new feature: load ":inchikey:xxxxx"
11231   -- requires STANDARD InChIKey (as from {*}.find("chemical", "stdinchikey")
11232
11233new feature: x = {*}.find("chemical",type)
11234	-- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey"
11235	-- uses NCI/CADD CIR
11236	-- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped
11237	-- Note that unlike SHOW CHEMICAL, trailing new line char is removed
11238
11239new feature: x = smilesString.find("chemical",type)
11240	-- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey"
11241	-- allows going directly from SMILES to other quantities
11242	-- uses NCI/CADD CIR
11243	-- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped
11244	-- Note that unlike SHOW CHEMICAL, trailing new line char is removed
11245
11246bug fix: NWChem reader broken
11247bug fix: JSpecView GC/MS issues
11248bug fix: JSmol callbacks should refer to "jmolApplet0" not "jmolApplet0_object"
11249bug fix: set cameraDepth not working
11250 -- note that loading of PyMOL files affects this setting, which
11251     is reset only using the INITIALIZE command
11252bug fix: getProperty() function does not recognize a list as a variable and returns it as a string
11253bug fix: Dsn6Reader.java misnamed, causing EDS map file load error
11254         in JavaScript only. (I did not know that was even possible!)
11255bug fix: java.io.dataStreamReader.readShort() does not take into
11256         account JavaScript equivalence of short and int, causing
11257         "-1" to be read as 65535.
11258bug fix: minimum modulationScale set to 1; should be 0.1.
11259bug fix: translucent echo backgrounds broken
11260bug fix: filter "HETATM" does not work
11261bug fix: write XYZ broken by changes to the way arrays
11262		 are shown with the PRINT command
11263bug fix: x = adfjladj(3) crashes Jmol
11264bug fix: x[0] = "tst" "here" "now" should cause script exception
11265bug fix: isosurface MOLECULAR delivers wrong surface
11266bug fix: spacefill ionic not working
11267bug fix: set cameraDepth disabled
11268bug fix: some translations not being carried out.
11269bug fix: msCIF reader not accepting normalized commensurate Fourier vectors
11270bug fix: JSmol/HTML MSIE local installation AJAX working again (still no binary files)
11271
11272code: variable compression issues in Jmol and JSV
11273code: org.jmol.io and org.jmol.io2 consolidated
11274code: select water hard-coded for speed (2 x faster)
11275code: careful attention to loading of biomolecules results in 160K core bio load savings
11276code: JavaScript core load reduced by 2% (30KB) by changing high-frequency global name "viewer" to "vwr"
11277code: refactoring of image writing code to javajs.img for general use
11278code: refactoring of zip code into javajs.util for general use
11279code: refactoring of minimization code saves 10KB
11280code: isosurface MOLECULAR speed-up by a factor of 10.
11281 -- better handling of constants during iteration
11282 -- better identification of unnecessary edges and faces
11283
11284
11285JmolVersion="14.1.12_2014.03.27b"
11286
11287bug fix: NWChem reader broken
11288
11289new feature: JSpecView PEAK command -- adds PEAK GC/MS "#1"
11290 -- #1 here indicates "MS for first GC peak"
11291
11292bug fix: JSpecView GC/MS issues
11293bug fix: JSmol callbacks should refer to "jmolApplet0" not "jmolApplet0_object"
11294bug fix: set cameraDepth not working
11295 -- note that loading of PyMOL files affects this setting, which
11296     is reset only using the INITIALIZE command
11297
11298code: variable compression issues in Jmol and JSV
11299
11300JmolVersion="14.1.12_2014.03.21"
11301
11302bug fix: getProperty() function does not recognize a list as a variable and returns it as a string
11303
11304code: org.jmol.io and org.jmol.io2 consolidated
11305code: select water hard-coded for speed (2 x faster)
11306code: careful attention to loading of biomolecules results in 160K core bio load savings
11307code: JavaScript core load reduced by 2% (30KB) by changing high-frequency global name "viewer" to "vwr"
11308code: refactoring of image writing code to javajs.img for general use
11309code: refactoring of zip code into javajs.util for general use
11310code: refactoring of minimization code saves 10KB
11311
11312summary: We now have general ZIP and image file (including PDF) creation in
11313         JavaScript independent of Jmol itself.
11314
11315
11316JmolVersion="14.1.12_2014.03.19"
11317
11318new feature: x= format("JSON", data)
11319 -- simple way to generate JSON code.
11320
11321new feature: x = format("base64", data)
11322 -- creates base64-encoding of the data
11323 -- prepends the string with ";base64,"
11324
11325new feature; binary byte array
11326 -- from array(s) where s starts with ";base64,"
11327 -- from binary associative arrays
11328
11329new feature: binary associative arrays
11330 -- Any array containing "$_BINARY_$" as a key.
11331 -- Values may contain raw byte array data, but need not.
11332 -- Can be expanded or changed, just like any associative array.
11333 -- Seen in string form when in a string context.
11334 -- .type of elements will report "byteArray"
11335
11336new feature: x = write("PNGJ")
11337 -- Creates a binary associative array equivalent to writing a PNGJ file
11338 -- Contains keys "_IMAGE_", "JmolManifest.txt", "state.spt"
11339     and all associated files.
11340
11341new feature: write VAR x "filename"
11342        or   write @x "filename"
11343 -- Where x is a byteArray or a (possibly binary) associative array.
11344 -- When x is a byteArray, writes binary data to a file.
11345 -- When x is an associative array, creates a ZIP file
11346     (or PNGJ file, if _IMAGE_ is present and is PNG format),
11347     automatically converting strings starting with ";base64," to
11348     byte arrays in the ZIP file. To do the same with x a binary
11349     array, just use @{array(x)} instead of @x.
11350
11351new feature: x = load("myfile",true)
11352 -- Creates a binary associative array variable x that contains the contents of
11353     the file file.
11354 -- data are stored as raw bytes.
11355 -- If the file is a standard file, the key "_DATA_" will hold the file data.
11356 -- If the file is a PNGJ file, the key "_IMAGE_" will hold the image data,
11357     and additional files are keyed by file name.
11358 -- If the file is a zip file, the files are keyed by file name.
11359 -- Note that x = load("myfile") without "true" loads the contents of
11360  	 the file into x and, if the file is a PNGJ or ZIP file, just loads
11361  	 the list of files in the collection, not the actual data.
11362
11363
11364
11365
11366JmolVersion="14.1.12_2014.03.18"
11367
11368bug fix: Dsn6Reader.java misnamed, causing EDS map file load error
11369         in JavaScript only. (I did not know that was even possible!)
11370bug fix: java.io.dataStreamReader.readShort() does not take into
11371         account JavaScript equivalence of short and int, causing
11372         "-1" to be read as 65535.
11373
11374JmolVersion="14.1.12_2014.03.17"
11375
11376bug fix: minimum modulationScale set to 1; should be 0.1.
11377
11378new feature: filter "ATOM" opposite of filter "HETATM"
11379
11380bug fix: translucent echo backgrounds broken
11381bug fix: filter "HETATM" does not work
11382bug fix: write XYZ broken by changes to the way arrays
11383		 are shown with the PRINT command
11384bug fix: x = adfjladj(3) crashes Jmol
11385bug fix: x[0] = "tst" "here" "now" should cause script exception
11386
11387JmolVersion="14.1.12_2014.03.16"
11388
11389code: isosurface MOLECULAR speed-up by a factor of 10.
11390 -- better handling of constants during iteration
11391 -- better identification of unnecessary edges and faces
11392
11393bug fix: isosurface MOLECULAR delivers wrong surface
11394
11395JmolVersion="14.1.12_2014.03.13"
11396
11397bug fix: spacefill ionic not working
11398bug fix: set cameraDepth disabled
11399
11400JmolVersion="14.1.12_2014.03.10"
11401
11402bug fix: some translations not being carried out.
11403
11404new feature: load ASYNC ....
11405new feature: script ASYNC ....
11406 -- load and script ASYNC start a new asynchronous thread to load the file
11407     and then continue after that.
11408 -- JSmol/HTML5 only; others ignore
11409
11410bug fix: msCIF reader not accepting normalized commensurate Fourier vectors
11411
11412bug fix: JSmol/HTML MSIE local installation AJAX working again (still no binary files)
11413
11414new feature: Mol3D reader
11415
11416new feature: show CHEMICAL STDINCHIKEY
11417new feature: show CHEMICAL STDINCHI
11418
11419new feature: load ":inchikey:xxxxx"
11420   -- requires STANDARD InChIKey (as from {*}.find("chemical", "stdinchikey")
11421
11422new feature: x = {*}.find("chemical",type)
11423	-- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey"
11424	-- uses NCI/CADD CIR
11425	-- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped
11426	-- Note that unlike SHOW CHEMICAL, trailing new line char is removed
11427
11428new feature: x = smilesString.find("chemical",type)
11429	-- type is "smiles", "inchi", "stdinchi", "inchikey", "stdinchikey"
11430	-- allows going directly from SMILES to other quantities
11431	-- uses NCI/CADD CIR
11432	-- Note that unlike SHOW CHEMICAL, "InChIKey=" and "InChI=" are dropped
11433	-- Note that unlike SHOW CHEMICAL, trailing new line char is removed
11434
11435JmolVersion="14.1.11"
11436JmolVersion="14.1.11_2014.03.08"
11437
11438FEATURE CHANGE: associative array .count, .length, .lines removed
11439 -- specifically for associative arrays, nothing more
11440 -- these were unnecessary equivalents of .size
11441 -- change will not be incorporated into Jmol 14.0
11442
11443new feature: JSpecView readers for ACD/Labs annotated MS, IR, Raman, and UV/VIS
11444 -- displays fragments for MS (highlights atoms)
11445 -- highlights atoms involved in an IR/Raman stretch
11446 -- UV/VIS and Raman untested
11447
11448new feature: JSpecView and Jmol read ACD/Labs assigned spectra block JDX files.
11449 -- 2D MOL files with missing hydrogens on hetero atoms.
11450 -- fully synced
11451 -- drag-drop enabled
11452
11453new feature: associative array standard "dot" notation
11454 -- a.test = 33
11455 -- print a.test
11456 -- caveat: cannot do this with a.keys, a.size, or a.type
11457 -- not implemented in Jmol 14.0 because of the feature change
11458
11459new feature: associative array alternative ".." syntax
11460 -- same as JavaScript and Java, but ".." instead of "."
11461 -- for example:
11462    a["test"] == a..test
11463
11464new feature: .covalentRadius added as more appropriate alias for .covalent
11465
11466new feature: .bondingRadius added as more appropriate alias for .ionic
11467
11468new feature: set bondingVersion
11469 --  0: Jmol default, from OpenBabel 1.100.1
11470  	 -- uses a mix of covalent and ionic radii for autobonding
11471
11472 --  1: Pyykko and Atsumi, 2009
11473	 -- changes the distance criteria for autobonding to be specifically covalent
11474
11475 -- saved in state only for file loading; should be unchanged after state loading.
11476
11477new feature: color(color1, color2, n, asHSL)
11478 -- returns a color scheme as a string
11479 -- colors can be of any nature -- string or point, name or rgb
11480 -- n colors; simple interpolation from color1 to color2
11481 -- asHSL must be TRUE or FALSE;
11482    -- when TRUE, uses hue/saturation/luminance instead of rgb gradient
11483
11484 -- example:
11485
11486	$ print color("white", "red", 5, false)
11487
11488	 [xffffff][xffbfbf][xff7f7f][xff3f3f][xff0000]
11489
11490	$ print color("red", "blue", 5, true)
11491
11492	 [xff0000][xffff00][x00ff00][x00ffff][x0000ff]
11493
11494	$ set propertyColorScheme color("yellow","black",50,true)
11495	$ color property temperature
11496
11497
11498new feature: added simpler associative array notation: [key:value,...]
11499 -- no quotes required
11500 -- supplements {"key":value,...} where quotes are still required
11501     due to conflict with atom set chain descriptors such as {a:b}.
11502
11503new feature: catchable THROW
11504
11505 -- as in Java or JavaScript, allows a way of jumping
11506     out of a process.
11507
11508 -- outside of try/catch gives the expected error report:
11509
11510   $ print "testing"
11511   $ throw "testing here"
11512   $ print "we will never see this"
11513
11514	testing
11515	script ERROR: testing here
11516	----
11517         throw >> "testing here" <<
11518
11519 -- passes a string as the variable thrown_value
11520
11521	$ print thrown_value
11522
11523	  testing here
11524
11525 -- can be trapped with try/catch:
11526
11527    try{
11528		  print "testing"
11529		  throw "testing here"
11530		  print "continuing"
11531	} catch(e) {
11532 	  print "thrown_value=" + thrown_value;
11533	}
11534
11535	results in:
11536
11537	testing
11538	thrown_value=testing here
11539
11540new feature: asynchronous resumable processes
11541
11542 -- THROW CONTEXT contextName
11543
11544 -- throws a catchable error, but in the process of doing so,
11545     creates a script context that allows RESUMING
11546     at the point of the throw, unlike anything in JavaScript
11547     or Java (or perhaps like a debug mode).
11548
11549 -- if within a try/catch phrase, is handled by catch.
11550     in which case the error message is simply the context name.
11551
11552 -- if not within a try/catch phrase just reports
11553
11554       to resume, enter: &contextName
11555
11556 -- essentially provides a callback into the running
11557     script, so you could, for example, put a running script
11558     on hold while you load a file, check variables, etc.,
11559     then continue.
11560
11561 -- can be resumed using RESUME CONTEXT or just & followed
11562     by the name of the context:
11563
11564       &test
11565
11566       resume context &test
11567
11568 -- replaces PAUSE/RESUME, now deprecated.
11569
11570 -- The current context returns to the highest level, however
11571     the variables in the context that was thrown are
11572     accessible as though the context variable was an
11573     associative array. So, for example, if we have
11574
11575     function f(a, b, c) {
11576        var x = 5
11577        throw context testing
11578        print "x=" + x
11579     }
11580
11581     f(1,2,3)
11582     print "done"
11583
11584     The context will be saved as the variable "testing", and
11585     we can then test all the variables in that saved context,
11586     (and change them before continuing):
11587
11588     print testing["x"]
11589
11590       5
11591
11592     testing["x"]++
11593
11594     print testing
11595
11596		_path	:	[script] >> function f
11597		_retval	:	0
11598
11599		a	:	2
11600		b	:	2
11601		c	:	3
11602		x	:	6
11603
11604 -- contexts can be restored using
11605
11606     &contextName
11607
11608     In the above case, we would get the report:
11609
11610     x=6
11611     done
11612
11613new feature: SAVE CONTEXT contextName
11614 -- similar to THROW, but does not stop processing.
11615     So in the above example, if we change THROW to SAVE,
11616     the processing continues, but after it has completed,
11617     we can change context variables and run it again.
11618
11619new feature: show SAVED
11620 -- same as show SAVE
11621
11622new feature: delete $SAVED savedName
11623
11624  	 delete $SAVED Context_xxxx
11625
11626 -- $ is important; case is not.
11627 -- allows selective deletion of saved objects
11628 -- Contexts always start with "Context_" but the subname
11629     "xxxx" in this case will work as well.
11630
11631new feature: RESUME with arguments is synonymous with RESTORE
11632
11633new feature: Better idea for THROW:
11634    throw "this is an error"
11635    throw x
11636 -- that is, throw is like PRINT, not LABEL
11637
11638bug fix: applet language localization skipping translations containing \"
11639bug fix: application language localization does not include defs defined for JmolApplet
11640bug fix: JSpecView/JSME connection with simulated and ACD/Labs annotated spectra
11641bug fix: JSpecView loading simulation now compatible with synced applets
11642bug fix: drag/drop not working for JSV applet
11643bug fix: solid-state NMR calc (Magres) should not apply "nearest-atom-only"
11644  algorithm for measure ALL in dipolar coupling measurements
11645bug fix: state contains:  zap;load /*data*/ data "append inline"
11646bug fix: zoomto without time goes over 2 seconds, not 1 second
11647bug fix: print "id" + "x"   fails (back to 13.2 at least)
11648bug fix: animFrameCallback not reporting for each morph
11649bug fix: inline-if fails if not at end of statement
11650 -- Bug goes back to at least 11.8
11651bug fix: Jmol math fix for new . notation.
11652 -- needs testing
11653 -- examples:
11654
11655	-- note that .. notation works with numbers
11656       and in all expressions
11657
11658 	b = [1 2 3 [ 1 2 [1 2 [1 [testing:"here"] 3]]]]
11659	print b..4..3..1
11660	b..2 = 34
11661
11662	b..2..1 = 33
11663	print b..2..1
11664
11665   -- alternative single dot notation also on both sides
11666   -- associative arrays only
11667   -- no numbers here
11668
11669	b = [testing:"here"]
11670	b.testing= 33
11671	print b.testing
11672
11673   -- note that sequential brackets for arrays
11674       work only on the left side of an assignment
11675
11676	b = [ [2] 10 11 ]
11677	b[1][2]= 33
11678	#NOT print b[1][2]  (that's a range)
11679
11680 	b = [1 2 3 [ 1 2 [1 2 [1 [testing:"here"] 3]]]]
11681	b[4][3][3][2].more = "yes"
11682	#NOT print b[4][3]  (that's a range)
11683
11684   -- extends to matrices
11685
11686	b = quaternion()%"matrix"
11687	b[1] = [1 2 3]
11688	b[-1] = [1 2 3]
11689	b[2][3] = 2
11690
11691	-- extends to string
11692
11693	b = "testing"
11694	b[1] = "T"
11695	b[1][3] = "T"
11696	b["t"] = "T"
11697
11698	-- extends to points
11699
11700	p = {3 3 3}
11701	p.x = 10
11702	p.y = 5
11703	p.z = 3
11704
11705	-- extends to bitsets
11706	-- single dots only, not a["color"] or a..color
11707
11708	a = {*}
11709	a.color = "red"
11710	a.property_x = {*}.temperature.all
11711
11712
11713bug fix: state reading broken in most recent version at chemapps
11714bug fix: ++/-- compatibility with no-comma arrays
11715bug fix: print ++b["test"] fails
11716bug fix: ++b["test"] fails
11717bug fix: a[6][8] = "q"  not working correctly when a is a string
11718bug fix: {*}.covalent is misleading in that it is a mix of covalent and ionic bonding
11719  distances. As such, I have replaced it with data at the Blue Obelisk Data Repository
11720  which are from
11721
11722   Pyykk�, P. and Atsumi, M. (2009),
11723   Molecular Single-Bond Covalent Radii for Elements 1\u2013118.
11724   Chem. Eur. J., 15: 186\u2013197. doi: 10.1002/chem.200800987
11725
11726bug fix: try { ... throw ...} catch {....}   continues through catch when resumed.
11727bug fix: anonymous context   { ..... }   not closed
11728bug fix: JSON of 4x4 matrix (M4) fails
11729bug fix: modelkitmode broken for Java in 14.1.10
11730
11731code: unused obrador package removed from application
11732code: JavaScript org.jmol.modelset->JM, org.jmol.modelsetbio->JMB
11733code: org.jmol.util.Quaternion moved to javajs.util.Quat
11734code: Refactoring of script.ScriptEvaluator to make it more manageable:
11735
11736   * ScriptEval               -- entry point and script command code
11737   *
11738   *   extends ScriptExpr     -- expression parsing
11739   *
11740   *     extends ScriptParam  -- parameter parsing
11741   *
11742   *       extends ScriptError -- error handling
11743   *
11744   *   scriptext.CmdExt       -- optionally loaded, less-used commands
11745   *   scriptext.MathExt      -- optionally loaded, less-used functions
11746   *   scriptext.SmilesExt    -- optionally loaded methods for cmds and math
11747
11748code: faster CONNECT [{...}] process for specified bonds
11749
11750JmolVersion="14.1.10"
11751JmolVersion="14.1.10_2014.02.20"
11752
11753new feature: THROW command
11754 -- accepts unquoted string or @x simple variable substitution
11755 -- examples:
11756      throw this is an error
11757   or
11758      x = "this is an error"
11759      throw @x
11760   resulting in:
11761      	this is an error
11762	----line 3 command 3 of try:
11763         throw >> "this is an error" <<
11764	----line 10 command 1 of t.spt:
11765         end
11766	----
11767         script "t.spt"
11768
11769
11770JmolVersion="14.1.10_2014.02.19"
11771
11772bug fix: color atoms formalcharge not saved in state
11773bug fix: averageAtomPosition never updated.
11774bug fix: load of model with one atom does not set center to that atom
11775bug fix: ==/!= comparison not appropriate for arrays or strings
11776 -- string/string comparison should be case sensitive, but wasn't
11777    -- (you can use x %9999 == y %9999 to force no-case comparison)
11778 -- array/array comparison should be element by element and exact
11779 -- assoc.array/assoc.array should be key/value by key/value and exact
11780 -- int/decimal comparison should be simply numerical, always
11781 -- decimal/decimal comparison should be able to be done without the < 1e-6 cutoff
11782    -- you can now use [x] == [y] for exact numerical comparison
11783 -- string/int and string/decimal comparison should also only be outside of arrays
11784 -- all approximations for type1/type2 should be only outside the context of arrays
11785
11786bug fix: array/string assignment broken in 14.1.9
11787 -- a[2] = ...
11788 -- a["testing"] = ...
11789
11790bug fix; HTML5 popup frank mini-menu not implemented
11791bug fix: HTML5 popup menu checkboxes not turning off
11792bug fix: zap <model Number> or zap {atom expression} broken
11793  -- does not affect ZAP command without parameters
11794
11795JmolVersion="14.1.9"
11796JmolVersion="14.1.9_2014.02.18"
11797
11798bug fix: recently released 14.0.8 introduced a math bug that caused
11799  y = "test" + x.f() to be evaluated as ("test" + x).f()
11800bug fix: long-time multiple unary minus bug (at least 6 years!)
11801  that print 3 +(- -3) evaluates to 0, not 6.
11802
11803new feature: WRITE "filename" AS type
11804 -- allows setting type at end of WRITE command using AS
11805 -- for example:
11806
11807     write "t.png" as PNGJ
11808
11809 -- meant only for very simple production; no additional parameters.
11810 -- all parameterized cases must use standard notation
11811      write PNGJ 300 300 "t.png"
11812
11813
11814JmolVersion="14.1.8_2014.02.17"
11815
11816bug fix: JSpecView issues with navigating through spectra
11817bug fix: PyMOL reader multiple bond view
11818bug fix: popup menu fixes
11819bug fix: bond/draw/isosurface picking broken
11820bug fix: [1 -5 6 -2] gives [1 (-5+6-2)] instead of [1 -5 6 -2]
11821
11822bug fix: set defaultLoadScript "{0 0 0}" actually sets that to {1 1 1}
11823 -- goes way way back to early Jmol math where there were no point-type variables
11824bug fix: PyMOL reader update for Version 1700 lacking setting 83.
11825bug fix: -m option not working with Jmol.jar
11826
11827bug fix: PNGJ files within ZIP collections not being read.
11828 -- full PNGJ models can be extracted from MS Word .docx files.
11829 -- for example:
11830     show file "t.docx"
11831		[Content_Types].xml
11832		_rels/.rels
11833		word/_rels/document.xml.rels
11834		word/document.xml
11835		word/media/image1.png
11836		word/theme/theme1.xml
11837		word/settings.xml
11838		word/webSettings.xml
11839		docProps/core.xml
11840		word/styles.xml
11841		word/fontTable.xml
11842		docProps/app.xml
11843    load t.docx|word/media/image1.png
11844
11845new feature: JSmol Info.z, Info.zIndexBase
11846bug fix: tensor("efg", "value") should return sparce array, not dense for missing tensors
11847bug fix: JSmol now allows writing POVRAY, MAYA, IDTF, VRML, etc.
11848         both from Java and from HTML5
11849code: reworking of export classes
11850bug fix: label @{math expression...} not working
11851bug fix: interpretation of x and @x in select commands and {...} phrases
11852 -- Variable substitution has been unintuitive and inconsistent.
11853     For instance:
11854
11855     x = "C or T"
11856
11857     select @x  -- works fine
11858     print {@x} -- fails
11859
11860     The problem is the use of @ to reference the variable NAMED BY another
11861     variable within a math expression (print context) but not a select context.
11862     For instance:
11863
11864     y = 3
11865     x = "y"
11866     print x  --> "y"
11867     print @x --> 3
11868
11869     Such referencing is important for math expressions, but the
11870     extension of this to atom expressions is not necessary and
11871     not generally useful.
11872 -- The current situation is as follows:
11873
11874     x = "A or T"
11875     select @x   --> all A and T groups
11876     print {@x}  --> nothing (because @x is "the contents of the variable 'A or T'")
11877
11878 -- This fix simplifies the situation by not allowing variable-variable
11879     referencing within atom expressions bounded by braces, just like
11880     within implicit atom expression commands (select, display, hide, delete, etc.).
11881 -- The result is much more consistent. The following do exactly what
11882     you think they would do:
11883
11884     x = "A or T"
11885     select @x
11886     print {@x}
11887
11888 -- The current way of doing this, by defining a temporary atom
11889     expression using the DEFINE (or @) command still works:
11890
11891     x = "A or T"
11892     @y @x
11893     select y       same as    select @x
11894
11895 -- Note that the difference between "select x" and "select @x"
11896     may be significant:
11897
11898     ala = "cys"
11899
11900     select ala  --> selects all alanines
11901     select @ala --> selects all cysteines
11902
11903
11904
11905code: way more efficient for loop -- loop overhead decreased by > 80%
11906bug fix: for(i in ...) does not exit when i is assigned a value, as per documentation
11907bug fix: for(x in ...) command broken and also quite inefficient.
11908
11909
11910JmolVersion="14.1.8_dev_2014.02.06"
11911
11912new feature: set cartoonRibose
11913 -- draws in ribose rings, with facets showing puckering
11914 -- connects via C4'-C5'-O5'-P explicitly
11915 -- shows C3'-O3' for reference.
11916 -- disables cartoonBaseEdges (Leontis-Westhof Edges)
11917 -- disabled by SET cartoonBaseEdges ON
11918 -- suggested by Rick Spinney, Ohio State
11919
11920new feature: anim frame [a,b,c,d] works with negative numbers to indicate ranges:
11921  -- anim frame [1, -5, 10, -6] --> [1,2,3,4,5,10,9,8,7,6]
11922  -- read as "1 through 5 and then 10 through 6"
11923
11924new feature: Tinker file reader (and FoldingXYZ reader upgrade)
11925  -- see http://dasher.wustl.edu/tinker/
11926  -- Can use Tinker:: but this is only required if first line is JUST an atomCount
11927  -- accommodates older Tinker format with n-1 atoms for atomCount
11928  -- allows for trajectories and desired model number
11929
11930new 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)....]
11931
11932new feature: x = compare({atomset1}, {atomset2}, "MAP")
11933new feature: x = compare({atomset1}, {atomset2}, "MAP", "all")
11934new feature: x = compare({atomset1}, {atomset2}, "MAP", "best")
11935new feature: x = compare({atomset1}, {atomset2}, "MAP", "H")
11936new feature: x = compare({atomset1}, {atomset2}, "MAP", "allH")
11937new feature: x = compare({atomset1}, {atomset2}, "MAP", "bestH")
11938 -- generates one or more correlation lists based on non-aromatic SMILES
11939 -- optionally includes H atoms
11940 -- optionally generates all possible atom mappings
11941 -- returns int[][] = [ [a1 b1],[a2 b2],[a3 b3],... ]
11942    where an and bn are integer atom indices
11943    or list<int[][]> when "all" option is chosen.
11944 -- the following will generate one atom correlation
11945     map for two structures including hydrogen atoms:
11946		load files "a.mol" "b.mol"
11947		x = compare({1.1} {2.1} "MAP" "H")
11948    (useful for 2D/3D model atom matching)
11949 -- the following compares the model of caffeine from NCI to that from PubChem:
11950		load $caffeine;load append :caffeine;frame *
11951		select 2.1; label %[atomIndex]
11952		compare {1.1} {2.1} SMILES rotate translate
11953		x = compare({1.1}, {2.1}, "MAP" "bestH")
11954		for (a in x) {a1 = a[1];a2=a[2];select atomindex=a1;label @a2}
11955
11956new feature: compare {model1} {model2} SMILES
11957 -- no need to give SMILES; Jmol can generate it from {model1}
11958
11959new feature: x = {*}.find("SMILES", "H")
11960 -- generates SMILES with explicit H atoms
11961
11962bug fix: substructure() function using SMILES instead of SMARTS, so only full structures;
11963bug fix: better error trapping and messages in SMILES-related methods
11964bug fix: make webexport discovery of path to Jmol.jar and jsmol.zip more robust.
11965bug fix: getProperty extractModel not honoring subset
11966bug fix: set pdbGetHeader TRUE does not capture REMARK3 REMARK290 REMARK350
11967bug fix: getProperty("JSON",....) should wrap value in {value:...}
11968bug fix: MO persistent translucency broken in 11.x
11969bug fix: show MENU  write MENU  load MENU all broken in 12.2
11970bug fix: {*}[n] should be empty if nAtoms <=n
11971bug fix: abinit reader was nonfunctional
11972bug fix: assign atom into into PDB file loses atom names
11973bug fix: y = ([3])[1][1]  should be [3] not 3
11974bug fix: break n nonfunctional
11975bug fix: format() and label() functions limited to 4 arguments; should be unlimited
11976bug fix: errors in paths to js code in web export templates.
11977
11978code: JSmol: applying atom mapping between mol2D and mol3D for viewSets
11979code: refactoring to enable SWING in JavaScript for all menus
11980code: methods from jcampdxReader extracted to org.jmol.jsv.JDXMOLParser
11981code: reader overhaul for setting atom coordinates in a consistent fashion
11982
11983
11984JmolVersion="14.1.7"
11985
11986JmolVersion="14.1.7_dev_2014.01.20"
11987
11988  bug fix: 14.0.6 fatally bugged -- unitcell and echo rendering, getProperty
11989
11990JmolVersion="14.1.6"
11991
11992bug fix: translucent geosurface was turned off;
11993
11994JmolVersion="14.1.6_dev_2014.01.19"
11995
11996bug fix: Jmol2.js should have commented lines in Jmol.Info but does not
11997bug fix: JSpecView cannot close "Options...Show Header" panel in HTML5
11998bug fix: select visible not right after this sequence:
11999
12000  load $C\C=C\CC
12001  select _C
12002  wireframe off
12003  spacefill off
12004  display !_H
12005  select visible // 5  (but nothing is showing)
12006
12007bug fix: for (a in {displayed}) { a.property_x = 3 } construction fails
12008bug fix: FireFox browser in mode to open files in new tabs in the background
12009         fails to load second applet of a page unless Jmol.__execDelay is more than 55 ms
12010         and the user specifically right-clicks a link to open a page in a new tab.
12011bug fix: write ....?POST? fails
12012bug fix: getproperty broken in 14.1.6_dev_2014.01.15
12013bug fix: GETPROPERTY command and function can return SV.toString() rather than property escaped value
12014bug fix: getProperty for certain arrays returns string "[object Array]"
12015bug fix: Jmol2.js not working when there is no jmolInitialize()
12016bug fix: _DirectDatabaseCalls not including NMR prediction site
12017bug fix: reading of *co*mmensurately modulated structures (e.g. Lilianite) working
12018bug fix: wrong name for coverimage in WebExport.
12019
12020code: refactored matrix classes javajs.util.M34/M3/M4
12021code: JSpecView upgrade includes
12022 -- operational applet from jnlp
12023 -- append options from menus
12024 -- file helper for local files using load ?
12025 -- file helper for URL using load http://?
12026 -- file helper for simulation using load $?
12027 code: reader refactoring isolates symmetry aspects
12028
12029update: images and instructions for WebExport
12030
12031JmolVersion="14.1.5"
12032JmolVersion="14.1.5_dev_2014.01.09"
12033
12034bug fix: LCAOCartoon translucency broken
12035bug fix: translucent backbone broken
12036bug fix: pqr,p2n readers broken
12037bug fix: isosurface map property xxx can fail if surface is a
12038         fragment that (somehow) has a point not associated with
12039         an underlying atom.
12040
12041
12042
12043JmolVersion="14.1.4"
12044JmolVersion="14.1.4_dev_2014.01.05"
12045
12046bug fix: PDB byChain, bySymop not supported.
12047
12048//TODO: Add BSPF for symmetry distance checking in AtomSetCollection to speed special-position checking
12049
12050new feature: {xxx}.distance.all({yyy})  returns float[][] of values
12051
12052new feature: expanded unit cell ijk notation:
12053   -   111 - 1000 --> center 5,5,5; range 0 to 9 or -5 to +4
12054   -   1000000 - 1999999 --> center 50,50,50; range 0 to 99 or -50 to +49
12055   -   1000000000 - 1999999999 --> center 500, 500, 500; range 0 to 999 or -500 to +499
12056
12057JmolVersion="14.1.3"
12058JmolVersion="14.1.3_dev_2013.12.29"
12059
12060new feature: filter "MODCELL=x"
12061 -- incommensurate composite readers Jana2006 and CIF
12062 -- sets base cell to specified subsystem
12063
12064new feature: MSCIF reader now allowing up to d=10; was d=6
12065
12066new feature: escape pressed cancels pending measurement
12067
12068new feature: {xxx}.getProperty("yyy")
12069 -- only for FIRST atom
12070 -- returns getProperty("atomInfo.yyy", {xxx})[1] (not xxx.yyy.all)
12071
12072new feature: unitcell {atomset}
12073 -- unit cell based on first atom of atom set.
12074 -- canceled by any unitcell {none}
12075     or other unitcell command other than on/off and width
12076
12077new feature: altloc set for msCIF _atom_site_subsystem_code
12078 -- sets % and also configuration
12079 -- prevents covalent bonding between subsystems
12080
12081new feature: select ON ; select OFF
12082 -- same as selectionHalos ON/OFF
12083 -- deprecates selectionHalos command
12084
12085new feature: atomSet1.distance.min(atomSet2, TRUE)
12086new feature: atomSet1.distance.min(point, TRUE)
12087new feature: atomSet1.distance.max(atomSet2, TRUE)
12088new feature: atomSet1.distance.max(point, TRUE)
12089 -- returns single closest/furthest atom in atomSet1 from point or atomSet2
12090
12091bug fix: incommensurate composite structures not packed into unit cell properly
12092bug fix: incommensurate composite structures - wrong unit cell for d > 1
12093bug fix: if load "" fails, last file name is lost
12094bug fix: print a (operator) b not processing string parameter B consistently across operators
12095bug fix: composite structures reading for JANA2006 M50/M40 files
12096bug fix: capture time slightly off; needs 50 ms addition. This may vary with rendering speeds.
12097bug fix: CIF reader goes into molecular mode even if geom_bond block is all "? ? ? ? ?"
12098bug fix: n-d incommensurate modulated composite structures (preliminary testing)
12099bug fix: getProperty  atomInfo broken for modulated atoms
12100bug fix: x.distance.min(y) broken
12101
12102code: generic javajs.util.Matrix class added based on Jama code for inversion using L/U decomposition
12103
12104JmolVersion="14.1.2"
12105JmolVersion="14.1.2_2013.12.13"
12106
12107new feature: JavaScript: JSmol api Jmol.evaluateVar(applet, expression)
12108 -- better than Jmol.evaluate because result is a JavaScript variable, not a string.
12109 -- DEPRECATING JSmol api Jmol.evaluate(applet, expression)
12110
12111new feature: getProperty("JSON", ....)
12112 -- returns JSON code for property
12113 -- allows JavaScript: x = Jmol.getPropertyAsArray("variableInfo","some expression")
12114
12115new feature: getProperty variableInfo  <expression>
12116 -- allows retrieval of variables in Java or JSON format
12117 -- evaluates expression
12118 -- defaults to "all"
12119
12120new feature: modulation adjustable by q and t, up to d=3
12121    // modulation on/off  (all atoms)
12122    // moduation {atom set} on/off
12123    // modulation int  q-offset
12124    // modulation x.x  t-offset
12125    // modulation {t1 t2 t3}
12126    // modulation {q1 q2 q3} TRUE
12127
12128new feature: pickedList -- ordered array of recently picked atoms
12129 -- can be used the same as the PICKED variable,
12130     but that is ordered sequentially, not temporally
12131 -- twice clicking off structure clears the list
12132 -- @{pickedList}[0] last-picked atom
12133 -- @{pickedList}[-1] next-to-last-picked atom
12134 -- @{pickedList}[-1][0] last two picked atoms
12135
12136new feature: array.pop(), array.push()
12137 -- similar to JavaScript
12138 -- for example:
12139     a=[];a.push("testing");print a.pop()
12140
12141    // create a distance t-plot
12142
12143    at = [] // t points
12144    am = [] // distance measurements
12145
12146    var p1 = a.modulation(1e10)[1]
12147    var p2 = a2.modulation(1e10)[1]
12148    for (var i = 0; i <= 50; i++) {
12149      var t = i / 50.0;
12150      at.push(t);
12151      var b1 = a.modulation(t)[1];
12152      var b2 = b.modulation(t)[1];
12153      var m = distance((p1 + b1).xyz, (p2 + b2).xyz);
12154      am.push(m);
12155    }
12156    d = at.add("\t", am)
12157
12158new feature: modulation scale x.x
12159new feature: caption "xxxxx" x.x -- number of seconds to run
12160new feature: modulation 0.2  // sets t-value
12161
12162new feature: select ON/OFF atom-set
12163 -- turns selection halos on or off as well as doing the selection
12164 -- convenience only
12165 -- for example:
12166
12167  select on _O2
12168  select off *
12169
12170new feature: pt1.mul3(pt2)
12171 -- returns {pt1.x*pt2.x, pt1.y*pt2.y, pt1.z*pt2.z}
12172 -- if both are not points, reverts to simple multiplication
12173
12174new freature: array.mul3(pt2)
12175 -- applies mul3 to all elements of array
12176
12177new feature: {atomset}.modulation(type, t)
12178 -- delivers P3 (displacement modulation)
12179 -- implemented only for type="D" (optional)
12180 -- optional t is 0 by default
12181 -- if t is missing, the unmodulated displacement is returned
12182
12183bug fix: modulation not distinguishing between q and t;
12184bug fix: modulated measurements not working
12185
12186bug fix: not skipping set defaultLattice "{NaN NaN NaN}"
12187bug fix: isosurface map atomic orbital fails
12188
12189bug fix: vibrational display of modulation with distances doesn't update
12190bug fix: vibration off causes unnecessary warning in console
12191bug fix: draw symop broken
12192
12193bug fix: array.mul(matrix3f) crashes Jmol
12194
12195bug fix: select symop=1555 broken
12196bug fix: set picking dragSelected  not working
12197
12198code: refactored CifReader, separating out MMCifReader and MSCifReader
12199
12200code: minor renaming/refactoring of methods in SV
12201
12202code: adds javajs.api.JSONEncodable interface
12203 -- super-simple implementation in org.jmol.script.SV
12204 -- allows implementations of javajs to deliver custom JSON results
12205
12206JmolVersion="14.1.1_2013.12.04"
12207JmolVersion="13.3.9_dev_2013.12.04"
12208
12209
12210new feature: Jmol._j2sLoadMonitorOpacity  (default 55)
12211
12212new feature: load() function, as in print load("xxx"), limited local file reading in applet:
12213 -- no root-directory files
12214 -- no files without extension
12215 -- no files with any "/." in path
12216
12217new feature: JAR files securely signed
12218
12219new feature: applet JAR files include JNLPs (Java Network Launch Protocols) for local file loading
12220
12221new feature: JSmol URL options _USE=  _JAR=  _J2S=  overrides for Info data
12222
12223new feature: (was present but undocumented) print quaternion([array of quaternions])
12224 -- returns spherical mean a la Buss and Fillmore (http://www.math.ucsd.edu/~sbuss/ResearchWeb/spheremean/)
12225
12226new feature: print quaternion([array of quaternions], true)
12227 -- returns standard deviation for spherical mean a la Buss and Fillmore (http://www.math.ucsd.edu/~sbuss/ResearchWeb/spheremean/)
12228 -- units are angular degrees
12229
12230new feature: named quaternion modulus values
12231 -- print quaternion(1,0,0,0)%"matrix"
12232 -- options include w x y z normal eulerzxz eulerzyz vector theta axisx axisy axisz axisangle matrix
12233
12234new feature: set celShadingPower
12235 -- sets strength of cel shading
12236 -- integer values
12237 -- default 10 is a thick line
12238 -- 5 is a fine line
12239 -- 0 turns cel shading off
12240 -- negative value removes interior shading -- outline only
12241 -- operates on pixel based on normal to light source (power > 0) or user (power < 0)
12242 -- sets color to background contrast (black or white) when
12243         normal_z < 1 - 2^-(|celShadingPower|/10)
12244
12245new feature: mmCIF reading reports _citation.title in Jmol scripting console
12246
12247new feature: minimize SELECT {atomset} ONLY
12248 -- ONLY option excludes all other atoms
12249
12250new feature: minimize {atomset}
12251 -- implicit SELECT and ONLY
12252
12253new feature: "extensions" directories in JSmol for contributed JS and SPT scripts
12254 -- jsmol/js/ext
12255 -- jsmol/spt/ext
12256
12257new feature: load ... filter "ADDHYDROGENS"
12258 -- local set pdbAddHydrogens just for one load command
12259
12260new feature: compare {1.1} {2.1} BONDS SMILES
12261
12262new feature: list = compare({atomset1} {atomset2} "SMILES" "BONDS")
12263new feature: list = compare({atomset1} {atomset2} SmartsString "BONDS")
12264
12265new feature: write JSON  xxx.json
12266
12267new feature: [#210] JSON {"mol":...} reader
12268 -- example (penicillin; no actual line breaks)
12269     {"mol":{
12270      "_is2D":false,
12271      "_scale":{"x":1,"y":1,"z":1},
12272      "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}],
12273      "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}]
12274    }}
12275 -- is2D will trigger minimization
12276 -- scale indicates overall scaling present in the "a" records
12277
12278new feature: set particleRadius
12279  -- global radius for atoms over the max radius value (16.0)
12280  -- defaults to 20.0
12281
12282new feature: CIF and PDB filters "BYCHAIN" and "BYSYMOP" for virus particulation
12283 -- creates just one atom per chain or per symop
12284 -- size can be scaled larger than the max of 16 Angstroms using, for example:
12285  	   set particleRadius 30;
12286       spacefill 30; // any number over 16 here uses particleRadius instead
12287
12288new feature: symop() function allows symmetry from biomolecule filter for PDB and mmCIF
12289
12290new feature: isosurface SYMMETRY
12291 -- applies symmetry operators to isosurface
12292 -- more efficient rendering and creation
12293 -- default selection is {symop=1} only
12294 -- default coloring is to color by symop based on propertyColorScheme
12295 -- example:
12296	load 1stp filter "biomolecule 1"
12297	color property symop
12298	isosurface sa resolution 0.8 symmetry sasurface 0
12299
12300new feature: new atom property: chainNo
12301 -- sequentially from 1 for each model;
12302 -- chainNo == 0  means "no chain" or chain = '<space>'
12303
12304new feature: new propertyColorScheme "friendly"
12305 -- color-blindness-friendly color scheme
12306 -- used at RCSD
12307 -- example:
12308
12309      set propertyColorScheme "friendly"
12310      color {chainNo > 0} property chainNo
12311
12312new feature: JSpecView completely Java-free; includes 2D nmr and PDF printing of spectra
12313
12314new feature: WRITE PDF <width> <height> <quality> "xxx.pdf" quality > 1 requests landscape mode
12315 -- uses efficient custom PDF creation classes
12316 -- sizes image to fit if too large
12317
12318new feature: JSpecView adds PDF and 2D NMR for JavaScript
12319
12320new feature: load "==xxx" FILTER "NOIDEAL"
12321 -- chemical component load from PDB using the "nonideal" coordinate set
12322
12323bug fix: write CD removed; ChemDoodle has changed formats; use JSON instead
12324bug fix: PDB and CIF files indicated assemblies such as PAU as large negative number
12325bug fix: COMPARE with no rotation starts infinite loop
12326bug fix: looping problem with delay(-1)
12327bug fix: Mouse wheeling for Chrome in JavaScript
12328bug fix: JavaScript popup menu fix for language changes
12329bug fix: JavaScript core components not being processed; Jmol._debugCode not recognized
12330bug fix: unitcell offset incorrectly for biomolecules; origin incorrect for axes.
12331bug fix: isosurface/mo FRONTONLY broken
12332bug fix: language localization broken in JavaScript
12333bug fix: ADF reader not reading MO output from DIRAC Build 201304052106
12334bug fix: Safari reports yellow Jmol info instead of asking to accept applet
12335 -- <object> tag needed to be <applet>
12336bug fix: CIF reader not handling _pdbx_struct_assembly_gen.assembly_id properly
12337 -- wrong atom set for load =3fsx.cif filter "ASSEMBLY 1"
12338bug fix: [#558 Compatibility issue with ChemDoodle]  JSmol error in definition of Number.toString()
12339bug fix: mouse wheel not working properly
12340bug fix: JavaScript J2S compiler error does not coerce int += float to integer
12341bug fix: JavaScript WEBGL option broken
12342bug fix: JavaScript NMRCalculation does not access resources
12343bug fix: JavaScript stereo not implemented
12344bug fix: MOL reader fix for multiple-model file (just 13.3.9_dev)
12345bug fix: MOL reader error with load APPEND -- does not continue atom numbers
12346bug fix: CIF modulation reader not reading linear combinations of cell wave vectors
12347bug fix: CIF reading with filter "BIOMOLECULE 1" fails if only the identity operation
12348bug fix: mmCIF reader not reading all _pdbx_struct_assembly_gen.oper_expression options
12349bug fix: PDB CRYST entry 1.0 1.0 1.0 90 90 90 should mean "no unit cell" regardless of biomolecule filter
12350bug fix: isosurface slab <percent> not adapting well for flat molecules such as HEM
12351bug fix: print userfunc() may fail (userfunc() by itself is fine)
12352bug fix: within(helix) not implemented for C-alpha-only polymers
12353bug fix: _modelTitle not updated when a new file is loaded or zapped
12354bug fix: {*}.symop.all not delivering symmetry operator appropriately
12355bug fix: for triple bond in SMILES in URLs
12356bug fix: build.xml missing PDF creation classes
12357bug fix: [#554] for
12358  load http://sourceforge.net/p/jmol/code/18631/tree/trunk/Jmol-datafiles/xyz/3structs.xyz?format=raw;
12359  zap model!=1.1;
12360bug fix: following Java update, adding proper path check for local signed applet
12361bug fix: {xxx}.property_xx not saved in state (broken 8/7/2013 rev 18518)
12362bug fix: Manifests updated for signed and unsigned applet JAR files
12363bug fix: write <type> <filename> fails
12364bug fix: applet scriptWait() method broken
12365bug fix: PyMOL session may display unit cell after read from saved state
12366bug fix: MMCIF reader fails for multiple assembly types
12367bug fix: CIF reader "biomolecule 1" translating to "molecular" rather than "assembly"
12368bug fix: load trajectory with multiple files not working
12369bug fix: JS applet popup menu not closing properly upon language change
12370bug fix: HTML checkbox id attribute not assigned
12371
12372
12373code: refactoring of applet/appletjs code; org.jmol.util.GenericApplet
12374code: refactoring, simplification of buffered readers and buffered input streams.
12375code: JavaScript refactoring, better build_...xml
12376code: JavaScript Integer, Long, Short, Byte, Float, Double all reworked
12377code: disambiguation of GT._
12378code: Refactored all unnecessarily inner classes to top level
12379code: isolated util/ModulationSet using api/JmolModulationSet
12380code: All applet language localization read from plain .po files
12381 -- as for JavaScript already
12382 -- no need to compile class files for applet languages
12383 -- no language .jar files
12384 -- new jsmol/idioma directory holds .po files for both Java and HTML5
12385code: faster isosurface rendering adding implicit "frontonly" with select {xxx} ONLY
12386code: faster isosurface rendering with implicit "isosurfacepropertySmoothing FALSE" in relevant (integer) cases
12387code: JmolBinary.getBufferedReaderForResource()
12388 -- consolidates all references to URL.getContent() and Class.getResource()
12389code: JavaScript work around for inner class problem with variable name reassignment
12390code: work-around for eval(functionName) not working in JavaScript.
12391code: experimenting with ambient occlusion
12392code: Required manifests added for Java Ju51 (January, 2014).
12393code: JmolOutputChannel moved to javajs.util.OutputChannel
12394code: jsmol.php fixed to allow " in saveFile method
12395code: refactoring Parser into javajs.util
12396code: DSSP moved to org.jmol.dssx, reducing JSmol bio load by 20K
12397code: iText package jettisoned, no longer nec, as I wrote my own PDF creator
12398
12399
12400JmolVersion="13.3.7"
12401
12402code; JavaScript comparison, 13.2.7 with 13.3.7.
12403
12404module		           13.2.7	  13.3.7	  dBytes       %
12405
12406core.z.js*		      781,122	 582,590	-198,532	  75
12407corebinary.z.js		   10,958	  10,852	    -106	  99
12408corebio.z.js		  199,251	 199,249	      -2	 100
12409coreconsole.z.js  	   13,421	  13,421           0	 100
12410coremenu.z.js		  105,606	 107,832	   2,226	 102
12411coremin.z.js		  113,754	 113,938	     184	 100
12412coreprop.z.js		   28,601	  28,918	     317	 101
12413corepymol.z.js	      153,236	 153,271	      35	 100
12414corescript.z.js*	  430,832	 339,062	 -91,770	  79
12415corescript2.z.js	  			 159,078	 159,078
12416coresmiles.z.js		   90,317	  90,317	       0	 100
12417corestate.z.js		   60,478	  49,667	 -10,811	  82
12418coresurface.z.js	  271,642	 271,535	    -107	 100
12419coresym.z.js		  129,456	 129,529	      73	 100
12420coretext.z.js		  			  46,033	  46,033
12421corezip.z.js		  163,080	  92,476	 -70,604	  57
12422
12423*core+scripting		1,211,954	 921,652    -290,302	  76
12424TOTAL       		2,551,754  2,387,768	-163,986	  94
12425
12426JmolApplet0.jar		1,034,203  1,044,111
12427JmolApplet.jar    	2,757,469  2,766,400
12428
12429JmolVersion="13.3.7_dev_2013.10.01"
12430
12431bug fix: Crystal reader not applying lattice translations
12432bug fix: translations incomplete
12433bug fix: state saving of echo "bottom left" instead does "top left"
12434bug fix: multiple-file crystal structures may fail to load if there is a lattice shift
12435bug fix: space group not being calculated automatically for user-defined space groups
12436bug fix: measures broken
12437
12438code: further consolidation:
12439 --                        uncompressed(former)     gzipped
12440 -- JSmol.min.nojq.js          134K                  38K
12441 -- core.z.js                 1583K(1781K)          363K
12442 -- corescript.z.js            339K (436K)           83K
12443
12444 -- TOTAL                     2056K(2217K)          484K
12445                             (7% reduction)
12446
12447 -- JmolApplet0.jar           1038K                1005K
12448
12449
12450JmolVersion="13.3.7_dev_2013.09.30"
12451
12452JmolVersion="13.3.6"
12453
12454bug fix: angle measurements can end with "//nanometers"
12455bug fix: first pending measurement loses label
12456
12457JmolVersion="13.3.6_dev_2013.09.27"
12458
12459new feature: adds remote logging for applet and app via http:// and via function for applet using
12460    jmolApplet0._applet.viewer.setLogfile(function(data) {......})
12461
12462new feature compare {1.1} {2.1} BONDS "smiles"
12463 -- does flexible fit based on dihedrals.
12464 -- does internal rotation even if ROTATION TRANSLATION are not given
12465      (considered a possible bug)
12466 -- concatenation of:
12467	   list = compare({1.1},{2.1},"smiles","BONDS")
12468	   rotate branch @list 1
12469   	   compare {1.1} {2.1} SMARTS "smiles" rotate translate
12470
12471   	 so, for example:
12472
12473   load files "$tyrosine" "$lysergamide"
12474   select 1.1; color bonds red
12475   select 2.1; color bonds yellow
12476   sm = "c1ccccc1CCN"
12477   compare {1.1} {2.1} BONDS @sm rotate translate
12478
12479new feature: show BEST ROTATION / show BEST VOLUME (better than undocumented show rotation best, show rotation volume)
12480
12481new feature: set animationMode "ONCE" "LOOP" "PALINDROME"
12482new feature: show animationMode; x = animationMode
12483
12484new feature: CAPTURE command, including ROCK and SPIN
12485   -- application and signed applet only (no JS)
12486   -- creates animated GIF
12487   -- uses ANIMATION FPS to determine play-back rate.
12488    CAPTURE "filename"
12489     -- starts capturing
12490     -- uses ANIMATION MODE to determine looping
12491     -- both PALINDROME and LOOP create looping; ONCE (default) does not
12492    CAPTURE "filename" ROCK x|y|z degrees
12493     -- does a clean rocking of the molecule about one of the three major axes
12494     -- axis and degrees optional; y 5 assumed
12495     -- 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
12496     -- uses LOOP mode
12497    CAPTURE "filename" SPIN x|y|z
12498     -- does a full spin of the molecule about one of the three major axes
12499     -- axis optional; y assumed
12500     -- based on: rotate Y 360 30;delay 15.0;
12501     -- uses LOOP mode
12502    CAPTURE off/on
12503     -- temporarily disables/enables capturing
12504    CAPTURE "" or just CAPTURE
12505     -- end capturing
12506
12507new feature: set drawFontSize // defaults to 14.0
12508
12509FEATURE CHANGE: added bindings: "drag" and "up" -- may affect power users who use BIND command
12510    			new: _center               	CTRL+SHIFT+LEFT+click
12511				new: _reset                	SHIFT+LEFT+double+click
12512
12513				mouse actions include one (each) of:
12514					SINGLE DOUBLE
12515					LEFT MIDDLE RIGHT WHEEL
12516					DOWN DRAG UP CLICK
12517
12518				for example:
12519					SINGLE-RIGHT-CLICK
12520					DOUBLE-LEFT-DRAG
12521
12522				defaults are SINGLE, LEFT, and CLICK
12523
12524    			sequence is always:
12525
12526    				down
12527    				(drag,drag,drag...)
12528    				up
12529    				(click) (only if no drag)
12530
12531    			Any of these actions may be tapped using
12532
12533    				bind "<some mouse action>" "<jmol action or script>"
12534
12535    			Note that adding "+:" to an action
12536
12537	    			bind "<some mouse action" "+:<script...>"
12538
12539    			does not replace the Jmol action, just supplements it.
12540
12541$ show mouse
12542_assignNew            	LEFT+click          	assign/new atom or bond (requires set picking assignAtom_??/assignBond_?)
12543_center               	CTRL+SHIFT+LEFT+click	center
12544_clickFrank           	LEFT+click          	pop up recent context menu (click on Jmol frank)
12545_pickConnect          	LEFT+click          	connect atoms (requires set picking CONNECT)
12546_deleteAtom           	LEFT+click          	delete atom (requires set picking DELETE ATOM)
12547_deleteBond           	LEFT+click          	delete bond (requires set picking DELETE BOND)
12548_depth                	CTRL+SHIFT+LEFT+double+drag	adjust depth (back plane; requires SLAB ON)
12549_dragAtom             	LEFT+drag           	move atom (requires set picking DRAGATOM)
12550_dragDrawObject       	SHIFT+LEFT+drag     	move whole DRAW object (requires set picking DRAW)
12551_dragDrawPoint        	ALT+LEFT+drag       	move specific DRAW point (requires set picking DRAW)
12552_dragLabel            	SHIFT+LEFT+drag     	move label (requires set picking LABEL)
12553_dragMinimize         	LEFT+drag           	move atom and minimize molecule (requires set picking DRAGMINIMIZE)
12554_dragMinimizeMolecule 	LEFT+drag           	move and minimize molecule (requires set picking DRAGMINIMIZEMOLECULE)
12555_dragSelected         	ALT+SHIFT+LEFT+drag 	move selected atoms (requires set DRAGSELECTED)
12556_dragZ                	SHIFT+LEFT+drag     	drag atoms in Z direction (requires set DRAGSELECTED)
12557_navTranslate         	LEFT+drag           	translate navigation point (requires set NAVIGATIONMODE and set picking NAVIGATE)
12558_pickAtom             	LEFT+click          	pick an atom
12559_pickIsosurface       	LEFT+click          	pick an ISOSURFACE point (requires set DRAWPICKING
12560_pickLabel            	LEFT+click          	pick a label to toggle it hidden/displayed (requires set picking LABEL)
12561_pickMeasure          	LEFT+click          	pick an atom to include it in a measurement (after starting a measurement or after set picking DISTANCE/ANGLE/TORSION)
12562_pickNavigate         	CTRL+SHIFT+LEFT+click	pick a point or atom to navigate to (requires set NAVIGATIONMODE)
12563_pickPoint            	LEFT+click          	pick a DRAW point (for measurements) (requires set DRAWPICKING
12564_popupMenu            	CTRL+LEFT+down, RIGHT+down	pop up the full context menu
12565_reset                	SHIFT+LEFT+double+click, MIDDLE+double+click	reset (when clicked off the model)
12566_rotate               	LEFT+drag           	rotate
12567_rotateBranch         	SHIFT+LEFT+drag     	rotate branch around bond (requires set picking ROTATEBOND)
12568_rotateSelected       	ALT+LEFT+drag       	rotate selected atoms (requires set DRAGSELECTED)
12569_rotateZ              	ALT+LEFT+drag, SHIFT+RIGHT+drag	rotate Z
12570_rotateZorZoom        	SHIFT+LEFT+drag, MIDDLE+drag	rotate Z (horizontal motion of mouse) or zoom (vertical motion of mouse)
12571_select               	LEFT+double+click   	select an atom (requires set pickingStyle EXTENDEDSELECT)
12572_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)
12573_setMeasure           	LEFT+double+click   	pick an atom to initiate or conclude a measurement
12574_slab                 	CTRL+SHIFT+LEFT+drag	adjust slab (front plane; requires SLAB ON)
12575_slabAndDepth         	CTRL+ALT+SHIFT+LEFT+drag	move slab/depth window (both planes; requires SLAB ON)
12576_slideZoom            	LEFT+drag           	zoom (along right edge of window)
12577_spinDrawObjectCCW    	LEFT+drag           	click on two points to spin around axis counterclockwise (requires set picking SPIN)
12578_spinDrawObjectCW     	SHIFT+LEFT+drag     	click on two points to spin around axis clockwise (requires set picking SPIN)
12579_stopMotion           	LEFT+double+click   	stop motion (requires set waitForMoveTo FALSE)
12580_swipe                	LEFT+drag           	spin model (swipe and release button and stop motion simultaneously)
12581_translate            	CTRL+ALT+LEFT+drag, CTRL+RIGHT+drag, SHIFT+LEFT+double+drag, MIDDLE+double+drag	translate
12582_wheelZoom            	WHEEL               	zoom
12583
12584bug fix: JSON NIO port SYNC broken
12585bug fix: print getProperty("image", "width=200;height=300;type=png") not working
12586
12587bug fix: write IMAGE "t.png" not working
12588bug fix: rotate -10 -10 not working
12589
12590bug fix: mouse bindings not distinguishing DOWN/CLICK/DRAG/UP properly
12591bug fix: mouse bindings _center and _reset not working
12592bug fix: show MOUSE not including user-defined mouse bindings
12593
12594bug fix: chains improperly selected in JSmol/HTML5
12595bug fix: JSmol/HTML5 not allowing drag-drop or file loading from a local drive.
12596bug fix: JSmol/HTML5 not allowing WRITE FILE ?
12597bug fix: JSmol/HTML5 not allowing WRITE xxx.pdb, xxx.mol, etc
12598
12599bug fix: platformSpeed persists	 but appears unreadable after loading a state
12600bug fix: JavaScript version InputStreamReader not processing non-UTF data correctly
12601bug fix: second reading of older PNG files with embedded script fails
12602         due to improper png file caching
12603
12604code: overhaul of image creation methods
12605
12606code: careful attention to core functions yields results in 5% reduction in core download size:
12607 --                        uncompressed(former)     gzipped
12608 -- JSmol.min.nojq.js          134K                  38K
12609 -- core.z.js                 1586K(1781K)          364K
12610 -- corescript.z.js            378K (436K)           95K
12611
12612 -- TOTAL                     2098K(2217K)          497K
12613                             (5% reduction)
12614
12615 -- JmolApplet0.jar           1038K                1005K
12616
12617 -- Thus, the "real" transfer size -- based on server-side gzipping -- is half the size of Jmol/Java.
12618
12619code: continued refactoring of ScriptEvaluator to ScriptExt
12620code: refactoring to isolate LabelToken and Labels from core JavaScript load
12621code: refactoring, simplification of image output and export
12622 -- folders created: org.jmol.image, org.jmol.dialog
12623 -- JpgEncoder, Jpg64Encoder, PngEncoder brought to org.jmol.image
12624     and made subclasses of ImageEncoder
12625 -- PpmEncoder fixed
12626 -- ImageEncoder stripped of all unnecessary ImageConsumer/producer business
12627 -- org.jmol.export.image.ImageCreator and parts of org.jmol.viewer.stateCreator reorganized
12628     into org.jmol.OutputManager, org.jmol.OutputManagerAwt, and org.jmol.OutputManagerJS
12629 -- clipboard functions moved into org.jmol.awt and org.jmol.awtjs2d
12630 -- org.jmol.io.JmolOutputChannel now serves for just about all output needs.
12631
12632
12633code: major simplification and consolidation of file I/O methods, including exporters, using JmolOutputChannel class.
12634code: only FileOutputStream reference is one reference in org.jmol.awt.
12635
12636code: code merge between 13.2 and 13.3   18 Sept 2013
12637code: major clean-up of ActionManager
12638
12639JmolVersion="13.3.5"
12640
12641JmolVersion="13.3.5_dev_2013.09.06"
12642
12643new feature: show NMR taps into NMRDB directly
12644 -- for now, application only
12645
12646bug fix: CRYSTAL reader not allowing vibration for conventional cell
12647bug fix: JavaScript binary for Safari and Opera
12648new feature: strutureModifiedCallback
12649bug fix: ID @id vector  fails
12650
12651JmolVersion="13.3.4"
12652
12653bug fix: select 1-5 broken
12654
12655JmolVersion="13.3.4_dev_2013.08.21"
12656
12657bug fix: JANA2006 reader not processing occupancies
12658  -- read now forced to "PACKED" in order to calculate site multiplicity
12659bug fix: CIF reader not reading _CCDC_GEOM_BOND_TYPE record
12660bug fix: File dialog problems with paths having space
12661bug fix: GAMESS reader not reading energies
12662bug fix: TRY failure in a load command followed by a successful load
12663         having a loadScript will pop past the second TRY and crash Jmol
12664
12665new feature: _logfile  holds full path to logfile
12666
12667code: Incommensurate modulated structure CIF and M50/40 file loading validation
12668 -- includes d=1 and d=2
12669 -- Fourier, sawtooth, crenel
12670
12671bug fix: translation not read from state
12672
12673new feature: set platformSpeed [0 to 10]
12674   -- basically an expanded "set wireframe OFF" with more options
12675   -- only effected during model rotation
12676      (including mouse dragging, spin, vibration, and animation)
12677   -- default value is 10 (all features; no compromises)
12678	--    value >=     enables
12679	         8          antialiasDisplay (and thus, all features)
12680	         7          translucency
12681	         6          meshes (contact, draw, isosurface, MO, pmesh, lcaocartoon, CGO)
12682	         5          cartoons, rockets, trace, ribbon
12683	         4          geosurfaces
12684	         3          ellipsoids
12685	         2          wireframe and balls
12686	         1          none of the above (same as "set wireframeRotation off")
12687	         0          [reserved for "auto"]
12688
12689FEATURE CHANGE: set wireframeRotation expanded
12690
12691new feature: show ROTATION BEST
12692 -- operates on currently selected atoms
12693 -- reports "{quaternion}"
12694
12695new feature: quaternion("best")
12696 -- delivers actual quaternion
12697
12698new feature: show ROTATION VOLUME
12699 -- calculates approximate best box (from 1495 quaternion-based alternatives)
12700 -- reports "<volume> {dx dy dz}"
12701   -- where <volume> is the volume,
12702   -- and {dx dy dz} are the dimensions, where dx > dy > dz
12703
12704new feature: rotate BEST
12705new feature: rotate SELECTED BEST
12706
12707new feature: pop-up menu selection "view...best"
12708
12709bug fix: CIF reader does not find Hall name for space groups
12710
12711bug fix: binding names not included in SHOW MOUSE
12712bug fix: "single" touch can fire double-click
12713bug fix: {x}.tensor() command fails when no atom tensors
12714bug fix: isosurface slab not allowing two different slabs for two diffrent isosurfaces
12715bug fix: set wireframeRotation not working ("inMotion" flag not properly read in Viewer).
12716bug fix: screen repaints were being requested far too frequently
12717
12718	*indicates when a refresh is made (external apps and applets only)
12719
12720	external apps only
12721		via loadInline(List)*
12722		 	createModelSetAndReturnError
12723
12724	openDOM, openReader, openFile, openFiles
12725		via loadModelFromFileRepaint*
12726		 	createModelSetAndReturnError
12727
12728	loadInLine(String) via loadInLineScriptRepaint*
12729	FileDropper (string drop) via openStringInline*
12730		via openStringInlineParamsAppend
12731			createModelSetAndReturnError
12732
12733	external apps, applet only, via loadInline(String[])*
12734		via openStringsInlineParamsAppend
12735		 	createModelSetAndReturnError
12736
12737	script LOAD
12738		via loadModelFromFile
12739		 	createModelSetAndReturnError
12740
12741	script CALCULATE HYDROGENS, PLOT, ZAP (modelkit)
12742		via openStringInlineParamsAppend
12743			createModelSetAndReturnError
12744
12745	script LOAD DATA via loadFileFull and loadInlineScript
12746		openStringsInlineParamsAppend
12747		 	createModelSetAndReturnError
12748
12749new feature: incommensurate modulation of ADPs.
12750new feature: Jana2006 M40/M50 file reading
12751
12752bug fix: set loglevel 6 (debugHigh) not working
12753bug fix: {*}.tensor("", "id") not implemented
12754bug fix: {*}.tensor("") not implemented
12755bug fix: {*}.tensor("adp") fails
12756bug fix: {*}.symmetry fails when space group is P1
12757bug fix: atom tensors lost when merging
12758
12759bug fix: Jsmol menu and console broken in 2013.08.07 when jQuery calls were all moved into JSmolCore.js
12760
12761bug fix: float parser broken in dev_2013.08.07
12762
12763code: reorganization of ScriptEvaluator into two sections, one optional
12764
12765new feature: COMPARE {atoms} [coords]
12766new feature: COMPARE {atoms} ATOMS {subset1} [coords1] {subset2} [coords2] ...
12767
12768new feature: MODULATION command -- for modulated structures
12769 -- operates on currently selected set of atoms
12770 -- MODULATION ON
12771 -- MODULATION OFF
12772 -- MODULATION t
12773   -- sets modulation "t" of selected atoms
12774 -- MODULATION PLAY t1 t2
12775   -- animates a once-through sequence of t from t1 to t2
12776 -- MODULATION FPS x.x  // may be < 1
12777   -- sets speed of animation
12778
12779bug fix: zoom setting lost in state
12780
12781code: incommensurate crystal work -- Uiso, preliminary Uij and subsystems
12782code: incommensurate crystal work -- occupancy Crenel, displacive sawtooths
12783
12784bug fix: shapeInfo not reporting visibility of isosurface
12785
12786code: pdb, cif readers separated into separate packages; p2n, pqr readers with pdb now
12787
12788new feature: Jana2006 reader -- reader for http://jana.fzu.cz/
12789new feature: CIF reader reads incommensurate modulated structures
12790 -- FILTER options include:
12791   -- NOSPECIAL (include special atoms for debugging
12792   -- MODAVERAGE (do not read modulation
12793   -- MODAXES=xyz (select only specific axes -- x, y, and/or z)
12794   -- NOSYM (no symmetry read)
12795
12796code: Even faster float parsing
12797bug fix: filter lost after CENTROID or PACKED load option
12798bug fix: set rangeSelected  not functional
12799
12800new feature: msCIF file reading of incommensurate modulation data as vibration
12801new feature: msCIF file filter "MODAXES=xxx" where xxx = X,XY,XYZ,YZ,etc.
12802new feature: msCIF file filter "MODAVE" gives average structure with vibration vectors.
12803
12804bug fix: minimization can fail after MMFF switches to UFF.
12805bug fix: CIF reader fix for no element given "phenyl1" in ZjzxlegN.cif
12806JSmol: Jmol form moved to end of body
12807JSmol: All $(xx) references moved to JmolCore.js
12808
12809JmolVersion="13.3.3_dev_2013.07.27"
12810
12811code: reconfigured JSmol build no longer needs jsmol/make directory.
12812
12813bug fix: Gaussian cube format changed and not recognized (extra "1" in third line).
12814bug fix: PDB header don't do trim();
12815bug fix: isosuface ID @x ... becomes isosurface ID "@x"
12816bug fix: color chain broken
12817bug fix: rockets with color chain
12818bug fix: filter ":X" broken
12819bug fix: O not 2- in PDB adding hydrogens
12820bug fix: NWChem reader error
12821
12822
12823bug fix: isosurface SLAB TRANSLUCENT 0.x color
12824       -- inherits color of isosurface when color parameter is absent
12825
12826bug fix: JSmol 2-sided surface color problem due to Java2Script miscoding of Number.shortValue()
12827bug fix: PyMOLMeshReader code clean-up.
12828
12829JmolVersion="13.3.2_dev_2013.07.21"
12830
12831bug fix: PyMOL mesh reader broken for EDS files
12832
12833JmolVersion="13.3.1_dev_2013.07.20"
12834
12835bug fix: MMCIF_PDBX structures not being read
12836
12837bug fix: allow PyMOL PSE files reading as part of a set of files, not just by itself
12838
12839bug fix: quaternion plots not synched with originating structure
12840bug fix: 1skt.cif loses secondary structure (MMCIF_PDBX reader needed)
12841
12842new feature: calculate formalCharge
12843
12844bug fix: set showTiming not functional
12845bug fix: set pdbAddHydrogens does not set formal charge on O(1-) or "O" of H2O (2-)
12846bug fix: PNGJ files not properly caching, and PSE files with DOCACHE option
12847
12848JmolVersion="13.3.0"
12849JmolVersion="13.1.19_dev_2013.07.18"
12850
12851new feature: set exportScale x.x
12852 -- adjusts export scale
12853 -- only implemented for VRML and X3D exporters
12854new feature: unitcell center {atomset}
12855new feature: unitcell center {fx fy fz}
12856new feature: {*}.ms, {*}.cs %[ms] %[cs] magnetic shielding and chemical shift
12857new feature: label <color red>xxx</color>
12858new feature: set shift_H xxx  (ppm)
12859new feature: getProperty("nmrInfo")
12860new feature: NMR analysis tools:
12861 -- x = measure({a} {b} "isc_hz") -- J coupling
12862 -- x = measure({a} {b} "dc_khz") -- dipolar constant
12863 -- MEASURE {a} {b} "2://dc_hz" -- dipolar constant
12864 -- MEASURE {a} {b} "2:%3.2VALUE//dc_khz" -- dipolar constant
12865 -- MEASURE {a} {b} "2://khz" -- defaults to dc_khz
12866 -- MEASURE {a} {b} "2://hz" -- defaults to isc_hz
12867 -- MEASURE {a} {b} "2://isc_1hz"
12868
12869new feature: {xxx}.tensor(type,what)
12870 -- type = "temp", "ms", "efg", etc.
12871 -- returns a list of data. isc-type returns a list of lists [index1, index2, value]
12872 -- what =
12873    "j" (isc-type only)
12874    "chi" (efg only)
12875    "dc" (dipolar coupling constant; type ignored)
12876  	"eigenvalues" float[v1,v2,v3]
12877  	"eigenvectors" P3[V1,V2,V3]
12878  	"value" Float (v3)
12879  	"asymMatrix" Matrix3f
12880  	"symMatrix" Matrix3f
12881  	"isotropy" Float v_iso=(v1 + v2 + v3)/3
12882  	"anisotropy" Float v3 - (v1 + v2)/2
12883  	"asymmetry" Float (v2 - v1)/(v3 - v_iso)
12884  	"eulerzxz" float[]
12885  	"eulerzyz" float[]
12886  	"quaternion" Quaternion
12887  	"indices" float[modelIndex,atomIndex1,atomIndex2]
12888  	"string" selected readable data
12889  	"type"
12890  	anything else -- all key/value pairs
12891
12892new feature: bind "+:<script...>"
12893 -- added "+:" indicates to NOT unbind Jmol action
12894
12895new feature: ellipsoid OPTIONS "xxxx"
12896 -- "xxxx" is a quoted string of options separated by semicolon:
12897      "arcs;arrows;axes;ball;dots;fill;wireframe"
12898      with optional "no" in front of each
12899
12900new feature: SET ECHO POINT {atom or point}
12901 -- allows 2D and 3D echos to have pointers to atoms or points
12902
12903
12904bug fix: set shift_XX not saved in state
12905bug fix: JSmol menu not disappearing upon touch outside menu
12906bug fix: PyMOL surface map reading error
12907bug fix: magres measurement of dipole coupling constants do not reach just min-distance set
12908bug fix: "cs" for Cs symmetry broken in chemicalshift
12909bug fix: cartoons with too small nonzero size will not render anything
12910
12911code: org.jmol.quantum.NMRCalculation smoothly handles J-coupling and dipolar coupling constant display.
12912code: org.jmol.quantum.NMRCalculation implements org.jmol.api.JmolNMRCalculation:
12913  public float getQuadrupolarConstant(Tensor efg);
12914  public float getJCouplingHz(Atom a1, Atom a2, String type, Tensor t);
12915  public float getDipolarConstantHz(Atom a1, Atom a2);
12916  public float getDipolarCouplingHz(Atom a1, Atom a2, V3 vField);
12917  public JmolList<Tensor> getInteractionTensorList(String type, BS bs);
12918  public BS getUniqueTensorSet(BS bs);
12919  public JmolList<Object> getTensorInfo(String tensorType, String infoType, BS bs);
12920  public Map<String, Float> getMinDistances(MeasurementData md);
12921  public boolean getState(SB sb);
12922  public Object getInfo(String sym);
12923
12924JmolVersion="13.1.17_dev_2013.06.27"
12925
12926new feature: CASTEP reader filter option q=all
12927new feature: set picking DRAGLIGAND
12928 -- won't move the protein
12929new feature: CIF reader upgrade to allow multicharacter chain specs.
12930 -- See 1bgl_1bgm.cif
12931 -- automatically switches to chainCaseSensitive if multi-character
12932     or lower-case chains are read in a CIF file.
12933 -- note that in certain cases quotation marks will be needed:
12934		select chain=0123     NOT OK
12935		select :0123          NOT OK
12936		select chain="0123"   OK
12937		select :"0123"        OK
12938		select :"A*" or :"A'" or :'A"' or :"A\""
12939
12940new feature: {atomset1}.distance.min({atomset2})
12941 -- returns an array
12942 -- minimum distance of each atom in atomset1 to any atom in atomset2
12943new feature: {atomset1}.distance.max({atomset2})
12944 -- returns an array
12945 -- maximum distance of each atom in atomset1 to any atom in atomset2
12946
12947note: much of the next compare/branch business was built into a
12948      new COMPARE command for Jmol 13.3.6
12949
12950new feature: list = compare({atomset1} {atomset2} "ccCCN" "BONDS")
12951 -- determines the dihedrals that match atomset1 to atomset2
12952 -- returns arrays of length 6n, list[6n]
12953     which lists six numbers for each dihedral in the comparison set,
12954     including i1 i2 i3 i4 set1value set2value, where i1-i4 are
12955     atom indices, and set1value and set2value are the dihedral angles
12956     in sets 1 and 2, respectively.
12957 -- feeds into the rotate BRANCH @list command
12958
12959new feature: BRANCH @list
12960 -- takes a list of 6n numbers from compare function
12961 -- rotates all dihedrals in the selected atom set to target values concurrently
12962
12963 // application: flexible substructure fit using a SMARTS search
12964
12965   load files "$tyrosine" "$lysergamide"
12966   select 1.1; color bonds red
12967   select 2.1; color bonds yellow
12968   sm = "c1ccccc1CCN"
12969	   list = compare({1.1},{2.1},sm,"BONDS")
12970	   rotate branch @list 1
12971   compare {1.1} {2.1} SMARTS @sm rotate translate
12972   // at this point the two models match almost perfectly among these key atoms.
12973
12974new feature: {1.1}.find("ccCCN", "BONDS")
12975 -- finds the first match in the structure to the given SMARTS string
12976 -- returns an n-length array of 4-length arrays, list[n][4]
12977 -- each list[i] is a set of four atoms in bond-connected order
12978 -- full list comprises all dihedrals in the found set of atoms.
12979
12980new feature: set translucent
12981 -- default TRUE : translucent objects are fully translucent
12982 -- FALSE: translucent objects are opaque to other translucent objects
12983
12984bug fix: CrystalReader broken by recent change to simpleReplace()
12985bug fix: PyMOL movie start frame
12986bug fix: PyMOL putty broken
12987bug fix: pdbAddHydrogens may miss O3' or O5' H atoms at end of DNA strands
12988bug fix: pdbAddHydrogens may miss H in first group of a chain
12989bug fix: set defaultDrawArrowScale broken
12990bug fix: "ligand" should include all _g=0 (nonPDB atoms)
12991bug fix: applet getpropertyAsArray("bondInfo") fails
12992bug fix: JSmol script/scriptWait nuance with moveto.
12993 -- when using scriptWait with HTML5, there can be no threading
12994bug fix: invertSelected on trajectory causes nullPointerException
12995bug fix: POLYHEDRA with faceCenterOffset not saved in state properly; EDGES option nonfunctional
12996bug fix: JavaScript not returning arrays properly from Jmol.getPropertyXXXX()
12997 -- very important to have {} after j2sNative directive!
12998bug fix: COMPARE could rotate to less-good fit with SMARTS search
12999bug fix: draw ARROW ATOM/BOND broken
13000bug fix: animation MORPH broken for non-PyMOL files
13001 -- load trajectory ({0 6}) 1cdr.pdb
13002 -- animation MORPH 10
13003 -- animation ON
13004 -- load trajectory "test1.pdb" "test2.pdb"
13005 -- animation MORPH 30
13006 -- animation ON
13007bug fix: draw ARROW ATOM/BOND broken
13008bug fix: draw ARROW with offset disallows set picking draw adjustments
13009bug fix: concurrent loading of two cif files by two different applets fails
13010bug fix: draw LINEDATA not operative (undocumented, for state; from draw xxx INTERSECT yyy)
13011 -- needs revision to create DATA option; can be huge and very long to process state file
13012bug fix: load :2-butanone fails
13013bug fix: PyMOL volume map data saved from PyMOL 1.6 has slightly different data structure
13014bug fix: jvxl reader ignores jvxlVertexColorData
13015bug fix: ellipsoid rendering problems
13016
13017code: MagRes/CASTEP reader upgrades
13018code: color/translucent/opaque clean up in ScriptEvaluator
13019
13020=============================================================================
13021
13022JmolVersion="13.1.16_a"
13023
13024new feature: set defaults PyMOL
13025 -- zoomHeight TRUE
13026 -- measurementUnits ANGSTROMS
13027
13028	new feature: color BALLS
13029	 -- distinct from color ATOMS because it doesn't get inherited
13030	 -- for PyMOL compatability with sphere_color
13031
13032new feature: restore SCENE "xxxx" nSec
13033
13034new feature: Scene menu
13035 -- PyMOL scene names, in order
13036
13037new feature: added parameters to moveTo allows setting cameraDepth, cameraX, and cameraY
13038new feature: moveTo <nseconds> PYMOL [18-element standard PyMOL view matrix]
13039	-- used for PSE file loading
13040	-- to be used also for scenes
13041    [0-8] are 3x3 rotation matrix (row/column inverted)
13042    [9,10] are x,y translations (y negative)
13043    [11] is distance from camera to center (negative)
13044    [12-14] are rotation center coords
13045    [15-16] are slab and depth distance from camera (0 to ignore)
13046    [17] is field of view; positive for orthographic projection
13047	-- internal use only; not documented
13048
13049new feature: cache CLEAR
13050 -- same as cache REMOVE ALL
13051
13052new feature: load xxx.pse FILTER "DOCACHE"
13053 -- specifically for editing large PSE files when included in a state
13054 -- caches streamlined file that is still readable by PyMOL (needs testing!)
13055     (no electron density map data, for instance -- see HupA_2.pse)
13056 -- caches all isosurfaces, creating JVXL equivalents
13057 -- should be followed with WRITE xxx.pngj or WRITE xxx.jmol or WRITE xxx.zip
13058 -- for example:
13059     before:
13060		04/07/2013  07:46 AM        11,929,507 HupA_2.pse
13061
13062	$ zap;load "HupA_2.pse" filter 'docache'
13063	$ write t.zip
13064
13065	 after:
13066		Listing archive: t.zip
13067		Physical Size = 395174
13068
13069		   Date      Time    Attr         Size   Compressed  Name
13070		------------------- ----- ------------ ------------ ------------------------
13071		2013-05-17 06:46:36 .....      1092432       219718  HupA_2.pse
13072		2013-05-17 06:46:36 .....      1473760         6589  isosurface_level2
13073		2013-05-17 06:46:36 .....        25495        11624  state.spt
13074		2013-05-17 06:46:36 .....          134          119  JmolManifest.txt
13075		2013-05-17 06:46:36 .....            0            2  Jmol_version_13.1.16_dev_2013.05.17__2013-05-15_07.09
13076		2013-05-17 06:46:36 .....       158082       156316  preview.png
13077		------------------- ----- ------------ ------------ ------------------------
13078		                               2749903       394368  6 files, 0 folders
13079
13080new feature: anim FRAMES [1, 3, 9, 9, 9, 3, 1]
13081 -- arbitrary PyMOL-like model list
13082
13083new feature: FRAME n
13084 -- same as MODEL n, unless we have PyMOL-like frames
13085 -- if have frames, then FRAME 2 goes to the second frame (model 3 in this case)
13086 -- MODEL n still always goes to a specific model.
13087 -- all relative options -- FIRST LAST PREV NEXT -- refer to frames if there are frames
13088     even if the MODEL command is given.
13089
13090new feature: pyMOL PSE state options: LOAD "FOO.PSE" state FILTER "xxxx"
13091 -- [state not present; default] load all PyMOL states (one PyMOL state == one Jmol model)
13092 -- state = 0 (load only the current PyMOL state)
13093 -- state > 0 (load just a specific PyMOL state)
13094 -- FILTER "nosurface" -- load PyMOL file without surfaces
13095
13096new feature: getProperty BONDINFO {atomset1} {atomset2}
13097
13098new feature: measurements with IDs and radius/diameter:
13099	-- measure ID "xxx" ...
13100	-- measure ID "xxx" RADIUS x.y (or DIAMETER x.y)
13101	-- renders as dots
13102
13103new feature: set zoomHeight
13104  -- FALSE by default
13105  -- set TRUE for PyMOL-like resizing (scale only set by height adjustment)
13106
13107new feature: isosurface color density (decimal)
13108  - variable decimal point size
13109
13110new feature: PyMOL CGOs as CGO command
13111  - needs testing
13112  - CGO ID "xxx" [ cgo data (float array) ]
13113  - includes basic CGO methods
13114      BEGIN
13115      		GL_POINTS
13116      		GL_LINES
13117      		GL_LINESTRIP
13118      		GL_TRIANGLE
13119      		GL_TRIANGLE_STRIP
13120      		GL_TRIANGLE_FAN
13121      VERTEX
13122      END
13123      COLOR
13124      NORMAL
13125      SIMPLE_LINE
13126      SAUSAGE
13127      TRICOLOR_TRIANGLE
13128
13129popup: added menu for MEP range -0.1 0.1
13130
13131PyMOL: uniqueBondSettings working
13132
13133PyMOL: better scene restore;
13134
13135PyMOL: adds SASURFACE option (surface_solvent ON), with "carving" (ProFusion_ABL.pse, scene F6)
13136
13137PyMOL: abstraction of scene setting from reader
13138
13139PyMOL: first phase of reader development complete (working with Jaime Prilusky)
13140 -- 104 test models http://ispcsrv3.weizmann.ac.il/a2jmolb/browse
13141 -- implementation of standard objects, including:
13142    -- atoms with labels
13143    -- bonds
13144    -- standard PyMOL rendering, including:
13145       -- lines
13146       -- sticks
13147       -- nonbonded (stars)
13148       -- nb_spheres
13149       -- cartoons of various types (not plank)
13150       -- rockets
13151       -- ribbon (backbone/trace)
13152       -- putty (trace)
13153       -- dots
13154    -- measures
13155    -- simple CGO objects
13156    -- molecular surfaces
13157    -- electron density as points and meshes
13158    -- custom colors
13159    -- fog and slab
13160    -- morphing movies
13161    -- JVXL caching of isosurfaces
13162
13163PyMOL: measurement font/offsets enabled
13164 -- adds measure ID "xxx" FONT scale face style
13165 -- adds measure ID "xxx" OFFSET [mode, sx, sy, sz, ax, ay, az]
13166 -- adds measure ID "xxx" OFFSET {sx, sy, sz}
13167
13168PyMOL: perspective fix for translated center -- H115W.PinM.PSE
13169
13170PyMOL: preliminary scene implementation
13171 -- view only
13172 -- use RESTORE ORIENTATION xxxxx
13173
13174code: Text.java, Object2d.java moved from shapes to modelset
13175
13176bug fix: COMPARE move of group saved in state may not be correct when restored
13177bug fix: write command doesn't accept parameter sequence IMAGE PNGJ ... (broken in 13.1.14)
13178bug fix: load APPEND with PDB file loses structure (broken in 13.1.15)
13179bug fix: restore command broken
13180bug fix: JavaScript: adding SYNC
13181bug fix: antialiasing or resizing stray lines problem solved (introduced in 11.0, 08/2006!)
13182bug fix: "display add" by itself should not do anything
13183bug fix: Hall translation initialization problem
13184bug fix: JavaScript reading of old-style JVXL files
13185bug fix: Gaussian reader not splitting MO set by model
13186bug fix: polyhedron reading from state
13187bug fix: connect delete not saved in state
13188bug fix: rockets not working for alpha polymer (also in 13.0.16)
13189bug fix: GXL added to carbohydrates
13190bug fix: show state/anim turns "anim" into "animation"
13191bug fix: MoldenReader orbitals are not in energy order; use FILTER "NOSORT" to prevent sorting by energy
13192bug fix: simultaneous spin/animation broken in 13.1.13
13193bug fix: MoldenReader fix for file blank lines and g,h,i orbitals - also for 13.0.16
13194bug fix: COMPARE does not allow nSeconds at beginning, as described in documentation
13195bug fix: isosurface VOLUME/AREA SET n cannot return to full array reporting; SET -1 added.
13196bug fix: isosurface VOLUME/AREA always returns an array, possibly of length 0
13197bug fix: isosurface molecular/solvent can give inappropriate inner surfaces
13198bug fix: show selected includes deleted atoms
13199
13200=============================================================================
13201
13202JmolVersion="13.1.15"
13203
13204FEATURE CHANGE: default JPEG quality set to 100 (was 75, which looks crappy)
13205
13206new feature: select command parameter completion using [TAB] includes variables
13207
13208new feature: PyMOL-like label offset options:
13209
13210   set labelOffset [sx, sy, sz]
13211   set labelOffset [mode, sx, sy, sz, ax, ay, az]
13212
13213 where
13214
13215   sx,sy,sz are screen coord offsets
13216   	-- in Angstroms
13217    -- applied after view rotation
13218    -- sy > 0 LOWERS label
13219   ax,ay,az are xyz position (in Angstroms; applied before view rotation)
13220   mode == 1 indicates xyz position is an offset to the atom position
13221   mode != 1 indicates xyz position is absolute
13222   defaults: mode == 1; ax = ay = az = 0
13223
13224
13225new feature: CASTEP energy reading
13226new feature: XCrysDen file reader
13227new feature: VASP POSCAR reader
13228
13229new feature: set cartoonLadders -- no bases, like PyMOL
13230
13231new feature: model CREATE n
13232 -- allows "empty" model creation without atoms
13233 -- n = number of models to create
13234 -- defaults to 1
13235
13236new feature: "all frames" toolbar button starts/stops PyMOL movies: if(_isMovie){if (_animating) {animation off}else{animation play}} else {frame *}
13237
13238new feature: Jmol/JmolData application -I flag accepts input from System.in and command piping:
13239
13240   				  type t.spt | jmol -I		  start Jmol with this script
13241
13242   				Note: if you use a pipe, be sure to make "exitJmol" the last command of the script
13243
13244	         Add -o for output to System.out.   Without the pipe, we are going to control Jmol
13245	         									from a Jmol> prompt on the command line console
13246
13247   				  jmol -Io		  see messages on input console
13248   				  ...messages from Jmol
13249   				  Jmol> background red;load 1crn.pdb;....
13250   				  ...messages from Jmol
13251   				  Jmol> exitJmol
13252
13253	         Add -n for headless operation (will not exit automatically).
13254
13255   				  type t.spt | jmol -Ion
13256
13257   				Note: if you use a pipe, be sure to make "exitJmol" the last command of the script
13258
13259	         Add -i for silent operation (no writing to System.output).
13260
13261
13262new feature: dots IGNORE {atom set} ON;
13263
13264new feature: Jmol or JmolData with -g0x0 and load filter "DORESIZE" will automatically
13265             resize the image to what is given in the PyMOL file as its default size:
13266             JmolData -ns "load t.pse filter 'DORESIZE'" -g0x0 -w "PNGJ:t.png"
13267bug fix: isosurface map property may not reference correct atom
13268bug fix: set isosurfacekey may not work with slabbing
13269bug fix: deleting atoms does not remove bioshape rendering
13270bug fix: isosurface in multi-model context saved in state with wrong model number
13271bug fix: PyMOL label fix, including fonts
13272bug fix: PyMOL rockets, nucleic acid rendering
13273bug fix: write JPG not working in JavaScript
13274bug fix: isosurface ... map property colors   not cleared entirely before next mapping
13275bug fix: MSMS reader broken
13276bug fix: labels lost upon z-shading
13277bug fix: isosurface property temperature default smoothing broken in 13.1.13.
13278bug fix: {xxx}.cartoon = {xxx}.temperature.all  fails to use correct values (also backbone, trace, etc.)
13279bug fix: isosurface translucent level not re-zeroed properly
13280bug fix: IDTF exporter with translucency fails
13281bug fix: commands f.sort() and f.reverse() fail.
13282bug fix: {;...;} syntax does not work in 13.1
13283bug fix: select dots > 0   does not work
13284bug fix: JmolData broken
13285
13286code: PyMOL work; CGO command and class CGO extends DRAW preliminary only; preliminary putty; fix for putty+sticks issue
13287code: PyMOL reader localSettings
13288code: PyMOL putty hack for Cover1.pse removed; colix index error fixed
13289code: PyMOL slab and depth; better field of view; even better zslab/zdepth
13290code: PyMOL reader "backbone" (really a trace -- fixed width?)
13291code: PyMOL reader isosurface solvent
13292code: PyMOL reader and full surfaces, mixed bigEndian/littleEndian Pickle reading
13293code: PyMOL reader: cartoon_ladder_mode approximation as cartoons
13294code: PyMOL reader: includes cartoon type 1,4,7 -> trace
13295code: String JmolViewer.runScript(String script) runs script immediately and returns output buffer
13296code: continued work on PyMOL PSE file reader
13297code: simplification of JmolViewer interface and access to global parameters:
13298
13299  // several; methods were deprecated and removed in 13.1.15. All are accessible via "getXxxx" methods:
13300
13301  abstract public float getFloat(int tok);
13302  abstract public int getInt(int tok);
13303  abstract public boolean getBoolean(int tok);
13304
13305  //abstract public int getAnimationFps();  see getInt(T.animationFps)
13306  //abstract public boolean getShowHydrogens(); see getBoolean(T.showhydrogens)
13307  //abstract public boolean getShowMeasurements(); see getBoolean(T.showmeasurements)
13308  //abstract public boolean getAxesOrientationRasmol(); see getBoolean(T.axesorientationrasmol)
13309  //abstract public int getPercentVdwAtom(); see getInt(T.percentvdwatom)
13310  //abstract public boolean getAutoBond(); see getBoolean(T.autobond))
13311  //abstract public boolean showModelSetDownload(); deprecated -- was just "true"
13312
13313
13314
13315=============================================================================
13316
13317JmolVersion="13.1.14"
13318
13319new feature: JVXL vertex-only data encoding "none" allows hand-coding of JVXL files
13320new feature: isosurface efvet reader data "0" is "indicated colors"
13321 -- isosurface "test.efvet" 0
13322
13323JavaScript: WebGL fix involving Collections.list calling ArrayList.add()
13324JavaScript: disambiguation of Mesh()
13325JavaScript: changing to utf-8 String nonbinary reading of .po files
13326JavaScript: localization working
13327
13328code: cleaning up of Escape and checks for array types
13329code: JavaScript does not need a visible canvas to create images -- could allow for "headless" JS operation
13330
13331bug fix: isosurface boundbox plane ....
13332bug fix: isosurface boundbox {pt1} {pt2} plane ...
13333bug fix: JVXL 1.0 format reading broken
13334bug fix: MOL2 reader not properly assigning element symbols
13335bug fix: isosurface slab translucent broken when saved in state
13336bug fix: isosurface slab translucent mesh broken when saved in state
13337bug fix: JavaScript minimization fix
13338bug fix: sync socket connections not working
13339bug fix: "navigate percent" broken
13340bug fix: isosurface area/volume broken
13341bug fix: JavaScript WRITE IMAGE with HTML5 does not allow change of width or height
13342bug fix: WRITE PNGJ does not allow sizing of image
13343bug fix: backbone/spine defs do not take into account phosphorylated proteins. Better:
13344    "@backbone protein&(_a>=1&_a<6|_a>=64&_a<72)|nucleic&(_a>=6&_a<14|_a>=72)",
13345    "@spine protein&_a>=1&_a<4|nucleic&_a>=6&_a<14&_a!=12",
13346bug fix: getProperty fileInfo fixed and documented
13347bug fix: assign atom does not update selections for elements
13348bug fix: FileDropper broken
13349bug fix: LcaoCartoon "-sp3d" not working
13350bug fix: PyMOL PSE files not accessible by Jmol app File...Open or drag/drop
13351bug fix: incorrect calculation of RMSD for COMPARE and SMILES
13352bug fix: ModelKit menu "SHIFT to rotate" should read "ALT to rotate"
13353bug fix: starting applet console takes two clicks
13354bug fix: JavaScript SMILES bug (String.replaceAll() does not work
13355bug fix: JavaScript LOOP command not implemented
13356
13357=============================================================================
13358
13359JmolVersion="13.1.13"
13360
13361FEATURE CHANGE: multiple applets no longer share the same lighting space
13362
13363new feature: animation DISPLAY {atomset}
13364    - applies a filter to a running animation to display only a certain set of atoms.
13365    - for example:
13366        load test.pse
13367        animation display {act_site}  // defined in test.pse
13368
13369new feature: animation MORPH n
13370    - where n is a number of frames to be inserted between trajectories
13371    - requires previous LOAD TRAJECTORY
13372      or the loading of a PyMOL PSE file having a movie (automatically a trajectory)
13373    - Jmol will do a linear morph as the animation runs.
13374    - for example:
13375        load test.pse
13376        animation morph 3
13377    - could be used for a linear morph between just two structures:
13378        load trajectory "test1.pdb" "test2.pdb"
13379        animation morph 32 // animation will run 33 frames
13380
13381new feature: frame -x.y
13382	- negative decimals indicate a linear morph is requested between two
13383	  trajectory frames.
13384	- for example:
13385	    load test.pse
13386	    frame -3.5
13387
13388new feature: set celShading TRUE -- produces cel shading effect
13389	- see http://en.wikipedia.org/wiki/Cel_shading
13390	- introduced by N David Brown
13391
13392new Feature: Experimenting with ellipsoid {atom set} and ellipsoid $isosurfaceID
13393
13394new feature: PyMOL PSE reader enhancements -- labels, simple surfaces, measures
13395
13396new feature: isosurface xxxx MAP property COLOR
13397 -- allows inheritance of color from underlying atom (as in PyMOL)
13398
13399new feature: UHBD grid file reader
13400new feature: DelPhi grid file reader
13401
13402new feature: load =xxx/ where xxx is a database code that can be set up in the future by a user.
13403 -- currently including mp MaterialsProject http://www.materialsproject.org/materials/%FILE/cif
13404 -- along with ligand, nci, nmr, pdb, pubchem
13405 -- see JmolConstants.databases for the full list.
13406 -- note that nci can take an additional tag such as /names after the name, and pubchem can take one before it:
13407
13408		load =mp/1
13409		load =nci/caffeine
13410		load =pubchem/caffeine
13411		load =pubchem/cid/2345
13412		print(load('=nci/caffeine/names'))
13413
13414bug fix: set picking IDENT when picking is already ident can cancel a pending measurement
13415bug fix: applet does not refresh when mouse exits with pending measurement
13416bug fix: labels within fog should be hidden
13417bug fix: load CENTROID does not always work -- wrong implicit normalization flag (was -1 instead of 1)
13418bug fix: property_xxx does not work (since 10/3/12, 13.1.7)
13419bug fix: The "show  history" command is supposed to clear out the "show history" command
13420         itself, but only if it is a top-level command (from the console),
13421         but it does more than that if it is part of script("show history").
13422         Probably true with all recent versions of Jmol.
13423bug fix: isosurface binary file reading (MRC, CCP4, O, binary PMESH, etc.) broken
13424bug fix: JavaScript: zoomTo [seconds > 0]... and restore rotation|orientation [name] [seconds > 0]  not waiting
13425
13426code: Refactoring class names to reduce JSmol JavaScript footprint
13427		ScriptVariable --> SV
13428		Token --> T
13429		BitSet --> BS
13430		BitSetUtil --> BSUtil
13431		Colix --> C
13432		Point3f --> P3
13433		Point3fi --> P3i
13434		StringXBuilder --> SB
13435		Vector3f --> V3
13436		JmolConstants --> JC
13437
13438code: shader functions removed from Colix; Shader class made nonstatic
13439code: refactored to allow scriptless JavaScript. (reduces initial core code load size by 25%, to 2.5Mb)
13440
13441=============================================================================
13442
13443version="13.1.12"
13444
13445new feature: PDB reading of X-PLOR using hybrid-36 and NAMD files using hex
13446 -- see   https://www.schrodinger.com/AcrobatFile.php?type=supportdocs&type2=&ident=530
13447 -- see   http://cci.lbl.gov/cctbx_sources/iotbx/pdb/hybrid_36.py
13448
13449new feature: load xxx.pdb filter "TYPE i,n"
13450 -- loads custom text fields into the "atomType" property of an atom upon customized PDB file loading
13451     where i is the number of the column (starting with 1) and n is the number of columns
13452 -- text is trimmed
13453 -- e.g. load xxx.pdb filter "TYPE 73,4" loads four characters starting at column 73 as "atomType" (segID)
13454 -- to convert to a numerical value, convert that to .property_foo:
13455     load xxx.pdb filter "type 22,4"; {*}.property_seqNo = {*}.atomType
13456
13457new feature: PDB filter "TYPE 73,4=xxx"
13458 -- loads four characters starting at column 73 (1-based) as "atomType"
13459 -- loads only those atoms with atom types starting with "xxx"
13460
13461new feature: axes labels "a" "b" "c" "xxx"  where "xxx" is the label for the origin
13462
13463bug fix: PDB file reading of remediated 1A7Y and 1E9W error due to too many CONECT bonds
13464	-- now reads HEADER columns 63-66 for 4-digit PDB ID.
13465	-- only if this ID is absent will the number of CONECT bonds be checked in decision to autobond
13466
13467bug fix/update: revision of the pages that make the About menu (application) in each language.
13468 -- Some changes that had been formerly applied to the English page are now in all.
13469      (Removal of copyright date in text)
13470 -- All About_xx.html files are now encoded and saved in UTF-8 w/o BOM,
13471      except Chinese which is in GB2312/GB18030.
13472 -- Extended characters in tr and zh that had become corrupt across revisions were restored from old ones.
13473 -- Several html header tags updated or added (html5 doctype, charset, lang)
13474 -- Hopefully all will display correctly after these changes!
13475
13476JavaScript: fix for SMILES matcher and   compare({*},{*},"isomer")
13477 -- j2s reminder: Can't use Java   new int[n][]; must use org.jmol.util.ArrayUtil.newInt2(n)
13478JavaScript: going to Float64Array for all noninteger arrays -- all numbers double
13479  Note that this could cause differences with Jmol, but I think we will have to live with that.
13480  The problem was with (new Float32Array([13.48]))[0] != 13.48. So instead of trying to force
13481  floats, it seems to make more sense to me to force doubles, using Float64Array instead of Float32Array.
13482  Thanks given to Ira Hanson for clearing this up for me.
13483JavaScript: JSmol writes PNG, PNGJ, JMOL, ZIP files from a web page
13484JavaScript: JSmol writes text files from a web page
13485
13486=============================================================================
13487
13488version="13.1.11"
13489
13490new feature: Jmol app "recent files" recognizes if file was drag-dropped or opened via "File Open"
13491new feature: color cartoons red blue
13492 -- front/back colors
13493 -- preliminary - only for hermiteLevel = 0, not cartoonFancy
13494 -- a bit rough at the edges
13495 -- not in state
13496
13497bug fix: 13.1 does not calculate partial charges (mark/reset fault in reading resource files)
13498bug fix: MOPAC2012 files not recognized
13499bug fix: patch 3581394 - small fixes for cartoon meshes
13500bug fix: 13.1.8 does not display translucent bonds when only bonds are translucent
13501JavaScript: flat cartoons for WebGL using mesh
13502JavaScript: adds XML model file readers
13503  -- tested: VASP, XODYDATA, CML, Chem3D, MolPro, XSD
13504
13505code: refactoring for JavaScript popup/modelkit menus
13506code: GT optimization, refactoring
13507code: Naga sockets upgrade to Naga-3_0. (MolecularPlayground and jsonKiosk)
13508
13509=============================================================================
13510
13511version="13.1.10"
13512
13513FEATURE CHANGE: set perspectiveMode  removed
13514 -- nonlinear version 10 perspective mode no longer supported
13515
13516bug fix: !quit was not stopping animation and vibration
13517bug fix: slowed zoomTo in Java version of 13.1.9
13518bug fix: PDB occupancies for first atoms may be 0.0 instead of 1.0 (broken in 11.7)
13519bug fix: select *W   does not work
13520bug fix: setEllipsoid... options not implemented for nonthermal ellipsoids in 13.0 or 13.1
13521bug fix: nonthermal ellipsoids broken in 13.1.
13522
13523JavaScript: !quit and navigation enabled
13524JavaScript: script queue enabled
13525JavaScript: move thread implemented; needs navigation threads
13526
13527code: JmolApplet0_Navigate.jar and JmolApplet0_Parallel.jar added
13528code: Navigator separated from TransformManager11
13529code: TransformManager10 removed
13530code: TransformManager11 combined with TransformManager
13531
13532
13533=============================================================================
13534
13535version=13.1.9
13536
13537new feature: MO or (ISOSURFACE MO)   DENSITY
13538 -- electron density
13539 -- same as MO [1] SQUARED
13540new feature: MO HOMO|LUMO|NEXT|PREV|[c1 n2 c2 n2...] SQUARED
13541 -- Squares wave functions as it combines them.
13542 -- That is, displays the collective electron density (if occupied)
13543 -- if [...] is not given, groups orbitals by energy
13544 -- examples:
13545     load c6h6.smol;mo homo squared // displays symmetric squared sum of two degenerate orbitals
13546     load co2.smol; mo homo squared // displays cylindrical electron density
13547     mo next squared // lumo, provided homo was just displayed
13548
13549bug fix: Molden reader tweaks
13550bug fix: Jmol application toolbar picking tool should not select none
13551bug fix: ellipsoid rendering fails
13552bug fix: translucent echo oddities in Jmol 13.1.8
13553bug fix: lost volume rendering in 13.1.8
13554bug fix: CASTEP density reader fails to reset origin to 0 0 0 in mapping
13555bug fix: UTF files with BOM (byte order marker) present not read correctly
13556bug fix: UTF files within GZIP or ZIP files not read correctly
13557bug fix: set picking draw no longer works in Jmol 13.0 or 13.1
13558bug fix: translucent echo backgrounds lost in 13.1.8
13559bug fix: select resno=@{n+3} fails in 12.2, 13.0, and 13.1
13560bug fix: isosurface AtomicOrbital broken in 13.1.8
13561
13562JavaScript: removing ambiguity in AtomObject in setColix(short, int, int) and (int, short, int)
13563JavaScript: binary Spartan SMOL reader enabled
13564   - nice IEEE calculator: http://www.merlyn.demon.co.uk/js-exact.htm#DW4
13565JavaScript: delay, hover, animation, vibration, moveto, spin, timeout
13566JavaScript: full binary loading for JavaScript -- tested only in Firefox, but specifically
13567      designed for Chrome's insistence that synchronized AJAX processes must not be binary
13568JavaScript: base64 translation of encoded binary strings from JS file reading
13569      prefix: ";base64," initiates decoding.
13570JavaScript: com.json JSON package removed due to licensing issues
13571JavaScript: JSmol -- all references to InputStream.read(byte[]) --> InputStream.read(byte[], 0, len)
13572               to speed file reading processing
13573JavaScript: JSmol -- float[].clone(), int[].clone() not supported in Java2Script
13574JavaScript: java.text.DateFormat not supported in Java2Script
13575JavaScript: Note -- org.jmol.adapter.smarter.Atom is not fully cloned
13576              (anisoBorU and ellipsoid are not copied
13577               and their values must be considered "final")
13578
13579code: adding quotes to above properties allows them to be used in JavaScript; j2sNative in JmolConstants.java
13580code: refactoring org.jmol.util into org.jmol.io and org.jmol.io2
13581
13582
13583=============================================================================
13584
13585version=13.1.8
13586
13587new feature: much better text rendering using 3-bit translucency
13588
13589bug fix: boundbox $pmeshID, center $pmeshID, and zoomto $pmeshID not implemented
13590bug fix: stronger (bold) frame labels
13591bug fix: no automatic change to bold for antialiasDisplay or PovRAY
13592bug fix: try/catch not working when embedded in another context
13593bug fix: JmolData not producing output for PRINT commands
13594bug fix: JmolData setting haveDisplay true, then failing to get mouse manager
13595bug fix: MRC file reader not setting default cutoff correctly
13596bug fix: (13.1 only) MRC/DNS6 file readers fail
13597bug fix: MRC surface file reader with symmetry error
13598bug fix: (13.1 only) minimization broken
13599
13600code: clearing font cache upon zap.
13601code: HTML5-only JavaScript full text working
13602code: HTML5-only JavaScript version working
13603
13604=============================================================================
13605
13606version=13.1.7
13607
13608FEATURE CHANGE: getProperty isosurfaceInfo no longer returns vertex data
13609
13610new feature: getProperty isosurfaceData returns vertex data
13611new feature: set cartoonFancy -- creates elliptical ribbon for cartoons
13612	-- if ribbonAspectRatio is its default value of 16, it is reset to 4 while cartoonFancy = true.
13613
13614bug fix: (13.1 only) reading of states with select BONDS fails to select bonds broken in 13.1.6
13615bug fix: (13.1 only) centered/right-aligned text only aligned after first line
13616bug fix: export WRL missing various objects requiring transformMatrixInv
13617bug fix: export may be missing protein cartoon turn
13618bug fix: set ribbonAspectRatio improperly widens ribbon
13619bug fix: zShadePower should not be static (affecting all applets/Jmol application frames)
13620bug fix: write OBJ xxx.obj not working (but write xxx.obj is fine)
13621bug fix: cartoons (with hermiteLevel > 1) adjusted to have smooth
13622    normals between segments (Alexander Rose)
13623    also, hermiteLevel >= 6 now gives ellipse cross-section
13624    recommended settings: set hermiteLevel 6;set ribbonAspectRatio 4
13625bug fix: JmolControls.js had broken radio buttons
13626bug fix: DRAW {x y z} "title" can fail in multimodel cases with translucency
13627
13628=============================================================================
13629
13630version=13.1.6
13631
13632new feature: showTiming
13633
13634new feature: CIF reader reads assembly information
13635 -- load =1vif.cif filter "ASSEMBLY 1"
13636 -- load =1vif.cif filter "ASSEMBLY 1;$A" # just label_asym_id A
13637 -- load =1vif.cif filter "ASSEMBLY 1;!$C" # just label_asym_id values not C
13638new feature: LOAD "xxx.cif" APPEND "appendedData" @x
13639 -- specifically for CIF files, reads a CIF file, appending string in variable
13640 -- intentionally not documented.
13641 -- feature particularly for RCSB (John Westbrook), so, for example:
13642
13643		Var x = load("test.txt")
13644		load "1vif-early.cif" append "appendedData" @x FILTER "assembly 1;$A"
13645
13646 -- or in one line:
13647       load "1vif-early.cif" append "appendedData" @{load("test.txt")} FILTER "assembly 1;$A"
13648
13649_pdbx_struct_assembly_gen.assembly_id       1
13650_pdbx_struct_assembly_gen.oper_expression   1,2,3,4
13651_pdbx_struct_assembly_gen.asym_id_list      A,B,C
13652#
13653loop_
13654_pdbx_struct_oper_list.id
13655_pdbx_struct_oper_list.symmetry_operation
136561 x,y,z
136572 y,x,-z+1
136583 -x+1,-y+1,z
136594 -y+1,-x+1,-z+1
13660#
13661
13662new feature: LOAD "xxx.cif" APPEND DATA "appendedData" .... end "appendedData"
13663 -- specifically for CIF files, reads a CIF file, appending string in lines of script
13664 -- intentionally not documented
13665 -- most important for saving the state:
13666
13667load "1vif-early.cif" append data "appendedData"
13668_pdbx_struct_assembly_gen.assembly_id       1
13669_pdbx_struct_assembly_gen.oper_expression   1,2,3,4
13670_pdbx_struct_assembly_gen.asym_id_list      A,B,C
13671#
13672loop_
13673_pdbx_struct_oper_list.id
13674_pdbx_struct_oper_list.symmetry_operation
136751 x,y,z
136762 y,x,-z+1
136773 -x+1,-y+1,z
136784 -y+1,-x+1,-z+1
13679#
13680end "appendedData" FILTER "assembly 1;$A"
13681
13682 -- option reserved to allow different data names for different purposes
13683 -- not general yet -- specific to CIF reader.
13684
13685bug fix: PDB 4B2Q, with faulty (incomplete) REMARK 350 not read
13686
13687code: successfully refactored for JavaScript
13688	(see http://chemapps.stolaf.edu/jmol/jsmol-10-1/jsmol2.htm)
13689	-- note that all code development is done in Jmol, then
13690	   Java src code is transferred to JSmol project
13691
13692	-- adding:
13693		javax.util.BitSet
13694		javax.util.StringXBuilder
13695	-- streamlining:
13696		javax.vecmath...
13697	-- removed all references to StringBuffer
13698	-- StringXBuilder allows optimization of performance in JavaScript
13699	-- workaround for Java2Script compiler bug setting "char x;" to 0
13700	-- Java2Script compiler is not distinguishing int[] from float[] when creating the array
13701	-- StringXBuilder takes care of adding ".0" to floats and doubles, but
13702	   we need to be on the lookout for not places where we are constructing
13703	   a string where the difference between an int and a float is significant.
13704	-- optimize class hierarchy return by cataloging classes
13705	   as org_jmol_xxxx in addition to org.jmol.xxxx
13706	-- tie in graphics on JavaScript side
13707	-- add fonts
13708	-- add "billboard" objects such as labels, 3D echos, etc.
13709	-- add 2D echos
13710	-- ultimately write an asynchronous version of JSmol
13711
13712code: org.jmol.jvxl.readers classes accessed reflexively (for JavaScript optimization)
13713code: JSmol classes incorporated into Jmol code -- org.jmol.awtjs, org.jmol.appletjs, org.jmol.exportjs
13714code: refactored for JavaScript (mostly removing ambiguity in method names)
13715
13716
13717=============================================================================
13718
13719version=13.1.5
13720
13721bug fix: CASTEP PHONON files not loading
13722
13723code: refactored for JavaScript
13724
13725=============================================================================
13726
13727version=13.1.4
13728
13729new feature: ISOSURFACE PLANE ... MAP ... LATTICE {i j k} [volume data]
13730 -- allows periodic volume data to be mapped to a plane
13731     based on a specified translational lattice
13732 -- for example: isosurface plane x=2 map LATTICE {1 2 2} "data.dat"
13733
13734new feature: POLYHEDRA {atom1} to {atoms_including_atom1}
13735 -- polyhedra with or without central atom, but with a reference atom
13736
13737bug fix: translate selected x ... bug
13738
13739bug fix: ISOSURFACE saving in state broken 7/30/12 in 13.0.RC3
13740bug fix: simple isosurface PLANE not saved in state
13741bug fix: isosurface command with MAP from state when saved to state may fail
13742bug fix: 13.1.2 offsets label positions incorrectly
13743
13744code: refactored for JavaScript
13745
13746=============================================================================
13747
13748version=13.1.3
13749
13750bug fix: 13.1.2 breaks loading of ZIP files
13751bug fix: CUBE reader reading atom Z numbers as partial charge
13752bug fix: 13.1.2 breaks   LOAD ?
13753
13754=============================================================================
13755
13756version=13.1.2
13757
13758new feature: cache ADD "filename"
13759 -- adds a file into the memory cache as a set of bytes
13760new feature: cache REMOVE "filename"|ALL
13761 -- removes a file from the cache
13762new feature: show cache
13763 -- displays the cache as an array
13764new feature: cache() function
13765 -- returns the cache as an associative array {filename: nBytes, filename: nbytes,...}
13766new feature: write INLINE "xxxx" "filename"
13767    for example: write INLINE "testing" "myfile.txt"
13768    for example: write INLINE @{load("$caffeine")} "caffeine.mol"
13769new feature: set defaultDropScript for drag-drop and File|Open
13770
13771bug fix: translate x 0 does not recenter the model in the window
13772bug fix: PDB polymers of length 1 allow size to be set and appear {visible} but are not
13773bug fix: OPEN dialog doesn't allow for no PDB cartoons.
13774bug fix: open dialog for 1-residue PDB files does not show atoms.
13775bug fix: pngj storage of Spartan directory zip files or Spartan directories cannot be read
13776         because the PNGJ files created do not contain the necessary files from the directory
13777
13778code: (JmolViewer) public void cacheFile(String fileName, byte[] bytes)
13779 -- allows a mechanism for applets or embedding apps to deliver file content as bytes
13780 -- for applets, first getPropertyAsJavaObject("Viewer")
13781code: refactored for Java2Script due to inner class bug there.
13782
13783=============================================================================
13784
13785version=13.0.1
13786
13787APPLET:
13788-- a new OOP JavaScript interface (Jmol-JSO)
13789  allowing nonJava options such as ChemDoodle and GLmol
13790  as well as JME/JSpecView connectivity
13791-- JmolData full "headless" operation for server-side processing
13792
13793BIOPHYSICS:
13794-- COMPARE command
13795
13796FILE READING:
13797-- reading of JCAMP-DX files having structure/spectra assignment data
13798    using ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview)
13799-- Gaussian log reading of Natural Transition Orbitals
13800-- automatic PNGJ file caching for immensely faster loading of PNGJ files from remote servers
13801
13802FILE WRITING:
13803-- write PNGJ files encapsulate all model file data into one PNG file
13804-- write image 400 400 PNGJ "http://....."      POSTs JMOL or IMAGE or structure to a server as application/octet-stream
13805-- write MOL adds partial charge data as > <JMOL_PARTIAL_CHARGES> in SDF format
13806-- multiple-scene PNGJ files allowing minimal or full data loading and scripted animations
13807
13808ISOSURFACES:
13809-- isosurface caching
13810-- isosurface MOVE [[...matrix4f...]]  moves/rotates an isosurface (for the state)
13811
13812MINIMIZATION:
13813-- MMFF94/UFF minimization and energy calculation
13814
13815MOLECULAR DATA:
13816-- show CHEMICAL
13817-- show NMR
13818
13819MOLECULAR PLAYGROUND:
13820-- MolecularPlayground -- remote status and remote control
13821
13822SOLID-STATE PHYSICS:
13823-- solid state physics support
13824
13825SPECTROSCOPY:
13826-- integration of JSpecView into Jmol, including 2D spectral display and manipulation
13827
13828STRUCTURE SEARCHING:
13829-- extended Jmol SMARTS searching
13830-- PubChem search for name (which can be a CAS number), cid, or SMILES using ":"
13831
13832=============================================================================
13833
13834version=13.0.RC7_dev
13835
13836bug fix: isosurface CAVITY not saved in state
13837
13838=============================================================================
13839
13840version=13.0.RC6
13841
13842bug fix: isosurface CAVITY not saved in state
13843bug fix: Gaussian reader not reading "AO basis set in the form of general basis input" properly ("Gen" keyword)
13844bug fix: Gaussian reader not reading "7D 0" correctly
13845bug fix: Trajectories still broken for PDB files
13846
13847code: all import foo.*; removed, specified
13848
13849=============================================================================
13850
13851version=13.0.RC5
13852
13853bug fix: broke trajectories in 13.0.RC4
13854
13855=============================================================================
13856
13857version=13.0.RC4
13858
13859new feature: write SCENE PNG|PNGJ "xxxx.spt" option to create PNG or PNGJ files (same file, just different extension)
13860new feature: "menu" as sole contents of a script pops up the context menu
13861 -- joins category of special commands, including "exit" "pause" and "quit"
13862
13863bug fix: load append TRAJECTORY (upper case) fails
13864bug fix: load append trajectory "$mannose" fails (loads two models)
13865bug fix: load trajectory "maleic.cif" fails with cryptic error message (not appropriate for trajectory loading)
13866bug fix: undocumented and inaccurate CALCULATE VOLUME removed
13867
13868=============================================================================
13869
13870version=13.0.RC3
13871
13872new feature: automatic PNGJ file caching for immensely faster loading
13873new feature: write MOL adds partial charge data as > <JMOL_PARTIAL_CHARGES> in SDF format
13874new feature: isosurface CACHE <surface creation parameters> ....
13875 -- parameter CACHE along with isosurface creation or alone instructs Jmol to
13876     immediately create JVXL data for the specified surface and to load that data instead.
13877     The surface remains in memory (in this version of Jmol) can can be used again
13878     using cache://isosurface_<ID> where <ID> is the isosurface ID such as "isosurface1".
13879 -- The command ISOSURFACE CACHE alone will cache the current isosurface
13880 -- If the cache is no longer needed, then RESET CACHE will release the memory used to hold the JVXL data for the isosurface
13881 -- The result should be essentially equivalent to the original command.
13882     (It is recommended that the original be a relatively simple command, because not all nuances
13883      of an isosurface may be stored in the JVXL data.)
13884 -- THIS OPTION IS NOT COMPATIBLE WITH SAVING THE STATE AS AN SPT FILE.
13885 -- Instead, one needs to save the state in PNGJ or JMOL format, where the cached isosurface
13886     can be reloaded from a file saved in the  PNGJ or JMOL zip directory
13887
13888bug fix: load a model, then  load append TRAJECTORY -- will fail
13889bug fix: load APPEND xxx where xxx is FILE, INLINE, SMILES, TRAJECTORY, MODEL
13890         all save incorrect LOAD command in state
13891bug fix: shelx reader (.res) not assigning space group name or applying normalization
13892
13893=============================================================================
13894
13895version=13.0.RC2
13896
13897bug fix: isosurface molecular producing artifacts
13898bug fix: isosurface select {...} molecular not excluding all other atoms for troughs
13899new feature: Gaussian log reading of Natural Transition Orbitals
13900new feature: isosurface MOVE [[...matrix4f...]]  moves/rotates an isosurface (for the state)
13901
13902bug fix: isosurface moved by atom connection not saved correctly in state
13903bug fix: isosurface SET n  not read properly from JVXL file.
13904ant fix: changing the way  Jmol.properties is handled vis-a-vis # and underscores
13905bug fix: isosurface SOLVENT producing artifacts --- needed minimum resolution
13906bug fix: isosurface with selected set not delivering just those vertices for within distance calc
13907bug fix: isosurface CONNECT in documentation but never implemented
13908bug fix: isosurface SET n  not saved in state or JVXL file.
13909bug fix: Gaussian reader fails for 2-digit basis orbital names such as "12XX"
13910bug fix: PNGJ creation not handling same-file or same-name issues.
13911bug fix: isosurface SOLVENT producing cavity-like artifacts
13912bug fix: SCENE writing with toggle (pause scene 2 ... pause scene 2) in error
13913bug fix: SCENE min spt script needs wrapping by pathForAllFiles
13914bug fix: isosurface MINSET or SET not compatible with SLAB
13915bug fix: show $d1  where d1 is a DRAW object broken
13916bug fix: calculate hydrogens incorrect for proteins
13917
13918=============================================================================
13919
13920version=13.0.RC1
13921
13922-- a new OOP JavaScript interface allowing nonJava options and JME/JSpecView connectivity
13923-- MMFF94/UFF minimization and energy calculation
13924-- integration of JSpecView into Jmol, including 2D spectral display and manipulation
13925-- reading of JCAMP-DX files having structure/spectra assignment data
13926    ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview)
13927-- multiple-scene PNGJ files allowing minimal or full data loading and scripted animations
13928-- write PNGJ files encapsulate all model file data into one PNG file
13929-- extended Jmol SMARTS searching
13930-- show CHEMICAL
13931-- show NMR
13932-- solid state physics support
13933-- MolecularPlayground -- remote status and remote control
13934-- COMPARE command
13935-- JmolData full "headless" operation for server-side processing
13936-- PubChem search for name (which can be a CAS number), cid, or SMILES using ":"
13937-- isosurface caching
13938-- write image 400 400 PNGJ "http://....."      POSTs JMOL or IMAGE or structure to a server as application/octet-stream
13939
13940=============================================================================
13941
13942version=12.3.33 (13.0.RC1)
13943
13944new feature: full JSpecView support for NMR
13945 -- integration, peak listing, measurements
13946 -- printing with peak measurements
13947new feature:  measure(a b "minArray")
13948 -- measures minimum distance from atom set a to atom set b atom by atom
13949 -- return array with number of elements corresponding to the number of selected atoms
13950 -- for example:  {1.1}.property_distTo12 = measure({1.1}, {1.2} "minArray"); color property_distTo12
13951new feature: {x}.property_d = [....]
13952 -- allows for [....] to have length of the number of atoms in {x}
13953    in which case the values are assigned on a 1:1 basis
13954new feature: PDB reader reads gromacs-created "pdb_wide_format" files
13955             and also automatically reads PQR based on gromacs REMARK
13956
13957bug fix: select within(1.0, withinallmodels, 1.1) and 1.2  causes exception
13958bug fix: script xxx(yyy).spt  broken
13959
13960=============================================================================
13961
13962version=12.3.32
13963
13964FEATURE CHANGE: LOAD "myfile.xxx" with no additional parameters
13965    where xxx is "png" or "pngj" or "spt"
13966    now assumes these are scripts and runs SCRIPT "myfile.spt" instead
13967
13968new feature: write SCENE "xxxx.spt"
13969 -- creates pngj files
13970 -- using "xxxx.png" will STILL USE "xxxx.spt" but will create PNGJ files with ".png" extensions
13971 -- scene creation with linked PNGJ files
13972 -- xxxx.spt should include "pause scene n" commands, which are then
13973    used to separate the script into separate scenes. "n" must be an integer.
13974 -- Two files are created for each scene (pngj unles:
13975      xxxx_scene_n.min.pngj  very small; does not contain anything more than
13976                             an image, JmolManifest.spt, and scene.spt
13977      xxxx_scene_n.all.pngj  adds all necessary files, plus script.spt
13978 -- Either of these files can be used, but if x.min.pngj is used,
13979    then x.all.pngj needs to be present as well in the same directory.
13980
13981new feature: drawHover displays ID for isosurface and reports to hoverCallback
13982new feature: load "$$xxxxx" loads 2D version, not 3D (used for JmolData connection with JME)
13983 -- basically, use of two $ signs results in drop of "&get3d=True" from NCI call
13984
13985bug fix: compiler not synchronized; allows jmolEvaluate() to fail if two threads access it simultaneously
13986bug fix: getproperty isosurface after a "no-surface" isosurface call like load $water;isosurface sasurface fails
13987bug fix: color for hbonds/ssbonds backbone incorrect
13988
13989=============================================================================
13990
13991version=12.3.31
13992
13993bug fix: isosurface plane ... within ... map ... fails
13994bug fix: write broken in 12.3.30
13995
13996=============================================================================
13997
13998version=12.3.30
13999
14000new feature: atom properties sx, sy, sz, and sxyz -- screen coordinates
14001new feature: app flag -r restricts file access
14002 -- like -R, but allows reading of ".spt" files
14003new feature: load("http://.....?POST?_PNGJBIN_")
14004 -- accompanies load("http://....?POST?_PNG_") and load("http://....?POST?_PNGJ_")
14005 -- sends PNGJ image to server as byte array instead of as  application/octet-stream
14006    instead of Base64-encoded string and application/x-www-form-urlencoded
14007 -- return value is whatever server is set up to send
14008new feature: select within(distance, $drawID)
14009
14010bug fix: isosurface plane... map property temperature not working
14011bug fix: PNG files written by Jmol from 12.3.7 - 12.3.29 have incorrect
14012         checksum. Browsers do not seem to care, but Java does
14013         when loading a background image in Jmol!
14014bug fix: background image NONE fails
14015bug fix: if(...) statement   (no braces) broken in 12.3.21
14016
14017=============================================================================
14018
14019version=12.3.29
14020
14021new feature: (JmolCore.js/JmolApplet.js/JmolCD.js/JmolApi.js)
14022 -- changes "useChemDoodleOnly" to "disableJmol"
14023    in preparation for non-ChemDoodle plug-ins similar to JmolCD.js
14024 -- allows for default values for Info
14025 -- adds Info.src
14026   -- similar to src in an <image src="xxx.png" /> tag
14027   -- turned into LOAD "xxx.png"
14028 -- more efficient coding
14029new feature: set MESHSCALE (default 1) also allows isosurface/mo mesh scaling
14030 -- was DOTSCALE in 12.3.26, but that is not appropriate
14031new feature: Mopac archive reader, including internal coord. defs
14032 -- use FILTER "NOCENTER" to NOT center atoms in unit cell
14033 -- use CENTROID for complete molecules with centroids within unit cell
14034 -- use PACKED CENTROID for complete molecules with any atoms within unit cell
14035 -- properties stored in auxiliaryInfo
14036    use getProperty auxiliaryInfo or x = getProperty("auxiliaryInfo".foo) to retrieve
14037new feature: set pathForAllFiles "..."
14038 -- all files, local or remote, will be taken from the indicated path
14039 -- the indicated path may be a zip file entry (ending with "|")
14040 -- automatically reset to '' in case of an unrecoverable error in execution
14041 -- used for creating JMOL files containing user scripts instead of a state
14042 -- disallows all writing and image creation
14043 -- scripts including prompts to read wildcard files (for example, "load ?")
14044    will still prompt for those and read them properly
14045new feature: write SCRIPT ["scriptFileName", "filename2","filename3",...] PNGJ|JMOL...
14046 -- syntax is WRITE SCRIPT followed by an array of file names
14047    then whatever else is necessary to create the PNGJ or JMOL file
14048 -- for example:  write script ["wind.spt"] test.jmol
14049 -- Creates a single PNGJ or JMOL file that instead of containing the state
14050    contains the script and additional files listed by the user.
14051    The first script is run, and it is presumed that the other files are
14052    needed for full execution of that script.
14053 -- Allows for creating PNGJ and JMOL files that run as animations, not just final states.
14054 -- Jmol will automatically add any files current to the state,
14055    but other files not indicated by the state (script files especially)
14056    required for the script to run need to be indicated by the user.
14057 -- When the script is executed, pathForAllFiles is set to the zip file
14058    itself. Thus, even scripts containing references such as "script2.spt" or "=xxxx"
14059    can be run, provided the user supplies script2.spt xxxx.pdb.gz as one of the required filenames.
14060 -- Note that if a file is saved locally using LOAD =xxxx AS t.pdb, Jmol will automatically use
14061    the local file reference to t.pdb, not the RCSB reference.
14062 -- If the file is loaded using only LOAD =xxxx, then Jmol will reload the
14063    remote file and store it in the PNGJ/JMOL file as xxxx.pdb.gz.
14064
14065bug fix: Jmol 12.3.28 breaks writing JMOL/PNGJ files
14066 -- Jmol 12.3.28 release DELETED
14067bug fix: modelkit mode creating atoms after load "@x" fails
14068bug fix: script javascript:xxxx() broken for Jmol object javascript
14069bug fix: JmolCore.js fix for getPropertyAsArray
14070bug fix: draw arrows not adjustable using set picking draw
14071bug fix: Exception for select within(molecule,...) when atoms have been deleted
14072
14073=============================================================================
14074
14075version=12.3.28
14076
14077DELETED 6/10/2012 due to breaking of JMOL/PNGJ format
14078
14079new feature: isosurface ... map PERIODIC ...
14080 -- allows mapping grid-based data beyond the unit cell defining its grid
14081new feature: write VIBRATION n
14082 -- writes 20 * n frames
14083 -- n periods
14084 -- some issues with first frame and value of n
14085new feature: load PACKED CENTROID
14086 -- only complete molecules having one or more atoms within or on the face of the unit cell
14087 -- may not preserve # of atoms of unit cell
14088 -- reverts to simple PACKED if this is a single-molecule solid (such as diamond)
14089new feature: unitcell $isosurfaceID
14090new feature: unitcell [{center}, {a}, {b}, {c}]
14091 -- sets unit cell for current model only
14092new feature: "plot data" command by itself opens a new frame with just one atom in it, at (0,0,0)
14093new feature: isosurface SLAB BRILLOUIN (or WIGNERSEITZ)
14094 -- transposes an isosurface into the Brillouin-zone/Wigner-Seitz unit cell
14095 -- based on the isosurface's vectors if there is no unit cell for this model.
14096 -- for creating isosurfaces of Fermi surfaces
14097
14098bug fix: LOAD with SPACEGROUP or RANGE or UNITCELL should default to {555 555 -1} (packed) lattice
14099bug fix: JVXL reading of mapped data does not use file's rendering option for lighting
14100bug fix: default measure dotted lines are too thin for export
14101bug fix: measures not offset correctly when given width in line.
14102
14103=============================================================================
14104
14105version=12.3.27
14106
14107new feature: [menu] vibration [*,/] 2
14108new feature: XSF isosurface reader
14109new feature: load CENTROID
14110 -- only complete molecules having centroid in unit cell
14111 -- preserves # of atoms of unit cell
14112
14113bug fix: write PNGJ broken in 12.3.26
14114bug fix: 12.3.26 breaks Jmol/JspecView connection
14115bug fix: draw pointgroup scale x.x -- changing x.x does not revise point group
14116bug fix: reading of JVXL-version 1 (nonXML) files does not display colors
14117bug fix: translate y 10 works, but translate Y 10 does not
14118
14119=============================================================================
14120
14121version=12.3.26
14122
14123new feature: Jmol SMARTS searching can include full Jmol selection syntax within
14124    an atom primitive using the "atomType" option and "select:":
14125
14126    load caffeine.xyz
14127    print {*}.find('{c}$(select _N and connected(2, _C))')
14128
14129new feature: model ID "xxx" (or frame ID....)
14130 -- sets the model's ID to "xxx"
14131 -- can be used to switch to that model using  model "xxx"
14132 -- can be targeted file-specifically using "filename#xxx"
14133 -- if two models have the same ID and no filename is given,
14134    then the first model found becomes the current model
14135 -- used for correlating non-Jmol synced applets
14136new feature: script "t.spt"(...variables...)
14137 -- quotes are optional if file name does not include " " or "("
14138 -- "script" is optional if file name is quoted or ends with ".spt"
14139 -- allows passing variables to a script much like a function call
14140 -- variables will be in VAR named "_arguments" within that script (like JavaScript)
14141 -- _arguments, like all arrays in Jmol, is 1-based, 0-terminated (unlike JavaScript)
14142 -- _arguments is unsettable by the user
14143 -- for standard script functions, _arguments will be []
14144
14145 -- for example, if test.spt is simply "show _arguments", then
14146      load $caffeine
14147	    test.spt({*}, {*}.xyz ,35, [1,2,3,4])
14148
14149will output:
14150
14151     _arguments = [({0:23}),{-0.086670786 -0.02787502 5.6667876E-4},35,[1,2,3,4]]
14152
14153new feature: set forcefield "UFF" or "MMFF"
14154 -- default is MMFF
14155 -- automatically switches to UFF if atom types cannot be set
14156 -- minimizationCallback reports actual force field used
14157
14158new feature: set energyUnits kJ|kcal
14159new feature: antialiased display and image creation uses larger mesh scaling for cleaner look
14160
14161code: adding empirical rules to MMFF94 calculation
14162
14163checkmm.spt;checkAllEnergies
14164
14165checking calculated energies for 761 models
141661 COMKAQ     E=   -7.3250003   Eref=  -7.6177    diff=  0.2926998
141672 DUVHUX10   E=   64.759995    Eref=  64.082855  diff=  0.6771393
141683 FORJIF     E=   35.978       Eref=  35.833878  diff=  0.14412308
141694 JADLIJ     E=   25.104       Eref=  24.7038    diff=  0.4001999
141705 PHOSLA10   E=   111.232994   Eref=  112.07078  diff=  0.8377838
141716 PHOSLB10   E=   -93.479004   Eref=  -92.64081  diff=  0.8381958
14172
14173for 761 atoms, 6 have energy differences outside the range -0.1 to 0.1
14174with a standard deviation of 0.05309403
14175
14176bug fix: nested SMARTS strings can give incorrect response
14177load data "mol"
14178C:/jmol-dev/bobtest/t6.mol
14179__Jmol-12_05191218593D 1   1.00000     0.00000     0
14180Jmol version 12.3.26  2012-05-19 18:34 EXTRACT: ({0 3 4})
14181  3  2  0  0  0  0              1 V2000
14182   2.89480   4.81990   0.01710 N   0  0  0  0  0  0
14183   3.52580   2.75730  -0.17290 N   0  0  0  0  0  0
14184   3.94370   4.03730  -0.25710 C   0  0  0  0  0  0
14185  1  3  2  0  0  0
14186  2  3  1  0  0  0
14187M  END
14188end "mol"
14189select search("$([#7][#6]([#7&!$([#7][O])])=[#7])")
14190show selected
14191 was returning 1 atom, but should be 0 (because there are only two N atoms!)
14192bug fix: measurementUnits = "au"   does not work
14193bug fix: select 1.0 fails
14194bug fix: COMPARE broken
14195bug fix: Writing file into .jmol file after reading it from another results in the whole
14196         zip file being copied into the new .jmol file.
14197
14198
14199=============================================================================
14200
14201version=12.3.25
14202
14203new feature: MMFF94 single point energy calculation and minimization
14204  set forcefield "MMFF"
14205  checkmm.spt
14206  checkmm "AMHTAR01";minimize energy
14207  AMHTAR01 Initial E =     66.180 kcal/mol  # should be 66.18011
14208  checkmm "ARGIND11";minimize energy
14209  ARGIND11 Initial E =   -207.436 kcal/mol  # should be -207.43598
14210
14211validation complete. The following 13 structures (of 761) do not validate to within 0.1 kcal/mol
14212
142131 COMKAQ   E=   -7.3250003   Eref=  -7.6177  diff=  0.2926998
14214 -- MMFF94 ignores 1 of 5-membered ring torsions for a 1-oxo-2-oxa-bicyclo[3.2.0]heptane
14215 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14216
142172 DUVHUX10   E=   64.759995  Eref=  64.082855  diff=  0.6771393
14218 -- MMFF94 ignores 5-membered ring issue for S-S-containing ring
14219 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14220
142213 FORJIF   E=   35.978   Eref=  35.833878  diff=  0.14412308
14222 -- MMFF94 uses some sort of undocumented empirical rule used for 1 torsion not found in tables
14223 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14224
142254 JADLIJ   E=   25.104   Eref=  24.7038  diff=  0.4001999
14226 -- ignores 5-membered ring for S (note, however, this is not the case in BODKOU)
14227 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14228
142295 KEPKIZ   E=   61.127   Eref=  61.816277  diff=  0.68927765
14230 -- MMFF94 requires empirical rule parameters
14231 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14232
142336 PHOSLA10   E=   111.232994   Eref=  112.07078  diff=  0.8377838
14234 -- MMFF94 ignores all 5-membered ring torsions in ring with P
14235 -- (note, however, this is not the case in CUVGAB)
14236 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14237
142387 PHOSLB10   E=   -93.479004   Eref=  -92.64081  diff=  0.8381958
14239 -- MMFF94 ignores all 5-membered ring torsions in ring with P
14240 -- (note, however, this is not the case in CUVGAB)
14241 -- MMFF94_bmin.log: WARNING - Conformational Energies May Not Be Accurate
14242
14243empirical-rule-requiring models: (all are nonaromatic heterocycles)
14244
142458   ERULE_01   E=   -22.582  Eref=  -21.515108   diff=  1.0668926
142469   ERULE_02   E=   29.407999  Eref=  29.799572  diff=  0.39157295
1424710  ERULE_03   E=   -3.326   Eref=  -2.9351802   diff=  0.3908198
1424811  ERULE_04   E=   -2.572   Eref=  -2.31007   diff=  0.26193
1424912  ERULE_07   E=   2.873  Eref=  3.16775  diff=  0.29474998  (fixed in 123.3.26 by correcting angle calc)
1425013  ERULE_08   E=   33.734   Eref=  34.41382   diff=  0.6798172
14251
14252
14253bug fix: compare {22-31} {7-16} subset {*.ca} should work without ATOMSET next
14254bug fix: compare {22-31} {7-16} should work, using {spine} as default
14255bug fix: isosurface molecular for certain flat models will fail to cap H atoms
14256bug fix: calculate partial charge fails after model kit changes
14257           (because Bond[] bonds field not cleaned
14258bug fix: dipole command fails after model kit changes
14259
14260code: refactoring of minimize for generalization
14261
14262=============================================================================
14263
14264version=12.3.24
14265
14266new feature: SMARTS search for atom type using quotes: ["37"]-["58"]
14267new feature: SMARTS option /aromaticdouble/  allows distinguishing between aromatic single and double bonds
14268new feature; SMARTS option /aromaticstrict/  checks 6-electron rule for aromatics
14269new feature: CALCULATE partialCharge   does MMFF94 charge calculation
14270 -- all atom types validated
14271 -- charge values validated to +- 0.001001 over the 761-atom dative validation set
14272new feature: isosurface CACHE
14273 -- creates a JVXL version of the surface (possibly outside of Jmol, but that's not implemented yet)
14274 -- saved by   write JMOL   as a JVXL file "isosurface_ID"
14275     (where ID is the original isosurface ID) within the JMOL zip collection
14276 -- Warning! not saved using   write SPT
14277     ***ALWAYS*** use write JMOL or write PNGJ after using the CACHE option, not write SPT
14278 -- invoked by   isosurface file "cache://isosurface_ID"
14279 -- cleared by   reset CACHE
14280 -- allows rapid recreation of an isosurface across file loads
14281 -- possibly limited to a subset of surface types
14282 -- not fully tested
14283
14284new feature: write ... "http://....."
14285 -- POSTs JMOL or IMAGE or structure or whatever to a server as application/octet-stream
14286 -- to be used in Proteopedia for saving a fully self-contained state
14287
14288new feature: load filter "CENTER" -- centers models on the first model as they are loaded
14289new feature: load filter "NAME=..." -- loads only those models with a name that contains ...
14290new feature:   calculate partialcharge
14291	-- works on currently selected set of atoms
14292	-- uses MMFF94 charge calculation (unverified; most certainly not quite correct)
14293 -- preliminary only; working on validation
14294
14295bug fix: x = {"c1": 3}; if(x["c1"]) should return TRUE
14296code: Simple way to assign MMFF94 atom types and partial charges
14297-- N,S-containing compounds not validated; CHO-containing compounds partially validated
14298bug fix: MOL2 reader assuming PDB for non-PDB format files (such as MMFF94-dative.mol2)
14299bug fix: label %W not working properly for non-PDB files
14300bug fix: write MOL does not save partial-single bond as type 8 ("ANY")
14301bug fix: set echo IMAGE fails (since 12.3.20)
14302
14303code: (applet) JmolCore.js free of need for JSON
14304
14305=============================================================================
14306
14307version=12.3.23
14308
14309new feature: (applet) new interface for Jmol as an HTML object as well as full support on all platforms
14310             using a ChemDoodle fall-back option for Java/Applet-challenged platforms (iPad,iPhone,Android)
14311
14312 Note that Jmol.js is no longer required, but not all of the features of Jmol.js are in place yet
14313
14314 allows Jmol applets to be created on a page with more flexibility and extendability
14315 possibly using infrastructure of ChemDoodle for multiplatform doodlable structures
14316
14317 required/optional libraries (preferably in the following order):
14318
14319		jQuery.min.js   -- required for ChemDoodle or any server-based options
14320		gl-matrix-min.js -- required for ChemDoodle option
14321		mousewheel.js   -- required for ChemDoodle option
14322		ChemDoodleWeb.js -- required for ChemDoodle option
14323		JmolCore.js     -- required
14324		JmolApplet.js   -- required
14325		JmolCD.js       -- required for ChemDoodle option
14326		JmolApi.js      -- required
14327
14328 Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone)
14329 or applet-challenged (Android/iPhone) platforms, with automatic switching to
14330 whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only"
14331 or some combination of those -- and of course, you are free to rewrite the logic below!
14332
14333 Allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted
14334 server that delivers raw data files rather than specialized JSON mol data.
14335 Access to iChemLabs server is not required for simple file-reading operations and
14336 database access. PubChem and image services are provided by a server-side PHP program
14337 running JmolData.jar with flags -iR (at St. Olaf College).
14338 For your installation, you should consider putting JmolData.jar and jmolcd.php
14339 on your own server. Nothing more than these two files is needed on the server.
14340
14341 The NCI and RCSB databases are accessed via direct AJAX if available (xhr2).
14342
14343new feature: PubChem search for name (which can be a CAS number), cid, or SMILES using ":"
14344  from pubChemFormat = "http://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/%FILE/SDF?record_type=3d";
14345  (many thanks to Evan Bolton and Paul Thiessen (NIH) for their assistance on this.
14346  load :name:tylenol   #  or  load :tylenol
14347  load :cas:103-90-2   #  or  load :103-90-2
14348  load :cid:1983       #  or  load :1983
14349  load :smiles:C/C=C/C
14350
14351bug fix: callback functions for modular calls: applet0.readCallback(....)
14352bug fix: Molden reader problems reading frequencies
14353bug fix: VASP reader with {n n n} and vibration vectors problem
14354bug fix: in 2bat, SIA was considered part of the carbohydrate chain because we were not checking bonding
14355
14356=============================================================================
14357
14358version=12.3.22
14359
14360new feature: Jmol extensions to ChemDoodle allow display of Jmol, ChemDoodle-equivalent (simple model only),
14361             or just an image with server-side JmolData.jar support.
14362
14363    JmolCD.js -- Jmol ChemDoodle extension   author: Bob Hanson, hansonr@stolaf.edu  4/16/2012
14364
14365    requires ChemDoodleWeb.js and ChemDoodleWeb-libs.js
14366    prior to JmolCD.js
14367
14368    allows Jmol applets to be created on a page with more flexibility and extendability
14369    using much of the infrastructure of ChemDoodle.
14370
14371    allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone)
14372    or applet-challenged (Android/iPhone) platforms, with automatic switching to
14373    whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only"
14374    or some combination of those -- and of course, you are free to rewrite the logic below!
14375
14376    allows ChemDoodle-like 2D and 3D canvases that can load files via a privately hosted
14377    server that delivers raw data files rather than specialized JSON mol data.
14378    access to iChemLabs server is not required for simple file-reading operations and
14379    database access. Database and image services are provided by a server-side PHP program
14380    running JmolData.jar with flags -iR.
14381
14382    In this case, the NCI and RCSB databases are accessed via a St. Olaf College server,
14383    but for your installation, you should consider putting JmolData.jar and jmolcd.php
14384    on your own server. Nothing more than these two files is needed on the server.
14385
14386new feature: write CD  (simple ChemDoodle JSON format -- atoms and bonds only)
14387             For example: java -jar JmolData.jar -iRJ "load $tylenol;print write('cd')"
14388             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}]}}
14389             (this ended up NOT being used in the Jmol extension to ChemDoodle)
14390new feature: (JmolData) -iR (silent, restricted) mode sends output from PRINT and ECHO commands to SYSOUT
14391             and also restricts the application to no local file read/writing
14392
14393bug fix: "connect;" command in states saved prior to 11.9.24 and then read by versions after that
14394         The order in which Jmol created bonds changed in 11.9.24. Due to this, Jmol must check for the
14395         version number of Jmol used to create a state, and if it was before this point, it must
14396         apply "legacy" autobonding methods. Unfortunately, if that state from pre-11.9.24 versions
14397         contains the "connect;" command, which it would if someone used the CONNECT command by itself
14398         to regenerate all bonds in a model PRIOR to saving the state (Proteopedia does this), then
14399         those scripts will be misread in versions 11.9.24-12.2.21/12.3.21.
14400bug fix: antialiasDisplay does not show drag-box properly
14401bug fix: SMARTS syntax [${xxx}n] and [${xxx}m-n] changed to [$n{xxx}] and [$m-n{xxx}]
14402         to avoid conflict with specifying isotope
14403
14404=============================================================================
14405
14406version=12.3.21
14407
14408new feature: app flag -R restricts file access -- no local file reading; no writing, no logging
14409   // disables WRITE, LOAD file:/, set logFile
14410   // command line -g and -w options ARE available for final writing of image
14411   // for use with headless operation
14412new feature: app flag -T <seconds> headless timeout delay for "exitJmol"
14413note: Headless operation with image creation works perfectly using JmolData.jar
14414    java -Djava.awt.headless=true -Xmx512m -jar "JmolData.jar" -RJ "load $tylenol;" -g1000x1000 -wJPG:t.jpg
14415    see also: http://leshazlewood.com/2009/08/26/linux-javaawtheadless-and-the-display-environment-variable/
14416   // determined by GraphicsEnvironment.isHeadless()
14417   //   from java -Djava.awt.headless=true
14418   // disables command threading
14419   // disables DELAY, TIMEOUT, PAUSE, LOOP, GOTO, SPIN <rate>, ANIMATION ON
14420   // turns SPIN <rate> <end> into just ROTATE <end>
14421new feature: JSpecView JCamp-MOL files can reference model="$xxxx" -- model retrieved from NCI
14422
14423bug fix: PDB reader
14424    and state scripts created with 12.1.51-12.2.20 and 12.3.0-12.3.20
14425    state scripts prior to those versions with multiple models
14426    and also select BOND commands will read the bond indexes incorrectly
14427    and, in addition, will assign proper CONECT links only to the last model
14428bug fix:   if (....) # comment   fails
14429bug fix: Molden reader hack for bad Molden files with ** instead of atom number in [GTO]
14430bug fix: headless creation of JPG fails
14431bug fix: spin .... 30    takes 30 to be number of degrees, not rate
14432
14433version=12.3.20 -- skipped
14434
14435=============================================================================
14436
14437version=12.3.19
14438
14439new feature: select baseModel for JSpecView
14440new feature; model {atomset} -- model of first atom in this set
14441
14442bug fix: set dragSelected disallows popup menu
14443bug fix: MOPAC (PUBLIC DOMAIN) output reader can fail on reading vibrations
14444bug fix: Spartan 10 archives have .gz and .carc files. This fix adds .gz reading;
14445         work-around is that Spartan 10 allows saving of Archive without carc compression,
14446         which is a proprietary format. From Wavefunction:
14447         "If you want all files to use the "text" version, you can go to the
14448          Options->Preferences->X-Platform pane and make sure "Use Binary Archive" is unchecked."
14449bug fix: rotateSelected of models that have had dots at one point retrieved from a state file fails
14450code: refactored org.jmol.g3d.[Normix3d,Shade3D] --> org.jmol.util.[Normix, Shader]
14451code: refactored org.jmol.geodesic.Geodesic --> org.jmol.util.Geodesic
14452
14453bug fix: Jmol defaults not being loaded with startup option -n (no display)
14454bug fix: UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()
14455           failed for non-graphics system, and even though it is an exception, it
14456           isn't trapped by try/catch.
14457bug fix: point() function does not accept 3x1 array
14458bug fix: show x where x is a matrix does not have ',' before tabs, so it can't be clipped directly
14459           back into Jmol
14460code: better coding for quaternions
14461
14462=============================================================================
14463
14464version=12.3.18
14465
14466new feature: JSpecView reads and displays 2D spectra very quickly -- all
14467             tested JCamp-DX 6.0 files readable. -- JSpecView 2.0.10176
14468
14469bug fix: allow for alternating list/hash entry:
14470  for example: print getproperty("jspecview","##TITLE")["items"][1]["spectra"][1]["id"]
14471  instead of:  print ((getproperty("jspecview","##TITLE")["items"][1])["spectra"][1])["id"]
14472bug fix: GaussianReader not reading "Natural Orbitals" section from
14473         B3LYP 6-31g sp gfprint pop(full,NO)
14474bug fix: Jmol support for ZIP collection of JDX files read properly
14475bug fix: support for file reading with BOM UTF-8, UTF-16, or UTF-32
14476bug fix: script processor not recognizing UTF-8 Binary Order Mark at start of script
14477bug fix: (undocumented) POLYHEDRA {...} to {...} with COLOR or TRANSLUCENT fails
14478bug fix: POLYHEDRA command or COLOR POLYHEDRA can change selection
14479bug fix: PDB reader doesn't recognize 16 LINK records at start of file
14480bug fix: script xxxx(xxx)xxx/xx.xxx fails at "(" due to revision 16201 2011-10-02
14481
14482=============================================================================
14483
14484version=12.3.17
14485
14486new feature: (JspecView 2.0.10033) new script commands (indicated with *)
14487 UNKNOWN("?"),
14488 APPLETID("APPLETID"),
14489 APPLETREADYCALLBACKFUNCTIONNAME("APPLETREADYCALLBACKFUNCTIONNAME"),
14490 AUTOINTEGRATE("AUTOINTEGRATE", "TF"),
14491 BACKGROUNDCOLOR("BACKGROUNDCOLOR", "C"),
14492*CLOSE("CLOSE", "spectrumId or fileName or ALL"),
14493 COMPOUNDMENUON("COMPOUNDMENUON", "TF"),
14494 COORDCALLBACKFUNCTIONNAME("COORDCALLBACKFUNCTIONNAME"),
14495 COORDINATESCOLOR("COORDINATESCOLOR", "C"),
14496 COORDINATESON("COORDINATESON", "TF"),
14497*DEBUG("DEBUG", "TF"),
14498 DISPLAYFONTNAME("DISPLAYFONTNAME", "fontName"),
14499 ENABLEZOOM("ENABLEZOOM", "TF"),
14500 ENDINDEX("ENDINDEX"),
14501*EXPORT("EXPORT", "[JPG,PNG,XY,...] \"filename\""),
14502 GETSOLUTIONCOLOR("GETSOLUTIONCOLOR", ""),
14503 GRIDCOLOR("GRIDCOLOR", "C"),
14504 GRIDON("GRIDON", "TF"),
14505*INTEGRATE("INTEGRATE", ""),
14506 INTEGRALPLOTCOLOR("INTEGRALPLOTCOLOR"),
14507 INTEGRATIONRATIOS("INTEGRATIONRATIOS"),
14508 INTERFACE("INTERFACE"),
14509*IRMODE("IRMODE", "A or T or ?"),
14510*LABEL("LABEL", "x y [color and/or \"text\"]"),
14511*LOAD("LOAD", "[APPEND] \"fileName\""),
14512 MENUON("MENUON"),
14513 OBSCURE("OBSCURE"),
14514*OVERLAY("OVERLAY", "spectrumID, spectrumID, ..."),
14515 PEAKCALLBACKFUNCTIONNAME("PEAKCALLBACKFUNCTIONNAME"),
14516 PLOTAREACOLOR("PLOTAREACOLOR", "C"),
14517 PLOTCOLOR("PLOTCOLOR", "C"),
14518 PLOTCOLORS("PLOTCOLORS"),
14519 REVERSEPLOT("REVERSEPLOT", "TF"),
14520 SCALECOLOR("SCALECOLOR", "C"),
14521 SPECTRUM("SPECTRUM", "spectrumID"),
14522 SPECTRUMNUMBER("SPECTRUMNUMBER"),
14523 STARTINDEX("STARTINDEX"),
14524 SYNCCALLBACKFUNCTIONNAME("SYNCCALLBACKFUNCTIONNAME"),
14525 SYNCID("SYNCID"),
14526 TITLEBOLDON("TITLEBOLDON", "TF"),
14527 TITLECOLOR("TITLECOLOR", "C"),
14528 TITLEFONTNAME("TITLEFONTNAME", "fontName"),
14529 UNITSCOLOR("UNITSCOLOR", "C"),
14530 VERSION("VERSION"),
14531 XSCALEON("XSCALEON", "TF"),
14532 XUNITSON("XUNITSON", "TF"),
14533 YSCALEON("YSCALEON", "TF"),
14534 YUNITSON("YUNITSON", "TF"),
14535*ZOOM("ZOOM", "OUT or x1,x2");
14536
14537new feature: allows simpler color scheme definition
14538   color property occupancy "myscheme=red green blue"
14539   Var x = ["red","green","blue"]; color property occupancy @{"myscheme=" + x}
14540
14541bug fix: JCampDX reader resolving should allow spaces before "##TITLE"
14542bug fix: jvxl issue when color PHASE and translucent
14543 -- upon reading JVXL doesn't handle translucency right
14544 -- upon writing SPT doesn't preserve colors
14545bug fix: user variable lower case "x" not cleared by "X = none"
14546bug fix: draw HELIX fails for residue numbers < 0
14547code: better Enum structure using name()
14548
14549=============================================================================
14550
14551version=12.3.16
14552
14553new feature: (application) SYNC ON; sync * "JSpecView:..." sends commands to JSpecView
14554new feature: (JSpecView) accepts commands using public syncScript(script)
14555
14556bug fix: GAMESS-US reader error reading NBOs
14557bug fix: print [2, 3, 4].mul([3,4,5]) fails
14558bug fix: missing ANISOU records cause file-read error in PDB files
14559bug fix: JCAMP-DX reading by JSpecView for tiered BLOCK files
14560
14561=============================================================================
14562
14563version=12.3.15
14564
14565new feature: JCAMP-DX file reading
14566 -- reading of ##$MODELS and ##$PEAKS (see http://chemapps.stolaf.edu/jmol/jspecview)
14567new feature: context menu Spectra submenu
14568new feature: JSpecView integration into Jmol application
14569 -- if model/peak-enhanced JDX file is read, clicking on an atom or switching
14570    to an IR vibration or MS fragment displays the appropriately highlighted spectrum/fragment
14571new feature: sync ~ 'Select: xxx'
14572 -- xxx can include file="xxx" model="xxx" atoms="xxx" select="xxx" script="xxx"
14573 -- file and model combined as model ID "file#model"
14574 -- will automatically load the file if the given file#model ID is not found
14575 -- atoms = list of atom numbers separated by commas: 1,2,3 --> @1 or @2 or @3
14576 -- select is any valid selection such as THR or 1-30
14577 -- automatically adds "visible &" to atoms or select
14578 -- requires sync ON
14579new feature: NFF neutral file format reader (http://paulbourke.net/dataformats/nff/nff1.html)
14580             for electron microscopy data exported from IMOD
14581new feature: preliminary JCAMP-DX file reader, where <models></models> is present
14582new feature: when picking struts or delete bond or measure, distance shows as per usual measurement
14583
14584bug fix: SLAB unit cell not showing all lines
14585bug fix: CRYSTAL reader needs to change to MOLECULAR when X(ANGSTROMS) found (fullerene slab)
14586bug fix: Popup Menu item hbond calculate should not require PDB
14587
14588=============================================================================
14589
14590version=12.3.14
14591
14592bug fix: state after frame RANGE or frame 0 not saved properly (state saves "frame all" instead of "frame 0")
14593bug fix: frame n  does not work properly after load APPEND
14594bug fix: measurement units may appear as full word "nanometers" instead of "nm"
14595bug fix: user bindings do not access _atomPicked
14596 -- solution is to add _ATOM _BOND _POINT _OBJECT to user binding actions
14597
14598=============================================================================
14599
14600version=12.3.13
14601
14602new feature: isosurface SCALE extends to volume file readers
14603new feature: zoom $isosurface1 0 -- scales to match isosurface boundbox
14604
14605bug fix: getProperty("bondinfo",[{13}]) gets info for atom 13 instead of bond 13
14606bug fix: isosurface offset does not change boundbox or zoom/center points
14607note to Bob: jpe needs update of img/blank.js  js/top_buttons.js htm1/quickvs.js,qv_msgs.js molview/JmolAppletSigned.jar
14608
14609=============================================================================
14610
14611version=12.3.12
14612
14613bug fix: symmetry popup submenu not enabled
14614bug fix: show spacegroup not working
14615bug fix: lcaocartoon for allene central carbon py incorrect
14616bug fix: antialiasdisplay (and image writing) not compatible with scaleAngstromsPerInch
14617bug fix: last group of protein cartoon will not display if it is not helix and not sheet
14618bug fix: getproperty MENU does not work
14619bug fix: PDB reader of multiple-bond files with duplicated bonds does not ignore duplicate
14620
14621=============================================================================
14622
14623version=12.3.11
14624
14625new feature: plot ramachandran -- now those points .phi and psi return values
14626-- load 1crn.pdb;plot ramachandran;print {2.1}.psi
14627new feature: LOAD .... filter "reverseModels"
14628 -- does just that
14629 -- for IRC calculation transition state -> minimum reversal
14630new feature: measures "2:%VALUE %UNITS//xx"
14631 -- where xx is a specified unit such as nm or Angstroms
14632 -- overrides set measurementUnits
14633 -- fixes state problem when units or labels are changed after measurements are made
14634 -- operates on selected measurements only (or all, if no measurements are selected)
14635
14636bug fix: frame 0 during animation can cause exception
14637bug fix: changes in defaultDistanceLabel not always preserved in state correctly
14638bug fix: parameters can be set to invalid values using xxx = ... instead of set xxx ...
14639bug fix: (Application) proper Edit...Preferences dialog action
14640
14641=============================================================================
14642
14643version=12.3.10
14644
14645new feature: _animTimeSec
14646new feature: Application -- press and hold animation next/prev button to continuously run animation
14647new feature: write PDB adds CONECT records
14648 -- for all multiple bonding and all HETATM bonds
14649 -- uses CONECT i j j  to indicate multiple bonding
14650new feature: compare {from} {to} FRAME
14651 -- aligns frames automatically
14652 -- particularly nice for IRC calculation animations
14653 -- for example: compare {file=2} {1.1} FRAME
14654 -- can be followed by quaternion, atom, or SMILES options
14655 -- for example: compare {file=2} {1.1} FRAME ATOMS @1 @5  @2 @8  @3 @9
14656    (all of file 2 atoms moved) file 2 atoms 1,2,3 aligned
14657     with file 1.1 atoms 5,8,9)
14658 -- if {to} is a subset of {from}, then FRAME is unnecessary,
14659    and if ATOMS is included, then just the list of alignment
14660    atoms is necessary. For example:
14661       compare {*} {1.1}
14662       compare {*} {1.1} atoms @1 @2 @3
14663 -- see http://chemapps.stolaf.edu/jmol/docs/examples-12/mp for more examples
14664
14665bug fix: script @{x} fails
14666bug fix: Molecular Playground should allow for set allowGestures OFF to disallow swipe
14667bug fix: lcaoCartoon dual color p orbitals giving white for one lobe
14668new feature: set echo myecho SCALE 0.3 -- for image scaling
14669bug fix: after "ZAP; LOAD append"  show orientation will have incorrect zyz script
14670bug fix: function call with @x or @1 in parameters fails
14671bug fix: PNGJ reading remote fails
14672bug fix: H5T should not be used as a lead atom ever, because of set showHydrogens FALSE
14673bug fix: adding H atoms to mol2 file faulty
14674bug fix: load xxx.png;write PNGJ xxx.png (to same file as loaded) fails
14675
14676=============================================================================
14677
14678version=12.3.9
14679
14680new feature: FRAME DELAY x.y
14681 -- specific delay (in seconds) in animation at a given frame
14682 -- applies to all currently in-frame models
14683bug fix: set isKiosk should:
14684     (a) not be reversible
14685     (b) not allow file saves other than logging
14686     (c) not allow prompt dialogs
14687     (d) not allow console or popup menu or ScriptEditor
14688bug fix: background colors saved to state can be off very slightly
14689bug fix: draw PLANE with three vertices problems after save -- four-atom planes, not three
14690bug fix: x = file("?") fails on Cancel
14691bug fix: delay not allowed within try{...}
14692
14693=============================================================================
14694
14695version=12.3.8
14696
14697new feature: MolecularPlayground -- remote status and remote control
14698 -- see for example http://chemapps.stolaf.edu/jmol/mpstatus.php
14699 -- set topic, subtopic, delay from a web page
14700 -- set banner and image for website from Jmol
14701new feature: load("http://.....?POST?_PNG_") or load("http://....?POST?_PNGJ_")
14702 -- sends PNG or PNGJ image to server
14703 -- return value is whatever server is set up to send
14704 -- used by MolecularPlayground at St. Olaf to send current state to web server
14705new feature: polyhedra FULLYLIT -- useful for zeolites along with COLLAPSED
14706new feature: ZMATRIX upgraded to allow all forms of Gaussian input
14707 http://www.gaussian.com/g_tech/g_ur/c_zmat.htm
14708
14709bug fix: set picking DRAW does not work on polygon sets
14710bug fix: set picking DRAW does not report position change
14711bug fix: MPJmolApp (Molecular Playground) problems when navigation is on
14712bug fix: CifReader (molecular type, with GEOM_BOND records) adds
14713         extra atoms when embedded in JMOL or PNGJ file or part load FILES command
14714bug fix: PdbReader -- crystallographic non-PDB files not checking special positions
14715
14716=============================================================================
14717
14718version=12.3.7
14719
14720new feature: "Write PNG+JMOL" added to application and signed applet menu
14721code: dispensing with InputStream in favor of BufferedInputStream
14722new feature: write PNGJ
14723 -- creates a PNG file with appended JMOL (zip) data containing
14724    all necessary files, MANIFEST, and script file.
14725 -- viewable in directories as an "icon" and readable by image readers
14726 -- draggable back into Jmol and readable using LOAD
14727 -- PNG file includes:
14728   -- iTXt field "Jmol Type\0PNGJxxxxxxxxx+yyyyyyyyy"
14729       where xxxxxxxxx is a pointer to the ZIP data
14730             yyyyyyyyy is the number of ZIP data bytes
14731   -- iTXt field "Software\0Jmol 12.3.7  2011-10-11 15:30"
14732   -- iTXt field "Creation Time\0Tue, 24 Nov 2011 19:56:10 -0600"
14733   -- yyyyyyyyy bytes of .JMOL zip data
14734 -- show FILE "xxx.PNG" will show list of contained files.
14735 -- show state FILE "xxx.PNG" will extract state
14736 -- show FILE "xxx.PNG|1crn.pdb" for example will extract file
14737
14738new feature: simple Z-Matrix reader
14739 -- invoked by ZMATRIX:: or file starting with #ZMATRIX
14740 -- lines starting with # are comments, which can contain jmolscript:
14741 -- blank lines are ignored
14742
14743 #ZMATRIX -- methane
14744 C
14745 H   1 1.089000
14746 H   1 1.089000  2  109.4710
14747 H   1 1.089000  2  109.4710  3  120.0000
14748 H   1 1.089000  2  109.4710  3 -120.0000
14749
14750 -- allows bond order specification
14751
14752 #ZMATRIX -- CO2
14753 C
14754 O   1 1.3000                 2
14755 O   1 1.3000    2  180       2
14756
14757 -- any position number may be replaced by a unique atom name, with number:
14758
14759 #ZMATRIX -- CO2
14760 C1
14761 O1   C1 1.3000                2
14762 O2   C1 1.3000    O1  180     2
14763
14764 -- allows for dummy atoms Xn, allowing for positioning:
14765
14766 #ZMATRIX -- CO2
14767 X1
14768 X2   X1 1.0
14769 C1   X1 1.0       X2 90
14770 O1   C1 1.3000    X2 90   X1 0  2
14771 O2   C1 1.3000    O1 180  X2 0  2
14772
14773 -- negative distance indicates that the second angle is a normal angle, not a dihedral
14774
14775 #ZMATRIX -- NH3 (using simple angles only)
14776 N1
14777 H1 N1 1.0
14778 H2 N1 1.0 H1 107
14779 H3 N1 -1.0 H1 107 H2 107
14780
14781 -- negative distance and one negative angle reverses the chirality
14782
14783 #ZMATRIX -- NH3 (using simple angles only; reversed chirality)
14784 N1
14785 H1 N1 1.0
14786 H2 N1 1.0 H1 107
14787 H3 N1 -1.0 H1 -107 H2 107
14788
14789
14790 -- symbolics may be used -- they may be listed first or last
14791
14792 #ZMATRIX
14793
14794 dist 1.0
14795 angle 107
14796
14797 N1
14798 H1 N1 dist
14799 H2 N1 dist H1 angle
14800 H3 N1 -dist H1 angle H2 angle
14801
14802 -- If #ZMATRIX is not the start of the file, MOPAC style is assumed.
14803    The first two lines will be considered to be comments and ignored:
14804
14805  AM1
14806 Ethane
14807
14808 C
14809 C     1     r21
14810 H     2     r32       1     a321
14811 H     2     r32       1     a321      3  d4213
14812 H     2     r32       1     a321      3 -d4213
14813 H     1     r32       2     a321      3   60.
14814 H     1     r32       2     a321      3  180.
14815 H     1     r32       2     a321      3  d300
14816
14817 r21        1.5
14818 r32        1.1
14819 a321     109.5
14820 d4213    120.0
14821 d300     300.0
14822
14823bug fix: show orientation shows incorrect zyz format if reset uses file-based orientation matrix (smol, Sygress)
14824bug fix: isosurface plane xy map mep
14825code: MPJmolApp work
14826bug fix: user variables should not be rest by INITIALIZE in an spt file
14827bug fix: x3d/vrml outputting unnecessary spheres
14828 -- bond caps within opaque atoms removed (not precisely correct to do that)
14829bug fix: minimization broken
14830bug fix: contact still not quite right -- setting default to +0.0 instead of +0.25
14831
14832
14833=============================================================================
14834
14835version=12.3.6
14836
14837new feature: load files "xxx.tlsout" "xxxx.pdb"
14838 -- loads REFMAC-style TLS data into xxxx.pdb
14839
14840new feature: contact SASURFACE <radius>
14841 -- ignores solvent (as does CAP)
14842
14843bug fix: contact command hbond/clash cutoff not sensitive to H-O/N vs O/N-O/N
14844 -- set to -1.2 for H-N/O, -1.0 for N/O-N/O
14845bug fix: contact command default probe radius should be 0.0 except for VDW (0.25)
14846
14847bug fix: minimize constraint CLEAR  broken
14848bug fix: constraints not reported in show minimization
14849bug fix: set measures off broken
14850bug fix: contact color density broken
14851bug fix: contact volume report not correct for color density
14852bug fix: MO HOMO not set properly when using LUMO = "lowest E > 0" (GAMESS-US reader)
14853bug fix: zSlab settings not stored properly in parameters; should have default zSlab = 50
14854
14855=============================================================================
14856
14857version=12.3.5
14858
14859new feature: color isosurface PHASE color1 color2
14860 -- allows post-isosurface creation coloring by phase (atomicOrbitals)
14861bug fix: isosurface scale 0.5 plane... broken if no atoms present
14862bug fix: isosurface color density broken
14863bug fix: set PdbAddHydrogens does not transfer C atomSymmetry to H atoms
14864bug fix: contact() function not working when typed from console
14865bug fix: set axesOrientationRasmol not working properly (since 11.5.51)
14866
14867code: org.jmol.modelsetbio.BioModel localizes more bio-only code into modelsetbio package
14868code: removal of org.jmol.modelset.Polymer
14869code: refactoring and organizing RepaintManager and ShapeManager
14870
14871=============================================================================
14872
14873version=12.3.4
14874
14875bug fix: frame x.y - y.z not working
14876bug fix: with antialiasDisplay, dragMolecule goes 1/2 speed of cursor
14877bug fix: nucleic acid residues with HO5' may render last group strangely (since 12.0.RC16, 6/6/2010)
14878bug fix: workaround for weird Mac Point3i(Point3i pt) class initializer bug
14879bug fix: array.bin(low,high,binSize) not documented and can cause exception
14880bug fix: MO readers can fail if inappropriate filter "TLS" is given
14881bug fix: PDB TLS error reading TLS data missing "NUMBER OF COMPONENTS" line
14882
14883=============================================================================
14884
14885version=12.3.3
14886
14887new feature: ellipsoid SET 1; ellipsoid SET 2;
14888 -- TLS ellipsoids are dual
14889 -- TLS-S is SET 1; TLS-T is SET 2
14890 -- after issuing this command, further size or color commands affect only that set
14891 -- needs verification by Ethan Merrit
14892new feature: load xxx.pdb filter "TLS" -- loads TLS data
14893new feature: atom property property_tlsGroup
14894new feature: MolecularPlayground now accepts messages to the banner:
14895  message banner: xxxxxxx
14896new feature: MolecularPlayground fully functional.
14897             This application (MPJmolApp) is part of a three-part suite
14898             that runs on a Mac mini involving:
14899                "Hub" [name]   for overall control (Mac app; not open source yet)
14900                MPKinectDriver for obtaining motion events (Mac app; not open source yet)
14901                MPJmolApp      for displaying the results (source here)
14902             The Hub and MPJmolApp communicate over local port 31416, sending
14903             JSON messages back and forth. (See note in org.jmol.app.jsonkiosk.JsonNioService.java)
14904             For demonstrations of the installation at St. Olaf College,
14905             see the following YouTube videos:
14906                http://www.youtube.com/watch?v=iQRkuku8ry0
14907                http://www.youtube.com/watch?v=XCRrRZe1j6g
14908                http://www.youtube.com/watch?v=FTTIVWGtFD0
14909             For details relating to the original Molecular Playground
14910             installation at U. Mass.-Amherst, see
14911                http://molecularPlayground.org
14912             Note that all of the functionality of the original MP are
14913             present in MPJmolApp
14914new feature: MolecularPLayground can now ignore all Hub requests for
14915             commands and content changes, thus allowing its own configuration
14916             script to drive the presentation instead of the Hub's. So the Hub
14917             can be used simply as an interface to the Kinect driver. This just
14918             allows a simpler development interface -- a simple three-column Excel file can
14919             be used to drive a presentation. (see org.jmol.molecularplayground.biophysics.xlsx)
14920 -- MPJmolApp looks for the file MpJmolAppConfig.spt
14921 -- This file can override MPJmolApp's default parameters:
14922         NIOContentPath
14923           -- default: System.getProperty("user.dir").replace('\\', '/')
14924                           + "/Content-Cache/%ID%/%ID%.json"
14925           -- ignored if NIOcontentDisabled ends up true (see below)
14926         NIOterminatorMessage
14927           -- default: "MP_DONE"
14928         NIObannerEnabled
14929           -- default: true
14930         NIOcontentScript
14931           -- default: (not present, setting NIOcontentDisabled=false)
14932         NIOcontentDisabled
14933           -- default: true if NIOcontentScript is present; false if not
14934         NIOmotionDisabled
14935           -- default: false
14936 -- The script in MpJmolAppConfig.spt is run, along with whatever
14937     default settings are generated by the above checks.
14938 -- Parameters are set by querying the Viewer for those Jmol variables.
14939 -- If NIOcontentDisabled is true, then all JSON messages from the Hub
14940     of types "content", "command", and "banner" are ignored. It is still
14941     important that the running script send "MP_DONE" messages periodically
14942     (within every 6 minutes) so that the Hub knows that MPJmolApp is still
14943     alive and does not try to restart it.
14944 -- If NIOmotionDisabled is true, then all JSON messages from the Hub
14945     of types "move", "sync", and "touch" are ignored.
14946 -- These are checked every time a JSON command is received, so the
14947     running script can specifically turn off motion detection if that
14948     or content detection if that is desired.
14949 -- Note that MPJmolApp has a full console and menu that are available
14950     on the operator's screen, (which is just mirrored to the projector).
14951     This allows for parameter setting and adjustments on the fly.
14952
14953new feature: show NMR
14954 -- predicted NMR spectrum
14955 -- uses http://www.nmrdb.org/predictor?smiles=xxxx
14956 -- requires NCI SMILES due to bug at nmrdb not allowing "."
14957
14958bug fix: CRYSTAL reader not properly setting model properties
14959bug fix: userFunction(x,@y) should operate as per all math
14960 -- parens - value of variable pointed to by y
14961 -- x = myfunc(x, @y) same action as just myfunc(x, @y)
14962bug fix: userFunction x @y
14963 -- no parens - should operate as value of x and value of y
14964 -- @ is unnecessary but allowed
14965bug fix: set echo "myecho" [10 10%] not working
14966bug fix: apiPlatform not correctly accessed in JpegEncoder
14967bug fix: reading of JVXL files for color density fails to color properly
14968bug fix: .... vdw 100.0% --- should be OK with float there, even if it rounds.
14969
14970code: refactored for Molecular Playground and Jmol Android
14971 -- several System.out. messages present.
14972code: refactoring adapter XML readers
14973
14974=============================================================================
14975
14976version=12.3.2
14977
14978new feature: compare("XXX","XXXX","ISOMER") comparison now includes "AMBIGUOUS STEREOCHEMISTRY!"
14979new feature: show chemical XXXXX  where XXXXX is any NCI Cactus information token:
14980  stdinchikey			Standard InChIKey
14981  stdinchi				Standard InChI
14982  smiles					SMILES
14983  ficts						FICTS Identifier
14984  ficus						FICuS Identifier
14985  uuuuu						uuuuu Identifier
14986  hashisy					Cactvs HASHISY
14987  sdf							SD File
14988  names						Names
14989  iupac_name			IUPAC Name
14990  cas							CAS Registry Number(s)
14991  chemspider_id		ChemSpider ID
14992  mw							Molecular Weight
14993  formula					Chemical Formula
14994  h_bond_donor_count	      Number of Hydrogen Bond Donors
14995  h_bond_acceptor_count	    Number of Hydrogen Bond Acceptors
14996  h_bond_center_count	      Number of Hydrogen Bond Acceptors and Donors
14997  rule_of_5_violation_count	Number of Rule of 5 Violations
14998  rotor_count	              Number of Freely Rotatable Bonds
14999  effective_rotor_count	    Number of Effectively Rotatable Bonds
15000  ring_count	              Number of Rings
15001  ringsys_count	            Number of Ring Systems
15002
15003bug fix: array.bin(low,high,binSize) not documented and can cause exception
15004new feature: PQR write option
15005bug fix: load append twice can cause zap to be in wrong place in state file
15006bug fix: for (x IN {*}) ... makes x a bitset and leads to array[1] for x.atomName
15007bug fix: for (x IN {*}.bonds) does not work
15008bug fix: POV-Ray export of cartoons broken
15009bug fix: script javascript:xxxx()  broken
15010new feature: set vectorSymmetry -- displays vibration vectors as double-ended arrows.
15011bug fix: SMILES comparison when the number of stereocenters is not the same is wrong
15012code: popup/modelkit refactoring to isolate awt/Swing references
15013bug fix: connection deletion removes all measurements -- can't imagine why...
15014code: JmolModelKitInterface part of apiPlatform call
15015code: JmolPromptInterface replaced with apiPlatform call
15016
15017=============================================================================
15018
15019version=12.3.1
15020
15021new feature: CASTEP reader (take 2)
15022 -- reads Mulliken files by default, Hirshfield with filter "CHARGE=HIRSH"
15023 -- reads spins into {*}.property_spin. label is %[property_spin]
15024 -- reads Born charge tensors as atom ellipsoids
15025
15026bug fix: H2,H3 connected to terminal N of protein not backbone
15027bug fix: select PROTEIN selects non-PDB atoms
15028bug fix: Molden reader does not read "Sym=X" (missing space after '=')
15029bug fix: Molden reader does not read angstrom units
15030bug fix: color isosurface {atomset} <color>  does not work if isosurface has not already been mapped.
15031bug fix: PDB reader not reading Rasmol-style files with multiple bonding
15032 CONECT   1  2  2
15033   or
15034 CONECT   1  2
15035 CONECT   1  2
15036    means for Rasmol double bond between atoms 1 and 2
15037
15038code: experimenting with fragmentation of applet core classes into _1b, _1c, _1d, _1e, _1f
15039
15040version=12.3.0
15041
15042October 4, 2011
15043
15044
15045======================================
15046
15047some feature notes:
15048
15049
15050bug fix: var firstPARAM  = "p1_b"; x = [FIRSTParam: "p1_a"]; results in lowering of case as [firstparam:....]
15051bug fix: set drawPicking draw;set drawpicking  does not show handles
15052bug fix; point group not calculated when the selected atoms are a subset of a model
15053bug fix: x.find("SMILES") is incorrect for structures that have hypervalent atoms and branches such as inorganic nitrates
15054bug fix: msCIF reading with two models, and only one has displacement modulation causes "render error" crash
15055bug fix: msCIF reader failing for Legendre polynomials of order greater than 4
15056bug fix: DRAW for quadrilateral broken when perspective depth is turned off.
15057bug fix: SET ECHO IMAGE broken in JavaScript version
15058
15059
15060feature note: Jmol 14.5.2
15061
15062FEATURE NOTE: Prior to this version if the MO command was issued after use of
15063              rotateSelected, the orbitals were calculated improperly, because the
15064              basis functions always must be applied for the original file coordinate
15065              frame, not the rotated frame. In addition, if MOs were calculated prior to
15066              use of rotateSelected or translateSelected, then they would not "track"
15067              with the modified atom positions. So MOs and rotate/translateSelected
15068              were completely incompatible. Jmol 14.4.2 fixes this issue. It should be
15069              possible now to produce correct MOs before or after use of rotateSelected.
15070              Note that ALL atoms in a specified model must be moved in order for this
15071              tracking of MOs to take place. This functionality was introduced in
15072              14.4.1_2016.01.28, but that version (never released) does not properly
15073              check to see that ALL the atoms in a model have been involved in the rotation.
15074
15075FEATURE NOTE: If rotateSelected or translateSelected is used to move all atoms in a
15076              model, and after that the state is saved, then Jmol 14.4.2
15077              will save a state that is not readable in 14.4.1. This is necessary
15078              because of the added FRAME ORIENTATION command, which is used in the states
15079              to indicate the relationship of a model to its file coordinates. The MO
15080              reader requires this so that it can rotate the coordinates back to their
15081              original position prior to doing its calculation.
15082
15083FEATURE NOTE: Jmol 14.5.4 now has a RELATIVELY COMPLETE set of analysis and visualization
15084  tools for space group symmetry. All  standard and magnetic space group operations
15085  are covered. Features are concentrated in four command options and one function:
15086
15087  LOAD .... SPACEGROUP .... UNITCELL ....
15088  SHOW SYMOP ....
15089  DRAW SYMOP ....
15090  DRAW POINTGROUP SPACEGROUP
15091  x = symop(....)
15092
15093  With these features, you can:
15094
15095   -- load any model while applying any actual or conceivable space group or subset of a space group
15096   -- tabulate all space group operations associated with that model
15097   -- retrieve an associative array indicating all aspects of the operation, including
15098      point, rotation axis, plane, glide vector, lattice offset vector, and 4x4 matrix
15099   -- visualize all aspects of an operation, including proper and improper rotations
15100      inversion centers, mirror planes, glide planes, translations, and magnetic spin time reversal
15101   -- apply any operation to any atom or any point in space
15102   -- given any combination of two atoms or two points in space, determine and/or
15103      depict the operation(s) that relate those to atoms or positions
15104
15105
15106
15107feature note: Jmol 14.3 introduces several very powerful and very different capabilities
15108              to Jmol in the area of crystallography. Many of these features are nonexistent
15109              in other programs.  They involve:
15110
15111  - an extension of SMILES to compare bonding topology irrespective of atom identity.
15112    (Are these two atom environments both iscoahedral?)
15113
15114      x = {@1 and 1.1 and connected(@1)}.find("SMILES", "*"}
15115      y = {2.1}.find("SMARTS", x)
15116
15117  - the generation of polyhedra in crystal structures for which only the central atom
15118    may be loaded.
15119    (What is the atom environment around Au3 in this crystal structure?)
15120
15121      load t.cif  // just the unit cell, maybe just one atom even
15122      polyhedra 4-12 UNITECELL @1
15123
15124  - the ability to load a given block of space (such as a 10x10x10-Angstrom cube)
15125    with a crystal structure irrespective of its given unit cell.
15126    (Are these two structures that have totally different unit cells really that different?)
15127
15128      load t.cif FILL
15129      load t.cif FILL 20
15130      load t.cif FILL {20 10 10}
15131      load t.cif FILL [{0 0 0} {5.2 5.2 0} {-5.2 5.5 0} {1.3 0 3.3}]
15132
15133  - the ability to show and draw the point group of a polyhedron
15134
15135      load t.cif
15136      polyhedron 12 unitcell @1
15137      select @1
15138      show pointgroup POLYHEDRON
15139      draw pointgroup POLYHEDRON
15140
15141  - the ability to extract information about polyhedra
15142
15143    print getProperty("shapeInfo.polyhedra[1]").keys
15144
15145		_ipt
15146		center
15147		modelIndex
15148		planeCount
15149		polygons
15150		vertexCount
15151		vertices
15152
15153  - the ability to select polyhedra
15154
15155		select polyhedra
15156		select polyhedra(4)
15157
15158		print polyhedra()
15159		print polyhedra(4)
15160
15161
15162  - the ability to draw points from derived arrays
15163
15164    draw diameter 0.2 points @{getProperty("shapeInfo.polyhedra[1].vertices")}
15165
15166
15167Jmol 14.3.15
15168
15169new feature: MACRO command
15170 -- runs predefined script, generally defining new functions of general use
15171 -- contributions welcome!
15172 -- will be expanded
15173
15174		$ macro aflow
15175		running http://aflowlib.mems.duke.edu/users/jmolers/jmol/spt/AFLOW.spt
15176		aflowLoad(binaryAlloy) loaded
15177		aflowBinaries loaded
15178		aflowDualArray(binaryAlloy, a, b) loaded
15179		aflowDualWrite loaded
15180		aflowConvexHull(binaryAlloy) loaded
15181		aflowCheckBinary(binaryAlloy) loaded
15182		aflowGetPG(binaryAlloy, a, range1, range2,radius) loaded
15183		$ aflowLoad("AgAu")
15184		294 models
15185
15186		$ print aflowConvexHull
15187		  {
15188		    "Cb"  :  0.0
15189		    "Hf_eV_VASP"  :  0.0
15190		    "modelNumber"  :  2
15191		   }
15192		  {
15193		    "Cb"  :  0.25
15194		    "Hf_eV_VASP"  :  -0.0472733
15195		    "modelNumber"  :  26
15196		   }
15197		  {
15198		    "Cb"  :  0.5
15199		    "Hf_eV_VASP"  :  -0.085589
15200		    "modelNumber"  :  180
15201		   }
15202		  {
15203		    "Cb"  :  0.75
15204		    "Hf_eV_VASP"  :  -0.0463823
15205		    "modelNumber"  :  25
15206		   }
15207		  {
15208		    "Cb"  :  1.0
15209		    "Hf_eV_VASP"  :  0.0
15210		    "modelNumber"  :  260
15211		   }
15212
15213
15214
15215
15216
15217
15218