public class Expression extends TypedAtomicActor
Engine
. The expression is any valid matlab expression, e.g.:
[out1, out2, ... ] = SomeMatlabFunctionOrExpression( in1, in2, ... );...
The expression may include references to the input port names, current time (time), and a count of the firing (iteration). This is similar to Expression. To refer to parameters in scope, use $name or ${name} within the expression.
The matlab engine is opened (started) during prefire() by the first matlab Expression actor. Subsequent open()s simply increment a use count.
At the start of fire(), clear variables;clear globals commands are sent to matlab to clear its workspace. This helps detect errors where the matlab expression refers to a matlab variable not initialized from the input ports of this actor instance.
After the evaluation of the matlab expression is complete, the fire()
method iterates through names of output ports and converts matlab
variables with corresponding names to Tokens that are sent to the
corresponding output ports. Incorrect expressions are usually first
detected at this point by not finding the expected variables. If an
output port variable is not found in the matlab Engine
, an
exception is thrown. The exception description string contains the last
stdout of the matlab engine that usually describes the error.
The get1x1asScalars
and getIntegerMatrices
control
data conversion (see Engine
and
Engine.ConversionParameters
).
A Parameter named packageDirectories may be added to this actor to augment the search path of the matlab engine during the firing of this actor. The value of this parameter should evaluate to a StringToken, e.g.:
"path1, path2, ..."
containing a comma-separated list of paths to be prepended to the matlab
engine search path before expression is evaluated. The list may
contain paths relative to the directory in which ptolemy was started,
or any directory listed in the current classpath (in that order, first
match wins). See UtilityFunctions.findFile(String)
.
After evaluation, the previous search path is restored.
A Parameter named _debugging may be used to turn on debug print
statements to stdout from Engine
and the ptmatlab JNI. An IntToken
with a value of 1 turns on Engine debug statements, a value of 2 adds
ptmatlab debug statements as well. A value of 0 or the absence of the
_debugging parameter yields normal operation.
For this actor to work, Matlab must be installed on your local
machine. In addition, your environment must be set properly. The
$PTII/bin/vergil
script does this for you, below are
instructions for users, such as Eclipse users, who are not using
$PTII/bin/vergil
.
Add the Matlab shared libraries to your the library path. In the examples
below $MATLAB
should be the location of your Matlab installation. For example, if
/usr/bin/matlab is a link:
bash-3.2$ which matlab /usr/bin/matlab bash-3.2$ ls -l /usr/bin/matlab lrwxr-xr-x 1 root wheel 42 Jan 15 20:57 /usr/bin/matlab -> /Applications/MATLAB_R2009b.app/bin/matlab bash-3.2$Then $MATLAB would be /Applications/MATLAB_R2009b.app
export DYLD_LIBRARY_PATH=$MATLAB/bin/maci
export DYLD_LIBRARY_PATH=$MATLAB/bin/maci64
export LD_LIBRARY_PATH=$MATLAB/bin/gnlx86
export LD_LIBRARY_PATH=$MATLAB/bin/glnxa64
Be sure that the matlab binary is in your path
Red (cxh) |
Yellow (zkemenczy) |
Entity.ContainedObjectsIterator
Modifier and Type | Field and Description |
---|---|
Parameter |
clearEnvironment
If true, clear variables and globals before each execution.
|
(package private) long[] |
engine |
StringParameter |
expression
The parameter that is evaluated to produce the output.
|
Parameter |
get1x1asScalars
If true (checked), 1x1 matrix results are converted to
ScalarTokens instead of a 1x1 MatrixToken, default is
true.
|
Parameter |
getIntegerMatrices
If true, all double-valued matrix results are checked to see if
all elements represent integers, and if so, an IntMatrixToken is
returned, default is false for performance reasons.
|
TypedIOPort |
output
The output port.
|
_typesValid
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description |
---|
Expression(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name.
|
Modifier and Type | Method and Description |
---|---|
protected java.util.Set<Inequality> |
_defaultTypeConstraints()
Default type constraints do not apply in this case, since the input
type may be totally unrelated to the output type and cannot be
inferred; return null.
|
java.lang.Object |
clone(Workspace workspace)
Clone the actor into the specified workspace.
|
void |
fire()
Evaluate the expression and send its result to the output.
|
void |
initialize()
Initialize the iteration count to 1.
|
boolean |
postfire()
Increment the iteration count.
|
boolean |
prefire()
Return true if all input ports have at least one token.
|
void |
preinitialize()
Open a matlab engine.
|
void |
wrapup()
Close matlab engine if it was open.
|
_containedTypeConstraints, _customTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeChanged, attributeDeleted, attributeList, attributeList, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, stop, stopFire, terminate
addInitializable, removeInitializable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
getDerivedLevel, getDerivedList, propagateValue
public TypedIOPort output
public StringParameter expression
public Parameter get1x1asScalars
public Parameter getIntegerMatrices
public Parameter clearEnvironment
long[] engine
public Expression(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
container
- The container.name
- The name of this actor.IllegalActionException
- If the actor cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
iteration
public member to the parameters of the new actor.clone
in class TypedAtomicActor
workspace
- The workspace for the new object.java.lang.CloneNotSupportedException
- If a derived class contains
an attribute that cannot be cloned.NamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
public void preinitialize() throws IllegalActionException
preinitialize
in interface Initializable
preinitialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If matlab engine not found.public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the parent class throws it.public boolean prefire() throws IllegalActionException
prefire
in interface Executable
prefire
in class AtomicActor<TypedIOPort>
IllegalActionException
- Not thrown in this base class.public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the evaluation of the expression
triggers it, or the evaluation yields a null result, or the evaluation
yields an incompatible type, or if there is no director.public boolean postfire() throws IllegalActionException
postfire
in interface Executable
postfire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the superclass throws it.public void wrapup() throws IllegalActionException
wrapup
in interface Initializable
wrapup
in class AtomicActor<TypedIOPort>
IllegalActionException
- Not thrown in this base class.protected java.util.Set<Inequality> _defaultTypeConstraints()
_defaultTypeConstraints
in class TypedAtomicActor