From 843d09c1e04b7ba98ea224ec90e5dca4a494b844 Mon Sep 17 00:00:00 2001
From: Mauco03 <marco.gaibotti@skywarder.eu>
Date: Mon, 22 Apr 2024 14:34:10 +0200
Subject: [PATCH] [refactoring-ode][classes] Improved data management

- Rocket can now import data stored in new aeroCoefficients
- Updated data
---
 classes/Component.m                           |  5 -----
 classes/Config.m                              |  5 -----
 classes/Rocket.m                              | 19 ++++++++++++++-----
 classes/bays/Motor.m                          |  6 ++++++
 .../config/rocketConfig.m                     |  6 +++---
 .../data/aeroCoefficients.mat                 |  4 ++--
 .../data/aeroCoefficientsHighAOA.mat          |  4 ++--
 .../data/motors.mat                           |  4 ++--
 8 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/classes/Component.m b/classes/Component.m
index c7bad4c..f7c6b37 100644
--- a/classes/Component.m
+++ b/classes/Component.m
@@ -38,7 +38,6 @@ classdef Component < Config
                 end
             end
             obj = objMatrix;
-            obj.loadData();
         end
     end
 
@@ -90,9 +89,5 @@ classdef Component < Config
             end
         end
     end
-
-    methods(Static, Access = protected)
-        function loadData(), end
-    end
 end
 
diff --git a/classes/Config.m b/classes/Config.m
index 4d0a897..aff4e5b 100644
--- a/classes/Config.m
+++ b/classes/Config.m
@@ -9,11 +9,6 @@ classdef(Abstract) Config < handle
         variableName char
     end
 
-    methods(Abstract, Access = protected)
-        loadData
-        loadConfig
-    end
-
     methods
         function structOut = toStruct(obj)
             structOut = struct();
diff --git a/classes/Rocket.m b/classes/Rocket.m
index 8968662..1c248c1 100644
--- a/classes/Rocket.m
+++ b/classes/Rocket.m
@@ -183,21 +183,29 @@ classdef Rocket < Component
 
     methods(Access = protected) % Loaders
         function obj = loadData(obj)
-            if isempty(obj.mission.name)
+            if isempty(obj.motor) 
                 return;
             end
             varNames = {'total', 'geometry', 'state', 'finsCN'};
+            motorName = obj.motor.name;
             aeroPath = fullfile(obj.mission.dataPath, 'aeroCoefficients.mat');
             aeroHighAOAPath = fullfile(obj.mission.dataPath, 'aeroCoefficientsHighAOA.mat');
 
             if ~(exist(aeroPath, 'file') && exist(aeroHighAOAPath,'file'))
                 return;
             end
+            dataCoeffs = load(aeroPath);
+            dataCoeffsHighAOA = load(aeroHighAOAPath);
 
-            dataCoeffs = load(aeroPath, varNames{:});
-            dataCoeffsHighAOA = load(aeroHighAOAPath, varNames{:});
-            
-            if isfield(dataCoeffs, "finsCN") && isfield(dataCoeffsHighAOA, "finsCN")
+            if isfield(dataCoeffs, motorName) && isfield(dataCoeffsHighAOA, motorName)
+                dataCoeffs = dataCoeffs.(motorName);
+                dataCoeffsHighAOA = dataCoeffsHighAOA.(motorName);
+            else
+                return;
+            end
+
+            if isfield(dataCoeffs, "finsCN") && ...
+                    isfield(dataCoeffsHighAOA, "finsCN")
                 obj.coefficients.finsCN = dataCoeffs.finsCN;
                 obj.coefficientsHighAOA.finsCN = dataCoeffsHighAOA.finsCN;
             end
@@ -240,6 +248,7 @@ classdef Rocket < Component
 
             [bayNames, bayValues] = obj.getProperties(Superclass='Bay', Heterogeneous=1);
             obj.bays = dictionary(bayNames, bayValues);
+            obj.loadData();
             obj.updateAll();
         end
 
diff --git a/classes/bays/Motor.m b/classes/bays/Motor.m
index ec0572d..53138d7 100644
--- a/classes/bays/Motor.m
+++ b/classes/bays/Motor.m
@@ -49,6 +49,7 @@ classdef Motor < Bay
                 varIn = []
             end
             obj@Bay(mission, varIn);
+            obj.loadData();
         end
 
         function set.name(obj, name)
@@ -78,6 +79,11 @@ classdef Motor < Bay
             end
             load(fullfile(obj.mission.dataPath, 'motors.mat'), 'motors');
             chosenMotor = motors(strcmp({motors.MotorName}, obj.name));
+
+            if ~(isempty(obj.name) || isvarname(obj.name))
+                error('Motor name is not a valid MATLAB variable name')
+            end
+
             if isempty(chosenMotor)
                 error(strcat('Unable to find engine: ', obj.name));
             end
diff --git a/missions/2024_Lyra_Portugal_October/config/rocketConfig.m b/missions/2024_Lyra_Portugal_October/config/rocketConfig.m
index 212d1d1..d64866c 100644
--- a/missions/2024_Lyra_Portugal_October/config/rocketConfig.m
+++ b/missions/2024_Lyra_Portugal_October/config/rocketConfig.m
@@ -70,8 +70,8 @@ airbrakes.servoOmega = 150*pi/180;                         % [rad/s] Servo-motor
 %% MOTOR
 motor = Motor();
 
-motor.name = 'HRE_ARM_30_inj-T03T03';                      % [-] Motor name
-motor.cutoffTime = inf;                                    % [s] Cutoff time
+motor.name = 'HRE_ARM_30_inj_T03T03';                      % [-] Motor name
+motor.cutoffTime = [];                                     % [s] OVERRIDE Cutoff time
 motor.ignitionTransient = 0.3;                             % [s] Ignition transient
 motor.cutoffTransient = 0.3;                               % [s] Cut-off transient
 
@@ -101,7 +101,7 @@ rear.finsMaxThicknessPosition = 0.00175;                   % [m] Fraction of cho
 %% PITOT
 pitot = Pitot();
 
-pitot.length = [];                                    % [m] Pitot tube length
+pitot.length = [];                                          % [m] Pitot tube length
 pitot.initialConeLength = [];                               % [m] Pitot initial conic section length
 pitot.finalConeLength = [];                                 % [m] Pitot final conic section length
 pitot.initialConeDiameter = [];                             % [m] Pitot initial conic section diameter
diff --git a/missions/2024_Lyra_Portugal_October/data/aeroCoefficients.mat b/missions/2024_Lyra_Portugal_October/data/aeroCoefficients.mat
index 2010e47..1ddfd14 100644
--- a/missions/2024_Lyra_Portugal_October/data/aeroCoefficients.mat
+++ b/missions/2024_Lyra_Portugal_October/data/aeroCoefficients.mat
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:4790142368603ea4a575a3353926c22b719c1e8581c4398e8819db94423d75c2
-size 37050668
+oid sha256:6111ba8b3aff04fa9304500012d1aaafe1fe3d9e3aab858fbffc96cf386dec1c
+size 72462163
diff --git a/missions/2024_Lyra_Portugal_October/data/aeroCoefficientsHighAOA.mat b/missions/2024_Lyra_Portugal_October/data/aeroCoefficientsHighAOA.mat
index dd5e02c..980d5d2 100644
--- a/missions/2024_Lyra_Portugal_October/data/aeroCoefficientsHighAOA.mat
+++ b/missions/2024_Lyra_Portugal_October/data/aeroCoefficientsHighAOA.mat
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:c3bb1b28659fbe8de83f9a941ebfa53e69b34e6556da1928f01d17341cf7140f
-size 6942012
+oid sha256:71a8a59d6c8f497ed277e99960b655d1a8d1dc3f1fb9b98e286b1847d75cc6f1
+size 11570466
diff --git a/missions/2024_Lyra_Portugal_October/data/motors.mat b/missions/2024_Lyra_Portugal_October/data/motors.mat
index 3173301..a6072ca 100644
--- a/missions/2024_Lyra_Portugal_October/data/motors.mat
+++ b/missions/2024_Lyra_Portugal_October/data/motors.mat
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:b63b77353e0e6ec05bce3f5a58a52c44262adab220678ca9bda1cf14387a5b7b
-size 5132828
+oid sha256:589f79507952ab31e91bd050a4e09fd4d58f1c0087bb0e32b66617f9751f3c83
+size 5132825
-- 
GitLab