Author: jcouteau Date: 2009-03-11 18:28:16 +0000 (Wed, 11 Mar 2009) New Revision: 72 Added: trunk/exports/SensitivityBiomassPopage.java trunk/exports/SensitivityCapturesPoidsPopage.java Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java trunk/sensitivity/SensitivityCalculatorRMorris.java Log: Adding export for sensitivity Modifs on calculators (beginning of continuous matrix implementation, taking cardinality into account on continuous domains) Copied: trunk/exports/SensitivityBiomassPopage.java (from rev 71, trunk/exports/SensitivityBiomass.java) =================================================================== --- trunk/exports/SensitivityBiomassPopage.java (rev 0) +++ trunk/exports/SensitivityBiomassPopage.java 2009-03-11 18:28:16 UTC (rev 72) @@ -0,0 +1,69 @@ +package exports; + +import static org.codelutin.i18n.I18n._; + +import java.io.Writer; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.math.matrix.MatrixIterator; +import org.codelutin.math.matrix.MatrixND; + +import scripts.ResultName; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.types.Date; + +public class SensitivityBiomassPopage implements SensitivityExport { + + /** to use log facility, just put in your code: log.info("..."); */ + static private Log log = LogFactory.getLog(SensitivityBiomassPopage.class); + + protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS }; + + @Override + public void export(SimulationStorage simulation, Writer out) + throws Exception { + Date lastDate = simulation.getResultStorage().getLastDate(); + double biomass = 0.0; + for (Population pop : simulation.getParameter().getPopulations()) { + if (pop.getName().equals("popage")) { + MatrixND mat = simulation.getResultStorage().getMatrix(pop, + ResultName.MATRIX_BIOMASS); + for (MatrixIterator i = mat.iterator(); i.hasNext();) { + i.next(); + Object[] sems = i.getSemanticsCoordinates(); + Date date = (Date) sems[0]; + + if (date.afterOrEquals(lastDate)) { + biomass = biomass + i.getValue(); + } + } + } + } + out.write(Double.toString(biomass)); + + } + + @Override + public String getDescription() { + return _("Biomass for the last time step. Biomass is the sum on the groups and zones"); + } + + @Override + public String getExportFilename() { + return "SensitivityBiomassPopage"; + } + + @Override + public String getExtensionFilename() { + return ".csv"; + } + + @Override + public String[] getNecessaryResult() { + return this.necessaryResult; + } + +} Property changes on: trunk/exports/SensitivityBiomassPopage.java ___________________________________________________________________ Name: svn:mergeinfo + Added: trunk/exports/SensitivityCapturesPoidsPopage.java =================================================================== --- trunk/exports/SensitivityCapturesPoidsPopage.java (rev 0) +++ trunk/exports/SensitivityCapturesPoidsPopage.java 2009-03-11 18:28:16 UTC (rev 72) @@ -0,0 +1,73 @@ +package exports; + +import static org.codelutin.i18n.I18n._; + +import java.io.Writer; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.math.matrix.MatrixIterator; +import org.codelutin.math.matrix.MatrixND; + +import scripts.ResultName; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.types.Date; + +public class SensitivityCapturesPoidsPopage implements SensitivityExport { + + /** to use log facility, just put in your code: log.info("..."); */ + static private Log log = LogFactory.getLog(CapturesPoids.class); + + protected String[] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP }; + + @Override + public void export(SimulationStorage simulation, Writer out) + throws Exception { + Date lastDate = simulation.getResultStorage().getLastDate(); + Double capturesWeight = 0.0; + + for (Population pop : simulation.getParameter().getPopulations()) { + if (pop.getName().equals("popage")) { + for (Date date = new Date(0); !date.after(lastDate); date = date + .next()) { + MatrixND mat = simulation + .getResultStorage() + .getMatrix( + date, + pop, + ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP); + if (mat != null) { // can be null if simulation is stopped before last year simulation + mat = mat.sumOverDim(0); //sum on strategy + for (MatrixIterator i = mat.iterator(); i.hasNext();) { + i.next(); + capturesWeight=capturesWeight+i.getValue(); + } + } + } + } + } + } + + @Override + public String getDescription() { + return _("Captures in weight for the last year for the popage population. Captures is the sum of zones, groups, metiers and strategies"); + } + + @Override + public String getExportFilename() { + return "SensitivityCapturesPoidsPopage"; + } + + @Override + public String getExtensionFilename() { + return ".csv"; + } + + @Override + public String[] getNecessaryResult() { + return this.necessaryResult; + } + +} Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-10 17:53:18 UTC (rev 71) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-11 18:28:16 UTC (rev 72) @@ -96,6 +96,16 @@ * result; } + if (factor.getDomain() instanceof ContinuousDomain) { + factor + .setValueForIdentifier((((ContinuousDomain<Double>) factor + .getDomain()).getMaxBound() - ((ContinuousDomain<Double>) factor + .getDomain()).getMinBound()) + / rest + + ((ContinuousDomain<Double>) factor + .getDomain()).getMinBound()); + } + factor.setValueForIdentifier(rest); experimentScenario.addFactor(factor); } @@ -216,7 +226,7 @@ + simulationStorages.get(0).getParameter() .getSensitivityExportNames().get(k) + ".csv\")"); - //FIXME export through java to enable export when using Rserve + //FIXME export through java to enable export when using Rserve } } catch (Exception e) { Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-10 17:53:18 UTC (rev 71) +++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-11 18:28:16 UTC (rev 72) @@ -29,7 +29,6 @@ import org.codelutin.math.matrix.MatrixND; import org.codelutin.util.FileUtil; -import scripts.ResultName; import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; @@ -40,6 +39,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; /** * Implementation of Morris method using R @@ -51,8 +51,6 @@ */ public class SensitivityCalculatorRMorris implements SensitivityCalculator { - protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS }; - public SensitivityScenarios compute(DesignPlan plan) { double[] dataframe = new double[0]; @@ -94,7 +92,9 @@ + ((DiscreteDomain<? extends Serializable>) domain) .getValues().size() + ","; } else if (domain instanceof ContinuousDomain) { - rInstruction = rInstruction + "4" + ","; + rInstruction = rInstruction + + ((ContinuousDomain<? extends Serializable>) domain) + .getCardinality() + ","; } } else { if (domain instanceof DiscreteDomain) { @@ -102,7 +102,9 @@ + ((DiscreteDomain<? extends Serializable>) domain) .getValues().size(); } else if (domain instanceof ContinuousDomain) { - rInstruction = rInstruction + "4"; + rInstruction = rInstruction + + ((ContinuousDomain<? extends Serializable>) domain) + .getCardinality(); } } } @@ -188,8 +190,26 @@ Scenario experimentScenario = new Scenario(); for (int i = 0; i < factorNumber; i++) { Factor<? extends Serializable> factor = factors.get(i); - factor.setValueForIdentifier(morris - .getValue(new int[] { i, j })); + if (factor.getDomain() instanceof MatrixContinuousDomain) { + if (((MatrixContinuousDomain<?>) factor.getDomain()) + .getOperator().equals("*")) { + factor + .setValueForIdentifier(((MatrixContinuousDomain<?>) factor + .getDomain()).getMatrix().mults( + morris.getValue(new int[] { i, j }))); + } + if (((MatrixContinuousDomain<?>) factor.getDomain()) + .getOperator().equals("/")) { + factor + .setValueForIdentifier(((MatrixContinuousDomain<?>) factor + .getDomain()).getMatrix().divs( + morris.getValue(new int[] { i, j }))); + } + + } else { + factor.setValueForIdentifier(morris.getValue(new int[] { i, + j })); + } experimentScenario.addFactor(factor); } thisExperimentScenarios.add(experimentScenario); @@ -277,8 +297,4 @@ return "Implementation of Morris method using R"; } - public String[] getNecessaryResult() { - return this.necessaryResult; - } - }