diff --git a/src/main/java/species/PopulateBasinNetwork.java b/src/main/java/species/PopulateBasinNetwork.java index aae4046c03976a067b46a4d38f1d837cd471c95e..a6c0ee94bef49796c68abb12172889ee59b205e9 100644 --- a/src/main/java/species/PopulateBasinNetwork.java +++ b/src/main/java/species/PopulateBasinNetwork.java @@ -23,7 +23,7 @@ public class PopulateBasinNetwork extends AquaNismsGroupProcess<DiadromousFish, public void doProcess(DiadromousFishGroup group) { for (Basin basin : group.getEnvironment().getRiverBasins()){ for (int i=0; i < nbSIPerBasin; i++){ - group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.UNDIFFERENCIED)); + group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.FEMALE)); } } } diff --git a/src/main/java/species/PopulateBasinNetworkWithANorthLimit.java b/src/main/java/species/PopulateBasinNetworkWithANorthLimit.java index c1ea61d092aed0ddb4c90da8fe6272c8b40cabfe..a11504f25dc1ded0cbf1337965c350434931e602 100644 --- a/src/main/java/species/PopulateBasinNetworkWithANorthLimit.java +++ b/src/main/java/species/PopulateBasinNetworkWithANorthLimit.java @@ -47,7 +47,7 @@ public class PopulateBasinNetworkWithANorthLimit extends AquaNismsGroupProcess<D for (RiverBasin basin : group.getEnvironment().getRiverBasins()){ if (basin.getLatitude()<=northLimitLatitude){ for (int i=0; i < nbSIPerBasin; i++){ - group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.UNDIFFERENCIED)); + group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.FEMALE)); } } } diff --git a/src/main/java/species/PopulateWithASinglePopulation.java b/src/main/java/species/PopulateWithASinglePopulation.java index 5af2db3d2a432d09a4b4fa924b88be98825299c0..de93c702a43c91c73091d00d51e5f21a5663a5a0 100644 --- a/src/main/java/species/PopulateWithASinglePopulation.java +++ b/src/main/java/species/PopulateWithASinglePopulation.java @@ -25,7 +25,7 @@ public class PopulateWithASinglePopulation extends AquaNismsGroupProcess<Diadrom Basin basin = group.getEnvironment().getRiverBasins()[bassinInd]; for (int i=0; i < nbSIPerBasin; i++){ - group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbIndPerSI, Gender.UNDIFFERENCIED)); + group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbIndPerSI, Gender.FEMALE)); } } } diff --git a/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java b/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java index 63f83c7bcd6002dd403b266a9c83e3ed9faa51eb..a7ffa89871d199929d0aafed7c7045b47b3719f9 100644 --- a/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java +++ b/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java @@ -61,6 +61,12 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG private transient NormalGen genNormal; private transient MortalityFunction mortalityFunction; + /** + * relationship between + * recruitment in number of juvenile on spawning grounds + * stock in number of FEMALES + * @unit + */ private transient StockRecruitmentRelationship stockRecruitmentRelationship; // private transient UniformGen genUniform; @@ -85,10 +91,10 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG for(RiverBasin riverBasin : group.getEnvironment().getRiverBasins()){ double b, c, alpha, beta, amountPerSuperIndividual , S95, S50 ; - double numberOfGenitors = 0.; + double numberOfFemaleGenitors = 0.; double numberOfAutochtones = 0.; - double numberOfSpawnerForFirstTime = 0.; - double spawnersForFirstTimeAgesSum = 0.; + double numberOfFemaleSpawnerForFirstTime = 0.; + double femaleSpawnersForFirstTimeAgesSum = 0.; long survivalAmount; double muRecruitment = 0.; //double weightOfGenitors = 0.; @@ -145,15 +151,16 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG Map<Integer, Long> ageOfNativeSpawners = new TreeMap<Integer, Long>(); // compute the number of spawners and keep the origines of the spawners - for( DiadromousFish fish : fishInBasin){ - if( fish.isMature()){ + for (DiadromousFish fish : fishInBasin){ + + if (fish.getGender() == Gender.FEMALE & fish.isMature()){ //System.out.println(fish.getAge() + " -> "+ fish.getLength() + " ("+fish.getStage()+")"); if (fish.getNumberOfReproduction() < 1) { - numberOfSpawnerForFirstTime++; - spawnersForFirstTimeAgesSum += fish.getAge(); + numberOfFemaleSpawnerForFirstTime++; + femaleSpawnersForFirstTimeAgesSum += fish.getAge(); } - numberOfGenitors += fish.getAmount() ; + numberOfFemaleGenitors += fish.getAmount() ; // spawner per origine String basinName = fish.getBirthBasin().getName(); @@ -182,7 +189,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG } // keep the spawner number - riverBasin.setLastSpawnerNumber(numberOfGenitors); + riverBasin.setLastSpawnerNumber(numberOfFemaleGenitors); // -------------------------------------------------------------------------------------------------- // Diagnose of the population dynamics in the basin @@ -193,7 +200,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG // initialise the mortality function for the autochnous spawners // use to approximate the mortality of all the spawners to give a proxy of the Allee trap - if (numberOfGenitors > 0.) { + if (numberOfFemaleGenitors > 0.) { List<Trio<Integer, Long, Long>> mortalityData= new ArrayList<Trio<Integer, Long, Long>>(); // first age // second effective of native spwaner @@ -224,7 +231,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG "\tZcrash="+ stockRecruitmentRelationship.getSigmaZcrash() + "\tZ="+ riverBasin.getNativeSpawnerMortality()); System.out.println("\tStrap="+stockRecruitmentRelationship.getStockTrap(riverBasin.getNativeSpawnerMortality())+ - "\tStotal="+numberOfGenitors+"\tSautochthonous="+ + "\tStotal="+numberOfFemaleGenitors+"\tSautochthonous="+ spawnerOriginsDuringReproduction.get(riverBasin.getName())); @@ -236,7 +243,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG if (riverBasin.getNativeSpawnerMortality()>stockRecruitmentRelationship.getSigmaZcrash()) message="overZcrash"; else { - if (numberOfGenitors < stockTrap) + if (numberOfFemaleGenitors < stockTrap) message = "inTrapWithStrayers"; else { if (spawnerOriginsDuringReproduction.get(riverBasin.getName()) < stockTrap) @@ -253,10 +260,10 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG // Reproduction process (number of recruits) // -------------------------------------------------------------------------------------------------- - if (numberOfGenitors > 0.) { + if (numberOfFemaleGenitors > 0.) { //BH Stock-Recruitment relationship with logistic depensation - double meanNumberOfRecruit = stockRecruitmentRelationship.getRecruitment(numberOfGenitors); + double meanNumberOfRecruit = stockRecruitmentRelationship.getRecruitment(numberOfFemaleGenitors); // lognormal random draw muRecruitment = Math.log(meanNumberOfRecruit) - (Math.pow(sigmaRecruitment,2))/2; @@ -265,11 +272,11 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG //System.out.println(group.getPilot().getCurrentTime()+" "+Time.getSeason(group.getPilot())+" "+ riverBasin.getName()+": " + numberOfGenitors + " spwaners \tgive "+ numberOfRecruit + " recruits"); // keep last % of autochtone - riverBasin.getLastPercentagesOfAutochtones().push(numberOfAutochtones * 100 / numberOfGenitors); + riverBasin.getLastPercentagesOfAutochtones().push(numberOfAutochtones * 100 / numberOfFemaleGenitors); // keep the number of spawners for the firt time in the basin - if (numberOfSpawnerForFirstTime>0){ - riverBasin.getSpawnersForFirstTimeMeanAges().push(spawnersForFirstTimeAgesSum/numberOfSpawnerForFirstTime); + if (numberOfFemaleSpawnerForFirstTime>0){ + riverBasin.getSpawnersForFirstTimeMeanAges().push(femaleSpawnersForFirstTimeAgesSum/numberOfFemaleSpawnerForFirstTime); }else{ riverBasin.getSpawnersForFirstTimeMeanAges().push(0.); } @@ -286,7 +293,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG long effectiveAmount = numberOfRecruit / numberOfsuperIndividual; for (int i = 0; i < numberOfsuperIndividual; i++){ - group.addAquaNism(new DiadromousFish(group.getPilot(), riverBasin, initialLength, effectiveAmount, Gender.UNDIFFERENCIED)); + group.addAquaNism(new DiadromousFish(group.getPilot(), riverBasin, initialLength, effectiveAmount, Gender.FEMALE)); } // stock the first year when recruitment is non nul