From c5661d582e8ee5fdc3347a398ee66fea445470dc Mon Sep 17 00:00:00 2001
From: Poulet Camille <camille.poulet@irstea.priv>
Date: Wed, 11 Sep 2019 15:01:07 +0200
Subject: [PATCH] New class to export biomass exchange

---
 src/main/java/species/ExportBiomass.java | 120 +++++++++++++++++++++++
 src/main/java/species/ExportFluxes.java  |   3 +-
 2 files changed, 122 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/species/ExportBiomass.java

diff --git a/src/main/java/species/ExportBiomass.java b/src/main/java/species/ExportBiomass.java
new file mode 100644
index 0000000..1b2c810
--- /dev/null
+++ b/src/main/java/species/ExportBiomass.java
@@ -0,0 +1,120 @@
+package species;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+import environment.RiverBasin;
+import environment.Time;
+import environment.Time.Season;
+import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess;
+import fr.cemagref.simaqualife.pilot.Pilot;
+import miscellaneous.Miscellaneous;
+import species.DiadromousFish.Stage;
+import species.ReproduceAndSurviveAfterReproductionWithDiagnose;
+
+/**
+ *
+ */
+public class ExportBiomass extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> {
+
+	private double survivalRateAfterReproduction = 0.1;
+	private Season exportSeason = Season.SPRING;
+
+	private String fileNameOutput = "BiomassFluxes";
+
+	private transient BufferedWriter bW;
+	private transient String sep=";";
+
+
+	public static void main(String[] args) {
+		System.out.println((new XStream(new DomDriver()))
+				.toXML(new ExportFluxes()));
+	}
+
+	/* (non-Javadoc)
+	 * @see fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess#initTransientParameters(fr.cemagref.simaqualife.pilot.Pilot)
+	 */
+	@Override
+	public void initTransientParameters(Pilot pilot) {
+		super.initTransientParameters(pilot);
+		sep=";";
+
+	}
+
+	@Override
+	public void doProcess(DiadromousFishGroup group) {
+
+		if (bW==null){
+			if (fileNameOutput != null){
+				new File(group.getOutputPath()+fileNameOutput).getParentFile().mkdirs();
+				try {
+					bW = new BufferedWriter(new FileWriter(new File(group.getOutputPath()+
+							fileNameOutput +group.getSimulationId()+ ".csv")));
+
+					bW.write("year"+sep+"migrationBasin" ); //create the field of the column
+					for (String birthBasinName : group.getEnvironment().getRiverBasinNames()) {
+						bW.write(sep + birthBasinName); // write each basin name in the file 
+					}
+
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+
+		try {
+			if (Time.getSeason(pilot) == exportSeason & Time.getYear(pilot)>1900) {
+
+
+				for (RiverBasin migrationBasin : group.getEnvironment().getRiverBasins()) {
+					//Create the map to get the biomass in each birth basin
+					Map<String, Double> spawnerOriginsBeforeReproduction = new HashMap<String, Double>(group.getEnvironment().getRiverBasinNames().length); 
+					for (String basinName : group.getEnvironment().getRiverBasinNames()){
+						spawnerOriginsBeforeReproduction.put(basinName,  0.);			
+					}
+					double biomass=0.;
+					//compute the cumulative effective per birth basin 
+					if (migrationBasin.getFishs(group) != null) {
+						
+						for (DiadromousFish fish : migrationBasin.getFishs(group)) {
+							
+							double survivalAmount = Miscellaneous.binomialForSuperIndividual(group.getPilot(), fish.getAmount(), survivalRateAfterReproduction); 
+							 biomass = group.getNutrientRoutine().getWeight(fish) * (fish.getAmount() - survivalAmount); 
+							
+							if (fish.getStage() == Stage.MATURE) {
+								String birthBasinName = fish.getBirthBasin().getName();
+								spawnerOriginsBeforeReproduction.put(birthBasinName, spawnerOriginsBeforeReproduction.get(birthBasinName) + biomass);
+
+
+							}
+
+						}
+					}
+
+					//write the first two fields of the line 
+					bW.write(Time.getYear(pilot)+sep+migrationBasin.getName());
+
+					//write the cumulative effective from birth basin 
+					for (String birthBasinName : group.getEnvironment().getRiverBasinNames()) {
+						bW.write(sep+spawnerOriginsBeforeReproduction.get(birthBasinName));
+					}
+					//write an end-of(line
+					bW.write("\n");
+				}
+			}
+			if (group.getPilot().getCurrentTime()== group.getPilot().getSimBegin()+group.getPilot().getSimDuration()-1)
+				bW.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/species/ExportFluxes.java b/src/main/java/species/ExportFluxes.java
index da3a294..fe767bc 100644
--- a/src/main/java/species/ExportFluxes.java
+++ b/src/main/java/species/ExportFluxes.java
@@ -30,6 +30,7 @@ public class ExportFluxes extends AquaNismsGroupProcess<DiadromousFish, Diadromo
 	private transient BufferedWriter bW;
 	private transient String sep=";";
 
+
 	public static void main(String[] args) {
 		System.out.println((new XStream(new DomDriver()))
 				.toXML(new ExportFluxes()));
@@ -55,7 +56,7 @@ public class ExportFluxes extends AquaNismsGroupProcess<DiadromousFish, Diadromo
 					bW = new BufferedWriter(new FileWriter(new File(group.getOutputPath()+
 							fileNameOutput +group.getSimulationId()+ ".csv")));
 
-					bW.write("year"+sep+"migrationBasin"); //create the field of the column
+					bW.write("year"+sep+"migrationBasin" ); //create the field of the column
 					for (String birthBasinName : group.getEnvironment().getRiverBasinNames()) {
 						bW.write(sep + birthBasinName); // write each basin name in the file 
 					}
-- 
GitLab