Was this page helpful?

Mathematica

Follow these steps to integrate the Shared Data Access System (SDAS) in your Mathematica code.
This tutorial uses the J/Link package, which is included in the standard installation of Mathematica from version 4.1.
All the examples were successfully tested in MS Windows and some linux distributions like Gentoo, Fedora and Red Hat.

Download the libraries

Download the following libraries into a folder of your system:

Apache XML-RPC
Apache Jakarta Commons
SDAS Core Libraries
SDAS Client

Since the server at baco computer uses an older version, if you are planing on accessing it, you should download this version of SDAS Core Libraries and Client:

SDAS Core Libraries
SDAS Client

Set the classpath

Add all of the previous libraries to your system classpath:
windows.gif
Open the windows System Properties (right - click on My Computer or go to the Control Panel)
Select the tab Advanced
Click on Environment Variables...
In the system variables click New...
The Variable name is: CLASSPATH
In the value field (supposing you saved the libraries in c:\sdas) enter the following value:

.;C:\sdas\xmlrpc-2.0.jar;C:\sdas\commons-codec-1.3.jar;C:\sdas\SDAS.jar;C:\sdas\SDASClient.jar;%CLASSPATH%


linux.gif
Supposing you saved the libraries in /home/yourname/sdas/ do:

export SDAS_LIBS=/home/yourname/sdas
export CLASSPATH="$CLASSPATH:.:$SDAS_LIBS/xmlrpc-2.0.jar:$SDAS_LIBS/SDAS.jar:$SDAS_LIBS/commons-codec-1.3.jar:$SDAS_LIBS/SDASClient.jar"

Test the java connection

First you will need to load the J/Link package:

Needs["JLink`"]

Check the version of java that Mathematica is using. You can do this with the fuction ShowJavaConsole[]
The SDAS libraries requires java 1.5 or higher. If this is what your version of Mathematica uses, you can simply call

ReinstallJava[];

If not, you can tell it to use another java runtime. In Linux, it could be something like this, for example:

ReinstallJava[CommandLine->"/opt/jdk1.5.0_06/jre/bin/java"];

In Windows, it could be:

ReinstallJava[CommandLine->"C:\\Program Files\\java\\jdk1.5.0_06\\jre\\java.exe"];

Get a connection to the sdas server

client=JavaNew["org.sdas.core.client.SDASClient", "baco.ipfn.ist.utl.pt",8888];

If you get an error check the classpath.

Search events

found=client@searchDeclaredEventsByName["S"];

found=client@searchDeclaredEventsByName["S"];

found=client@searchDeclaredEventsByName["SHOT","pt"];

found=client@searchDeclaredEventsByUniqueID["SHOT"];

found=client@searchDeclaredEventsByDescription["SHOT"];

found=client@searchDeclaredEventsByDescription["SHOT","pt"];

Do[Print[found[[i]]@toString[]], {i, Length[found]}];

max=client@searchMaxEventNumber["0x0000"]

min=client@searchMinEventNumber["0x0000"]

Search events in a time window

NOTE: You can construct time with a resolution of picosseconds, just add to the example values for millis, micros, nanos and picos NOTE 2: Date constructors have the months index to 0 (January is 0 and December is 11)

Search events in December 2005:

datestart=JavaNew["org.sdas.core.time.Date", 2005, 11, 1];
dateend=JavaNew["org.sdas.core.time.Date", 2005, 11, 31];
tstart=JavaNew["org.sdas.core.time.TimeStamp", datestart];
tend=JavaNew["org.sdas.core.time.TimeStamp", dateend];

eventsFound=client@searchEventsByEventTimeWindow[tstart,tend];

Do[Print[eventsFound[[i]]@toString[]], {i, Length[eventsFound]}];

Search events in the 22 December 2005 between 5pm and 6pm:

datestart=JavaNew["org.sdas.core.time.Date", 2005, 11, 22];
dateend=JavaNew["org.sdas.core.time.Date", 2005, 11, 22];
timestart=JavaNew["org.sdas.core.time.Time", 17, 0,0];
timeend=JavaNew["org.sdas.core.time.Time", 18, 0,0];
tstart=JavaNew["org.sdas.core.time.TimeStamp", datestart, timestart];
tend=JavaNew["org.sdas.core.time.TimeStamp", dateend, timeend];

eventsFound=client@searchEventsByEventTimeWindow[tstart,tend];

Do[Print[eventsFound[[i]]@toString[]], {i, Length[eventsFound]}];

Search parameters

parametersFound = client@searchParametersByName["DENS"];

parametersFound = client@searchParametersByName["DENS", "pt"];

parametersFound = client@searchParametersByUniqueID["DENS"];

parametersFound = client@searchParametersByDescription["current"];

parametersFound = client@searchParametersByDescription["corrente", "pt"];

Do[Print[parametersFound[[i]]@toString[]], {i, Length[parametersFound]}];

Search data

This function returns the parameters unique identifiers where the data isn’t null for the selected event:

dataFound=client@searchDataByEvent["0x0000",12050];
Do[Print[dataFound[[i]]], {i, Length[dataFound]}];

Get data

If data exists this method will return an array with one or more data structures (in the case data was acquired with different acquisition frequencies).

NOTE: The unique identifiers are CASE-SENSITIVE

Data for only one parameter

dataFound = client@searchDataByEvent["0x0000", 17898];

Data for several parameters in the same event

dataStruct=client@getMultipleData[{"POST.PROCESSED.DENSITY", "POST.PROCESSED.IPLASMA"}, "0x0000", 17898]

Data for several parameters in different events

dataStruct=client@getMultipleData[{"POST.PROCESSED.DENSITY", "POST.PROCESSED.IPLASMA"}, {"0x0000","0x0000"}, {17898, 17899}]

Data for the same parameter in different events

dataStruct=client@getMultipleData["POST.PROCESSED.DENSITY", {"0x0000","0x0000"}, {17898, 17899}]   

Data for the same parameter in different event numbers

dataStruct=client@getMultipleData["POST.PROCESSED.DENSITY", "0x0000", {17898, 17899}]

This data structure gives you information about:

  • start time
  • end time
  • time of the event
  • mime_type
  • the parameter unique identifier

This is an example that shows how to extract the data from the structure:

dataStruct=client@getMultipleData[{"POST.PROCESSED.DENSITY", "POST.PROCESSED.IPLASMA"},"0x0000", 17898];
cosine = dataStruct[[1]]
cosine = cosine[[1]]@getData[];
isine = dataStruct[[2]];
isine = isine[[1]]@getData[];

The time stamps for the starting time, end time and event time can be obtained like this:

dataStruct=dataStruct[[1]];
tstart=dataStruct[[1]]@getTStart[];
tend=dataStruct[[1]]@getTEnd[];
events=dataStruct[[1]]@getEvents[];
tevent=events[[1]]@getTimeStamp[];

To convert a time stamp to microseconds:

tstart@getTimeInMicros[]
Was this page helpful?
Tag page (Edit tags)
  • No tags
You must login to post a comment.
Powered by MindTouch Core