You can program tasks in Scala using the
ScalaTask. For instance the following workflow sums all the elements of an array using a
ScalaTask and displays the results. Similarly, you could use such a task to generate some model parameter values or perform some data analysis. To get more details on the hook part you can check the doc on hooks.
val array = Val[Array[Double]] val result = Val[Double] val sum = ScalaTask("val result = array.sum") set ( inputs += array, outputs += result, array := Array(8.0, 9.0, 10.0) ) (sum hook ToStringHook())
Multiple ScalaTasks can be joined to compose a workflow. Lets imagine that you want to perform an expensive computation on every element of an array. For the sake of simplicity, the "expensive computation" is here a multiplication by 2.
val element = Val[Double] val multiplied = Val[Double] val result = Val[Double] val expensive = ScalaTask("val multiplied = element * 2") set ( inputs += element, outputs += multiplied ) val exploration = ExplorationTask(element in List(8.0, 9.0, 10.0)) val sum = ScalaTask("val result = multiplied.sum") set ( inputs += multiplied.toArray, outputs += result ) exploration -< expensive >- (sum hook ToStringHook())
The execution of this workflow can be distributed using OpenMOLE's environments. Check the page dedicated to environments to learn more on this process.