Isis-fish-data-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- 322 discussions
Author: jcouteau
Date: 2009-04-21 12:27:21 +0000 (Tue, 21 Apr 2009)
New Revision: 117
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Fixed attributes bug in R
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 16:25:44 UTC (rev 116)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-21 12:27:21 UTC (rev 117)
@@ -209,9 +209,29 @@
nbExperiments = dataframe.length / factorNumber;
+ String isisFactorDistribution = "isis.factor.distribution<-data.frame(NomFacteur=c(%s),NomDistribution=c(%s),ParametreDistribution=c(%s))";
+
+ String distribution = "";
+ String parameters = "";
+
+ for (int i = 0; i < factorNumber; i++) {
+ Domain domain = factors.get(i).getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ }
+
+ distribution += "\"qunif\"";
+ parameters += "\"[" + ((ContinuousDomain) domain).getMinBound()
+ + ";" + ((ContinuousDomain) domain).getMaxBound()
+ + "]\"";
+ }
+
log.info("Message sent to R : "
- + "isis.factor.distribution<-c(0.0)");
- engine.voidEval("isis.factor.distribution<-c(0.0)");
+ + String.format(isisFactorDistribution, factorNames,
+ distribution, parameters));
+ engine.voidEval(String.format(isisFactorDistribution, factorNames,
+ distribution, parameters));
log.info("Message sent to R : " + "call<-a$call");
engine.voidEval("call<-a$call");
@@ -224,18 +244,18 @@
log
.info("Message sent to R : "
- + "attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+ + "attr(isis.MethodExp,\"nomModel\")<-\"isis-fish-externe-R\"");
engine
- .voidEval("attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+ .voidEval("attr(isis.MethodExp,\"nomModel\")<-\"isis-fish-externe-R\"");
log.info("Message sent to R : " + "isis.simule<-data.frame(a$X)");
engine.voidEval("isis.simule<-data.frame(a$X)");
log
.info("Message sent to R : "
- + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ + "attr(isis.simule,\"nomModel\")<-\"isis-fish-externe-R\"");
engine
- .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ .voidEval("attr(isis.simule,\"nomModel\")<-\"isis-fish-externe-R\"");
log.info("Message sent to R : "
+ "names(isis.simule)<-isis.factors[[1]]");
@@ -318,7 +338,7 @@
engine.voidEval("factornames<-dget(\".factornames\")");
log.info("Message sent to R : "
+ "factornames<-dget(\".factornames\")");
-
+
int scenariosNumber = ((Double) engine
.eval("length(a$X)/length(a$factors)")).intValue();
log.info("Message sent to R : " + "length(a$X)/length(a$factors)");
@@ -368,9 +388,15 @@
//adding attribute to isis.Simule
log
.info("Message sent to R : "
- + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ + "attr(isis.simule,\"nomModel\")<-\"isis-fish-externe-R\"");
engine
- .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ .voidEval("attr(isis.simule,\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ log
+ .info("Message sent to R : "
+ + "attr(isis.simule,\"call\")<-isis.MethodExp$call");
+ engine
+ .voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
for (int k = 0; k < sensitivityNumber; k++) {
@@ -386,11 +412,17 @@
log
.info("Message sent to R : "
+ "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
- + name + ")" + "\",a)");
+ + name + ")" + "\",\"analysis_result\"=a)");
engine
.voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
- + name + ")" + "\",a)");
+ + name + ")" + "\",\"analysis_result\"=a)");
+ //setting isis.methodAnalyse attributes
+ log
+ .info("attr(isis.methodAnalyse,\"nomModel\")<-\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attr(isis.methodAnalyse,\"nomModel\")<-\"isis-fish-externe-R\")");
+
// Get back the sensitivity results, mu, mu star and sigma.
engine.voidEval("mu<-apply(a$ee, 2, mean)");
log.info("Message sent to R : " + "mu<-apply(a$ee, 2, mean)");
1
0
Author: jcouteau
Date: 2009-04-20 16:25:44 +0000 (Mon, 20 Apr 2009)
New Revision: 116
Added:
trunk/sensitivity/SensitivityCalculatorRegularFractions.java
trunk/sensitivity/regularfractions.R
Log:
Regular Fractions method working, conform to the new CDC.
Added: trunk/sensitivity/SensitivityCalculatorRegularFractions.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRegularFractions.java (rev 0)
+++ trunk/sensitivity/SensitivityCalculatorRegularFractions.java 2009-04-20 16:25:44 UTC (rev 116)
@@ -0,0 +1,614 @@
+package sensitivity;
+
+import java.io.File;
+import java.util.List;
+
+import javax.swing.Box;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.j2r.REngine;
+import org.codelutin.j2r.RException;
+import org.codelutin.j2r.RProxy;
+import org.codelutin.math.matrix.MatrixFactory;
+import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.util.FileUtil;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Domain;
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
+import fr.ifremer.isisfish.util.Doc;
+
+public class SensitivityCalculatorRegularFractions extends
+ AbstractSensitivityCalculator {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ private static Log log = LogFactory
+ .getLog(SensitivityCalculatorRFrF2.class);
+
+ @Doc("the path of the directory where the R function is stored")
+ public String param_pathToFunction = "";
+
+ @Doc("unique prime number of levels of all input and unit factors")
+ public int param_p = 2;
+
+ @Doc("number of unit factors (so that there are N=p^r units)")
+ public int param_r = 2;
+
+ @Doc("resolution of the fraction")
+ public int param_resolution = 2;
+
+ @Doc("True to be able to modify the code sent to R")
+ public boolean param_modifR = false;
+
+ /**
+ * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
+ * continue.
+ *
+ * @return <tt>true</tt> s'il sait la gerer
+ */
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) {
+
+ setIsisFactorsR(plan, outputdirectory);
+
+ double[] dataframeplan = new double[0];
+ int nbExperiments = 0;
+ int factorNumber = plan.getFactors().size();
+ List<Factor> factors = plan.getFactors();
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+
+ String factorNames = "";
+
+ //Test all factors, if one is discrete, return null
+ //Create a string with all factors names
+ for (int i = 0; i < factorNumber; i++) {
+ Domain domain = factors.get(i).getDomain();
+ if (i != 0) {
+ factorNames += ",";
+ }
+
+ factorNames += "\"" + factors.get(i).getName() + "\"";
+
+ if (domain instanceof DiscreteDomain) {
+ JOptionPane
+ .showMessageDialog(
+ null,
+ "Error",
+ factors.get(i).getName()
+ + " has a discrete domain, this is not acceptable for this method.",
+ JOptionPane.ERROR_MESSAGE);
+ return null;
+ }
+ }
+
+ REngine engine = new RProxy();
+
+ try {
+
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
+ //Set the working directory (to import the R function)
+ engine.voidEval("setwd(\"" + param_pathToFunction + "\")");
+ log.info("Message sent to R : " + "setwd(\"" + param_pathToFunction
+ + "\")");
+
+ //Import the function
+ log.info("source(\"regularfractions.R\")");
+ engine.voidEval("source(\"regularfractions.R\")");
+
+ //Create the instruction
+ String rInstruction = "x<-regular.fraction(%s,%s,%s,%s)";
+ String rCall = String.format(rInstruction, factors.size(), param_p,
+ param_r, param_resolution);
+
+ if (param_modifR) {
+ JLabel label = new JLabel(
+ "Modifier le code R envoyé si vous le souhaitez");
+ JTextPane text = new JTextPane();
+ text.setText(rCall);
+ text.setSize(400, 400);
+ text.setPreferredSize(text.getSize());
+
+ Box box = Box.createVerticalBox();
+ box.add(label);
+ box.add(new JScrollPane(text));
+
+ JOptionPane.showMessageDialog(null, box, "R modif",
+ JOptionPane.QUESTION_MESSAGE);
+ rCall = text.getText();
+ }
+
+ // Run function
+ engine.voidEval(rCall);
+ log.info("Message sent to R : " + rCall);
+
+ // Run function
+ engine.voidEval("call<-\"" + rCall + "\"");
+ log.info("Message sent to R : " + "call<-\"" + rCall + "\"");
+
+ // Creating the factors vector.
+ rInstruction = "factornames<-c(%s)";
+ rCall = String.format(rInstruction, factorNames);
+
+ engine.voidEval(rCall);
+ log.info("Message sent to R : " + rCall);
+
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+ log.info("Message sent to R : " + "setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
+
+ // Export the morris object for the second run in a .morris file
+ engine.voidEval("dput(x,file=\".regularfractions\")");
+ log.info("Message sent to R : "
+ + "dput(x,file=\".regularfractions\")");
+
+ // Export the factornames object for the second run in a .factornames file
+ engine.voidEval("dput(factornames,file=\".factornames\")");
+ log.info("Message sent to R : "
+ + "dput(factornames,file=\".factornames\")");
+
+ // Get back experiment plan
+ dataframeplan = (double[]) engine.eval("x$plan");
+ log.info("Message sent to R : " + "x$plan");
+
+ //Get back the simulation number
+ log.info("length(x[,1])");
+ int simulationNumber = (Integer) engine.eval("length(x$plan[,1])");
+
+ // Transform the result from R in a matrix
+ MatrixND morris = MatrixFactory.getInstance().create(dataframeplan,
+ new int[] { factors.size(), simulationNumber });
+
+ // Setting up the scenarios.
+ for (int j = 0; j < simulationNumber; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factors.size(); i++) {
+ Factor factor = plan.getFactors().get(i);
+ if ((factor.getDomain() instanceof MatrixContinuousDomain)
+ || (factor.getDomain() instanceof EquationContinuousDomain)) {
+ factor.setValueForIdentifier(morris.getValue(new int[] {
+ i, j }));
+ } else {
+ Double value = (Double) ((ContinuousDomain) factor
+ .getDomain()).getMinBound()
+ + ((Double) ((ContinuousDomain) factor
+ .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor
+ .getDomain()).getMinBound())
+ * (morris.getValue(new int[] { i, j }) / (param_p - 1));
+ factor.setValueForIdentifier(value);
+ }
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+ String dataframe = "data<-data.frame(";
+
+ //Create the factors vectors and the dataframe instruction
+ for (int j = 0; j < factorNumber; j++) {
+ Factor factor = thisExperimentScenarios.get(0).getFactors()
+ .get(j);
+ if (factor.getDomain() instanceof EquationContinuousDomain) {
+
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
+ for (int i = 0; i < simulationNumber; i++) {
+ if (i < (simulationNumber - 1)) {
+ vector = vector
+ + ((EquationContinuousDomain) thisExperimentScenarios
+ .get(i).getFactors().get(j)
+ .getDomain()).getValue() + ",";
+ } else {
+ vector = vector
+ + ((EquationContinuousDomain) thisExperimentScenarios
+ .get(i).getFactors().get(j)
+ .getDomain()).getValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+ log.info("Message sent to R : " + vector);
+ } else if (factor.getDomain() instanceof MatrixContinuousDomain) {
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
+ for (int i = 0; i < simulationNumber; i++) {
+ if (i < (simulationNumber - 1)) {
+ vector = vector
+ + ((MatrixContinuousDomain) thisExperimentScenarios
+ .get(i).getFactors().get(j)
+ .getDomain()).getValue() + ",";
+ } else {
+ vector = vector
+ + ((MatrixContinuousDomain) thisExperimentScenarios
+ .get(i).getFactors().get(j)
+ .getDomain()).getValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+ log.info("Message sent to R : " + vector);
+ } else {
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
+ for (int i = 0; i < simulationNumber; i++) {
+ if (i < (simulationNumber - 1)) {
+ vector = vector
+ + thisExperimentScenarios.get(i)
+ .getFactors().get(j).getValue()
+ + ",";
+ } else {
+ vector = vector
+ + thisExperimentScenarios.get(i)
+ .getFactors().get(j).getValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+ log.info("Message sent to R : " + vector);
+ }
+
+ if (j < factorNumber - 1) {
+ dataframe = dataframe
+ + factor.getName().replaceAll(" ", "") + "=factor("
+ + factor.getName().replaceAll(" ", "") + "),";
+ } else {
+ dataframe += factor.getName().replaceAll(" ", "")
+ + "=factor(" + factor.getName().replaceAll(" ", "")
+ + "))";
+ }
+
+ }
+ engine.voidEval(dataframe);
+ log.info("Message sent to R : " + dataframe);
+
+ log.info("Message sent to R : "
+ + "isis.factor.distribution<-c(0.0)");
+ engine.voidEval("isis.factor.distribution<-c(0.0)");
+
+ log
+ .info("Message sent to R : "
+ + "isis.MethodExp<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"call\"=call)");
+ engine
+ .voidEval("isis.MethodExp<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"call\"=call)");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ //Create isis.Simule
+ log.info("Message sent to R : " + "isis.simule<-data.frame(data)");
+ engine.voidEval("isis.simule<-data.frame(data)");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ log.info("Message sent to R : "
+ + "names(isis.simule)<-isis.factors[[1]]");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Export the data.frame object for the second run in a .expandgrid file
+ engine.voidEval("write.csv(data,file=\".data.csv\")");
+ log
+ .info("Message sent to R : write.csv(data,file=\".data.csv\")");
+
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
+ engine.terminate();
+
+ } catch (RException eee) {
+ eee.printStackTrace();
+ throw new RuntimeException("R evaluation failed", eee);
+ }
+
+ return thisExperiment;
+
+ }
+
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputdirectory) throws SensitivityException {
+
+ REngine engine = new RProxy();
+ try {
+
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+ log.info("Message sent to R : setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
+
+ // Get the regularfractions object from the .regularfractions file
+ engine.voidEval("x<-dget(\".regularfractions\")");
+ log.info("Message sent to R : " + "x<-dget(\".regularfractions\")");
+
+ // Get the factornames object from the .factornames file
+ engine.voidEval("factornames<-dget(\".factornames\")");
+ log.info("Message sent to R : "
+ + "factornames<-dget(\".factornames\")");
+
+ //Get back the scenarios
+ engine.voidEval("factors<-read.csv(\".data.csv\")");
+ log
+ .info("Message sent to R : factors<-read.csv(\".data.csv\")");
+
+ //Get back the factors number
+ int factorNumber = ((Double) engine.eval("length(factors)-1"))
+ .intValue();
+
+ int sensitivityNumber = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().size();
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+
+ //Create the results vectors
+ String result = name + "<-c(";
+ for (int l = 0; l < simulationStorages.size(); l++) {
+ File importFile = new File(simulationStorages.get(l)
+ .getDirectory().toString()
+ + File.separator
+ + SimulationStorage.RESULT_EXPORT_DIRECTORY,
+ simulationStorages.get(l).getParameter()
+ .getSensitivityExport().get(k)
+ .getExportFilename()
+ + simulationStorages.get(l).getParameter()
+ .getSensitivityExport().get(k)
+ .getExtensionFilename());
+ String simulResult = FileUtil.readAsString(importFile);
+ double simulationResult = Double.valueOf(simulResult);
+ if (l < simulationStorages.size() - 1) {
+ result = result + simulationResult + ",";
+ } else {
+ result = result + simulationResult;
+ }
+ }
+ result = result + ")";
+ engine.voidEval(result);
+ log.info("Message sent to R : " + result);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," + name
+ + ")");
+ log.info("Message sent to R : "
+ + "isis.simule<-data.frame(isis.simule," + name + ")");
+ }
+
+ //adding attribute to isis.Simule
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+
+ //Create the dataforaov data.frame
+ String dataframe = "dataforaov<-data.frame(factors," + name
+ + "=" + name + ")";
+ engine.voidEval(dataframe);
+ log.info("Message sent to R : " + dataframe);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~";
+ for (int j = 0; j < factorNumber; j++) {
+ log.info("Message sent to R : " + "names(factors)["
+ + (j + 2) + "]");
+
+ if (j < (factorNumber - 1)) {
+ aovCall = aovCall
+ + engine
+ .eval("names(factors)[" + (j + 2) + "]")
+ + "+";
+ } else {
+ aovCall = aovCall
+ + engine
+ .eval("names(factors)[" + (j + 2) + "]")
+ + ",data=dataforaov)";
+ }
+ }
+ engine.voidEval(aovCall);
+ log.info("Message sent to R : " + aovCall);
+
+ /*Export the results
+ *Export format is csv, data separated by ','
+ *Results Export name is sensitivityExportName_Results.csv
+ *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv
+ */
+
+ //Compute Sum of Squares and Sensitivity indices
+ engine.voidEval("SoS<-summary(aovresult)[[1]][1:"
+ + factorNumber + ",2]");
+ log.info("Message sent to R : SoS<-summary(aovresult)[[1]][1:"
+ + factorNumber + ",2]");
+ engine
+ .voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:"
+ + factorNumber + "]");
+ log
+ .info("Message sent to R : names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:"
+ + factorNumber + "]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+ log.info("Message sent to R : IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity=data.frame(SoS[1:"
+ + factorNumber + "],IndSensibilite[1:" + factorNumber
+ + "])");
+ log
+ .info("Message sent to R : exportsensitivity=data.frame(SoS[1:"
+ + factorNumber
+ + "],IndSensibilite[1:"
+ + factorNumber + "])");
+ engine
+ .voidEval("names(exportsensitivity)<-c(\"Sum Of Squares\",\"Sensitivity indices\")");
+ log
+ .info("Message sent to R : names(exportsensitivity)<-c(\"Sum Of Squares\",\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-factornames");
+ log.info("Message sent to R : "
+ + "row.names(exportsensitivity)<-factornames");
+
+ //Set dataforaov names
+ engine
+ .voidEval("resultsnames<-c(\"Simulation\",factornames,\"Result\")");
+ log
+ .info("Message sent to R : "
+ + "resultsnames<-c(\"Simulation\",factornames,\"Result\")");
+ engine.voidEval("names(dataforaov)<-resultsnames");
+ log.info("Message sent to R : "
+ + "names(dataforaov)<-resultsnames");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+ log.info("Message sent to R : setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k)
+ .getExportFilename() + "_Results.csv\")");
+ log.info("Message sent to R : write.csv(dataforaov,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k)
+ .getExportFilename() + "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k)
+ .getExportFilename()
+ + "_SensitivityIndices.csv\")");
+ log.info("Message sent to R : write.csv(exportsensitivity,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k)
+ .getExportFilename()
+ + "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ log
+ .info("Message sent to R : "
+ + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\""
+ + aovCall + "\"" + ",aovresult)");
+ engine
+ .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\""
+ + aovCall + "\"" + ",aovresult)");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodAnalyse, simulationName
+ + "." + name));
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+
+ String renameIsisSimule = "%s.isis.simule<-isis.simule";
+ String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution";
+ String renameIsisFactor = "%s.isis.factor<-isis.factors";
+ String renameIsisMethodExp = "%s.isis.methodExp<-isis.MethodExp";
+
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisSimule, simulationName));
+ engine.voidEval(String.format(renameIsisSimule, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactorDistribution,
+ simulationName));
+ engine.voidEval(String.format(renameIsisFactorDistribution,
+ simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactor, simulationName));
+ engine.voidEval(String.format(renameIsisFactor, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodExp, simulationName));
+ engine.voidEval(String.format(renameIsisMethodExp, simulationName));
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
+ engine.terminate();
+
+ } catch (Exception eee) {
+ eee.printStackTrace();
+ throw new RuntimeException("R evaluation failed", eee);
+ }
+
+ }
+
+ public String getDescription() {
+ return "Implementation of Regular fractions method using R";
+ }
+
+}
Added: trunk/sensitivity/regularfractions.R
===================================================================
--- trunk/sensitivity/regularfractions.R (rev 0)
+++ trunk/sensitivity/regularfractions.R 2009-04-20 16:25:44 UTC (rev 116)
@@ -0,0 +1,211 @@
+#================================================================================
+# FONCTIONS DE CALCUL D'UNE FRACTION REGULIERE DE RESOLUTION DONNEE
+# Auteur: H. Monod, INRA Jouy en Josas
+# Copyright INRA 2009
+# Ce programme est une version preliminaire et simplifiee d'une librairie R
+# en preparation par A. Kobilinsky, H. Monod, A. Bouvier
+#================================================================================
+regular.fraction <- function(s,p,r,resolution){
+ # DESCRIPTION
+ # generates a regular fractional factorial design of given resolution,
+ # for s factors at p levels in p^r units
+ # ARGUMENTS
+ # s : number of input factors
+ # p : unique prime number of levels of all input and unit factors
+ # r : number of unit factors (so that there are N=p^r units)
+ # resolution : resolution of the fraction
+ # max.sol : maximum number of solutions
+ # DETAILS
+ # This is a simplified version of a more general library in preparation.
+ # In this version, all factors must have the same prime number of levels
+ # and only fractions with a given resolution can be constructed. The first
+ # q factors are used as basic factors. The first solution is kept although
+ # it may not be the most interesting one (no control of aberration). This
+ # function is programmed entirely in R and so it is not efficient with respect
+ # to computer time. There is no explicit check on the arguments and so it
+ # is up to the user to restrict p to a prime number such as 2, 3, 5 or 7.
+ # OUTPUT:
+ # a list with two components: plan (the design in base p) and matrice.cle
+ # (the design key). The design has N=p^r rows (units) and s columns (factors).
+ # All its elements are integers modulo p that represent the factor levels.
+
+ # ensemble ineligible
+ cat("Determination des termes ineligibles: ")
+ ineligible <- diag(s)
+ for(reso in 2:(resolution-1)){
+ combis <- combn(s,reso)
+ ncombi <- ncol(combis)
+ select <- cbind( c(combis), rep(seq(ncombi),rep(reso,ncombi)) )
+ ineli <- matrix(0,s,ncombi)
+ ineli[select] <- 1
+ ineligible <- cbind(ineligible,ineli)
+ }
+ cat(ncol(ineligible)," termes ineligibles.\n")
+ if( (p!=2) ){
+ ineligible <- representative.basep(ineligible,p)
+ }
+ # Identification of the last non-zero coefficients in each ineligible trt character
+ ineligible.lnz <- apply(ineligible, 2, function(x){max(seq(along=x)[x!=0])})
+ # initialisation of PhiStar by using the first q factors as basic factors
+ PhiStar <- diag(r)
+ #
+ f <- ncol(PhiStar)
+ if(s == f){
+ check <- !any(apply(((PhiStar %*% ineligible)%%p)==0, 2, all))
+ if(check) return(list(PhiStar))
+ }
+ # Calculation of the set of initially admissible elements of U*
+ admissible <- t(convertinto.basep(seq((p^r)-1),p))
+ nb.admissible <- ncol(admissible)
+ # Backtrack search - preliminaries
+ eeU <- list(length=s-f)
+ leeU <- rep(NA,s-f)
+ neeU <- rep(0,s-f)
+ # Backtrack search
+ cat("Recherche d'une solution (algorithme backtrack).\n")
+ jprev <- 0 ; j <- 1
+ solved <- FALSE
+ while((j > 0)&(!solved)){
+ PhiStar <- PhiStar[,seq(f+j-1), drop=FALSE]
+ if(jprev < j){
+ ineligible.j <- ineligible[ seq(f+j-1), ineligible.lnz==(f+j), drop=FALSE ]
+ admissible.keep <- planor.kernelcheck.basep(PhiStar, admissible, ineligible.j, p)
+ eeU[[j]] <- seq(nb.admissible)[admissible.keep]
+ leeU[j] <- length(eeU[[j]])
+ neeU[j] <- 0
+ }
+ if(neeU[j] < leeU[j]){
+ neeU[j] <- neeU[j]+1
+ newcolj <- (eeU[[j]])[neeU[j]]
+ PhiStar <- cbind(PhiStar,admissible[,newcolj])
+ if(j == (s-f)){
+ cat("Solution obtenue. ")
+ solved <- TRUE
+ jprev <- j ; j <- j
+ }
+ else{
+ jprev <- j ; j <- j+1
+ }
+ }
+ else{
+ jprev <- j ; j <- j-1
+ }
+ }
+ if(solved){
+ # Construction du plan
+ plan <- crossing(rep(p,r),start=0) %*% PhiStar %%p
+ # Sortie
+ out <- list(plan=plan, matrice.cle=PhiStar, p=p)
+ }
+ else{
+ cat("Pas de solution. ")
+ out <- NULL
+ }
+ cat("Recherche terminee.\n")
+ return(out)
+}
+#---------------------------------------------------------------------------
+planor.kernelcheck.basep <- function(PhiStar, admissible, IneligibleSet, p){
+ ImagesIS <- (- PhiStar %*% IneligibleSet)%%p
+ avoid <- convertfrom.basep( t(ImagesIS), p)
+ candidate <- convertfrom.basep( t(admissible), p)
+ test <- !(candidate %in% avoid)
+ return(test)
+}
+#---------------------------------------------------------------------------
+convertinto.basep <- function (x, p) {
+ # Conversion of an integer or integer vector x into base p
+ # The coefficients are ordered by increasing powers of p
+ if (!is.numeric(x))
+ stop("cannot decompose non-numeric arguments")
+ if (length(x) > 1) {
+ l <- matrix(0, length(x), length(Recall(max(x),p)))
+ for(i in seq(along = x)){
+ dec.i <- Recall(x[i],p)
+ l[i, seq(along=dec.i) ] <- dec.i
+ }
+ return(l)
+ }
+ if (x != round(x) || x < 0)
+ return(x)
+ val <- x%%p
+ while ( (x <- x%/%p) > 0 ) {
+ newval <- x%%p
+ val <- c(val,newval)
+ }
+ return(val)
+}
+#---------------------------------------------------------------------------
+convertfrom.basep <- function (x, p) {
+ # Conversion of integers x coded as vectors of coefficients in base p
+ # to classical integers in base 10
+
+ if (!is.numeric(x))
+ stop("cannot recompose non-numeric arguments")
+ if( (max(x)>p) || (min(x)<0) )
+ stop("x must be reduced modulo p")
+ if (is.matrix(x)) {
+ l <- rep(NA, nrow(x))
+ for(i in seq(along = l)){
+ l[i] <- Recall(x[i,],p)
+ }
+ return(l)
+ }
+ val <- sum( x * p^(seq(along=x)-1) )
+ return(val)
+}
+#---------------------------------------------------------------------------
+inverses.basep <- function(p){
+ # Raw calculation of the inverses modulo p
+
+ if(p==2) return(1)
+ else if(p==3) return(c(1,2))
+ products <- outer(seq(2,p-2), seq(2,p-2), "*")%%p
+ inverses <- 1 + apply(products, 1, function(x){ seq(along=x)[x==1] })
+ return( c(1,inverses,p-1) )
+}
+#---------------------------------------------------------------------------
+representative.basep <- function(mat,p){
+ # generates the minimal set of representatives in base p
+ # of the columns x of matrix mat
+
+ mat <- as.matrix(mat)
+ #
+ if(p==2) return(mat %%2)
+ #
+ representative <- NULL
+ for(j in seq(ncol(mat))){
+ x <- mat[,j]
+ select <- seq(x)[x != 0]
+ nbtocross <- length(select)-1
+ if( nbtocross <= 0 ) mat.j <- x
+ else{
+ select <- select[seq(nbtocross)]
+ N <- (p-1)^nbtocross
+ mat.j <- matrix(x, nrow(mat), N)
+ mat.j[select,] <- t( crossing(rep(p-1,nbtocross),start=1) )
+ }
+ representative <- cbind(representative, mat.j)
+ }
+ return(representative %%p)
+}
+#---------------------------------------------------------------------------
+crossing <- function(n,start=1){
+ # Generates all n1 x n2 x ... x ns combinations of size s with n1,...,ns integers
+
+ N <- prod(n)
+ s <- length(n)
+ n <- c(n,1)
+ crosses <- matrix(NA, N, s)
+ for(i in seq(s))
+ {
+ motif <- start + seq(n[s+1-i])-1
+ repet1 <- rep( prod(n[s+1-i+seq(i)]), n[s+1-i] )
+ if(i==s){ repet2 <- 1 }
+ else{ repet2 <- prod(n[seq(s-i)]) }
+ crosses[,s-i+1] <- rep( rep( motif, repet1 ), repet2 )
+ }
+ return(crosses)
+}
+#---------------------------------------------------------------------------
+
1
0
Author: jcouteau
Date: 2009-04-20 13:40:15 +0000 (Mon, 20 Apr 2009)
New Revision: 115
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Expand Grid conform to CDC, fixed bug on Morris (in R).
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-20 08:28:32 UTC (rev 114)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-20 13:40:15 UTC (rev 115)
@@ -28,10 +28,10 @@
import org.codelutin.util.FileUtil;
import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -68,24 +68,26 @@
public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
throws SensitivityException {
+ setIsisFactorsR(plan, outputdirectory);
+
int k = 1; //number of sensitivity scenarios (initialization)
int factorNumber = plan.getFactors().size(); //number of factors
List<Factor> factors = plan.getFactors(); //list of factors
for (int i = 0; i < factorNumber; i++) {
if (factors.get(i).getDomain() instanceof ContinuousDomain) {
- if (((ContinuousDomain) factors.get(i)
- .getDomain()).getCardinality() != 0) {
+ if (((ContinuousDomain) factors.get(i).getDomain())
+ .getCardinality() != 0) {
k = k
- * ((ContinuousDomain) factors
- .get(i).getDomain()).getCardinality();
+ * ((ContinuousDomain) factors.get(i).getDomain())
+ .getCardinality();
}
} else if (factors.get(i).getDomain() instanceof DiscreteDomain) {
- if (((DiscreteDomain) factors.get(i)
- .getDomain()).getValues().size() != 0) {
+ if (((DiscreteDomain) factors.get(i).getDomain()).getValues()
+ .size() != 0) {
k = k
- * ((DiscreteDomain) factors
- .get(i).getDomain()).getValues().size();
+ * ((DiscreteDomain) factors.get(i).getDomain())
+ .getValues().size();
}
}
}
@@ -104,8 +106,8 @@
.getMaxBound();
Double min = ((ContinuousDomain) factor.getDomain())
.getMinBound();
- int card = ((ContinuousDomain) factor
- .getDomain()).getCardinality();
+ int card = ((ContinuousDomain) factor.getDomain())
+ .getCardinality();
result = (int) Math.floor(rest / card);
rest = rest - (card * result);
@@ -118,8 +120,8 @@
}
}
if (factor.getDomain() instanceof DiscreteDomain) {
- int card = ((DiscreteDomain) factor
- .getDomain()).getValues().size();
+ int card = ((DiscreteDomain) factor.getDomain())
+ .getValues().size();
result = (int) Math.floor(rest / card);
rest = rest - (card * result);
factor.setValueForIdentifier(rest);
@@ -141,13 +143,26 @@
REngine engine = new RProxy();
try {
- //Create the factors vectors
+
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
+ String dataframe = "data<-data.frame(";
+
+ //Create the factors vectors and the dataframe instruction
for (int j = 0; j < factorNumber; j++) {
- Factor factor = thisExperimentScenarios
- .get(0).getFactors().get(j);
+ Factor factor = thisExperimentScenarios.get(0).getFactors()
+ .get(j);
if (factor.getDomain() instanceof EquationContinuousDomain) {
- String vector = "factor" + j + "<-c(";
+ //String vector = "factor" + j + "<-c(";
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
@@ -166,7 +181,9 @@
engine.voidEval(vector);
log.info("Message sent to R : " + vector);
} else if (factor.getDomain() instanceof MatrixContinuousDomain) {
- String vector = "factor" + j + "<-c(";
+ //String vector = "factor" + j + "<-c(";
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
@@ -185,7 +202,9 @@
engine.voidEval(vector);
log.info("Message sent to R : " + vector);
} else {
- String vector = "factor" + j + "<-c(";
+ //String vector = "factor" + j + "<-c(";
+ String vector = factor.getName().replaceAll(" ", "")
+ + "<-c(";
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
@@ -204,16 +223,13 @@
log.info("Message sent to R : " + vector);
}
- }
-
- //Create the data data.frame from the factors
- String dataframe = "data<-data.frame(";
- for (int j = 0; j < factorNumber; j++) {
if (j < factorNumber - 1) {
- dataframe = dataframe + "factor" + j + "=factor(factor" + j
- + "),";
+ dataframe = dataframe
+ + factor.getName().replaceAll(" ", "") + "=factor("
+ + factor.getName().replaceAll(" ", "") + "),";
} else {
- dataframe = dataframe + "factor" + j + "=factor(factor" + j
+ dataframe += factor.getName().replaceAll(" ", "")
+ + "=factor(" + factor.getName().replaceAll(" ", "")
+ "))";
}
@@ -254,6 +270,46 @@
log.info("Message sent to R : "
+ "dput(factornames,file=\".factornames\")");
+ //Create the isis.factor.distribution
+ log.info("Message sent to R : "
+ + "isis.factor.distribution<-c(0.0)");
+ engine.voidEval("isis.factor.distribution<-c(0.0)");
+
+ //Create isis.MethodExp
+ log
+ .info("Message sent to R : "
+ + "isis.MethodExp<-list(isis.factor,isis.factor.distribution,call_méthode=\"isis-fish-externeR\")");
+ engine
+ .voidEval("isis.MethodExp<-list(isis.factor,isis.factor.distribution,call_méthode=\"isis-fish-externeR\")");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ //Create isis.Simule
+ log.info("Message sent to R : " + "isis.simule<-data.frame(data)");
+ engine.voidEval("isis.simule<-data.frame(data)");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ log.info("Message sent to R : "
+ + "names(isis.simule)<-isis.factors[[1]]");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
engine.terminate();
} catch (Exception e) {
@@ -270,39 +326,44 @@
REngine engine = new RProxy();
try {
- /*int scenariosNumber = sensitivityScenarios.getScenarios().size();
- int factorNumber = sensitivityScenarios.getScenarios().get(0)
- .getFactors().size();*/
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+ log.info("Message sent to R : setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
+
+ //Get back the scenarios
+ engine.voidEval("factors<-read.csv(\".expandgrid.csv\")");
+ log
+ .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")");
+
+ // Get the factornames object in the .factornames file
+ engine.voidEval("factornames<-dget(\".factornames\")");
+ log.info("Message sent to R : "
+ + "factornames<-dget(\".factornames\")");
+
+ //Get back the factors number
+ int factorNumber = ((Double) engine.eval("length(factors)-1"))
+ .intValue();
+
int sensitivityNumber = simulationStorages.get(0).getParameter()
.getSensitivityExport().size();
for (int k = 0; k < sensitivityNumber; k++) {
- // Set output directory
- engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
- + "\")");
- log.info("Message sent to R : setwd(\""
- + outputdirectory.getAbsolutePath() + "\")");
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
- //Get back the scenarios
- //engine.voidEval("factors<-read.csv(\".expandgrid.csv\",row.names=1,col.names=1)");
- engine.voidEval("factors<-read.csv(\".expandgrid.csv\")");
- log
- .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")");
-
- // Get the factornames object in the .factornames file
- engine.voidEval("factornames<-dget(\".factornames\")");
- log.info("Message sent to R : "
- + "factornames<-dget(\".factornames\")");
-
- //Get back the factors number
- int factorNumber = ((Double) engine.eval("length(factors)-1"))
- .intValue();
- //factorNumber=factorNumber-1;
-
//Create the results vectors
- String result = "result<-c(";
+ String result = name + "<-c(";
for (int l = 0; l < simulationStorages.size(); l++) {
File importFile = new File(simulationStorages.get(l)
.getDirectory().toString()
@@ -326,18 +387,48 @@
engine.voidEval(result);
log.info("Message sent to R : " + result);
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," + name
+ + ")");
+ log.info("Message sent to R : "
+ + "isis.simule<-data.frame(isis.simule," + name + ")");
+ }
+
+ //adding attribute to isis.Simule
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+
//Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(factors,result=result)";
+ String dataframe = "dataforaov<-data.frame(factors," + name
+ + "=" + name + ")";
engine.voidEval(dataframe);
log.info("Message sent to R : " + dataframe);
//Call aov()
- String aovCall = "aovresult<-aov(result~";
+ String aovCall = "aovresult<-aov(" + name + "~";
for (int j = 0; j < factorNumber; j++) {
+ log.info("Message sent to R : " + "names(factors)["
+ + (j + 2) + "]");
+
if (j < (factorNumber - 1)) {
- aovCall = aovCall + "factor" + j + "+";
+ aovCall = aovCall
+ + engine
+ .eval("names(factors)[" + (j + 2) + "]")
+ + "+";
} else {
- aovCall = aovCall + "factor" + j + ",data=dataforaov)";
+ aovCall = aovCall
+ + engine
+ .eval("names(factors)[" + (j + 2) + "]")
+ + ",data=dataforaov)";
}
}
engine.voidEval(aovCall);
@@ -420,10 +511,65 @@
.getExportFilename()
+ "_SensitivityIndices.csv\")");
//FIXME export through java to enable export when using Rserve (when distant Rserve).
- engine.terminate();
+
+ //creating isis.methodAnalyse
+ log
+ .info("Message sent to R : "
+ + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\""
+ + aovCall + "\"" + ",aovresult)");
+ engine
+ .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\""
+ + aovCall + "\"" + ",aovresult)");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodAnalyse, simulationName
+ + "." + name));
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
}
- log.info("end");
+ //Rename R objects for saving purpose
+
+ String renameIsisSimule = "%s.isis.simule<-isis.simule";
+ String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution";
+ String renameIsisFactor = "%s.isis.factor<-isis.factors";
+ String renameIsisMethodExp = "%s.isis.methodExp<-isis.MethodExp";
+
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisSimule, simulationName));
+ engine.voidEval(String.format(renameIsisSimule, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactorDistribution,
+ simulationName));
+ engine.voidEval(String.format(renameIsisFactorDistribution,
+ simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactor, simulationName));
+ engine.voidEval(String.format(renameIsisFactor, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodExp, simulationName));
+ engine.voidEval(String.format(renameIsisMethodExp, simulationName));
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
+ engine.terminate();
+
} catch (Exception e) {
e.printStackTrace();
// Error while processing
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 08:28:32 UTC (rev 114)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 13:40:15 UTC (rev 115)
@@ -318,8 +318,7 @@
engine.voidEval("factornames<-dget(\".factornames\")");
log.info("Message sent to R : "
+ "factornames<-dget(\".factornames\")");
-
- /*int scenariosNumber = sensitivityScenarios.getScenarios().size();*/
+
int scenariosNumber = ((Double) engine
.eval("length(a$X)/length(a$factors)")).intValue();
log.info("Message sent to R : " + "length(a$X)/length(a$factors)");
@@ -359,10 +358,39 @@
// Send the simulation results
engine.voidEval(rInstruction);
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," + name
+ + ")");
+ log.info("Message sent to R : "
+ + "isis.simule<-data.frame(isis.simule," + name + ")");
+ }
+
+ //adding attribute to isis.Simule
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+
//Compute results
engine.voidEval("tell(a,y=" + name + ")");
log.info("Message sent to R : " + "tell(a,y=" + name + ")");
+ //creating isis.methodAnalyse
+ log
+ .info("Message sent to R : "
+ + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
+ + name + ")" + "\",a)");
+ engine
+ .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
+ + name + ")" + "\",a)");
+
// Get back the sensitivity results, mu, mu star and sigma.
engine.voidEval("mu<-apply(a$ee, 2, mean)");
log.info("Message sent to R : " + "mu<-apply(a$ee, 2, mean)");
@@ -429,35 +457,6 @@
.getExportFilename() + "_Results.csv\")");
//FIXME export through java to enable export when using Rserve
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," + name
- + ")");
- log.info("Message sent to R : "
- + "isis.simule<-data.frame(isis.simule," + name + ")");
- }
-
- //adding attribute to isis.Simule
- log
- .info("Message sent to R : "
- + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
- engine
- .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- // Creates the R expression to import results in R
- String name = simulationStorages.get(0).getParameter()
- .getSensitivityExport().get(k).getExportFilename();
-
- //creating isis.methodAnalyse
- log
- .info("Message sent to R : "
- + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
- + name + ")" + "\",a)");
- engine
- .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
- + name + ")" + "\",a)");
-
String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
String simulationName = simulationStorages.get(0).getName()
.replaceAll("-", "");
1
0
Author: jcouteau
Date: 2009-04-20 08:28:32 +0000 (Mon, 20 Apr 2009)
New Revision: 114
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Morris method managing more than one export (in R)
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-18 13:12:30 UTC (rev 113)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 08:28:32 UTC (rev 114)
@@ -58,6 +58,7 @@
* Last update : $Date$ By :
* $Author$
*/
+
@Doc("Morris method")
public class SensitivityCalculatorRMorris extends AbstractSensitivityCalculator {
@@ -217,9 +218,9 @@
log
.info("Message sent to R : "
- + "isis.MethodExp<-list(isis.factors,isis.factor.distribution,call)");
+ + "isis.MethodExp<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"call\"=call)");
engine
- .voidEval("isis.MethodExp<-list(isis.factors,isis.factor.distribution,call)");
+ .voidEval("isis.MethodExp<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"call\"=call)");
log
.info("Message sent to R : "
@@ -359,8 +360,8 @@
engine.voidEval(rInstruction);
//Compute results
- engine.voidEval("tell(a,y=name)");
- log.info("Message sent to R : " + "tell(a,y=name)");
+ engine.voidEval("tell(a,y=" + name + ")");
+ log.info("Message sent to R : " + "tell(a,y=" + name + ")");
// Get back the sensitivity results, mu, mu star and sigma.
engine.voidEval("mu<-apply(a$ee, 2, mean)");
@@ -433,7 +434,6 @@
+ ")");
log.info("Message sent to R : "
+ "isis.simule<-data.frame(isis.simule," + name + ")");
-
}
//adding attribute to isis.Simule
@@ -443,20 +443,38 @@
engine
.voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
- //creating isis.methodAnalyse
- log
- .info("Message sent to R : "
- + "isis.methodAnalyse<-list(isis.factor,isis.factor.distribution,isis.simule,call_method=\"tell(a,results)\",a)");
- engine
- .voidEval("isis.methodAnalyse<-list(isis.factor,isis.factor.distribution,isis.simule,call_method=\"tell(a,results)\",a)");
+ for (int k = 0; k < sensitivityNumber; k++) {
+ // Creates the R expression to import results in R
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+
+ //creating isis.methodAnalyse
+ log
+ .info("Message sent to R : "
+ + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
+ + name + ")" + "\",a)");
+ engine
+ .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y="
+ + name + ")" + "\",a)");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodAnalyse, simulationName
+ + "." + name));
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
//Rename R objects for saving purpose
String renameIsisSimule = "%s.isis.simule<-isis.simule";
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution";
- String renameIsisFactor = "%s.isis.factor<-isis.factor";
- String renameIsisMethodExp = "%s.isis.methodExp<-isis.methodExp";
+ String renameIsisFactor = "%s.isis.factor<-isis.factors";
+ String renameIsisMethodExp = "%s.isis.methodExp<-isis.MethodExp";
String simulationName = simulationStorages.get(0).getName()
.replaceAll("-", "");
@@ -466,11 +484,6 @@
engine.voidEval(String.format(renameIsisSimule, simulationName));
log.info("Message sent to R : "
- + String.format(renameIsisMethodAnalyse, simulationName));
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName));
-
- log.info("Message sent to R : "
+ String.format(renameIsisFactorDistribution,
simulationName));
engine.voidEval(String.format(renameIsisFactorDistribution,
1
0
Author: jcouteau
Date: 2009-04-18 13:12:30 +0000 (Sat, 18 Apr 2009)
New Revision: 113
Modified:
trunk/exports/SensitivityBiomassReferenceY9.java
trunk/exports/SensitivityBiomassRelativeReferenceY12.java
trunk/exports/SensitivityCapturesWeightReferenceY7.java
trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java
trunk/exports/SensitivityGenitorBiomassReferenceY8.java
trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java
Log:
Fixed resultStorage bug on exports
Modified: trunk/exports/SensitivityBiomassReferenceY9.java
===================================================================
--- trunk/exports/SensitivityBiomassReferenceY9.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityBiomassReferenceY9.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -7,6 +7,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -43,6 +44,8 @@
Double biomass = 0.0;
Double referenceBiomass = 0.0;
+ System.out.println("reference simul : " + param_referenceSimulation);
+
for (Population pop : simulation.getParameter().getPopulations()) {
if (pop.getName().equals(param_pop.getName())) {
@@ -50,14 +53,26 @@
MatrixND matlastdate = resultStorage.getMatrix(lastDate, pop,
ResultName.MATRIX_BIOMASS);
biomass = matlastdate.sumAll();
+ System.out.println("matlastdate:" + (Object) matlastdate);
- //Get the reference biomass of the last time step
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
+
MatrixND matreferencelastdate = referenceResultStorage
- .getMatrix(lastDate, pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(lastDate, ResultName.MATRIX_BIOMASS + " "
+ + pop, tx);
referenceBiomass = matreferencelastdate.sumAll();
+ tx.commitTransaction();
+ tx.closeContext();
}
}
+ System.out.println("simulationStorage:" + simulation);
+ System.out.println("referenece simulation:" + referenceSimulation);
+ System.out.println("resultStorage:" + resultStorage);
+ System.out.println("referenceStroagr:" + referenceResultStorage);
+ System.out.println("biomass:" + biomass);
+ System.out.println("referenceBiomass:" + referenceBiomass);
out.write(Double.toString(biomass / referenceBiomass));
Modified: trunk/exports/SensitivityBiomassRelativeReferenceY12.java
===================================================================
--- trunk/exports/SensitivityBiomassRelativeReferenceY12.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityBiomassRelativeReferenceY12.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -7,6 +7,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -30,7 +31,7 @@
public Population param_pop;
@Doc("Name of the reference simulation")
- public String param_referenceSimulation="";
+ public String param_referenceSimulation = "";
@Override
public void export(SimulationStorage simulation, Writer out)
@@ -61,14 +62,23 @@
biomass = matlastdate.sumAll();
//Get the biomass on december of the first year
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
MatrixND matfirstdatereference = referenceResultStorage
- .getMatrix(firstDate, pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(firstDate, ResultName.MATRIX_BIOMASS + " "
+ + pop, tx);
firstbiomassReference = matfirstdatereference.sumAll();
+ tx.commitTransaction();
+ tx.closeContext();
//Get the biomass of the last time step
+ tx = referenceSimulation.getStorage().beginTransaction();
MatrixND matlastdatereference = referenceResultStorage
- .getMatrix(lastDate, pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(lastDate, ResultName.MATRIX_BIOMASS + " "
+ + pop, tx);
biomassReference = matlastdatereference.sumAll();
+ tx.commitTransaction();
+ tx.closeContext();
}
}
Modified: trunk/exports/SensitivityCapturesWeightReferenceY7.java
===================================================================
--- trunk/exports/SensitivityCapturesWeightReferenceY7.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityCapturesWeightReferenceY7.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -7,6 +7,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -29,7 +30,7 @@
public Population param_pop;
@Doc("Name of the reference simulation")
- public String param_referenceSimulation="";
+ public String param_referenceSimulation = "";
@Override
public void export(SimulationStorage simulation, Writer out)
@@ -56,12 +57,16 @@
capturesWeight += matlastdate.sumAll();
//Get the reference captures Weight of each month of the last year
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
MatrixND matlastdatereference = referenceResultStorage
.getMatrix(
new Date(lastDate.getDate() - i),
- pop,
- ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP
+ + " " + pop, tx);
capturesWeightReference += matlastdatereference.sumAll();
+ tx.commitTransaction();
+ tx.closeContext();
}
Modified: trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java
===================================================================
--- trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -7,6 +7,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -67,21 +68,27 @@
capturesWeightfirst += matfirstdate.sumAll();
//Get the reference captures Weight of each month of the last year
+
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
+
MatrixND matlastdatereference = referenceResultStorage
.getMatrix(
new Date(lastDate.getDate() - i),
- pop,
- ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP
+ + " " + pop, tx);
capturesWeightreference += matlastdatereference.sumAll();
//Get the reference captures Weight of each month of the first year
MatrixND matfirstdatereference = referenceResultStorage
.getMatrix(
new Date(i),
- pop,
- ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP
+ + " " + pop, tx);
capturesWeightfirstreference += matfirstdatereference
.sumAll();
+ tx.commitTransaction();
+ tx.closeContext();
}
}
}
Modified: trunk/exports/SensitivityGenitorBiomassReferenceY8.java
===================================================================
--- trunk/exports/SensitivityGenitorBiomassReferenceY8.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityGenitorBiomassReferenceY8.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -8,6 +8,7 @@
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixIterator;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -62,8 +63,10 @@
}
//Get the reference biomass of the last time step
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
MatrixND matlastdatereference = referenceResultStorage
- .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(ResultName.MATRIX_BIOMASS + " " + pop, tx);
for (MatrixIterator i = matlastdatereference.iterator(); i
.hasNext();) {
i.next();
@@ -75,6 +78,8 @@
* group.getReproductionRate();
}
}
+ tx.commitTransaction();
+ tx.closeContext();
}
}
out.write(Double.toString(biomass / referenceBiomass));
Modified: trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java
===================================================================
--- trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java 2009-04-17 13:51:32 UTC (rev 112)
+++ trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java 2009-04-18 13:12:30 UTC (rev 113)
@@ -8,6 +8,7 @@
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.MatrixIterator;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.topia.TopiaContext;
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ResultStorage;
@@ -81,8 +82,10 @@
}
//Get the reference biomass of the first time step
+ TopiaContext tx = referenceSimulation.getStorage()
+ .beginTransaction();
MatrixND matfirstdatereference = referenceResultStorage
- .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(ResultName.MATRIX_BIOMASS + " " + pop, tx);
for (MatrixIterator i = matfirstdatereference.iterator(); i
.hasNext();) {
i.next();
@@ -97,7 +100,7 @@
//Get the reference biomass of the last time step
MatrixND matlastdatereference = referenceResultStorage
- .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ .getMatrix(ResultName.MATRIX_BIOMASS + " " + pop, tx);
for (MatrixIterator i = matlastdatereference.iterator(); i
.hasNext();) {
i.next();
@@ -109,6 +112,8 @@
* group.getReproductionRate();
}
}
+ tx.commitTransaction();
+ tx.closeContext();
}
}
out.write(Double.toString((biomass / firstbiomass)
1
0
Author: jcouteau
Date: 2009-04-17 13:51:32 +0000 (Fri, 17 Apr 2009)
New Revision: 112
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Adapt Morris method to the new R CDC
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-17 12:27:11 UTC (rev 111)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-17 13:51:32 UTC (rev 112)
@@ -19,7 +19,6 @@
package sensitivity;
import java.io.File;
-import java.io.Serializable;
import java.util.List;
import javax.swing.Box;
@@ -38,13 +37,11 @@
import org.codelutin.util.FileUtil;
import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
-
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
@@ -62,7 +59,7 @@
* $Author$
*/
@Doc("Morris method")
-public class SensitivityCalculatorRMorris extends AbstractSensitivityCalculator {
+public class SensitivityCalculatorRMorris extends AbstractSensitivityCalculator {
@Doc("Integer giving the number of repetitions of the design, i.e. the number of elementary effect computed per factor. (Default value : 4)")
public int param_r = 4;
@@ -85,9 +82,9 @@
}
public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) {
-
- setIsisFactorsR(plan,outputdirectory);
+ setIsisFactorsR(plan, outputdirectory);
+
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
@@ -129,17 +126,13 @@
factorNames += "\"" + factors.get(i).getName() + "\"";
- levels += ((ContinuousDomain) domain)
- .getCardinality();
+ levels += ((ContinuousDomain) domain).getCardinality();
- gridJump += (Integer) (((ContinuousDomain) domain)
- .getCardinality() / 2);
+ gridJump += (Integer) (((ContinuousDomain) domain).getCardinality() / 2);
- binf += ((ContinuousDomain) domain)
- .getMinBound();
+ binf += ((ContinuousDomain) domain).getMinBound();
- bsup += ((ContinuousDomain) domain)
- .getMaxBound();
+ bsup += ((ContinuousDomain) domain).getMaxBound();
}
String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s,design=list(type=\"oat\",levels=c(%s),grid.jump=c(%s)),binf=c(%s),bsup=c(%s))";
@@ -166,13 +159,21 @@
REngine engine = new RProxy();
try {
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
// Load sensitivity package into R (if package already loaded,
// nothing happens.
engine.voidEval("library(sensitivity)");
log.info("Message sent to R : " + "library(sensitivity)");
// Run sensitivity analysis
- engine.voidEval(rInstruction);
+ engine.voidEval(rCall);
log.info("Message sent to R : " + rCall);
// Creating the factors vector.
@@ -180,26 +181,26 @@
rCall = String.format(rInstruction, factorNames);
engine.voidEval(rCall);
- log.info("Message sent to R" + rCall);
+ log.info("Message sent to R : " + rCall);
// Set output directory
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
- log.info("Message sent to R" + "setwd(\""
+ log.info("Message sent to R : " + "setwd(\""
+ outputdirectory.getAbsolutePath() + "\")");
// Export the morris object for the second run in a .morris file
engine.voidEval("dput(a,file=\".morris\")");
- log.info("Message sent to R" + "dput(a,file=\".morris\")");
+ log.info("Message sent to R : " + "dput(a,file=\".morris\")");
// Export the factornames object for the second run in a .factornames file
engine.voidEval("dput(factornames,file=\".factornames\")");
- log.info("Message sent to R"
+ log.info("Message sent to R : "
+ "dput(factornames,file=\".factornames\")");
// Get back experiment plan
dataframe = (double[]) engine.eval("a$X");
- log.info("Message sent to R" + "a$X");
+ log.info("Message sent to R : " + "a$X");
if (log.isDebugEnabled()) {
log.debug("rInstruction = " + rInstruction);
@@ -207,6 +208,46 @@
nbExperiments = dataframe.length / factorNumber;
+ log.info("Message sent to R : "
+ + "isis.factor.distribution<-c(0.0)");
+ engine.voidEval("isis.factor.distribution<-c(0.0)");
+
+ log.info("Message sent to R : " + "call<-a$call");
+ engine.voidEval("call<-a$call");
+
+ log
+ .info("Message sent to R : "
+ + "isis.MethodExp<-list(isis.factors,isis.factor.distribution,call)");
+ engine
+ .voidEval("isis.MethodExp<-list(isis.factors,isis.factor.distribution,call)");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ log.info("Message sent to R : " + "isis.simule<-data.frame(a$X)");
+ engine.voidEval("isis.simule<-data.frame(a$X)");
+
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ log.info("Message sent to R : "
+ + "names(isis.simule)<-isis.factors[[1]]");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
} catch (RException eee) {
eee.printStackTrace();
throw new RuntimeException("R evaluation failed", eee);
@@ -226,7 +267,9 @@
Factor factor = factors.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier((Double)morris.getValue(i, j));
+ factor
+ .setValueForIdentifier((Double) morris.getValue(i,
+ j));
} else {
factor.setValueForIdentifier(morris.getValue(new int[] { i,
j }));
@@ -246,6 +289,14 @@
REngine engine = new RProxy();
try {
+ //Set working directory to get Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ //Get Isis R session
+ log.info("load(\".RData\")");
+ engine.voidEval("load(\".RData\")");
+
// Call R
// Load sensitivity package into R (if package already loaded,
// nothing happens.
@@ -278,7 +329,9 @@
for (int k = 0; k < sensitivityNumber; k++) {
// Creates the R expression to import results in R
- String rInstruction = "results<-c(";
+ String name = simulationStorages.get(0).getParameter()
+ .getSensitivityExport().get(k).getExportFilename();
+ String rInstruction = name + "<-c(";
for (int l = 0; l < scenariosNumber; l++) {
File importFile = new File(simulationStorages.get(l)
.getDirectory().toString()
@@ -306,8 +359,8 @@
engine.voidEval(rInstruction);
//Compute results
- engine.voidEval("tell(a,y=results)");
- log.info("Message sent to R : " + "tell(a,y=results)");
+ engine.voidEval("tell(a,y=name)");
+ log.info("Message sent to R : " + "tell(a,y=name)");
// Get back the sensitivity results, mu, mu star and sigma.
engine.voidEval("mu<-apply(a$ee, 2, mean)");
@@ -330,9 +383,9 @@
log.info("Message sent to R : " + "row.names(df)<-factornames");
//Create the data.frame of scenarios and results for export purpose
- engine.voidEval("dfresults=data.frame(a$X,results)");
+ engine.voidEval("dfresults=data.frame(a$X,name)");
log.info("Message sent to R : "
- + "dfresults=data.frame(a$X,results)");
+ + "dfresults=data.frame(a$X,name)");
//Set dfresults names
engine
@@ -375,7 +428,70 @@
.getExportFilename() + "_Results.csv\")");
//FIXME export through java to enable export when using Rserve
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," + name
+ + ")");
+ log.info("Message sent to R : "
+ + "isis.simule<-data.frame(isis.simule," + name + ")");
+
}
+
+ //adding attribute to isis.Simule
+ log
+ .info("Message sent to R : "
+ + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+ engine
+ .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")");
+
+ //creating isis.methodAnalyse
+ log
+ .info("Message sent to R : "
+ + "isis.methodAnalyse<-list(isis.factor,isis.factor.distribution,isis.simule,call_method=\"tell(a,results)\",a)");
+ engine
+ .voidEval("isis.methodAnalyse<-list(isis.factor,isis.factor.distribution,isis.simule,call_method=\"tell(a,results)\",a)");
+
+ //Rename R objects for saving purpose
+
+ String renameIsisSimule = "%s.isis.simule<-isis.simule";
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution";
+ String renameIsisFactor = "%s.isis.factor<-isis.factor";
+ String renameIsisMethodExp = "%s.isis.methodExp<-isis.methodExp";
+
+ String simulationName = simulationStorages.get(0).getName()
+ .replaceAll("-", "");
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisSimule, simulationName));
+ engine.voidEval(String.format(renameIsisSimule, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodAnalyse, simulationName));
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactorDistribution,
+ simulationName));
+ engine.voidEval(String.format(renameIsisFactorDistribution,
+ simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisFactor, simulationName));
+ engine.voidEval(String.format(renameIsisFactor, simulationName));
+
+ log.info("Message sent to R : "
+ + String.format(renameIsisMethodExp, simulationName));
+ engine.voidEval(String.format(renameIsisMethodExp, simulationName));
+
+ //Set working directory to save Isis R session
+ log.info("setwd(\"" + outputdirectory.getParent() + "\")");
+ engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")");
+
+ // Save Isis R session
+ log.info("save.image()");
+ engine.voidEval("save.image()");
+
} catch (Exception e) {
e.printStackTrace();
}
1
0
Author: chatellier
Date: 2009-04-17 12:27:11 +0000 (Fri, 17 Apr 2009)
New Revision: 111
Modified:
trunk/pom.xml
Log:
Update dependency
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-04-17 10:03:06 UTC (rev 110)
+++ trunk/pom.xml 2009-04-17 12:27:11 UTC (rev 111)
@@ -54,7 +54,7 @@
<dependency>
<groupId>ifremer</groupId>
<artifactId>isis-fish</artifactId>
- <version>3.2.0.4-rc3-SNAPSHOT</version>
+ <version>3.2.0.4-rc4-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
1
0
Author: jcouteau
Date: 2009-04-17 10:03:06 +0000 (Fri, 17 Apr 2009)
New Revision: 110
Modified:
trunk/pom.xml
Log:
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-04-17 09:51:03 UTC (rev 109)
+++ trunk/pom.xml 2009-04-17 10:03:06 UTC (rev 110)
@@ -54,7 +54,7 @@
<dependency>
<groupId>ifremer</groupId>
<artifactId>isis-fish</artifactId>
- <version>3.2.0.4-rc2-SNAPSHOT</version>
+ <version>3.2.0.4-rc3-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
1
0
Author: jcouteau
Date: 2009-04-17 09:51:03 +0000 (Fri, 17 Apr 2009)
New Revision: 109
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRFast.java
trunk/sensitivity/SensitivityCalculatorRFrF2.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
trunk/sensitivity/SensitivityCalculatorROptimumLHS.java
trunk/sensitivity/SensitivityCalculatorRRandomLHS.java
trunk/sensitivity/SensitivityCalculatorRSobol.java
Log:
Adapt to isis-fish sensitivity refactoring
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -19,7 +19,6 @@
package sensitivity;
import java.io.File;
-import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
@@ -32,7 +31,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -49,8 +48,8 @@
*
*/
@Doc("ExpandGrid")
-public class SensitivityCalculatorJavaExpandGrid implements
- SensitivityCalculator {
+public class SensitivityCalculatorJavaExpandGrid extends
+ AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
static private Log log = LogFactory
@@ -71,21 +70,21 @@
int k = 1; //number of sensitivity scenarios (initialization)
int factorNumber = plan.getFactors().size(); //number of factors
- List<Factor<? extends Serializable>> factors = plan.getFactors(); //list of factors
+ List<Factor> factors = plan.getFactors(); //list of factors
for (int i = 0; i < factorNumber; i++) {
if (factors.get(i).getDomain() instanceof ContinuousDomain) {
- if (((ContinuousDomain<? extends Serializable>) factors.get(i)
+ if (((ContinuousDomain) factors.get(i)
.getDomain()).getCardinality() != 0) {
k = k
- * ((ContinuousDomain<? extends Serializable>) factors
+ * ((ContinuousDomain) factors
.get(i).getDomain()).getCardinality();
}
} else if (factors.get(i).getDomain() instanceof DiscreteDomain) {
- if (((DiscreteDomain<? extends Serializable>) factors.get(i)
+ if (((DiscreteDomain) factors.get(i)
.getDomain()).getValues().size() != 0) {
k = k
- * ((DiscreteDomain<? extends Serializable>) factors
+ * ((DiscreteDomain) factors
.get(i).getDomain()).getValues().size();
}
}
@@ -99,13 +98,13 @@
int rest = i; //used for the euclidian division
Scenario experimentScenario = new Scenario();
for (int j = 0; j < factorNumber; j++) {
- Factor<? extends Serializable> factor = factors.get(j);
+ Factor factor = factors.get(j);
if (factor.getDomain() instanceof ContinuousDomain) {
- Double max = ((ContinuousDomain<Double>) factor.getDomain())
+ Double max = ((ContinuousDomain) factor.getDomain())
.getMaxBound();
- Double min = ((ContinuousDomain<Double>) factor.getDomain())
+ Double min = ((ContinuousDomain) factor.getDomain())
.getMinBound();
- int card = ((ContinuousDomain<? extends Serializable>) factor
+ int card = ((ContinuousDomain) factor
.getDomain()).getCardinality();
result = (int) Math.floor(rest / card);
rest = rest - (card * result);
@@ -119,7 +118,7 @@
}
}
if (factor.getDomain() instanceof DiscreteDomain) {
- int card = ((DiscreteDomain<? extends Serializable>) factor
+ int card = ((DiscreteDomain) factor
.getDomain()).getValues().size();
result = (int) Math.floor(rest / card);
rest = rest - (card * result);
@@ -144,7 +143,7 @@
try {
//Create the factors vectors
for (int j = 0; j < factorNumber; j++) {
- Factor<? extends Serializable> factor = thisExperimentScenarios
+ Factor factor = thisExperimentScenarios
.get(0).getFactors().get(j);
if (factor.getDomain() instanceof EquationContinuousDomain) {
@@ -152,12 +151,12 @@
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
@@ -171,12 +170,12 @@
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
Modified: trunk/sensitivity/SensitivityCalculatorRFast.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRFast.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorRFast.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -38,6 +38,8 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
@@ -55,7 +57,7 @@
* $Author: jcouteau $
*/
-public class SensitivityCalculatorRFast implements SensitivityCalculator {
+public class SensitivityCalculatorRFast extends AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
private static Log log = LogFactory
@@ -92,7 +94,7 @@
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
@@ -186,17 +188,17 @@
for (int j = 0; j < nbExperiments; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
- Factor<? extends Serializable> factor = plan.getFactors()
+ Factor factor = plan.getFactors()
.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
factor.setValueForIdentifier(Double.valueOf(
fast.getValue(new int[] { i, j })).toString());
} else {
- Double value = (Double) ((ContinuousDomain<?>) factor
+ Double value = (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound()
- + ((Double) ((ContinuousDomain<?>) factor
- .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor
+ + ((Double) ((ContinuousDomain) factor
+ .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound())
* fast.getValue(new int[] { i, j });
factor.setValueForIdentifier(value);
Modified: trunk/sensitivity/SensitivityCalculatorRFrF2.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRFrF2.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorRFrF2.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -38,6 +38,8 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
@@ -55,7 +57,7 @@
* $Author: chatellier $
*/
@Doc("FrF2 method, at least 4 factors need to be declared")
-public class SensitivityCalculatorRFrF2 implements SensitivityCalculator {
+public class SensitivityCalculatorRFrF2 extends AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
private static Log log = LogFactory
@@ -79,7 +81,7 @@
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
@@ -161,7 +163,7 @@
for (int j = 0; j < nbExperiments; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
- Factor<? extends Serializable> factor = plan.getFactors()
+ Factor factor = plan.getFactors()
.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
@@ -177,13 +179,13 @@
} else {
if (frf2.getValue(new int[] { i, j }) == -1) {
factor
- .setValueForIdentifier(((ContinuousDomain<?>) factor
+ .setValueForIdentifier(((ContinuousDomain) factor
.getDomain()).getMinBound());
}
if (frf2.getValue(new int[] { i, j }) == 1) {
factor
- .setValueForIdentifier(((ContinuousDomain<?>) factor
+ .setValueForIdentifier(((ContinuousDomain) factor
.getDomain()).getMaxBound());
}
}
@@ -195,7 +197,7 @@
try {
//Create the factors vectors
for (int j = 0; j < factorNumber; j++) {
- Factor<? extends Serializable> factor = thisExperimentScenarios
+ Factor factor = thisExperimentScenarios
.get(0).getFactors().get(j);
if (factor.getDomain() instanceof EquationContinuousDomain) {
@@ -203,12 +205,12 @@
for (int i = 0; i < nbExperiments; i++) {
if (i < (nbExperiments - 1)) {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
@@ -222,12 +224,12 @@
for (int i = 0; i < nbExperiments; i++) {
if (i < (nbExperiments - 1)) {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -22,6 +22,12 @@
import java.io.Serializable;
import java.util.List;
+import javax.swing.Box;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.j2r.REngine;
@@ -33,10 +39,12 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
@@ -54,11 +62,14 @@
* $Author$
*/
@Doc("Morris method")
-public class SensitivityCalculatorRMorris implements SensitivityCalculator {
+public class SensitivityCalculatorRMorris extends AbstractSensitivityCalculator {
@Doc("Integer giving the number of repetitions of the design, i.e. the number of elementary effect computed per factor. (Default value : 4)")
- public int param_r;
+ public int param_r = 4;
+ @Doc("True to be able to modify the code sent to R")
+ public boolean param_modifR = false;
+
/** to use log facility, just put in your code: log.info("..."); */
private static Log log = LogFactory
.getLog(SensitivityCalculatorRMorris.class);
@@ -74,174 +85,102 @@
}
public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) {
+
+ setIsisFactorsR(plan,outputdirectory);
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
- if (((Integer) param_r == null) || ((Integer) param_r == 0)) {
+ if (param_r == 0) {
param_r = 4;
}
//Test all factors, if one is discrete, return null
for (int i = 0; i < factorNumber; i++) {
if (factors.get(i).getDomain() instanceof DiscreteDomain) {
+ JOptionPane
+ .showMessageDialog(
+ null,
+ "Error",
+ factors.get(i).getName()
+ + " has a discrete domain, this is not acceptable for this method.",
+ JOptionPane.ERROR_MESSAGE);
return null;
}
}
- String rInstruction = "a<-morris(model=NULL,factors=c(";
-
- // Creating the factors vector.
+ // Creating the vectors.
+ String factorNames = "";
+ String levels = "";
+ String gridJump = "";
+ String binf = "";
+ String bsup = "";
for (int i = 0; i < factorNumber; i++) {
- if (i != (factorNumber - 1)) {
- rInstruction = rInstruction + "\"" + factors.get(i).getName()
- + "\",";
- } else {
- rInstruction = rInstruction + "\"" + factors.get(i).getName()
- + "\"";
+ Domain domain = factors.get(i).getDomain();
+ if (i != 0) {
+ factorNames += ",";
+ levels += ",";
+ gridJump += ",";
+ binf += ",";
+ bsup += ",";
}
- }
- // Adding the number of repetition parameter (r), the morris type
- // (type="oat") and the level vector
- rInstruction = rInstruction + "),r=" + param_r
- + ",design=list(type=\"oat\",levels=c(";
+ factorNames += "\"" + factors.get(i).getName() + "\"";
- // Creating the levels vector.
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size() + ",";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getCardinality() + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size();
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getCardinality();
- }
- }
- }
+ levels += ((ContinuousDomain) domain)
+ .getCardinality();
- // Adding the grid.jump parameter
- rInstruction = rInstruction + "),grid.jump=c(";
+ gridJump += (Integer) (((ContinuousDomain) domain)
+ .getCardinality() / 2);
- // Creating the grid.jump vector.
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + (Integer) (((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size() / 2) + ",";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + (Integer) (((ContinuousDomain<? extends Serializable>) domain)
- .getCardinality() / 2) + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + (Integer) (((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size() / 2);
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + (Integer) (((ContinuousDomain<? extends Serializable>) domain)
- .getCardinality() / 2);
- }
- }
+ binf += ((ContinuousDomain) domain)
+ .getMinBound();
+
+ bsup += ((ContinuousDomain) domain)
+ .getMaxBound();
}
- rInstruction += ")),binf=c(";
+ String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s,design=list(type=\"oat\",levels=c(%s),grid.jump=c(%s)),binf=c(%s),bsup=c(%s))";
- // Adding the binf parameter
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction + "0,";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMinBound() + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction + "0";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMinBound();
- }
- }
- }
+ String rCall = String.format(rInstruction, factorNames, param_r,
+ levels, gridJump, binf, bsup);
- // Adding the bsup parameter
- rInstruction = rInstruction + "),bsup=c(";
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size()) - 1) + ",";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMaxBound() + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size()) - 1);
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMaxBound();
- }
- }
+ if (param_modifR) {
+ JLabel label = new JLabel(
+ "Modifier le code R envoyé si vous le souhaitez");
+ JTextPane text = new JTextPane();
+ text.setText(rCall);
+ text.setSize(400, 400);
+ text.setPreferredSize(text.getSize());
+
+ Box box = Box.createVerticalBox();
+ box.add(label);
+ box.add(new JScrollPane(text));
+
+ JOptionPane.showMessageDialog(null, box, "R modif",
+ JOptionPane.QUESTION_MESSAGE);
+ rCall = text.getText();
}
- rInstruction = rInstruction + "))";
REngine engine = new RProxy();
try {
// Load sensitivity package into R (if package already loaded,
// nothing happens.
engine.voidEval("library(sensitivity)");
- log.info("Message sent to R" + "library(sensitivity)");
+ log.info("Message sent to R : " + "library(sensitivity)");
// Run sensitivity analysis
engine.voidEval(rInstruction);
- log.info("Message sent to R" + rInstruction);
+ log.info("Message sent to R : " + rCall);
// Creating the factors vector.
- rInstruction = "factornames<-c(";
- for (int i = 0; i < factorNumber; i++) {
- if (i != (factorNumber - 1)) {
- rInstruction = rInstruction + "\""
- + factors.get(i).getName() + "\",";
- } else {
- rInstruction = rInstruction + "\""
- + factors.get(i).getName() + "\"";
- }
- }
+ rInstruction = "factornames<-c(%s)";
+ rCall = String.format(rInstruction, factorNames);
- rInstruction += ")";
- engine.voidEval(rInstruction);
- log.info("Message sent to R" + rInstruction);
+ engine.voidEval(rCall);
+ log.info("Message sent to R" + rCall);
// Set output directory
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
@@ -268,8 +207,9 @@
nbExperiments = dataframe.length / factorNumber;
- } catch (RException e) {
- e.printStackTrace();
+ } catch (RException eee) {
+ eee.printStackTrace();
+ throw new RuntimeException("R evaluation failed", eee);
// Error while retrieving scenario
}
@@ -283,11 +223,10 @@
for (int j = 0; j < nbExperiments; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
- Factor<? extends Serializable> factor = factors.get(i);
+ Factor factor = factors.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(Double.valueOf(
- morris.getValue(new int[] { i, j })).toString());
+ factor.setValueForIdentifier((Double)morris.getValue(i, j));
} else {
factor.setValueForIdentifier(morris.getValue(new int[] { i,
j }));
Modified: trunk/sensitivity/SensitivityCalculatorROptimumLHS.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorROptimumLHS.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorROptimumLHS.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -35,6 +35,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -42,7 +43,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
import fr.ifremer.isisfish.util.Doc;
-/**
+/**save.image()
* Implementation of Optimum Latin Hypercube method using R.
*
* @author jcouteau
@@ -50,7 +51,7 @@
*
*/
@Doc("Optimum Latin Hypercube")
-public class SensitivityCalculatorROptimumLHS implements SensitivityCalculator {
+public class SensitivityCalculatorROptimumLHS extends AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
static private Log log = LogFactory
@@ -77,7 +78,7 @@
throws SensitivityException {
int factornumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
double[] dataframe = new double[0];
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
@@ -121,7 +122,7 @@
for (int j = 0; j < param_simulationNumber; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factornumber; i++) {
- Factor<? extends Serializable> factor = plan.getFactors()
+ Factor factor = plan.getFactors()
.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
@@ -130,10 +131,10 @@
morris.getValue(new int[] { i, j }))
.toString());
} else {
- Double value = (Double) ((ContinuousDomain<?>) factor
+ Double value = (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound()
- + ((Double) ((ContinuousDomain<?>) factor
- .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor
+ + ((Double) ((ContinuousDomain) factor
+ .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound())
* morris.getValue(new int[] { i, j });
factor.setValueForIdentifier(value);
@@ -146,7 +147,7 @@
//Create the factors vectors
for (int j = 0; j < factornumber; j++) {
- Factor<? extends Serializable> factor = thisExperimentScenarios
+ Factor factor = thisExperimentScenarios
.get(0).getFactors().get(j);
if (factor.getDomain() instanceof EquationContinuousDomain) {
@@ -154,12 +155,12 @@
for (int i = 0; i < param_simulationNumber; i++) {
if (i < (param_simulationNumber - 1)) {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
@@ -173,12 +174,12 @@
for (int i = 0; i < param_simulationNumber; i++) {
if (i < (param_simulationNumber - 1)) {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
Modified: trunk/sensitivity/SensitivityCalculatorRRandomLHS.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRRandomLHS.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorRRandomLHS.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -35,6 +35,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -50,7 +51,7 @@
*
*/
@Doc("Random Latin Hypercube")
-public class SensitivityCalculatorRRandomLHS implements SensitivityCalculator {
+public class SensitivityCalculatorRRandomLHS extends AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
static private Log log = LogFactory
@@ -76,7 +77,7 @@
double[] dataframe = new double[0];
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
if ((Integer) param_simulationNumber == 0) {
param_simulationNumber = 10;
@@ -107,7 +108,7 @@
for (int j = 0; j < param_simulationNumber; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factornumber; i++) {
- Factor<? extends Serializable> factor = plan.getFactors()
+ Factor factor = plan.getFactors()
.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
@@ -116,10 +117,10 @@
morris.getValue(new int[] { i, j }))
.toString());
} else {
- Double value = (Double) ((ContinuousDomain<?>) factor
+ Double value = (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound()
- + ((Double) ((ContinuousDomain<?>) factor
- .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor
+ + ((Double) ((ContinuousDomain) factor
+ .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound())
* morris.getValue(new int[] { i, j });
factor.setValueForIdentifier(value);
@@ -132,7 +133,7 @@
//Create the factors vectors
for (int j = 0; j < factornumber; j++) {
- Factor<? extends Serializable> factor = thisExperimentScenarios
+ Factor factor = thisExperimentScenarios
.get(0).getFactors().get(j);
if (factor.getDomain() instanceof EquationContinuousDomain) {
@@ -140,12 +141,12 @@
for (int i = 0; i < param_simulationNumber; i++) {
if (i < (param_simulationNumber - 1)) {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((EquationContinuousDomain<?>) thisExperimentScenarios
+ + ((EquationContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
@@ -159,12 +160,12 @@
for (int i = 0; i < param_simulationNumber; i++) {
if (i < (param_simulationNumber - 1)) {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue() + ",";
} else {
vector = vector
- + ((MatrixContinuousDomain<?>) thisExperimentScenarios
+ + ((MatrixContinuousDomain) thisExperimentScenarios
.get(i).getFactors().get(j)
.getDomain()).getValue();
}
Modified: trunk/sensitivity/SensitivityCalculatorRSobol.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRSobol.java 2009-04-16 13:25:07 UTC (rev 108)
+++ trunk/sensitivity/SensitivityCalculatorRSobol.java 2009-04-17 09:51:03 UTC (rev 109)
@@ -37,6 +37,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
@@ -54,7 +55,7 @@
* $Author: jcouteau $
*/
-public class SensitivityCalculatorRSobol implements SensitivityCalculator {
+public class SensitivityCalculatorRSobol extends AbstractSensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
private static Log log = LogFactory
@@ -84,7 +85,7 @@
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ List<Factor> factors = plan.getFactors();
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
@@ -188,17 +189,17 @@
for (int j = 0; j < nbExperiments; j++) {
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
- Factor<? extends Serializable> factor = plan.getFactors()
+ Factor factor = plan.getFactors()
.get(i);
if ((factor.getDomain() instanceof MatrixContinuousDomain)
|| (factor.getDomain() instanceof EquationContinuousDomain)) {
factor.setValueForIdentifier(Double.valueOf(
fast.getValue(new int[] { i, j })).toString());
} else {
- Double value = (Double) ((ContinuousDomain<?>) factor
+ Double value = (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound()
- + ((Double) ((ContinuousDomain<?>) factor
- .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor
+ + ((Double) ((ContinuousDomain) factor
+ .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor
.getDomain()).getMinBound())
* fast.getValue(new int[] { i, j });
factor.setValueForIdentifier(value);
@@ -360,7 +361,7 @@
}
public String getDescription() {
- return "Implementation of FAST method using R";
+ return "Implementation of Sobol method using R";
}
}
1
0
Author: jcouteau
Date: 2009-04-16 13:25:07 +0000 (Thu, 16 Apr 2009)
New Revision: 108
Added:
trunk/exports/SensitivityBiomassRelativeReferenceY12.java
trunk/exports/SensitivityCapturesWeightReferenceY7.java
trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java
trunk/exports/SensitivityGenitorBiomassReferenceY8.java
trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java
Modified:
trunk/exports/SensitivityBiomassReferenceY9.java
trunk/exports/SensitivityBiomassRelativeY6.java
trunk/exports/SensitivityGenitorBiomassRelativeY5.java
Log:
Implementation of reference exports.
Modified: trunk/exports/SensitivityBiomassReferenceY9.java
===================================================================
--- trunk/exports/SensitivityBiomassReferenceY9.java 2009-04-16 12:00:03 UTC (rev 107)
+++ trunk/exports/SensitivityBiomassReferenceY9.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -2,12 +2,10 @@
import static org.codelutin.i18n.I18n._;
-import java.io.File;
import java.io.Writer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.codelutin.math.matrix.MatrixIterator;
import org.codelutin.math.matrix.MatrixND;
import scripts.ResultName;
@@ -22,39 +20,47 @@
public class SensitivityBiomassReferenceY9 implements SensitivityExport {
/** to use log facility, just put in your code: log.info("..."); */
- static private Log log = LogFactory.getLog(SensitivityBiomassReferenceY9.class);
+ static private Log log = LogFactory
+ .getLog(SensitivityBiomassReferenceY9.class);
protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
@Doc("Population")
public Population param_pop;
-
- @Doc("Path to the reference simulation exports")
- public String param_referenceExports;
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation = "";
+
@Override
public void export(SimulationStorage simulation, Writer out)
throws Exception {
- File referenceExports=new File (param_referenceExports);
- Date lastDate = simulation.getResultStorage().getLastDate();
- double biomass = 0.0;
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ ResultStorage resultStorage = simulation.getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Double biomass = 0.0;
+ Double referenceBiomass = 0.0;
+
for (Population pop : simulation.getParameter().getPopulations()) {
if (pop.getName().equals(param_pop.getName())) {
- MatrixND mat = simulation.getResultStorage().getMatrix(pop,
+
+ //Get the biomass of the last time step
+ MatrixND matlastdate = resultStorage.getMatrix(lastDate, pop,
ResultName.MATRIX_BIOMASS);
- for (MatrixIterator i = mat.iterator(); i.hasNext();) {
- i.next();
- Object[] sems = i.getSemanticsCoordinates();
- Date date = (Date) sems[0];
+ biomass = matlastdate.sumAll();
- if (date.afterOrEquals(lastDate)) {
- biomass = biomass + i.getValue();
- }
- }
+ //Get the reference biomass of the last time step
+ MatrixND matreferencelastdate = referenceResultStorage
+ .getMatrix(lastDate, pop, ResultName.MATRIX_BIOMASS);
+ referenceBiomass = matreferencelastdate.sumAll();
+
}
}
- out.write(Double.toString(biomass));
+ out.write(Double.toString(biomass / referenceBiomass));
+
}
@Override
@@ -64,7 +70,7 @@
@Override
public String getExportFilename() {
- return "SensitivityBiomass";
+ return "SensitivityBiomassReferenceY9";
}
@Override
Added: trunk/exports/SensitivityBiomassRelativeReferenceY12.java
===================================================================
--- trunk/exports/SensitivityBiomassRelativeReferenceY12.java (rev 0)
+++ trunk/exports/SensitivityBiomassRelativeReferenceY12.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -0,0 +1,101 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+import fr.ifremer.isisfish.util.Doc;
+
+@Doc("Doc for SensitivityBiomass")
+public class SensitivityBiomassRelativeReferenceY12 implements
+ SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityBiomassRelativeReferenceY12.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+
+ @Doc("Population")
+ public Population param_pop;
+
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation="";
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage resultStorage = simulation.getResultStorage();
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Date firstDate = new Date(11);
+ double biomass = 0.0;
+ double firstbiomass = 0.0;
+ double biomassReference = 0.0;
+ double firstbiomassReference = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals(param_pop.getName())) {
+
+ //Get the biomass on december of the first year
+ MatrixND matfirstdate = resultStorage.getMatrix(firstDate, pop,
+ ResultName.MATRIX_BIOMASS);
+ firstbiomass = matfirstdate.sumAll();
+
+ //Get the biomass of the last time step
+ MatrixND matlastdate = resultStorage.getMatrix(lastDate, pop,
+ ResultName.MATRIX_BIOMASS);
+ biomass = matlastdate.sumAll();
+
+ //Get the biomass on december of the first year
+ MatrixND matfirstdatereference = referenceResultStorage
+ .getMatrix(firstDate, pop, ResultName.MATRIX_BIOMASS);
+ firstbiomassReference = matfirstdatereference.sumAll();
+
+ //Get the biomass of the last time step
+ MatrixND matlastdatereference = referenceResultStorage
+ .getMatrix(lastDate, pop, ResultName.MATRIX_BIOMASS);
+ biomassReference = matlastdatereference.sumAll();
+
+ }
+ }
+
+ out.write(Double.toString((biomass / firstbiomass)
+ / (biomassReference / firstbiomassReference)));
+
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Biomass for the last time step. Biomass is the sum on the groups and zones");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityBiomassRelativeReferenceY12";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
\ No newline at end of file
Modified: trunk/exports/SensitivityBiomassRelativeY6.java
===================================================================
--- trunk/exports/SensitivityBiomassRelativeY6.java 2009-04-16 12:00:03 UTC (rev 107)
+++ trunk/exports/SensitivityBiomassRelativeY6.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -31,14 +31,14 @@
@Override
public void export(SimulationStorage simulation, Writer out)
throws Exception {
- Date lastDate = simulation.getResultStorage().getLastDate();
+ ResultStorage resultStorage = simulation.getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
Date firstDate = new Date(11);
double biomass = 0.0;
double firstbiomass = 0.0;
for (Population pop : simulation.getParameter().getPopulations()) {
- if (pop.getName().equals(param_pop.getName())) {
- ResultStorage resultStorage = simulation.getResultStorage();
+ if (pop.getName().equals(param_pop.getName())) {
//Get the biomass on december of the first year
MatrixND matfirstdate = resultStorage.getMatrix(firstDate, pop,
Added: trunk/exports/SensitivityCapturesWeightReferenceY7.java
===================================================================
--- trunk/exports/SensitivityCapturesWeightReferenceY7.java (rev 0)
+++ trunk/exports/SensitivityCapturesWeightReferenceY7.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -0,0 +1,94 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+import fr.ifremer.isisfish.util.Doc;
+
+@Doc("Doc for SensitivityCapturesPoids")
+public class SensitivityCapturesWeightReferenceY7 implements SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityCapturesWeightReferenceY7.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP };
+
+ @Doc("Population")
+ public Population param_pop;
+
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation="";
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ ResultStorage resultStorage = simulation.getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Double capturesWeight = 0.0;
+ Double capturesWeightReference = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals(param_pop.getName())) {
+ for (int i = 0; i < 12; i++) {
+
+ //Get the captures Weight of each month of the last year
+ MatrixND matlastdate = resultStorage
+ .getMatrix(
+ new Date(lastDate.getDate() - i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeight += matlastdate.sumAll();
+
+ //Get the reference captures Weight of each month of the last year
+ MatrixND matlastdatereference = referenceResultStorage
+ .getMatrix(
+ new Date(lastDate.getDate() - i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeightReference += matlastdatereference.sumAll();
+
+ }
+
+ }
+ }
+
+ out.write(Double.toString(capturesWeight / capturesWeightReference));
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Captures in weight for the last year for the popage population. Captures is the sum of zones, groups, metiers and strategies");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityCapturesWeightReferenceY7";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
\ No newline at end of file
Added: trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java
===================================================================
--- trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java (rev 0)
+++ trunk/exports/SensitivityCapturesWeightRelativeReferenceY10.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -0,0 +1,112 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+import fr.ifremer.isisfish.util.Doc;
+
+@Doc("Doc for SensitivityCapturesPoids")
+public class SensitivityCapturesWeightRelativeReferenceY10 implements
+ SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityCapturesWeightRelativeReferenceY10.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP };
+
+ @Doc("Population")
+ public Population param_pop;
+
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation = "";
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ ResultStorage resultStorage = simulation.getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Double capturesWeight = 0.0;
+ Double capturesWeightfirst = 0.0;
+ Double capturesWeightreference = 0.0;
+ Double capturesWeightfirstreference = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals(param_pop.getName())) {
+ for (int i = 0; i < 12; i++) {
+
+ //Get the captures Weight of each month of the last year
+ MatrixND matlastdate = resultStorage
+ .getMatrix(
+ new Date(lastDate.getDate() - i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeight += matlastdate.sumAll();
+
+ //Get the captures Weight of each month of the first year
+ MatrixND matfirstdate = resultStorage
+ .getMatrix(
+ new Date(i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeightfirst += matfirstdate.sumAll();
+
+ //Get the reference captures Weight of each month of the last year
+ MatrixND matlastdatereference = referenceResultStorage
+ .getMatrix(
+ new Date(lastDate.getDate() - i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeightreference += matlastdatereference.sumAll();
+
+ //Get the reference captures Weight of each month of the first year
+ MatrixND matfirstdatereference = referenceResultStorage
+ .getMatrix(
+ new Date(i),
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ capturesWeightfirstreference += matfirstdatereference
+ .sumAll();
+ }
+ }
+ }
+ out.write(Double.toString((capturesWeight / capturesWeightfirst)
+ / (capturesWeightreference / capturesWeightfirstreference)));
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Captures in weight for the last year for the popage population. Captures is the sum of zones, groups, metiers and strategies");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityCapturesWeightRelativeReferenceY10";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
Added: trunk/exports/SensitivityGenitorBiomassReferenceY8.java
===================================================================
--- trunk/exports/SensitivityGenitorBiomassReferenceY8.java (rev 0)
+++ trunk/exports/SensitivityGenitorBiomassReferenceY8.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -0,0 +1,103 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixIterator;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.entities.PopulationGroup;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+import fr.ifremer.isisfish.util.Doc;
+
+@Doc("Doc for SensitivityBiomass")
+public class SensitivityGenitorBiomassReferenceY8 implements SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityGenitorBiomassReferenceY8.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+
+ @Doc("Population")
+ public Population param_pop;
+
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation = "";
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ ResultStorage resultStorage = simulation.getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Double biomass = 0.0;
+ Double referenceBiomass = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals(param_pop.getName())) {
+
+ //Get the biomass of the last time step
+ MatrixND matlastdate = resultStorage.getMatrix(pop,
+ ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matlastdate.iterator(); i.hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(lastDate)) {
+ biomass += i.getValue() * group.getReproductionRate();
+ }
+ }
+
+ //Get the reference biomass of the last time step
+ MatrixND matlastdatereference = referenceResultStorage
+ .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matlastdatereference.iterator(); i
+ .hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(lastDate)) {
+ referenceBiomass += i.getValue()
+ * group.getReproductionRate();
+ }
+ }
+ }
+ }
+ out.write(Double.toString(biomass / referenceBiomass));
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Biomass of the genitors for the last time step. Biomass is the sum on the groups and zones");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityGenitorBiomassReferenceY8";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
Added: trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java
===================================================================
--- trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java (rev 0)
+++ trunk/exports/SensitivityGenitorBiomassRelativeReferenceY11.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -0,0 +1,138 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixIterator;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ResultStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.entities.PopulationGroup;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+import fr.ifremer.isisfish.util.Doc;
+
+@Doc("Doc for SensitivityBiomass")
+public class SensitivityGenitorBiomassRelativeReferenceY11 implements
+ SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityGenitorBiomassRelativeReferenceY11.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+
+ @Doc("Population")
+ public Population param_pop;
+
+ @Doc("Name of the reference simulation")
+ public String param_referenceSimulation = "";
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ SimulationStorage referenceSimulation = SimulationStorage
+ .getSimulation(param_referenceSimulation);
+ ResultStorage resultStorage = simulation.getResultStorage();
+ ResultStorage referenceResultStorage = referenceSimulation
+ .getResultStorage();
+ Date lastDate = resultStorage.getLastDate();
+ Date firstDate = new Date(11);
+ double biomass = 0.0;
+ double firstbiomass = 0.0;
+ double biomassReference = 0.0;
+ double firstbiomassReference = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals(param_pop.getName())) {
+
+ //Get the biomass of the first time step
+ MatrixND matfirstdate = resultStorage.getMatrix(pop,
+ ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matfirstdate.iterator(); i.hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(firstDate)) {
+ firstbiomass += i.getValue()
+ * group.getReproductionRate();
+ }
+ }
+
+ //Get the biomass of the last time step
+ MatrixND matlastdate = resultStorage.getMatrix(pop,
+ ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matlastdate.iterator(); i.hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(lastDate)) {
+ biomass = biomass + i.getValue()
+ * group.getReproductionRate();
+ }
+ }
+
+ //Get the reference biomass of the first time step
+ MatrixND matfirstdatereference = referenceResultStorage
+ .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matfirstdatereference.iterator(); i
+ .hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(firstDate)) {
+ firstbiomassReference += i.getValue()
+ * group.getReproductionRate();
+ }
+ }
+
+ //Get the reference biomass of the last time step
+ MatrixND matlastdatereference = referenceResultStorage
+ .getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = matlastdatereference.iterator(); i
+ .hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ PopulationGroup group = (PopulationGroup) sems[1];
+ Date date = (Date) sems[0];
+ if (date.equals(lastDate)) {
+ biomassReference += i.getValue()
+ * group.getReproductionRate();
+ }
+ }
+ }
+ }
+ out.write(Double.toString((biomass / firstbiomass)
+ / (biomassReference / firstbiomassReference)));
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Biomass of the genitors for the last time step. Biomass is the sum on the groups and zones");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityGenitorBiomassRelativeReferenceY11";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
\ No newline at end of file
Modified: trunk/exports/SensitivityGenitorBiomassRelativeY5.java
===================================================================
--- trunk/exports/SensitivityGenitorBiomassRelativeY5.java 2009-04-16 12:00:03 UTC (rev 107)
+++ trunk/exports/SensitivityGenitorBiomassRelativeY5.java 2009-04-16 13:25:07 UTC (rev 108)
@@ -42,7 +42,7 @@
if (pop.getName().equals(param_pop.getName())) {
ResultStorage resultStorage = simulation.getResultStorage();
- //Get the biomass of the last time step
+ //Get the biomass of the first time step
MatrixND matfirstdate = resultStorage.getMatrix(pop,
ResultName.MATRIX_BIOMASS);
for (MatrixIterator i = matfirstdate.iterator(); i.hasNext();) {
1
0