From 766e45e645c07ffd58ec35fa0529a58ebeb1ffd4 Mon Sep 17 00:00:00 2001
From: Ann-Kathrin Edrich <edrich@mbd.rwth-aachen.de>
Date: Mon, 2 Dec 2024 15:40:54 +0100
Subject: [PATCH] Fix user input check to accept csv for non-landslide database

---
 docs/source/index.rst                         |  9 ----
 src/gui_version/create_training_data_gui.py   |  9 ++--
 .../utilities/properties_user_input.csv       |  2 +-
 src/plain_scripts/create_training_data.py     | 41 ++++++++++++++-----
 .../utilities/properties_user_input.csv       |  2 +-
 5 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/docs/source/index.rst b/docs/source/index.rst
index 25295b8..0b9ed08 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -10,12 +10,3 @@ Susceptibility and Hazard mappIng fRamEwork SHIRE
    
    example
    example-plain
-
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/src/gui_version/create_training_data_gui.py b/src/gui_version/create_training_data_gui.py
index a83ff3c..2c36e2d 100644
--- a/src/gui_version/create_training_data_gui.py
+++ b/src/gui_version/create_training_data_gui.py
@@ -265,16 +265,17 @@ class create_training_data:
         """
 
         if self.properties_train['nonls_path'].split('.')[-1] == 'csv':
-            self.absence = pd.read_csv(self.properties_train['nonls_path'])
+            self.df_absence = pd.read_csv(self.properties_train['nonls_path'])
             
-            self.absence = self.absence.rename(
+            self.df_absence = self.df_absence.rename(
             columns={
                 self.properties_train['x_nonls']: self.properties_train['x'],
                 self.properties_train['y_nonls']: self.properties_train['y']})
 
             nonls_id = [
-                'nonls_event_' + str(i) for i in range(len(self.absence))]
-            self.absence.insert(0, self.properties_train['id'], nonls_id)
+                'nonls_event_' + str(i) for i in range(len(self.df_absence))]
+            if self.properties_train['id'] not in self.df_absence.columns.tolist():
+                self.df_absence.insert(0, self.properties_train['id'], nonls_id)
 
             self.logger.info('Absence locations added')
 
diff --git a/src/gui_version/utilities/properties_user_input.csv b/src/gui_version/utilities/properties_user_input.csv
index 80f4fef..f7f1bab 100644
--- a/src/gui_version/utilities/properties_user_input.csv
+++ b/src/gui_version/utilities/properties_user_input.csv
@@ -1,6 +1,6 @@
 key,type,range,extension,path
 ls_path,str,None,csv,1
-nonls_path,str,None,nc,1
+nonls_path,str,None,"nc,csv",1
 train_path,str,None,csv,1
 geo_path,str,None,csv,1
 feat_path,str,None,csv,1
diff --git a/src/plain_scripts/create_training_data.py b/src/plain_scripts/create_training_data.py
index 87233f0..03f251c 100644
--- a/src/plain_scripts/create_training_data.py
+++ b/src/plain_scripts/create_training_data.py
@@ -199,19 +199,37 @@ class create_training_data:
             Supplement presence data with absence data. It needs to be
             pre-generated.
         """
+        
+        if settings.path_nonls_locations.split('.')[-1] == 'csv':
+            self.df_absence = pd.read_csv(settings.path_nonls_locations)
+            
+            self.df_absence = self.df_absence.rename(
+            columns={
+                settings.nonls_database_x: settings.landslide_database_x,
+                settings.nonls_database_y: settings.landslide_database_y})
 
-        ds = nc.Dataset(settings.path_nonls_locations)
+            nonls_id = [
+                'nonls_event_' + str(i) for i in range(len(self.df_absence))]
+            if settings.ID not in self.df_absence.columns.tolist():
+                self.df_absence.insert(0, settings.ID, nonls_id)
 
-        x = ds[settings.nonls_database_x][:].data
-        y = ds[settings.nonls_database_y][:].data
-        
-        self.df_absence = pd.DataFrame(index=range(len(x)),
-                                       columns=list(self.df_train.columns))
+            self.logger.info('Absence locations added')
+
+        elif settings.path_nonls_locations.split('.')[-1] == 'nc':
+            ds = nc.Dataset(settings.path_nonls_locations)
+
+            x = ds[settings.nonls_database_x][:].data
+            y = ds[settings.nonls_database_y][:].data
 
-        self.df_absence[settings.ID] = ['nonls_event_' + str(i)
-                                        for i in range(len(x))]
-        self.df_absence[settings.landslide_database_x] = list(x)
-        self.df_absence[settings.landslide_database_y] = list(y)
+            self.df_absence = pd.DataFrame(index=range(len(x)),
+                                           columns=list(self.df_train.columns))
+
+            self.df_absence[settings.ID] = [
+                'nonls_event_' + str(i) for i in range(len(x))]
+            self.df_absence[settings.landslide_database_x] = list(x)
+            self.df_absence[settings.landslide_database_y] = list(y)
+
+            self.logger.info('Absence locations added')
 
     def label_training_data(self):
 
@@ -576,6 +594,9 @@ class create_training_data:
         """
             Determine if the extent of one or several
             clusters are too large for local interpolation
+            
+            Input:
+                -
 
             Output:
                 num_bb: list, names of clusters that need reclustering
diff --git a/src/plain_scripts/utilities/properties_user_input.csv b/src/plain_scripts/utilities/properties_user_input.csv
index 95a1a6c..7e159fc 100644
--- a/src/plain_scripts/utilities/properties_user_input.csv
+++ b/src/plain_scripts/utilities/properties_user_input.csv
@@ -1,6 +1,6 @@
 key,type,range,extension,path
 ls_path,str,None,csv,1
-nonls_path,str,None,nc,1
+nonls_path,str,None,"nc,csv",1
 train_path,str,None,csv,1
 geo_path,str,None,csv,1
 feat_path,str,None,csv,1
-- 
GitLab