Author: jcouteau Date: 2009-09-28 14:37:45 +0000 (Mon, 28 Sep 2009) New Revision: 2647 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java Log: Make difference between MatrixConituousDomain and EquationContinuousDomain Improve R objects (better names, better attributes) Save RData the good place Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java 2009-09-28 13:44:54 UTC (rev 2646) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java 2009-09-28 14:37:45 UTC (rev 2647) @@ -31,6 +31,8 @@ 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; public abstract class AbstractSensitivityCalculator implements SensitivityCalculator { @@ -58,8 +60,9 @@ String bsup = "Bsup<-c(%s)"; String bsupValues = ""; String attributes = "attributes(isis.factors)<-list(%s\"nomModel\"=\"isis-fish-externeR\",names=c(\"nomFacteur\",\"Nominal\",\"Continu\",\"Binf\",\"Bsup\"))"; + String attribute = "attr(isis.factors,\"%s\")<-\"%s\""; String attributesValues = ""; - String isisfactors = "isis.factors<-data.frame(nomFacteur,Nominal,Continu,Binf,Bsup)"; + String isisfactors = "isis.factors<-data.frame(\"nomFacteur\"=nomFacteur,\"Nominal\"=Nominal,\"Continu\"=Continu,\"Binf\"=Binf,\"Bsup\"=Bsup)"; //Create the vectors List<Factor<?, ?>> factors = plan.getFactors(); @@ -85,14 +88,49 @@ TopiaEntity entity = db.findByTopiaId(topiaId); Object value = BeanUtils.getProperty(entity, propertyName);*/ - nominalValues += 0.0; + if (factor.getDomain() instanceof MatrixContinuousDomain) { + //Continu values, binf values, bsup values and discrete factors attributes - //Continu values, binf values, bsup values and discrete factors attributes - if (factor.getDomain() instanceof ContinuousDomain) { + nominalValues += 1.0; + //Continu values continuValues += "TRUE"; //Binf values + + binfValues += ((MatrixContinuousDomain) factor.getDomain()) + .getRealMinBound(); + + //Bsup values + bsupValues += ((MatrixContinuousDomain) factor.getDomain()) + .getRealMaxBound(); + + } else if (factor.getDomain() instanceof EquationContinuousDomain) { + //Continu values, binf values, bsup values and discrete factors attributes + + nominalValues += ((EquationContinuousDomain) factor.getDomain()) + .getReferenceValue(); + + //Continu values + continuValues += "TRUE"; + + //Binf values + binfValues += ((EquationContinuousDomain) factor.getDomain()) + .getValueForIdentifier(0.0); + + //Bsup values + bsupValues += ((EquationContinuousDomain) factor.getDomain()) + .getValueForIdentifier(1.0); + } else if (factor.getDomain() instanceof ContinuousDomain) { + //Continu values, binf values, bsup values and discrete factors attributes + + nominalValues += 0.0; + + //Continu values + continuValues += "TRUE"; + + //Binf values + binfValues += ((ContinuousDomain) factor.getDomain()) .getMinBound(); @@ -101,6 +139,10 @@ .getMaxBound(); } else { + + //FIXME créer une méthode pour getNominalValue + nominalValues += ""; + //Continu values continuValues += "FALSE"; @@ -110,36 +152,17 @@ //Bsup values bsupValues += ((DiscreteDomain) factor.getDomain()).getValues() .size(); - - //Attribute values - attributesValues += "\"" + factor.getName() + "\"=list("; - Collection values = ((DiscreteDomain) factor.getDomain()) - .getValues().values(); - for (Iterator j = values.iterator(); j.hasNext();) { - attributesValues += j + ","; - j.next(); - } - attributesValues = attributesValues.substring(0, - attributesValues.length() - 1); - attributesValues += "),"; } - if (attributesValues.length() != 0) { - attributesValues = attributesValues.substring(0, - attributesValues.length() - 1); - attributesValues += ","; - } - } String Rcall = ""; REngine engine = new RProxy(); try { - log.info("setwd(\"" + outputdirectory.getParent() + "\")"); - engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")"); - log.info("load(\".RData\")"); - engine.voidEval("load(\".RData\")"); + //clear the engine (to be sure it's empty) + log.info("rm(list=ls())"); + engine.voidEval("rm(list=ls())"); Rcall = String.format(nomFacteur, factorNames); log.info(Rcall); @@ -164,13 +187,43 @@ log.info(isisfactors); engine.voidEval(isisfactors); - Rcall = String.format(attributes, attributesValues); + Rcall = String.format(attribute, "nomModel", "isis-fish-externeR"); log.info(Rcall); engine.voidEval(Rcall); - log.info("save.image()"); - engine.voidEval("save.image()"); + for (int i = 0; i < factors.size(); i++) { + Factor factor = factors.get(i); + if (factor.getDomain() instanceof DiscreteDomain) { + String attributeValues = "list("; + Collection values = ((DiscreteDomain) factor.getDomain()) + .getValues().values(); + for (Iterator j = values.iterator(); j.hasNext();) { + attributeValues += j + ","; + j.next(); + } + attributeValues = attributeValues.substring(0, + attributeValues.length() - 1); + attributeValues += ")"; + Rcall = String.format(attribute, factor.getName(), + attributeValues); + log.info(Rcall); + engine.voidEval(Rcall); + } + } + + //Set working directory to save the Isis R session + log.info("setwd(\"" + + outputdirectory.getParent().replaceAll("\\\\", "/") + + "\")"); + engine.voidEval("setwd(\"" + + outputdirectory.getParent().replaceAll("\\\\", "/") + + "\")"); + + log.info("save.image(file=\"" + outputdirectory.getName() + ".RData\")"); + engine.voidEval("save.image(file=\"" + outputdirectory.getName() + + ".RData\")"); + } catch (RException eee) { if (log.isErrorEnabled()) { log.error("R evaluation failed", eee);