In Capsis, there are 2 user modes:
To use the script mode with a particular module, the module should implement particular classes. Then scripts can be written in Java or in Groovy.
We consider the module « maddmodule » with the prefix “Madd”.
We need to adapt 2 classes in the maddmodule/model/
directory.
The 'InitialParameters' object contains the module parameters (i.e. model configuration: names of the files to be loaded, values for the model parameters…) and is responsible for creating the initial scene in the project (returned by getInitScene ()
).
A constructor may be implemented to offer a convenient way to set the initial values.
An example of creation of a MaddInitialParamaters instance with a constructor taking an inventory fileName:
InitialParameters ip = new MaddInitialParameters (model, "/home/coligny/java/capsis4/data/MaddModel/CORRUAZ AVANT MARTELAGE94.inv");
The 'EvolutionParameters' object describes the parameters needed to run an evolution stage. Commonly, it is a target date (a year…) to be reached by the evolution stage. We usually add a constructor to set directly at construction time the needed limit parameter(s):
public MaddEvolutionParameters (int age) throws Exception { this.age = age; }
To use it:
EvolutionParameters ep = new MaddEvolutionParameters (50);
Script are commonly written in the myscripts
directory.
If you have questions about the script structure, see the Script structure considerations.
package maddmodule.myscripts; import maddmodule.model.MaddEvolutionParameters; import maddmodule.model.MaddInitialParameters; import capsis.app.C4Script; import capsis.kernel.Engine; import capsis.kernel.Step; /** A Capsis script, type 1 (preferred): * (a) extends nothing particular, * (b) with a main method (can be launched directly with java), * (c) uses an instance of C4Script. * * Two ways to launch it: * (1) sh capsis.sh -p script maddmodule.myscripts.SimpleScript * (2) java -cp class:ext/* maddmodule.myscripts.SimpleScript * * @author F. de Coligny - 16.9.2010 */ public class SimpleScript { public static void main(String[] args) throws Exception { C4Script s = new C4Script("maddmodule"); MaddInitialParameters i = new MaddInitialParameters (s.getDataDir() + "/maddmodel/A.inv"); // init s.init(i); // evolution Step result = s.evolve(new MaddEvolutionParameters (200)); // save Engine.getInstance ().processSaveAsProject (s.getProject(), s.getRootDir() + "/tmp/TEST.PRJ"); } }
Simple scripts can use the C4Script
class:
LubExportAdult
at the end of Script2).package luberon; import jeeb.lib.util.Log; import jeeb.lib.util.StatusDispatcher; import luberon.extension.ioformat.LubExportAdult; import luberon.model.LubModel; import luberon.script.LubEvolutionParameters; import luberon.script.LubInitParam; import capsis.extension.memorizer.FrequencyMemorizer; import capsis.kernel.Engine; import capsis.kernel.EvolutionParameters; import capsis.kernel.GScene; import capsis.kernel.GenericExtensionStarter; import capsis.kernel.InitialParameters; import capsis.kernel.Step; import capsis.script.C4Script; import capsis.extension.intervener.DHAThinnerStarter; import capsis.extension.intervener.DHAThinner; public class Script02 { public void run () throws Exception { StatusDispatcher.print ("Script02 - running..."); // 1. Load model C4Script sc = new C4Script("luberon"); LubModel model = (LubModel) sc.getModel(); // 2. InitialParameters creation Log.println("luberon" , "Start"); InitialParameters ip = new LubInitParam (model, 1, true, 50.0, LubInitParam.PollenDispersal.TWO_CELL_NEIGHBORHOOD, sc.getDataDir() + "luberon/ESEB2009/LuberonInventESEB_E1_R0.inv" ); // 3. Init project with a particular frequency memorizer FrequencyMemorizer m = new FrequencyMemorizer (); m.setFrequency(1); sc.init(ip, m); // 4. Evolution EvolutionParameters ep = new LubEvolutionParameters (1885, false); Step step = sc.evolve (ep); // 5. Intervention : cutting the G0 Intervener thinner = new DHAThinner(DHAThinner.AGE, 49, 500); step = sc.runIntervener(thinner, step); // 6. Evolution after intervention EvolutionParameters ep = new LubEvolutionParameters (1910, false); Step step = sc.evolve (step, ep); // 7. Export data StatusDispatcher.print ("Exporting Stand..."); GScene stand = step.getScene(); GenericExtensionStarter starter = new GenericExtensionStarter(); starter.setStand(stand); LubExportAdult adultExporter = new LubExportAdult(starter); adultExporter.save(sc.getRootDir() + "/tmp/G0.txt"); // 8. For example : save the whole project Engine.getInstance ().processSaveAsProject (sc.getProject(), sc.getRootDir() + "/tmp/script02.prj"); StatusDispatcher.print ("Script02 - done"); } public static void main (String [] args) { Script02 s = new Script02(); try { s.run(); } catch (Exception e) { e.printStackTrace(); } } }
Intervention are initialised and called with the following code:
Intervener thinner = new DHAThinner(DHAThinner.AGE, 50, 500); step = sc.runIntervener(thinner, step);
The method returns the resulting step. To do a new evolution, we need to specify the starting step :
// Evolution after intervention EvolutionParameters ep = new LubEvolutionParameters (1910, false); Step step = sc.evolve (step, ep);
For a script in maddmodule/myscripts/SimpleScript, we need to type in the Capsis directory:
Under Linux or MacOS:
sh capsis.sh -p script maddmodule.myscripts.SimpleScript
Under Windows:
capsis -p script maddmodule.myscripts.SimpleScript