diff --git a/src/main/java/environment/BasinNetwork.java b/src/main/java/environment/BasinNetwork.java new file mode 100644 index 0000000000000000000000000000000000000000..7254a3f0dce5e7efc78295661a4a57ece447f232 --- /dev/null +++ b/src/main/java/environment/BasinNetwork.java @@ -0,0 +1,258 @@ +package environment; + +import java.util.Map; + +import fr.cemagref.simaqualife.kernel.AquaNismsGroup; +import fr.cemagref.simaqualife.kernel.spatial.Environment; +import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters; +import fr.cemagref.simaqualife.pilot.Pilot; +import species.DiadromousFish; + +public abstract class BasinNetwork extends Environment<Basin, DiadromousFish> { + + protected int memorySize; // size of all the queues + protected int memorySizeLongQueue; // size of all longer queues + + protected double cVthresholdForFinalStates = 5.; + protected double RecruitmentThresholdForFsAndKappa = 50.; + + protected long yearOfTheBegin = 1800; + + protected transient double[][] distanceGrid; + + protected transient Time time; + + + @InitTransientParameters + public void initTransientParameters(Pilot pilot) { + time = new Time(); + } + + + public abstract Basin getAssociatedRiverBasin(Basin basin); + + + public abstract Basin getAssociatedInshoreBasin(Basin basin); + + + public abstract Basin getAssociatedOffshoreBasin(Basin basin); + + + public abstract Map<Basin, Double> getNeighboursWithDistance(Basin basin); + + + public abstract Basin[] getBasins(); + + + public abstract RiverBasin getRiverBasin(String basinName); + + + public abstract InshoreBasin getInshoreBasin(String riverBasinName); + + + public abstract RiverBasin[] getRiverBasins(); + + + public abstract InshoreBasin[] getInshoreBasins(); + + + public abstract String[] getRiverBasinNames(); + + + public int[] getFinalStates() { + // TODO ask to Nicolas to be able to use ReflectUtils with arguments + + RiverBasin[] riverBasins = getRiverBasins(); + int[] finalStates = new int[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + RiverBasin riverBasin = riverBasins[i]; + double roundedCV = Math.round(riverBasin.getLastRecruitments().getCoefficientVariation() * 10000.) / 100.; + if (roundedCV == 0.) { + finalStates[i] = 0; + } else if (roundedCV < this.cVthresholdForFinalStates) { + finalStates[i] = 2; + } else { + finalStates[i] = 1; + } + } + return finalStates; + } + + + public int[] getFinalStatesWithStochasticity() { + // TODO ask to Nicolas to be able to use ReflectUtils with arguments + + RiverBasin[] riverBasins = getRiverBasins(); + int[] finalStates = new int[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + RiverBasin riverBasin = riverBasins[i]; + double roundedCV = Math.round(riverBasin.getLastRecruitmentExpectations().getCoefficientVariation() * 10000.) / 100.; + if (roundedCV == 0.) { + finalStates[i] = 0; + } else if (roundedCV < this.cVthresholdForFinalStates) { + finalStates[i] = 2; + } else { + finalStates[i] = 1; + } + } + return finalStates; + } + + + public int[] getFinalStatesForKappa() { + // TODO ask to Nicolas to be able to use ReflectUtils with arguments + + RiverBasin[] riverBasins = getRiverBasins(); + int[] finalStatesForKappa = new int[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + RiverBasin riverBasin = riverBasins[i]; + if (riverBasin.getLastRecruitments().getMean() <= RecruitmentThresholdForFsAndKappa) { + finalStatesForKappa[i] = 0; + } else { + finalStatesForKappa[i] = 1; + } + } + return finalStatesForKappa; + } + + + public double[] getMeanLastRecruitments() { + RiverBasin[] riverBasins = getRiverBasins(); + double[] data = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getLastRecruitments().getMean(); + } + return data; + } + + + public double[] getProbOfNonNulRecruitmentDuringLastYears() { + RiverBasin[] riverBasins = getRiverBasins(); + double[] data = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + if (riverBasins[i].getNumberOfNonNulRecruitmentDuringLastYears().getSum() < 1.0) { + data[i] = 0.001; + } else if (riverBasins[i].getNumberOfNonNulRecruitmentDuringLastYears() + .getSum() > (riverBasins[i].getNumberOfNonNulRecruitmentDuringLastYears().size() - 1)) { + data[i] = 0.999; + } else { + data[i] = riverBasins[i].getNumberOfNonNulRecruitmentDuringLastYears().getSum() + / (riverBasins[i].getNumberOfNonNulRecruitmentDuringLastYears().size()); + } + } + return data; + } + + + public double[] getFinalProbabilityOfPresence() { // function computed for obtain probability of presence in 2100 + // for the allis shad case study + RiverBasin[] riverBasins = getRiverBasins(); + double[] data = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getNumberOfNonNulRecruitmentForFinalProbOfPres().getSum() + / riverBasins[i].getNumberOfNonNulRecruitmentForFinalProbOfPres().size(); + } + return data; + } + + + public double getMeanLastRecruitmentsBV2() { + RiverBasin[] riverBasins = getRiverBasins(); + double data = riverBasins[1].getLastRecruitments().getMean(); + return data; + } + + + public double[] getMeanLastRecruitmentExpectations() { + RiverBasin[] riverBasins = getRiverBasins(); + double[] data = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getLastRecruitmentExpectations().getMean(); + } + return data; + } + + + public double[] getGeoMeansLastRecsOverProdCaps() { + // TODO ask to Nicolas to be able to use ReflectUtils with arguments + + RiverBasin[] riverBasins = getRiverBasins(); + double[] geoMeans = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + geoMeans[i] = riverBasins[i].getLastRecsOverProdCaps().getGeometricMean(); + } + return geoMeans; + } + + + public double[] getMeanLastPercOfAut() { // give the mean of the last % of autochtone spawners + RiverBasin[] riverBasins = getRiverBasins(); + double[] data = new double[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getLastPercentagesOfAutochtones().getMean(); + } + return data; + } + + + public long[] getYearsOfFirstNonNulRep() { + RiverBasin[] riverBasins = getRiverBasins(); + long[] data = new long[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getYearOfFirstNonNulRep(); + } + return data; + } + + + public long[] getYearsOfLastNulRep() { + RiverBasin[] riverBasins = getRiverBasins(); + long[] data = new long[riverBasins.length]; + for (int i = 0; i < riverBasins.length; i++) { + data[i] = riverBasins[i].getYearOfLastNulRep(); + } + return data; + } + + + /** + * @return the yearOfTheBegin + */ + public long getYearOfTheBegin() { + return yearOfTheBegin; + } + + + @Override + public void addAquaNism(DiadromousFish fish, AquaNismsGroup group) { + // TODO Auto-generated method stub + } + + + @Override + public void moveAquaNism(DiadromousFish fish, AquaNismsGroup group, Basin destination) { + // TODO Auto-generated method stub + } + + + @Override + public void removeAquaNism(DiadromousFish fish, AquaNismsGroup group) { + // TODO Auto-generated method stub + } + + + public abstract Map<String, Double[]> getTemperaturesBasin(long year); + + + public abstract String getTemperatureCatchmentFile(); + + + /** + * @return the time + */ + public Time getTime() { + return time; + + } + +}