From 77227932edd5539178410cf82b8f70f08d59ca58 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Tue, 14 May 2024 14:10:34 +0200
Subject: [PATCH] update: try to read ice stats from json file, index error

---
 .../plots/skumsj\303\270en_sub_div.json"      |   0
 server/__pycache__/consts.cpython-311.pyc     | Bin 445 -> 510 bytes
 server/__pycache__/scheduler.cpython-311.pyc  | Bin 2110 -> 2110 bytes
 server/consts.py                              |   1 +
 server/main.py                                |   4 +-
 .../update_measurements.cpython-311.pyc       | Bin 12093 -> 12373 bytes
 server/map_handler/update_measurements.py     |  53 ++++++++++--------
 server/scheduler.py                           |   2 +-
 8 files changed, 33 insertions(+), 27 deletions(-)
 rename server/ModelFromNVE/output/plots/skumsjoen_sub_div.json => "server/ModelFromNVE/output/plots/skumsj\303\270en_sub_div.json" (100%)

diff --git a/server/ModelFromNVE/output/plots/skumsjoen_sub_div.json "b/server/ModelFromNVE/output/plots/skumsj\303\270en_sub_div.json"
similarity index 100%
rename from server/ModelFromNVE/output/plots/skumsjoen_sub_div.json
rename to "server/ModelFromNVE/output/plots/skumsj\303\270en_sub_div.json"
diff --git a/server/__pycache__/consts.cpython-311.pyc b/server/__pycache__/consts.cpython-311.pyc
index bb38aa0189f45c62dc5b19e249a301babbd4ce76..eb4afa133d16daaf3ab0bd3a76b2116f6953d098 100644
GIT binary patch
delta 133
zcmdnX{EwM;IWI340}x31Ij1#D<dtN!n5b^b5yhUu5zL^;IWZwsy-KM#wWut$NZ&U<
zB{j#bC_mRP%vC?Xw4|W4q*%WoCm%@qX>v?F5yf{)FgV09BsktbG$bH2WU?%y2Ny5U
aY(^k1_L-c|=qz|c#Nq;jAOsb01H}R5>?H;O

delta 72
zcmeyzyqB4GIWI340}xygv`urH$ScWcGEv=>C73~zV`54wv!5pW#1B!EV;P;fcz}u+
Vfw<Uh@+wAW?h6dUKvV?M3jlPU5KRC8

diff --git a/server/__pycache__/scheduler.cpython-311.pyc b/server/__pycache__/scheduler.cpython-311.pyc
index 5dfa13e3a8023a5fbb246518a9a4001310b685d7..13179f2c3d337e9604693b9203e3b97a55f38fbb 100644
GIT binary patch
delta 22
ccmdlduup(@IWI340}xCPaZa<_$ZN;}06>)mJ^%m!

delta 22
ccmdlduup(@IWI340}v?NJEt*j<Tc~~06M4ycmMzZ

diff --git a/server/consts.py b/server/consts.py
index a667ac84..ec6507e5 100644
--- a/server/consts.py
+++ b/server/consts.py
@@ -12,3 +12,4 @@ SSL_CERT_PATH = CERT_DIR + "testCert.crt"
 # File paths
 MAP_HANDLER_PATH = "server/map_handler/"
 LAKE_RELATIONS_PATH = MAP_HANDLER_PATH + "lake_relations/"
+STATS_OUTPUT_PATH = "server/ModelFromNVE/outputs/plots/"
diff --git a/server/main.py b/server/main.py
index 0bbb4ff8..5971cecf 100644
--- a/server/main.py
+++ b/server/main.py
@@ -11,7 +11,7 @@ from server.scheduler import update_scheduler
 from server.consts import LAKE_RELATIONS_PATH
 from map_handler.get_lake_relation import get_map_data_handler
 from map_handler.input_new_data import input_new_Lidar_data
-from map_handler.update_measurements import update_measurements_handler, addTestData
+from map_handler.update_measurements import update_measurements_handler, add_test_data
 
 app = Flask(__name__)
 terminate_server = 0
@@ -124,7 +124,7 @@ class IceHTTP(BaseHTTPRequestHandler):
             lake_name_param = query_params.get('lake', [''])[0]
             lake_name = unquote(lake_name_param)  # Decode url param
 
-            addTestData(self, lake_name)
+            add_test_data(self, lake_name)
 
         elif self.path.startswith('/new_lidar_data'):
             parsed_path = urlparse(self.path)
diff --git a/server/map_handler/__pycache__/update_measurements.cpython-311.pyc b/server/map_handler/__pycache__/update_measurements.cpython-311.pyc
index 41296d85fecc3924b3c0adf40fb30f6899f92868..801383752939945e212637b04e598c1ae5883cd2 100644
GIT binary patch
delta 4174
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

delta 3977
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
Pu~(SmESq3S5N`iJt=)`|

diff --git a/server/map_handler/update_measurements.py b/server/map_handler/update_measurements.py
index 7c1e0bd9..cda26653 100644
--- a/server/map_handler/update_measurements.py
+++ b/server/map_handler/update_measurements.py
@@ -3,8 +3,7 @@ import json
 import random
 from datetime import datetime
 
-from server.consts import LAKE_RELATIONS_PATH
-from server.ModelFromNVE.icemodellingscripts.getIceThicknessLakes import get_raw_dates, ice_prognosis_raw_data
+from server.consts import LAKE_RELATIONS_PATH, STATS_OUTPUT_PATH
 
 
 def update_measurements_handler(self, lake_name: str):
@@ -14,7 +13,7 @@ def update_measurements_handler(self, lake_name: str):
     self.send_header("Content-type", "application/json")
     self.end_headers()
 
-    self.wfile.write(measurement_data.encode('utf-8'))
+    self.wfile.write(measurement_data)
 
 
 def update_measurements(lake_name: str) -> (int, str):
@@ -31,18 +30,24 @@ def update_measurements(lake_name: str) -> (int, str):
             return 404, f"{lake_name} does not exists in the system"
 
         # Define file path to lidar data file
-        file_path = os.path.join(LAKE_RELATIONS_PATH, lake_name + '_lidar_data.json')
+        lidar_data_path = os.path.join(LAKE_RELATIONS_PATH, lake_name + '_lidar_data.json')
 
         # Lists to store processed data
         sub_div_ids = []
         measurements = []
 
         # Some lakes may not have any recent lidar data, so must check if the file exists
-        if os.path.exists(file_path):
+        if os.path.exists(lidar_data_path):
             # Read the newest lidar data from JSON file
-            with open(file_path, 'r') as file:
+            with open(lidar_data_path, 'r') as file:
                 lidar_data = json.load(file)
 
+            all_ice_stats = []
+            if os.path.exists(STATS_OUTPUT_PATH + lake_name + "_sub_div.json"):
+                # Tro to read ice stats from NVE model for current lake
+                with open(STATS_OUTPUT_PATH + lake_name + "_sub_div.json", 'r') as file:
+                    all_ice_stats = json.load(file)
+
             # Iterate over all fetched rows
             for measurement in lidar_data:
                 processed_subdivs = []
@@ -68,19 +73,18 @@ def update_measurements(lake_name: str) -> (int, str):
                     center_lng = round(sub_division['CenLongitude'], 4)
                     avg_thickness = sub_division['AvgThickness']
 
-                    # Read from json file
-                    # lakName_sub_div.json
-                    # Add center coord txt file
-
-                    # Retrieve ice statistics for current subdivision
-                    ice_stats = get_raw_dates(ice_prognosis_raw_data(sub_div_id=subdiv_id, x=center_lat, y=center_lng))
+                    # Initialise list for the current ice stats
+                    ice_stats = []
 
+                    print("Fails here?")
                     # Ice statistics were retrieved successfully
-                    if len(ice_stats) > 0 and len(ice_stats[0]) > 0:
+                    if len(all_ice_stats) >= subdiv_id is not None or all_ice_stats[subdiv_id] != "Null":
+                        ice_stats = all_ice_stats[subdiv_id]
                         accuracy = 3
 
+                        print("Fails here, later?")
                         # Increase accuracy by 1 if the LiDar data and NVE data have a minimal discrepancy
-                        if abs(avg_thickness - ice_stats[0]['Total ice (m)']) < 1.0:
+                        if abs(avg_thickness - all_ice_stats[subdiv_id][3]['Black ice (m)']) < 1.0:
                             accuracy = 4
                     else:  # Failed to retrieve ice statistics, initialise empty ice stats object
                         ice_stats = {
@@ -117,7 +121,7 @@ def update_measurements(lake_name: str) -> (int, str):
                 measurements.append(new_measurement)
 
         # Populate remaining non-processed subdivisions and create "invalid" or "proxy" measurement to store them
-        remaining_sub_divs = fill_remaining_subdivisions(lake_name, sub_div_ids)
+        remaining_sub_divs = fill_remaining_subdivisions(lake_name, sub_div_ids, all_ice_stats)
         proxy = {
             'MeasurementID': -1,
             'TimeMeasured': str(datetime.now()),
@@ -135,14 +139,16 @@ def update_measurements(lake_name: str) -> (int, str):
 
         # Convert list of dictionaries to JSON
         response_data = json.dumps(measurements, indent=4)
-        # Set headers
+
+        # Return data
         return 200, response_data
 
     except Exception as e:
+        print(f"Error in updating measurements: {e}")
         return 500, f"Error in updating measurements: {e}".encode('utf-8')
 
 
-def fill_remaining_subdivisions(lake_name: str, processed_ids: list):
+def fill_remaining_subdivisions(lake_name: str, processed_ids: list, all_ice_stats):
     """
     Returns a list of subdivision dictionaries for subdivisions without measurements.
 
@@ -170,10 +176,11 @@ def fill_remaining_subdivisions(lake_name: str, processed_ids: list):
                 center_lng = round(sub_div['properties']['sub_div_center'][1], 4)
 
                 # Fetch weather data for each subdivision from the NVE model
-                ice_stats = get_raw_dates(ice_prognosis_raw_data(sub_div_id=sub_div_id, x=center_lat, y=center_lng))
+                ice_stats = []
 
-                if len(ice_stats) > 0 and len(ice_stats[0]) > 0:
-                    total_ice_thickness = ice_stats[0]['Total ice (m)']
+                if len(all_ice_stats) >= sub_div_id and all_ice_stats[sub_div_id] != "Null":
+                    ice_stats = all_ice_stats[sub_div_id]
+                    total_ice_thickness = ice_stats[0]['Black ice (m)']
                     accuracy = 1
                 else:  # Initialise empty ice stats
                     ice_stats = {
@@ -199,9 +206,7 @@ def fill_remaining_subdivisions(lake_name: str, processed_ids: list):
                     'CenLatitude': center_lat,
                     'CenLongitude': center_lng,
                     'Accuracy': accuracy,
-                    # Calculate ice thickness based on total ice, temporary
-                    # 'Color': calculateColor(ice_stats[0]['Total ice (m)']),
-                    'Color': calculateColor(ice_stats[0]['Black ice (m)']),
+                    'Color': calculateColor(total_ice_thickness),
                     'IceStats': ice_stats,
                 }
                 sub_divisions.append(sub_division)
@@ -227,7 +232,7 @@ def calculateColor(thickness: float):
         return 0  # Grey
 
 
-def addTestData(self, lake_name: str):
+def add_test_data(self, lake_name: str):
     """
     Adds random test data to lake_name_lidar_data.json. This function is purly for testing, not production.
     The function overwrites the lidar data for the selected lake.
diff --git a/server/scheduler.py b/server/scheduler.py
index 91d98279..4e57e3cd 100644
--- a/server/scheduler.py
+++ b/server/scheduler.py
@@ -14,7 +14,7 @@ def update_all_measurements(lake_names: list):
         from_date = "2024-01-10"
         to_date = "2024-01-20"
 
-        update_data(from_date, to_date, lake_name=lake_names,
+        update_data(from_date, to_date, lake_name=lake_names,  # NB make call every day with False, evey 4th day with true
                     sub_divs_folder = LAKE_RELATIONS_PATH + lake_names + '_centers.txt', update_all_bboxes=True)
 
         update_measurements_handler(None, lake)
-- 
GitLab