From e1e1e2ff2661c009882fa1b20665682fa74bd056 Mon Sep 17 00:00:00 2001
From: Andreas Gattringer <andreas.gattringer@univie.ac.at>
Date: Sun, 18 Jun 2023 20:03:48 +0200
Subject: [PATCH] butterflies: save overlay grid

---
 .../butterflies/butterflies_action_helpers.c  |  3 +++
 src/modules/butterflies/butterflies_actions.c | 15 +++++++++++++
 src/modules/butterflies/butterflies_actions.h |  3 +++
 .../butterflies/butterflies_filenames.c       | 22 +++++++++++++++++++
 .../butterflies/butterflies_filenames.h       |  1 +
 5 files changed, 44 insertions(+)

diff --git a/src/modules/butterflies/butterflies_action_helpers.c b/src/modules/butterflies/butterflies_action_helpers.c
index 7b5cfa9..e551e1a 100644
--- a/src/modules/butterflies/butterflies_action_helpers.c
+++ b/src/modules/butterflies/butterflies_action_helpers.c
@@ -40,6 +40,7 @@ void bf_register_actions(struct cats_configuration *conf)
         register_action_function(conf, bf_action_dispersal, "butterfly_action_dispersal", "egg dispersal");
         register_action_function(conf, bf_action_save_grid, "bf_action_save_grid", "output");
         register_action_function(conf, bf_action_save_eggs_grid, "bf_action_save_egg_grid", "egg output");
+        register_action_function(conf, bf_action_save_overlay, "bf_action_save_overlay_grid", "overlay output");
         register_action_function(conf, bf_action_stats_gather, "bf_action_stats_gather", "gather stats");
         register_action_function(conf, bf_action_stats_reset, "bf_action_stats_reset", "reset stats");
         register_action_function(conf, bf_action_stats_write, "bf_action_stats_write", "write stats");
@@ -58,8 +59,10 @@ void bf_add_actions(struct cats_configuration *conf)
         append_action(conf, bf_action_stats_reset, ALL_STAGES, "resetting butterfly statistics", module_name);
         append_action_by_name(conf, "action_load_environments", ALL_STAGES, "environment update", module_name);
         append_action_by_name(conf, "action_overlay_update", ALL_STAGES, "overlay update", module_name);
+
         append_action(conf, bf_action_overlay_update, ALL_STAGES, "updating resource layer", module_name);
         append_action(conf, bf_action_generation_update, ALL_STAGES, "update generations", module_name);
+        append_action(conf, bf_action_save_overlay, ALL_STAGES, "save overlay", module_name);
 
         for (int32_t generation = data->generations_max; generation > 0; generation--) {
 
diff --git a/src/modules/butterflies/butterflies_actions.c b/src/modules/butterflies/butterflies_actions.c
index 50e91b0..a59032a 100644
--- a/src/modules/butterflies/butterflies_actions.c
+++ b/src/modules/butterflies/butterflies_actions.c
@@ -96,6 +96,21 @@ enum action_status bf_action_save_grid(struct cats_grid *grid, struct cats_confi
         return ACTION_RUN;
 }
 
+enum action_status bf_action_save_overlay(struct cats_grid *grid, struct cats_configuration *conf)
+{
+        int32_t id = grid->id;
+        char *filename = bf_population_filename(conf, grid);
+        int module_id = CATS_MODULE_ID;
+
+        struct grid_data_butterflies *module_data = grid->grid_modules[module_id].module_data;
+
+        struct grid_wrapper data = gridwrapper(module_data->info_layer, grid->dimension);
+        save_grid_to_gdal(&data, GDT_Int32, conf, filename, conf->param[id].species_name);
+        free(filename);
+        return ACTION_RUN;
+}
+
+
 
 enum action_status bf_action_save_eggs_grid(struct cats_grid *grid, struct cats_configuration *conf)
 {
diff --git a/src/modules/butterflies/butterflies_actions.h b/src/modules/butterflies/butterflies_actions.h
index 29b87ac..8149f3c 100644
--- a/src/modules/butterflies/butterflies_actions.h
+++ b/src/modules/butterflies/butterflies_actions.h
@@ -24,4 +24,7 @@ enum action_status bf_action_generation_start(struct cats_grid *grid, __attribut
 enum action_status bf_action_generation_update(struct cats_grid *grid, struct cats_configuration *conf);
 
 enum action_status bf_action_save_eggs_grid(struct cats_grid *grid, struct cats_configuration *conf);
+
+enum action_status bf_action_save_overlay(struct cats_grid *grid, struct cats_configuration *conf)
+
 #endif //CATS_BUTTERFLIES_ACTIONS_H
diff --git a/src/modules/butterflies/butterflies_filenames.c b/src/modules/butterflies/butterflies_filenames.c
index 3af222a..6f71a7f 100644
--- a/src/modules/butterflies/butterflies_filenames.c
+++ b/src/modules/butterflies/butterflies_filenames.c
@@ -63,6 +63,28 @@ char *bf_population_eggs_filename(struct cats_configuration *conf, struct cats_g
         return filename;
 }
 
+
+char *bf_population_overlay_filename(struct cats_configuration *conf, struct cats_grid *grid)
+{
+        assert(grid != NULL);
+        assert(conf != NULL);
+        assert(conf->grid_count == 1);
+
+
+        struct string_array *path = get_output_directory(conf, "butterfly-overlay"); // FIXME MAKE DIRECTORY
+
+        char *extension = get_extension(conf, "overlay");
+        struct string_array *name = standard_output_file_name(conf, NULL, NULL, NULL);
+        char *filename = assemble_filename(path, name, "_", extension);
+
+        free_string_array(&path);
+        free_string_array(&name);
+        free(extension);
+
+        return filename;
+}
+
+
 char *bf_stats_filename(struct cats_configuration *conf, struct cats_grid *grid)
 {
         struct string_array *path = get_output_directory(conf, "stats");
diff --git a/src/modules/butterflies/butterflies_filenames.h b/src/modules/butterflies/butterflies_filenames.h
index 0473281..79c42e5 100644
--- a/src/modules/butterflies/butterflies_filenames.h
+++ b/src/modules/butterflies/butterflies_filenames.h
@@ -5,4 +5,5 @@
 char *bf_population_eggs_filename(struct cats_configuration *conf, struct cats_grid *grid);
 char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *grid);
 char *bf_stats_filename(struct cats_configuration *conf, struct cats_grid *grid);
+char *bf_population_overlay_filename(struct cats_configuration *conf, struct cats_grid *grid);
 #endif //CATS_BUTTERFLIES_FILENAMES_H
-- 
GitLab