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 }
participants (1)
-
jcouteau@users.labs.libre-entreprise.org