Kepler workflow system: Difference between revisions

The educational technology and digital learning wiki
Jump to navigation Jump to search
mNo edit summary
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{stub}}
== Introduction ==
== Introduction ==


'''Kepler''' is an [[e-science]] tool designed to help scien­tists, analysts, and computer programmers create, execute, and share models and analyses across a broad range of scientific and engineering disciplines.  
'''Kepler''' is an [[e-science]] tool designed to help scien­tists, analysts, and computer programmers create, execute, and share models and analyses across a broad range of scientific and engineering disciplines. Users can build workflows via Kepler's intuitive graphical interface. Components are dragged and dropped onto a Workflow canvas, where they can be connected, customized, and then executed.


{{quotation|Kepler can operate on data stored in a variety of formats, locally and over the internet, and is an effective environment for integrating disparate software components, such as merging "R" scripts with compiled "C" code, or facilitating remote, distributed execution of models. Using Kepler's graphical user interface, users simply select and then connect pertinent analytical components and data sources to create a "scientific workflow"—an executable representation of the steps required to generate results. The Kepler software helps users share and reuse data, workflows, and compo­nents developed by the scientific community to address common needs.}} ([https://kepler-project.org/ The Kepler Project], retrieved 15:25, 16 June 2010 (UTC).
{{quotation|Kepler can operate on data stored in a variety of formats, locally and over the internet, and is an effective environment for integrating disparate software components, such as merging "R" scripts with compiled "C" code, or facilitating remote, distributed execution of models. Using Kepler's graphical user interface, users simply select and then connect pertinent analytical components and data sources to create a "scientific workflow"—an executable representation of the steps required to generate results. The Kepler software helps users share and reuse data, workflows, and compo­nents developed by the scientific community to address common needs.}} ([https://kepler-project.org/ The Kepler Project], retrieved 15:25, 16 June 2010 (UTC).
Line 9: Line 10:
* [[Taverna workbench]] (an alternative solution)
* [[Taverna workbench]] (an alternative solution)


== Examples ==
== The Kepler application ==
 
{{quotation|Kepler is a software application for the analysis and modeling of scientific data. Kepler simplifies the effort required to create executable models by using a visual representation of these processes. These representations, or “scientific workflows,” display the flow of data among discrete analysis and modeling components [...] Kepler allows scientists to create their own executable scientific workflows by simply dragging and dropping components onto a workflow creation area and connecting the
components to construct a specific data flow, creating a visual model of the analytical portion of their research. Kepler represents the overall workflow visually so that it is easy to understand how data flow from one component to another. The resulting workflow can be saved in a text format, emailed to colleagues, and/or published for sharing with colleagues worldwide}}([https://code.kepler-project.org/code/kepler-docs/trunk/outreach/documentation/shipping/2.0/getting-started-guide.pdf Getting Started with Kepler], retrieved 15:22, 29 June 2010 (UTC).)
 
The "Getting started guide" definessScientific workflows as flexible tools for accessing scientific data (streaming sensor
data, medical and satellite images, simulation output, observational data, etc.) and executing complex analysis on the retrieved data. In Kepler, {{Each workflow consists of analytical steps that may involve database access and querying, data analysis and mining, and intensive computations performed on high performance cluster computers. Each workflow step is represented by an "actor", a processing component that can be dragged and dropped into a workflow via Kepler's visual interface. Connected actors [and some other components] form a workflow, allowing scientists to inspect and display data on the fly as it is computed, make parameter changes as necessary, and re-run and reproduce experimental results.
 
Workflows may represent theoretical models or observational analyses; they can be simple and linear, or complex and non-linear. One of the benefits of scientific workflows is that they can be nested, meaning that a workflow can contain âsub-workflowsâ that perform embedded tasks. A nested workflow (also known as a composite actor) is a reusable component that performs a potentially complex task.}}. ([https://code.kepler-project.org/code/kepler-docs/trunk/outreach/documentation/shipping/2.0/getting-started-guide.pdf Getting Started with Kepler], retrieved 15:22, 29 June 2010 (UTC).)
 
Major components:
 
* '''Actors''' define some processing
* '''A director''' controls the execution of a workflow, i.e. will define ''when'' and actor will execute. There exist several types of directors, e.g. the ''SDF director'' allows to specify sequential workflows, whereas the ''PN Director'' allows to define parallel workflows.
* '''Composite actors''' are collections or sets of bundled actors, i.e. they represent a sub-workflow.
* '''Ports''' define input/output ports for actors, i.e. data that actors will receive and produce. Actors are connected in a workflow via their ports. There are three types: input ports, output ports and combined input/output ports.
* The link that represents data flow between one actor port and another actor port is called a '''channel'''.
* '''Relations''' allow branching, i.e. data can be sent to multiple actors in a workflow.
* '''Parameters''' are configurable values that can be attached to a workflow or to individual directors or actors


; View of the workbench
== Ptolemy and the MoML language ==
[[image:kepler-screenshot-1.png|frame|none|Kepler 1.0 screen capture - Lotka-Voltera perdator prey model]]


; Results (plotted with R)
{{quotation|Kepler builds upon the mature Ptolemy II framework, developed at the University of California, Berkeley. Ptolemy II is a software framework developed as part of the Ptolemy project, which studies modeling, simulation, and design of concurrent, real-time, embedded systems.}} ([https://code.kepler-project.org/code/kepler-docs/trunk/outreach/documentation/shipping/2.0/UserManual.pdf Kepler User Manual]
[[image:kepler-screenshot-2.png|frame|none|Kepler 1.0 screen capture - Lotka-Voltera perdator prey model]]
Kepler workflows can be exchanged in XML using Ptolemy's Modeling Markup Language (MoML). Here is the [[DTD]] for MoML 1 which can be found at [http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd ptolemy].


; XML model file
<source lang="xml">
<source lang="xml">
<?xml version="1.0" standalone="no"?>
<!-- MoML DTD Version 1.4, UC Berkeley -->
<!DOCTYPE entity PUBLIC "-//UC Berkeley//DTD MoML 1//EN"
<!-- $Id: MoML_1.dtd,v 1.18 2010/04/02 00:59:29 cxh Exp $ -->
    "http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd">
<!-- If you update this file, please also update: -->
<entity name="02-LotkaVolterraPredatorPrey" class="ptolemy.actor.TypedCompositeActor">
<!--    ptweb/xml/dtd/MoML_1.dtd, -->
    <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.beta">
<!--   ptII/doc/design/src/MoML.fm, -->
    </property>
<!--    the static field MoML_DTD_1 in MoMLParser.java. -->
    <property name="r" class="ptolemy.data.expr.Parameter" value="2">
<!-- The top-level element can be either model or class. -->
        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
<!-- NOTE: To ensure backward compatibility with other version 1.x DTDs, -->
        </property>
<!-- there are quite a few deprecated entries here. The documentation    -->
        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
<!-- does not mention these deprecated entries. -->
        </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="410.0, 50.0">
        </property>
    </property>
    <property name="a" class="ptolemy.data.expr.Parameter" value="0.1">
        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
        </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="410.0, 75.0">
        </property>
    </property>
    <property name="b" class="ptolemy.data.expr.Parameter" value="0.1">
        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
        </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="410.0, 100.0">
        </property>
    </property>
    <property name="d" class="ptolemy.data.expr.Parameter" value="0.1">
        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
        </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="410.0, 125.0">
        </property>
    </property>
    <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={254, 22, 839, 802}, maximized=false}">
    </property>
    <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[556, 681]">
    </property>
    <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0,0.4,0.4,1.0}">
        </property>
        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="This model shows the solution to the classic Lotka-Volterra &#10;predator prey dynamics model.  It uses the Continuous Time &#10;domain to solve two coupled differential equations, one that models &#10;the predator population and one that models the prey &#10;population.  The results are plotted as they are calculated showing &#10;both population change and a phase diagram of the dynamics.&#10;&#10;Rich Williams, 2003, NCEAS  ">
        </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="semanticType000" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
        </property>
        <property name="_location" class="ptolemy.kernel.util.Location" value="[110.0, 430.0]">
        </property>
    </property>
    <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0">
    </property>
    <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{338.0, 316.5}">
    </property>
    <property name="DocAttribute" class="ptolemy.vergil.basic.DocAttribute">
        <property name="description" class="ptolemy.data.expr.StringParameter" value="This model shows the solution to the classic Lotka-Volterra predator prey dynamics model.  It uses the Continuous Time domain to solve two coupled differential equations, one that models the predator population and one that models the prey  population.  The results are plotted as they are calculated showing both population change and a phase diagram of the dynamics.&#10;">
        </property>
        <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Rich Williams">
        </property>
        <property name="r (parameter)" class="ptolemy.data.expr.StringParameter" value="intrinsic rate of prey population increase">
        </property>
        <property name="a (parameter)" class="ptolemy.data.expr.StringParameter" value="predation rate coefficient">
        </property>
        <property name="b (parameter)" class="ptolemy.data.expr.StringParameter" value="reproduction rate of predators per 1 prey eaten">
        </property>
        <property name="d (parameter)" class="ptolemy.data.expr.StringParameter" value="predator mortality rate  ">
        </property>
    </property>
    <property name="CT Director" class="ptolemy.domains.ct.kernel.CTMixedSignalDirector">
        <property name="timeResolution" class="ptolemy.moml.SharedParameter" value="1E-10">
        </property>
        <property name="startTime" class="ptolemy.data.expr.Parameter" value="0.0">
        </property>
        <property name="stopTime" class="ptolemy.data.expr.Parameter" value="1000">
        </property>
        <property name="initStepSize" class="ptolemy.data.expr.Parameter" value="0.1">
        </property>
        <property name="minStepSize" class="ptolemy.data.expr.Parameter" value="1e-5">
        </property>
        <property name="maxStepSize" class="ptolemy.data.expr.Parameter" value="1.0">
        </property>
        <property name="maxIterations" class="ptolemy.data.expr.Parameter" value="20">
        </property>
        <property name="errorTolerance" class="ptolemy.data.expr.Parameter" value="1e-6">
        </property>
        <property name="valueResolution" class="ptolemy.data.expr.Parameter" value="1e-8">
        </property>
        <property name="synchronizeToRealTime" class="ptolemy.data.expr.Parameter" value="false">
        </property>
        <property name="ODESolver" class="ptolemy.data.expr.Parameter" value="&quot;ExplicitRK45Solver&quot;">
        </property>
        <property name="runAheadLength" class="ptolemy.data.expr.Parameter" value="0.1">
        </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>Jie Liu, Haiyang Zheng</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 Continuous Time (CT) Director is designed to oversee workflows that predict how systems evolve as a function of time (i.e., "dynamic systems"). In CT workflows, the rates of change of parameters are related to the current value or rates of change of other parameters, often in complex and coupled ways that are described by differential equations.</p>
<!-- The model element is deprecated. Use entity instead. -->
<!ELEMENT model (class | configure | deleteEntity | deletePort |
deleteRelation | director | display | doc | entity | group | import |
                input | link | property | relation | rename | rendition |
unlink)*>
<!ATTLIST model name CDATA #REQUIRED
                class CDATA #IMPLIED>


<p>When a CT directed workflow is used in Kepler, tokens are passed from one actor to another just as they are in SDF or PN workflows. However, the CT Director keeps track of the "time" of each iteration as well as the time between each iteration (i.e., the "time step"). By insuring that the time step is small enough, the director can use simple extrapolations to estimate new values. The CT Director then iterates the workflow enough times to reach the desired stop time. The entire process is thus just numerical integration. </p>
<!ELEMENT class (class | configure | deleteEntity | deletePort |
deleteRelation | director | display | doc |
                entity | group | import | input | link | port |
                property | relation | rename | rendition | unlink)*>
<!ATTLIST class name CDATA #REQUIRED
                extends CDATA #IMPLIED
source CDATA #IMPLIED>


<p>In general, the relevance of the director's parameters varies depending on the type of  ODE solver algorithm selected. If the algorithm is fixed-step (FowardEulerSolver and BackwardEulerSolver), the director will use the value specified by the initStepSize as the step size. The specified value is a 'guess' at an initial integration step size. If the integral does not look right, changing the initStepSize might provide a better result. For variable-step-size algorithms (ExplicitRK23Solver and ExplicitRK45Solver), step-size will change based on the rate of change of the original function's values (i.e., derivative values). In other words, time-steps within an integration will change throughout the calculation, and the initStepSize is used only as an initial suggestion.</p>
<!ELEMENT configure (#PCDATA)>
<!ATTLIST configure source CDATA #IMPLIED>


<p>Directors with variable-step-size algorithms use the maxStepSize and minStepSize parameters to set upper and lower bounds for estimated step sizes. These parameters are used for adjusting tradeoffs between accuracy and performance. For simple dynamic systems, setting an upper bound with the maxStepSize parameter helps ensure that the algorithm will use an adequate number of time points. For more complex systems, the minStepSize ensures that the algorithm will not consume too many system resources by using increasingly minute step sizes. The minStepSize is also used for the first step after breakpoints.</p>
<!ELEMENT deleteEntity EMPTY>
<!ATTLIST deleteEntity name CDATA #REQUIRED>


<p>The timeResolution parameter is also used to adjust the tradeoff between accuracy and speed. In general, one would not change this parameter unless a function is known to change substantially in times of less than the parameter's default value, 1E-10 sec. The parameter helps ensure that variable-step-size algorithms do not use unnecessarily small time steps that would result is long execution times. Reducing the parameter's value might produce more accurate results, but at a performance cost.</p>
<!ELEMENT deletePort EMPTY>
<!ATTLIST deletePort name CDATA #REQUIRED>


<p>The errorTolerance parameter is only relevant to CT directors that use variable-step-size algorithms. Workflow actors that perform integration error control (e.g., the Integrator actor) will compare their estimated error to the value specified by the errorTolerance parameter. If the estimated error is greater than the errorTolerance, the director will decide that the step size is inaccurate and will decrease it. In most cases, the default value of the errorTolerance parameter (1e-4) does not require change.</p>
<!ELEMENT deleteProperty EMPTY>
<!ATTLIST deleteProperty name CDATA #REQUIRED>


<p>The startTime and stopTime parameters specify the initial and final time for the integration. By default, the time starts at 0 and runs to infinity. Note: the startTime and stopTime parameters are only applicable when the CT Director is at the top level. If a CT workflow is contained in another workflow, the CT Director will use the time of its executive director.</p>
<!ELEMENT deleteRelation EMPTY>
<!ATTLIST deleteRelation name CDATA #REQUIRED>


<p>The maxIterations specifies the number of times the director will iterate to determine a "fixed point." A fixed point is reached if two successive iteration steps produce the "same" result. How close values must be to be considered fixed, is specified with the valueResolution parameter, which defaults to 1e-6.</p>
<!-- NOTE: deprecatedUse property instead. -->
<!ELEMENT director (configure | doc | property)*>
<!ATTLIST director name CDATA "director"
                  class CDATA #REQUIRED>


<p>The synchronizeToRealTime and runAheadLength parameters are advanced parameters that are genrally only used when a CT workflow is nested in another workflow. For example, if the CT Director is embedded in an event-based workflow (e.g., a workflow that uses a DE Director), the CT Director will "run ahead" of the global time by the amount specified by the runAheadLength parameter, and prepare to roll back if necessary. The local current time in the sub-workflow is compared with the current time of the executive director. If the local time is later than the global time, then the directed system will rollback to a "known good" state. The "known good" state is the state of the system at the time when local time is equal to the current time of the executive director. In general, the timeResolution and runAheadLength parameters should be left at their default values.</p>
<!ELEMENT display EMPTY>
<!ATTLIST display name CDATA #REQUIRED>


<p>For more information about the CT Director, see the Ptolemy II User Manual http://ptolemy.eecs.berkeley.edu/papers/05/ptIIdesign3-domains/ptIIdesign3-domains.pdf.</p>
<!ELEMENT doc (#PCDATA)>
</configure></property>
<!ATTLIST doc name CDATA #IMPLIED>
<property name="prop:initStepSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The initial integration step size. The value is a double that defaults to 0.1.</configure></property>
<property name="prop:stopTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The final time for the integration. By default, the time starts at 0 and runs to infinity.</configure></property>
<property name="prop:startTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Starting time of the integration. The value is a double that defaults to 0.0.</configure></property>
<property name="prop:timeResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The timeResolution parameter is  used to adjust the tradeoff between accuracy and speed. In general, one would not change this parameter unless a function is known to change substantially in times of less than the parameter's default value, 1E-10 sec. The parameter helps ensure that variable-step-size algorithms do not use unnecessarily small time steps that would result is long execution times. Reducing the parameter's value might produce more accurate results, but at a performance cost.</configure></property>
<property name="prop:ODESolver" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The class name of the normal ODE solver used. The default value is a string: "ptolemy.domains.ct.kernel.solver.ExplicitRK23Solver".</configure></property>
<property name="prop:maxIterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The maxIterations specifies the number of times the director will iterate to determine a "fixed point."  A fixed point is reached if two successive iteration steps produce the "same" result. How close values must be to be considered fixed is specified with the valueResolution parameter.</configure></property>
<property name="prop:runAheadLength" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The runAheadLength parameter is an advanced parameter that is genrally only used when a CT workflow is nested in another workflow. For example, if the CT Director is embedded in an event-based workflow (e.g., a workflow that uses a DE Director), the CT Director will "run ahead" of the global time by the amount specified by the runAheadLength parameter, and prepare to roll back if necessary. The local current time in the sub-workflow is compared to the current time of the executive director. If the local time is later than the global time, then the directed system will rollback to a "known good" state. The "known good" state is the state of the system at the time when local time is equal to the current time of the executive director. </configure></property>
<property name="prop:maxStepSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The maxStepSize  parameter sets an upper bound for estimated step sizes. The value is a double that defaults to 1.0.</configure></property>
<property name="prop:errorTolerance" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The errorTolerance parameter is only relevant to directors that use variable-step-size algorithms. Workflow actors that perform integration error control (e.g., the Integrator actor) will compare their estimated error to the value specified by the errorTolerance parameter. If the estimated error is greater than the errorTolerance, the director will decide that the step size is inaccurate and will decrease it. In most cases, the default value of the errorTolerance parameter (1e-4) does not require change</configure></property>
<property name="prop:minStepSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The minStepSize  parameter sets a lower bound for estimated step sizes. The value is a double that defaults to 1e-5.</configure></property>
<property name="prop:synchronizeToRealTime" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicator whether the execution will synchronize to real time. The value is a Boolean token that defaults to false. The synchronizeToRealTime is an advanced parameter that is genrally only used when a CT workflow is nested in another workflow.</configure></property>
<property name="prop:valueResolution" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Value resolution specifies how close values must be to be considered fixed. The default is 1e-6.</configure></property>
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:4:1">
        </property>
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ct.kernel.CTMixedSignalDirector">
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:4: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="{100.0, 15.0}">
        </property>
    </property>
    <entity name="Timed Plotter" class="ptolemy.actor.lib.gui.TimedPlotter">
        <property name="fillOnWrapup" class="ptolemy.data.expr.Parameter" value="true">
        </property>
        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={800, 414, 500, 344}, maximized=false}">
        </property>
        <property name="_plotSize" class="ptolemy.actor.gui.SizeAttribute" value="[500, 300]">
        </property>
        <property name="startingDataset" class="ptolemy.data.expr.Parameter" value="0">
        </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><p>The TimedPlotter actor reads one or more double tokens via its input multiport and plots each as a separate data set each time the actor iterates. The actor displays the graph on the screen. The horizontal axis represents time.</p></configure></property>
<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts double tokens that will be plotted over time.</configure></property>
<property name="prop:fillOnWrapup" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to rescale the plot so that all data is visible. By default, the actor scales the plot to fill the display area.</configure></property>
<property name="prop:startingDataset" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The starting dataset number. The value must be a non-negative integer. The default is 0.</configure></property>
<property name="prop:legend" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Annotations that will be displayed with the plot graph. Specify a comma-separated list of values that correspond to the input data sets (e.g., rainfall, temperature, elevation).</configure></property>
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:14:1">
        </property>
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.gui.TimedPlotter">
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:890:1">
            </property>
        </property>
        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Plotter">
        </property>
        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GraphicalOutput">
        </property>
        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:5:1#GraphicalAnalysis">
        </property>
        <property name="_location" class="ptolemy.kernel.util.Location" value="[275.0, 65.0]">
        </property>
        <property name="" class="ptolemy.vergil.basic.DocAttribute">
            <property name="description" class="ptolemy.data.expr.StringParameter" value="&lt;p&gt;The TimedPlotter actor reads one or more double tokens via its input multiport and plots each as a separate data set each time the actor iterates. The actor displays the graph on the screen. The horizontal axis represents time.&lt;/p&gt;">
            </property>
            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
            </property>
            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
            </property>
            <property name="fillOnWrapup (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether to rescale the plot so that all data is visible. By default, the actor scales the plot to fill the display area.">
            </property>
            <property name="legend (parameter)" class="ptolemy.data.expr.StringParameter" value="Annotations that will be displayed with the plot graph. Specify a comma-separated list of values that correspond to the input data sets (e.g., rainfall, temperature, elevation).">
            </property>
            <property name="startingDataset (parameter)" class="ptolemy.data.expr.StringParameter" value="The starting dataset number. The value must be a non-negative integer. The default is 0.">
            </property>
            <property name="input (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that accepts double tokens that will be plotted over time.">
            </property>
        </property>
        <configure>
<?plotml <!DOCTYPE plot PUBLIC "-//UC Berkeley//DTD PlotML 1//EN"
"http://ptolemy.eecs.berkeley.edu/xml/dtd/PlotML_1.dtd">
<plot>
<title>Timed Plotter</title>
<xRange min="0.0" max="1000.0"/>
<yRange min="6.521099172800424E-4" max="40.394425200281766"/>
</plot>?>
        </configure>
    </entity>
    <entity name="XY Plotter" class="ptolemy.actor.lib.gui.XYPlotter">
        <property name="fillOnWrapup" class="ptolemy.data.expr.Parameter" value="true">
        </property>
        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={802, 48, 500, 344}, maximized=false}">
        </property>
        <property name="_plotSize" class="ptolemy.actor.gui.SizeAttribute" value="[500, 300]">
        </property>
        <property name="startingDataset" class="ptolemy.data.expr.Parameter" value="0">
        </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>Jie Liu</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 XYPlotter actor plots (x,y) points and displays the graph. The actor reads x and y double tokens via its two input multiports. Each time the actor iterates, it reads one token from each input channel.  </p>


<p>X and Y tokens received on the first channel of the input port
<!ELEMENT entity (class | configure | deleteEntity | deletePort |
are plotted together, as are the tokens received on the second channels, etc. The two input port must have the same width (i.e., the same number of input channels).</p></configure></property>
  deleteRelation | director | display | doc |
<property name="port:inputY" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts doubles representing y-values. The port must have the same width (i.e., number of input channels) as the inputX port.</configure></property>
                  entity | group | import | input | link | port |
<property name="port:inputX" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts one or more doubles representing x-values. The port must have the same width (i.e., number of input channels) as the inputY port.</configure></property>
                  property | relation | rename | rendition | unlink)*>
<property name="prop:fillOnWrapup" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to rescale the plot so that all data is visible. By default, the actor scales the plot to fill the display area.</configure></property>
<!ATTLIST entity name CDATA #REQUIRED
<property name="prop:startingDataset" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The starting dataset number to which data is plotted. The value must be a non-negative integer. The default is 0.</configure></property>
                class CDATA #IMPLIED
<property name="prop:legend" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Annotations that will be displayed with the plot graph. Specify a comma-separated list of values that correspond to the input data sets (e.g., rainfall, temperature, elevation).</configure></property>
source CDATA #IMPLIED>
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:11:1">
        </property>
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.gui.XYPlotter">
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:887:1">
            </property>
        </property>
        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Plotter">
        </property>
        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GraphicalOutput">
        </property>
        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:5:1#ScatterPlot">
        </property>
        <property name="_location" class="ptolemy.kernel.util.Location" value="[275.0, 135.0]">
        </property>
        <property name="" class="ptolemy.vergil.basic.DocAttribute">
            <property name="description" class="ptolemy.data.expr.StringParameter" value="&lt;p&gt;The XYPlotter actor plots (x,y) points and displays the graph. The actor reads x and y double tokens via its two input multiports. Each time the actor iterates, it reads one token from each input channel.  &lt;/p&gt;&#10;&#10;&lt;p&gt;X and Y tokens received on the first channel of the input port&#10; are plotted together, as are the tokens received on the second channels, etc. The two input port must have the same width (i.e., the same number of input channels).&lt;/p&gt;">
            </property>
            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Jie Liu">
            </property>
            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
            </property>
            <property name="fillOnWrapup (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether to rescale the plot so that all data is visible. By default, the actor scales the plot to fill the display area.">
            </property>
            <property name="legend (parameter)" class="ptolemy.data.expr.StringParameter" value="Annotations that will be displayed with the plot graph. Specify a comma-separated list of values that correspond to the input data sets (e.g., rainfall, temperature, elevation).">
            </property>
            <property name="startingDataset (parameter)" class="ptolemy.data.expr.StringParameter" value="The starting dataset number to which data is plotted. The value must be a non-negative integer. The default is 0.">
            </property>
            <property name="inputX (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that accepts one or more doubles representing x-values. The port must have the same width (i.e., number of input channels) as the inputY port.">
            </property>
            <property name="inputY (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that accepts doubles representing y-values. The port must have the same width (i.e., number of input channels) as the inputX port.">
            </property>
        </property>
        <configure>
<?plotml <!DOCTYPE plot PUBLIC "-//UC Berkeley//DTD PlotML 1//EN"
"http://ptolemy.eecs.berkeley.edu/xml/dtd/PlotML_1.dtd">
<plot>
<title>XY Plotter</title>
<xRange min="6.521099172800424E-4" max="9.597263548905689"/>
<yRange min="7.992938544228106" max="40.394425200281766"/>
</plot>?>
        </configure>
    </entity>
    <entity name="dn1/dt" class="ptolemy.actor.lib.Expression">
        <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="r*n1 - a*n1*n2">
            <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>
<!ELEMENT group ANY>
<!ATTLIST group name CDATA #IMPLIED>


<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>
<!-- The import element is deprecated. Use the source attribute instead. -->
<!ELEMENT import EMPTY>
<!ATTLIST import source CDATA #REQUIRED
                base CDATA #IMPLIED>


<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>
<!-- The base attribute is deprecated. -->
<!ELEMENT input EMPTY>
<!ATTLIST input source CDATA #REQUIRED
                base CDATA #IMPLIED>


<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>
<!ELEMENT link EMPTY>
<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>
<!ATTLIST link insertAt CDATA #IMPLIED
<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>
              insertInsideAt CDATA #IMPLIED
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:75:1">
              port CDATA #IMPLIED
        </property>
              relation CDATA #IMPLIED
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Expression">
              relation1 CDATA #IMPLIED
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:950:1">
              relation2 CDATA #IMPLIED
            </property>
              vertex CDATA #IMPLIED>
        </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="[300.0, 260.0]">
        </property>
        <port name="output" class="ptolemy.actor.TypedIOPort">
            <property name="output"/>
            <property name="_type" class="ptolemy.actor.TypeAttribute" value="double">
            </property>
        </port>
        <port name="n2" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
        </port>
        <port name="n1" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
        </port>
    </entity>
    <entity name="dn2/dt" class="ptolemy.actor.lib.Expression">
        <property name="expression" class="ptolemy.kernel.util.StringAttribute" value="-d*n2 + b*n1*n2">
            <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>
<!-- Deprecated. Use a property instead. -->
<!ELEMENT location EMPTY>
<!ATTLIST location value CDATA #REQUIRED>


<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>
<!ELEMENT port (configure | display | doc | property | rename)*>
<!ATTLIST port class CDATA #IMPLIED
              name CDATA #REQUIRED>


<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>
<!ELEMENT property (configure | display | doc | property | rename)*>
<!ATTLIST property class CDATA #IMPLIED
                    name CDATA #REQUIRED
                    value CDATA #IMPLIED>


<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>
<!ELEMENT relation (configure | display | doc | property | rename | vertex)*>
<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>
<!ATTLIST relation name CDATA #REQUIRED
<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>
                  class CDATA #IMPLIED>
</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="[300.0, 340.0]">
        </property>
        <port name="output" class="ptolemy.actor.TypedIOPort">
            <property name="output"/>
            <property name="_type" class="ptolemy.actor.TypeAttribute" value="double">
            </property>
        </port>
        <port name="n1" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
        </port>
        <port name="n2" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
        </port>
    </entity>
    <entity name="Integraten1" class="ptolemy.domains.ct.lib.Integrator">
<display name="Integrate n1"/>        <property name="initialState" class="ptolemy.data.expr.Parameter" value="1">
        </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>Jie Liu</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 Integrator actor is used with a CT Director to help solve ordinary differential equations (ODEs). The actor helps control the accuracy of the ODE solution by adjusting integration step sizes. The actor has memory, which is its state. </p>
<!ELEMENT rename EMPTY>
<!ATTLIST rename name CDATA #REQUIRED>


<p>The actor has one input port and one output port. Conceptually, the input is the derivative of the output with respect to time. So an ordinary differential equation dx/dt = f(x, t) can be built by: </p>
<!-- Deprecated. Use a property instead. -->
<pre>
<!ELEMENT rendition (configure | location | property)*>
              +---------------+
<!ATTLIST rendition class CDATA #REQUIRED>
   
        dx/dt  |              |  x
    +--------->|  Integrator  |---------+----->
    |          |              |        |
    |         +---------------+        |
    |                                    |
    |            |---------------|      |
    +-------------| f(x, t)       |------+
                  | Expression    |   
                  |---------------|
</pre>
<p>The above schematic can be built with two actors: the Integrator and the Expression actor. The Expression actor specifies the integrand of a differential equation. The output of the Expression actor is connected to the input of an Integrator actor. The output of the Integrator is then connected back to the input of the Expression actor. This loop is then iterated a number of times by the CT Director, numerically integrating the differential equation. 
</p>


<p>The Integrator has one parameter: the initialState, which specifies the initial state of the integrator. Changes to the initialState parameter are ignored after workflow execution starts, unless the initialize() method is called again. The default value of the parameter is 0.0. </p>
<!ELEMENT unlink EMPTY>
<!ATTLIST unlink index CDATA #IMPLIED
                insideIndex CDATA #IMPLIED
                port CDATA #REQUIRED
                relation CDATA #IMPLIED>


<!ELEMENT vertex (configure | display | doc | location | property | rename)*>
<!ATTLIST vertex name CDATA #REQUIRED
                pathTo CDATA #IMPLIED
                value CDATA #IMPLIED>
</source>


</configure></property>
== Examples ==
<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the "next step" for the integration.</configure></property>
<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that receives the derivative of the actor's output with respect to time.</configure></property>
<property name="prop:initialState" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The initial state of the integrator. The default value is 0.0.</configure></property>
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:100:1">
        </property>
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ct.lib.Integrator">
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:974:1">
            </property>
        </property>
        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#CalculusMathOperationActor">
        </property>
        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#CalculusOperation">
        </property>
        <property name="_location" class="ptolemy.kernel.util.Location" value="[475.0, 250.0]">
        </property>
        <port name="input" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
            <property name="signalType" class="ptolemy.data.expr.Parameter" value="&quot;CONTINUOUS&quot;">
            </property>
        </port>
        <port name="output" class="ptolemy.actor.TypedIOPort">
            <property name="output"/>
            <property name="signalType" class="ptolemy.data.expr.Parameter" value="&quot;CONTINUOUS&quot;">
            </property>
        </port>
    </entity>
    <entity name="Integrator" class="ptolemy.domains.ct.lib.Integrator">
        <property name="initialState" class="ptolemy.data.expr.Parameter" value="8">
        </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>Jie Liu</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 Integrator actor is used with a CT Director to help solve ordinary differential equations (ODEs). The actor helps control the accuracy of the ODE solution by adjusting integration step sizes. The actor has memory, which is its state. </p>
; View of the workbench
[[image:kepler-screenshot-1.png|frame|none|Kepler 1.0 screen capture - Lotka-Voltera perdator prey model]]


<p>The actor has one input port and one output port. Conceptually, the input is the derivative of the output with respect to time. So an ordinary differential equation dx/dt = f(x, t) can be built by: </p>
; Annotated view of workbench panel
<pre>
[[image:kepler-20-components.jpg|frame|none|Kepler 1.0 screen capture - Lotka-Voltera perdator prey model]]
              +---------------+
        dx/dt  |               |   x
    +--------->|   Integrator  |---------+----->
    |          |              |        |
    |          +---------------+        |
    |                                    |
    |            |---------------|      |
    +-------------| f(x, t)      |------+
                  | Expression    |   
                  |---------------|
</pre>
<p>The above schematic can be built with two actors: the Integrator and the Expression actor. The Expression actor specifies the integrand of a differential equation. The output of the Expression actor is connected to the input of an Integrator actor. The output of the Integrator is then connected back to the input of the Expression actor. This loop is then iterated a number of times by the CT Director, numerically integrating the differential equation. 
</p>


<p>The Integrator has one parameter: the initialState, which specifies the initial state of the integrator. Changes to the initialState parameter are ignored after workflow execution starts, unless the initialize() method is called again. The default value of the parameter is 0.0. </p>
; Results (plotted with R)
[[image:kepler-screenshot-2.png|frame|none|Kepler 1.0 screen capture - Lotka-Voltera perdator prey model]]


; XML model file
: (just the start, the file is much bigger)
<source lang="xml">
<?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="02-LotkaVolterraPredatorPrey" class="ptolemy.actor.TypedCompositeActor">
  <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.beta">
  </property>
  <property name="r" class="ptolemy.data.expr.Parameter" value="2">
  <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
  </property>
  <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
  </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="410.0, 50.0">
  </property>
  ........


</configure></property>
<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the "next step" for the integration.</configure></property>
<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that receives the derivative of the actor's output with respect to time.</configure></property>
<property name="prop:initialState" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The initial state of the integrator. The default value is 0.0.</configure></property>
</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:100:1">
        </property>
        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ct.lib.Integrator">
            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:974:1">
            </property>
        </property>
        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#CalculusMathOperationActor">
        </property>
        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#CalculusOperation">
        </property>
        <property name="_location" class="ptolemy.kernel.util.Location" value="[475.0, 330.0]">
        </property>
        <port name="input" class="ptolemy.actor.TypedIOPort">
            <property name="input"/>
            <property name="signalType" class="ptolemy.data.expr.Parameter" value="&quot;CONTINUOUS&quot;">
            </property>
        </port>
        <port name="output" class="ptolemy.actor.TypedIOPort">
            <property name="output"/>
            <property name="signalType" class="ptolemy.data.expr.Parameter" value="&quot;CONTINUOUS&quot;">
            </property>
        </port>
    </entity>
    <relation name="relation3" class="ptolemy.actor.TypedIORelation">
        <vertex name="vertex1" value="202.16796875, 202.46875">
        </vertex>
    </relation>
    <relation name="relation4" class="ptolemy.actor.TypedIORelation">
        <vertex name="vertex1" value="[165.0, 405.0]">
        </vertex>
    </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>
    <link port="Timed Plotter.input" relation="relation4"/>
    <link port="Timed Plotter.input" relation="relation3"/>
    <link port="XY Plotter.inputX" relation="relation3"/>
    <link port="XY Plotter.inputY" relation="relation4"/>
    <link port="dn1/dt.output" relation="relation2"/>
    <link port="dn1/dt.n2" relation="relation4"/>
    <link port="dn1/dt.n1" relation="relation3"/>
    <link port="dn2/dt.output" relation="relation5"/>
    <link port="dn2/dt.n1" relation="relation3"/>
    <link port="dn2/dt.n2" relation="relation4"/>
    <link port="Integraten1.input" relation="relation2"/>
    <link port="Integraten1.output" relation="relation3"/>
    <link port="Integrator.input" relation="relation5"/>
    <link port="Integrator.output" relation="relation4"/>
</entity>
</source>
</source>


Line 590: Line 199:
* [http://kepler-project.org/ Kepler project] (home page)
* [http://kepler-project.org/ Kepler project] (home page)
** [https://kepler-project.org/users/documentation Documentation]
** [https://kepler-project.org/users/documentation Documentation]
** [http://mercury.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users Kepler-users mailing list]


* [http://en.wikipedia.org/wiki/Kepler_scientific_workflow_system Kepler scientific workflow system] (Wikipedia)
* [http://en.wikipedia.org/wiki/Kepler_scientific_workflow_system Kepler scientific workflow system] (Wikipedia)


=== Bibliography ===
=== Bibliography ===
* Altintas, I, C. Berkley, E. Jaeger, M. Jones, B. Ludäscher, S. Mock, Kepler: An Extensible System for Design and Execution of Scientific Workflows, system demonstration, 16th Intl. Conf. on Scientific and Statistical Database Management (SSDBM'04), 21-23 June 2004, Santorini Island, Greece.


* Ludäscher B., Altintas I., Berkley C., Higgins D., Jaeger-Frank E., Jones M., Lee E., Tao J., Zhao Y. 2006. Scientific Workflow Management and the Kepler System. Special Issue: Workflow in Grid Systems. Concurrency and Computation: Practice & Experience 18(10): 1039-1065.
* Ludäscher B., Altintas I., Berkley C., Higgins D., Jaeger-Frank E., Jones M., Lee E., Tao J., Zhao Y. 2006. Scientific Workflow Management and the Kepler System. Special Issue: Workflow in Grid Systems. Concurrency and Computation: Practice & Experience 18(10): 1039-1065.


* Kepler User Manual (version 2). [https://code.kepler-project.org/code/kepler-docs/trunk/outreach/documentation/shipping/2.0/UserManual.pdf PDF]
* Getting Started with Kepler (version 2) [https://code.kepler-project.org/code/kepler-docs/trunk/outreach/documentation/shipping/2.0/getting-started-guide.pdf PDF]


[[Category: e-science]]
[[Category: e-science]]
[[Category: workflow]]
[[Category: workflow]]

Latest revision as of 11:01, 4 December 2010

Draft

Introduction

Kepler is an e-science tool designed to help scien­tists, analysts, and computer programmers create, execute, and share models and analyses across a broad range of scientific and engineering disciplines. Users can build workflows via Kepler's intuitive graphical interface. Components are dragged and dropped onto a Workflow canvas, where they can be connected, customized, and then executed.

“Kepler can operate on data stored in a variety of formats, locally and over the internet, and is an effective environment for integrating disparate software components, such as merging "R" scripts with compiled "C" code, or facilitating remote, distributed execution of models. Using Kepler's graphical user interface, users simply select and then connect pertinent analytical components and data sources to create a "scientific workflow"—an executable representation of the steps required to generate results. The Kepler software helps users share and reuse data, workflows, and compo­nents developed by the scientific community to address common needs.” (The Kepler Project, retrieved 15:25, 16 June 2010 (UTC).

See also:

The Kepler application

“Kepler is a software application for the analysis and modeling of scientific data. Kepler simplifies the effort required to create executable models by using a visual representation of these processes. These representations, or “scientific workflows,” display the flow of data among discrete analysis and modeling components [...] Kepler allows scientists to create their own executable scientific workflows by simply dragging and dropping components onto a workflow creation area and connecting the components to construct a specific data flow, creating a visual model of the analytical portion of their research. Kepler represents the overall workflow visually so that it is easy to understand how data flow from one component to another. The resulting workflow can be saved in a text format, emailed to colleagues, and/or published for sharing with colleagues worldwide”(Getting Started with Kepler, retrieved 15:22, 29 June 2010 (UTC).)

The "Getting started guide" definessScientific workflows as flexible tools for accessing scientific data (streaming sensor data, medical and satellite images, simulation output, observational data, etc.) and executing complex analysis on the retrieved data. In Kepler, {{Each workflow consists of analytical steps that may involve database access and querying, data analysis and mining, and intensive computations performed on high performance cluster computers. Each workflow step is represented by an "actor", a processing component that can be dragged and dropped into a workflow via Kepler's visual interface. Connected actors [and some other components] form a workflow, allowing scientists to inspect and display data on the fly as it is computed, make parameter changes as necessary, and re-run and reproduce experimental results.

Workflows may represent theoretical models or observational analyses; they can be simple and linear, or complex and non-linear. One of the benefits of scientific workflows is that they can be nested, meaning that a workflow can contain âsub-workflowsâ that perform embedded tasks. A nested workflow (also known as a composite actor) is a reusable component that performs a potentially complex task.}}. (Getting Started with Kepler, retrieved 15:22, 29 June 2010 (UTC).)

Major components:

  • Actors define some processing
  • A director controls the execution of a workflow, i.e. will define when and actor will execute. There exist several types of directors, e.g. the SDF director allows to specify sequential workflows, whereas the PN Director allows to define parallel workflows.
  • Composite actors are collections or sets of bundled actors, i.e. they represent a sub-workflow.
  • Ports define input/output ports for actors, i.e. data that actors will receive and produce. Actors are connected in a workflow via their ports. There are three types: input ports, output ports and combined input/output ports.
  • The link that represents data flow between one actor port and another actor port is called a channel.
  • Relations allow branching, i.e. data can be sent to multiple actors in a workflow.
  • Parameters are configurable values that can be attached to a workflow or to individual directors or actors

Ptolemy and the MoML language

“Kepler builds upon the mature Ptolemy II framework, developed at the University of California, Berkeley. Ptolemy II is a software framework developed as part of the Ptolemy project, which studies modeling, simulation, and design of concurrent, real-time, embedded systems.” (Kepler User Manual Kepler workflows can be exchanged in XML using Ptolemy's Modeling Markup Language (MoML). Here is the DTD for MoML 1 which can be found at ptolemy.

<!-- MoML DTD Version 1.4, UC Berkeley -->
<!-- $Id: MoML_1.dtd,v 1.18 2010/04/02 00:59:29 cxh Exp $ -->
<!-- If you update this file, please also update:  -->
<!--    ptweb/xml/dtd/MoML_1.dtd, -->
<!--    ptII/doc/design/src/MoML.fm, -->
<!--    the static field MoML_DTD_1 in MoMLParser.java. -->
<!-- The top-level element can be either model or class. -->
<!-- NOTE: To ensure backward compatibility with other version 1.x DTDs, -->
<!-- there are quite a few deprecated entries here. The documentation    -->
<!-- does not mention these deprecated entries. -->

<!-- The model element is deprecated.  Use entity instead. -->
<!ELEMENT model (class | configure | deleteEntity | deletePort |
		deleteRelation | director | display | doc | entity | group | import |
                input | link | property | relation | rename | rendition |
		unlink)*>
<!ATTLIST model name CDATA #REQUIRED
                class CDATA #IMPLIED>

<!ELEMENT class (class | configure | deleteEntity | deletePort |
		 deleteRelation | director | display | doc |
                 entity | group | import | input | link | port |
                 property | relation | rename | rendition | unlink)*>
<!ATTLIST class name CDATA #REQUIRED
                extends CDATA #IMPLIED
		source CDATA #IMPLIED>

<!ELEMENT configure (#PCDATA)>
<!ATTLIST configure source CDATA #IMPLIED>

<!ELEMENT deleteEntity EMPTY>
<!ATTLIST deleteEntity name CDATA #REQUIRED>

<!ELEMENT deletePort EMPTY>
<!ATTLIST deletePort name CDATA #REQUIRED>

<!ELEMENT deleteProperty EMPTY>
<!ATTLIST deleteProperty name CDATA #REQUIRED>

<!ELEMENT deleteRelation EMPTY>
<!ATTLIST deleteRelation name CDATA #REQUIRED>

<!-- NOTE: deprecated.  Use property instead. -->
<!ELEMENT director (configure | doc | property)*>
<!ATTLIST director name CDATA "director"
                   class CDATA #REQUIRED>

<!ELEMENT display EMPTY>
<!ATTLIST display name CDATA #REQUIRED>

<!ELEMENT doc (#PCDATA)>
<!ATTLIST doc name CDATA #IMPLIED>

<!ELEMENT entity (class | configure | deleteEntity | deletePort |
		  deleteRelation | director | display | doc |
                  entity | group | import | input | link | port |
                  property | relation | rename | rendition | unlink)*>
<!ATTLIST entity name CDATA #REQUIRED
                 class CDATA #IMPLIED
		 source CDATA #IMPLIED>

<!ELEMENT group ANY>
<!ATTLIST group name CDATA #IMPLIED>

<!-- The import element is deprecated.  Use the source attribute instead. -->
<!ELEMENT import EMPTY>
<!ATTLIST import source CDATA #REQUIRED
                 base CDATA #IMPLIED>

<!-- The base attribute is deprecated. -->
<!ELEMENT input EMPTY>
<!ATTLIST input source CDATA #REQUIRED
                base CDATA #IMPLIED>

<!ELEMENT link EMPTY>
<!ATTLIST link insertAt CDATA #IMPLIED
               insertInsideAt CDATA #IMPLIED
               port CDATA #IMPLIED
               relation CDATA #IMPLIED
               relation1 CDATA #IMPLIED
               relation2 CDATA #IMPLIED
               vertex CDATA #IMPLIED>

<!-- Deprecated.  Use a property instead. -->
<!ELEMENT location EMPTY>
<!ATTLIST location value CDATA #REQUIRED>

<!ELEMENT port (configure | display | doc | property | rename)*>
<!ATTLIST port class CDATA #IMPLIED
               name CDATA #REQUIRED>

<!ELEMENT property (configure | display | doc | property | rename)*>
<!ATTLIST property class CDATA #IMPLIED
                    name CDATA #REQUIRED
                    value CDATA #IMPLIED>

<!ELEMENT relation (configure | display | doc | property | rename | vertex)*>
<!ATTLIST relation name CDATA #REQUIRED
                   class CDATA #IMPLIED>

<!ELEMENT rename EMPTY>
<!ATTLIST rename name CDATA #REQUIRED>

<!-- Deprecated.  Use a property instead. -->
<!ELEMENT rendition (configure | location | property)*>
<!ATTLIST rendition class CDATA #REQUIRED>

<!ELEMENT unlink EMPTY>
<!ATTLIST unlink index CDATA #IMPLIED
                 insideIndex CDATA #IMPLIED
                 port CDATA #REQUIRED
                 relation CDATA #IMPLIED>

<!ELEMENT vertex (configure | display | doc | location | property | rename)*>
<!ATTLIST vertex name CDATA #REQUIRED
                 pathTo CDATA #IMPLIED
                 value CDATA #IMPLIED>

Examples

View of the workbench
Kepler 1.0 screen capture - Lotka-Voltera perdator prey model
Annotated view of workbench panel
Kepler 1.0 screen capture - Lotka-Voltera perdator prey model
Results (plotted with R)
Kepler 1.0 screen capture - Lotka-Voltera perdator prey model
XML model file
(just the start, the file is much bigger)
<?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="02-LotkaVolterraPredatorPrey" class="ptolemy.actor.TypedCompositeActor">
  <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.beta">
  </property>
  <property name="r" class="ptolemy.data.expr.Parameter" value="2">
  <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
  </property>
  <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
  </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="410.0, 50.0">
  </property>
  ........

Links and bibliography

Bibliography

  • Altintas, I, C. Berkley, E. Jaeger, M. Jones, B. Ludäscher, S. Mock, Kepler: An Extensible System for Design and Execution of Scientific Workflows, system demonstration, 16th Intl. Conf. on Scientific and Statistical Database Management (SSDBM'04), 21-23 June 2004, Santorini Island, Greece.
  • Ludäscher B., Altintas I., Berkley C., Higgins D., Jaeger-Frank E., Jones M., Lee E., Tao J., Zhao Y. 2006. Scientific Workflow Management and the Kepler System. Special Issue: Workflow in Grid Systems. Concurrency and Computation: Practice & Experience 18(10): 1039-1065.
  • Kepler User Manual (version 2). PDF
  • Getting Started with Kepler (version 2) PDF