Isis-fish-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
- November
November 2013
- 4 participants
- 38 discussions
r3833 - in branches/4.0.1/src: main/java/fr/ifremer/isisfish/simulator/sensitivity main/java/fr/ifremer/isisfish/simulator/sensitivity/domain test/java/fr/ifremer/isisfish/simulator/sensitivity test/resources/test-database/sensitivityanalysis
by echatellier@users.forge.codelutin.com 14 Nov '13
by echatellier@users.forge.codelutin.com 14 Nov '13
14 Nov '13
Author: echatellier
Date: 2013-11-14 22:01:30 +0100 (Thu, 14 Nov 2013)
New Revision: 3833
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3833
Log:
Sensitivity
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Domain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -346,67 +346,61 @@
* Get factor domain min bound depending on distribution.
*/
protected double getMinBound(Factor factor) {
- ContinuousDomain domain = (ContinuousDomain)factor.getDomain();
- Distribution distribution = domain.getDistribution();
- double result = 0;
- if (distribution == Distribution.QUNIFPC) {
- Object reference = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[0].getName());
- if (reference instanceof MatrixND) {
- result = 1;
- } else {
- Double coefficient = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[1].getName());
- result = (Double)reference - ((Double)reference * coefficient);
- }
- } else if (distribution == Distribution.QUNIFMM) {
- Object min = domain.getDistributionParameter(Distribution.QUNIFMM.getDistibutionParams()[0].getName());
- // pour les matrices, on prend 1 et on multipliera le retour
- // de R sur la matrice pour faire varier la matrice completement
- // note: on ne fait pas ca pour les réels car les utilisateurs
- // prefere avoir les valeurs réelles dans le RData.
- if (min instanceof MatrixND) {
- result = 1;
- } else {
- result = (Double)min;
- }
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Can't call getMinBound for distribution " + distribution);
- }
- }
- return result;
+ return getBound(factor, true);
}
-
+
/**
* Get factor domain max bound depending on distribution.
*/
protected double getMaxBound(Factor factor) {
+ return getBound(factor, false);
+ }
+
+ /**
+ * Get factor domain bound depending on distribution.
+ *
+ * @param min min or max
+ */
+ protected double getBound(Factor factor, boolean min) {
ContinuousDomain domain = (ContinuousDomain)factor.getDomain();
Distribution distribution = domain.getDistribution();
double result = 0;
if (distribution == Distribution.QUNIFPC) {
Object reference = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[0].getName());
if (reference instanceof MatrixND) {
- result = 1;
+ result = min ? 0 : 1;
} else {
Double coefficient = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[1].getName());
- result = (Double)reference + ((Double)reference * coefficient);
+ if (min) {
+ result = (Double)reference - ((Double)reference * coefficient);
+ } else {
+ result = (Double)reference + ((Double)reference * coefficient);
+ }
}
} else if (distribution == Distribution.QUNIFMM) {
- Object max = domain.getDistributionParameter(Distribution.QUNIFMM.getDistibutionParams()[1].getName());
+ Object value = domain.getDistributionParameter(Distribution.QUNIFMM.getDistibutionParams()[min ? 0 : 1].getName());
// pour les matrices, on prend 1 et on multipliera le retour
// de R sur la matrice pour faire varier la matrice completement
// note: on ne fait pas ca pour les réels car les utilisateurs
// prefere avoir les valeurs réelles dans le RData.
- if (max instanceof MatrixND) {
- result = 1;
+ if (value instanceof MatrixND) {
+ result = min ? 0 : 1;
} else {
- result = (Double)max;
+ result = (Double)value;
}
} else {
if (log.isWarnEnabled()) {
- log.warn("Can't call getMaxBound for distribution " + distribution);
+ log.warn("Can't call getBound for distribution " + distribution);
}
}
return result;
}
+
+ /**
+ *
+ * @param value
+ */
+ protected void setFactorValue(double value) {
+
+ }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Domain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Domain.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Domain.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -52,13 +52,13 @@
*/
public interface Domain extends Serializable, Cloneable {
- /**
+ /*
* Return value associated to identifier.
*
* @param identifier
* @return found value or <tt>null</tt> if not found
- */
- Object getValueForIdentifier(Object identifier);
+ *
+ Object getValueForIdentifier(Object identifier);*/
/**
* Accept a new visitor.
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -183,35 +183,32 @@
* @return the value
*/
public Object getDisplayedValue() {
- // FIXME echatellier 20120313 EquationContinuousDomain removed
- /*if (domain instanceof EquationDiscreteDomain ||
- domain instanceof EquationContinuousDomain) {
+ // add quotes for equation, but why ?
+ if (equationVariableName != null) {
return "\"" + getValue() + "\"";
- } else {*/
+ } else {
return getValue();
- //}
+ }
}
/**
* Set value.
*
- * FIXME JC 2011-10-24 Unused (or only for test ?).
- *
* @param value new value
*/
public void setValue(Object value) {
this.value = value;
}
- /**
+ /*
* Set value for label.
*
* @param valueIdentifier new value identifier to get
- */
+ *
public void setValueForIdentifier(Object valueIdentifier) {
identifier = valueIdentifier;
value = domain.getValueForIdentifier(valueIdentifier);
- }
+ }*/
/**
* Get path.
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -254,8 +254,7 @@
domain = new ContinuousDomain(Distribution.QUNIFMM);
((ContinuousDomain)domain).addDistributionParam("min", 0.0);
((ContinuousDomain)domain).addDistributionParam("max", 1.0);
- }
- else if (isDiscrete()) {
+ } else if (isDiscrete()) {
// les domaines doivent avoir les même domaines
// et pour l'utilisation quand fera l'appelant
// de getDomain(), on peut en retourner un au hazard
@@ -286,20 +285,20 @@
public String toString() {
return "FactorGroup(" + name + ")";
}
-
- /**
+
+ /*
* Set value for label.
*
* @param valueIdentifier new value identifier to get
- */
+ *
@Override
public void setValueForIdentifier(Object valueIdentifier) {
identifier = valueIdentifier;
for (Factor factor : factors) {
factor.setValueForIdentifier(valueIdentifier);
}
- }
-
+ }*/
+
/**
* Get the factor value for displaying (for example in R).
*
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -162,26 +162,23 @@
distributionParameters.put(name, value);
}
- /**
- * {@inheritDoc}.
- */
+ /*@Override
public Object getValueForIdentifier(Object identifier) {
Double result = 0d;
- // FIXME
- /*if (isPercentageType()) {
+ if (isPercentageType()) {
// since 3.4.0.0, operator is always *
result = ((Double)referenceValue + (((Double)referenceValue * coefficient)
* ((2 * (Double)identifier - 1))));
} else {
result = ((Double)identifier * ((Double)maxBound - (Double)minBound))
+ (Double)minBound;
- }*/
+ }
return result;
- }
-
+ }*/
+
/**
* Accept a new visitor.
*
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -35,7 +35,7 @@
/**
* Un domain discret a un ensemble de valeur.
- * Chaque valeur est identifiée par un label pour sont utilisation par les
+ * Chaque valeur est identifiée par un label pour son utilisation par les
* script d'AS.
*
* @author chatellier
@@ -62,7 +62,7 @@
}
/**
- * Get domaine values.
+ * Get domain values.
*
* @return the values
*/
@@ -80,10 +80,29 @@
}
/**
+ * Set domain value.
+ *
+ * @param key the key
+ * @param value the value
+ */
+ public void putValue(Object key, Object value) {
+ this.values.put(key, value);
+ }
+
+ /**
+ * Get domain value count.
+ *
+ * @return domain value count
+ */
+ public int getValuesCount() {
+ return values.size();
+ }
+
+ /*
* {@inheritDoc}.
*
* @throws IllegalArgumentException if identifier is not a valid key
- */
+ *
public Object getValueForIdentifier(Object identifier)
throws IllegalArgumentException {
@@ -93,7 +112,7 @@
}
return values.get(identifier);
- }
+ }*/
/**
* Accept a new visitor.
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -35,7 +35,6 @@
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.nuiton.j2r.RException;
import org.nuiton.j2r.RProxy;
@@ -80,11 +79,11 @@
}
/**
- * Build a test design plan with only continuous factors.
+ * Build a test design plan with continuous factors unsing uniform distribution.
*
* @return test design plan
*/
- protected DesignPlan getContinuousDesignPlan() {
+ protected DesignPlan getPlanUniformDistrib() {
DesignPlan result = new DesignPlan();
@@ -106,34 +105,97 @@
factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
result.addFactor(factor2);
-// // matrix 1
-// MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
-// new int[] { 3, 2 }, new String[] { "col1", "col2" });
-// matrix1.setValue(new int[] { 0, 0 }, 1);
-// matrix1.setValue(new int[] { 0, 1 }, -14);
-// matrix1.setValue(new int[] { 1, 0 }, 21);
-// matrix1.setValue(new int[] { 1, 1 }, 2);
-// matrix1.setValue(new int[] { 2, 0 }, 3);
-// matrix1.setValue(new int[] { 2, 1 }, -1);
-//
-// // factor
-// Factor factor2 = new Factor("testmatrix");
-// ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
-// domain2.addDistributionParam("reference", matrix1);
-// domain2.addDistributionParam("coefficient", 0.1);
-// factor2.setDomain(domain2);
-// factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
-// result.addFactor(factor2);
+ return result;
+ }
+
+ /**
+ * Build a test design plan with continuous factors uning uniform distribution
+ * and matrix.
+ *
+ * @return test design plan
+ */
+ protected DesignPlan getPlanUniformDistribMatrix() {
+ DesignPlan result = new DesignPlan();
+
+ // factor 1, min/max on int
+ Factor factor1 = new Factor("testint");
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 2.0);
+ factor1.setDomain(domain1);
+ factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor1);
+
+ // matrix 1
+ MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
+ new int[] { 3, 2 }, new String[] { "col1", "col2" });
+ matrix1.setValue(new int[] { 0, 0 }, 1);
+ matrix1.setValue(new int[] { 0, 1 }, -14);
+ matrix1.setValue(new int[] { 1, 0 }, 21);
+ matrix1.setValue(new int[] { 1, 1 }, 2);
+ matrix1.setValue(new int[] { 2, 0 }, 3);
+ matrix1.setValue(new int[] { 2, 1 }, -1);
+
+ // factor
+ Factor factor2 = new Factor("testmatrix");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain2.addDistributionParam("reference", matrix1);
+ domain2.addDistributionParam("coefficient", 0.1);
+ factor2.setDomain(domain2);
+ factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+ result.addFactor(factor2);
+
return result;
}
/**
+ * Build a test design plan with continuous factors uning uniform distribution
+ * and matrix.
+ *
+ * @return test design plan
+ */
+ protected DesignPlan getPlanNormCauchyDistribMatrix() {
+
+ DesignPlan result = new DesignPlan();
+
+ // factor 1, min/max on int
+ Factor factor1 = new Factor("testint");
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.DCHISQ);
+ domain1.addDistributionParam("df", 1.0);
+ domain1.addDistributionParam("ncp", 3.0);
+ factor1.setDomain(domain1);
+ factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor1);
+
+ // matrix 1
+ MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
+ new int[] { 3, 2 }, new String[] { "col1", "col2" });
+ matrix1.setValue(new int[] { 0, 0 }, 1);
+ matrix1.setValue(new int[] { 0, 1 }, -14);
+ matrix1.setValue(new int[] { 1, 0 }, 21);
+ matrix1.setValue(new int[] { 1, 1 }, 2);
+ matrix1.setValue(new int[] { 2, 0 }, 3);
+ matrix1.setValue(new int[] { 2, 1 }, -1);
+
+ // factor
+ Factor factor2 = new Factor("testmatrix");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain2.addDistributionParam("min", matrix1);
+ domain2.addDistributionParam("max", matrix1);
+ factor2.setDomain(domain2);
+ factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+ result.addFactor(factor2);
+
+ return result;
+ }
+
+ /**
* Build a test design plan with only continuous factors.
*
* @return test design plan
*/
- protected DesignPlan getOtherDistribDesignPlan() {
+ protected DesignPlan getPlanNormCauchyDistrib() {
DesignPlan result = new DesignPlan();
@@ -155,25 +217,32 @@
factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
result.addFactor(factor2);
-// // matrix 1
-// MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
-// new int[] { 3, 2 }, new String[] { "col1", "col2" });
-// matrix1.setValue(new int[] { 0, 0 }, 1);
-// matrix1.setValue(new int[] { 0, 1 }, -14);
-// matrix1.setValue(new int[] { 1, 0 }, 21);
-// matrix1.setValue(new int[] { 1, 1 }, 2);
-// matrix1.setValue(new int[] { 2, 0 }, 3);
-// matrix1.setValue(new int[] { 2, 1 }, -1);
-//
-// // factor
-// Factor factor2 = new Factor("testmatrix");
-// ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
-// domain2.addDistributionParam("reference", matrix1);
-// domain2.addDistributionParam("coefficient", 0.1);
-// factor2.setDomain(domain2);
-// factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
-// result.addFactor(factor2);
+ return result;
+ }
+
+ protected DesignPlan getPlanDiscreteInt() {
+ DesignPlan result = new DesignPlan();
+
+ // factor 1, min/max on int
+ Factor factor1 = new Factor("lnorm");
+ DiscreteDomain domain1 = new DiscreteDomain();
+ Map<Object> obj = new Hash
+ domain1.setValues(values);
+ domain1.addDistributionParam("sdlog", 1.0);
+ factor1.setDomain(domain1);
+ factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor1);
+
+ // factor 1, min/max on int
+ Factor factor2 = new Factor("cauchy");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.DCAUCHY);
+ domain2.addDistributionParam("location", 0.0);
+ domain2.addDistributionParam("scale", 1.0);
+ factor2.setDomain(domain2);
+ factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor2);
+
return result;
}
@@ -194,13 +263,28 @@
* @throws SensitivityException
*/
@Test
- public void testMorris() throws IsisFishException, SensitivityException {
+ public void testMorrisUniform() throws IsisFishException, SensitivityException {
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("Morris script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+ Assert.assertEquals(3, scenarii.getScenarios().size());
+ }
+
+ /**
+ * Test de génération des scenarios via la methode Morris.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test(expected=SensitivityException.class)
+ public void testMorrisNorm() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("Morris script not found in test data", script);
+ DesignPlan designPlan = getPlanNormCauchyDistrib();
+ script.compute(designPlan, simulationsDir);
}
/**
@@ -214,7 +298,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("DOptimal").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("DOptimal script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -230,7 +314,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Fast").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("Fast script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -246,7 +330,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("OptimumLHS").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("OptimumLHS script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -262,7 +346,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RandomLHS").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("RandomLHS script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -278,7 +362,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularExpandGrid").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("RegularExpandGrid script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -294,7 +378,7 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularFractions").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("RegularFractions script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
}
@@ -310,12 +394,12 @@
SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Sobol").getNewSensitivityAnalysisInstance();
Assert.assertNotNull("Sobol script not found in test data", script);
- DesignPlan designPlan = getContinuousDesignPlan();
+ DesignPlan designPlan = getPlanUniformDistrib();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
Assert.assertEquals(80, scenarii.getScenarios().size());
- designPlan = getOtherDistribDesignPlan();
+ designPlan = getPlanNormCauchyDistrib();
scenarii = script.compute(designPlan, simulationsDir);
Assert.assertEquals(80, scenarii.getScenarios().size());
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -117,8 +117,7 @@
// vector += (min + (i * (max - min) / (card - 1))) + ",";
// }
} else {
- Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
- int nbValues = values.size();
+ int nbValues = ((DiscreteDomain) domain).getValuesCount();
for (int i = 0; i < nbValues; i++) {
vector += "as.integer(" + i + "),";
}
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -85,14 +85,9 @@
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- //Test all factors, if one is discrete, return null
- for (int i = 0; i < factorNumber; i++) {
- if (factors.get(i).getDomain() instanceof DiscreteDomain) {
- throw new SensitivityException(factors.get(i).getName() +
- " has a discrete domain, this is not acceptable for fast " +
- "method.");
- }
- }
+ // only run with continuous
+ checkAllFactorContinuous(factors);
+
String rInstruction = "a<-fast99(" +
"model=NULL," +
"factors=%s, " +
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -84,7 +84,7 @@
param_r = 4;
}
- checkAllFactorContinuous(factors);
+ checkAllUniformDistribution(factors);
// Creating the vectors.
String factorNames = "";
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -112,8 +112,7 @@
}
if (domain instanceof DiscreteDomain) {
- Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
- int nbValues = values.size();
+ int nbValues = ((DiscreteDomain) domain).getValuesCount();
for (int i = 0; i < nbValues; i++) {
vector += "as.integer(" + i + "),";
}
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2013-11-08 16:51:41 UTC (rev 3832)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2013-11-14 21:01:30 UTC (rev 3833)
@@ -87,6 +87,8 @@
String factorNames = "";
//Test all factors, if one is discrete, return null
+ checkAllFactorContinuous(factors);
+
//Create a string with all factors names
for (int i = 0; i < factorNumber; i++) {
Domain domain = factors.get(i).getDomain();
@@ -95,12 +97,6 @@
}
factorNames += "\"" + factors.get(i).getName() + "\"";
-
- if (domain instanceof DiscreteDomain) {
- throw new SensitivityException(factors.get(i).getName() +
- " has a discrete domain, this is not acceptable for " +
- "this method.");
- }
}
try {
1
0
r3832 - in branches/4.0.1/src/test: java/fr/ifremer/isisfish/simulator/sensitivity resources/test-database/sensitivityanalysis resources/test-database/simulationplans
by jcouteau@users.forge.codelutin.com 08 Nov '13
by jcouteau@users.forge.codelutin.com 08 Nov '13
08 Nov '13
Author: jcouteau
Date: 2013-11-08 17:51:41 +0100 (Fri, 08 Nov 2013)
New Revision: 3832
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3832
Log:
Make Sobol work with all distributions (no equation, no matrix)
Modified:
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java
branches/4.0.1/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -60,17 +60,14 @@
/** Simulation dir used to save Rdata files. */
protected File simulationsDir;
- @BeforeClass
- public static void init() {
- System.setProperty("R.type", "jni");
- }
-
/**
* Ces tests utilisent directement le moteur R, s'il n'est pas disponible,
* on va eviter de faire les tests.
*/
@Before
public void setUp() {
+
+ System.setProperty("R.type", "jni");
try {
new RProxy();
} catch (RException e) {
@@ -95,34 +92,92 @@
Factor factor1 = new Factor("testint");
ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
domain1.addDistributionParam("min", 0.0);
- domain1.addDistributionParam("max", 50.0);
+ domain1.addDistributionParam("max", 2.0);
factor1.setDomain(domain1);
factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
result.addFactor(factor1);
- // matrix 1
- MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
- new int[] { 3, 2 }, new String[] { "col1", "col2" });
- matrix1.setValue(new int[] { 0, 0 }, 1);
- matrix1.setValue(new int[] { 0, 1 }, -14);
- matrix1.setValue(new int[] { 1, 0 }, 21);
- matrix1.setValue(new int[] { 1, 1 }, 2);
- matrix1.setValue(new int[] { 2, 0 }, 3);
- matrix1.setValue(new int[] { 2, 1 }, -1);
-
- // factor
- Factor factor2 = new Factor("testmatrix");
- ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
- domain2.addDistributionParam("reference", matrix1);
- domain2.addDistributionParam("coefficient", 0.1);
+ // factor 1, min/max on int
+ Factor factor2 = new Factor("testint 2");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain2.addDistributionParam("min", 40.0);
+ domain2.addDistributionParam("max", 50.0);
factor2.setDomain(domain2);
- factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+ factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
result.addFactor(factor2);
+
+// // matrix 1
+// MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
+// new int[] { 3, 2 }, new String[] { "col1", "col2" });
+// matrix1.setValue(new int[] { 0, 0 }, 1);
+// matrix1.setValue(new int[] { 0, 1 }, -14);
+// matrix1.setValue(new int[] { 1, 0 }, 21);
+// matrix1.setValue(new int[] { 1, 1 }, 2);
+// matrix1.setValue(new int[] { 2, 0 }, 3);
+// matrix1.setValue(new int[] { 2, 1 }, -1);
+//
+// // factor
+// Factor factor2 = new Factor("testmatrix");
+// ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
+// domain2.addDistributionParam("reference", matrix1);
+// domain2.addDistributionParam("coefficient", 0.1);
+// factor2.setDomain(domain2);
+// factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+// result.addFactor(factor2);
return result;
}
/**
+ * Build a test design plan with only continuous factors.
+ *
+ * @return test design plan
+ */
+ protected DesignPlan getOtherDistribDesignPlan() {
+
+ DesignPlan result = new DesignPlan();
+
+ // factor 1, min/max on int
+ Factor factor1 = new Factor("lnorm");
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.DLNORM);
+ domain1.addDistributionParam("meanlog", 0.0);
+ domain1.addDistributionParam("sdlog", 1.0);
+ factor1.setDomain(domain1);
+ factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor1);
+
+ // factor 1, min/max on int
+ Factor factor2 = new Factor("cauchy");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.DCAUCHY);
+ domain2.addDistributionParam("location", 0.0);
+ domain2.addDistributionParam("scale", 1.0);
+ factor2.setDomain(domain2);
+ factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor2);
+
+// // matrix 1
+// MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
+// new int[] { 3, 2 }, new String[] { "col1", "col2" });
+// matrix1.setValue(new int[] { 0, 0 }, 1);
+// matrix1.setValue(new int[] { 0, 1 }, -14);
+// matrix1.setValue(new int[] { 1, 0 }, 21);
+// matrix1.setValue(new int[] { 1, 1 }, 2);
+// matrix1.setValue(new int[] { 2, 0 }, 3);
+// matrix1.setValue(new int[] { 2, 1 }, -1);
+//
+// // factor
+// Factor factor2 = new Factor("testmatrix");
+// ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
+// domain2.addDistributionParam("reference", matrix1);
+// domain2.addDistributionParam("coefficient", 0.1);
+// factor2.setDomain(domain2);
+// factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+// result.addFactor(factor2);
+
+ return result;
+ }
+
+ /**
* Test tmp files/dir.
*
* @throws IOException
@@ -257,6 +312,13 @@
DesignPlan designPlan = getContinuousDesignPlan();
SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
-
+
+ Assert.assertEquals(80, scenarii.getScenarios().size());
+
+ designPlan = getOtherDistribDesignPlan();
+ scenarii = script.compute(designPlan, simulationsDir);
+
+ Assert.assertEquals(80, scenarii.getScenarios().size());
+
}
}
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -109,13 +109,13 @@
if (domain instanceof ContinuousDomain) {
ContinuousDomain contDomain = (ContinuousDomain) domain;
int card = factor.getCardinality();
- Double min = contDomain.getCalculatorMinBound();
- Double max = contDomain.getCalculatorMaxBound();
-
- for (int i = 0; i < card; i++) {
- //add the ith value
- vector += (min + (i * (max - min) / (card - 1))) + ",";
- }
+// Double min = contDomain.getCalculatorMinBound();
+// Double max = contDomain.getCalculatorMaxBound();
+//
+// for (int i = 0; i < card; i++) {
+// //add the ith value
+// vector += (min + (i * (max - min) / (card - 1))) + ",";
+// }
} else {
Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
int nbValues = values.size();
@@ -202,9 +202,9 @@
if (domain instanceof ContinuousDomain){
ContinuousDomain contDomain = (ContinuousDomain)domain;
distribution += "\"qunif\"";
- parameters += "\"[" + contDomain.getMinBound()
- + ";" + contDomain.getMaxBound()
- + "]\"";
+// parameters += "\"[" + contDomain.getMinBound()
+// + ";" + contDomain.getMaxBound()
+// + "]\"";
} else {
DiscreteDomain discDomain = (DiscreteDomain)domain;
distribution += "\"discrete\"";
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -35,8 +35,6 @@
import fr.ifremer.isisfish.simulator.SimulationParameter;
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;
import org.nuiton.j2r.types.RDataFrame;
@@ -165,8 +163,8 @@
}
distribution += "\"qunif\"";
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
+// parameters += "\"[" + domain.getMinBound() + ";" +
+// domain.getMaxBound() + "]\"";
factorNames += "\"" + factor.getName() + "\"";
}
engine.voidEval(String.format(factorDistribution, factorNames,
@@ -200,17 +198,17 @@
for (int i = 0; i < factorNumber; i++) {
Factor factor = plan.getFactors().get(i);
Domain domain = factor.getDomain();
- if ((domain instanceof MatrixContinuousDomain)
- || (domain instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(dataFrame.get(i,j));
- } else {
- ContinuousDomain continuousDomain = (ContinuousDomain)domain;
- Double min = continuousDomain.getCalculatorMinBound();
- Double max = continuousDomain.getCalculatorMaxBound();
- Double dFValue = (Double)dataFrame.get(i,j);
- Double value = min + (max - min) * dFValue;
- factor.setValueForIdentifier(value);
- }
+// if ((domain instanceof MatrixContinuousDomain)
+// || (domain instanceof EquationContinuousDomain)) {
+// factor.setValueForIdentifier(dataFrame.get(i,j));
+// } else {
+// ContinuousDomain continuousDomain = (ContinuousDomain)domain;
+// Double min = continuousDomain.getCalculatorMinBound();
+// Double max = continuousDomain.getCalculatorMaxBound();
+// Double dFValue = (Double)dataFrame.get(i,j);
+// Double value = min + (max - min) * dFValue;
+// factor.setValueForIdentifier(value);
+// }
experimentScenario.addFactor(factor);
}
thisExperimentScenarios.add(experimentScenario);
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -25,14 +25,10 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.export.SensitivityExport;
import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.SensitivityException;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.*;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.util.Doc;
+import org.apache.commons.lang3.StringUtils;
import org.nuiton.j2r.REngine;
import org.nuiton.j2r.RException;
import org.nuiton.j2r.RProxy;
@@ -40,6 +36,7 @@
import java.io.File;
import java.util.List;
+import java.util.Map;
/**
* Implementation of Morris method using R.
@@ -87,7 +84,7 @@
param_r = 4;
}
- testNoDiscrete(factors);
+ checkAllFactorContinuous(factors);
// Creating the vectors.
String factorNames = "";
@@ -112,9 +109,10 @@
gridJump += factor.getCardinality() / 2;
- binf += domain.getCalculatorMinBound();
-
- bsup += domain.getCalculatorMaxBound();
+ //binf += domain.getCalculatorMinBound();
+ binf+=0;
+ bsup+=0;
+ //bsup += domain.getCalculatorMaxBound();
}
String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s," +
@@ -128,7 +126,7 @@
rCall = editRInstruction(rCall);
}
- REngine engine = null;
+ REngine engine;
try {
engine = new RProxy();
@@ -178,9 +176,17 @@
parameters += ",";
}
- distribution += "\"qunif\"";
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
+ Distribution r_distribution = domain.getDistribution();
+
+ distribution += "\""+ r_distribution.getInstruction() +"\"";
+ parameters += "\"[";
+
+ for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){
+ parameters += param.getKey() + "=" + param.getValue() + ";";
+ }
+
+ parameters = StringUtils.removeEnd(parameters,";");
+ parameters += "]\"";
}
engine.voidEval(String.format(factorDistribution, factorNames,
distribution, parameters));
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -82,7 +82,7 @@
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
//Test all factors, if one is discrete, return null
- testNoDiscrete(factors);
+ checkAllFactorContinuous(factors);
try {
REngine engine = new RProxy();
@@ -148,8 +148,8 @@
factorNames += "\"" + factors.get(i).getName() + "\"";
distribution += "\"qunif\"";
//add [min;max] to parameters
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
+// parameters += "\"[" + domain.getMinBound() + ";" +
+// domain.getMaxBound() + "]\"";
}
engine.voidEval(String.format(isisFactorDistribution, factorNames,
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -78,7 +78,7 @@
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios
List<Factor> factors = plan.getFactors(); //The factors
- testNoDiscrete(factors);
+ checkAllFactorContinuous(factors);
try {
@@ -144,9 +144,9 @@
factorNames += "\"" + factors.get(i).getName() + "\"";
distribution += "\"qunif\""; //all distributions are qunif
- double min = domain.getCalculatorMinBound();
- double max = domain.getCalculatorMaxBound();
- parameters += "\"[" + min + ";" + max + "]\"";
+// double min = domain.getCalculatorMinBound();
+// double max = domain.getCalculatorMaxBound();
+// parameters += "\"[" + min + ";" + max + "]\"";
}
engine.voidEval(String.format(isisFactorDistribution, factorNames,
distribution, parameters));
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -102,13 +102,13 @@
if (domain instanceof ContinuousDomain) {
ContinuousDomain contDomain = (ContinuousDomain) domain;
int card = factor.getCardinality();
- Double min = contDomain.getCalculatorMinBound();
- Double max = contDomain.getCalculatorMaxBound();
-
- for (int i = 0; i < card; i++) {
- //add the ith value
- vector += (min + (i * (max - min) / (card - 1))) + ",";
- }
+// Double min = contDomain.getCalculatorMinBound();
+// Double max = contDomain.getCalculatorMaxBound();
+//
+// for (int i = 0; i < card; i++) {
+// //add the ith value
+// vector += (min + (i * (max - min) / (card - 1))) + ",";
+// }
}
if (domain instanceof DiscreteDomain) {
@@ -178,9 +178,9 @@
if (domain instanceof ContinuousDomain){
ContinuousDomain contDomain = (ContinuousDomain)domain;
distribution += "\"qunif\"";
- parameters += "\"[" + contDomain.getMinBound()
- + ";" + contDomain.getMaxBound()
- + "]\"";
+// parameters += "\"[" + contDomain.getMinBound()
+// + ";" + contDomain.getMaxBound()
+// + "]\"";
} else {
DiscreteDomain discDomain = (DiscreteDomain)domain;
distribution += "\"discrete\"";
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -42,8 +42,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.EquationContinuousDomain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
import fr.ifremer.isisfish.util.Doc;
public class RegularFractions extends AbstractSensitivityAnalysis {
@@ -159,16 +157,16 @@
Factor factor = plan.getFactors().get(i);
Domain domain = factor.getDomain();
Double dFValue = (Double)dataFrame.get(i,j);
- if ((domain instanceof MatrixContinuousDomain)
- || (domain instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(dFValue);
- } else {
- ContinuousDomain contDomain = (ContinuousDomain)domain;
- Double max = contDomain.getCalculatorMaxBound();
- Double min = contDomain.getCalculatorMinBound();
- Double value = min + (max - min) * dFValue / (param_p - 1);
- factor.setValueForIdentifier(value);
- }
+// if ((domain instanceof MatrixContinuousDomain)
+// || (domain instanceof EquationContinuousDomain)) {
+// factor.setValueForIdentifier(dFValue);
+// } else {
+// ContinuousDomain contDomain = (ContinuousDomain)domain;
+// Double max = contDomain.getCalculatorMaxBound();
+// Double min = contDomain.getCalculatorMinBound();
+// Double value = min + (max - min) * dFValue / (param_p - 1);
+// factor.setValueForIdentifier(value);
+// }
experimentScenario.addFactor(factor);
}
thisExperimentScenarios.add(experimentScenario);
Modified: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -24,20 +24,16 @@
import java.io.File;
import java.util.List;
+import java.util.Map;
import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.sensitivity.*;
+import org.apache.commons.lang3.StringUtils;
import org.nuiton.j2r.REngine;
import org.nuiton.j2r.RProxy;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.util.Doc;
import org.nuiton.j2r.types.RDataFrame;
@@ -86,7 +82,7 @@
SensitivityScenarios thisExperiment = new SensitivityScenarios();
List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- testNoDiscrete(factors);
+ checkAllFactorContinuous(factors);
String rInstruction = "a<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)";
String rCall = String.format(rInstruction, param_nboot);
@@ -107,11 +103,32 @@
engine.voidEval("library(sensitivity)");
- engine.voidEval("X1<-data.frame(matrix(runif(" + factorNumber + "*"
- + param_n + "),nrow=" + param_n + "))");
- engine.voidEval("X2<-data.frame(matrix(runif(" + factorNumber + "*"
- + param_n + "),nrow=" + param_n + "))");
+ String x = "<-data.frame(matrix(c(";
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = factors.get(i);
+ ContinuousDomain domain = (ContinuousDomain)factor.getDomain();
+
+ Distribution r_distribution = domain.getDistribution();
+
+ x += r_distribution.getInstruction() +"("+param_n+",";
+
+ for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){
+ x += param.getKey() + "=" + param.getValue() + ",";
+ }
+
+ x = StringUtils.removeEnd(x, ",");
+
+ x+= "),";
+ }
+
+ x = StringUtils.removeEnd(x, ",");
+
+ x+="),nrow="+param_n+"))";
+
+ engine.voidEval("X1"+x);
+ engine.voidEval("X2"+x);
+
engine.voidEval(rCall);
// Creating the factors vector.
@@ -147,18 +164,25 @@
for (int i = 0; i < factorNumber; i++) {
Factor factor = factors.get(i);
- Domain domain = factor.getDomain();
+ ContinuousDomain domain = (ContinuousDomain)factor.getDomain();
if (i != 0) {
distribution += ",";
parameters += ",";
factorNames += ",";
}
- distribution += "\"qunif\"";
- ContinuousDomain continuousDomain = (ContinuousDomain) domain;
- double min = continuousDomain.getCalculatorMinBound();
- double max = continuousDomain.getCalculatorMaxBound();
- parameters += "\"[" + min + ";" + max + "]\"";
+ Distribution r_distribution = domain.getDistribution();
+
+ distribution += "\""+ r_distribution.getInstruction() +"\"";
+ parameters += "\"[";
+
+ for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){
+ parameters += param.getKey() + "=" + param.getValue() + ";";
+ }
+
+ parameters = StringUtils.removeEnd(parameters, ";");
+ parameters += "]\"";
+
factorNames += "\"" + factor.getName() + "\"";
}
Modified: branches/4.0.1/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java 2013-11-08 14:25:47 UTC (rev 3831)
+++ branches/4.0.1/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java 2013-11-08 16:51:41 UTC (rev 3832)
@@ -29,6 +29,7 @@
import java.util.Collections;
import java.util.List;
+import fr.ifremer.isisfish.util.ScriptUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.math.matrix.MatrixIterator;
@@ -384,7 +385,7 @@
exportHisto += experiences.getExperience(number).q1 + ";"
+ experiences.getExperience(number).q2 + ";"
+ experiences.getExperience(number).criteria + "\n";
- org.nuiton.util.FileUtil.writeString(exportHistoric, exportHisto);
+ ScriptUtil.writeString(exportHistoric, exportHisto);
return doNext;
}// fin du after simulation
1
0
r3831 - branches/4.0.1/src/test/resources/test-database/sensitivityanalysis
by echatellier@users.forge.codelutin.com 08 Nov '13
by echatellier@users.forge.codelutin.com 08 Nov '13
08 Nov '13
Author: echatellier
Date: 2013-11-08 15:25:47 +0100 (Fri, 08 Nov 2013)
New Revision: 3831
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3831
Log:
Use renamed AS scripts
Added:
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java
Removed:
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java
branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,405 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.*;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+import fr.ifremer.isisfish.util.Doc;
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.j2r.types.RDataFrame;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * User: couteau
+ * Date: 14 janv. 2010
+ * Time: 11:58:09
+ */
+public class DOptimal extends AbstractSensitivityAnalysis {
+
+ @Doc("True to be able to modify the code sent to R")
+ public boolean param_modifR = false;
+
+ @Doc("Order")
+ public int param_order=1;
+
+ /**
+ * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
+ * continue.
+ *
+ * @return <tt>true</tt> s'il sait la gerer
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return false;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ //extract the factors from the design plan
+ List<Factor> factors = plan.getFactors();
+ int factorsNb = factors.size();
+
+ try {
+ REngine engine = new RProxy();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.voidEval("library(AlgDesign)");
+
+ //Create a list of the factors under the form factor1=factor1,...
+ String factorsNames = "";
+
+ //Create a list of the factors under the form factor1,factor2,...
+ String factorNames = "";
+
+ //Create a list of the factors under the form factor1+factor2+...
+ String factorPlus="";
+
+ //create the factors vectors
+ for (Factor factor : factors) {
+ //The factor values vector
+ String factorName = factor.getName().replaceAll(" ", "");
+ factorsNames += factorName + "=" + factorName + ",";
+ factorNames += factorName + ",";
+ factorPlus += factorName + "+";
+
+ String vector = factorName + "<-c(";
+
+ Domain domain = factor.getDomain();
+
+ if (domain instanceof ContinuousDomain) {
+ ContinuousDomain contDomain = (ContinuousDomain) domain;
+ int card = factor.getCardinality();
+ Double min = contDomain.getCalculatorMinBound();
+ Double max = contDomain.getCalculatorMaxBound();
+
+ for (int i = 0; i < card; i++) {
+ //add the ith value
+ vector += (min + (i * (max - min) / (card - 1))) + ",";
+ }
+ } else {
+ Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
+ int nbValues = values.size();
+ for (int i = 0; i < nbValues; i++) {
+ vector += "as.integer(" + i + "),";
+ }
+ }
+
+ vector = vector.substring(0, vector.length() - 1);
+
+ vector += ")";
+
+ engine.voidEval(vector);
+
+
+ }
+
+ factorsNames = factorsNames.substring(0,factorsNames.length()-1);
+ factorNames = factorNames.substring(0,factorNames.length()-1);
+ factorPlus = factorPlus.substring(0,factorPlus.length()-1);
+
+
+ //X<-expand.grid(vector=???,weight=???)
+ String expandGrid = "expandgrid<-expand.grid(%s)";
+
+
+
+ String rCall = String.format(expandGrid,factorsNames);
+
+ engine.voidEval(rCall);
+
+ if (param_order ==1 ){
+ rCall = "x<-optFederov(~(%s),data=expandgrid, " +
+ "approximate =FALSE, center=F, criterion = \"D\"," +
+ "nRepeats=10)";
+ } else {
+ rCall = "x<-optFederov(~(%s)^"+param_order+",data=expandgrid, " +
+ "approximate =FALSE, center=F, criterion = \"D\"," +
+ "nRepeats=10)";
+ }
+
+ rCall = String.format(rCall,factorPlus);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ engine.voidEval("runif(1)");
+
+ engine.voidEval(rCall);
+
+ engine.eval("expPlan<-as.data.frame(x$design)");
+ RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+ int nbExperiments = (Integer)engine.eval("dim(x$design)[1]");
+
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorsNb; i++) {
+ Factor factor = factors.get(i);
+ factor.setValueForIdentifier(dataFrame.get(i, j));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+
+ String factorDistribution = "isis.factor.distribution<-data.frame(" +
+ "NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ String distribution = "";
+ String parameters = "";
+
+ for (int i = 0; i < factorsNb; i++) {
+ Domain domain = factors.get(i).getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ }
+ if (domain instanceof ContinuousDomain){
+ ContinuousDomain contDomain = (ContinuousDomain)domain;
+ distribution += "\"qunif\"";
+ parameters += "\"[" + contDomain.getMinBound()
+ + ";" + contDomain.getMaxBound()
+ + "]\"";
+ } else {
+ DiscreteDomain discDomain = (DiscreteDomain)domain;
+ distribution += "\"discrete\"";
+ parameters+="\"[";
+ Map<Object, Object> values = discDomain.getValues();
+ int count=0;
+ Collection<Object> collecValues = values.values();
+ for (Object value:collecValues){
+ if (count!=0){
+ parameters += ",";
+ }
+ parameters += StringUtils.replace(value.toString(), "\"", "\\\"") ;
+ count++;
+ }
+ parameters+="]\"";
+ }
+ }
+ engine.voidEval(String.format(factorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-\"" + rCall + "\"");
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("isis.simule<-x$design");
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+
+ } catch (RException eee) {
+ throw new SensitivityException("Can't generate scenarios", eee);
+ }
+
+ return thisExperiment;
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Get back the factors number
+ int factorNumber = (Integer)engine.eval("dim(x$design)[2]");
+
+ SimulationParameter param = simulationStorages.get(0).getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+
+ SimulationStorage firstStorage = simulationStorages.get(0);
+
+ String firstStorageName = firstStorage.getName().replaceAll("-", "");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String name = sensitivityExport.getExportFilename();
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule,"
+ + name + ")");
+
+ //Create the dataforaov data.frame
+ String dataFrame = "dataforaov<-data.frame(x$design,"
+ + name + "=" + name + ")";
+ engine.voidEval(dataFrame);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~(";
+ for (int j = 0; j < factorNumber; j++) {
+ if (j < (factorNumber - 1)) {
+ aovCall = aovCall
+ + engine.eval("names(x$design)[" + (j + 1) + "]")
+ + "+";
+ } else {
+ aovCall = aovCall
+ + engine.eval("names(x$design)[" + (j + 1) + "]")
+ + ")";
+ if(param_order>1){
+ aovCall+="^" + param_order + ",data=dataforaov)";
+ }else{
+ aovCall+=",data=dataforaov)";
+ }
+ }
+ }
+ engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
+ engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity<-data.frame(" +
+ "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
+ "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
+ engine.voidEval("names(exportsensitivity)<-c(" +
+ "\"Sum Of Squares\"," +
+ "\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
+
+
+ //Set dataforaov names
+ engine.voidEval("resultsnames<-c(names(x$design),\"Result\")");
+ engine.voidEval("names(dataforaov)<-resultsnames");
+
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.setwd(outputDirectory);
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\""
+ + param.getSensitivityExport().get(k)
+
+ .getExportFilename() + "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\""
+ + param.getSensitivityExport().get(k)
+ .getExportFilename()
+ + "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ engine.voidEval("isis.methodAnalyse<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"isis.simule\"=isis.simule," +
+ "\"call_method\"=\"" + aovCall + "\"," +
+ "\"analysis_result\"=list(aovresult,IndSensibilite))");
+
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ firstStorageName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, firstStorageName);
+
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(firstStorageName)){
+ engine.remove(object);
+ }
+ }
+
+ //Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of D optimal method method using R, needs" +
+ "AlgDesign package to work";
+ }
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,358 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import java.io.File;
+import java.util.List;
+
+import fr.ifremer.isisfish.simulator.sensitivity.*;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+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;
+import org.nuiton.j2r.types.RDataFrame;
+
+/**
+ * Implementation of Fast method using R.
+ *
+ * @author jcouteau
+ * @version $Revision$
+ *
+ * Last update : $Date$ By :
+ * $Author$
+ */
+public class Fast extends AbstractSensitivityAnalysis {
+
+ @Doc("an integer giving the sample size, i.e. the length of the " +
+ "discretization of the s-space (see Cukier et al.). (default=20)")
+ public int param_n = 20;
+
+ @Doc("an integer specifying the interference parameter, i.e. the number " +
+ "of harmonics to sum in the Fourier series decomposition (see Cukier et " +
+ "al.). (default=6)")
+ public int param_M = 6;
+
+ @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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ RDataFrame dataFrame;
+ int nbExperiments;
+ int factorNumber = plan.getFactors().size();
+ List<Factor> factors = plan.getFactors();
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+
+ //Test all factors, if one is discrete, return null
+ for (int i = 0; i < factorNumber; i++) {
+ if (factors.get(i).getDomain() instanceof DiscreteDomain) {
+ throw new SensitivityException(factors.get(i).getName() +
+ " has a discrete domain, this is not acceptable for fast " +
+ "method.");
+ }
+ }
+ String rInstruction = "a<-fast99(" +
+ "model=NULL," +
+ "factors=%s, " +
+ "n=%s, " +
+ "M=%s, " +
+ "q = \"qunif\", " +
+ "q.arg=list(min=0,max=1))";
+ String rCall = String.format(rInstruction, factors.size(), param_n,
+ param_M);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ try {
+
+ REngine engine = new RProxy();
+
+ engine.clearSession();
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+
+ // Run sensitivity analysis
+ engine.voidEval(rCall);
+
+ // Creating the factors vector.
+ rInstruction = "factornames<-c(";
+ for (int i = 0; i < factorNumber; i++) {
+ String factorName = factors.get(i).getName();
+ if (i != (factorNumber - 1)) {
+ rInstruction += "\"" + factorName + "\",";
+ } else {
+ rInstruction += "\"" + factorName + "\"";
+ }
+ }
+
+ rInstruction += ")";
+
+ engine.voidEval(rInstruction);
+
+ // Get back experiment plan
+ dataFrame = (RDataFrame) engine.eval("a$X");
+ dataFrame.setVariable("a$X");
+
+ nbExperiments = (Integer)engine.eval("dim(a$X)[1]");
+
+ String factorDistribution = "isis.factor.distribution<-data.frame(" +
+ "NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ // Creating the vectors.
+ String distribution = "";
+ String parameters = "";
+ String factorNames = "";
+
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = factors.get(i);
+ ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ factorNames += ",";
+ }
+
+ distribution += "\"qunif\"";
+ parameters += "\"[" + domain.getMinBound() + ";" +
+ domain.getMaxBound() + "]\"";
+ factorNames += "\"" + factor.getName() + "\"";
+ }
+ engine.voidEval(String.format(factorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-a$call");
+
+
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+
+ engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+
+ engine.voidEval("isis.simule<-data.frame(a$X)");
+
+ engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Setting up the scenarios.
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = plan.getFactors().get(i);
+ Domain domain = factor.getDomain();
+ if ((domain instanceof MatrixContinuousDomain)
+ || (domain instanceof EquationContinuousDomain)) {
+ factor.setValueForIdentifier(dataFrame.get(i,j));
+ } else {
+ ContinuousDomain continuousDomain = (ContinuousDomain)domain;
+ Double min = continuousDomain.getCalculatorMinBound();
+ Double max = continuousDomain.getCalculatorMaxBound();
+ Double dFValue = (Double)dataFrame.get(i,j);
+ Double value = min + (max - min) * dFValue;
+ factor.setValueForIdentifier(value);
+ }
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+ } catch (RException eee) {
+ throw new SensitivityException("Can't generate scenarios", eee);
+ }
+ return thisExperiment;
+
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ SimulationStorage storage = simulationStorages.get(0);
+ String simulationName = storage.getName().replaceAll("-", "");
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.setwd(outputDirectory);
+
+ // Call R
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+
+ SimulationParameter param = simulationStorages.get(0).getParameter();
+
+ int sensitivityNumber = param.getSensitivityExport().size();
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+ engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = param.getSensitivityExport().get(k)
+ .getExportFilename();
+
+ //Compute results
+ engine.voidEval("tell(a,y=" + name + ")");
+
+ engine.voidEval("names(a$V)<-factornames");
+ engine.voidEval("names(a$X)<-factornames");
+ engine.voidEval("names(a$D1)<-factornames");
+ engine.voidEval("names(a$Dt)<-factornames");
+
+ //creating isis.methodAnalyse
+ 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 + ")" + "\"," +
+ "\"analysis_result\"=a)");
+
+ //setting isis.methodAnalyse attributes
+ engine.voidEval("attr(isis.methodAnalyse,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\")");
+
+ //Create the data.frame of scenarios and results for export purpose
+ engine.voidEval("dfresults<-data.frame(a$X,a$y)");
+
+ //Set working directory
+ engine.setwd(outputDirectory);
+
+ //Export V
+ engine.voidEval("write.csv(a$V,\"" + name + "_V.csv\")");
+
+ //Export D1
+ engine.voidEval("write.csv(a$D1,\"" + name + "_D1.csv\")");
+
+ //Export Dt
+ engine.voidEval("write.csv(a$Dt,\"" + name + "_Dt.csv\")");
+ //Set dfresults names
+ engine.voidEval("resultsnames<-c(factornames,\"Result\")");
+ engine.voidEval("names(dfresults)<-resultsnames");
+
+ //Export results
+ engine.voidEval("write.csv(dfresults,\"" + name +
+ "_Results.csv\")");
+ //FIXME export through java to enable export when using Rserve
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse" +
+ "<-isis.methodAnalyse";
+
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of FAST method using R (needs the sensitivity " +
+ "package to work)";
+ }
+
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,357 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
+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.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.util.Doc;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.j2r.types.RDataFrame;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Implementation of Morris method using R.
+ *
+ * @author jcouteau
+ * @version $Revision$
+ *
+ * Last update : $Date$ By :
+ * $Author$
+ */
+public class Morris extends AbstractSensitivityAnalysis {
+
+ @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;
+
+ @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
+ * continus.
+ *
+ * @return {@code true} s'il sait la gerer
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return false;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ RDataFrame dataFrame;
+ int nbExperiments;
+ int factorNumber = plan.getFactors().size();
+
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+
+ List<Factor> factors = plan.getFactors();
+
+ if (param_r == 0) {
+ param_r = 4;
+ }
+
+ testNoDiscrete(factors);
+
+ // Creating the vectors.
+ String factorNames = "";
+ String levels = "";
+ String gridJump = "";
+ String binf = "";
+ String bsup = "";
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = factors.get(i);
+ ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
+ if (i != 0) {
+ factorNames += ",";
+ levels += ",";
+ gridJump += ",";
+ binf += ",";
+ bsup += ",";
+ }
+
+ factorNames += "\"" + factor.getName() + "\"";
+
+ levels += factor.getCardinality();
+
+ gridJump += factor.getCardinality() / 2;
+
+ binf += domain.getCalculatorMinBound();
+
+ bsup += domain.getCalculatorMaxBound();
+ }
+
+ 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))";
+
+ String rCall = String.format(rInstruction, factorNames, param_r,
+ levels, gridJump, binf, bsup);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ REngine engine = null;
+
+ try {
+ engine = new RProxy();
+
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+
+ // Run sensitivity analysis
+ engine.voidEval(rCall);
+
+ // Creating the factors vector.
+ rInstruction = "factornames<-c(%s)";
+ rCall = String.format(rInstruction, factorNames);
+
+ engine.voidEval(rCall);
+
+ // Set output directory
+ engine.setwd(outputDirectory);
+
+ // Get back experiment plan
+ engine.eval("expPlan<-as.data.frame(a$X)");
+ dataFrame = (RDataFrame) engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+
+ nbExperiments = (Integer)engine.eval("dim(expPlan)[1]");
+
+ String factorDistribution = "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++) {
+ Factor factor = factors.get(i);
+ ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ }
+
+ distribution += "\"qunif\"";
+ parameters += "\"[" + domain.getMinBound() + ";" +
+ domain.getMaxBound() + "]\"";
+ }
+ engine.voidEval(String.format(factorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-a$call");
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+ engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+ engine.voidEval("isis.simule<-data.frame(expPlan)");
+ engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Setting up the scenarios.
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = factors.get(i);
+ factor.setValueForIdentifier(dataFrame.get(i, j));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+ } catch (RException eee) {
+ throw new SensitivityException("Can't generate scenarios", eee);
+ }
+
+ return thisExperiment;
+
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ SimulationStorage storage = simulationStorages.get(0);
+ String simulationName = storage.getName().replaceAll("-", "");
+
+ REngine engine = null;
+
+ try {
+ engine = new RProxy();
+
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Call R
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+
+ //Set the working directory (for exports)
+ engine.setwd(outputDirectory);
+
+ SimulationParameter param = simulationStorages.get(0)
+ .getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
+ "\"isis-fish-externe-R\"");
+
+ engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = param.getSensitivityExport().get(k)
+ .getExportFilename();
+
+ //Compute results
+ engine.voidEval("tell(a,y=" + name + ")");
+
+ //creating isis.methodAnalyse
+ 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 + ")" + "\"," +
+ "\"analysis_result\"=a)");
+
+ //setting isis.methodAnalyse attributes
+ 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)");
+ engine.voidEval("mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))");
+ engine.voidEval("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)");
+ engine.voidEval("row.names(df)<-factornames");
+
+ //Create the data.frame of scenarios and results for export purpose
+ engine.voidEval("dfresults<-data.frame(a$X," + name + ")");
+
+ //Set dfresults names
+ engine.voidEval("resultsnames<-c(factornames,\"Result\")");
+ engine.voidEval("names(dfresults)<-resultsnames");
+
+ //Export sensitivity indices
+ engine.voidEval("write.csv(df," +
+ "\"" + name + "_SensitivityIndices.csv\")");
+
+ //Export results
+ engine.voidEval("write.csv(dfresults," +
+ "\"" + name + "_Results.csv\")");
+ //FIXME export through java to enable export when using Rserve
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
+ "isis.methodAnalyse";
+
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine,simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Morris method using R (needs the sensitivity" +
+ " package to work)";
+ }
+
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,404 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import java.io.File;
+import java.util.List;
+
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RProxy;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
+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.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.util.Doc;
+import org.nuiton.j2r.types.RDataFrame;
+
+/**
+ * Implementation of Optimum Latin Hypercube method using R.
+ *
+ * @author jcouteau
+ * @version $Revision$
+ */
+public class OptimumLHS extends AbstractSensitivityAnalysis {
+
+ @Doc("Number of simulations (default=10)")
+ public int param_simulationNumber = 10;
+ @Doc("The maximum number of times the Columnwise Pairwise algorithm is applied to all the columns(default=2).")
+ public int param_MaxSweeps = 2;
+ @Doc("The optimal stopping criterion (between 0 and 1) (default=0.1).")
+ public double param_eps = 0.1;
+ @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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputdirectory);
+
+ int factorNumber = plan.getFactors().size();
+ List<Factor> factors = plan.getFactors();
+ RDataFrame dataFrame;
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+
+ //Test all factors, if one is discrete, return null
+ testNoDiscrete(factors);
+
+ try {
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Set working directory to get Isis R session
+ engine.loadRData(outputdirectory.getParentFile(),
+ outputdirectory.getName());
+
+ //Load the lhs library
+ engine.voidEval("library(lhs)");
+
+ String rInstruction = "x<-optimumLHS(n=%s,k=%s,maxSweeps=%s,eps=%s)";
+
+ String rCall = String.format(rInstruction, param_simulationNumber,
+ factorNumber, param_MaxSweeps, param_eps);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ //Create the scenarios
+ engine.voidEval(rCall);
+
+ // Get back experiment plan
+ engine.eval("expPlan<-as.data.frame(x)");
+ dataFrame = (RDataFrame)engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+
+ // Setting up the scenarios.
+ for (int j = 0; j < param_simulationNumber; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = plan.getFactors().get(i);
+ factor.setValueForIdentifier(dataFrame.get(i, j));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+ String isisFactorDistribution = "isis.factor.distribution<-" +
+ "data.frame(" +
+ "NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ String distribution = "";
+ String parameters = "";
+ String factorNames = "";
+
+ for (int i = 0; i < factors.size(); i++) {
+ Factor tempFactor = factors.get(i);
+ ContinuousDomain domain = (ContinuousDomain) tempFactor.getDomain();
+ if (i != 0) {
+ distribution += ",";
+ factorNames += ",";
+ parameters += ",";
+ }
+
+ factorNames += "\"" + factors.get(i).getName() + "\"";
+ distribution += "\"qunif\"";
+ //add [min;max] to parameters
+ parameters += "\"[" + domain.getMinBound() + ";" +
+ domain.getMaxBound() + "]\"";
+ }
+
+ engine.voidEval(String.format(isisFactorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-" + "\"x<-optimumLHS("
+ + "n=" + param_simulationNumber
+ + ",k=" + factorNumber
+ + ",maxSweeps=" + param_MaxSweeps
+ + ",eps=" + param_eps + ")\"");
+
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("isis.simule<-data.frame(x)");
+
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ String data = "data<-data.frame(";
+
+ //Create the factors vectors and the dataFrame instruction
+ for (int j = 0; j < factors.size(); j++) {
+ //The factor values vector
+ String vector;
+ //Get back the factor
+ Scenario scenario = thisExperimentScenarios.get(0);
+ Factor factor = scenario.getFactors().get(j);
+ String factorName = factor.getName().replaceAll(" ", "");
+
+ vector = factorName + "<-c(";
+ for (int i = 0; i < param_simulationNumber; i++) {
+ //Get back the displayed value the factor
+ Scenario tempScenario = thisExperimentScenarios.get(i);
+ Factor tempFactor = tempScenario.getFactors().get(j);
+ Object value = tempFactor.getDisplayedValue();
+
+ if (i < (param_simulationNumber - 1)) {
+ vector = vector + value + ",";
+ } else {
+ vector += value;
+ }
+
+ }
+ vector += ")";
+ engine.voidEval(vector);
+
+ if (j < factors.size() - 1) {
+ data += factorName + "=factor(" + factorName + "),";
+ } else {
+ data += factorName + "=factor(" + factorName + "))";
+ }
+ }
+ engine.voidEval(data);
+
+ // 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 += ")";
+
+ engine.voidEval(rInstruction);
+
+ // Save Isis R session
+ engine.saveRData(outputdirectory.getParentFile(),
+ outputdirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't generate scenarios", e);
+ }
+
+ return thisExperiment;
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ //The first storage to get the name and parameters all along the method
+ SimulationStorage storage = simulationStorages.get(0);
+
+ String simulationName = storage.getName().replaceAll("-", "");
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.voidEval("factors<-data.frame(x)");
+ engine.voidEval("names(factors)<-factornames");
+
+ //Get back the factors number
+ int factorNumber = (Integer) engine.eval("length(factors[1,])");
+ //Get back the simulation number
+ param_simulationNumber = (Integer) (engine.eval("length(factors[,1])"));
+
+ SimulationParameter param = storage.getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ SensitivityExport export = param.getSensitivityExport().get(k);
+ String name = export.getExportFilename();
+
+ //Create the dataforaov data.frame
+ String dataframe = "dataforaov<-data.frame(factors," +
+ name + "=" + name + ")";
+ engine.voidEval(dataframe);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~";
+ for (int j = 0; j < factorNumber; j++) {
+
+ String factorName = (String) engine.eval("names(factors)[" + (j + 1) + "]");
+ factorName = factorName.replaceAll(" ", ".");
+
+ if (j < (factorNumber - 1)) {
+ aovCall += factorName +
+ "+";
+ } else {
+ aovCall += factorName + ",data=dataforaov)";
+ }
+ }
+ engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
+ engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity<-data.frame(" +
+ "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
+ "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
+ engine.voidEval("names(exportsensitivity)<-c(" +
+ "\"Sum Of Squares\"," +
+ "\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
+
+
+ //Set dataforaov names
+ engine.voidEval("names(dataforaov)<-c(factornames,\"Result\")");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.setwd(outputDirectory);
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\"" +
+ name + "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\"" +
+ name + "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ engine.voidEval("isis.methodAnalyse<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"isis.simule\"=isis.simule," +
+ "call_method=\"" + aovCall + "\""+
+ ",\"analysis_result\"=list(aovresult,IndSensibilite))");
+
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
+ "isis.methodAnalyse";
+
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Random Latin Hypercube method method " +
+ "using R (needs 'lhs' package to work)";
+ }
+
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,402 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import java.io.File;
+import java.lang.String;
+import java.util.List;
+
+import fr.ifremer.isisfish.export.SensitivityExport;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.j2r.types.RDataFrame;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
+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.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.util.Doc;
+
+/**
+ * Implementation of Random Latin Hypercube method using R.
+ *
+ * @author jcouteau
+ * @version $Revision$
+ */
+public class RandomLHS extends AbstractSensitivityAnalysis {
+
+ @Doc("Simulation number (default=10)")
+ public int param_simulationNumber = 10;
+ @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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ int factorNumber = plan.getFactors().size();
+ RDataFrame dataFrame; //The dataframe to get back the scenarios from R
+ SensitivityScenarios thisExperiment = new SensitivityScenarios(); //The experiment we will build
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios
+ List<Factor> factors = plan.getFactors(); //The factors
+
+ testNoDiscrete(factors);
+
+ try {
+
+ REngine engine = new RProxy(); //The R engine
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Load the lhs library
+ engine.voidEval("library(lhs)");
+
+ //Create the scenarios
+ String rInstruction = "x<-randomLHS(%s,%s)";
+ String rCall = String.format(rInstruction, param_simulationNumber,
+ factorNumber);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ engine.voidEval(rCall);
+
+ // Get back experiment plan
+ engine.eval("expPlan<-as.data.frame(x)");
+ dataFrame = (RDataFrame)engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+
+ // Setting up the scenarios.
+ for (int j = 0; j < param_simulationNumber; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = plan.getFactors().get(i); //The factor we are setting
+ factor.setValueForIdentifier(dataFrame.get(i,j));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+ String isisFactorDistribution = "isis.factor.distribution<-" +
+ "data.frame(" +
+ "NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ String distribution = "";
+ String parameters = "";
+ String factorNames = "";
+
+
+ //Create the strings for the isis.MethodExp instruction
+ for (int i = 0; i < factors.size(); i++) {
+ ContinuousDomain domain = (ContinuousDomain)factors.get(i).getDomain();
+ if (i != 0) {
+ distribution += ","; //the distribution
+ factorNames += ","; //the factor names
+ parameters += ","; //the parameters
+ }
+
+ factorNames += "\"" + factors.get(i).getName() + "\"";
+ distribution += "\"qunif\""; //all distributions are qunif
+ double min = domain.getCalculatorMinBound();
+ double max = domain.getCalculatorMaxBound();
+ parameters += "\"[" + min + ";" + max + "]\"";
+ }
+ engine.voidEval(String.format(isisFactorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-" + "\"x<-randomLHS("
+ + param_simulationNumber + "," + factorNumber + ")\"");
+
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("isis.simule<-data.frame(x)");
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ String data = "data<-data.frame(";
+
+ //Create the factors vectors and the dataFrame instruction
+ for (int j = 0; j < factors.size(); j++) {
+ Scenario firstScenario = thisExperimentScenarios.get(0);
+ Factor factor = firstScenario.getFactors().get(j);
+ String factorName = factor.getName().replaceAll(" ", "");
+
+ //the vector of the factor values
+ //read all the values one by one from the already created
+ //scenarios.
+ String vector = factorName + "<-c(";
+ for (int i = 0; i < param_simulationNumber; i++) {
+ Scenario scenario = thisExperimentScenarios.get(i);
+ List<Factor> factorList = scenario.getFactors();
+ Factor factor1 = factorList.get(j);
+ if (i < (param_simulationNumber - 1)) {
+ vector += factor1.getDisplayedValue() + ",";
+ } else {
+ vector += factor1.getDisplayedValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+
+ //add factor1=factor(factor1) for each factor...
+ if (j < factors.size() - 1) {
+ data += factorName + "=factor(" + factorName + "),";
+ } else {
+ data += factorName + "=factor(" + factorName + "))";
+ }
+
+ }
+ engine.voidEval(data);
+
+ // 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 += ")";
+ engine.voidEval(rInstruction);
+
+ // Clean RData
+ for (Factor factor:factors) {
+ engine.remove(factor.getName().replaceAll(" ", ""));
+ }
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't generate scenarios", e);
+ }
+
+ return thisExperiment;
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ SimulationStorage simulationStorage1 = simulationStorages.get(0);
+ String simName = simulationStorage1.getName();
+ String simulationName = simName.replaceAll("-", "");
+ SimulationParameter param = simulationStorage1.getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+ //List<SensitivityExport> export = param.getSensitivityExport();
+
+ try {
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.voidEval("factors<-data.frame(x)");
+
+ //Get back the factors number
+ int factorNumber = (Integer) engine.eval("length(factors)");
+
+ //Get back the simulation number
+ param_simulationNumber = (Integer) (engine.eval("length(factors[,1])"));
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ // Creates the R expression to import results in R
+ String name = param.getSensitivityExport().get(k)
+ .getExportFilename();
+
+ //Create the dataforaov data.frame
+ String dataframe = "dataforaov<-data.frame(factors," + name
+ + "=" + name + ")";
+ engine.voidEval(dataframe);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~";
+ for (int j = 0; j < factorNumber; j++) {
+
+ if (j < (factorNumber - 1)) {
+ aovCall += engine.eval("names(factors)[" + (j + 1) + "]")
+ + "+";
+ } else {
+ aovCall += engine.eval("names(factors)[" + (j + 1) + "]")
+ + ",data=dataforaov)";
+ }
+ }
+ engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
+ engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity<-data.frame(" +
+ "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
+ "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
+ engine.voidEval("names(exportsensitivity)<-c(" +
+ "\"Sum Of Squares\"," +
+ "\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
+
+
+ //Set dataforaov names
+ engine.voidEval("resultsnames<-c(factornames,\"Result\")");
+ engine.voidEval("names(dataforaov)<-resultsnames");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.setwd(outputDirectory);
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\"" +
+ param.getSensitivityExport().get(k).getExportFilename() +
+ "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\"" +
+ param.getSensitivityExport().get(k).getExportFilename() +
+ "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ engine.voidEval("isis.methodAnalyse<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"isis.simule\"=isis.simule," +
+ "call_method=\"" + aovCall + "\"," +
+ "\"analysis_result\"=list(aovresult,IndSensibilite))");
+
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
+ "isis.methodAnalyse";
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Random Latin Hypercube method method using" +
+ " R needs the 'lhs' package to work)";
+ }
+
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,374 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.*;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+import fr.ifremer.isisfish.util.Doc;
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.j2r.types.RDataFrame;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * User: couteau
+ * Date: 6 janv. 2010
+ * Time: 14:31:09
+ */
+public class RegularExpandGrid extends AbstractSensitivityAnalysis {
+
+ @Doc("Interaction order")
+ public int param_order = 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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return false;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ //extract the factors from the design plan
+ List<Factor> factors = plan.getFactors();
+ int factorsNb = factors.size();
+
+ try {
+ REngine engine = new RProxy();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Create a list of the factors under the form factor1=factor1,...
+ String factorsNames = "";
+
+ //Create a list of the factors under the form factor1,factor2,...
+ String factorNames = "";
+
+ //create the factors vectors
+ for (Factor factor : factors) {
+ //The factor values vector
+ String factorName = factor.getName().replaceAll(" ", "");
+ factorsNames += factorName + "=" + factorName + ",";
+ factorNames += factorName + ",";
+ String vector = factorName + "<-c(";
+
+ Domain domain = factor.getDomain();
+
+ if (domain instanceof ContinuousDomain) {
+ ContinuousDomain contDomain = (ContinuousDomain) domain;
+ int card = factor.getCardinality();
+ Double min = contDomain.getCalculatorMinBound();
+ Double max = contDomain.getCalculatorMaxBound();
+
+ for (int i = 0; i < card; i++) {
+ //add the ith value
+ vector += (min + (i * (max - min) / (card - 1))) + ",";
+ }
+ }
+
+ if (domain instanceof DiscreteDomain) {
+ Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
+ int nbValues = values.size();
+ for (int i = 0; i < nbValues; i++) {
+ vector += "as.integer(" + i + "),";
+ }
+ }
+
+ vector = vector.substring(0, vector.length() - 1);
+
+ vector += ")";
+
+ engine.voidEval(vector);
+
+
+ }
+
+ factorsNames = factorsNames.substring(0,factorsNames.length()-1);
+ factorNames = factorNames.substring(0,factorNames.length()-1);
+
+
+ //X<-expand.grid(vector=???,weight=???)
+ String expandGrid = "x<-expand.grid(%s)";
+
+ String rCall = String.format(expandGrid,factorsNames);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ engine.voidEval(rCall);
+
+ engine.eval("expPlan<-as.data.frame(x)");
+ RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+ int nbExperiments = (Integer)engine.eval("dim(x)[1]");
+
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorsNb; i++) {
+ Factor factor = factors.get(i);
+ factor.setValueForIdentifier(dataFrame.get(i, j));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+
+
+ String factorDistribution = "isis.factor.distribution<-data.frame(" +
+ "NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ String distribution = "";
+ String parameters = "";
+
+ for (int i = 0; i < factorsNb; i++) {
+ Domain domain = factors.get(i).getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ }
+ if (domain instanceof ContinuousDomain){
+ ContinuousDomain contDomain = (ContinuousDomain)domain;
+ distribution += "\"qunif\"";
+ parameters += "\"[" + contDomain.getMinBound()
+ + ";" + contDomain.getMaxBound()
+ + "]\"";
+ } else {
+ DiscreteDomain discDomain = (DiscreteDomain)domain;
+ distribution += "\"discrete\"";
+ parameters+="\"[";
+ Map<Object, Object> values = discDomain.getValues();
+ int count=0;
+ Collection<Object> collecValues = values.values();
+ for (Object value:collecValues){
+ if (count!=0){
+ parameters += ",";
+ }
+ parameters += StringUtils.replace(value.toString(), "\"", "\\\"") ;
+ count++;
+ }
+ parameters+="]\"";
+ }
+ }
+ engine.voidEval(String.format(factorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-\"" +
+ String.format(expandGrid,factorsNames) + "\"");
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("isis.simule<-x");
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+
+ } catch (RException eee) {
+ throw new SensitivityException("Can't generate scenarios", eee);
+ }
+
+ return thisExperiment;
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Get back the factors number
+ int factorNumber = (Integer)engine.eval("dim(x)[2]");
+
+ SimulationParameter param = simulationStorages.get(0).getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+
+ SimulationStorage firstStorage = simulationStorages.get(0);
+
+ String firstStorageName = firstStorage.getName().replaceAll("-", "");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String name = sensitivityExport.getExportFilename();
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule,"
+ + name + ")");
+
+ //Create the dataforaov data.frame
+ String dataFrame = "dataforaov<-data.frame(x,"
+ + name + "=" + name + ")";
+ engine.voidEval(dataFrame);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~(";
+ for (int j = 0; j < factorNumber; j++) {
+ if (j < (factorNumber - 1)) {
+ aovCall = aovCall
+ + engine.eval("names(x)[" + (j + 1) + "]")
+ + "+";
+ } else {
+ aovCall = aovCall
+ + engine.eval("names(x)[" + (j + 1) + "]")
+ + ")";
+ if(param_order>1){
+ aovCall+="^" + param_order + ",data=dataforaov)";
+ }else{
+ aovCall+=",data=dataforaov)";
+ }
+ }
+ }
+ engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
+ engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity<-data.frame(" +
+ "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
+ "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
+ engine.voidEval("names(exportsensitivity)<-c(" +
+ "\"Sum Of Squares\"," +
+ "\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.setwd(outputDirectory);
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\""
+ + param.getSensitivityExport().get(k)
+
+ .getExportFilename() + "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\""
+ + param.getSensitivityExport().get(k)
+ .getExportFilename()
+ + "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ engine.voidEval("isis.methodAnalyse<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"isis.simule\"=isis.simule," +
+ "\"call_method\"=\"" + aovCall + "\"," +
+ "\"analysis_result\"=list(aovresult,IndSensibilite))");
+
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ firstStorageName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, firstStorageName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(firstStorageName)){
+ engine.remove(object);
+ }
+ }
+
+ //Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Expand Grid method using R";
+ }
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,398 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import java.io.File;
+import java.util.List;
+
+import fr.ifremer.isisfish.export.SensitivityExport;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.j2r.types.RDataFrame;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
+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 RegularFractions extends AbstractSensitivityAnalysis {
+
+ @Doc("the path of the directory where the R function is stored (do not indicate the RegularFractions.R file name)")
+ 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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputDirectory);
+
+ RDataFrame dataFrame;
+ 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) {
+ throw new SensitivityException(factors.get(i).getName() +
+ " has a discrete domain, this is not acceptable for " +
+ "this method.");
+ }
+ }
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Set the working directory (to import the R function)
+ engine.setwd(new File(param_pathToFunction));
+
+ //Import the function
+ 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) {
+ rCall = editRInstruction(rCall);
+ }
+
+ // Run function
+ engine.voidEval(rCall);
+
+ // Run function
+ engine.voidEval("call<-\"" + rCall + "\"");
+
+ // Creating the factors vector.
+ rInstruction = "factornames<-c(%s)";
+ rCall = String.format(rInstruction, factorNames);
+
+ engine.voidEval(rCall);
+
+
+ // Get back experiment plan
+ engine.eval("expPlan<-as.data.frame(x[[1]])");
+ dataFrame = (RDataFrame)engine.eval("expPlan");
+ dataFrame.setVariable("expPlan");
+
+ //Get back the simulation number
+ int simulationNumber = (Integer) engine.eval("length(x[[1]][,1])");
+
+ // 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);
+ Domain domain = factor.getDomain();
+ Double dFValue = (Double)dataFrame.get(i,j);
+ if ((domain instanceof MatrixContinuousDomain)
+ || (domain instanceof EquationContinuousDomain)) {
+ factor.setValueForIdentifier(dFValue);
+ } else {
+ ContinuousDomain contDomain = (ContinuousDomain)domain;
+ Double max = contDomain.getCalculatorMaxBound();
+ Double min = contDomain.getCalculatorMinBound();
+ Double value = min + (max - min) * dFValue / (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 = factors.get(j);
+ String factorName = factor.getName().replaceAll(" ", "");
+
+ String vector = factorName + "<-c(";
+ for (int i = 0; i < simulationNumber; i++) {
+ Scenario scenario = thisExperimentScenarios.get(i);
+ List<Factor> newFactors = scenario.getFactors();
+ Factor factor1 = newFactors.get(j);
+
+ if (i < (simulationNumber - 1)) {
+ vector += factor1.getDisplayedValue() + ",";
+ } else {
+ vector += factor1.getDisplayedValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+
+ if (j < factorNumber - 1) {
+ dataframe += factorName + "=factor(" + factorName + "),";
+ } else {
+ dataframe += factorName + "=factor(" + factorName + "))";
+ }
+
+ }
+ engine.voidEval(dataframe);
+
+ engine.voidEval("isis.factor.distribution<-c(0.0)");
+
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ //Create isis.Simule
+ engine.voidEval("isis.simule<-data.frame(data)");
+
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (RException eee) {
+ throw new SensitivityException("Can't generate scenarios", eee);
+ }
+
+ return thisExperiment;
+
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ SimulationStorage firstStorage = simulationStorages.get(0);
+ SimulationParameter param = firstStorage.getParameter();
+ List<SensitivityExport> exports = param.getSensitivityExport();
+ int sensitivityNumber = exports.size();
+ String simulationName = firstStorage.getName().replaceAll("-", "");
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ //Get back the factors number
+ int factorNumber = (Integer) engine.eval("dim(data)[2]");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ for (SensitivityExport export : exports) {
+
+ String name = export.getExportFilename();
+
+ //Create the dataforaov data.frame
+ String dataFrame = "dataforaov<-data.frame(data," +
+ name + "=" + name + ")";
+ engine.voidEval(dataFrame);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(" + name + "~(";
+ for (int j = 0; j < factorNumber; j++) {
+
+ if (j < (factorNumber - 1)) {
+ aovCall = aovCall
+ + engine.eval("names(data)[" + (j + 1) + "]")
+ + "+";
+ } else {
+ aovCall = aovCall
+ + engine.eval("names(data)[" + (j + 1) + "]")
+ + ")";
+ if (param_resolution <= 4) {
+ aovCall += ",data=dataforaov)";
+ } else {
+ aovCall += "^2,data=dataforaov)";
+ }
+ }
+ }
+ engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
+ engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity<-data.frame(" +
+ "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
+ "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
+ engine.voidEval("names(exportsensitivity)<-c(" +
+ "\"Sum Of Squares\"," +
+ "\"Sensitivity indices\")");
+ engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
+
+ //Set dataforaov names
+ engine.voidEval("resultsnames<-c(factornames,\"Result\")");
+ engine.voidEval("names(dataforaov)<-resultsnames");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.setwd(outputDirectory);
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\"" + name +
+ "_Results.csv\")");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\"" + name +
+ "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
+
+ //creating isis.methodAnalyse
+ engine.voidEval("isis.methodAnalyse<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"isis.simule\"=isis.simule," +
+ "\"call_method\"=\"" + aovCall + "\"," +
+ "\"analysis_result\"=list(aovresult,IndSensibilite))");
+
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine,simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ engine.terminate();
+
+ } catch (Exception eee) {
+ throw new SensitivityException("Can't evaluate results", eee);
+ }
+
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Regular fractions method using R";
+ }
+
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,390 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RProxy;
-
-/**
- * Implementation of ExpandGrid method using Java
- *
- * @author jcouteau
- * @version $Revision: 1.0 $
- *
- */
-public class SensitivityCalculatorJavaExpandGrid extends
- AbstractSensitivityAnalysis {
-
- @Doc("Interaction order")
- public int param_order = 2;
-
- /**
- * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
- * continue.
- *
- * @return <tt>true</tt> s'il sait la gerer
- */
- @Override
- public boolean canManageCardinality() {
- return false;
- }
-
- @Override
- 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++) {
- Factor factor = factors.get(i);
- Domain domain = factor.getDomain();
-
- //calculate the number of scenarios
- if (domain instanceof ContinuousDomain) {
- if (factor.getCardinality() != 0) {
- k = k * factor.getCardinality();
- }
- } else if (domain instanceof DiscreteDomain) {
- DiscreteDomain discreteDomain = (DiscreteDomain)domain;
- if (discreteDomain.getValues().size() != 0) {
- k = k * discreteDomain.getValues().size();
- }
- }
- }
-
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
-
- for (int i = 0; i < k; i++) {
- int result = 0; //used for the euclidian division
- int rest = i; //used for the euclidian division
- Scenario experimentScenario = new Scenario();
- for (int j = 0; j < factorNumber; j++) {
- Factor factor = factors.get(j);
- Domain domain = factor.getDomain();
- if (domain instanceof ContinuousDomain) {
- ContinuousDomain continuousDomain = (ContinuousDomain)domain;
- Double max = continuousDomain.getCalculatorMaxBound();
- Double min = continuousDomain.getCalculatorMinBound();
- int card = factor.getCardinality();
-
- //Do the euclidian division
- result = (int) Math.floor(rest / card);
- rest = rest - (card * result);
-
- //Calculate the value of the factor
- Double value = min + ((max - min) / (card - 1) * rest);
- if ((domain instanceof MatrixContinuousDomain)
- || (domain instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(value);
- } else {
- factor.setValueForIdentifier(value);
- }
- }
- if (factor.getDomain() instanceof DiscreteDomain) {
- DiscreteDomain discreteDomain = (DiscreteDomain)domain;
- int card = discreteDomain.getValues().size();
-
- //Do the euclidian division
- result = (int) Math.floor(rest / card);
- rest = rest - (card * result);
-
- //Select the value of the factor
- factor.setValueForIdentifier(rest);
- }
- rest = result;
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
-
- }
- thisExperiment.setScenarios(thisExperimentScenarios);
-
- thisExperimentScenarios = thisExperiment.getScenarios();
-
- /*
- * Call R to save the data for result analysis
- */
- int scenariosNumber = thisExperimentScenarios.size();
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- String dataframe = "data<-data.frame(";
-
- //Create the factors vectors and the dataframe instruction
- for (int j = 0; j < factorNumber; j++) {
-
- Factor factor = factors.get(j);
- String factorName = factor.getName().replaceAll(" ", "");
-
- //String vector = "factor" + j + "<-c(";
- String vector = factorName + "<-c(";
- for (int i = 0; i < scenariosNumber; i++) {
- Scenario scenario = thisExperimentScenarios.get(i);
- List<Factor> newFactors = scenario.getFactors();
- Factor factor1 = newFactors.get(j);
-
- if (i < (scenariosNumber - 1)) {
- vector += factor1.getDisplayedValue() + ",";
- } else {
- vector += factor1.getDisplayedValue();
- }
-
- }
- vector = vector + ")";
- engine.voidEval(vector);
-
- if (j < factorNumber - 1) {
- dataframe += factorName + "=factor(" + factorName + "),";
- } else {
- dataframe += factorName + "=factor(" + factorName + "))";
- }
-
- }
- engine.voidEval(dataframe);
-
- // Creating the factors vector.
- String 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 += ")";
-
- engine.voidEval(rInstruction);
-
- //Create the isis.factor.distribution
- engine.voidEval("isis.factor.distribution<-c(0.0)");
-
- //Create isis.MethodExp
- engine.voidEval("isis.MethodExp<-list(" +
- "isis.factors," +
- "isis.factor.distribution," +
- "call_method=\"isis-fish-externeR\")");
-
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- //Create isis.Simule
- engine.voidEval("isis.simule<-data.frame(data)");
-
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't generate scenarios", e);
- }
-
- return thisExperiment;
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputdirectory) throws SensitivityException {
-
- SimulationStorage firstStorage = simulationStorages.get(0);
- String simulationName = firstStorage.getName().replaceAll("-", "");
- SimulationParameter param = firstStorage.getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- //Get back the factors number
- int factorNumber = (Integer)engine.eval("dim(data)[2]");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String name = sensitivityExport.getExportFilename();
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule,"
- + name + ")");
-
- //Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(data," +
- name + "=" + name + ")";
- engine.voidEval(dataframe);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~(";
- for (int j = 0; j < factorNumber; j++) {
- if (j < (factorNumber - 1)) {
- aovCall = aovCall +
- engine.eval("names(data)[" + (j + 1) + "]") +
- "+";
- } else {
- aovCall = aovCall +
- engine.eval("names(data)[" + (j + 1) + "]") +
- ")";
- if(param_order>1){
- aovCall+="^" + param_order + ",data=dataforaov)";
- }else{
- aovCall+=",data=dataforaov)";
- }
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
-
- //Set dataforaov names
- engine.voidEval("resultsnames<-c(" +
- "factornames," +
- "\"Result\")");
- engine.voidEval("names(dataforaov)<-resultsnames");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputdirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\""
- + param.getSensitivityExport().get(k).getExportFilename() + "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\""
- + param.getSensitivityExport().get(k).getExportFilename()
- + "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "call_method=\"" + aovCall + "\"," +
- "\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
- "isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine, simulationName);
-
- // Save Isis R session
- engine.saveRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Expand Grid method using Java";
- }
-
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,403 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.util.Doc;
-import java.io.File;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * User: couteau
- * Date: 14 janv. 2010
- * Time: 11:58:09
- */
-public class SensitivityCalculatorRDOptimal
- extends AbstractSensitivityAnalysis {
-
- @Doc("True to be able to modify the code sent to R")
- public boolean param_modifR = false;
-
- @Doc("Order")
- public int param_order=1;
-
- /**
- * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
- * continue.
- *
- * @return <tt>true</tt> s'il sait la gerer
- */
- @Override
- public boolean canManageCardinality() {
- return false;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
-
- setIsisFactorsR(plan, outputDirectory);
-
- //extract the factors from the design plan
- List<Factor> factors = plan.getFactors();
- int factorsNb = factors.size();
-
- try {
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.voidEval("library(AlgDesign)");
-
- //Create a list of the factors under the form factor1=factor1,...
- String factorsNames = "";
-
- //Create a list of the factors under the form factor1,factor2,...
- String factorNames = "";
-
- //Create a list of the factors under the form factor1+factor2+...
- String factorPlus="";
-
- //create the factors vectors
- for (Factor factor : factors) {
- //The factor values vector
- String factorName = factor.getName().replaceAll(" ", "");
- factorsNames += factorName + "=" + factorName + ",";
- factorNames += factorName + ",";
- factorPlus += factorName + "+";
-
- String vector = factorName + "<-c(";
-
- Domain domain = factor.getDomain();
-
- if (domain instanceof ContinuousDomain) {
- ContinuousDomain contDomain = (ContinuousDomain) domain;
- int card = factor.getCardinality();
- Double min = contDomain.getCalculatorMinBound();
- Double max = contDomain.getCalculatorMaxBound();
-
- for (int i = 0; i < card; i++) {
- //add the ith value
- vector += (min + (i * (max - min) / (card - 1))) + ",";
- }
- } else {
- Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
- int nbValues = values.size();
- for (int i = 0; i < nbValues; i++) {
- vector += "as.integer(" + i + "),";
- }
- }
-
- vector = vector.substring(0, vector.length() - 1);
-
- vector += ")";
-
- engine.voidEval(vector);
-
-
- }
-
- factorsNames = factorsNames.substring(0,factorsNames.length()-1);
- factorNames = factorNames.substring(0,factorNames.length()-1);
- factorPlus = factorPlus.substring(0,factorPlus.length()-1);
-
-
- //X<-expand.grid(vector=???,weight=???)
- String expandGrid = "expandgrid<-expand.grid(%s)";
-
-
-
- String rCall = String.format(expandGrid,factorsNames);
-
- engine.voidEval(rCall);
-
- if (param_order ==1 ){
- rCall = "x<-optFederov(~(%s),data=expandgrid, " +
- "approximate =FALSE, center=F, criterion = \"D\"," +
- "nRepeats=10)";
- } else {
- rCall = "x<-optFederov(~(%s)^"+param_order+",data=expandgrid, " +
- "approximate =FALSE, center=F, criterion = \"D\"," +
- "nRepeats=10)";
- }
-
- rCall = String.format(rCall,factorPlus);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- engine.voidEval("runif(1)");
-
- engine.voidEval(rCall);
-
- engine.eval("expPlan<-as.data.frame(x$design)");
- RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
- int nbExperiments = (Integer)engine.eval("dim(x$design)[1]");
-
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorsNb; i++) {
- Factor factor = factors.get(i);
- factor.setValueForIdentifier(dataFrame.get(i, j));
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
-
- String factorDistribution = "isis.factor.distribution<-data.frame(" +
- "NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- String distribution = "";
- String parameters = "";
-
- for (int i = 0; i < factorsNb; i++) {
- Domain domain = factors.get(i).getDomain();
- if (i != 0) {
- distribution += ",";
- parameters += ",";
- }
- if (domain instanceof ContinuousDomain){
- ContinuousDomain contDomain = (ContinuousDomain)domain;
- distribution += "\"qunif\"";
- parameters += "\"[" + contDomain.getMinBound()
- + ";" + contDomain.getMaxBound()
- + "]\"";
- } else {
- DiscreteDomain discDomain = (DiscreteDomain)domain;
- distribution += "\"discrete\"";
- parameters+="\"[";
- Map<Object, Object> values = discDomain.getValues();
- int count=0;
- Collection<Object> collecValues = values.values();
- for (Object value:collecValues){
- if (count!=0){
- parameters += ",";
- }
- parameters += value;
- count++;
- }
- parameters+="]\"";
- }
- }
- engine.voidEval(String.format(factorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-\"" + rCall + "\"");
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("isis.simule<-x$design");
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
-
- } catch (RException eee) {
- throw new SensitivityException("Can't generate scenarios", eee);
- }
-
- return thisExperiment;
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- try {
-
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Get back the factors number
- int factorNumber = (Integer)engine.eval("dim(x$design)[2]");
-
- SimulationParameter param = simulationStorages.get(0).getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- SimulationStorage firstStorage = simulationStorages.get(0);
-
- String firstStorageName = firstStorage.getName().replaceAll("-", "");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String name = sensitivityExport.getExportFilename();
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule,"
- + name + ")");
-
- //Create the dataforaov data.frame
- String dataFrame = "dataforaov<-data.frame(x$design,"
- + name + "=" + name + ")";
- engine.voidEval(dataFrame);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~(";
- for (int j = 0; j < factorNumber; j++) {
- if (j < (factorNumber - 1)) {
- aovCall = aovCall
- + engine.eval("names(x$design)[" + (j + 1) + "]")
- + "+";
- } else {
- aovCall = aovCall
- + engine.eval("names(x$design)[" + (j + 1) + "]")
- + ")";
- if(param_order>1){
- aovCall+="^" + param_order + ",data=dataforaov)";
- }else{
- aovCall+=",data=dataforaov)";
- }
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
-
- //Set dataforaov names
- engine.voidEval("resultsnames<-c(names(x$design),\"Result\")");
- engine.voidEval("names(dataforaov)<-resultsnames");
-
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputDirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\""
- + param.getSensitivityExport().get(k)
-
- .getExportFilename() + "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\""
- + param.getSensitivityExport().get(k)
- .getExportFilename()
- + "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "\"call_method\"=\"" + aovCall + "\"," +
- "\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- firstStorageName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
-
- renameObjects(engine, firstStorageName);
-
- //Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of D optimal method method using R, needs" +
- "AlgDesign package to work";
- }
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,373 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.util.Doc;
-import java.io.File;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * User: couteau
- * Date: 6 janv. 2010
- * Time: 14:31:09
- */
-public class SensitivityCalculatorRExpandGrid
- extends AbstractSensitivityAnalysis {
-
- @Doc("Interaction order")
- public int param_order = 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
- */
- @Override
- public boolean canManageCardinality() {
- return false;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
-
- setIsisFactorsR(plan, outputDirectory);
-
- //extract the factors from the design plan
- List<Factor> factors = plan.getFactors();
- int factorsNb = factors.size();
-
- try {
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Create a list of the factors under the form factor1=factor1,...
- String factorsNames = "";
-
- //Create a list of the factors under the form factor1,factor2,...
- String factorNames = "";
-
- //create the factors vectors
- for (Factor factor : factors) {
- //The factor values vector
- String factorName = factor.getName().replaceAll(" ", "");
- factorsNames += factorName + "=" + factorName + ",";
- factorNames += factorName + ",";
- String vector = factorName + "<-c(";
-
- Domain domain = factor.getDomain();
-
- if (domain instanceof ContinuousDomain) {
- ContinuousDomain contDomain = (ContinuousDomain) domain;
- int card = factor.getCardinality();
- Double min = contDomain.getCalculatorMinBound();
- Double max = contDomain.getCalculatorMaxBound();
-
- for (int i = 0; i < card; i++) {
- //add the ith value
- vector += (min + (i * (max - min) / (card - 1))) + ",";
- }
- }
-
- if (domain instanceof DiscreteDomain) {
- Map<Object, Object> values = ((DiscreteDomain) domain).getValues();
- int nbValues = values.size();
- for (int i = 0; i < nbValues; i++) {
- vector += "as.integer(" + i + "),";
- }
- }
-
- vector = vector.substring(0, vector.length() - 1);
-
- vector += ")";
-
- engine.voidEval(vector);
-
-
- }
-
- factorsNames = factorsNames.substring(0,factorsNames.length()-1);
- factorNames = factorNames.substring(0,factorNames.length()-1);
-
-
- //X<-expand.grid(vector=???,weight=???)
- String expandGrid = "x<-expand.grid(%s)";
-
- String rCall = String.format(expandGrid,factorsNames);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- engine.voidEval(rCall);
-
- engine.eval("expPlan<-as.data.frame(x)");
- RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
- int nbExperiments = (Integer)engine.eval("dim(x)[1]");
-
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorsNb; i++) {
- Factor factor = factors.get(i);
- factor.setValueForIdentifier(dataFrame.get(i, j));
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
-
- String factorDistribution = "isis.factor.distribution<-data.frame(" +
- "NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- String distribution = "";
- String parameters = "";
-
- for (int i = 0; i < factorsNb; i++) {
- Domain domain = factors.get(i).getDomain();
- if (i != 0) {
- distribution += ",";
- parameters += ",";
- }
- if (domain instanceof ContinuousDomain){
- ContinuousDomain contDomain = (ContinuousDomain)domain;
- distribution += "\"qunif\"";
- parameters += "\"[" + contDomain.getMinBound()
- + ";" + contDomain.getMaxBound()
- + "]\"";
- } else {
- DiscreteDomain discDomain = (DiscreteDomain)domain;
- distribution += "\"discrete\"";
- parameters+="\"[";
- Map<Object, Object> values = discDomain.getValues();
- int count=0;
- Collection<Object> collecValues = values.values();
- for (Object value:collecValues){
- if (count!=0){
- parameters += ",";
- }
- parameters += value;
- count++;
- }
- parameters+="]\"";
- }
- }
- engine.voidEval(String.format(factorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-\"" +
- String.format(expandGrid,factorsNames) + "\"");
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("isis.simule<-x");
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
-
- } catch (RException eee) {
- throw new SensitivityException("Can't generate scenarios", eee);
- }
-
- return thisExperiment;
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- try {
-
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Get back the factors number
- int factorNumber = (Integer)engine.eval("dim(x)[2]");
-
- SimulationParameter param = simulationStorages.get(0).getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- SimulationStorage firstStorage = simulationStorages.get(0);
-
- String firstStorageName = firstStorage.getName().replaceAll("-", "");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String name = sensitivityExport.getExportFilename();
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule,"
- + name + ")");
-
- //Create the dataforaov data.frame
- String dataFrame = "dataforaov<-data.frame(x,"
- + name + "=" + name + ")";
- engine.voidEval(dataFrame);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~(";
- for (int j = 0; j < factorNumber; j++) {
- if (j < (factorNumber - 1)) {
- aovCall = aovCall
- + engine.eval("names(x)[" + (j + 1) + "]")
- + "+";
- } else {
- aovCall = aovCall
- + engine.eval("names(x)[" + (j + 1) + "]")
- + ")";
- if(param_order>1){
- aovCall+="^" + param_order + ",data=dataforaov)";
- }else{
- aovCall+=",data=dataforaov)";
- }
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputDirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\""
- + param.getSensitivityExport().get(k)
-
- .getExportFilename() + "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\""
- + param.getSensitivityExport().get(k)
- .getExportFilename()
- + "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "\"call_method\"=\"" + aovCall + "\"," +
- "\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- firstStorageName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
-
- renameObjects(engine, firstStorageName);
-
- //Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Expand Grid method using R";
- }
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,355 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * Implementation of Fast method using R.
- *
- * @author jcouteau
- * @version $Revision: 89 $
- *
- * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By :
- * $Author: jcouteau $
- */
-public class SensitivityCalculatorRFast extends AbstractSensitivityAnalysis {
-
- @Doc("an integer giving the sample size, i.e. the length of the " +
- "discretization of the s-space (see Cukier et al.). (default=20)")
- public int param_n = 20;
-
- @Doc("an integer specifying the interference parameter, i.e. the number " +
- "of harmonics to sum in the Fourier series decomposition (see Cukier et " +
- "al.). (default=6)")
- public int param_M = 6;
-
- @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
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputDirectory);
-
- RDataFrame dataFrame;
- int nbExperiments;
- int factorNumber = plan.getFactors().size();
- List<Factor> factors = plan.getFactors();
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
-
- //Test all factors, if one is discrete, return null
- for (int i = 0; i < factorNumber; i++) {
- if (factors.get(i).getDomain() instanceof DiscreteDomain) {
- throw new SensitivityException(factors.get(i).getName() +
- " has a discrete domain, this is not acceptable for fast " +
- "method.");
- }
- }
- String rInstruction = "a<-fast99(" +
- "model=NULL," +
- "factors=%s, " +
- "n=%s, " +
- "M=%s, " +
- "q = \"qunif\", " +
- "q.arg=list(min=0,max=1))";
- String rCall = String.format(rInstruction, factors.size(), param_n,
- param_M);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- try {
-
- REngine engine = new RProxy();
-
- engine.clearSession();
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
-
- // Run sensitivity analysis
- engine.voidEval(rCall);
-
- // Creating the factors vector.
- rInstruction = "factornames<-c(";
- for (int i = 0; i < factorNumber; i++) {
- String factorName = factors.get(i).getName();
- if (i != (factorNumber - 1)) {
- rInstruction += "\"" + factorName + "\",";
- } else {
- rInstruction += "\"" + factorName + "\"";
- }
- }
-
- rInstruction += ")";
-
- engine.voidEval(rInstruction);
-
- // Get back experiment plan
- dataFrame = (RDataFrame) engine.eval("a$X");
- dataFrame.setVariable("a$X");
-
- nbExperiments = (Integer)engine.eval("dim(a$X)[1]");
-
- String factorDistribution = "isis.factor.distribution<-data.frame(" +
- "NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- // Creating the vectors.
- String distribution = "";
- String parameters = "";
- String factorNames = "";
-
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = factors.get(i);
- ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
- if (i != 0) {
- distribution += ",";
- parameters += ",";
- factorNames += ",";
- }
-
- distribution += "\"qunif\"";
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
- factorNames += "\"" + factor.getName() + "\"";
- }
- engine.voidEval(String.format(factorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-a$call");
-
-
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
-
- engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
-
- engine.voidEval("isis.simule<-data.frame(a$X)");
-
- engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
-
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Setting up the scenarios.
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = plan.getFactors().get(i);
- Domain domain = factor.getDomain();
- if ((domain instanceof MatrixContinuousDomain)
- || (domain instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(dataFrame.get(i,j));
- } else {
- ContinuousDomain continuousDomain = (ContinuousDomain)domain;
- Double min = continuousDomain.getCalculatorMinBound();
- Double max = continuousDomain.getCalculatorMaxBound();
- Double dFValue = (Double)dataFrame.get(i,j);
- Double value = min + (max - min) * dFValue;
- factor.setValueForIdentifier(value);
- }
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
- } catch (RException eee) {
- throw new SensitivityException("Can't generate scenarios", eee);
- }
- return thisExperiment;
-
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- SimulationStorage storage = simulationStorages.get(0);
- String simulationName = storage.getName().replaceAll("-", "");
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.setwd(outputDirectory);
-
- // Call R
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
-
- SimulationParameter param = simulationStorages.get(0).getParameter();
-
- int sensitivityNumber = param.getSensitivityExport().size();
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
- engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- // Creates the R expression to import results in R
- String name = param.getSensitivityExport().get(k)
- .getExportFilename();
-
- //Compute results
- engine.voidEval("tell(a,y=" + name + ")");
-
- engine.voidEval("names(a$V)<-factornames");
- engine.voidEval("names(a$X)<-factornames");
- engine.voidEval("names(a$D1)<-factornames");
- engine.voidEval("names(a$Dt)<-factornames");
-
- //creating isis.methodAnalyse
- 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 + ")" + "\"," +
- "\"analysis_result\"=a)");
-
- //setting isis.methodAnalyse attributes
- engine.voidEval("attr(isis.methodAnalyse,\"nomModel\")<-" +
- "\"isis-fish-externe-R\")");
-
- //Create the data.frame of scenarios and results for export purpose
- engine.voidEval("dfresults<-data.frame(a$X,a$y)");
-
- //Set working directory
- engine.setwd(outputDirectory);
-
- //Export V
- engine.voidEval("write.csv(a$V,\"" + name + "_V.csv\")");
-
- //Export D1
- engine.voidEval("write.csv(a$D1,\"" + name + "_D1.csv\")");
-
- //Export Dt
- engine.voidEval("write.csv(a$Dt,\"" + name + "_Dt.csv\")");
- //Set dfresults names
- engine.voidEval("resultsnames<-c(factornames,\"Result\")");
- engine.voidEval("names(dfresults)<-resultsnames");
-
- //Export results
- engine.voidEval("write.csv(dfresults,\"" + name +
- "_Results.csv\")");
- //FIXME export through java to enable export when using Rserve
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse" +
- "<-isis.methodAnalyse";
-
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine, simulationName);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
- }
-
- @Override
- public String getDescription() {
- return "Implementation of FAST method using R (needs the sensitivity " +
- "package to work)";
- }
-
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,387 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.SensitivityException;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
-import fr.ifremer.isisfish.util.Doc;
-import java.io.File;
-import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.math.matrix.MatrixFactory;
-import org.nuiton.math.matrix.MatrixND;
-import org.nuiton.util.FileUtil;
-
-/**
- * Implementation of FrF2 method using R.
- *
- * @author jcouteau
- * @version $Revision: 94 $
- *
- * Last update : $Date: 2009-04-03 13:13:35 +0200 (ven., 03 avr. 2009) $ By :
- * $Author: chatellier $
- */
-public class SensitivityCalculatorRFrF2 extends AbstractSensitivityAnalysis {
-
- //TODO jcouteau 20110607 need to use new ethods on REngine instead of coding R sentences by hand.
-
- /** to use log facility, just put in your code: log.info("..."); */
- private static Log log = LogFactory
- .getLog(SensitivityCalculatorRFrF2.class);
-
- @Doc("is the arabic numeral for the requested resolution of the design( 3 <= resolution <= 5). (if resolution=3, model = sum(Xi), if resolution = 4 or 5, model = sum(Xi)+sum(XiXj)")
- public int param_resolution;
-
- /**
- * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
- * continue.
- *
- * @return <tt>true</tt> s'il sait la gerer
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
- throws SensitivityException {
-
- double[] dataframe;
- int nbExperiments;
- int factorNumber = plan.getFactors().size();
- List<Factor> factors = plan.getFactors();
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
-
- testNoDiscrete(factors);
-
- try {
- REngine engine = new RProxy();
-
- //Clear session
- engine.voidEval("rm(list=ls())");
-
- engine.voidEval("library(FrF2)");
-
- //Set the working directory (for import and exports)
- engine.voidEval("setwd(\""
- + outputdirectory.getAbsolutePath().replaceAll("\\\\", "/")
- + "\")");
-
- String rInstruction = "a<-FrF2(nfactors=" + factorNumber
- + ",resolution=" + param_resolution + ")";
-
- engine.voidEval(rInstruction);
-
- // Export the FrF2 object for the second run in a .FrF2 file
- engine.voidEval("dput(a,file=\".FrF2\")");
-
- // Get back experiment plan
- dataframe = (double[]) engine.eval("a$desnum");
-
- // 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 += ")";
-
- engine.voidEval(rInstruction);
-
- // Export the factornames object for the second run in a .factornames file
- engine.voidEval("dput(factornames,file=\".factornames\")");
-
-
- nbExperiments = dataframe.length / factorNumber;
-
- // Transform the result from R in a matrix
- MatrixND frf2 = MatrixFactory.getInstance().create(dataframe,
- new int[] { factorNumber, nbExperiments });
-
- // Setting up the scenarios.
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = plan.getFactors().get(i);
-
- if (frf2.getValue(new int[]{i, j}) == -1) {
- factor.setValueForIdentifier(0);
- } else if (frf2.getValue(new int[]{i, j}) == 1) {
- factor.setValueForIdentifier(1);
- }
-
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
- //Create the factors vectors
- for (int j = 0; j < factorNumber; j++) {
- Factor factor = thisExperimentScenarios.get(0).getFactors()
- .get(j);
-
- String vector = "factor" + j + "<-c(";
- for (int i = 0; i < nbExperiments; i++) {
- if (i < (nbExperiments - 1)) {
- vector = vector + factor.getDisplayedValue() + ",";
- } else {
- vector = vector + factor.getDisplayedValue();
- }
-
- }
- vector = vector + ")";
- engine.voidEval(vector);
- }
-
- //Create the data data.frame from the factors
- String data = "data<-data.frame(";
- for (int j = 0; j < factorNumber; j++) {
- if (j < factorNumber - 1) {
- data = data + "factor" + j + "=factor(factor" + j + "),";
- } else {
- data = data + "factor" + j + "=factor(factor" + j + "))";
- }
-
- }
- engine.voidEval(data);
-
- // Set output directory
- engine.voidEval("setwd(\""
- + outputdirectory.getAbsolutePath().replaceAll("\\\\", "/")
- + "\")");
-
- // Export the scenario matrix for the second run in a .FrF2.csv file
- engine.voidEval("write.csv(data,file=\".FrF2.csv\")");
-
- engine.terminate();
-
- } catch (RException e) {
- throw new SensitivityException("Can't generate scenarios", e);
- }
- return thisExperiment;
-
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputdirectory) throws SensitivityException {
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.voidEval("rm(list=ls())");
-
- SimulationParameter param = simulationStorages.get(0)
- .getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- engine.voidEval("library(FrF2)");
-
- // Set output directory
- engine.voidEval("setwd(\""
- + outputdirectory.getAbsolutePath().replaceAll("\\\\",
- "/") + "\")");
-
- //Get back the FrF2 object
- engine.voidEval("a<-dget(\".FrF2\")");
-
- //Get back the scenarios
- engine.voidEval("factors<-read.csv(\".FrF2.csv\")");
-
- // Get the factornames object in the .factornames file
- engine.voidEval("factornames<-dget(\".factornames\")");
-
- //Get back the factors number
- int factorNumber = ((Double) engine.eval("length(factors)-1"))
- .intValue();
-
- // Creates the R expression to import results in R
- String name = param.getSensitivityExport().get(k)
- .getExportFilename();
- String rInstruction = 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, param
- .getSensitivityExport().get(k).getExportFilename()
- + param.getSensitivityExport().get(k)
- .getExtensionFilename());
- String simulResult = FileUtil.readAsString(importFile);
- double simulationResult = Double.valueOf(simulResult);
- if (l < simulationStorages.size() - 1) {
- rInstruction = rInstruction + simulationResult + ",";
- } else {
- rInstruction = rInstruction + simulationResult;
- }
- }
- rInstruction = rInstruction + ")";
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(factors,result=result)";
- engine.voidEval(dataframe);
-
- //get back the resolution
- int resolution = (Integer) engine.eval("res.catlg(a$catentry)");
-
- String aovCall;
-
- switch (resolution) {
- case 3:
- //Call aov()
- aovCall = "aovresult<-aov(result~";
- for (int j = 0; j < factorNumber; j++) {
- if (j < (factorNumber - 1)) {
- aovCall = aovCall + "factor" + j + "+";
- } else {
- aovCall = aovCall + "factor" + j
- + ",data=dataforaov)";
- }
- }
- engine.voidEval(aovCall);
- break;
- case 4:
- aovCall = "aovresult<-aov(result~";
- for (int j = 0; j < factorNumber; j++) {
- aovCall = aovCall + "factor" + j + "+";
- }
- for (int i = 0; i < factorNumber; i++) {
- for (int j = 0; j < factorNumber; j++) {
- if (i < j) {
- aovCall = aovCall + "factor" + i + "*factor"
- + j + "+";
- }
- }
- }
- aovCall = aovCall.substring(0, aovCall.length() - 1);
- aovCall = aovCall + ",data=dataforaov)";
- engine.voidEval(aovCall);
- break;
- case 5:
- aovCall = "aovresult<-aov(result~";
- for (int j = 0; j < factorNumber; j++) {
- aovCall = aovCall + "factor" + j + "+";
- }
- for (int i = 0; i < factorNumber; i++) {
- for (int j = 0; j < factorNumber; j++) {
- if (i < j) {
- aovCall = aovCall + "factor" + i + "*factor"
- + j + "+";
- }
- }
- }
- aovCall = aovCall.substring(0, aovCall.length() - 1);
- aovCall = aovCall + ",data=dataforaov)";
- engine.voidEval(aovCall);
- break;
- default:
- log.info("This resolution is not managed");
- break;
- }
-
- /*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]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:"
- + factorNumber + "]");
- engine.voidEval("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
- + "])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\",\"Sensitivity indices\")");
-
- engine.voidEval("row.names(exportsensitivity)<-factornames");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.voidEval("setwd(\""
- + outputdirectory.getAbsolutePath().replaceAll("\\\\",
- "/") + "\")");
-
- //Set dataforaov names
- engine.voidEval("resultsnames<-c(\"Simulation\"," +
- "factornames,\"Result\")");
- engine.voidEval("names(dataforaov)<-resultsnames");
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\""
- + param.getSensitivityExport().get(k)
- .getExportFilename() + "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\""
- + param.getSensitivityExport().get(k)
- .getExportFilename()
- + "_SensitivityIndices.csv\")");
-
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
- engine.terminate();
- }
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of FrF2 method method using R, at least 4 factors need to be declared (nneds the 'sensitivity' package to work)";
- }
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,341 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.SensitivityException;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
-import fr.ifremer.isisfish.util.Doc;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * Implementation of Morris method using R.
- *
- * @author jcouteau
- * @version $Revision: 253 $
- *
- * Last update : $Date: 2011-07-07 14:31:31 +0200 (jeu. 07 juil. 2011) $ By :
- * $Author: chatellier $
- */
-public class SensitivityCalculatorRMorris extends AbstractSensitivityAnalysis {
-
- @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;
-
- @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
- * continus.
- *
- * @return <tt>true</tt> s'il sait la gerer
- */
- @Override
- public boolean canManageCardinality() {
- return false;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputDirectory);
-
- RDataFrame dataFrame;
- int nbExperiments;
- int factorNumber = plan.getFactors().size();
-
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
-
- List<Factor> factors = plan.getFactors();
-
- if (param_r == 0) {
- param_r = 4;
- }
-
- testNoDiscrete(factors);
-
- // Creating the vectors.
- String factorNames = "";
- String levels = "";
- String gridJump = "";
- String binf = "";
- String bsup = "";
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = factors.get(i);
- ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
- if (i != 0) {
- factorNames += ",";
- levels += ",";
- gridJump += ",";
- binf += ",";
- bsup += ",";
- }
-
- factorNames += "\"" + factor.getName() + "\"";
-
- levels += factor.getCardinality();
-
- gridJump += factor.getCardinality() / 2;
-
- binf += domain.getCalculatorMinBound();
-
- bsup += domain.getCalculatorMaxBound();
- }
-
- 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))";
-
- String rCall = String.format(rInstruction, factorNames, param_r,
- levels, gridJump, binf, bsup);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- try {
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
-
- // Run sensitivity analysis
- engine.voidEval(rCall);
-
- // Creating the factors vector.
- rInstruction = "factornames<-c(%s)";
- rCall = String.format(rInstruction, factorNames);
-
- engine.voidEval(rCall);
-
- // Set output directory
- engine.setwd(outputDirectory);
-
- // Get back experiment plan
- engine.eval("expPlan<-as.data.frame(a$X)");
- dataFrame = (RDataFrame) engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
-
- nbExperiments = (Integer)engine.eval("dim(a$X)[1]");
-
- String factorDistribution = "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++) {
- Factor factor = factors.get(i);
- ContinuousDomain domain = (ContinuousDomain) factor.getDomain();
- if (i != 0) {
- distribution += ",";
- parameters += ",";
- }
-
- distribution += "\"qunif\"";
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
- }
- engine.voidEval(String.format(factorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-a$call");
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
- engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
- engine.voidEval("isis.simule<-data.frame(a$X)");
- engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Setting up the scenarios.
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = factors.get(i);
- factor.setValueForIdentifier(dataFrame.get(i, j));
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
- } catch (RException eee) {
- throw new SensitivityException("Can't generate scenarios", eee);
- }
-
- return thisExperiment;
-
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- SimulationStorage storage = simulationStorages.get(0);
- String simulationName = storage.getName().replaceAll("-", "");
-
- try {
- REngine engine = new RProxy();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Call R
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
-
- //Set the working directory (for exports)
- engine.setwd(outputDirectory);
-
- SimulationParameter param = simulationStorages.get(0)
- .getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule,\"nomModel\")<-" +
- "\"isis-fish-externe-R\"");
-
- engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- // Creates the R expression to import results in R
- String name = param.getSensitivityExport().get(k)
- .getExportFilename();
-
- //Compute results
- engine.voidEval("tell(a,y=" + name + ")");
-
- //creating isis.methodAnalyse
- 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 + ")" + "\"," +
- "\"analysis_result\"=a)");
-
- //setting isis.methodAnalyse attributes
- 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)");
- engine.voidEval("mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))");
- engine.voidEval("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)");
- engine.voidEval("row.names(df)<-factornames");
-
- //Create the data.frame of scenarios and results for export purpose
- engine.voidEval("dfresults<-data.frame(a$X," + name + ")");
-
- //Set dfresults names
- engine.voidEval("resultsnames<-c(factornames,\"Result\")");
- engine.voidEval("names(dfresults)<-resultsnames");
-
- //Export sensitivity indices
- engine.voidEval("write.csv(df," +
- "\"" + name + "_SensitivityIndices.csv\")");
-
- //Export results
- engine.voidEval("write.csv(dfresults," +
- "\"" + name + "_Results.csv\")");
- //FIXME export through java to enable export when using Rserve
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
- "isis.methodAnalyse";
-
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine,simulationName);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Morris method using R (needs the sensitivity" +
- " package to work)";
- }
-
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,396 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.SensitivityException;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
-import fr.ifremer.isisfish.util.Doc;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * Implementation of Optimum Latin Hypercube method using R.
- *
- * @author jcouteau
- * @version $Revision: 1.0 $
- */
-public class SensitivityCalculatorROptimumLHS extends
- AbstractSensitivityAnalysis {
-
- @Doc("Number of simulations (default=10)")
- public int param_simulationNumber = 10;
- @Doc("The maximum number of times the Columnwise Pairwise algorithm is applied to all the columns(default=2).")
- public int param_MaxSweeps = 2;
- @Doc("The optimal stopping criterion (between 0 and 1) (default=0.1).")
- public double param_eps = 0.1;
- @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
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputdirectory);
-
- int factorNumber = plan.getFactors().size();
- List<Factor> factors = plan.getFactors();
- RDataFrame dataFrame;
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
-
- //Test all factors, if one is discrete, return null
- testNoDiscrete(factors);
-
- try {
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Set working directory to get Isis R session
- engine.loadRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- //Load the lhs library
- engine.voidEval("library(lhs)");
-
- String rInstruction = "x<-optimumLHS(n=%s,k=%s,maxSweeps=%s,eps=%s)";
-
- String rCall = String.format(rInstruction, param_simulationNumber,
- factorNumber, param_MaxSweeps, param_eps);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- //Create the scenarios
- engine.voidEval(rCall);
-
- // Get back experiment plan
- engine.eval("expPlan<-as.data.frame(x)");
- dataFrame = (RDataFrame)engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
-
- // Setting up the scenarios.
- for (int j = 0; j < param_simulationNumber; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = plan.getFactors().get(i);
- factor.setValueForIdentifier(dataFrame.get(i, j));
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
- String isisFactorDistribution = "isis.factor.distribution<-" +
- "data.frame(" +
- "NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- String distribution = "";
- String parameters = "";
- String factorNames = "";
-
- for (int i = 0; i < factors.size(); i++) {
- Factor tempFactor = factors.get(i);
- ContinuousDomain domain = (ContinuousDomain) tempFactor.getDomain();
- if (i != 0) {
- distribution += ",";
- factorNames += ",";
- parameters += ",";
- }
-
- factorNames += "\"" + factors.get(i).getName() + "\"";
- distribution += "\"qunif\"";
- //add [min;max] to parameters
- parameters += "\"[" + domain.getMinBound() + ";" +
- domain.getMaxBound() + "]\"";
- }
-
- engine.voidEval(String.format(isisFactorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-" + "\"x<-optimumLHS("
- + "n=" + param_simulationNumber
- + ",k=" + factorNumber
- + ",maxSweeps=" + param_MaxSweeps
- + ",eps=" + param_eps + ")\"");
-
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
-
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("isis.simule<-data.frame(x)");
-
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- String data = "data<-data.frame(";
-
- //Create the factors vectors and the dataFrame instruction
- for (int j = 0; j < factors.size(); j++) {
- //The factor values vector
- String vector;
- //Get back the factor
- Scenario scenario = thisExperimentScenarios.get(0);
- Factor factor = scenario.getFactors().get(j);
- String factorName = factor.getName().replaceAll(" ", "");
-
- vector = factorName + "<-c(";
- for (int i = 0; i < param_simulationNumber; i++) {
- //Get back the displayed value the factor
- Scenario tempScenario = thisExperimentScenarios.get(i);
- Factor tempFactor = tempScenario.getFactors().get(j);
- Object value = tempFactor.getDisplayedValue();
-
- if (i < (param_simulationNumber - 1)) {
- vector = vector + value + ",";
- } else {
- vector += value;
- }
-
- }
- vector += ")";
- engine.voidEval(vector);
-
- if (j < factors.size() - 1) {
- data += factorName + "=factor(" + factorName + "),";
- } else {
- data += factorName + "=factor(" + factorName + "))";
- }
- }
- engine.voidEval(data);
-
- // 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 += ")";
-
- engine.voidEval(rInstruction);
-
- // Save Isis R session
- engine.saveRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't generate scenarios", e);
- }
-
- return thisExperiment;
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- //The first storage to get the name and parameters all along the method
- SimulationStorage storage = simulationStorages.get(0);
-
- String simulationName = storage.getName().replaceAll("-", "");
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.voidEval("factors<-data.frame(x)");
- engine.voidEval("names(factors)<-factornames");
-
- //Get back the factors number
- int factorNumber = (Integer) engine.eval("length(factors[1,])");
- //Get back the simulation number
- param_simulationNumber = (Integer) (engine.eval("length(factors[,1])"));
-
- SimulationParameter param = storage.getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- // Creates the R expression to import results in R
- SensitivityExport export = param.getSensitivityExport().get(k);
- String name = export.getExportFilename();
-
- //Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(factors," +
- name + "=" + name + ")";
- engine.voidEval(dataframe);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~";
- for (int j = 0; j < factorNumber; j++) {
-
- String factorName = (String) engine.eval("names(factors)[" + (j + 1) + "]");
- factorName = factorName.replaceAll(" ", ".");
-
- if (j < (factorNumber - 1)) {
- aovCall += factorName +
- "+";
- } else {
- aovCall += factorName + ",data=dataforaov)";
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
-
- //Set dataforaov names
- engine.voidEval("names(dataforaov)<-c(factornames,\"Result\")");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputDirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\"" +
- name + "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\"" +
- name + "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "call_method=\"" + aovCall + "\""+
- ",\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
- "isis.methodAnalyse";
-
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine, simulationName);
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Random Latin Hypercube method method " +
- "using R (needs 'lhs' package to work)";
- }
-
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,387 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.SensitivityException;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
-import fr.ifremer.isisfish.util.Doc;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * Implementation of Random Latin Hypercube method using R.
- *
- * @author jcouteau
- * @version $Revision: 1.0 $
- */
-public class SensitivityCalculatorRRandomLHS extends
- AbstractSensitivityAnalysis {
-
- @Doc("Simulation number (default=10)")
- public int param_simulationNumber = 10;
- @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
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputDirectory);
-
- int factorNumber = plan.getFactors().size();
- RDataFrame dataFrame; //The dataframe to get back the scenarios from R
- SensitivityScenarios thisExperiment = new SensitivityScenarios(); //The experiment we will build
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios
- List<Factor> factors = plan.getFactors(); //The factors
-
- testNoDiscrete(factors);
-
- try {
-
- REngine engine = new RProxy(); //The R engine
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Load the lhs library
- engine.voidEval("library(lhs)");
-
- //Create the scenarios
- String rInstruction = "x<-randomLHS(%s,%s)";
- String rCall = String.format(rInstruction, param_simulationNumber,
- factorNumber);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- engine.voidEval(rCall);
-
- // Get back experiment plan
- engine.eval("expPlan<-as.data.frame(x)");
- dataFrame = (RDataFrame)engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
-
- // Setting up the scenarios.
- for (int j = 0; j < param_simulationNumber; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = plan.getFactors().get(i); //The factor we are setting
- factor.setValueForIdentifier(dataFrame.get(i,j));
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
-
- String isisFactorDistribution = "isis.factor.distribution<-" +
- "data.frame(" +
- "NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- String distribution = "";
- String parameters = "";
- String factorNames = "";
-
-
- //Create the strings for the isis.MethodExp instruction
- for (int i = 0; i < factors.size(); i++) {
- ContinuousDomain domain = (ContinuousDomain)factors.get(i).getDomain();
- if (i != 0) {
- distribution += ","; //the distribution
- factorNames += ","; //the factor names
- parameters += ","; //the parameters
- }
-
- factorNames += "\"" + factors.get(i).getName() + "\"";
- distribution += "\"qunif\""; //all distributions are qunif
- double min = domain.getCalculatorMinBound();
- double max = domain.getCalculatorMaxBound();
- parameters += "\"[" + min + ";" + max + "]\"";
- }
- engine.voidEval(String.format(isisFactorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-" + "\"x<-randomLHS("
- + param_simulationNumber + "," + factorNumber + ")\"");
-
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
-
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("isis.simule<-data.frame(x)");
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- String data = "data<-data.frame(";
-
- //Create the factors vectors and the dataFrame instruction
- for (int j = 0; j < factors.size(); j++) {
- Scenario firstScenario = thisExperimentScenarios.get(0);
- Factor factor = firstScenario.getFactors().get(j);
- String factorName = factor.getName().replaceAll(" ", "");
-
- //the vector of the factor values
- //read all the values one by one from the already created
- //scenarios.
- String vector = factorName + "<-c(";
- for (int i = 0; i < param_simulationNumber; i++) {
- Scenario scenario = thisExperimentScenarios.get(i);
- List<Factor> factorList = scenario.getFactors();
- Factor factor1 = factorList.get(j);
- if (i < (param_simulationNumber - 1)) {
- vector += factor1.getDisplayedValue() + ",";
- } else {
- vector += factor1.getDisplayedValue();
- }
-
- }
- vector = vector + ")";
- engine.voidEval(vector);
-
- //add factor1=factor(factor1) for each factor...
- if (j < factors.size() - 1) {
- data += factorName + "=factor(" + factorName + "),";
- } else {
- data += factorName + "=factor(" + factorName + "))";
- }
-
- }
- engine.voidEval(data);
-
- // 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 += ")";
- engine.voidEval(rInstruction);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't generate scenarios", e);
- }
-
- return thisExperiment;
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- SimulationStorage simulationStorage1 = simulationStorages.get(0);
- String simName = simulationStorage1.getName();
- String simulationName = simName.replaceAll("-", "");
- SimulationParameter param = simulationStorage1.getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
- //List<SensitivityExport> export = param.getSensitivityExport();
-
- try {
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.voidEval("factors<-data.frame(x)");
-
- //Get back the factors number
- int factorNumber = (Integer) engine.eval("length(factors)");
-
- //Get back the simulation number
- param_simulationNumber = (Integer) (engine.eval("length(factors[,1])"));
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- // Creates the R expression to import results in R
- String name = param.getSensitivityExport().get(k)
- .getExportFilename();
-
- //Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(factors," + name
- + "=" + name + ")";
- engine.voidEval(dataframe);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~";
- for (int j = 0; j < factorNumber; j++) {
-
- if (j < (factorNumber - 1)) {
- aovCall += engine.eval("names(factors)[" + (j + 1) + "]")
- + "+";
- } else {
- aovCall += engine.eval("names(factors)[" + (j + 1) + "]")
- + ",data=dataforaov)";
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
-
- //Set dataforaov names
- engine.voidEval("resultsnames<-c(factornames,\"Result\")");
- engine.voidEval("names(dataforaov)<-resultsnames");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputDirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\"" +
- param.getSensitivityExport().get(k).getExportFilename() +
- "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\"" +
- param.getSensitivityExport().get(k).getExportFilename() +
- "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "call_method=\"" + aovCall + "\"," +
- "\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
- "isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine, simulationName);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Random Latin Hypercube method method using" +
- " R needs the 'lhs' package to work)";
- }
-
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,334 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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.util.Doc;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-/**
- * Implementation of Sobol method using R.
- *
- * @author jcouteau
- * @version $Revision: 89 $
- *
- * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By :
- * $Author: jcouteau $
- */
-public class SensitivityCalculatorRSobol extends AbstractSensitivityAnalysis {
-
- @Doc("the size of the 2 random samples")
- public int param_n = 20;
-
- @Doc("the number of bootstrap replicates.")
- public int param_nboot = 20;
-
- @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
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputdirectory);
-
- RDataFrame dataFrame;
- int nbExperiments;
- int factorNumber = plan.getFactors().size();
- List<Factor> factors = plan.getFactors();
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
-
- testNoDiscrete(factors);
-
- String rInstruction = "a<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)";
- String rCall = String.format(rInstruction, param_nboot);
-
- if (param_modifR) {
- rCall = editRInstruction(rCall);
- }
-
- try {
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- engine.voidEval("library(sensitivity)");
-
- engine.voidEval("X1<-data.frame(matrix(runif(" + factorNumber + "*"
- + param_n + "),nrow=" + param_n + "))");
- engine.voidEval("X2<-data.frame(matrix(runif(" + factorNumber + "*"
- + param_n + "),nrow=" + param_n + "))");
-
- engine.voidEval(rCall);
-
- // Creating the factors vector.
- rInstruction = "factornames<-c(";
- for (int i = 0; i < factorNumber; i++) {
- String factorName = factors.get(i).getName();
- if (i != (factorNumber - 1)) {
- rInstruction += "\"" + factorName + "\",";
- } else {
- rInstruction += "\"" + factorName + "\"";
- }
- }
-
- rInstruction += ")";
-
- engine.voidEval(rInstruction);
-
- // Get back experiment plan
- dataFrame = (RDataFrame) engine.eval("a$X");
- dataFrame.setVariable("a$X");
-
- nbExperiments = dataFrame.dim()[0];
-
- String isisFactorDistribution = "isis.factor.distribution<-" +
- "data.frame(NomFacteur=c(%s)," +
- "NomDistribution=c(%s)," +
- "ParametreDistribution=c(%s))";
-
- // Creating the vectors.
- String distribution = "";
- String parameters = "";
- String factorNames = "";
-
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = factors.get(i);
- Domain domain = factor.getDomain();
- if (i != 0) {
- distribution += ",";
- parameters += ",";
- factorNames += ",";
- }
-
- distribution += "\"qunif\"";
- ContinuousDomain continuousDomain = (ContinuousDomain) domain;
- double min = continuousDomain.getCalculatorMinBound();
- double max = continuousDomain.getCalculatorMaxBound();
- parameters += "\"[" + min + ";" + max + "]\"";
- factorNames += "\"" + factor.getName() + "\"";
- }
-
- engine.voidEval(String.format(isisFactorDistribution, factorNames,
- distribution, parameters));
-
- engine.voidEval("call<-a$call");
-
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
-
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("isis.simule<-data.frame(a$X)");
-
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputdirectory.getParentFile(),
- outputdirectory.getName());
-
- // Setting up the scenarios.
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- for (int i = 0; i < factorNumber; i++) {
- Factor factor = plan.getFactors().get(i);
- Double dFValue = (Double) dataFrame.get(i, j);
- factor.setValueForIdentifier(dFValue);
- experimentScenario.addFactor(factor);
- }
- thisExperimentScenarios.add(experimentScenario);
- }
-
- } catch (Exception e) {
- throw new SensitivityException("Can't generate scenarios", e);}
-
-
- thisExperiment.setScenarios(thisExperimentScenarios);
- return thisExperiment;
-
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- SimulationStorage firstStorage = simulationStorages.get(0);
- SimulationParameter param = firstStorage.getParameter();
- int sensitivityNumber = param.getSensitivityExport().size();
- String simulationName = firstStorage.getName().replaceAll("-", "");
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- // Call R
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
-
- //Set X1 names
- engine.voidEval("names(X1)<-factornames");
- //Set X2 names
- engine.voidEval("names(X2)<-factornames");
-
- //Set a$X names
- engine.voidEval("names(a$X)<-factornames");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport = param.getSensitivityExport().get(k);
- String name = sensitivityExport.getExportFilename();
-
- //Compute results
- engine.voidEval("tell(a,y=" + name + ")");
-
- engine.voidEval("row.names(a$S)<-names(a$X)");
- engine.voidEval("row.names(a$T)<-names(a$X)");
- engine.voidEval("row.names(a$V)<-c(\"global\"," +
- "names(a$X),paste(\"-\",names(a$X),sep=\"\"))");
-
- //creating isis.methodAnalyse
- 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 + ")" + "\"," +
- "\"analysis_result\"=a)");
-
- //setting isis.methodAnalyse attributes
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\")");
-
- //Create the data.frame of scenarios and results for export purpose
- engine.voidEval("dfresults<-data.frame(a$X,a$y)");
-
- //Set working directory
- engine.setwd(outputDirectory);
-
- //Export V
- engine.voidEval("write.csv(a$V,\""
- + name
- + "_SensitivityIndices.csv\")");
- //Export DD
- engine.voidEval("write.csv(a$D,\""
- + name + "_D.csv\")");
-
- //Export S
- engine.voidEval("write.csv(a$S,\""
- + name + "_S.csv\")");
-
- //Export results
- engine.voidEval("write.csv(dfresults,\""
- + name + "_Results.csv\")");
- //FIXME export through java to enable export when using Rserve
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
- "isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine, simulationName);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
- } catch (Exception e) {
- throw new SensitivityException("Can't evaluate results", e);
- }
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Sobol method using R (use of the R " +
- "sobol2002 method, needs the 'sensitivity' package to work)";
- }
-}
Deleted: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java 2013-11-07 22:42:17 UTC (rev 3830)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -1,390 +0,0 @@
-/*
- * #%L
- * IsisFish data
- * %%
- * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package sensitivityanalysis;
-
-import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.export.SensitivityExport;
-import fr.ifremer.isisfish.simulator.SimulationParameter;
-import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
-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;
-import java.io.File;
-import java.util.List;
-import org.nuiton.j2r.REngine;
-import org.nuiton.j2r.RException;
-import org.nuiton.j2r.RProxy;
-import org.nuiton.j2r.types.RDataFrame;
-
-public class SensitivityCalculatorRegularFractions extends
- AbstractSensitivityAnalysis {
-
- @Doc("the path of the directory where the R function is stored (do not indicate the RegularFractions.R file name)")
- 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
- */
- @Override
- public boolean canManageCardinality() {
- return true;
- }
-
- @Override
- public SensitivityScenarios compute(DesignPlan plan, File outputDirectory)
- throws SensitivityException {
-
- setIsisFactorsR(plan, outputDirectory);
-
- RDataFrame dataFrame;
- 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) {
- throw new SensitivityException(factors.get(i).getName() +
- " has a discrete domain, this is not acceptable for " +
- "this method.");
- }
- }
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Set the working directory (to import the R function)
- engine.setwd(new File(param_pathToFunction));
-
- //Import the function
- 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) {
- rCall = editRInstruction(rCall);
- }
-
- // Run function
- engine.voidEval(rCall);
-
- // Run function
- engine.voidEval("call<-\"" + rCall + "\"");
-
- // Creating the factors vector.
- rInstruction = "factornames<-c(%s)";
- rCall = String.format(rInstruction, factorNames);
-
- engine.voidEval(rCall);
-
-
- // Get back experiment plan
- engine.eval("expPlan<-as.data.frame(x[[1]])");
- dataFrame = (RDataFrame)engine.eval("expPlan");
- dataFrame.setVariable("expPlan");
-
- //Get back the simulation number
- int simulationNumber = (Integer) engine.eval("length(x[[1]][,1])");
-
- // 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);
- Domain domain = factor.getDomain();
- Double dFValue = (Double)dataFrame.get(i,j);
- if ((domain instanceof MatrixContinuousDomain)
- || (domain instanceof EquationContinuousDomain)) {
- factor.setValueForIdentifier(dFValue);
- } else {
- ContinuousDomain contDomain = (ContinuousDomain)domain;
- Double max = contDomain.getCalculatorMaxBound();
- Double min = contDomain.getCalculatorMinBound();
- Double value = min + (max - min) * dFValue / (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 = factors.get(j);
- String factorName = factor.getName().replaceAll(" ", "");
-
- String vector = factorName + "<-c(";
- for (int i = 0; i < simulationNumber; i++) {
- Scenario scenario = thisExperimentScenarios.get(i);
- List<Factor> newFactors = scenario.getFactors();
- Factor factor1 = newFactors.get(j);
-
- if (i < (simulationNumber - 1)) {
- vector += factor1.getDisplayedValue() + ",";
- } else {
- vector += factor1.getDisplayedValue();
- }
-
- }
- vector = vector + ")";
- engine.voidEval(vector);
-
- if (j < factorNumber - 1) {
- dataframe += factorName + "=factor(" + factorName + "),";
- } else {
- dataframe += factorName + "=factor(" + factorName + "))";
- }
-
- }
- engine.voidEval(dataframe);
-
- engine.voidEval("isis.factor.distribution<-c(0.0)");
-
- engine.voidEval("isis.MethodExp<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"call\"=call)");
-
- engine.voidEval("attr(isis.MethodExp," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- //Create isis.Simule
- engine.voidEval("isis.simule<-data.frame(data)");
-
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (RException eee) {
- throw new SensitivityException("Can't generate scenarios", eee);
- }
-
- return thisExperiment;
-
- }
-
- @Override
- public void analyzeResult(List<SimulationStorage> simulationStorages,
- File outputDirectory) throws SensitivityException {
-
- SimulationStorage firstStorage = simulationStorages.get(0);
- SimulationParameter param = firstStorage.getParameter();
- List<SensitivityExport> exports = param.getSensitivityExport();
- int sensitivityNumber = exports.size();
- String simulationName = firstStorage.getName().replaceAll("-", "");
-
- try {
-
- REngine engine = new RProxy();
-
- //Clear session
- engine.clearSession();
-
- //Get Isis R session
- engine.loadRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- //Get back the factors number
- int factorNumber = (Integer) engine.eval("dim(data)[2]");
-
- for (int k = 0; k < sensitivityNumber; k++) {
-
- SensitivityExport sensitivityExport =
- param.getSensitivityExport().get(k);
-
- String rInstruction = createImportInstruction(sensitivityExport,
- simulationStorages);
-
- // Send the simulation results
- engine.voidEval(rInstruction);
-
- //Put results in isis.simule
- engine.voidEval("isis.simule<-data.frame(isis.simule," +
- sensitivityExport.getExportFilename() + ")");
- }
-
- //adding attribute to isis.Simule
- engine.voidEval("attr(isis.simule," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- for (SensitivityExport export : exports) {
-
- String name = export.getExportFilename();
-
- //Create the dataforaov data.frame
- String dataFrame = "dataforaov<-data.frame(data," +
- name + "=" + name + ")";
- engine.voidEval(dataFrame);
-
- //Call aov()
- String aovCall = "aovresult<-aov(" + name + "~(";
- for (int j = 0; j < factorNumber; j++) {
-
- if (j < (factorNumber - 1)) {
- aovCall = aovCall
- + engine.eval("names(data)[" + (j + 1) + "]")
- + "+";
- } else {
- aovCall = aovCall
- + engine.eval("names(data)[" + (j + 1) + "]")
- + ")";
- if (param_resolution <= 4) {
- aovCall += ",data=dataforaov)";
- } else {
- aovCall += "^2,data=dataforaov)";
- }
- }
- }
- engine.voidEval(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:dim(summary(aovresult)[[1]])[1],2]");
- engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]");
- engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
-
- //Create a data.frame to export sensitivity important results in one file.
- engine.voidEval("exportsensitivity<-data.frame(" +
- "SoS[1:dim(summary(aovresult)[[1]])[1]]," +
- "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])");
- engine.voidEval("names(exportsensitivity)<-c(" +
- "\"Sum Of Squares\"," +
- "\"Sensitivity indices\")");
- engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]");
-
- //Set dataforaov names
- engine.voidEval("resultsnames<-c(factornames,\"Result\")");
- engine.voidEval("names(dataforaov)<-resultsnames");
-
- /*Set the export directory
- *Export directory is the first simulation export directory.
- */
- engine.setwd(outputDirectory);
-
- //Save the results with the scenarios.
- engine.voidEval("write.csv(dataforaov,\"" + name +
- "_Results.csv\")");
-
- //Save the sensitivity indices
- engine.voidEval("write.csv(exportsensitivity,\"" + name +
- "_SensitivityIndices.csv\")");
- //FIXME export through java to enable export when using Rserve (when distant Rserve).
-
- //creating isis.methodAnalyse
- engine.voidEval("isis.methodAnalyse<-list(" +
- "\"isis.factors\"=isis.factors," +
- "\"isis.factor.distribution\"=isis.factor.distribution," +
- "\"isis.simule\"=isis.simule," +
- "\"call_method\"=\"" + aovCall + "\"," +
- "\"analysis_result\"=list(aovresult,IndSensibilite))");
-
- engine.voidEval("attr(isis.methodAnalyse," +
- "\"nomModel\")<-\"isis-fish-externe-R\"");
-
- String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse";
- engine.voidEval(String.format(renameIsisMethodAnalyse,
- simulationName + "." + name));
-
- }
-
- //Rename R objects for saving purpose
- renameObjects(engine,simulationName);
-
- // Save Isis R session
- engine.saveRData(outputDirectory.getParentFile(),
- outputDirectory.getName());
-
- engine.terminate();
-
- } catch (Exception eee) {
- throw new SensitivityException("Can't evaluate results", eee);
- }
-
- }
-
- @Override
- public String getDescription() {
- return "Implementation of Regular fractions method using R";
- }
-
-}
Added: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java
===================================================================
--- branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java (rev 0)
+++ branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java 2013-11-08 14:25:47 UTC (rev 3831)
@@ -0,0 +1,343 @@
+/*
+ * #%L
+ * IsisFish data
+ * %%
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package sensitivityanalysis;
+
+import java.io.File;
+import java.util.List;
+
+import fr.ifremer.isisfish.export.SensitivityExport;
+import org.nuiton.j2r.REngine;
+import org.nuiton.j2r.RProxy;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.SimulationParameter;
+import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis;
+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.util.Doc;
+import org.nuiton.j2r.types.RDataFrame;
+
+/**
+ * Implementation of Sobol method using R.
+ *
+ * @author jcouteau
+ * @version $Revision$
+ *
+ * Last update : $Date$ By :
+ * $Author$
+ */
+public class Sobol extends AbstractSensitivityAnalysis {
+
+ @Doc("the size of the 2 random samples")
+ public int param_n = 20;
+
+ @Doc("the number of bootstrap replicates.")
+ public int param_nboot = 20;
+
+ @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
+ */
+ @Override
+ public boolean canManageCardinality() {
+ return true;
+ }
+
+ @Override
+ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
+ throws SensitivityException {
+
+ setIsisFactorsR(plan, outputdirectory);
+
+ RDataFrame dataFrame;
+ int nbExperiments;
+ int factorNumber = plan.getFactors().size();
+ List<Factor> factors = plan.getFactors();
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+
+ testNoDiscrete(factors);
+
+ String rInstruction = "a<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)";
+ String rCall = String.format(rInstruction, param_nboot);
+
+ if (param_modifR) {
+ rCall = editRInstruction(rCall);
+ }
+
+ try {
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputdirectory.getParentFile(),
+ outputdirectory.getName());
+
+ engine.voidEval("library(sensitivity)");
+
+ engine.voidEval("X1<-data.frame(matrix(runif(" + factorNumber + "*"
+ + param_n + "),nrow=" + param_n + "))");
+ engine.voidEval("X2<-data.frame(matrix(runif(" + factorNumber + "*"
+ + param_n + "),nrow=" + param_n + "))");
+
+ engine.voidEval(rCall);
+
+ // Creating the factors vector.
+ rInstruction = "factornames<-c(";
+ for (int i = 0; i < factorNumber; i++) {
+ String factorName = factors.get(i).getName();
+ if (i != (factorNumber - 1)) {
+ rInstruction += "\"" + factorName + "\",";
+ } else {
+ rInstruction += "\"" + factorName + "\"";
+ }
+ }
+
+ rInstruction += ")";
+
+ engine.voidEval(rInstruction);
+
+ // Get back experiment plan
+ dataFrame = (RDataFrame) engine.eval("a$X");
+ dataFrame.setVariable("a$X");
+
+ nbExperiments = dataFrame.dim()[0];
+
+ String isisFactorDistribution = "isis.factor.distribution<-" +
+ "data.frame(NomFacteur=c(%s)," +
+ "NomDistribution=c(%s)," +
+ "ParametreDistribution=c(%s))";
+
+ // Creating the vectors.
+ String distribution = "";
+ String parameters = "";
+ String factorNames = "";
+
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = factors.get(i);
+ Domain domain = factor.getDomain();
+ if (i != 0) {
+ distribution += ",";
+ parameters += ",";
+ factorNames += ",";
+ }
+
+ distribution += "\"qunif\"";
+ ContinuousDomain continuousDomain = (ContinuousDomain) domain;
+ double min = continuousDomain.getCalculatorMinBound();
+ double max = continuousDomain.getCalculatorMaxBound();
+ parameters += "\"[" + min + ";" + max + "]\"";
+ factorNames += "\"" + factor.getName() + "\"";
+ }
+
+ engine.voidEval(String.format(isisFactorDistribution, factorNames,
+ distribution, parameters));
+
+ engine.voidEval("call<-a$call");
+
+ engine.voidEval("isis.MethodExp<-list(" +
+ "\"isis.factors\"=isis.factors," +
+ "\"isis.factor.distribution\"=isis.factor.distribution," +
+ "\"call\"=call)");
+
+ engine.voidEval("attr(isis.MethodExp," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("isis.simule<-data.frame(a$X)");
+
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("names(isis.simule)<-isis.factors[[1]]");
+
+ // Save Isis R session
+ engine.saveRData(outputdirectory.getParentFile(),
+ outputdirectory.getName());
+
+ // Setting up the scenarios.
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor factor = plan.getFactors().get(i);
+ Double dFValue = (Double) dataFrame.get(i, j);
+ factor.setValueForIdentifier(dFValue);
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ }
+
+ } catch (Exception e) {
+ throw new SensitivityException("Can't generate scenarios", e);}
+
+
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ return thisExperiment;
+
+ }
+
+ @Override
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputDirectory) throws SensitivityException {
+
+ SimulationStorage firstStorage = simulationStorages.get(0);
+ SimulationParameter param = firstStorage.getParameter();
+ int sensitivityNumber = param.getSensitivityExport().size();
+ String simulationName = firstStorage.getName().replaceAll("-", "");
+
+ try {
+
+ REngine engine = new RProxy();
+
+ //Clear session
+ engine.clearSession();
+
+ //Get Isis R session
+ engine.loadRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+
+ // Call R
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+
+ //Set X1 names
+ engine.voidEval("names(X1)<-factornames");
+ //Set X2 names
+ engine.voidEval("names(X2)<-factornames");
+
+ //Set a$X names
+ engine.voidEval("names(a$X)<-factornames");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport =
+ param.getSensitivityExport().get(k);
+
+ String rInstruction = createImportInstruction(sensitivityExport,
+ simulationStorages);
+
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+
+ //Put results in isis.simule
+ engine.voidEval("isis.simule<-data.frame(isis.simule," +
+ sensitivityExport.getExportFilename() + ")");
+ }
+
+ //adding attribute to isis.Simule
+ engine.voidEval("attr(isis.simule," +
+ "\"nomModel\")<-\"isis-fish-externe-R\"");
+
+ engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call");
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ SensitivityExport sensitivityExport = param.getSensitivityExport().get(k);
+ String name = sensitivityExport.getExportFilename();
+
+ //Compute results
+ engine.voidEval("tell(a,y=" + name + ")");
+
+ engine.voidEval("row.names(a$S)<-names(a$X)");
+ engine.voidEval("row.names(a$T)<-names(a$X)");
+ engine.voidEval("row.names(a$V)<-c(\"global\"," +
+ "names(a$X),paste(\"-\",names(a$X),sep=\"\"))");
+
+ //creating isis.methodAnalyse
+ 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 + ")" + "\"," +
+ "\"analysis_result\"=a)");
+
+ //setting isis.methodAnalyse attributes
+ engine.voidEval("attr(isis.methodAnalyse," +
+ "\"nomModel\")<-\"isis-fish-externe-R\")");
+
+ //Create the data.frame of scenarios and results for export purpose
+ engine.voidEval("dfresults<-data.frame(a$X,a$y)");
+
+ //Set working directory
+ engine.setwd(outputDirectory);
+
+ //Export V
+ engine.voidEval("write.csv(a$V,\""
+ + name
+ + "_SensitivityIndices.csv\")");
+ //Export DD
+ engine.voidEval("write.csv(a$D,\""
+ + name + "_D.csv\")");
+
+ //Export S
+ engine.voidEval("write.csv(a$S,\""
+ + name + "_S.csv\")");
+
+ //Export results
+ engine.voidEval("write.csv(dfresults,\""
+ + name + "_Results.csv\")");
+ //FIXME export through java to enable export when using Rserve
+
+ String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" +
+ "isis.methodAnalyse";
+ engine.voidEval(String.format(renameIsisMethodAnalyse,
+ simulationName + "." + name));
+
+ }
+
+ //Rename R objects for saving purpose
+ renameObjects(engine, simulationName);
+
+ //Clean temporary R objects
+ for (String object:engine.ls()) {
+ if (!object.startsWith(simulationName)){
+ engine.remove(object);
+ }
+ }
+
+ // Save Isis R session
+ engine.saveRData(outputDirectory.getParentFile(),
+ outputDirectory.getName());
+ } catch (Exception e) {
+ throw new SensitivityException("Can't evaluate results", e);
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "Implementation of Sobol method using R (use of the R " +
+ "sobol2002 method, needs the 'sensitivity' package to work)";
+ }
+}
Property changes on: branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r3830 - in branches/4.0.1/src/main: java/fr/ifremer/isisfish/ui java/fr/ifremer/isisfish/ui/calibration java/fr/ifremer/isisfish/ui/widget resources/i18n
by echatellier@users.forge.codelutin.com 07 Nov '13
by echatellier@users.forge.codelutin.com 07 Nov '13
07 Nov '13
Author: echatellier
Date: 2013-11-07 23:42:17 +0100 (Thu, 07 Nov 2013)
New Revision: 3830
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3830
Log:
Ajout des interfaces de calibration (maquette)
Added:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationHandler.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationMethodUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx
branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2013-11-03 20:47:26 UTC (rev 3829)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2013-11-07 22:42:17 UTC (rev 3830)
@@ -111,5 +111,5 @@
<JMenuItem id="miImport" text="isisfish.simulation.menu.import" onActionPerformed="importSimulation()"/>
</JMenu>
</JMenuBar>
- <JTabbedPane id="bodyTabbedPane" constraints='BorderLayout.CENTER'/>
+ <JTabbedPane id="bodyTabbedPane" constraints='BorderLayout.CENTER' decorator="boxed"/>
</JPanel>
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx 2013-11-03 20:47:26 UTC (rev 3829)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx 2013-11-07 22:42:17 UTC (rev 3830)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2006 - 2010 Ifremer, Code Lutin
+ Copyright (C) 2006 - 2013 Ifremer, Code Lutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2013-11-03 20:47:26 UTC (rev 3829)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2013-11-07 22:42:17 UTC (rev 3830)
@@ -30,6 +30,7 @@
fr.ifremer.isisfish.ui.input.InputSaveVerifier
fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier
fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler
+ fr.ifremer.isisfish.ui.calibration.CalibrationHandler
javax.swing.ImageIcon
</import>
@@ -58,6 +59,10 @@
<fr.ifremer.isisfish.ui.sensitivity.SensitivityUI id="sensitivityUI"
constructorParams='new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(new SensitivityInputHandler()).add(this)' />
</tab>
+ <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/SimulationLauncher.gif"))}'>
+ <fr.ifremer.isisfish.ui.calibration.CalibrationUI id="calibrationUI"
+ constructorParams='new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(new CalibrationHandler()).add(this)' />
+ </tab>
<tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/calc.gif"))}'>
<fr.ifremer.isisfish.ui.result.ResultUI />
</tab>
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationHandler.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationHandler.java 2013-11-07 22:42:17 UTC (rev 3830)
@@ -0,0 +1,29 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2013 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ifremer.isisfish.ui.calibration;
+
+import fr.ifremer.isisfish.ui.input.InputHandler;
+
+public class CalibrationHandler extends InputHandler {
+
+}
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationMethodUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationMethodUI.jaxx (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationMethodUI.jaxx 2013-11-07 22:42:17 UTC (rev 3830)
@@ -0,0 +1,119 @@
+<!--
+ #%L
+ IsisFish
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2013 Ifremer, CodeLutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+ -->
+<Table>
+ <import>
+ java.awt.CardLayout
+ javax.swing.ComboBoxModel
+ javax.swing.table.DefaultTableModel
+ </import>
+
+ <script><![CDATA[
+
+
+ ]]></script>
+ <row>
+ <cell fill="horizontal">
+ <JLabel text="isisfish.calibration.select"/>
+ </cell>
+ <cell fill="horizontal" weightx="1.0">
+ <JComboBox id="fieldCalibrationMethodSelect" />
+ </cell>
+ </row>
+ <row>
+ <cell columns="2" fill="both" weightx="1.0" weighty="1.0">
+ <JScrollPane>
+ <JTable id="simulCalibrationMethodParam" rowHeight='24'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell columns="2" fill="both" weightx="1.0" weighty="1.0">
+ <JPanel id="factorCardinalityPanel" layout="{new CardLayout()}">
+ <JLabel text="isisfish.calibration.methodfactorsupported" horizontalAlignment="center"
+ border="{BorderFactory.createEtchedBorder()}" font-style="italic" constraints='"factorCardinalitySupported"'/>
+ <JScrollPane id="factorCardinalityScrollPane" constraints='"factorCardinalityNotSupported"'>
+ <JTable id="factorCardinality" rowHeight='24' />
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell fill="both" columns='3' weightx="1.0">
+ <JLabel text="isisfish.calibration.objectives"/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill="both" weightx="1.0" weighty="1.0">
+ <Table>
+ <row>
+ <cell fill="both" weightx="0.5" weighty="1.0">
+ <JScrollPane>
+ <JList id="availableCalibrationObjectives" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" />
+ </JScrollPane>
+ </cell>
+ <cell fill="both" weighty="1.0">
+ <Table>
+ <row>
+ <cell fill="both">
+ <JButton id="addObjectiveButton" text="isisfish.common.add" enabled="false" />
+ </cell>
+ </row>
+ <row>
+ <cell fill="both">
+ <JButton id="removeObjectiveButton" text="isisfish.common.remove" enabled="false" />
+ </cell>
+ </row>
+ <row>
+ <cell fill="both">
+ <JButton id="clearObjectiveButton" text="isisfish.common.clear" enabled="false" />
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ <cell fill="both" weightx="0.5" weighty="1.0">
+ <JScrollPane>
+ <JList id="selectedCalibrationObjectives" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" />
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ <row>
+ <cell fill="both" columns='2' weightx="1.0" weighty="1.0">
+ <JScrollPane>
+ <JTable id="objectiveParamsTable" rowHeight='24' />
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell fill="horizontal">
+ <JLabel text="isisfish.calibration.optimization"/>
+ </cell>
+ <cell fill="horizontal" weightx="1.0">
+ <JComboBox id="fieldCalibrationScriptSelect" />
+ </cell>
+ </row>
+</Table>
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationUI.jaxx (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/calibration/CalibrationUI.jaxx 2013-11-07 22:42:17 UTC (rev 3830)
@@ -0,0 +1,98 @@
+<!--
+ #%L
+ IsisFish
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2013 Ifremer, CodeLutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+ -->
+<fr.ifremer.isisfish.ui.SimulationUI>
+
+ <import>
+ fr.ifremer.isisfish.ui.input.InputAction
+ jaxx.runtime.JAXXContext
+ jaxx.runtime.context.JAXXInitialContext
+ jaxx.runtime.SwingUtil
+ </import>
+
+ <script><![CDATA[
+ protected void $afterCompleteSetup() {
+ SwingUtil.getLayer(bodyTabbedPane).setUI(dummyLayer);
+ }
+
+ /**
+ * Refresh all simulation launch UI.
+ */
+ @Override
+ protected void regionStorageChanged() {
+
+ }
+
+ @Override
+ public void refresh() {
+
+ }
+
+ @Override
+ public void selectParametersTab() {
+
+ }
+
+ @Override
+ public void setEnabledPrescriptTab(boolean selected) {
+ // no prescript in AS
+ }
+
+ @Override
+ public void setEnabledSimulationPlanTab(boolean selected) {
+ // no simulation plan in AS
+ }
+
+ @Override
+ public void refreshFactorTree() {
+
+ }
+ ]]></script>
+
+ <CalibrationHandler id="handler" />
+
+ <fr.ifremer.isisfish.ui.widget.DummyLayerUI id="dummyLayer" />
+ <JTabbedPane id="bodyTabbedPane">
+ <tab title='isisfish.params.title'>
+ <fr.ifremer.isisfish.ui.simulator.ParamsUI id='paramsUI' sensitivity='true' regionStorage="{getRegionStorage()}"
+ constructorParams='new JAXXInitialContext().add(new InputAction()).add("SimulationUI", this).add(this)' />
+ </tab>
+ <tab title='isisfish.sensitivity.title'>
+ <fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI id="sensitivityTabUI"
+ constructorParams='new JAXXInitialContext().add(new InputAction()).add("SimulationUI", this).add(this)' />
+ </tab>
+ <tab title='isisfish.calibration.title'>
+ <CalibrationMethodUI id="calibrationMethodUI" constructorParams='this'/>
+ </tab>
+ <tab title='isisfish.export.title'>
+ <fr.ifremer.isisfish.ui.simulator.ExportUI id="exportUI" constructorParams='this'/>
+ </tab>
+ <tab title='isisfish.resultChoice.title'>
+ <fr.ifremer.isisfish.ui.simulator.ResultChoiceUI id="resultChoiceUI" constructorParams='this'/>
+ </tab>
+ <tab title='isisfish.advancedParameters.title'>
+ <fr.ifremer.isisfish.ui.simulator.AdvancedParamsUI id="advancedParamsUI" constructorParams='this'/>
+ </tab>
+ </JTabbedPane>
+</fr.ifremer.isisfish.ui.SimulationUI>
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java 2013-11-07 22:42:17 UTC (rev 3830)
@@ -0,0 +1,64 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2013 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ifremer.isisfish.ui.widget;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+
+import javax.swing.JComponent;
+
+import org.jdesktop.jxlayer.JXLayer;
+import org.jdesktop.jxlayer.plaf.AbstractLayerUI;
+
+public class DummyLayerUI extends AbstractLayerUI<JComponent> {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 309245880711380974L;
+
+ @Override
+ protected void paintLayer(Graphics2D g2, JXLayer<? extends JComponent> l) {
+ super.paintLayer(g2, l);
+
+ // position
+ //g2.translate(-35, 90); // top left
+ g2.translate(l.getBounds().getMaxX() - 160, l.getBounds().getMaxY()); // bottom right
+
+ // yellow backgroung
+ g2.rotate(Math.PI * -42 / 180);
+ g2.setColor(Color.YELLOW);
+ g2.fillRect(10, 10, 200, 30);
+
+ // text
+ g2.translate(70, 15);
+ g2.setFont(new Font("Dialog", Font.BOLD, 16));
+ g2.setColor(Color.BLACK);
+ g2.drawString("Maquette",10,10);
+
+ // for test only
+ g2.translate(-3, 10);
+ g2.setFont(new Font("Dialog", Font.ITALIC, 10));
+ g2.setColor(Color.BLACK);
+ g2.drawString("(non fonctionnelle)",10,10);
+ }
+}
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2013-11-03 20:47:26 UTC (rev 3829)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2013-11-07 22:42:17 UTC (rev 3830)
@@ -97,6 +97,11 @@
isisfish.advancedParams.simulationCache=Simulation cache
isisfish.advancedParams.simulationStatistique=Simulation statistics
isisfish.advancedParams.simulatorUse=Simulator to Use
+isisfish.calibration.methodfactorsupported=
+isisfish.calibration.objectives=
+isisfish.calibration.optimization=
+isisfish.calibration.select=
+isisfish.calibration.title=
isisfish.cell.comments=Comments
isisfish.cell.land=Land
isisfish.cell.latitude=Latitude
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2013-11-03 20:47:26 UTC (rev 3829)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2013-11-07 22:42:17 UTC (rev 3830)
@@ -97,6 +97,11 @@
isisfish.advancedParams.simulationCache=Simulation cache
isisfish.advancedParams.simulationStatistique=Simulation statistique
isisfish.advancedParams.simulatorUse=Simulateur à utiliser
+isisfish.calibration.methodfactorsupported=La méthode de calibration choisie gère les cardinalités des facteurs
+isisfish.calibration.objectives=Fonctions d'objectif
+isisfish.calibration.optimization=Script d'optimisation
+isisfish.calibration.select=Méthode de calibration
+isisfish.calibration.title=Calibration
isisfish.cell.comments=Commentaires
isisfish.cell.land=Terre
isisfish.cell.latitude=Latitude
1
0
r3829 - branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity
by echatellier@users.forge.codelutin.com 03 Nov '13
by echatellier@users.forge.codelutin.com 03 Nov '13
03 Nov '13
Author: echatellier
Date: 2013-11-03 21:47:26 +0100 (Sun, 03 Nov 2013)
New Revision: 3829
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3829
Log:
Add unit test to test AS scripts
Added:
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
Added: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java (rev 0)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-03 20:47:26 UTC (rev 3829)
@@ -0,0 +1,262 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2013 Ifremer, Code Lutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+package fr.ifremer.isisfish.simulator.sensitivity;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.aspectj.util.FileUtil;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.nuiton.j2r.RException;
+import org.nuiton.j2r.RProxy;
+import org.nuiton.math.matrix.MatrixFactory;
+import org.nuiton.math.matrix.MatrixND;
+
+import fr.ifremer.isisfish.AbstractIsisFishTest;
+import fr.ifremer.isisfish.IsisFishException;
+import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+
+/**
+ * Test les scripts d'AS disponible dans les ressources de tests.
+ *
+ * @author Eric Chatellier
+ */
+public class SensitivityAnalysisTest extends AbstractIsisFishTest {
+
+ private static final Log log = LogFactory.getLog(SensitivityAnalysisTest.class);
+
+ /** Simulation dir used to save Rdata files. */
+ protected File simulationsDir;
+
+ @BeforeClass
+ public static void init() {
+ System.setProperty("R.type", "jni");
+ }
+
+ /**
+ * Ces tests utilisent directement le moteur R, s'il n'est pas disponible,
+ * on va eviter de faire les tests.
+ */
+ @Before
+ public void setUp() {
+ try {
+ new RProxy();
+ } catch (RException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("R not available. Skipping current test");
+ }
+ Assume.assumeNoException(e);
+ }
+ simulationsDir = FileUtil.getTempDir("simulations");
+ }
+
+ /**
+ * Build a test design plan with only continuous factors.
+ *
+ * @return test design plan
+ */
+ protected DesignPlan getContinuousDesignPlan() {
+
+ DesignPlan result = new DesignPlan();
+
+ // factor 1, min/max on int
+ Factor factor1 = new Factor("testint");
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 50.0);
+ factor1.setDomain(domain1);
+ factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
+ result.addFactor(factor1);
+
+ // matrix 1
+ MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
+ new int[] { 3, 2 }, new String[] { "col1", "col2" });
+ matrix1.setValue(new int[] { 0, 0 }, 1);
+ matrix1.setValue(new int[] { 0, 1 }, -14);
+ matrix1.setValue(new int[] { 1, 0 }, 21);
+ matrix1.setValue(new int[] { 1, 1 }, 2);
+ matrix1.setValue(new int[] { 2, 0 }, 3);
+ matrix1.setValue(new int[] { 2, 1 }, -1);
+
+ // factor
+ Factor factor2 = new Factor("testmatrix");
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain2.addDistributionParam("reference", matrix1);
+ domain2.addDistributionParam("coefficient", 0.1);
+ factor2.setDomain(domain2);
+ factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
+ result.addFactor(factor2);
+
+ return result;
+ }
+
+ /**
+ * Test tmp files/dir.
+ *
+ * @throws IOException
+ */
+ @After
+ public void clear() throws IOException {
+ FileUtils.deleteDirectory(simulationsDir);
+ }
+
+ /**
+ * Test de génération des scenarios via la methode Morris.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testMorris() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("Morris script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode DOptimal.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testDOptimal() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("DOptimal").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("DOptimal script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode Fast.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testFast() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Fast").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("Fast script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode OptimumLHS.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testOptimumLHS() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("OptimumLHS").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("OptimumLHS script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode RandomLHS.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testRandomLHS() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RandomLHS").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("RandomLHS script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode RegularExpandGrid.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testRegularExpandGrid() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularExpandGrid").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("RegularExpandGrid script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode RegularFractions.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testRegularFractions() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularFractions").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("RegularFractions script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+
+ /**
+ * Test de génération des scenarios via la methode RegularExpandGrid.
+ *
+ * @throws IsisFishException
+ * @throws SensitivityException
+ */
+ @Test
+ public void testSobol() throws IsisFishException, SensitivityException {
+ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Sobol").getNewSensitivityAnalysisInstance();
+ Assert.assertNotNull("Sobol script not found in test data", script);
+
+ DesignPlan designPlan = getContinuousDesignPlan();
+ SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir);
+
+ }
+}
1
0
r3828 - branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain
by echatellier@users.forge.codelutin.com 02 Nov '13
by echatellier@users.forge.codelutin.com 02 Nov '13
02 Nov '13
Author: echatellier
Date: 2013-11-02 11:13:56 +0100 (Sat, 02 Nov 2013)
New Revision: 3828
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3828
Log:
Add missing getDistribution parameter method
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2013-11-02 09:51:05 UTC (rev 3827)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2013-11-02 10:13:56 UTC (rev 3828)
@@ -103,6 +103,16 @@
}
/**
+ * Return distribution parameter value by parameter name.
+ *
+ * @param name name
+ * @return param value
+ */
+ public Object getDistributionParameter(String name) {
+ return distributionParameters.get(name);
+ }
+
+ /**
* Set distribution parameters (clear previous).
*
* @param distributionParameters distribution params
1
0
r3827 - in branches/4.0.1: . src/main/java/fr/ifremer/isisfish/datastore src/main/java/fr/ifremer/isisfish/entities src/main/java/fr/ifremer/isisfish/simulator/launcher src/main/resources/i18n
by echatellier@users.forge.codelutin.com 02 Nov '13
by echatellier@users.forge.codelutin.com 02 Nov '13
02 Nov '13
Author: echatellier
Date: 2013-11-02 10:51:05 +0100 (Sat, 02 Nov 2013)
New Revision: 3827
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3827
Log:
Fix some reported problems
Modified:
branches/4.0.1/pom.xml
branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java
branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: branches/4.0.1/pom.xml
===================================================================
--- branches/4.0.1/pom.xml 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/pom.xml 2013-11-02 09:51:05 UTC (rev 3827)
@@ -295,17 +295,17 @@
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
- <version>1.7.3</version>
+ <version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
- <version>1.7.3</version>
+ <version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
- <version>1.7.3</version>
+ <version>1.7.4</version>
</dependency>
<!-- ssj pour les calculs stockastiques -->
@@ -321,7 +321,7 @@
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
- <version>1.8.0-SNAPSHOT</version>
+ <version>1.7.8</version>
<scope>compile</scope>
</dependency>
<!-- fin svnkit pour communication subversion -->
@@ -476,7 +476,7 @@
<signatureVersion>1.0</signatureVersion>
<!-- Dependencies version -->
- <jaxxVersion>2.5.28</jaxxVersion>
+ <jaxxVersion>2.5.29</jaxxVersion>
<eugeneVersion>2.6.3</eugeneVersion>
<topiaVersion>2.8.1.3</topiaVersion>
<hibernateVersion>4.2.7.Final</hibernateVersion>
@@ -679,10 +679,6 @@
<id>nuiton.public</id>
<url>http://nexus.nuiton.org/nexus/content/groups/public</url>
</repository>
- <repository>
- <id>svnkit.public</id>
- <url>http://maven.tmatesoft.com/content/repositories/snapshots</url>
- </repository>
</repositories>
<pluginRepositories>
@@ -741,7 +737,7 @@
<properties>
<!-- pmd config -->
<minimumTokens>100</minimumTokens>
- <targetJdk>1.6</targetJdk>
+ <targetJdk>1.7</targetJdk>
</properties>
<build>
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2013-11-02 09:51:05 UTC (rev 3827)
@@ -31,7 +31,6 @@
import java.util.List;
import org.apache.commons.io.FileUtils;
-import org.nuiton.util.FileUtil;
import fr.ifremer.isisfish.IsisFish;
import fr.ifremer.isisfish.IsisFishRuntimeException;
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2013-11-02 09:51:05 UTC (rev 3827)
@@ -559,8 +559,6 @@
// matrix when capturability is null instead check validity and
// create new one and paste the old
} else if (!Arrays.equals(mat.getSemantics(), sems)) {
- log.debug("Capturability has changed, create new matrix and copy old: "
- + mat.getSemantics() + " " + sems);
MatrixND newmat = MatrixFactory.getInstance().create(
n_("isisfish.population.capturability"),
sems,
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java 2013-11-02 09:51:05 UTC (rev 3827)
@@ -62,7 +62,7 @@
public List<Month> getMonths() {
List<Month> result = new ArrayList<Month>();
Month m = getFirstMonth();
- while (m.equals(getLastMonth()) == false) {
+ while (!m.equals(getLastMonth())) {
result.add(m);
m = m.next();
}
@@ -92,7 +92,7 @@
boolean result = month.equals(getLastMonth()); // check first last month, because loop don't do that
Month m = getFirstMonth();
- while (result == false && m.equals(getLastMonth()) == false) {
+ while (!result && !m.equals(getLastMonth())) {
result = m.equals(month);
m = m.next();
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2013-11-02 09:51:05 UTC (rev 3827)
@@ -425,7 +425,7 @@
waitAndCheckProgression();
} catch (Exception e) {
if (log.isErrorEnabled()) {
- log.error("An exception occurs durring monitoring", e);
+ log.error("An exception occurs during monitoring", e);
}
}
}
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2013-11-02 09:51:05 UTC (rev 3827)
@@ -1,4 +1,6 @@
=
+%s\ has\ a\ discrete\ domain,\ this\ is\ not\ acceptable\ for\ this\ method.=
+%s\ has\ a\ non\ uniform\ distribution,\ this\ is\ not\ acceptable\ for\ this\ method.=
Add\ to\ default\ queue=
Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s=
Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s
@@ -39,12 +41,14 @@
Maximum\ value=
Minimum\ value=
Missing\ name=
+Modifier\ le\ code\ R\ envoyé\ si\ vous\ le\ souhaitez=
No\ port\ cell=
Normal\ stop\ thread,\ this\ is\ not\ an\ error=
Not\ start\ simulation\ %s\ because\ user\ ask\ stop=
Process\ template\ error=
QUnif\ %=
QUnif\ Min/Max=
+R\ modif=
Reference\ value=
Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import=
Region\ %s\ already\ inited=
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2013-11-02 09:31:48 UTC (rev 3826)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2013-11-02 09:51:05 UTC (rev 3827)
@@ -1,4 +1,6 @@
=
+%s\ has\ a\ discrete\ domain,\ this\ is\ not\ acceptable\ for\ this\ method.=
+%s\ has\ a\ non\ uniform\ distribution,\ this\ is\ not\ acceptable\ for\ this\ method.=
Add\ to\ default\ queue=
Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s=
Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s
@@ -39,12 +41,14 @@
Maximum\ value=
Minimum\ value=
Missing\ name=
+Modifier\ le\ code\ R\ envoyé\ si\ vous\ le\ souhaitez=
No\ port\ cell=
Normal\ stop\ thread,\ this\ is\ not\ an\ error=
Not\ start\ simulation\ %s\ because\ user\ ask\ stop=
Process\ template\ error=
QUnif\ %=
QUnif\ Min/Max=
+R\ modif=
Reference\ value=
Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import=
Region\ %s\ already\ inited=La région %s a déjà été initialisée
1
0
r3826 - in branches/4.0.1/src/main/java/fr/ifremer/isisfish: types/hibernate util
by echatellier@users.forge.codelutin.com 02 Nov '13
by echatellier@users.forge.codelutin.com 02 Nov '13
02 Nov '13
Author: echatellier
Date: 2013-11-02 10:31:48 +0100 (Sat, 02 Nov 2013)
New Revision: 3826
Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3826
Log:
Comment non used code non compilable since hibernate 4.2
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java 2013-10-31 22:54:54 UTC (rev 3825)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java 2013-11-02 09:31:48 UTC (rev 3826)
@@ -69,9 +69,6 @@
*/
private static final Log log = LogFactory.getLog(MatrixType.class);
- public MatrixType() {
- }
-
public boolean isMutable() {
return true;
}
@@ -92,7 +89,7 @@
if(str.startsWith("[") && str.endsWith("]")) {
str = str.substring(1, str.length()-1); // remove [ and ]
}
- String [] dimAsString = StringUtil.split(str, ",");
+ String [] dimAsString = StringUtil.split(str, ",");
int[] result = new int[dimAsString.length];
int i = 0;
for (String dim : dimAsString) {
@@ -285,8 +282,8 @@
private static final Type[] hibernateTypes = {
StandardBasicTypes.STRING, //name (String)
StandardBasicTypes.STRING, //dim (int[])
- StandardBasicTypes.CLOB, //dimNames (String[])
- StandardBasicTypes.CLOB, //semantics (List[])
+ StandardBasicTypes.CLOB, //dimNames (String[])
+ StandardBasicTypes.CLOB, //semantics (List[])
StandardBasicTypes.CLOB //data (List<List<...>>)
};
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2013-10-31 22:54:54 UTC (rev 3825)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2013-11-02 09:31:48 UTC (rev 3826)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2006 - 2011 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric
+ * Copyright (C) 2006 - 2013 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -32,15 +32,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
-import org.hibernate.engine.QueryParameters;
-import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.spi.QueryParameters;
+import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.type.StandardBasicTypes;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaId;
-
/**
* Classe utilise pour convertir une chaine en un objet TopiaEntity.
*
@@ -50,15 +49,12 @@
*/
public class TopiaEntityConverter implements Converter {
- /**
- * Logger for this class
- */
- private static final Log log = LogFactory
- .getLog(TopiaEntityConverter.class);
+ /** Logger for this class. */
+ private static final Log log = LogFactory.getLog(TopiaEntityConverter.class);
protected TopiaContext context = null;
protected SessionImplementor session = null;
-
+
public TopiaEntityConverter(TopiaContext context) {
this.context = context;
}
@@ -67,15 +63,13 @@
this.session = session;
}
- /* (non-Javadoc)
- * @see org.apache.commons.beanutils.Converter#convert(java.lang.Class, java.lang.Object)
- */
+ @Override
public Object convert(Class type, Object value) {
Object result = null;
if (value instanceof TopiaEntity) {
result = value;
- } else if (value instanceof String){
- result = getTopiaEntity((String)value);
+ } else if (value instanceof String) {
+ result = getTopiaEntity((String) value);
} else {
throw new ConversionException("Can't convert '" + value + "' to " + type.getName());
}
@@ -88,7 +82,8 @@
try {
TopiaContext tx = context.beginTransaction();
result = tx.findByTopiaId(topiaId);
- // FIXME when after tx.closeContext we can continu to load object, call it here
+ // FIXME when after tx.closeContext we can continu to load
+ // object, call it here
tx.commitTransaction();
tx.closeContext();
} catch (TopiaException eee) {
@@ -99,19 +94,21 @@
} else if (session != null) {
QueryParameters params = new QueryParameters(StandardBasicTypes.STRING, topiaId);
String entityClass = TopiaId.getClassNameAsString(topiaId);
-
+
try {
+ /* Non compilable code since hibernate 4.2, but not a real, not usefull
boolean mustCommit = false;
if (!session.getJDBCContext().getTransaction().isActive()) {
mustCommit = true;
session.getJDBCContext().getTransaction().begin();
- }
+ }*/
String hql = "from " + entityClass + " where topiaId=?";
List results = session.list(hql, params);
- if (mustCommit) {
+
+ /*if (mustCommit) {
session.getJDBCContext().getTransaction().commit();
- }
- result = (TopiaEntity)results.get(0);
+ }*/
+ result = (TopiaEntity) results.get(0);
} catch (HibernateException eee) {
if (log.isDebugEnabled()) {
log.debug("Can't find TopiaEntity: " + topiaId, eee);
1
0