Author: jcouteau
Date: 2009-03-20 09:33:31 +0000 (Fri, 20 Mar 2009)
New Revision: 84
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Export results and scenarios on both methods
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-20 09:32:44 UTC (rev 83)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-20 09:33:31 UTC (rev 84)
@@ -139,7 +139,9 @@
try {
//Create the factors vectors
for (int j = 0; j < factorNumber; j++) {
- String vector = "factor" + j + "<-c(";
+ String vector = thisExperimentScenarios.get(0).getFactors()
+ .get(j).getName()
+ + "<-c(";
for (int i = 0; i < scenariosNumber; i++) {
if (i < (scenariosNumber - 1)) {
vector = vector
@@ -162,11 +164,19 @@
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
+ + thisExperimentScenarios.get(0).getFactors()
+ .get(j).getName()
+ + "=factor("
+ + thisExperimentScenarios.get(0).getFactors()
+ .get(j).getName() + "),";
} else {
- dataframe = dataframe + "factor" + j + "=factor(factor" + j
- + "))";
+ dataframe = dataframe
+ + thisExperimentScenarios.get(0).getFactors()
+ .get(j).getName()
+ + "=factor("
+ + thisExperimentScenarios.get(0).getFactors()
+ .get(j).getName() + "))";
}
}
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-20 09:32:44 UTC (rev 83)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-20 09:33:31 UTC (rev 84)
@@ -40,7 +40,6 @@
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.MatrixContinuousDomain;
/**
* Implementation of Morris method using R.
@@ -58,15 +57,15 @@
.getLog(SensitivityCalculatorRMorris.class);
/**
- * Retourne vrai si le calculateur sait gerer la cardinalité
- * des facteurs continue.
+ * 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 false;
}
-
+
public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) {
double[] dataframe = new double[0];
@@ -116,7 +115,7 @@
if (domain instanceof DiscreteDomain) {
rInstruction = rInstruction
+ ((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size();
+ .getValues().size();
} else if (domain instanceof ContinuousDomain) {
rInstruction = rInstruction
+ ((ContinuousDomain<? extends Serializable>) domain)
@@ -183,25 +182,25 @@
// 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" + rInstruction);
// Set output directory
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
- log.info("Message sent to R"+"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(a,file=\".morris\")");
- log.info("Message sent to R"+"dput(a,file=\".morris\")");
+ log.info("Message sent to R" + "dput(a,file=\".morris\")");
// 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);
@@ -225,8 +224,8 @@
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
Factor<? extends Serializable> factor = factors.get(i);
- factor.setValueForIdentifier(morris.getValue(new int[] { i,
- j }));
+ factor.setValueForIdentifier(morris
+ .getValue(new int[] { i, j }));
experimentScenario.addFactor(factor);
}
thisExperimentScenarios.add(experimentScenario);
@@ -241,27 +240,27 @@
REngine engine = new RProxy();
try {
-
- // Call R
+
+ // Call R
// 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)");
//Set the working directory (for import and exports)
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
- log.info("Message sent to R : "+"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("a<-dget(\".morris\")");
- log.info("Message sent to R : "+"a<-dget(\".morris\")");
+ log.info("Message sent to R : " + "a<-dget(\".morris\")");
/*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)");
+ log.info("Message sent to R : " + "length(a$X)/length(a$factors)");
int sensitivityNumber = simulationStorages.get(0).getParameter()
.getSensitivityExport().size();
@@ -271,20 +270,16 @@
// Creates the R expression to import results in R
String rInstruction = "results<-c(";
for (int l = 0; l < scenariosNumber; l++) {
- File importFile = new File(
- simulationStorages.get(l).getDirectory().toString()
+ 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());
+ 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) {
@@ -295,53 +290,67 @@
}
rInstruction = rInstruction + ")";
- log.info("Message sent to R : "+rInstruction);
+ log.info("Message sent to R : " + rInstruction);
// Send the simulation results
engine.voidEval(rInstruction);
//Compute results
engine.voidEval("tell(a,y=results)");
- log.info("Message sent to R : "+"tell(a,y=results)");
+ log.info("Message sent to R : " + "tell(a,y=results)");
// 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)");
+ log.info("Message sent to R : " + "mu<-apply(a$ee, 2, mean)");
engine
.voidEval("mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))");
- log.info("Message sent to R : "+"mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))");
+ log
+ .info("Message sent to R : "
+ + "mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))");
engine.voidEval("sigma <- apply(a$ee, 2, sd)");
- log.info("Message sent to R : "+"sigma <- apply(a$ee, 2, sd)");
+ log
+ .info("Message sent to R : "
+ + "sigma <- apply(a$ee, 2, sd)");
//Create the data.frame of sensitivity indices for export purpose
engine.voidEval("df=data.frame(mu,mu.star,sigma)");
- log.info("Message sent to R : "+"df=data.frame(mu,mu.star,sigma)");
+ log.info("Message sent to R : "
+ + "df=data.frame(mu,mu.star,sigma)");
+ //Create the data.frame of scenarios and results for export purpose
+ engine.voidEval("dfresults=data.frame(a$X,results)");
+ log.info("Message sent to R : "
+ + "df=data.frame(mu,mu.star,sigma)");
+
//Set working directory
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
log.info("Message sent to R : setwd(\""
+ outputdirectory.getAbsolutePath() + "\")");
-
+
//Export sensitivity indices
engine.voidEval("write.csv(df,\""
+ simulationStorages.get(0).getParameter()
- .getSensitivityExport().get(k).getExportFilename()
+ .getSensitivityExport().get(k)
+ .getExportFilename()
+ "_SensitivityIndices.csv\")");
- log.info("Message sent to R : "+"write.csv(df,\""
+ log.info("Message sent to R : "
+ + "write.csv(df,\""
+ simulationStorages.get(0).getParameter()
- .getSensitivityExport().get(k)
- + "_SensitivityIndices.csv\")");
-
+ .getSensitivityExport().get(k)
+ .getExportFilename()
+ + "_SensitivityIndices.csv\")");
+
//Export results
- engine.voidEval("write.csv(results,\""
+ engine.voidEval("write.csv(dfresults,\""
+ simulationStorages.get(0).getParameter()
.getSensitivityExport().get(k)
- + "_Results.csv\")");
- log.info("Message sent to R : "+"write.csv(results,\""
+ .getExportFilename() + "_Results.csv\")");
+ log.info("Message sent to R : "
+ + "write.csv(results,\""
+ simulationStorages.get(0).getParameter()
- .getSensitivityExport().get(k)
- + "_Results.csv\")");
+ .getSensitivityExport().get(k)
+ .getExportFilename() + "_Results.csv\")");
//FIXME export through java to enable export when using Rserve
}