[kepler-dev] r8319 - in kepler.build/branches/1.0: . preparation preparation/module-info preparation/workflows

Chad Berkley berkley at nceas.ucsb.edu
Mon Nov 17 09:28:23 PST 2008


Hi,

Did you mean to put this in the kepler.build directory?  kepler.build is 
reserved for the build system.  I think it probably belongs in the 
kepler/trunk/workflows directory.  If you didn't mean to put it there, 
could you please move it?

thanks,
chad


koehler at ecoinformatics.org wrote:
> Author: koehler
> Date: 2008-11-17 09:21:58 -0800 (Mon, 17 Nov 2008)
> New Revision: 8319
> 
> Added:
>    kepler.build/branches/1.0/preparation/
>    kepler.build/branches/1.0/preparation/module-info/
>    kepler.build/branches/1.0/preparation/module-info/module-locations.txt
>    kepler.build/branches/1.0/preparation/module-info/modules.txt
>    kepler.build/branches/1.0/preparation/preparation.iml
>    kepler.build/branches/1.0/preparation/workflows/
>    kepler.build/branches/1.0/preparation/workflows/preparation-comadv1.moml
>    kepler.build/branches/1.0/preparation/workflows/preparation-pre1v4.moml
> Log:
> preparation workflow with parameters in COMAD and SDF
> 
> Added: kepler.build/branches/1.0/preparation/module-info/module-locations.txt
> ===================================================================
> 
> Added: kepler.build/branches/1.0/preparation/module-info/modules.txt
> ===================================================================
> --- kepler.build/branches/1.0/preparation/module-info/modules.txt	                        (rev 0)
> +++ kepler.build/branches/1.0/preparation/module-info/modules.txt	2008-11-17 17:21:58 UTC (rev 8319)
> @@ -0,0 +1,6 @@
> +preparation
> +comad-mods
> +comad
> +loader
> +kepler
> +ptolemy
> \ No newline at end of file
> 
> Added: kepler.build/branches/1.0/preparation/preparation.iml
> ===================================================================
> --- kepler.build/branches/1.0/preparation/preparation.iml	                        (rev 0)
> +++ kepler.build/branches/1.0/preparation/preparation.iml	2008-11-17 17:21:58 UTC (rev 8319)
> @@ -0,0 +1,13 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<module relativePaths="true" type="JAVA_MODULE" version="4">
> +  <component name="NewModuleRootManager" inherit-compiler-output="true">
> +    <exclude-output />
> +    <content url="file://$MODULE_DIR$">
> +      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
> +    </content>
> +    <orderEntry type="inheritedJdk" />
> +    <orderEntry type="sourceFolder" forTests="false" />
> +    <orderEntryProperties />
> +  </component>
> +</module>
> +
> 
> Added: kepler.build/branches/1.0/preparation/workflows/preparation-comadv1.moml
> ===================================================================
> --- kepler.build/branches/1.0/preparation/workflows/preparation-comadv1.moml	                        (rev 0)
> +++ kepler.build/branches/1.0/preparation/workflows/preparation-comadv1.moml	2008-11-17 17:21:58 UTC (rev 8319)
> @@ -0,0 +1,6471 @@
> +<?xml version="1.0" standalone="no"?>
> +<!DOCTYPE entity PUBLIC "-//UC Berkeley//DTD MoML 1//EN"
> +    "http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd">
> +<entity name="preparation-comadv1" class="ptolemy.actor.TypedCompositeActor">
> +    <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +    </property>
> +    <property name="ComadDirector" class="org.kepler.domains.ComadDirector">
> +        <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +        </property>
> +        <property name="initialQueueCapacity" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +        <property name="maximumQueueCapacity" class="ptolemy.data.expr.Parameter" value="65536">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:director:2:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.domains.ComadDirector">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:2:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#Directors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-355.0, -155.0]">
> +        </property>
> +    </property>
> +    <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={176, 105, 830, 853}, maximized=false}">
> +    </property>
> +    <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[547, 732]">
> +    </property>
> +    <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +    </property>
> +    <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-341.7789277772645, 162.0}">
> +    </property>
> +    <entity name="CollectionComposer" class="org.kepler.coactors.CollectionComposer">
> +        <property name="Signature" class="org.kepler.util.CoactorParameter" value="">
> +        </property>
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="">
> +        </property>
> +        <property name="collectionXml" class="ptolemy.kernel.util.StringAttribute" value="  &lt;Metadata key=&quot;repository&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;https://outrage.ca.sandia.gov/svn/s3d/simulators/S3D-IO&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;repository2&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;https://outrage.ca.sandia.gov/svn/s3d/test_suite&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;target&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;cobalt at localhost&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;dir&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;test_suite&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;tempdir&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;temp_build_directory&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;emptydir&quot; type=&quot;StringToken&quo
t;
>   class=&quot;ptolemy.data.StringToken&quot;&gt;empty_temp_build_directory&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;mask&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;{&quot;[0-9]-*&quot;}&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;dirprefix&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;s3d_run_&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;targetdir&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;~&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;jobscriptlocation&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;~/Documents/davis-1/project/S3D-IO/run/job_XT4.sh&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;jobcommand&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data.StringToken&quot;&gt;~/bin/qsub job_XT4.sh;&lt;/Metadata&gt;&#10;  &lt;Metadata key=&quot;localtempdir&quot; type=&quot;StringToken&quot; class=&quot;ptolemy.data
.S
>  tringToken&quot;&gt;~&lt;/Metadata&gt;&#10;&lt;Collection label=&quot;Job&quot;&gt;&#10;&lt;/Collection&gt;&#10;">
> +            <property name="CollectionXmlStyle" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="10">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="30">
> +                </property>
> +            </property>
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:actor:6:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CollectionComposer">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:6:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-540.0, -75.0]">
> +        </property>
> +    </entity>
> +    <entity name="Checkout_1" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-425.0, -30.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-78.0, 178.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-165.0, -80.0]">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-455.0, 25.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{75.0, 40.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target, peer]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-400.0, 0.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=repository, peer]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-425.0, 75.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-135.0, 20.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;echo co &quot;+repository">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-285.0, 85.0]">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="repository" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken [key=target, peer]" relation="relation"/>
> +        <link port="StringToken [key=repository, peer]" relation="relation4"/>
> +        <link port="SSH Execute cmd.target" relation="relation"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.repository" relation="relation4"/>
> +    </entity>
> +    <entity name="Checkout_2" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-310.0, -30.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-168.0, 178.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-155.0, -70.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-445.0, 35.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{85.0, 50.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target, peer]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-310.0, -10.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=repository2, peer]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-370.0, 50.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-125.0, 30.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;echo co &quot;+repository">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-275.0, 95.0}">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="repository" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken [key=target, peer]" relation="relation"/>
> +        <link port="StringToken [key=repository2, peer]" relation="relation4"/>
> +        <link port="SSH Execute cmd.target" relation="relation"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.repository" relation="relation4"/>
> +    </entity>
> +    <entity name="SSH_Dir" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-205.0, -30.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={500, 189, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-9.0, 84.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[20.0, -85.0]">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-305.0, 0.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{390.0, 60.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-240.0, -55.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-255.0, -10.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=mask]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-245.0, 50.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=repository]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-200.0, 80.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="DirNames/StringToken+" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[130.0, 25.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-235.0, 175.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="DirNames/StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-100.0, 175.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="DirNames/StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-10.0, -120.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SshDirectoryList_v1_" class="org.kepler.actors.io.SshDirectoryList_v1_2">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="newFilesOnly" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-25.0, -10.0]">
> +            </property>
> +        </entity>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex" value="[-105.0, -45.0]">
> +            </vertex>
> +        </relation>
> +        <link port="StringToken [key=target]" relation="relation6"/>
> +        <link port="StringToken [key=dir]" relation="relation5"/>
> +        <link port="StringToken [key=repository]" relation="relation"/>
> +        <link port="DirNames/StringToken+" relation="relation2"/>
> +        <link port="StringToken [key=tempdir]" relation="relation4"/>
> +        <link port="DirNames/StringToken [key=tempdir]" relation="relation4"/>
> +        <link port="DirNames/StringToken [key=target]" relation="relation6"/>
> +        <link port="SshDirectoryList_v1_.target" relation="relation6"/>
> +        <link port="SshDirectoryList_v1_.dir" relation="relation5"/>
> +        <link port="SshDirectoryList_v1_.trigger" relation="relation"/>
> +        <link port="SshDirectoryList_v1_.newFiles" relation="relation2"/>
> +    </entity>
> +    <entity name="CollectionDisplay" class="org.kepler.coactors.CollectionDisplay">
> +        <property name="Signature" class="org.kepler.util.CoactorParameter" value="">
> +        </property>
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="/">
> +        </property>
> +        <property name="showDetails" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="showProvenance" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="stringsOnSingleLines" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="columnsDisplayed" class="ptolemy.data.expr.Parameter" value="60">
> +        </property>
> +        <property name="rowsDisplayed" class="ptolemy.data.expr.Parameter" value="20">
> +        </property>
> +        <property name="clearDisplayOn" class="ptolemy.data.expr.StringParameter" value="">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:actor:7:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CollectionDisplay">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:7:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-210.0, 395.0]">
> +        </property>
> +    </entity>
> +    <entity name="SSH_Merge2" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/DirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-325.0, 85.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-320.0, 138.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-145.0, -60.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-465.0, -105.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{95.0, 60.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-375.0, 60.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-540.0, 125.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-390.0, -10.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=S3D]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-545.0, 185.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-70.0, 35.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp -r &quot;+dir+&quot;/&quot;+name+&quot;/* &quot;+tempdir+&quot;/&quot;+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-110.0, 140.0]">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="tempdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=tempdir]" relation="relation4"/>
> +        <link port="StringToken [key=target]" relation="relation3"/>
> +        <link port="StringToken [key=S3D]" relation="relation5"/>
> +        <link port="SSH Execute cmd.target" relation="relation3"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.name" relation="relation"/>
> +        <link port="Expression.tempdir" relation="relation4"/>
> +        <link port="Expression.dir" relation="relation5"/>
> +    </entity>
> +    <entity name="SSH_Dir2 neccessary ????" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-225.0, 85.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={374, 183, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{43.0, 84.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{30.0, -75.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-295.0, 10.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{400.0, 70.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-230.0, -45.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-245.0, 0.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=mask]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-240.0, 50.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=repository]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-190.0, 90.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="TempDirNames/StringToken+" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{140.0, 35.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="TempDirNames/StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-20.0, 185.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="TempDirNames/StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{0.0, -110.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SshDirectoryList_v1_" class="org.kepler.actors.io.SshDirectoryList_v1_2">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="newFilesOnly" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-15.0, 0.0}">
> +            </property>
> +        </entity>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex" value="[-75.0, 125.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex" value="[-105.0, -45.0]">
> +            </vertex>
> +        </relation>
> +        <link port="StringToken [key=target]" relation="relation6"/>
> +        <link port="StringToken [key=tempdir]" relation="relation4"/>
> +        <link port="StringToken [key=repository]" relation="relation"/>
> +        <link port="TempDirNames/StringToken+" relation="relation2"/>
> +        <link port="TempDirNames/StringToken [key=tempdir]" relation="relation4"/>
> +        <link port="TempDirNames/StringToken [key=target]" relation="relation6"/>
> +        <link port="SshDirectoryList_v1_.target" relation="relation6"/>
> +        <link port="SshDirectoryList_v1_.dir" relation="relation4"/>
> +        <link port="SshDirectoryList_v1_.trigger" relation="relation"/>
> +        <link port="SshDirectoryList_v1_.newFiles" relation="relation2"/>
> +    </entity>
> +    <entity name="SSH_Dir_Create2" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:localhost:entity:1:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-545.0, 225.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={433, 247, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-150.0, 138.0}">
> +        </property>
> +        <property name="semanticType0" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{40.0, -65.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-280.0, 60.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{275.0, 95.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-220.0, 35.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=emptydir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-360.0, 170.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-380.0, 0.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Directory Creator" class="org.kepler.actor.ssh.DirectoryCreator">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="&quot;temp_build_directory&quot;">
> +            </property>
> +            <property name="parent" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> +<p>The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.</p>
> +
> +<p>For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. </p>
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token: true if the operation is successful, false if not. </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string. </configure></property>
> +<property name="port:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the target directory. This parameter is read once at initialize.  </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. </configure></property>
> +<property name="prop:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the directory to be read on the target machines. This parameter is read once at initialize. </configure></property>
> +<property name="prop:parent" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:514:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.DirectoryCreator">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +                </property>
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{110.0, 45.0}">
> +            </property>
> +            <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +                <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10;&lt;p&gt;The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.&lt;/p&gt;&#10;&#10;&lt;p&gt;For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. &lt;/p&gt;&#10;&#10;">
> +                </property>
> +                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +                </property>
> +                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +                </property>
> +                <property name="parent (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  ">
> +                </property>
> +                <property name="succ (port)" class="ptolemy.kernel.util.StringAttribute" value="A Boolean token: true if the operation is successful, false if not. ">
> +                </property>
> +                <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="The actor's execution errors, if any; otherwise an empty string. ">
> +                </property>
> +                <property name="dir (port)" class="ptolemy.kernel.util.StringAttribute" value="The path to the target directory. This parameter is read once at initialize.  ">
> +                </property>
> +                <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. ">
> +                </property>
> +                <property name="dir (parameter)" class="ptolemy.data.expr.StringParameter" value="The path to the directory to be read on the target machines. This parameter is read once at initialize. ">
> +                </property>
> +                <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. ">
> +                </property>
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="succ" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="error" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="emptydir+&quot;/&quot;+dir">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-50.0, 140.0}">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation2"/>
> +        <link port="StringToken [key=emptydir]" relation="relation3"/>
> +        <link port="StringToken [key=target]" relation="relation4"/>
> +        <link port="SSH Directory Creator.target" relation="relation4"/>
> +        <link port="SSH Directory Creator.dir" relation="relation"/>
> +        <link port="Expression.output" relation="relation"/>
> +        <link port="Expression.dir" relation="relation2"/>
> +        <link port="Expression.emptydir" relation="relation3"/>
> +    </entity>
> +    <entity name="CMAKE" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-440.0, 225.0]">
> +        </property>
> +        <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="11">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="The make install is lunched for the test case">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-700.0, -230.0]">
> +            </property>
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-875.0, -630.0]">
> +            </property>
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={527, 22, 1382, 1058}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1099, 937]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-462.5, -84.5}">
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-145.0, -360.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-95.0, -360.0]">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-1070.0, -325.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-995.0, -480.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-605.0, -655.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=emptydir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-990.0, -620.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-1010.0, -170.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-345.0, -265.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Execute cmd2" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-320.0, -555.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Execute cmd3" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-345.0, -100.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Execute cmd4" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-335.0, 20.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cd &quot;+emptydir+&quot;/&quot;+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-605.0, -350.0]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sycn" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression2" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cd &quot;+emptydir+&quot;/&quot;+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-620.0, -425.0]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sycn" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression3" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="dirprefix+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-725.0, -185.0]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sycn" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression4" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cd &quot;+emptydir+&quot;/&quot;+name+&quot;; ~/bin/cmake ~/&quot;+tempdir+&quot;/&quot;+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-700.0, -535.0}">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="tempdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Directory Creator" class="org.kepler.actor.ssh.DirectoryCreator">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="&quot;/&quot;">
> +            </property>
> +            <property name="parent" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> +<p>The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.</p>
> +
> +<p>For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. </p>
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token: true if the operation is successful, false if not. </configure></property>
> +<property name="port:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the target directory. This parameter is read once at initialize.  </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. </configure></property>
> +<property name="prop:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the directory to be read on the target machines. This parameter is read once at initialize. </configure></property>
> +<property name="prop:parent" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:514:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.DirectoryCreator">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +                </property>
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-350.0, -195.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="succ" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="error" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression5" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp -r &quot;+emptydir+&quot;/s3d_run/* &quot;+dirprefix+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-605.0, -80.0]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sycn" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Execute cmd5" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-355.0, -375.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression7" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;rm -rf &quot;+emptydir+&quot;/s3d_run/&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-680.0, 40.0]">
> +            </property>
> +            <port name="input" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="emptydir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation8" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation10" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation11" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation12" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation15" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation19" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation14" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-930.0, -325.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation7" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-450.0, -660.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation13" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-970.0, -385.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation16" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-885.0, -135.0]">
> +            </vertex>
> +        </relation>
> +        <link port="StringToken" relation="relation14"/>
> +        <link port="StringToken [key=tempdir]" relation="relation6"/>
> +        <link port="StringToken [key=target]" relation="relation7"/>
> +        <link port="StringToken [key=emptydir]" relation="relation13"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation16"/>
> +        <link port="SSH Execute cmd.target" relation="relation7"/>
> +        <link port="SSH Execute cmd.command" relation="relation15"/>
> +        <link port="SSH Execute cmd.stdout" relation="relation11"/>
> +        <link port="SSH Execute cmd2.target" relation="relation7"/>
> +        <link port="SSH Execute cmd2.command" relation="relation"/>
> +        <link port="SSH Execute cmd2.stdout" relation="relation2"/>
> +        <link port="SSH Execute cmd3.target" relation="relation7"/>
> +        <link port="SSH Execute cmd3.command" relation="relation3"/>
> +        <link port="SSH Execute cmd3.stdout" relation="relation12"/>
> +        <link port="SSH Execute cmd4.target" relation="relation7"/>
> +        <link port="SSH Execute cmd4.command" relation="relation5"/>
> +        <link port="Expression.output" relation="relation4"/>
> +        <link port="Expression.name" relation="relation14"/>
> +        <link port="Expression.sycn" relation="relation11"/>
> +        <link port="Expression.emptydir" relation="relation13"/>
> +        <link port="Expression2.output" relation="relation15"/>
> +        <link port="Expression2.name" relation="relation14"/>
> +        <link port="Expression2.sycn" relation="relation2"/>
> +        <link port="Expression2.emptydir" relation="relation13"/>
> +        <link port="Expression3.output" relation="relation10"/>
> +        <link port="Expression3.name" relation="relation14"/>
> +        <link port="Expression3.sycn" relation="relation19"/>
> +        <link port="Expression3.dirprefix" relation="relation16"/>
> +        <link port="Expression4.output" relation="relation"/>
> +        <link port="Expression4.name" relation="relation14"/>
> +        <link port="Expression4.emptydir" relation="relation13"/>
> +        <link port="Expression4.tempdir" relation="relation6"/>
> +        <link port="SSH Directory Creator.target" relation="relation7"/>
> +        <link port="SSH Directory Creator.dir" relation="relation10"/>
> +        <link port="SSH Directory Creator.succ" relation="relation8"/>
> +        <link port="Expression5.output" relation="relation3"/>
> +        <link port="Expression5.name" relation="relation14"/>
> +        <link port="Expression5.sycn" relation="relation8"/>
> +        <link port="Expression5.emptydir" relation="relation13"/>
> +        <link port="Expression5.dirprefix" relation="relation16"/>
> +        <link port="SSH Execute cmd5.target" relation="relation7"/>
> +        <link port="SSH Execute cmd5.command" relation="relation4"/>
> +        <link port="SSH Execute cmd5.stdout" relation="relation19"/>
> +        <link port="Expression7.output" relation="relation5"/>
> +        <link port="Expression7.input" relation="relation12"/>
> +        <link port="Expression7.emptydir" relation="relation13"/>
> +    </entity>
> +    <entity name="SSH_Submit2Cluster" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/DirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-340.0, 225.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-287.0, 90.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-145.0, -60.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-435.0, 45.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{95.0, 60.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-390.0, 50.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-485.0, -75.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-520.0, 165.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-45.0, 35.0]">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp -r s3d_run* &quot;+targetdir">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-270.0, 75.0]">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=target]" relation="relation4"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation3"/>
> +        <link port="SSH Execute cmd.target" relation="relation4"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.name" relation="relation"/>
> +        <link port="Expression.targetdir" relation="relation3"/>
> +    </entity>
> +    <entity name="SSH_Submit2Cluster2" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-235.0, 225.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-316.0, 178.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-135.0, -50.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-410.0, -25.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{105.0, 70.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-450.0, 55.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-555.0, 235.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-310.0, -30.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=jobscriptlocation]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-585.0, 105.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=targetdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-590.0, 145.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-35.0, 45.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp &quot;+jobscriptlocation+&quot; &quot;+targetdir+&quot;/&quot;+dirprefix+name+&quot;/run;&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-190.0, 125.0]">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="jobscriptlocation" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation4"/>
> +        <link port="StringToken [key=target]" relation="relation3"/>
> +        <link port="StringToken [key=jobscriptlocation]" relation="relation5"/>
> +        <link port="StringToken [key=targetdir]" relation="relation6"/>
> +        <link port="SSH Execute cmd.target" relation="relation3"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.name" relation="relation"/>
> +        <link port="Expression.jobscriptlocation" relation="relation5"/>
> +        <link port="Expression.targetdir" relation="relation6"/>
> +        <link port="Expression.dirprefix" relation="relation4"/>
> +    </entity>
> +    <entity name="SSH_Submit2Cluster3" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="{-570.0, 345.0}">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={260, 153, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-307.0, 178.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-125.0, -40.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-480.0, -15.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{115.0, 80.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-380.0, 70.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=targetdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-565.0, 75.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-570.0, 155.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=jobcommand]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-560.0, 210.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-175.0, 55.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-25.0, 55.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cd &quot;+targetdir+&quot;/&quot;+dirprefix+name+&quot;/run; &quot;+jobcommand">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-180.0, 135.0}">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="jobcommand" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=targetdir]" relation="relation4"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation5"/>
> +        <link port="StringToken [key=jobcommand]" relation="relation6"/>
> +        <link port="StringToken [key=target]" relation="relation3"/>
> +        <link port="SSH Execute cmd.target" relation="relation3"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.name" relation="relation"/>
> +        <link port="Expression.targetdir" relation="relation4"/>
> +        <link port="Expression.dirprefix" relation="relation5"/>
> +        <link port="Expression.jobcommand" relation="relation6"/>
> +    </entity>
> +    <entity name="SSH_Change" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-440.0, 345.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={132, 48, 1299, 1061}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1016, 940]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-232.0, 312.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-115.0, -30.0}">
> +            </property>
> +        </property>
> +        <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Modification of input files">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-405.0, -40.0]">
> +            </property>
> +        </property>
> +        <property name="Annotation2" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Remote s3d.in file necessary for second job mission is copied on the local working directory&#10;">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-515.0, 210.0]">
> +            </property>
> +        </property>
> +        <property name="Annotation3" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Overwrite the input file before re-submitting the job&#10;">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-270.0, 655.0]">
> +            </property>
> +        </property>
> +        <property name="Annotation4" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Modification of input files">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-168.75, 355.5]">
> +            </property>
> +        </property>
> +        <property name="Annotation5" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +            </property>
> +            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +            </property>
> +            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Copied file is modified here.&#10;">
> +                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                    </property>
> +                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                    </property>
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-133.75, 480.5]">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-400.0, -85.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{125.0, 90.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-527.0, -29.5]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-630.0, 125.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=targetdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-542.0, 60.5]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-537.0, 15.5]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=localtempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-680.0, 265.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <entity name="Expression2" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="localtempdir+&quot;/s3d.in&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-315.0, 335.0]">
> +            </property>
> +            <port name="localtempdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sync" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Simple File Reader2" class="org.resurgence.actor.SimpleFileReader">
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The SimpleFileReader reads and outputs the contents of a file as a single string.</p> 
> +
> +<p>The actor is similar to the FileReader, except that the SimpleFileReader can only take its input from another workflow component via an input port, whereas the FileReader actor can use either a port or parameter.</p></configure></property>
> +<property name="port:file" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that accepts the file name or URL of the file to read and output. The file name is passed as a string from another workflow component. Pass a file name with a StringConstant actor, for example.</configure></property>
> +<property name="port:content" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string of the specified file contents.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:361:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.SimpleFileReader">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1127:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#FileSystemActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-135.875, 281.0]">
> +            </property>
> +        </entity>
> +        <entity name="Expression3" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="target+&quot;:&quot;+targetdir+&quot;/&quot;+dirprefix+name+&quot;/input/s3d.in&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-202.0, 70.5]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="target" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH File Copier" class="org.kepler.actor.ssh.FileCopier">
> +            <property name="source" class="ptolemy.actor.parameters.PortParameter" value="&quot;[[user]@host:]path&quot;">
> +            </property>
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="recursive" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHFileCopier actor connects to a remote host using SSH protocol and copies a file or directory to or from the host. Either the source or the target file must be local. This actor cannot copy remote files to remote places. For such operations, use the SSHExecuteCmd actor. The actor performs the copy operation and outputs the operation results (success or failure, as well as internal error messages, if any).</p>
> +
> +
> +The file references should be in the format: [[user@]host:]path. For example,
> +   <ul>
> +   <li><i>foo.txt</i> 
> +       The file foo.txt in the current directory on the local machine</li>
> +   <li><i>playdir/foo.txt</i>
> +       The relative path to the current dir on the local machine</li>
> +   <li><i>/home/littleboy/playdir/foo.txt</i> 
> +       The absolute path to foo.txt on the local machine</li>
> +   <li><i>local:playdir/foo.txt</i>
> +       The relative path to $HOME on the local machine</li>
> +   <li><i>localhost:playdir/foo.txt</i>
> +       The relative path to $HOME on the 'localhost' machine </li>
> +   <li><i>john at farmachine:playdir/foo.txt</i>
> +       The relative path to $HOME on the 'farmachine' machine of user 'john'</li>
> +   </ul>
> +
> +   <p>If the target is an existing file, it will be overwritten. If the target is an existing directory, a subdirectory within the existing directory will be created with the name of the source.</p>
> +
> +   <p>If copying a directory, set the parameter 'recursive' to true to copy the entire directory.</p>
> +
> +
> +
> +
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token indicating if the copy operation was successful: true if ALL matched files and directories are copied; false if not. Note: if copying directories and  'recursive' is not set, the value will be false (files will be copied but directories will not be).  </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string.  </configure></property>
> +<property name="port:source" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The location of the files and directories to copy.   </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:recursive" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether directories can be copied recursively. </configure></property>
> +<property name="prop:source" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The location of the files and directories to copy.   </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:511:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.FileCopier">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-275.0, 145.0]">
> +            </property>
> +            <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +                <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10; &lt;p&gt;The SSHFileCopier actor connects to a remote host using SSH protocol and copies a file or directory to or from the host. Either the source or the target file must be local. This actor cannot copy remote files to remote places. For such operations, use the SSHExecuteCmd actor. The actor performs the copy operation and outputs the operation results (success or failure, as well as internal error messages, if any).&lt;/p&gt;&#10;&#10;&#10;The file references should be in the format: [[user@]host:]path. For example,&#10;   &lt;ul&gt;&#10;   &lt;li&gt;&lt;i&gt;foo.txt&lt;/i&gt; &#10;       The file foo.txt in the current directory on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;playdir/foo.txt&lt;/i&gt;&#10;       The relative path to the current dir on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;/home/littleboy/playdir/foo.txt&lt;/i&gt; &#10;   
  
>    The absolute path to foo.txt on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;local:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;localhost:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the 'localhost' machine &lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;john at farmachine:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the 'farmachine' machine of user 'john'&lt;/li&gt;&#10;   &lt;/ul&gt;&#10;&#10;   &lt;p&gt;If the target is an existing file, it will be overwritten. If the target is an existing directory, a subdirectory within the existing directory will be created with the name of the source.&lt;/p&gt;&#10;&#10;   &lt;p&gt;If copying a directory, set the parameter 'recursive' to true to copy the entire directory.&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&#10;">
> +                </property>
> +                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +                </property>
> +                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +                </property>
> +                <property name="recursive (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether directories can be copied recursively. ">
> +                </property>
> +                <property name="succ (port)" class="ptolemy.kernel.util.StringAttribute" value="A Boolean token indicating if the copy operation was successful: true if ALL matched files and directories are copied; false if not. Note: if copying directories and  'recursive' is not set, the value will be false (files will be copied but directories will not be).  ">
> +                </property>
> +                <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="The actor's execution errors, if any; otherwise an empty string.  ">
> +                </property>
> +                <property name="source (port)" class="ptolemy.kernel.util.StringAttribute" value="The location of the files and directories to copy.   ">
> +                </property>
> +                <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +                </property>
> +                <property name="source (parameter)" class="ptolemy.data.expr.StringParameter" value="The location of the files and directories to copy.   ">
> +                </property>
> +                <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +                </property>
> +            </property>
> +            <port name="source" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="succ" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="error" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Text File Writer2" class="org.resurgence.actor.TextFileWriter">
> +            <property name="Change existing" class="ptolemy.data.expr.StringParameter" value="Overwrite">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The TextFileWriter actor reads a string token and writes it, without any enclosing quotation marks, to a file. The actor outputs the file path of the generated file.</p> 
> +
> +<p>The path and name of the output file are specified via input ports. Specify whether the input is appended to the specified file (if it exists), or if an existing file is overwritten via the changeExisting parameter. </p>
> +
> +<p>The TextFileWriter is similar to the FileWriter actor, except that the TextFileWriter actor does not add line breaks to its output, while the FileWriter actor does.</p></configure></property>
> +<property name="port:fileToWrite" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that accepts the file path of the file to which to write. See FileParameter for more information about specifying file names.</configure></property>
> +<property name="port:string" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that receives a string token to write-one line at a time--to a file.</configure></property>
> +<property name="port:fileWritten" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the name and path of the output file.</configure></property>
> +<property name="prop:Change existing" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the input is appended to the specified file (if it exists), or if an existing file is overwritten.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:295:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.TextFileWriter">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1120:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#WriterOutputActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalOutput">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-55.875, 426.0]">
> +            </property>
> +        </entity>
> +        <entity name="SSH File Copier2" class="org.kepler.actor.ssh.FileCopier">
> +            <property name="source" class="ptolemy.actor.parameters.PortParameter" value="&quot;[[user]@host:]path&quot;">
> +            </property>
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;/Users/Ustun/Desktop/&quot;">
> +            </property>
> +            <property name="recursive" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHFileCopier actor connects to a remote host using SSH protocol and copies a file or directory to or from the host. Either the source or the target file must be local. This actor cannot copy remote files to remote places. For such operations, use the SSHExecuteCmd actor. The actor performs the copy operation and outputs the operation results (success or failure, as well as internal error messages, if any).</p>
> +
> +
> +The file references should be in the format: [[user@]host:]path. For example,
> +   <ul>
> +   <li><i>foo.txt</i> 
> +       The file foo.txt in the current directory on the local machine</li>
> +   <li><i>playdir/foo.txt</i>
> +       The relative path to the current dir on the local machine</li>
> +   <li><i>/home/littleboy/playdir/foo.txt</i> 
> +       The absolute path to foo.txt on the local machine</li>
> +   <li><i>local:playdir/foo.txt</i>
> +       The relative path to $HOME on the local machine</li>
> +   <li><i>localhost:playdir/foo.txt</i>
> +       The relative path to $HOME on the 'localhost' machine </li>
> +   <li><i>john at farmachine:playdir/foo.txt</i>
> +       The relative path to $HOME on the 'farmachine' machine of user 'john'</li>
> +   </ul>
> +
> +   <p>If the target is an existing file, it will be overwritten. If the target is an existing directory, a subdirectory within the existing directory will be created with the name of the source.</p>
> +
> +   <p>If copying a directory, set the parameter 'recursive' to true to copy the entire directory.</p>
> +
> +
> +
> +
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token indicating if the copy operation was successful: true if ALL matched files and directories are copied; false if not. Note: if copying directories and  'recursive' is not set, the value will be false (files will be copied but directories will not be).  </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string.  </configure></property>
> +<property name="port:source" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The location of the files and directories to copy.   </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:recursive" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether directories can be copied recursively. </configure></property>
> +<property name="prop:source" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The location of the files and directories to copy.   </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:511:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.FileCopier">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-69.75, 609.5]">
> +            </property>
> +            <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +                <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10; &lt;p&gt;The SSHFileCopier actor connects to a remote host using SSH protocol and copies a file or directory to or from the host. Either the source or the target file must be local. This actor cannot copy remote files to remote places. For such operations, use the SSHExecuteCmd actor. The actor performs the copy operation and outputs the operation results (success or failure, as well as internal error messages, if any).&lt;/p&gt;&#10;&#10;&#10;The file references should be in the format: [[user@]host:]path. For example,&#10;   &lt;ul&gt;&#10;   &lt;li&gt;&lt;i&gt;foo.txt&lt;/i&gt; &#10;       The file foo.txt in the current directory on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;playdir/foo.txt&lt;/i&gt;&#10;       The relative path to the current dir on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;/home/littleboy/playdir/foo.txt&lt;/i&gt; &#10;   
  
>    The absolute path to foo.txt on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;local:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the local machine&lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;localhost:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the 'localhost' machine &lt;/li&gt;&#10;   &lt;li&gt;&lt;i&gt;john at farmachine:playdir/foo.txt&lt;/i&gt;&#10;       The relative path to $HOME on the 'farmachine' machine of user 'john'&lt;/li&gt;&#10;   &lt;/ul&gt;&#10;&#10;   &lt;p&gt;If the target is an existing file, it will be overwritten. If the target is an existing directory, a subdirectory within the existing directory will be created with the name of the source.&lt;/p&gt;&#10;&#10;   &lt;p&gt;If copying a directory, set the parameter 'recursive' to true to copy the entire directory.&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&#10;">
> +                </property>
> +                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +                </property>
> +                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +                </property>
> +                <property name="recursive (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether directories can be copied recursively. ">
> +                </property>
> +                <property name="succ (port)" class="ptolemy.kernel.util.StringAttribute" value="A Boolean token indicating if the copy operation was successful: true if ALL matched files and directories are copied; false if not. Note: if copying directories and  'recursive' is not set, the value will be false (files will be copied but directories will not be).  ">
> +                </property>
> +                <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="The actor's execution errors, if any; otherwise an empty string.  ">
> +                </property>
> +                <property name="source (port)" class="ptolemy.kernel.util.StringAttribute" value="The location of the files and directories to copy.   ">
> +                </property>
> +                <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +                </property>
> +                <property name="source (parameter)" class="ptolemy.data.expr.StringParameter" value="The location of the files and directories to copy.   ">
> +                </property>
> +                <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +                </property>
> +            </property>
> +            <port name="source" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="succ" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="error" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="String Replace2" class="ptolemy.actor.lib.string.StringReplace">
> +            <property name="pattern" class="ptolemy.actor.parameters.PortParameter" value="0">
> +            </property>
> +            <property name="replaceAll" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="replacement" class="ptolemy.actor.parameters.PortParameter" value="1">
> +            </property>
> +            <property name="stringToEdit" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> Antonio Yordan-Nones, Neil E. Turner, Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringReplace actor reads a string and searches it for a specified pattern. The actor replaces either the first instance of the pattern or all occurrences of the pattern with a specified replacement string. The actor outputs the edited string.</p>
> +
> +<p>The actor accepts a source string, a replacement string, and a pattern to search for via either its input ports or its parameters. The pattern is specified as a regular expression. For more information about regular expressions, see http://java.sun.com/docs/books/tutorial/extra/regex/index.html.</p>
> +
> +<p>If  the replaceAll parameter is specified, the actor will replace all instances of the string that match the specified pattern. Otherwise, the actor will replace only the first instance that matches. </p>
> +
> +<p>If the actor finds no match, then the actor outputs the original source string, unchanged.</p> 
> +</configure></property>
> +<property name="port:stringToEdit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A port that accepts a source string. The actor will edit the string according to the settings specified by the pattern, replacement, and replaceAll parameters.The source string may also be specified with the stringToEdit parameter</configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the edited string. </configure></property>
> +<property name="port:replacement" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A port accepts a replacement string that replaces any matched instance of the specified pattern. The default is an empty string. The replacement string may also be specified via the replacement parameter.</configure></property>
> +<property name="port:pattern" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A port that accepts a regular expression, which is compared to the input string. The default is an empty string. The regular expression may also be specified via the pattern parameter.</configure></property>
> +<property name="prop:replaceAll" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether or not to replace all instances that match the pattern. By default, the actor will replace all instances. Deselect the parameter to replace only the first instance.</configure></property>
> +<property name="prop:stringToEdit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A source string. The actor will edit the string based on the settings specified by the pattern, replacement, and replaceAll parameters. The source string may  be specified via either the stringToEdit port or parameter.</configure></property>
> +<property name="prop:replacement" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A replacement string that replaces any matched instance of the specified pattern. The default is an empty string. The replacement string may  be specified via either the replacement port or parameter.</configure></property>
> +<property name="prop:pattern" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A regular expression, which is compared to the input string. The default is an empty string. The regular expression may  be specified via either the pattern port or parameter.</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:98:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.string.StringReplace">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:972:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#DataStringOperation">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[54.875, 306.0]">
> +            </property>
> +            <port name="pattern" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="replacement" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stringToEdit" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="localtempdir+&quot;/s3d.in&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-215.0, 575.0]">
> +            </property>
> +            <port name="localtempdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression4" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="target+&quot;:&quot;+targetdir+&quot;/&quot;+dirprefix+name+&quot;/input/s3d.in&quot;">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-320.0, 635.0]">
> +            </property>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="target" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="sync" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation7" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation11" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation12" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation14" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-180.0, 385.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation16" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-465.0, 265.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-590.0, 155.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation8" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-550.0, 140.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation9" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-525.0, 180.0]">
> +            </vertex>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <vertex name="vertex1" value="[-500.0, 200.0]">
> +            </vertex>
> +        </relation>
> +        <link port="StringToken" relation="relation3"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation6"/>
> +        <link port="StringToken [key=targetdir]" relation="relation8"/>
> +        <link port="StringToken [key=target]" relation="relation9"/>
> +        <link port="StringToken [key=localtempdir]" relation="relation"/>
> +        <link port="Expression2.output" relation="relation14"/>
> +        <link port="Expression2.localtempdir" relation="relation"/>
> +        <link port="Expression2.sync" relation="relation12"/>
> +        <link port="Simple File Reader2.file" relation="relation14"/>
> +        <link port="Simple File Reader2.content" relation="relation16"/>
> +        <link port="Expression3.output" relation="relation7"/>
> +        <link port="Expression3.name" relation="relation3"/>
> +        <link port="Expression3.target" relation="relation9"/>
> +        <link port="Expression3.targetdir" relation="relation8"/>
> +        <link port="Expression3.dirprefix" relation="relation6"/>
> +        <link port="SSH File Copier.source" relation="relation7"/>
> +        <link port="SSH File Copier.target" relation="relation"/>
> +        <link port="SSH File Copier.succ" relation="relation12"/>
> +        <link port="Text File Writer2.string" relation="relation11"/>
> +        <link port="Text File Writer2.fileToWrite" relation="relation14"/>
> +        <link port="Text File Writer2.fileWritten" relation="relation5"/>
> +        <link port="SSH File Copier2.source" relation="relation2"/>
> +        <link port="SSH File Copier2.target" relation="relation4"/>
> +        <link port="String Replace2.stringToEdit" relation="relation16"/>
> +        <link port="String Replace2.output" relation="relation11"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.localtempdir" relation="relation"/>
> +        <link port="Expression4.output" relation="relation4"/>
> +        <link port="Expression4.name" relation="relation3"/>
> +        <link port="Expression4.target" relation="relation9"/>
> +        <link port="Expression4.targetdir" relation="relation8"/>
> +        <link port="Expression4.dirprefix" relation="relation6"/>
> +        <link port="Expression4.sync" relation="relation5"/>
> +    </entity>
> +    <entity name="SSH_Dir_Create" class="org.kepler.coactors.CompositeCoactorTwo">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/DirNames">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-535.0, 85.0]">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{40.0, -65.0}">
> +            </property>
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={245, 83, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-46.0, 138.0}">
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, 235.0]">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[180.0, 220.0]">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-240.0, 90.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-220.0, 15.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="Expression2" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;temp_build_directory/&quot;+dir">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-50.0, 140.0}">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="SSH Directory Creator" class="org.kepler.actor.ssh.DirectoryCreator">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="&quot;temp_build_directory&quot;">
> +            </property>
> +            <property name="parent" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> +<p>The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.</p>
> +
> +<p>For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. </p>
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token: true if the operation is successful, false if not. </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string. </configure></property>
> +<property name="port:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the target directory. This parameter is read once at initialize.  </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. </configure></property>
> +<property name="prop:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the directory to be read on the target machines. This parameter is read once at initialize. </configure></property>
> +<property name="prop:parent" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:514:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.DirectoryCreator">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +                </property>
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{110.0, 45.0}">
> +            </property>
> +            <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +                <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10;&lt;p&gt;The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.&lt;/p&gt;&#10;&#10;&lt;p&gt;For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. &lt;/p&gt;&#10;&#10;">
> +                </property>
> +                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +                </property>
> +                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +                </property>
> +                <property name="parent (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  ">
> +                </property>
> +                <property name="succ (port)" class="ptolemy.kernel.util.StringAttribute" value="A Boolean token: true if the operation is successful, false if not. ">
> +                </property>
> +                <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="The actor's execution errors, if any; otherwise an empty string. ">
> +                </property>
> +                <property name="dir (port)" class="ptolemy.kernel.util.StringAttribute" value="The path to the target directory. This parameter is read once at initialize.  ">
> +                </property>
> +                <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. ">
> +                </property>
> +                <property name="dir (parameter)" class="ptolemy.data.expr.StringParameter" value="The path to the directory to be read on the target machines. This parameter is read once at initialize. ">
> +                </property>
> +                <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. ">
> +                </property>
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="dir" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="succ" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="error" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=target]" relation="relation3"/>
> +        <link port="Expression2.output" relation="relation2"/>
> +        <link port="Expression2.dir" relation="relation"/>
> +        <link port="SSH Directory Creator.target" relation="relation3"/>
> +        <link port="SSH Directory Creator.dir" relation="relation2"/>
> +    </entity>
> +    <entity name="SSH_DirCopy" class="org.kepler.coactors.CompositeCoactorTwo">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/DirNames">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-430.0, 85.0]">
> +        </property>
> +        <property name="semanticType0" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:localhost:entity:2:1">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-145.0, -60.0}">
> +            </property>
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={518, 173, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-226.0, 145.0}">
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{0.0, 0.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{0.0, 0.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-475.0, 45.0]">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-475.0, -10.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=tempdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-490.0, 125.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=S3D]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-490.0, 195.0]">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-70.0, 35.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression2" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp -r &quot;+ S3D +&quot;/* &quot;+tempdir+&quot;/&quot;+name">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="[-195.0, 150.0]">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="tempdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +            <port name="S3D" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation2"/>
> +        <link port="StringToken [key=target]" relation="relation4"/>
> +        <link port="StringToken [key=tempdir]" relation="relation5"/>
> +        <link port="StringToken [key=S3D]" relation="relation"/>
> +        <link port="SSH Execute cmd.target" relation="relation4"/>
> +        <link port="SSH Execute cmd.command" relation="relation3"/>
> +        <link port="Expression2.output" relation="relation3"/>
> +        <link port="Expression2.name" relation="relation2"/>
> +        <link port="Expression2.tempdir" relation="relation5"/>
> +        <link port="Expression2.S3D" relation="relation"/>
> +    </entity>
> +    <entity name="SSH_Submit2Cluster4" class="org.kepler.coactors.CompositeCoactor">
> +        <property name="Read scope" class="org.kepler.util.CoactorParameter" value="Job/TempDirNames">
> +        </property>
> +        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +        </property>
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:ppod.daks.org:composite:100:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.coactors.CompositeCoactor">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:ppod.daks.org:class:100:1">
> +            </property>
> +        </property>
> +        <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:ppod.daks.org:onto:1#ComadGeneralActors">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-340.0, 345.0]">
> +        </property>
> +        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={408, 217, 883, 853}, maximized=false}">
> +        </property>
> +        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[600, 732]">
> +        </property>
> +        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
> +        </property>
> +        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-307.0, 178.0}">
> +        </property>
> +        <property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
> +            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="vectorizationFactor" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +            <property name="allowDisconnectedGraphs" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="allowRateChanges" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +            <property name="period" class="ptolemy.data.expr.Parameter" value="0.0">
> +            </property>
> +            <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +            </property>
> +            <property name="Scheduler" class="ptolemy.domains.sdf.kernel.SDFScheduler">
> +                <property name="constrainBufferSizes" class="ptolemy.data.expr.Parameter" value="constrainBufferSizes">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The SDF Director is often used to oversee fairly simple, sequential workflows in which the director can determine the order of actor invocation from the workflow. Types of workflows that would run well under an SDF Director include processing and reformatting tabular data, converting one data type to another, and reading and plotting a series of data points. A workflow in which an image is read, processed (rotated, scaled, clipped, filtered, etc.), and then displayed, is also an example of a sequential workflow that requires a director simply to ensure that each actor fires in the proper order (i.e., that each actor executes only after it receives its required inputs).</p>
> +
> +<p>The SDF Director is very efficient and will not tax system resources with overhead. However, this efficiency requires that certain conditions be met, namely that the data consumption and production rate of each actor in an SDF workflow be constant and declared. If an actor reads one piece of data and calculates and outputs a single result, it must always read and output a single token of data. This data rate cannot change during workflow execution and, in general, workflows that require dynamic scheduling and/or flow control cannot use this director. Additionally, the SDF Director has no understanding of passing time (at least by default), and actors that depend on a notion of time may not work as expected. For example, a TimedPlotter actor will plot all values at time zero when used in SDF. </p>
> +
> +<p>By default, the SDF Director requires that all actors in its workflow be connected. Otherwise, the director cannot account for concurrency between disconnected workflow parts. Usually, a PN Director should be used for workflows that contain disconnected actors; however, the SDF Director's allowDisconnectedGraphs parameter may also be set to true. The SDF Director will then schedule each disconnected "island" independently. The director cannot infer the sequential relationship between disconnected actors (i.e., nothing forces the director to finish executing all actors on one island before firing actors on another). However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF model indicate an error.</p>
> + 
> +<p>Because SDF Directors schedule actors to fire only after they receive their inputs, workflows that require loops (feeding an actor's output back into its input port for further processing) can cause "deadlock" errors. The deadlock errors occur because the actor depends on its own output value as an initial input. To fix this problem, use a SampleDelay actor to generate and inject an initial input value into the workflow.</p>
> +
> +<p>The SDF Director determines the order in which actors execute and how many times each actor needs to be fired to complete a single iteration of the workflow. This schedule is calculated BEFORE the director begins to iterate the workflow. Because the SDF Director calculates a schedule in advance, it is quite efficient. However, SDF workflows must be static. In other words, the same number of tokens must be consumed/produced at every iteration of the workflow. Workflows that require dynamic control structures, such as a BooleanSwitch actor that sends output on one of two ports depending on the value of a 'control', cannot be used with an SDF Director because the number of tokens on each output can change for each execution.</p>
> +
> +<p>Unless otherwise specified, the SDF Director assumes that each actor consumes and produces exactly one token per channel on each firing. Actors that do not follow the one-token-per-channel firing convention (e.g., Repeat or Ramp) must declare the number of tokens they produce or consume via the appropriate parameters. </p>
> +
> +<p>The number of times a workflow is iterated is controlled by the director's iterations parameter. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </p>
> +
> +<p>The amount of data processed by an SDF workflow is a function of both the number of times the workflow iterates and the value of the director's vectorizationFactor parameter. The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </p>
> +
> +<p>The SDF Director has several advanced parameters that are generally only relevant when an SDF workflow contains composite components. In most cases the period, timeResolution, synchronizeToRealTime, allowRateChanges, timeResolution, and constrainBufferSizes parameters can be left at their default values.</p>
> +
> +<p>For more information about the SDF Director, see the Ptolemy documentation (http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf).</p>
> +
> +</configure></property>
> +<property name="prop:allowDisconnectedGraphs" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to allow disconnected actors in the workflow (by default, all actors are required to be connected). If disconnected actors are permitted, the SDF Director will schedule each disconnected 'island' independently. Nothing "forces" the director to finish executing all actors on one island before firing actors on another. However, the order of execution within each island should be correct. Usually, disconnected graphs in an SDF workflow indicate an error.</configure></property>
> +<property name="prop:allowRateChanges" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether dynamic rate changes are permitted or not. By default, rate changes are not permitted, and the director will perform a check to disallow such workflows. If the parameter is selected, then workflows that require rate parameters to be modified during execution are valid, and the SDF Director will dynamically compute a new schedule at runtime. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:constrainBufferSizes" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether buffer sizes are fixed. By default, buffers are fixed, and attempts to write to the buffer that cause the buffer to exceed its scheduled size result in an error. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time precision used by this director. All time values are rounded to the nearest multiple of this number. The value is a double that defaults to "1E-10" (which is 10-10). This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. A value of 1, meaning that the director will run the workflow once, is often the best setting when building an SDF workflow. </configure></property>
> +<property name="prop:vectorizationFactor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vectorizationFactor is used to increase the efficiency of a workflow by increasing the number of times actors fire each time the workflow iterates. If the parameter is set to a positive integer (other than 1), the director will fire each actor the specified number of times more than normal. The default is 1, indicating that no vectorization should be performed. Keep in mind that changing the vectorizationFactor parameter changes the meaning of a nested SDF workflow and may cause deadlock in a workflow that uses it. </configure></property>
> +<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the execution should synchronize to real time or not. By default, the director does not synchronize to real time. If synchronize is selected, the director will only process the workflow when elapsed real time matches the product of the period parameter and the iteration count. Note: if the period parameter has a value of 0.0 (the default), then selecting this parameter has no effect. This is an advanced parameter that can usually be left at its default value.</configure></property>
> +<property name="prop:period" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The time period of each iteration. The value is a double that defaults to 0.0, which means that the director does not increment workflow time. If the value greater than 0.0, the actor will increment workflow time each time it fires. This is an advanced parameter that can usually be left at its default value. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:1:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.kernel.SDFDirector">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:1:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-115.0, -30.0}">
> +            </property>
> +        </property>
> +        <port name="input" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="general">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="false">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-470.0, -5.0}">
> +            </property>
> +        </port>
> +        <port name="output" class="org.kepler.util.CollectionIOPort">
> +            <property name="output"/>
> +            <property name="multiport"/>
> +            <property name="dataType" class="ptolemy.kernel.util.StringAttribute" value="unknown">
> +            </property>
> +            <property name="isMultiport" class="ptolemy.kernel.util.StringAttribute" value="true">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{125.0, 90.0}">
> +            </property>
> +        </port>
> +        <port name="StringToken" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-370.0, 80.0}">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=targetdir]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-555.0, 85.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=dirprefix]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-560.0, 165.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=jobcommand]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-550.0, 220.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <port name="StringToken [key=target]" class="org.kepler.util.CollectionIOPort">
> +            <property name="input"/>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-160.0, 70.0}">
> +            </property>
> +            <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
> +            </property>
> +        </port>
> +        <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="target" class="ptolemy.actor.parameters.PortParameter" value="">
> +            </property>
> +            <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +            </property>
> +            <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +            </property>
> +            <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +            </property>
> +            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +            </property>
> +            <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-15.0, 65.0}">
> +            </property>
> +            <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="command" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="errors" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +            <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +                </property>
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </port>
> +        </entity>
> +        <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +            <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cd &quot;+targetdir+&quot;/&quot;+dirprefix+name+&quot;/run; &quot;+jobcommand">
> +                <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +                </property>
> +            </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +            </property>
> +            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +                </property>
> +            </property>
> +            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +            </property>
> +            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +            </property>
> +            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +                </property>
> +                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +                </property>
> +            </property>
> +            <property name="_location" class="ptolemy.kernel.util.Location" value="{-170.0, 145.0}">
> +            </property>
> +            <port name="output" class="ptolemy.actor.TypedIOPort">
> +                <property name="output"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="name" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
> +                </property>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="targetdir" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="dirprefix" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +            <port name="jobcommand" class="ptolemy.actor.TypedIOPort">
> +                <property name="input"/>
> +                <property name="_type" class="ptolemy.actor.TypeAttribute" value="string">
> +                </property>
> +            </port>
> +        </entity>
> +        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +            </property>
> +        </relation>
> +        <link port="StringToken" relation="relation"/>
> +        <link port="StringToken [key=targetdir]" relation="relation4"/>
> +        <link port="StringToken [key=dirprefix]" relation="relation5"/>
> +        <link port="StringToken [key=jobcommand]" relation="relation6"/>
> +        <link port="StringToken [key=target]" relation="relation3"/>
> +        <link port="SSH Execute cmd.target" relation="relation3"/>
> +        <link port="SSH Execute cmd.command" relation="relation2"/>
> +        <link port="Expression.output" relation="relation2"/>
> +        <link port="Expression.name" relation="relation"/>
> +        <link port="Expression.targetdir" relation="relation4"/>
> +        <link port="Expression.dirprefix" relation="relation5"/>
> +        <link port="Expression.jobcommand" relation="relation6"/>
> +    </entity>
> +    <relation name="relation2" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation4" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation7" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation9" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation8" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation10" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation13" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation11" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation12" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation5" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation3" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation6" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation14" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <relation name="relation15" class="ptolemy.actor.TypedIORelation">
> +        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +    </relation>
> +    <link port="CollectionComposer.output" relation="relation4"/>
> +    <link port="Checkout_1.input" relation="relation4"/>
> +    <link port="Checkout_1.output" relation="relation2"/>
> +    <link port="Checkout_2.input" relation="relation2"/>
> +    <link port="Checkout_2.output" relation="relation"/>
> +    <link port="SSH_Dir.input" relation="relation"/>
> +    <link port="SSH_Dir.output" relation="relation5"/>
> +    <link port="CollectionDisplay.input" relation="relation14"/>
> +    <link port="SSH_Merge2.input" relation="relation3"/>
> +    <link port="SSH_Merge2.output" relation="relation7"/>
> +    <link port="SSH_Dir2 neccessary ????.input" relation="relation7"/>
> +    <link port="SSH_Dir2 neccessary ????.output" relation="relation9"/>
> +    <link port="SSH_Dir_Create2.input" relation="relation9"/>
> +    <link port="SSH_Dir_Create2.output" relation="relation8"/>
> +    <link port="CMAKE.input" relation="relation8"/>
> +    <link port="CMAKE.output" relation="relation11"/>
> +    <link port="SSH_Submit2Cluster.input" relation="relation11"/>
> +    <link port="SSH_Submit2Cluster.output" relation="relation10"/>
> +    <link port="SSH_Submit2Cluster2.input" relation="relation10"/>
> +    <link port="SSH_Submit2Cluster2.output" relation="relation13"/>
> +    <link port="SSH_Submit2Cluster3.input" relation="relation13"/>
> +    <link port="SSH_Submit2Cluster3.output" relation="relation12"/>
> +    <link port="SSH_Change.input" relation="relation12"/>
> +    <link port="SSH_Change.output" relation="relation15"/>
> +    <link port="SSH_Dir_Create.input" relation="relation5"/>
> +    <link port="SSH_Dir_Create.output" relation="relation6"/>
> +    <link port="SSH_DirCopy.input" relation="relation6"/>
> +    <link port="SSH_DirCopy.output" relation="relation3"/>
> +    <link port="SSH_Submit2Cluster4.input" relation="relation15"/>
> +    <link port="SSH_Submit2Cluster4.output" relation="relation14"/>
> +</entity>
> 
> Added: kepler.build/branches/1.0/preparation/workflows/preparation-pre1v4.moml
> ===================================================================
> --- kepler.build/branches/1.0/preparation/workflows/preparation-pre1v4.moml	                        (rev 0)
> +++ kepler.build/branches/1.0/preparation/workflows/preparation-pre1v4.moml	2008-11-17 17:21:58 UTC (rev 8319)
> @@ -0,0 +1,5793 @@
> +<?xml version="1.0" standalone="no"?>
> +<!DOCTYPE entity PUBLIC "-//UC Berkeley//DTD MoML 1//EN"
> +    "http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd">
> +<entity name="preparation-pre1v4" class="ptolemy.actor.TypedCompositeActor">
> +    <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
> +    </property>
> +    <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Listing for cmake">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-245.7548065185547, 665.8935241699219]">
> +        </property>
> +    </property>
> +    <property name="Annotation2" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="For each test case,  in temp_build_directory/ a test suite directory is created&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, 320.0]">
> +        </property>
> +    </property>
> +    <property name="PN Director" class="ptolemy.domains.pn.kernel.PNDirector">
> +        <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
> +        </property>
> +        <property name="initialQueueCapacity" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +        <property name="maximumQueueCapacity" class="ptolemy.data.expr.Parameter" value="165536">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Mudit Goel, Edward A. Lee, Xiaowen Xin</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>PN Directors are natural candidates for managing workflows that require parallel processing on distributed computing systems. PN workflows are powerful because they have few restrictions. On the other hand, they can be very inefficient.</p>
> +
> +<p>The Process Network (PN) Director is similar to the SDF Director in that it does not have a notion of time. However, unlike the SDF Director, the PN Director does not statically calculate firing schedules. Instead, a PN workflow is driven by data availability: tokens are created on output ports whenever input tokens are available and the outputs can be calculated. Output tokens are passed to connected actors, where they are held in a buffer until that next actor collects all required inputs and can fire. The PN Director finishes executing a workflow only when there are no new data token sources anywhere in the workflow. </p>
> +
> +<p>The same execution process that gives the PN Director its flexibility can also lead to some unexpected results: workflows may refuse to automatically terminate because tokens are always generated and available to downstream actors, for example. If one actor fires at a much higher rate than another, a downstream actor's memory buffer may overflow, causing workflow execution to fail.</p>
> +
> +</configure></property>
> +<property name="prop:initialQueueCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The initial size of the queues for each communication channel. The value is an integer that defaults to 1. This is an advanced parameter that can usually be left at its  default value.</configure></property>
> +<property name="prop:maximumQueueCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The maximum size of the queues for each communication channel. The value is an integer that defaults to 65536. To specify unbounded queues, set the value to 0. This is an advanced parameter that can usually be left at its  default value.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:2:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.pn.kernel.PNDirector">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:2:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-410.0, -190.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation3" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Each test case is copied in the created directory">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-225.0, 505.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation4" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="S3D-IO code is duplicated for each case">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-180.0, 410.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation5" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Checkout SVN Repository - Main module">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-305.0, -105.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation6" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Listing of test suites&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-130.0, 205.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation7" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Checkout SVN Repository - Test Suites&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-205.0, 30.0]">
> +        </property>
> +    </property>
> +    <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={55, 22, 1378, 1087}, maximized=false}">
> +    </property>
> +    <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1095, 966]">
> +    </property>
> +    <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="0.8">
> +    </property>
> +    <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{-216.6250000000003, -83.25}">
> +    </property>
> +    <property name="Annotation8" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="cmake">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-395.0, 735.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation9" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Copying files to lustre for job submission">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-245.0, 835.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation11" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="submission of jobs in the cluster">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-290.0, 1200.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation12" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="job submission script is copied in run directories">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-305.0, 1025.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation13" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Modification of input files">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-415.0, 1615.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation14" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Remote s3d.in file necessary for second job mission is &#10;copied on the local working directory&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-375.0, 1475.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation15" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Copied file is modified here.&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-175.0, 1615.0]">
> +        </property>
> +    </property>
> +    <property name="Annotation16" class="ptolemy.vergil.kernel.attributes.TextAttribute">
> +        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +        </property>
> +        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
> +        </property>
> +        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +        </property>
> +        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
> +        </property>
> +        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Overwrite the input file before re-submitting the job&#10;">
> +            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
> +                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
> +                </property>
> +                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
> +                </property>
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
> +<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
> +<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
> +<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
> +<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
> +<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
> +<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-395.0, 1755.0]">
> +        </property>
> +    </property>
> +    <property name="target" class="ptolemy.data.expr.Parameter" value="&quot;yildiz at home.ccs.ornl.gov&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -295.0]">
> +        </property>
> +    </property>
> +    <property name="SVN_location_Simulator" class="ptolemy.data.expr.Parameter" value="&quot;https://outrage.ca.sandia.gov/svn/s3d/simulators/S3D-IO&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -275.0]">
> +        </property>
> +    </property>
> +    <property name="SVN_location_testsuite" class="ptolemy.data.expr.Parameter" value="&quot;https://outrage.ca.sandia.gov/svn/s3d/test_suite&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -255.0]">
> +        </property>
> +    </property>
> +    <property name="temp_directory" class="ptolemy.data.expr.Parameter" value="&quot;temp_build_directory&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -235.0]">
> +        </property>
> +    </property>
> +    <property name="empty_temp_directory" class="ptolemy.data.expr.Parameter" value="&quot;empty_temp_build_directory&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -215.0]">
> +        </property>
> +    </property>
> +    <property name="cluster_target" class="ptolemy.data.expr.Parameter" value="&quot;//lustre/scr144/yildiz&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -195.0]">
> +        </property>
> +    </property>
> +    <property name="cluster_job_script" class="ptolemy.data.expr.Parameter" value="&quot;//lustre/scr144/yildiz/job_XT4.sh&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -175.0]">
> +        </property>
> +    </property>
> +    <property name="cluster_target_host" class="ptolemy.data.expr.Parameter" value="&quot;yildiz at jaguar.ccs.ornl.gov&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -155.0]">
> +        </property>
> +    </property>
> +    <property name="local_temp_directory" class="ptolemy.data.expr.Parameter" value="&quot;~&quot;">
> +        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:420:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.Parameter">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1184:1">
> +            </property>
> +        </property>
> +        <property name="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
> +        </property>
> +        <property name="semanticType111" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
> +        </property>
> +        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
> +            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
> +            </property>
> +        </property>
> +        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
> +            <configure>
> +      <svg>
> +        <text x="20" style="font-size:14; font-family:SansSerif; fill:blue" y="20">-P-</text>
> +      </svg>
> +    </configure>
> +        </property>
> +        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-230.0, -135.0]">
> +        </property>
> +    </property>
> +    <entity name="SSH Directory Listing" class="org.kepler.actor.io.SshDirectoryList_v1_1">
> +        <property name="target" class="ptolemy.actor.parameters.PortParameter" value="target">
> +        </property>
> +        <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="&quot;test_suite&quot;">
> +        </property>
> +        <property name="masks" class="ptolemy.actor.parameters.PortParameter" value="{&quot;[0-9]-*&quot;}">
> +        </property>
> +        <property name="newFilesOnly" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="checkSizeAndDate" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="sendEmpty" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="delay" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="frequencySec" class="ptolemy.data.expr.Parameter" value="0">
> +        </property>
> +        <property name="stopmask" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 Feb. 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> +<p>The SSHDirectoryListing actor gets a directory listing for a local or remote directory. If the directory is remote, the actor uses SSH protocol. The actor returns an array of new files (new since the last time the actor was triggered), new and modified files, all files, or only files that match a specified mask. Each element in the array is a record consisting of a file name, size, and date.</p>
> +
> +<p>If 'newFilesOnly' is set (the default) the file list is updated each time the actor is triggered and only 'new' filenames are output. 'New' files are determined by the difference between the current and the previous directory listings. Files not found in the previous listing are considered new.  If 'newFilesOnly' is not set, the entire directory list is returned each time the actor is triggered.</p>
> +
> +<p>Select the 'checkSizeAndDate' parameter to return modified files in addition to new ones. If this parameter is selected, the actor will return all modified files  (i.e., files where the size or date has changed between the previous and current listings) in addition to the new files. If 'checkSizeAndDate' is not set (the default), only brand new files are listed. This flag can be used for watching a specific file to look for changes in size or access time.</p>
> +
> +<p>Directory listings are output as an array. Each element in the array is a record containing a file name, size and date (e.g., {name=String, size=long, date=long}). File size is in bytes and date is in UTC seconds. The resolution depends on the 'ls -l' output, i.e. at most a minute, and for old files a day. In the local case, resolution depends on the resolution of Java and the local OS, usually less than a millisecond.</p>
> +
> +<p>The 'sendEmpty' parameter specifies if this actor should emit an empty ArrayToken of RecordTokens in case no files are found. Very useful option under directors that expect a fixed token rate.</p>
> +
> +<p>The 'delay' parameter specifies if the actor should postpone the emission of lists by one step, i.e., emit the results of the previous listing and store the recent one for the next time. 'delay' and 'sendEmpty' cannot be both true; 'sendEmpty' will be considered false if 'delay' is true. This is a strange option. It is used to safely watch a simulation by not listing the newest files which may be still under construction by the simulation. The assumption here is that if we find a new set of files with the recent listing, the "new" files in the previous listing are completely finished by the simulation. Note that the last set of files will not be emitted, except if 'frequencySec' and 'stopmask' are used, see below.</p>
> +
> +<p>The 'frequencySec' and 'stopmask' parameters can be used to make this actor run in a loop itself. If frequencySec is non-zero, the actor will list the directory with the time interval of frequencySec until a file matching the stop mask is found. The stop file(s) will be emitted as a separate token after the token of newest files. The actor does not finalize after that, so it can be fired again to start a new file watching loop. Use only in PN, since this mode can block other directors. If 'delayed' is true, the last listing is know: when a stop file is found. In this case, both the previous listing and the current listing and moreover, the stop file(s) will be emitted in the firing, i.e. three tokens are produced.</p>
> +
> +
> +
> +</configure></property>
> +<property name="port:stopmask" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The "stop" file mask. This parameter is used only if frequencySec is set to be greater than zero. Then, the actor performs the listing in a loop until a file matching the stopmask is found. Use this mode only in PN, because the actor would block all other models. </configure></property>
> +<property name="port:masks" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The list of file masks. Only files and directories that match one of the masks will be listed. "" means all files.  </configure></property>
> +<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's trigger port. You need to pass a token to the trigger port to trigger the actor only if you do not connect any other port. </configure></property>
> +<property name="port:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path of the directory to be read on the target machine.   </configure></property>
> +<property name="port:newFiles" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The output array of files (new files by default). This port is an output port of type ArrayToken. Each element is a record containing the name of the file, its size and date, e.g., {name=String, size=long, date=long}. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. </configure></property>
> +<property name="prop:sendEmpty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether an empty ArrayToken (of RecordTokens) should be emitted if no files found. Useful in SDF which awaits a result. </configure></property>
> +<property name="prop:newFilesOnly" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should contain only new files (files not found in previous listing) or all files.  By default, only new files are listed.</configure></property>
> +<property name="prop:delay" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Delay the listings by one step, i.e. emit the list found in the revious step while storing the recent list for the next firing. If true, sendEmpty is considered to be false. </configure></property>
> +<property name="prop:frequencySec" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If non-zero, the actor runs in a loop and lists the directory regularly with the given time interval. The actor will stop only when a file is found matching the stop mask. The stop mask usually should not be included in the list of masks. Use only in PN </configure></property>
> +<property name="prop:checkSizeAndDate" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should contain modified files as well as new files. By default, modified files are not included.   </configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:508:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.io.SshDirectoryList_v1_1">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +        </property>
> +        <property name="semanticTyper21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
> +        </property>
> +        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#RemoteInput">
> +        </property>
> +        <property name="semanticType23" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +        </property>
> +        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-360.0, 140.0]">
> +        </property>
> +        <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="dir" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="masks" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="trigger" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +        </port>
> +        <port name="stopmask" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="newFiles" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="Record Disassembler" class="ptolemy.actor.lib.RecordDisassembler">
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +<p>The RecordDisassembler actor receives a record, which it disassembles and outputs via user-specified output ports. The actor reads and disassembles one record each time it fires.</p>
> +
> +<p>A record is a composite data type consisting of one or more elements. Each element is named and can have a distinct type. For example, {number=1, name="dog"} is a record containing two elements. The first element, named "number", contains an integer value. The second element, named "name", contains a string value. </p>
> +
> +<p>The name of each record element must match the name of a user-specified output port. For example, if the input record is {day="Monday", week=5, month=12}, the output ports must be named "Monday", "week" and "month". If the record contains more fields than the actor has output ports, the extra fields are ignored.</p>
> +
> +</configure></property>
> +<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that accepts a record, which the actor will disassemble. </configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:48:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.RecordDisassembler">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:924:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#RecordActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#DataStructureOperation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-90.0, 140.0]">
> +        </property>
> +        <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +            <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&lt;p&gt;The RecordDisassembler actor receives a record, which it disassembles and outputs via user-specified output ports. The actor reads and disassembles one record each time it fires.&lt;/p&gt;&#10;&#10;&lt;p&gt;A record is a composite data type consisting of one or more elements. Each element is named and can have a distinct type. For example, {number=1, name=&quot;dog&quot;} is a record containing two elements. The first element, named &quot;number&quot;, contains an integer value. The second element, named &quot;name&quot;, contains a string value. &lt;/p&gt;&#10;&#10;&lt;p&gt;The name of each record element must match the name of a user-specified output port. For example, if the input record is {day=&quot;Monday&quot;, week=5, month=12}, the output ports must be named &quot;Monday&quot;, &quot;week&quot; and &quot;month&quot;. If the record contains more fields than the a
ct
>  or has output ports, the extra fields are ignored.&lt;/p&gt;&#10;&#10;">
> +            </property>
> +            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Yuhong Xiong">
> +            </property>
> +            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +            </property>
> +            <property name="input (port)" class="ptolemy.kernel.util.StringAttribute" value="An input port that accepts a record, which the actor will disassemble. ">
> +            </property>
> +        </property>
> +        <port name="name" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="SSH Execute cmd" class="org.kepler.actor.ssh.ExecuteCmd">
> +        <property name="target" class="ptolemy.actor.parameters.PortParameter" value="target">
> +        </property>
> +        <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="0">
> +        </property>
> +        <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +        <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +        </property>
> +        <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +        </property>
> +        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +        </property>
> +        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[60.0, 60.0]">
> +        </property>
> +        <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="command" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="errors" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="Expression" class="ptolemy.actor.lib.Expression">
> +        <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="&quot;cp -r test_suite/&quot;+name+&quot;/* &quot;+temp_directory+&quot;/&quot;+name">
> +            <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Expression actor evaluates a specified expression (e.g., an addition or multiplication operation), which may reference the values of user-specified input ports, the current time, or the actor's iteration count. The actor outputs the value of the evaluated expression. </p>
> +
> +<p>Expressions are specified in the Ptolemy expression language via the expression parameter. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. </p>
> +
> +<p>By default, the expression parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration." </p>
> +
> +<p>Input ports are created by the user and correspond to variables used in the specified expression. Currently, the Expression actor does not support input multiports. The actor requires all of its inputs to be present. If inputs are not all present, then the actor will generate an error. </p>
> +
> +<p>Note: the Expression actor can be used instead of many of the arithmetic actors, such as AddSubtract, MultiplyDivide, and TrigFunction. However, those actors will be usually be more efficient, and sometimes more convenient to use.</p></configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the value of the evaluated expression. The actor automatically determines the type based on the type of the input.</configure></property>
> +<property name="prop:expression" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An expression to evaluate. Expressions are specified in the Ptolemy expression language. For more information about the expression language, see http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign1-intro/ptIIdesign1-intro.pdf. By default, the parameter is empty, and attempting to execute the actor without first specifying an expression generates an error. Expressions can refer to the values of inputs by the port name; to the current time by the identifier "time"; and to the current iteration count by the identifier "iteration."</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#MathOperationActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
> +        </property>
> +        <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
> +            <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="expression">
> +            </property>
> +            <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
> +            </property>
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-210.0, 455.0]">
> +        </property>
> +        <port name="name" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +        </port>
> +        <port name="sync" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
> +            </property>
> +            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="Array To Sequence" class="ptolemy.domains.sdf.lib.ArrayToSequence">
> +        <property name="arrayLength" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +        <property name="enforceArrayLength" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>unknown</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The ArrayToSequence actor  outputs the individual values of an array as a sequence of tokens.</p>
> +
> +<p>The actor can accept an array with any element type (e.g., int, double, etc.). Each time the actor fires, it reads and disassembles one array and outputs a sequence of values.</p>
> +
> +<p>The arrayLength parameter can be used to specify the length of the source array. If the enforceArrayLength parameter is selected, then the actor will only accept arrays of the specified length. The enforceArrayLength parameter should be selected if using an SDF director. If using other directors, such as DE or PN, the enforceArrayLength parameter can be deselected, in which case the arrayLength parameter is ignored.</p>
> +
> +<p>The ArrayToSequence actor is similar to the ArrayToElements actor, except that it outputs values as a sequence via a single output port. The ArrayToElements actor outputs individual values on multiple channels of the output port. Use the ArrayAccumulator actor to convert an array into a single string, where each value is separated by a specified separator.</p></configure></property>
> +<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that accepts an array of elements of any type.</configure></property>
> +<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a sequence of the disassembled array values. </configure></property>
> +<property name="prop:enforceArrayLength" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether or not to enforce the arrayLength parameter. By default, the arrayLength is enforced, and the actor will only accept arrays of the specified length.</configure></property>
> +<property name="prop:arrayLength" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The size of the input array. The default is 1.</configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:31:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.sdf.lib.ArrayToSequence">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:907:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ArrayActor">
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#DataArrayOperation">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[-215.0, 140.0]">
> +        </property>
> +    </entity>
> +    <entity name="SSH Execute cmd2" class="org.kepler.actor.ssh.ExecuteCmd">
> +        <property name="target" class="ptolemy.actor.parameters.PortParameter" value="target">
> +        </property>
> +        <property name="timeoutSeconds" class="ptolemy.data.expr.Parameter" value="60">
> +        </property>
> +        <property name="cleanupAfterError" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +        <property name="thirdParty" class="ptolemy.actor.parameters.PortParameter" value="&quot;&quot;">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>1.1 March 2008</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> + <p>The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or "local", the Java
> +   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.</p>
> +
> +<p>Set the <i>timeoutSeconds</i> parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the <i>cleanupAfterError</i>
> +Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). 
> +</p>
> +
> +<p>Note: Streaming of output during the command execution is not currently
> +   implemented.</p>
> +
> +  <p><b>Third party operation.</b>
> +  If the remote command is expected to ask for a password
> +  (or passphrase when connecting to a remote host with public-key authentication)
> +  set the port/parameter <i>thirdParty</i> for the user at host:port of that third party
> +  (it can be the same as <i>target</i> if a sudo command is executed).</p>
> +
> +  <p>The authentication to the third party should be the same from the target
> +  host and from Kepler's local host. Kepler authenticates (by opening a channel)
> +  to the third party and then it provides the password/passphrase used for the
> +  authentication to the command on the target host. Therefore, this actor cannot be
> +  used to reach a remote host through a proxy machine and execute a command there.</p>
> +
> +  <p>The third party execution can be used e.g. to execute and ssh/scp command
> +  that connects to another host, also reachable from Kepler's host, to execute external
> +  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.</p>
> +
> +  <p>The actor will first authenticate Kepler to the third party host
> +  (if not yet done by other actors, e.g. SshSession). During the execution of the command,
> +  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr
> +  streams (case-insensitively). If such string is found, it writes the authentication code
> +  stored within Kepler used for the authentication. Therefore, the command must read the
> +  password on the standard input, not directly from the terminal device.
> +  This process is performed only once!</p>
> +
> +  <p>The underlying java code does not have pseudo-terminal emulation, so if you cannot
> +  force the command to read passwords from the stdin (e.g. scp command), you have to use an
> +  external tool to execute the command through a pseudo-terminal. <b>ptyexec</b> is provided
> +  in the <i>org.kepler.ssh</i> package, a C program, that should be compiled and put into the path
> +  on the target machine. Then you can execute <i>"ptyexec scp ..."</i>. It works on Linux only.</p>
> +
> +</configure></property>
> +<property name="port:stdout" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  </configure></property>
> +<property name="port:stderr" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +<property name="port:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed on the remote host, specified as a string (e.g., "uname -a; date")   </configure></property>
> +<property name="port:errors" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The string representation of actor execution errors, if any. 
> + </configure></property>
> +<property name="port:exitcode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 </configure></property>
> +<property name="prop:timeoutSeconds" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. </configure></property>
> +<property name="prop:streaming mode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the output should be sent in a streaming mode.
> +   Note: Streaming is not currently implemented.
> + </configure></property>
> +<property name="prop:thirdParty" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. </configure></property>
> +<property name="prop:cleanupAfterError" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. </configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:506:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.ExecuteCmd">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1213:1">
> +            </property>
> +        </property>
> +        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +        </property>
> +        <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +        </property>
> +        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +        </property>
> +        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Tutorial">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="[40.0, 355.0]">
> +        </property>
> +        <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +            <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10; &lt;p&gt;The SSHExecuteCmd actor connects to a remote host using SSH protocol and executes a command. If the host is an empty string or &quot;local&quot;, the Java&#10;   Runtime will be used for execution instead of SSH. After the command terminates, the actor returns the stdout,  stderr, and exit code of the operation.&lt;/p&gt;&#10;&#10;&lt;p&gt;Set the &lt;i&gt;timeoutSeconds&lt;/i&gt; parameter to terminate the command after a specified amount of time. Specify 0 to wait indefinitely for command termination. If connecting to a Unix host, use the &lt;i&gt;cleanupAfterError&lt;/i&gt;&#10;Parameter to kill the remote process (and all of its children) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). &#10;&lt;/p&gt;&#10;&#10;&lt;p&gt;Note: Streaming of output during the command execution is not currently&#
10
>  ;   implemented.&lt;/p&gt;&#10;&#10;  &lt;p&gt;&lt;b&gt;Third party operation.&lt;/b&gt;&#10;  If the remote command is expected to ask for a password&#10;  (or passphrase when connecting to a remote host with public-key authentication)&#10;  set the port/parameter &lt;i&gt;thirdParty&lt;/i&gt; for the user at host:port of that third party&#10;  (it can be the same as &lt;i&gt;target&lt;/i&gt; if a sudo command is executed).&lt;/p&gt;&#10;&#10;  &lt;p&gt;The authentication to the third party should be the same from the target&#10;  host and from Kepler's local host. Kepler authenticates (by opening a channel)&#10;  to the third party and then it provides the password/passphrase used for the&#10;  authentication to the command on the target host. Therefore, this actor cannot be&#10;  used to reach a remote host through a proxy machine and execute a command there.&lt;/p&gt;&#10;&#10;  &lt;p&gt;The third party execution can be used e.g. to execute and ssh/scp command&#10;  that 
co
>  nnects to another host, also reachable from Kepler's host, to execute external&#10;  data transfer commands (bbcp, GridFTP, SRM-Lite etc) or sudo commands.&lt;/p&gt;&#10;&#10;  &lt;p&gt;The actor will first authenticate Kepler to the third party host&#10;  (if not yet done by other actors, e.g. SshSession). During the execution of the command,&#10;  it looks for the appearance of the string 'password' or 'passphrase' in the stdout/stderr&#10;  streams (case-insensitively). If such string is found, it writes the authentication code&#10;  stored within Kepler used for the authentication. Therefore, the command must read the&#10;  password on the standard input, not directly from the terminal device.&#10;  This process is performed only once!&lt;/p&gt;&#10;&#10;  &lt;p&gt;The underlying java code does not have pseudo-terminal emulation, so if you cannot&#10;  force the command to read passwords from the stdin (e.g. scp command), you have to use an&#10;  external tool to execu
te
>   the command through a pseudo-terminal. &lt;b&gt;ptyexec&lt;/b&gt; is provided&#10;  in the &lt;i&gt;org.kepler.ssh&lt;/i&gt; package, a C program, that should be compiled and put into the path&#10;  on the target machine. Then you can execute &lt;i&gt;&quot;ptyexec scp ...&quot;&lt;/i&gt;. It works on Linux only.&lt;/p&gt;&#10;&#10;">
> +            </property>
> +            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +            </property>
> +            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="1.1 March 2008">
> +            </property>
> +            <property name="timeoutSeconds (parameter)" class="ptolemy.data.expr.StringParameter" value="Timeout in seconds. The command will be timed out after the specified amount of time. Specify 0 to wait indefinitely for command termination. ">
> +            </property>
> +            <property name="cleanupAfterError (parameter)" class="ptolemy.data.expr.StringParameter" value="Kill remote process(es) after an error or timeout. Set this parameter only if connecting to a Unix server (other platforms do not support it). All processes belonging to the same group as the remote command (i.e., its children) will be killed. ">
> +            </property>
> +            <property name="command (port)" class="ptolemy.kernel.util.StringAttribute" value="The command to be executed on the remote host, specified as a string (e.g., &quot;uname -a; date&quot;)   ">
> +            </property>
> +            <property name="stdout (port)" class="ptolemy.kernel.util.StringAttribute" value="Output of the command as it would output to the standard shell. If there is an SSH connection related error (or timeout) the value will be an empty string.  ">
> +            </property>
> +            <property name="stderr (port)" class="ptolemy.kernel.util.StringAttribute" value="Any errors that were reported by the remote execution or while connecting. If there is an SSH connection related error (or timeout) the value will be an empty string. ">
> +            </property>
> +            <property name="exitcode (port)" class="ptolemy.kernel.util.StringAttribute" value="The exit code of the command. If there is an SSH connection related error (or timeout) the exitcode will be -32767 ">
> +            </property>
> +            <property name="errors (port)" class="ptolemy.kernel.util.StringAttribute" value="The string representation of actor execution errors, if any. &#10; ">
> +            </property>
> +            <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +            </property>
> +            <property name="streaming mode (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether the output should be sent in a streaming mode.&#10;   Note: Streaming is not currently implemented.&#10; ">
> +            </property>
> +            <property name="thirdParty (parameter)" class="ptolemy.data.expr.StringParameter" value="The third party machine where the command wants to connect and needs to authenticate. Kepler can be used to do the authentication and then provide the password or private-key passphrase to the command. It should be defined as [user@]host[:port]. ">
> +            </property>
> +            <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. If user is not provided, the local username will be used. If port is not provided, the default port 22 will be applied.  This parameter is read once at initialize. ">
> +            </property>
> +        </property>
> +        <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="command" class="ptolemy.actor.TypedIOPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="stdout" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="stderr" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="exitcode" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="errors" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="thirdParty" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="false">
> +            </property>
> +            <property name="_hide" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="SSH Directory Creator" class="org.kepler.actor.ssh.DirectoryCreator">
> +        <property name="target" class="ptolemy.actor.parameters.PortParameter" value="target">
> +        </property>
> +        <property name="dir" class="ptolemy.actor.parameters.PortParameter" value="">
> +        </property>
> +        <property name="parent" class="ptolemy.data.expr.Parameter" value="true">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Norbert Podhorszki</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
> +
> +<p>The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.</p>
> +
> +<p>For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. </p>
> +
> +</configure></property>
> +<property name="port:succ" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Boolean token: true if the operation is successful, false if not. </configure></property>
> +<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The actor's execution errors, if any; otherwise an empty string. </configure></property>
> +<property name="port:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the target directory. This parameter is read once at initialize.  </configure></property>
> +<property name="port:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. </configure></property>
> +<property name="prop:dir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The path to the directory to be read on the target machines. This parameter is read once at initialize. </configure></property>
> +<property name="prop:parent" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  </configure></property>
> +<property name="prop:target" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The machine to be used at job submission. It should be null, "" or "local" for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. </configure></property>
> +</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:514:1">
> +        </property>
> +        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.kepler.actor.ssh.DirectoryCreator">
> +            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1209:1">
> +            </property>
> +        </property>
> +        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
> +        </property>
> +        <property name="semanticType21" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#SSH">
> +        </property>
> +        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#CPES">
> +        </property>
> +        <property name="_location" class="ptolemy.kernel.util.Location" value="{-85.0, 260.0}">
> +        </property>
> +        <property name="" class="ptolemy.vergil.basic.DocAttribute">
> +            <property name="description" class="ptolemy.data.expr.StringParameter" value="&#10;&#10;&lt;p&gt;The SSHDirectoryCreator actor creates a local or remote directory. The actor reads the path to a target machine as well as the name of the directory to create. The actor outputs the operation results: true if the directory is created successfully, and false if not. In addition, the actor outputs the text of generated error messages, if any.&lt;/p&gt;&#10;&#10;&lt;p&gt;For remote operations, a relative path is relative to the home directory. For local operations, a relative path is relative to the current directory. If the 'parent' flag is set, intermediate directories in the provided path will be created if necessary. &lt;/p&gt;&#10;&#10;">
> +            </property>
> +            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Norbert Podhorszki">
> +            </property>
> +            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
> +            </property>
> +            <property name="parent (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether parent directories should be created recursively if necessary. If the 'parent' flag is set the operation is considered successful even if the directory already exists.  ">
> +            </property>
> +            <property name="succ (port)" class="ptolemy.kernel.util.StringAttribute" value="A Boolean token: true if the operation is successful, false if not. ">
> +            </property>
> +            <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="The actor's execution errors, if any; otherwise an empty string. ">
> +            </property>
> +            <property name="dir (port)" class="ptolemy.kernel.util.StringAttribute" value="The path to the target directory. This parameter is read once at initialize.  ">
> +            </property>
> +            <property name="target (port)" class="ptolemy.kernel.util.StringAttribute" value=" The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with SSH. This parameter is read once at initialize. ">
> +            </property>
> +            <property name="dir (parameter)" class="ptolemy.data.expr.StringParameter" value="The path to the directory to be read on the target machines. This parameter is read once at initialize. ">
> +            </property>
> +            <property name="target (parameter)" class="ptolemy.data.expr.StringParameter" value="The machine to be used at job submission. It should be null, &quot;&quot; or &quot;local&quot; for the local machine or [user@]host to denote a remote machine accessible with ssh. This parameter is read once at initialize. ">
> +            </property>
> +        </property>
> +        <port name="target" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="dir" class="ptolemy.actor.parameters.ParameterPort">
> +            <property name="input"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="succ" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +        <port name="error" class="ptolemy.actor.TypedIOPort">
> +            <property name="output"/>
> +            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
> +            </property>
> +        </port>
> +    </entity>
> +    <entity name="Array To Sequence2" class="ptolemy.domains.sdf.lib.ArrayToSequence">
> +        <property name="arrayLength" class="ptolemy.data.expr.Parameter" value="1">
> +        </property>
> +        <property name="enforceArrayLength" class="ptolemy.data.expr.Parameter" value="false">
> +        </property>
> +<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
> +<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>unknown</configure></property>
> +<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
> +<property name="userLevelDocumentation&quo