Author: bpoussin Date: 2008-08-13 13:18:46 +0000 (Wed, 13 Aug 2008) New Revision: 49 Modified: branches/3.2/scripts/SiMatrix.java Log: - modification pour que les simulations tournent (erreur entre reduce et reduceDim) - probleme de dimenstion matrice N per cell Modified: branches/3.2/scripts/SiMatrix.java =================================================================== --- branches/3.2/scripts/SiMatrix.java 2008-08-12 15:10:04 UTC (rev 48) +++ branches/3.2/scripts/SiMatrix.java 2008-08-13 13:18:46 UTC (rev 49) @@ -67,6 +67,7 @@ import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.Date; import fr.ifremer.isisfish.types.Month; +import java.util.Arrays; import java.util.Set; /** @@ -267,6 +268,8 @@ List<PopulationGroup> groups = matrixCatchPerStrategyMetPerCell.getSemantics(2); List<Zone> zones = getZones(date); + Set<Cell> cellPops = new HashSet(matrixCatchPerStrategyMetPerCell.getSemantics(4)); + MatrixND result = MatrixFactory.getInstance().create( ResultName.MATRIX_CATCH_PER_STRATEGY_MET_PER_ZONE_MET, new List[]{strategies, metiers, groups, zones}, @@ -274,7 +277,7 @@ // matrice temporaire ou les zones pops sont sommees MatrixND tmp = matrixCatchPerStrategyMetPerCell.sumOverDim(3); - tmp = tmp.reduce(3); + tmp = tmp.reduceDims(3); for (int s = 0; s < strategies.size(); s++) { Strategy str = strategies.get(s); @@ -289,9 +292,14 @@ List<Cell> cells = z.getCell(); for (int c = 0; c < cells.size(); c++) { Cell cell = cells.get(c); - value += tmp.getValue(str, metier, group, cell); - result.setValue(str, metier, group, z, value); + if (cellPops.contains(cell)) { + // les cells de la matrice sont les cells des + // zones pops, donc seul les intersections avec + // les cells des metiers sont des cells valides + value += tmp.getValue(str, metier, group, cell); + } } + result.setValue(str, metier, group, z, value); } } } @@ -307,7 +315,7 @@ // on somme sur les cellules MatrixND result = matrixCatchPerStrategyMetPerCell.sumOverDim(4); - result = result.reduce(4); + result = result.reduceDims(4); result.setName(ResultName.MATRIX_CATCH_PER_STRATEGY_MET_PER_ZONE_POP); return result; @@ -405,7 +413,7 @@ // Optimisation Hilaire MatrixND matrixFishingMortalityPerCellSumOverGroup = matrixFishingMortalityPerCell.sumOverDim(2); - matrixFishingMortalityPerCellSumOverGroup = matrixFishingMortalityPerCellSumOverGroup.reduce(2); + matrixFishingMortalityPerCellSumOverGroup = matrixFishingMortalityPerCellSumOverGroup.reduceDims(2); for (int s = 0; s < strategies.size(); s++) { Strategy str = strategies.get(s); @@ -1184,10 +1192,11 @@ List<PopulationGroup> groups = pop.getPopulationGroup(); List<Zone> zones = pop.getPopulationZone(); - + List<Cell> allCells = getCells(zones); + MatrixND result = MatrixFactory.getInstance().create( ResultName.MATRIX_ABUNDANCE + "_PER_CELL", - new List[]{groups, zones}, + new List[]{groups, zones, allCells}, new String[]{n_("Groups"), n_("Zones"), n_("Cells")}); for (int g=0; g < groups.size(); g++) { @@ -1197,10 +1206,11 @@ List<Cell> cells = zone.getCell(); for (int c=0; c<cells.size(); c++) { Cell cell = cells.get(c); - double value = survivalRatePerCell(date, group, zone, cell, matrixFishingMortality); + double value = survivalRatePerCell(date, group, zone, + cell, matrixFishingMortality); double n = N.getValue(g, z) / zone.sizeCell(); value *= n; - result.setValue(g, z, value); + result.setValue(g, z, c, value); } } } @@ -1223,7 +1233,7 @@ MatrixND result = matrixAbundancePerCell(N, pop, date, matrixFishingMortalityPerCell); result = result.sumOverDim(2); - result = result.reduce(2); + result = result.reduceDims(2); result.setName(ResultName.MATRIX_ABUNDANCE); return result;