Author: echatellier Date: 2012-09-06 14:54:46 +0200 (Thu, 06 Sep 2012) New Revision: 292 Url: http://forge.codelutin.com/repositories/revision/isis-fish-data/292 Log: Mise ?\195?\160 jour de TailleMin Modified: trunk/rules/TailleMin.java Modified: trunk/rules/TailleMin.java =================================================================== --- trunk/rules/TailleMin.java 2012-08-27 19:58:16 UTC (rev 291) +++ trunk/rules/TailleMin.java 2012-09-06 12:54:46 UTC (rev 292) @@ -2,7 +2,7 @@ * #%L * IsisFish data * %% - * Copyright (C) 2006 - 2011 Ifremer, CodeLutin + * Copyright (C) 2006 - 2012 Ifremer, CodeLutin, Stéphanie Mahevas, 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 @@ -23,15 +23,12 @@ import static org.nuiton.i18n.I18n._; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixIterator; import org.nuiton.math.matrix.MatrixND; import scripts.ResultName; -import scripts.SiMatrix; import fr.ifremer.isisfish.entities.Metier; import fr.ifremer.isisfish.entities.MetierSeasonInfo; import fr.ifremer.isisfish.entities.Population; @@ -45,15 +42,20 @@ import fr.ifremer.isisfish.util.Doc; /** - * Cette methode remplace aussi TailleMinSurvieRejet si propSurvie est > 0 + * Cette regles tient compte de la taille minimum des poissons capturable. * + * Les captures ne sont pas impactées, mais des rejets sont générés si la + * taille des poissons est inférieures à TailleMin. + * + * En cas de propSurvie positif, la matrice d'effectif est modifié + * pour tenir compte de la partie de poisson rejeté qui survi. + * * Created: 30 novembre 2006 - * - * @author anonymous <anonymous@labs.libre-entreprise.org> + * + * @author smahevas * @version $Revision: 1.1 $ - * - * Last update: $Date: 2007-01-24 18:25:34 $ - * by : $Author: bpoussin $ + * + * Last update: $Date: 2007-01-24 18:25:34 $ by : $Author: bpoussin $ */ public class TailleMin extends AbstractRule { @@ -74,12 +76,14 @@ @Doc(value = "Proportion de survie") public double param_propSurvie = 0; - + + protected boolean affectation = true; + public String[] necessaryResult = { - // put here all necessary result for this rule - // example: - // ResultName.MATRIX_BIOMASS, - // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, }; @Override @@ -94,19 +98,20 @@ */ @Override public String getDescription() throws Exception { - return _("Tous les poissons dont la taille est inférieure à TailleMin" + - " ne seront pas capturés. Ils sont placés en rejets et rejetés" + - " suivant la proportion de survie."); + return _("Tous les poissons dont la taille est inférieure à TailleMin" + + " ne seront pas capturés. Ils sont placés en rejets et rejetés" + + " suivant la proportion de survie."); } /** - * Appelé au démarrage de la simulation, cette méthode permet d'initialiser - * des valeurs + * Appele au demarrage de la simulation, cette methode permet + * d'initialiser des valeurs de la règle. * - * @param context La simulation pour lequel on utilise cette regle + * @param context La simulation pour laquelle on utilise cette regle */ @Override public void init(SimulationContext context) throws Exception { + } /** @@ -135,12 +140,12 @@ * * @param context la simulation pour lequel on utilise cette regle * @param step le pas de temps courant - * @param metier le metier concerné + * @param metier le metier concerne * @return vrai si on souhaite que les actions soit faites */ @Override - public boolean condition(SimulationContext context, TimeStep step, Metier metier) - throws Exception { + public boolean condition(SimulationContext context, TimeStep step, + Metier metier) throws Exception { log.info("Recherche si la taille Minimale s'applique"); boolean result = true; if (step.before(param_beginStep)) { @@ -156,79 +161,74 @@ } /** - * Si la condition est vrai alors cette action est executee avant le pas - * de temps de la simulation. + * Si la condition est vrai alors cette action est executee avant le pas de + * temps de la simulation. * * @param context la simulation pour lequel on utilise cette regle * @param step le pas de temps courant - * @param metier le metier concerné + * @param metier le metier concerne */ @Override - public void preAction(SimulationContext context, TimeStep step, Metier metier) - throws Exception { - // nothing + public void preAction(SimulationContext context, TimeStep step, + Metier metier) throws Exception { + + affectation = true; // pour que affectation soit vraie au debut de + // chaque pas de temps pour rentrer au moins une + // fois dans postaction } /** - * Si la condition est vrai alors cette action est executée apres le pas + * Si la condition est vrai alors cette action est executee apres le pas * de temps de la simulation. * * @param context La simulation pour lequel on utilise cette regle * @param step le pas de temps courant - * @param metier le metier concerné + * @param metier le metier concerne */ @Override - public void postAction(SimulationContext context, TimeStep step, Metier metier) - throws Exception { - log.info("*$*$*$* TailleMin.actionApres:" + step + " metapop:" + - param_species + " metier:" + metier); + public void postAction(SimulationContext context, TimeStep step, + Metier metier) throws Exception { + //log.info("*$*$*$* TailleMin.actionApres:" + step + " metapop:" + // + param_species + " metier:" + metier); - if (isCaptureDate(step, param_species, metier)) { - log.info( - "*$*$*$* ok affecte capture infÃ?rieure Ã? TailleMin au rejet"); - // ATTENTION - // les captures pour cette metapop ne sont plus du qu'au metier pour qui - // l'espece est secondaire: elles sont affectees aux rejets + if (affectation) { + log.info("*$*$*$* ok affecte capture inferieure a TailleMin au rejet"); + // ATTENTION + // les captures pour cette metapop ne sont plus du qu'au metier pour + // qui l'espece est secondaire: elles sont affectees aux rejets - //pb : ne se fait pas par metier - //il faut une matrice pour chaques pas de temps qui stocke les rejets - //par metier, par metapop et par classes d'age (comme pour les captures) - ////// - log.info("deb de affecterCaptureREJETTailleMin"); + // pb : ne se fait pas par metier + // il faut une matrice pour chaques pas de temps qui stocke les + // rejets par metier, par metapop et par classes d'age (comme pour + // les captures) + //log.info("deb de affecterCaptureREJETTailleMin"); PopulationMonitor popMon = context.getPopulationMonitor(); - SiMatrix siMatrix = SiMatrix.getSiMatrix(context); - List<Population> pops = siMatrix.getPopulations(step); - for (Population pop : pops) { - if (pop.getSpecies().equals(param_species)) { - if (popMon.getDiscard(step, pop) == null) { - MatrixND discard = popMon.getCatch(pop).copy(); - MatrixND eff = popMon.getN(pop); + for (Population pop : param_species.getPopulation()) { + MatrixND discard = popMon.getCatch(pop).copy(); + MatrixND eff = popMon.getN(pop); - for (MatrixIterator i = discard.iterator(); i.next();) { - Object[] coordonnees = i.getSemanticsCoordinates(); - PopulationGroup group = - (PopulationGroup) coordonnees[2]; - if (group.getLength() >= param_TailleMin) { - i.setValue(0); - } else if (param_propSurvie > 0) { - eff.setValue(coordonnees[2], coordonnees[3], - eff.getValue(coordonnees[2], - coordonnees[3]) + i.getValue() * - param_propSurvie); - } - } - discard.setName( - ResultName.MATRIX_DISCARDS_PER_STR_MET_PER_ZONE_POP); - popMon.addDiscard(step, pop, discard); + for (MatrixIterator i = discard.iterator(); i.next();) { + Object[] coordonnees = i.getSemanticsCoordinates(); + PopulationGroup group = (PopulationGroup) coordonnees[2]; + if (group.getLength() >= param_TailleMin) { + i.setValue(0); + } else if (param_propSurvie > 0) { + eff.setValue(coordonnees[2], coordonnees[3], + eff.getValue(coordonnees[2], coordonnees[3]) + + i.getValue() * param_propSurvie); } } + discard.setName(ResultName.MATRIX_DISCARDS_PER_STR_MET_PER_ZONE_POP); + popMon.addDiscard(step, pop, discard); } - log.info("fin de affecterCaptureRejetTailleMin"); + //log.info("fin de affecterCaptureRejetTailleMin"); - //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire + // on a affecte une fois cette meta pop au rejet il ne faut pas le + // refaire pour ce pas de temps + affectation = false; } } }