package analyseplans; import static org.codelutin.i18n.I18n._; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import scripts.ResultName; import java.io.*; import java.io.File; import java.io.FileReader; import java.io.Writer; import java.util.*; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.codelutin.math.matrix.*; import org.codelutin.util.*; import org.codelutin.topia.*; import fr.ifremer.isisfish.*; import fr.ifremer.isisfish.types.*; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.Date; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.simulator.AnalysePlan; import fr.ifremer.isisfish.simulator.AnalysePlanContext; import fr.ifremer.isisfish.simulator.AnalysePlanIndependent; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.ResultStorage; /* * SAAnchois.java * * Created: 6 juin 2007 * * @author bpoussin * @version $Revision: 1.27 $ * * Last update: $Date: 2007/05/24 09:29:18 $ * by : $Author: bpoussin $ */ public class CalibreMpert_0508 implements AnalysePlanIndependent { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(CalibreMpert_0508.class); static private final String MORT = "MortalitePertLarvesAnnuelles_1.5-2.5"; public int param_firstSimu = 0; public int param_simulationNumber = 13; public String param_directory = "Inputs_Anchois/CalibreM/"; public String [] necessaryResult = { }; public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur le plan. * @return L'aide ou la description du plan */ public String getDescription() throws Exception { // TODO return _(""); } /** * Appel� au d�marrage de la simulation, cette m�thode permet d'initialiser * des valeurs * @param simulation La simulation pour lequel on utilise cette regle */ public void init(AnalysePlanContext context) throws Exception { } /** * @param name le nom de l'element a recuperer * @param simulation le numero de la simulation * @return */ private String getString(String name, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); String result = prop.getProperty(""+simulation); return result; } private double [] getList(String name, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); double [] result = StringUtil.toArrayDouble(prop.getProperty(""+simulation).split(";")); return result; } /** * Call before each simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean beforeSimulation(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { int simulation = nextSimulation.getParameter().getAnalysePlanNumber()+param_firstSimu; if (simulation < param_simulationNumber) { //String reproductionEq = getString (REPRO, simulation); String mortalityEq = getString (MORT, simulation); TopiaContext tx = nextSimulation.getStorage().beginTransaction(); PopulationDAO popDAO = IsisFishDAOHelper.getPopulationDAO(tx); Population pop = popDAO.findByName("Anchois_long"); // modif l equation de mortalit� /* avec ancien Mpareto "double [] Gir = { 108.157079907313,104.040441019196,114.867357631927,102.775218050167,95.5102675884572,97.4002336900792,97.6896434553373,95.698434692503 };"+ "double[] Lc = { 1000,160.131882990035,1000,149.685042379658,119.942294122065,125.499807305511,126.431453048777,120.459876791989 };"+ "double[] Ll = { 127.063329543669,118.855448855865,145.161762228118,116.576747614374,104.931458169551,107.770091172289,108.214891158855,105.209212529286 };"+ "double[] Ro = { 103.573871689489,100.116829822123,108.991227355935,99.0360699306787,92.6833694996939,94.3585183099993,94.6137091311044,92.8508073480452 };"+ "double[] No = { 110.499702421585,106.002939231345,118.004634498226,104.634276240226,96.8752699349442,98.8790216414094,99.1866992785972,97.0743501369063 };"+*/ System.out.println("BEFORE SIMU"); Equation eqm = pop.getNaturalDeathRate(); String tab = "double [] Gir ={ 77.46876,74.52017, 82.27508,73.61394,68.41034,69.76405,69.97134,68.54511,72.50687};"+ "double[] Lc = {1000.00000,114.69632,1000.00000,107.21365,85.91006,89.89069,90.55799,86.28078,100.71808};"+ "double[] Ll = {91.01058,85.13159,103.97380,83.49945,75.15837,77.19158,77.51017,75.35732,81.59127};"+ "double[] Ro = {74.18599,71.70984,78.06623,70.93573,66.38554,67.58538,67.76817,66.50547,69.98226};"+ "double[] No = {79.14669,75.92583,84.52219,74.94551,69.38804,70.82325,71.04362,69.53063,73.75340};"+ "Date date = context.getSimulationControl().getDate();"+ "int y = date.getYear()+5;"+ "if (group == null){ return 0; } else if (group.getId() == 0 ){if(y < 9){"+ "if (\"gironde\".equals(zone.getName())){return Gir[y];}else if (\"Rochebonne\".equals(zone.getName())) {return Ro[y];}else if (\"LandesCote\".equals(zone.getName())){return Lc[y];}else if (\"LandesLarge\".equals(zone.getName())){return Ll[y];}else if (\"MigHiver\".equals(zone.getName())){return No[y];}else return 0;"+ "}else return 102.9699;"+ "} else if (group.getId() == 1 ){ return 0 ;"; System.out.println("mortalite : " + pop.getNaturalDeathRate().getContent()); String newMeq = tab + mortalityEq; eqm.setContent(newMeq); tx.commitTransaction(); return true; } else { return false; } } /** * Call after each simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception { return true; } }