From 271173f923dc0e053f1b33b365101939f31c0b6c Mon Sep 17 00:00:00 2001
From: "patrick.lambert" <patrick.lambert@irstea.fr>
Date: Tue, 31 Mar 2020 18:07:31 +0200
Subject: [PATCH] new calculation of weight and distance

---
 .../DisperseAndMigrateToRiverBasic.java       | 39 +++++++++++--------
 ...oRiverWithMultiNomDistriAndDeathBasin.java |  4 +-
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/main/java/species/DisperseAndMigrateToRiverBasic.java b/src/main/java/species/DisperseAndMigrateToRiverBasic.java
index cbbae29..6b41b09 100644
--- a/src/main/java/species/DisperseAndMigrateToRiverBasic.java
+++ b/src/main/java/species/DisperseAndMigrateToRiverBasic.java
@@ -2,11 +2,12 @@ package species;
 
 import java.util.TreeMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import environment.Basin;
 import environment.BasinNetwork;
 import environment.RiverBasin;
-
+import environment.SeaBasin;
 import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess;
 import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters;
 import fr.cemagref.simaqualife.pilot.Pilot;
@@ -74,7 +75,7 @@ public class DisperseAndMigrateToRiverBasic extends AquaNismsGroupProcess<Diadro
 	 *  	<key> RiverBasin
 	 *  	<value> weight  to calculate probaility to disperse
 	 */
-	protected transient Map<Basin,Map<Basin,Double>> accessibleBasinsPerBasin;
+	protected transient Map<SeaBasin,Map<RiverBasin,Double>> basinWeightsPerBasin;
 	
 	/**
 	 *  a map associtaing a sea bassin with the distance for each river bassin
@@ -83,7 +84,7 @@ public class DisperseAndMigrateToRiverBasic extends AquaNismsGroupProcess<Diadro
 	 *  	<key> RiverBasin
 	 *  	<value> distance between the river Basin and the river basin associated with the sea basin
 	 */
-	protected transient Map<Basin,Map<Basin,Double>> distanceBasinsPerBasin;
+	protected transient Map<SeaBasin,Map<RiverBasin,Double>> basinDistancesPerBasin;
 	
 
 	@Override
@@ -92,23 +93,27 @@ public class DisperseAndMigrateToRiverBasic extends AquaNismsGroupProcess<Diadro
             super.initTransientParameters(pilot);
 		// calcul les poids des bassins voisins qui ne d�pendent pas des poissons pour chaque SeaBassin
 		BasinNetwork bn = (BasinNetwork) pilot.getAquaticWorld().getEnvironment();
-		accessibleBasinsPerBasin = new TreeMap<Basin, Map<Basin,Double>>();
-		distanceBasinsPerBasin = new TreeMap<Basin, Map<Basin,Double>>();
+		basinDistancesPerBasin = new TreeMap<SeaBasin, Map<RiverBasin,Double>>();
+		basinWeightsPerBasin = new TreeMap<SeaBasin, Map<RiverBasin,Double>>();
 
-		for (Basin seaBas : bn.getSeaBasins()){
-			// compoute the distance with between seaBas and all the river basins 
-			Map<Basin,Double> mapDist = bn.getNeighboursWithDistance(seaBas);	
-			distanceBasinsPerBasin.put(seaBas, mapDist);
-						
+		for (SeaBasin seaBas : bn.getSeaBasins()){
+			// compute the distance with between seaBas and all the river basins 
+			Map<RiverBasin, Double> mapDist = new TreeMap<RiverBasin, Double>();
 			// Compute the weight of each river basin
-			Map<Basin,Double> accessibleBasins = bn.getNeighboursWithDistance(seaBas);
-			for (Basin bas : accessibleBasins.keySet()){
+			Map<RiverBasin,Double> mapWeight = new TreeMap<RiverBasin, Double>();
+			
+			for (Entry<Basin, Double> entry :  bn.getNeighboursWithDistance(seaBas).entrySet()) {
+				RiverBasin associatedRiverBasin = (RiverBasin) bn.getAssociatedRiverBasin(entry.getKey());
+				mapDist.put(associatedRiverBasin, entry.getValue());
+			
 				double weight = alpha0Rep 
-						- alpha1Rep * ((accessibleBasins.get(bas)-meanInterDistance)/standardDeviationInterDistance)
-						+ alpha3Rep*((((RiverBasin) bn.getAssociatedRiverBasin(bas)).getAttractiveSurface()-meanBvSurface)/standardDeviationBvSurface);
-				accessibleBasins.put(bas, weight);
-			}						
-			accessibleBasinsPerBasin.put(seaBas, accessibleBasins);
+						- alpha1Rep * ((entry.getValue()-meanInterDistance)/standardDeviationInterDistance)
+						+ alpha3Rep*((associatedRiverBasin.getAttractiveSurface()-meanBvSurface)/standardDeviationBvSurface);
+				mapWeight.put(associatedRiverBasin, weight);
+			
+			}	
+			basinDistancesPerBasin.put(seaBas, mapDist);
+			basinWeightsPerBasin.put(seaBas, mapWeight);			
 		}
 	}
 
diff --git a/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java b/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java
index 1e59138..f0bc5b6 100644
--- a/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java
+++ b/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java
@@ -3,9 +3,11 @@ package species;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import environment.Basin;
 import environment.BasinNetwork;
+import environment.RiverBasin;
 import environment.Time;
 import environment.Time.Season;
 import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess;
@@ -143,7 +145,7 @@ public class DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin extends Di
 
 								// upload the weights associated with features of the catchment (accessibility and attractivity)
 								List<Duo<Basin, Double>> accBasOfFish = new ArrayList<Duo<Basin, Double>>();
-								for (Map.Entry<Basin, Double> entry : accessibleBasinsPerBasin.get(fish.getPosition()).entrySet()) {
+								for (Entry<RiverBasin, Double> entry : basinWeightsPerBasin.get(fish.getPosition()).entrySet()) {
 									Duo<Basin, Double> duo = new Duo<Basin, Double>(entry.getKey(), entry.getValue());
 									accBasOfFish.add(duo);
 								}
-- 
GitLab