Author: jcouteau Date: 2009-03-17 14:32:13 +0000 (Tue, 17 Mar 2009) New Revision: 77 Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java Log: Working expand grid sensitivity calculator with full analysis. Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-16 16:50:28 UTC (rev 76) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-17 14:32:13 UTC (rev 77) @@ -22,6 +22,8 @@ import java.io.Serializable; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.codelutin.j2r.REngine; import org.codelutin.j2r.RProxy; import org.codelutin.util.FileUtil; @@ -47,6 +49,10 @@ public class SensitivityCalculatorJavaExpandGrid implements SensitivityCalculator { + /** to use log facility, just put in your code: log.info("..."); */ + static private Log log = LogFactory + .getLog(SensitivityCalculatorJavaExpandGrid.class); + /** * Retourne vrai si le calculateur sait gerer la cardinalité * des facteurs continue. @@ -106,7 +112,7 @@ * result; } - if (factor.getDomain() instanceof ContinuousDomain) { + /*if (factor.getDomain() instanceof ContinuousDomain) { factor .setValueForIdentifier((((ContinuousDomain<Double>) factor .getDomain()).getMaxBound() - ((ContinuousDomain<Double>) factor @@ -114,14 +120,15 @@ / rest + ((ContinuousDomain<Double>) factor .getDomain()).getMinBound()); - } + }*/ factor.setValueForIdentifier(rest); experimentScenario.addFactor(factor); } thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); + } + thisExperiment.setScenarios(thisExperimentScenarios); /* * Call R to save the data for result analysis @@ -147,6 +154,7 @@ } vector = vector + ")"; engine.voidEval(vector); + log.info("Message sent to R : " + vector); } @@ -155,22 +163,29 @@ for (int j = 0; j < factorNumber; j++) { if (j < factorNumber - 1) { dataframe = dataframe + "factor" + j + "=factor(factor" + j - + "))"; + + "),"; } else { dataframe = dataframe + "factor" + j + "=factor(factor" + j - + "),"; + + "))"; } } engine.voidEval(dataframe); + log.info("Message sent to R : " + dataframe); // Set output directory engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() + "\")"); + log.info("Message sent to R : " + "setwd(\"" + + outputdirectory.getAbsolutePath() + "\")"); // Export the data.frame object for the second run in a .expandgrid file - engine.voidEval("dput(data,file=\".expandgrid\")"); + engine.voidEval("write.csv(data,file=\".expandgrid.csv\")"); + log + .info("Message sent to R : write.csv(data,file=\".expandgrid\")"); + engine.terminate(); + } catch (Exception e) { e.printStackTrace(); // Error while processing @@ -194,17 +209,29 @@ for (int k = 0; k < sensitivityNumber; k++) { + // Set output directory + engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() + + "\")"); + log.info("Message sent to R : setwd(\"" + + outputdirectory.getAbsolutePath() + "\")"); + //Get back the scenarios - engine.voidEval("factors<-dget(\".expandgrid\")"); + //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 back the factors number - int factorNumber = (Integer) engine.eval("length(factors)"); + int factorNumber = ((Double)engine.eval("length(factors)-1")).intValue(); + //factorNumber=factorNumber-1; //Create the results vectors String result = "result<-c("; for (int l = 0; l < simulationStorages.size(); l++) { File importFile = new File( - simulationStorages.get(l).getDirectory().toString(), + simulationStorages.get(l).getDirectory().toString() + + File.separator + + SimulationStorage.RESULT_EXPORT_DIRECTORY, ExportStorage .getExport( simulationStorages @@ -232,10 +259,12 @@ } result = result + ")"; engine.voidEval(result); + log.info("Message sent to R : " + result); //Create the dataforaov data.frame String dataframe = "dataforaov<-data.frame(factors,result=result)"; engine.voidEval(dataframe); + log.info("Message sent to R : " + dataframe); //Call aov() String aovCall = "aovresult<-aov(result~"; @@ -247,6 +276,7 @@ } } engine.voidEval(aovCall); + log.info("Message sent to R : " + aovCall); /*Export the results *Export format is csv, data separated by ',' @@ -257,36 +287,62 @@ //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]]"); + .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\")"); /*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() .getSensitivityExportNames().get(k) - + "_Results.csv"); + + "_Results.csv\")"); + log.info("Message sent to R : write.csv(dataforaov,\"" + + simulationStorages.get(0).getParameter() + .getSensitivityExportNames().get(k) + + "_Results.csv\")"); //Save the sensitivity indices engine.voidEval("write.csv(exportsensitivity,\"" + simulationStorages.get(0).getParameter() .getSensitivityExportNames().get(k) + "_SensitivityIndices.csv\")"); + log.info("Message sent to R : write.csv(exportsensitivity,\"" + + simulationStorages.get(0).getParameter() + .getSensitivityExportNames().get(k) + + "_SensitivityIndices.csv\")"); //FIXME export through java to enable export when using Rserve (when distant Rserve). + engine.terminate(); } + log.info("end"); } catch (Exception e) { e.printStackTrace();