Hi Jonathan,

Ptolemy has a Python actor that uses Jython

http://ptolemy.eecs.berkeley.edu/ptolemyII/ptIIfaq.htm#Scripting says:

*5.9 Is there a scripting interface to Ptolemy II ?*
    The PythonScript actor includes and interface to Jython
    <http://www.jython.org/#in_browser>, a Java implementation of
    Python. The PythonScript actor allows the user to define an actor
    on the fly by defining the |fire()| and other methods in Python.
    Using an interpreted language in this context instead of defining
    actors in Java means that we need not recompile and restart
    Ptolemy II to make a change to an actor. The tradeoff is that a
    PythonScript actor will run more slowly than a similar actor
    implemented in Java.
    For details, see
    
|http://ptolemy.eecs.berkeley.edu/ptolemyII/ptIIlatest/ptII/doc/codeDoc/ptolemy/actor/lib/python/PythonScript.html|


    The Ptolemy II test suite uses Jacl, a Java implementation of Tcl
    as a scripting language. With Jacl, we can build and run models
    using an interpreted scripting environment without compilation and
    avoiding the usual edit/compile/run loop.
    For details, see the Testing link in
    |http://ptolemy.eecs.berkeley.edu/ptolemyII/ptIIlatest/ptII/doc/coding/|
    
<http://ptolemy.eecs.berkeley.edu/ptolemyII/ptIIlatest/ptII/doc/coding/index.htm>



I'm not that up on how Jython accesses Java objects, but in theory one could write an actor that gets the container object, then finds a parameter and then calls setExpression o the parameter. This could happen at runtime. However, this is difficult to get right. The SetVariable actor does something similar and it is not an easy actor to write. A Jython-based actor that set parameter values in the container would need to be very similar to SetVariable. See http://ptolemy.eecs.berkeley.edu/ptolemyII/ptII8.0/ptII/doc/codeDoc/ptolemy/actor/lib/SetVariable.html

If you are trying to do a parameter sweep, then http://ptolemy.eecs.berkeley.edu/ptolemyII/ptIIfaq.htm#parameterSweeps says:

*4.11 How do a do a parameter sweep?*
    A Parameter Sweep is when a model is run a number of times with
    different parameters to perhaps find an optimal solution. For
    details, see
    http://chess.eecs.berkeley.edu/ptexternal/wiki/Main/ParameterSweeps 
<http://chess.eecs.berkeley.edu/ptexternal/wiki/Main/ParameterSweeps#in_browser>.

Another idea is to have Jython set the parameters and then run the model. We do similar things using Tcl in the test case. See ptolemy/moml/test/MoMLParser.tcl

This test from ptolemy/actor/lib/test/Test.xml loads a .xml file and runs it

test Test-3.0 {Test case where training and we get no data} {
    # Thomas Mandl pointed out this bug and supplied a fix
    set workspace [java::new ptolemy.kernel.util.Workspace "Test3_0"]
    set parser [java::new ptolemy.moml.MoMLParser $workspace]
    $parser reset
    $parser purgeAllModelRecords
    $parser setMoMLFilters [java::null]
    $parser addMoMLFilters \
[java::call ptolemy.moml.filter.BackwardCompatibility allFilters]

    $parser addMoMLFilter [java::new \
            ptolemy.moml.filter.RemoveGraphicalClasses]
    #set model3_0 \
# [java::cast ptolemy.actor.TypedCompositeActor [$parser parseFile BooleanSwitch\
_RegressionTest.xml]]
    set model3_0 \
[java::cast ptolemy.actor.TypedCompositeActor [$parser parseFile BooleanSwitch\
_RegressionTest_WrongTrainingValues.xml]]
set manager [java::new ptolemy.actor.Manager $workspace "test3_0Manager"]
    $model3_0 setManager $manager
    $manager execute

    # Get the corrrectValues parameter, which should be {}
    set test2 [$model3_0 getEntity Test2]
set correctValues [java::cast ptolemy.data.expr.Parameter [$test2 getAttribute corr\
ectValues]]

    list [$correctValues getExpression]

} {{{}}}

Later in that file we get the Test2 entity
   set test2 [$model3_0 getEntity Test2]
and the get the "correctValues" parameter
set correctValues [java::cast ptolemy.data.expr.Parameter [$test2 getAttribute correctValues]]
To get the value of the correctValues parameter, call "$correctValues getExpression".

To set the value
$correctValues setExpression "{1,2}"

It is probably possible to do something similar in Jython, where you instantiate the model by calling the parser set the variables and run it. You could use the Recorder actor to get the outputs of the model, or write the data using ExpressionWriter or LineWriter.

_Christopher

On 10/21/13 10:51 AM, Jonathan Boright wrote:
Hi All,

I'm wondering if there is a way to set workflow parameters using python code? I see the ParameterSet actor, but I'd like to set parameters dynamically using python instead of using a static text file...

Thanks for your help.

Jon


---------------------------------
Jonathan Boright
Research Scientist
ISciences, LLC
61 Main Street, Suite 200
Burlington, VT 05401



_______________________________________________
Kepler-users mailing list
Kepler-users@kepler-project.org
http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users


--
Christopher Brooks, PMP                       University of California
Academic Program Manager & Software Engineer  US Mail: 337 Cory Hall
CHESS/iCyPhy/Ptolemy/TerraSwarm               Berkeley, CA 94720-1774
c...@eecs.berkeley.edu, 707.332.0670           (Office: 545Q Cory)

_______________________________________________
Kepler-users mailing list
Kepler-users@kepler-project.org
http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users

Reply via email to