diff --git a/data/input/northeastamerica/fishRIOBasin_Sapidissima_Rjava.xml b/data/input/northeastamerica/fishRIOBasin_Sapidissima_Rjava.xml index 3925a60f892405add402592cbc24674b419f83cc..39977935441a569bcd8f7fb3d1accf7782f4781f 100644 --- a/data/input/northeastamerica/fishRIOBasin_Sapidissima_Rjava.xml +++ b/data/input/northeastamerica/fishRIOBasin_Sapidissima_Rjava.xml @@ -333,6 +333,16 @@ <exportSeason>SPRING</exportSeason> <fileNameOutput>biomassFluxes</fileNameOutput> </species.WriteBiomassFluxes> + + <species.IdentifyPopulation> + <synchronisationMode>ASYNCHRONOUS</synchronisationMode> + <consoleDisplay>false</consoleDisplay> + <years> + <long>1813</long> + </years> + <fluxesSeason>SPRING</fluxesSeason> + <fileNameOutput>effectiveFluxes</fileNameOutput> + </species.IdentifyPopulation> </processesAtEnd> </processes> <useCemetery>false</useCemetery> diff --git a/exploration/NEA_sensitivity_analysis/tryFromRougier.R b/exploration/NEA_sensitivity_analysis/tryFromJava.R similarity index 78% rename from exploration/NEA_sensitivity_analysis/tryFromRougier.R rename to exploration/NEA_sensitivity_analysis/tryFromJava.R index fc903b0e77e85a12f9ce960b56bd716946bd635a..25e773922814aa504825b6e6bf6a4f00cac1726f 100644 --- a/exploration/NEA_sensitivity_analysis/tryFromRougier.R +++ b/exploration/NEA_sensitivity_analysis/tryFromJava.R @@ -32,13 +32,11 @@ timeStepDuration =1 seed = 1 - parametersNames = c("processes.processesEachStep.8.tempMinRep", "processes.processesEachStep.8.ratioS95_S50", "processes.processesEachStep.6.pHomingAfterEquil") thetas = c(10, 2, 0.7) - arguments = c('','-simDuration',simDuration, '-simBegin',simBegin, '-timeStepDuration',timeStepDuration, '-RNGStatusIndex', format(seed,scientific = FALSE), @@ -46,12 +44,21 @@ arguments = c('','-simDuration',simDuration, '-simBegin',simBegin, '-env',"data/input/northeastamerica/RIOBNneaBasins_Rjava.xml", '-observers',"data/input/northeastamerica/RIO_obs_empty.xml") -outputFile = paste0("Avirer",seed) -.jinit(classpath = "", force.init = TRUE) +outputFile = paste0("SA/",seed) .jinit(classpath = jarfile, force.init = TRUE) .jcall("miscellaneous.EasyRun","V","runSimulation",arguments, outputFile,.jarray(parametersNames),.jarray(thetas)) .jcall("miscellaneous.EasyRun","[D","getValuesFromEnvironement","getMeanLastPercOfAut") .jcall("miscellaneous.EasyRun","[D","getValuesFromAquanismGroup","getRangeDistribution") - - - +# truc = .jcall("miscellaneous.EasyRun","Ljava/util/List;", +# "getAListFromAquanismGroupProcess","processes.processesAtEnd.1.getRecords") +# +# trucMieux = .jcast(truc, "ljava/util/ArrayList", convert.array = FALSE) +# +# i <- .jnew("java/lang/Integer", as.integer(10)) +# print(i) +# print(.jsimplify(i)) +# .jcall(trucMieux, "java/lang/Object", "get", i) +# +# with(trucMieux, {get(0)}) +# ArrayList = J("java.util.ArrayList") +# .jclassPath() diff --git a/src/main/java/miscellaneous/EasyRun.java b/src/main/java/miscellaneous/EasyRun.java index 1beb5fda3895a266d203b3e55d4553481863ea3d..c29a463ddd9c644f8cb7893471b3806b0fe19298 100644 --- a/src/main/java/miscellaneous/EasyRun.java +++ b/src/main/java/miscellaneous/EasyRun.java @@ -1,6 +1,6 @@ /* - * Copyright (C) 2014 dumoulin - * + * Copyright (C) 2021 lambert Dumoulin + * * * 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 @@ -17,6 +17,7 @@ package miscellaneous; import java.util.Arrays; +import java.util.List; import fr.cemagref.simaqualife.extensions.pilot.BatchRunner; import fr.cemagref.simaqualife.pilot.Pilot; @@ -25,7 +26,6 @@ public class EasyRun { static Pilot pilot; - public static void runSimulation(String[] batchArgs, String outputfilename, String[] paramNames, double[] paramValues) throws Exception { @@ -55,13 +55,18 @@ public class EasyRun { } - public static double[] getValuesFromEnvironement(String outputName) throws Exception { - return (double[]) ReflectUtils.getValueFromPath(pilot.getAquaticWorld().getEnvironment(), outputName); + public static double[] getValuesFromEnvironement(String targetName) throws Exception { + return (double[]) ReflectUtils.getValueFromPath(pilot.getAquaticWorld().getEnvironment(), targetName); + } + + + public static double[] getValuesFromAquanismGroup(String targetName) throws Exception { + return (double[]) ReflectUtils.getValueFromPath(pilot.getAquaticWorld().getAquaNismsGroupsList().get(0), targetName); } - public static double[] getValuesFromAquanismGroup(String outputName) throws Exception { - return (double[]) ReflectUtils.getValueFromPath(pilot.getAquaticWorld().getAquaNismsGroupsList().get(0), outputName); + public static List getAListFromAquanismGroupProcess(String targetPath) throws Exception { + return (List) ReflectUtils.getValueFromPath(pilot.getAquaticWorld().getAquaNismsGroupsList().get(0), targetPath); } @@ -78,6 +83,10 @@ public class EasyRun { runSimulation(batchArguments, "tsointsoin", parameterNames, parameterValues); + List truc = getAListFromAquanismGroupProcess("processes.processesAtEnd.1.getRecords"); + System.out.println(truc.get(0).toString()); + // System.out.println(getAListFromAquanismGroupProcess("processes.processesAtEnd.1.getRecords")); + System.out.println(Arrays.toString(getValuesFromEnvironement("getMeanLastPercOfAut"))); System.out.println(Arrays.toString(getValuesFromAquanismGroup("getRangeDistribution"))); diff --git a/src/main/java/species/IdentifyPopulation.java b/src/main/java/species/IdentifyPopulation.java index a1ef3a7f3b8254b730d76caf618beb37d3eacc98..d6d5961157ba0dc8f7e01e5120a39b1aa6818e33 100644 --- a/src/main/java/species/IdentifyPopulation.java +++ b/src/main/java/species/IdentifyPopulation.java @@ -23,12 +23,13 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; -import environment.RIOBasinNetwork; import environment.RiverBasin; import environment.Time; import environment.Time.Season; @@ -39,17 +40,76 @@ import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; */ public class IdentifyPopulation extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> { + /** + * + */ + public class Record implements Serializable { + long year; + String migrationBasin; + String originBasin; + long effective; + + public Record(long year, String migrationBasin, String originBasin, long effective) { + super(); + this.year = year; + this.migrationBasin = migrationBasin; + this.originBasin = originBasin; + this.effective = effective; + } + + + @Override + public String toString() { + return "[" + this.year + "; " + this.migrationBasin + "; " + this.originBasin + "; " + this.effective + "]"; + } + + + /** + * @return the year + */ + public long getYear() { + return this.year; + } + + + /** + * @return the migrationBasin + */ + public String getMigrationBasin() { + return this.migrationBasin; + } + + + /** + * @return the originBasin + */ + public String getOriginBasin() { + return this.originBasin; + } + + + /** + * @return the effective + */ + public long getEffective() { + return this.effective; + } + + } + private boolean consoleDisplay = false; private List<Long> years; private Season fluxesSeason = Season.SPRING; - private String fileNameOutput = "data/output/fluxes"; + private String fileNameOutput = "effectiveFluxes"; + + private transient List<Record> records; private transient BufferedWriter bW; - private String sep; + private transient String sep; + // @Observable(description = "fluxes") // private transient long[] fluxes; - public static void main(String[] args) { System.out.println((new XStream(new DomDriver())).toXML(new IdentifyPopulation())); } @@ -64,18 +124,13 @@ public class IdentifyPopulation extends AquaNismsGroupProcess<DiadromousFish, Di public void doProcess(DiadromousFishGroup group) { if (bW == null) { if (fileNameOutput != null) { - sep = ";"; + sep = ","; try { new File(group.getOutputPath() + fileNameOutput).getParentFile().mkdirs(); bW = new BufferedWriter( new FileWriter(new File(group.getOutputPath() + fileNameOutput + group.getSimulationId() + ".csv"))); - // BasinNetworkReal nbr= (BasinNetworkReal) pilot.getAquaticWorld().getEnvironment(); - RIOBasinNetwork nbr = group.getEnvironment(); - bW.write("year" + sep + "migrationBasin"); - for (String basinName : nbr.getRiverBasinNames()) { - bW.write(sep + basinName); - } + bW.write("year" + sep + "migrationBasin" + sep + "originBasin" + sep + "effective"); bW.write("\n"); } catch (IOException e) { e.printStackTrace(); @@ -87,20 +142,33 @@ public class IdentifyPopulation extends AquaNismsGroupProcess<DiadromousFish, Di String[] basinNames = group.getEnvironment().getRiverBasinNames(); + // put in hasmap + if (records == null) + records = new ArrayList<Record>(); + + for (RiverBasin basin : group.getEnvironment().getRiverBasins()) { + for (RiverBasin originBasin : group.getEnvironment().getRiverBasins()) { + long effective = Math.round(basin.getSpawnerOrigins().getMeans().get(originBasin.getName())); + records.add(new Record(time.getYear(group.getPilot()), basin.getName(), originBasin.getName(), effective)); + } + } + + // write in file if (fileNameOutput != null) { try { - for (RiverBasin basin : group.getEnvironment().getRiverBasins()) { - bW.write(time.getYear(group.getPilot()) + sep + basin.getName()); - - for (String basinName : basinNames) { - bW.write(sep + Math.round(basin.getSpawnerOrigins().getMeans().get(basinName))); + for (RiverBasin migrationBasin : group.getEnvironment().getRiverBasins()) { + for (String originBasinName : basinNames) { + bW.write(time.getYear(group.getPilot()) + sep + migrationBasin.getName() + sep + originBasinName); + bW.write(sep + Math.round(migrationBasin.getSpawnerOrigins().getMeans().get(originBasinName))); + bW.write("\n"); } - bW.write("\n"); } + bW.flush(); } catch (IOException e) { e.printStackTrace(); } + // display in console if (consoleDisplay) { System.out.print("MIGRATION" + "\t"); for (String basinName : basinNames) { @@ -128,4 +196,13 @@ public class IdentifyPopulation extends AquaNismsGroupProcess<DiadromousFish, Di } } } + + + /** + * @return the records + */ + public List<Record> getRecords() { + return this.records; + } + }