Re: [Jmol-users] Best way to access getproperty with JSmol

2016-10-22 Thread Mark Perri
Dear Bob and Matt,

Thanks for the advice.  I couldn't get 
jmolApplet0._applet.viewer.getAuxiliaryInfo(6).get("moData") to work (I also 
tried .ms and .ms.am and various frames with MO Data) -- I got errors about 
a.get() not being a function and other things.

Matt's suggestion works well.  I was just extracting the MO energies, so I used 
getPropertyAsArray to only get an array of the energies, which was much much 
faster than what I was doing.  I then iterated through the frames to get the 
vibrational frequencies as well.  I thought there should be a faster way -- 
when you load the model it prints all the vibrational energies out, but I 
wasn't sure how to associate them with their particular frame so that I could 
animate them. But iterating frame by frame works out OK.

I have a feeling I could optimize it even more, but it's definitely improved 
now.

Thanks,
Mark




From: Kubasik, Matthew A. <mkuba...@fairfield.edu>
Sent: Saturday, October 22, 2016 8:51 AM
To: jmol-users@lists.sourceforge.net
Subject: Re: [Jmol-users] Best way to access getproperty with JSmol

Dear Mark and Bob,

Perhaps getting a large quantity of “auxiliarydata” is slowing things down?

Maybe, Mark, you could drill down a bit to get the specific auxiliary data that 
you want.  So, for example, maybe instead of

var x = Jmol.getPropertyAsArray(jmolApplet0,"auxiliaryInfo");

You could use

var x = Jmol.getPropertyAsArray(jmolApplet0, 
“auxiliaryinfo.models[1].modata.mos.coefficients”)  // where [1] is the model # 
with the mo data

I’m not sure exactly what properties of the mos that you want, and I am not 
familiar with GAMESS.  However, the above line might get you a 2D array 
containing mo coefficients.  So, for example, the coefficients of the first mo 
would be in (x[1])[1], the second set of coefficients would be in (x[1])[2], 
etc.

Also, the frequencies can be obtained from

x=Jmol.getPropertyAsArray(jmolApplet0, 
"modelinfo.models.modelproperties.frequency”)

That’s how I understand it, but I’m not 100% sure this will work.

Matt Kubasik

On Oct 22, 2016, at 8:30 AM, Robert Hanson 
<hans...@stolaf.edu<mailto:hans...@stolaf.edu>> wrote:

If you are interested in just getting one model's auxiliary info, you can use _M

$ load c:/temp/t.gamess
7 models
46 molecular orbitals in model 1.2
17 molecular orbitals in model 1.7

$ frame 1.7
$ print _M.keys
Energy
EnergyString
dipole
fileName
fileType
initialAtomCount
initialBondCount
moData
modelFileNumber
modelName
modelNumber
modelNumberDotted
modelProperties


>From JavaScript you would use:


info = Jmol.evaluateVar(jmolApplet0, "_M")

Should be relatively efficient.

Alternatively, if you want instantaneous direct access to that Java object you 
can use

info = 
jmolApplet0._applet.viewer.ms.am<http://applet.viewer.ms.am/>[0].auxiliaryInfo

But two caveats:

1) You are bypassing the interfaces and tapping in to officially "nonpublic" 
objects. Sometimes those underlying objects get name changes or are otherwise 
refactored.

2) You are working with a transpiled Java Object. In this case, 
java.util.Hashtable. You  have to use .get(key) to access its information:

jmolApplet0._applet.viewer.ms.getAuxiliaryInfo(6).__CLASS_NAME__
"java.util.Hashtable"

modata = jmolApplet0._applet.viewer.getAuxiliaryInfo(6).get("moData")
modata.__CLASS_NAME__
"java.util.Hashtable"

and deal with all of those values appropriately as well.








On Fri, Oct 21, 2016 at 7:54 PM, Mark Perri 
<per...@sonoma.edu<mailto:per...@sonoma.edu>> wrote:


Dear users list,


I'm trying to get MO energies and vibrational frequencies from a GAMESS output 
file that I read into JSmol.  Right now I use:

var x = Jmol.getPropertyAsArray(jmolApplet0,"auxiliaryInfo");


Then I iterate over every frame and look at x.models[i].moData.mos and 
x.models[i].modelProperties.Frequency


But for a large file the getPropertyAsArray takes > 10 seconds and freezes 
Firefox while it's loading.  Reading the manual it seems that I can use 
getProperty asynchronously, but I don't understand how to use it properly.


I set a message callback function to handle getProperty, but I'm not sure how 
to actually read in the moData.  It appears to be in arguments[1], but 
everything I try is undefined.  Here's an example of what I've tried.


Thanks,

Mark


var Info = {
width: 450,
height: 450,
debug: false,
color: "white",
addSelectionOptions: false,
serverURL: "http://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php;,
use: "HTML5",
j2sPath: "/jsmol/j2s",
readyFunction: jmol_isReady,
script: script,
loadStructCallback: "onJSmolLoad",
messageCallback: "processFrames",
disableInitialConsole: true
}


function processFrames()
{

 for (i=0; i<argumen

[Jmol-users] Best way to access getproperty with JSmol

2016-10-21 Thread Mark Perri
Dear users list,


I'm trying to get MO energies and vibrational frequencies from a GAMESS output 
file that I read into JSmol.  Right now I use:

var x = Jmol.getPropertyAsArray(jmolApplet0,"auxiliaryInfo");


Then I iterate over every frame and look at x.models[i].moData.mos and 
x.models[i].modelProperties.Frequency


But for a large file the getPropertyAsArray takes > 10 seconds and freezes 
Firefox while it's loading.  Reading the manual it seems that I can use 
getProperty asynchronously, but I don't understand how to use it properly.


I set a message callback function to handle getProperty, but I'm not sure how 
to actually read in the moData.  It appears to be in arguments[1], but 
everything I try is undefined.  Here's an example of what I've tried.


Thanks,

Mark


var Info = {
width: 450,
height: 450,
debug: false,
color: "white",
addSelectionOptions: false,
serverURL: "http://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php;,
use: "HTML5",
j2sPath: "/jsmol/j2s",
readyFunction: jmol_isReady,
script: script,
loadStructCallback: "onJSmolLoad",
messageCallback: "processFrames",
disableInitialConsole: true
}


function processFrames()
{

 for (i=0; i