pyBADA 0.1.1__py3-none-any.whl → 0.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyBADA/TCL.py +391 -341
- pyBADA/aircraft.py +81 -131
- pyBADA/bada3.py +269 -312
- pyBADA/bada4.py +212 -260
- pyBADA/badaH.py +84 -169
- pyBADA/configuration.py +60 -0
- {pybada-0.1.1.dist-info → pybada-0.1.2.dist-info}/METADATA +5 -7
- {pybada-0.1.1.dist-info → pybada-0.1.2.dist-info}/RECORD +11 -11
- {pybada-0.1.1.dist-info → pybada-0.1.2.dist-info}/WHEEL +1 -1
- {pybada-0.1.1.dist-info → pybada-0.1.2.dist-info}/licenses/AUTHORS +0 -0
- {pybada-0.1.1.dist-info → pybada-0.1.2.dist-info}/licenses/LICENCE.txt +0 -0
pyBADA/bada3.py
CHANGED
|
@@ -18,7 +18,7 @@ from pyBADA import constants as const
|
|
|
18
18
|
from pyBADA import conversions as conv
|
|
19
19
|
from pyBADA import atmosphere as atm
|
|
20
20
|
from pyBADA import configuration as configuration
|
|
21
|
-
from pyBADA.aircraft import Airplane, BadaFamily
|
|
21
|
+
from pyBADA.aircraft import Airplane, BadaFamily, Bada
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def proper_round(num, dec=0):
|
|
@@ -42,41 +42,13 @@ class Parser(object):
|
|
|
42
42
|
pass
|
|
43
43
|
|
|
44
44
|
@staticmethod
|
|
45
|
-
def
|
|
46
|
-
"""
|
|
47
|
-
Lists all subfolders within a specified directory.
|
|
48
|
-
|
|
49
|
-
:param folderPath: Path to the directory where subfolders are to be listed.
|
|
50
|
-
:type folderPath: str
|
|
51
|
-
:returns: A list of subfolder names within the specified directory.
|
|
52
|
-
:rtype: list of str
|
|
53
|
-
|
|
54
|
-
This function retrieves all entries in the given directory and filters out
|
|
55
|
-
the ones that are not directories. Only the names of the subfolders are returned.
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
# List all entries in the directory
|
|
59
|
-
entries = os.listdir(folderPath)
|
|
60
|
-
|
|
61
|
-
# Filter out entries that are directories
|
|
62
|
-
subfolders = [
|
|
63
|
-
entry
|
|
64
|
-
for entry in entries
|
|
65
|
-
if os.path.isdir(os.path.join(folderPath, entry))
|
|
66
|
-
]
|
|
67
|
-
|
|
68
|
-
return subfolders
|
|
69
|
-
|
|
70
|
-
@staticmethod
|
|
71
|
-
def parseXML(filePath, badaVersion, acName):
|
|
45
|
+
def parseXML(filePath, acName):
|
|
72
46
|
"""
|
|
73
47
|
Parses a BADA3 XML formatted file for aircraft performance data.
|
|
74
48
|
|
|
75
49
|
:param filePath: Path to the XML file containing BADA data.
|
|
76
|
-
:param badaVersion: Version of BADA to be parsed.
|
|
77
50
|
:param acName: Name of the aircraft for which data is being parsed from the XML file.
|
|
78
51
|
:type filePath: str
|
|
79
|
-
:type badaVersion: str
|
|
80
52
|
:type acName: str
|
|
81
53
|
:raises IOError: If the file cannot be found or read.
|
|
82
54
|
:raises ValueError: If the BADA version is unsupported or if parsing fails.
|
|
@@ -85,10 +57,7 @@ class Parser(object):
|
|
|
85
57
|
:rtype: pd.DataFrame
|
|
86
58
|
"""
|
|
87
59
|
|
|
88
|
-
filename = (
|
|
89
|
-
os.path.join(filePath, "BADA3", badaVersion, acName, acName)
|
|
90
|
-
+ ".xml"
|
|
91
|
-
)
|
|
60
|
+
filename = os.path.join(filePath, acName, acName) + ".xml"
|
|
92
61
|
|
|
93
62
|
try:
|
|
94
63
|
tree = ET.parse(filename)
|
|
@@ -391,15 +360,13 @@ class Parser(object):
|
|
|
391
360
|
return f, line
|
|
392
361
|
|
|
393
362
|
@staticmethod
|
|
394
|
-
def parseOPF(filePath,
|
|
363
|
+
def parseOPF(filePath, acName):
|
|
395
364
|
"""
|
|
396
365
|
Parses a BADA3 OPF (Operational Performance File) ASCII formatted file for aircraft performance data.
|
|
397
366
|
|
|
398
367
|
:param filePath: Path to the BADA3 OPF ASCII formatted file.
|
|
399
|
-
:param badaVersion: BADA version being used.
|
|
400
368
|
:param acName: ICAO aircraft designation (e.g., 'A320').
|
|
401
369
|
:type filePath: str
|
|
402
|
-
:type badaVersion: str
|
|
403
370
|
:type acName: str
|
|
404
371
|
:raises IOError: If the file cannot be opened or read.
|
|
405
372
|
:returns: A pandas DataFrame containing the parsed aircraft performance data.
|
|
@@ -409,8 +376,6 @@ class Parser(object):
|
|
|
409
376
|
filename = (
|
|
410
377
|
os.path.join(
|
|
411
378
|
filePath,
|
|
412
|
-
"BADA3",
|
|
413
|
-
badaVersion,
|
|
414
379
|
acName,
|
|
415
380
|
)
|
|
416
381
|
+ ".OPF"
|
|
@@ -624,24 +589,20 @@ class Parser(object):
|
|
|
624
589
|
return df_single
|
|
625
590
|
|
|
626
591
|
@staticmethod
|
|
627
|
-
def parseAPF(filePath,
|
|
592
|
+
def parseAPF(filePath, acName):
|
|
628
593
|
"""
|
|
629
594
|
Parses a BADA3 APF ASCII formatted file for aircraft performance data.
|
|
630
595
|
|
|
631
596
|
:param filePath: Path to the BADA3 APF ASCII formatted file.
|
|
632
|
-
:param badaVersion: BADA version being used.
|
|
633
597
|
:param acName: ICAO aircraft designation (e.g., 'A320').
|
|
634
598
|
:type filePath: str
|
|
635
|
-
:type badaVersion: str
|
|
636
599
|
:type acName: str
|
|
637
600
|
:raises IOError: If the file cannot be opened or read.
|
|
638
601
|
:returns: A pandas DataFrame containing the parsed aircraft performance data.
|
|
639
602
|
:rtype: pd.DataFrame
|
|
640
603
|
"""
|
|
641
604
|
|
|
642
|
-
filename = (
|
|
643
|
-
os.path.join(filePath, "BADA3", badaVersion, acName) + ".APF"
|
|
644
|
-
)
|
|
605
|
+
filename = os.path.join(filePath, acName) + ".APF"
|
|
645
606
|
|
|
646
607
|
dataLines = list()
|
|
647
608
|
with open(filename, "r", encoding="latin-1") as f:
|
|
@@ -727,19 +688,17 @@ class Parser(object):
|
|
|
727
688
|
return combined_df
|
|
728
689
|
|
|
729
690
|
@staticmethod
|
|
730
|
-
def readSynonym(filePath
|
|
691
|
+
def readSynonym(filePath):
|
|
731
692
|
"""
|
|
732
693
|
Reads a BADA3 SYNONYM.NEW ASCII file and returns a dictionary of model-synonym pairs.
|
|
733
694
|
|
|
734
695
|
:param filePath: Path to the directory containing BADA3 files.
|
|
735
|
-
:param badaVersion: BADA version being used.
|
|
736
696
|
:type filePath: str
|
|
737
|
-
:type badaVersion: str
|
|
738
697
|
:returns: A dictionary where the keys are aircraft models and the values are the corresponding file names.
|
|
739
698
|
:rtype: dict
|
|
740
699
|
"""
|
|
741
700
|
|
|
742
|
-
filename = os.path.join(filePath, "
|
|
701
|
+
filename = os.path.join(filePath, "SYNONYM.NEW")
|
|
743
702
|
|
|
744
703
|
# synonym - file name pair dictionary
|
|
745
704
|
synonym_fileName = {}
|
|
@@ -764,14 +723,12 @@ class Parser(object):
|
|
|
764
723
|
return synonym_fileName
|
|
765
724
|
|
|
766
725
|
@staticmethod
|
|
767
|
-
def readSynonymXML(filePath
|
|
726
|
+
def readSynonymXML(filePath):
|
|
768
727
|
"""
|
|
769
728
|
Reads a BADA3 SYNONYM.xml file and returns a dictionary of model-synonym pairs.
|
|
770
729
|
|
|
771
730
|
:param filePath: Path to the directory containing BADA3 files.
|
|
772
|
-
:param badaVersion: BADA version being used.
|
|
773
731
|
:type filePath: str
|
|
774
|
-
:type badaVersion: str
|
|
775
732
|
:returns: A dictionary where the keys are aircraft models (codes) and the values are the corresponding file names.
|
|
776
733
|
:rtype: dict
|
|
777
734
|
:raises IOError: If the XML file is not found or cannot be read.
|
|
@@ -780,7 +737,7 @@ class Parser(object):
|
|
|
780
737
|
If the XML file is not found or is improperly formatted, an IOError is raised.
|
|
781
738
|
"""
|
|
782
739
|
|
|
783
|
-
filename = os.path.join(filePath, "
|
|
740
|
+
filename = os.path.join(filePath, "SYNONYM.xml")
|
|
784
741
|
|
|
785
742
|
# synonym - file name pair dictionary
|
|
786
743
|
synonym_fileName = {}
|
|
@@ -803,15 +760,13 @@ class Parser(object):
|
|
|
803
760
|
return synonym_fileName
|
|
804
761
|
|
|
805
762
|
@staticmethod
|
|
806
|
-
def parseSynonym(filePath,
|
|
763
|
+
def parseSynonym(filePath, acName):
|
|
807
764
|
"""
|
|
808
765
|
Parses either the ASCII or XML synonym file and returns the file name corresponding to the aircraft.
|
|
809
766
|
|
|
810
767
|
:param filePath: Path to the directory containing BADA3 files.
|
|
811
|
-
:param badaVersion: BADA version being used.
|
|
812
768
|
:param acName: ICAO aircraft designation for which the file name is needed.
|
|
813
769
|
:type filePath: str
|
|
814
|
-
:type badaVersion: str
|
|
815
770
|
:type acName: str
|
|
816
771
|
:returns: The file name corresponding to the aircraft, or None if not found.
|
|
817
772
|
:rtype: str or None
|
|
@@ -821,11 +776,11 @@ class Parser(object):
|
|
|
821
776
|
It returns the associated file name or None if the aircraft synonym is not found.
|
|
822
777
|
"""
|
|
823
778
|
|
|
824
|
-
synonym_fileName = Parser.readSynonym(filePath
|
|
779
|
+
synonym_fileName = Parser.readSynonym(filePath)
|
|
825
780
|
|
|
826
781
|
# if ASCI synonym does not exist, try XML synonym file
|
|
827
782
|
if not synonym_fileName:
|
|
828
|
-
synonym_fileName = Parser.readSynonymXML(filePath
|
|
783
|
+
synonym_fileName = Parser.readSynonymXML(filePath)
|
|
829
784
|
|
|
830
785
|
if synonym_fileName and acName in synonym_fileName:
|
|
831
786
|
fileName = synonym_fileName[acName]
|
|
@@ -834,19 +789,18 @@ class Parser(object):
|
|
|
834
789
|
return None
|
|
835
790
|
|
|
836
791
|
@staticmethod
|
|
837
|
-
def readGPF(filePath
|
|
792
|
+
def readGPF(filePath):
|
|
838
793
|
"""
|
|
839
794
|
Parses a BADA3 GPF ASCII formatted file.
|
|
840
795
|
|
|
841
796
|
:param filePath: Path to the directory containing BADA3 files.
|
|
842
|
-
:param badaVersion: BADA version being used.
|
|
843
797
|
:type filePath: str
|
|
844
798
|
:raises IOError: If the GPF file cannot be opened or read.
|
|
845
799
|
:returns: A list of dictionaries, each containing GPF parameters like engine type, flight phase, and parameter values.
|
|
846
800
|
:rtype: list of dict
|
|
847
801
|
"""
|
|
848
802
|
|
|
849
|
-
filename = os.path.join(filePath, "
|
|
803
|
+
filename = os.path.join(filePath, "BADA.GPF")
|
|
850
804
|
|
|
851
805
|
GPFparamList = list()
|
|
852
806
|
|
|
@@ -873,12 +827,11 @@ class Parser(object):
|
|
|
873
827
|
return GPFparamList
|
|
874
828
|
|
|
875
829
|
@staticmethod
|
|
876
|
-
def readGPFXML(filePath
|
|
830
|
+
def readGPFXML(filePath):
|
|
877
831
|
"""
|
|
878
832
|
Parses a BADA3 GPF XML formatted file.
|
|
879
833
|
|
|
880
834
|
:param filePath: Path to the directory containing BADA3 files.
|
|
881
|
-
:param badaVersion: BADA version being used.
|
|
882
835
|
:type filePath: str
|
|
883
836
|
:raises IOError: If the XML file is not found or cannot be read.
|
|
884
837
|
:returns: A list of dictionaries, each containing GPF parameters such as engine type, flight phase, and performance values.
|
|
@@ -889,7 +842,7 @@ class Parser(object):
|
|
|
889
842
|
It parses the XML structure and returns a list of dictionaries representing these parameters.
|
|
890
843
|
"""
|
|
891
844
|
|
|
892
|
-
filename = os.path.join(filePath, "
|
|
845
|
+
filename = os.path.join(filePath, "GPF.xml")
|
|
893
846
|
|
|
894
847
|
GPFparamList = list()
|
|
895
848
|
|
|
@@ -1430,23 +1383,21 @@ class Parser(object):
|
|
|
1430
1383
|
return GPFparamList
|
|
1431
1384
|
|
|
1432
1385
|
@staticmethod
|
|
1433
|
-
def parseGPF(filePath
|
|
1386
|
+
def parseGPF(filePath):
|
|
1434
1387
|
"""
|
|
1435
1388
|
Parses a BADA3 (GPF) from either ASCII or XML format.
|
|
1436
1389
|
|
|
1437
1390
|
:param filePath: Path to the directory containing BADA3 files.
|
|
1438
|
-
:param badaVersion: BADA version being used.
|
|
1439
1391
|
:type filePath: str
|
|
1440
|
-
:type badaVersion: str
|
|
1441
1392
|
:returns: A pandas DataFrame containing GPF data.
|
|
1442
1393
|
:rtype: pd.DataFrame
|
|
1443
1394
|
"""
|
|
1444
1395
|
|
|
1445
|
-
GPFdata = Parser.readGPF(filePath
|
|
1396
|
+
GPFdata = Parser.readGPF(filePath)
|
|
1446
1397
|
|
|
1447
1398
|
# if ASCI GPF does not exist, try XML GPF file
|
|
1448
1399
|
if not GPFdata:
|
|
1449
|
-
GPFdata = Parser.readGPFXML(filePath
|
|
1400
|
+
GPFdata = Parser.readGPFXML(filePath)
|
|
1450
1401
|
|
|
1451
1402
|
# Single row dataframe
|
|
1452
1403
|
data = {"GPFdata": [GPFdata]}
|
|
@@ -1532,31 +1483,32 @@ class Parser(object):
|
|
|
1532
1483
|
"""
|
|
1533
1484
|
|
|
1534
1485
|
if filePath == None:
|
|
1535
|
-
filePath = configuration.
|
|
1486
|
+
filePath = configuration.getBadaVersionPath(
|
|
1487
|
+
badaFamily="BADA3", badaVersion=badaVersion
|
|
1488
|
+
)
|
|
1536
1489
|
else:
|
|
1537
1490
|
filePath = filePath
|
|
1538
1491
|
|
|
1539
1492
|
# parsing GPF file
|
|
1540
|
-
GPFparsedDataframe = Parser.parseGPF(filePath
|
|
1493
|
+
GPFparsedDataframe = Parser.parseGPF(filePath)
|
|
1541
1494
|
|
|
1542
1495
|
# try to get subfolders, if they exist
|
|
1543
1496
|
# get names of all the folders in the main BADA model folder to search for XML files
|
|
1544
|
-
|
|
1545
|
-
subfolders = Parser.list_subfolders(folderPath)
|
|
1497
|
+
subfolders = configuration.list_subfolders(filePath)
|
|
1546
1498
|
|
|
1547
1499
|
if not subfolders:
|
|
1548
1500
|
# use APF and OPF files
|
|
1549
1501
|
merged_df = pd.DataFrame()
|
|
1550
1502
|
|
|
1551
1503
|
# get synonym-filename pairs
|
|
1552
|
-
synonym_fileName = Parser.readSynonym(filePath
|
|
1504
|
+
synonym_fileName = Parser.readSynonym(filePath)
|
|
1553
1505
|
|
|
1554
1506
|
for synonym in synonym_fileName:
|
|
1555
1507
|
file = synonym_fileName[synonym]
|
|
1556
1508
|
|
|
1557
1509
|
# parse the original data of a model
|
|
1558
|
-
OPFDataFrame = Parser.parseOPF(filePath,
|
|
1559
|
-
APFDataFrame = Parser.parseAPF(filePath,
|
|
1510
|
+
OPFDataFrame = Parser.parseOPF(filePath, file)
|
|
1511
|
+
APFDataFrame = Parser.parseAPF(filePath, file)
|
|
1560
1512
|
|
|
1561
1513
|
df = Parser.combineOPF_APF(OPFDataFrame, APFDataFrame)
|
|
1562
1514
|
|
|
@@ -1578,14 +1530,14 @@ class Parser(object):
|
|
|
1578
1530
|
merged_df = pd.DataFrame()
|
|
1579
1531
|
|
|
1580
1532
|
# get synonym-filename pairs
|
|
1581
|
-
synonym_fileName = Parser.readSynonymXML(filePath
|
|
1533
|
+
synonym_fileName = Parser.readSynonymXML(filePath)
|
|
1582
1534
|
|
|
1583
1535
|
for synonym in synonym_fileName:
|
|
1584
1536
|
file = synonym_fileName[synonym]
|
|
1585
1537
|
|
|
1586
1538
|
if file in subfolders:
|
|
1587
1539
|
# parse the original XML of a model
|
|
1588
|
-
df = Parser.parseXML(filePath,
|
|
1540
|
+
df = Parser.parseXML(filePath, file)
|
|
1589
1541
|
|
|
1590
1542
|
# rename acName in the dateaframe to match the synonym model name
|
|
1591
1543
|
df.at[0, "acName"] = synonym
|
|
@@ -1602,72 +1554,8 @@ class Parser(object):
|
|
|
1602
1554
|
|
|
1603
1555
|
return merged_df
|
|
1604
1556
|
|
|
1605
|
-
@staticmethod
|
|
1606
|
-
def getBADAParameters(df, acName, parameters):
|
|
1607
|
-
"""
|
|
1608
|
-
Retrieves specified parameters for a given aircraft name from a DataFrame.
|
|
1609
|
-
|
|
1610
|
-
:param df: DataFrame containing BADA aircraft data.
|
|
1611
|
-
:param acName: Name of the aircraft or list of aircraft names to search for.
|
|
1612
|
-
:param parameters: List of column names (or a single column name) to retrieve.
|
|
1613
|
-
:type df: pd.DataFrame
|
|
1614
|
-
:type acName: list or str
|
|
1615
|
-
:type parameters: list or str
|
|
1616
|
-
:returns: A DataFrame containing the specified parameters for the given aircraft.
|
|
1617
|
-
:rtype: pd.DataFrame
|
|
1618
|
-
:raises ValueError: If any of the specified columns or aircraft names are not found.
|
|
1619
|
-
"""
|
|
1620
|
-
|
|
1621
|
-
# Ensure parameters is a list
|
|
1622
|
-
if isinstance(parameters, str):
|
|
1623
|
-
parameters = [parameters]
|
|
1624
|
-
|
|
1625
|
-
# Ensure acName is a list
|
|
1626
|
-
if isinstance(acName, str):
|
|
1627
|
-
acName = [acName]
|
|
1628
|
-
|
|
1629
|
-
# Ensure all requested parameters exist in the DataFrame
|
|
1630
|
-
missing_cols = [col for col in parameters if col not in df.columns]
|
|
1631
|
-
if missing_cols:
|
|
1632
|
-
raise ValueError(
|
|
1633
|
-
f"The following parameters are not in the DataFrame columns: {missing_cols}"
|
|
1634
|
-
)
|
|
1635
|
-
|
|
1636
|
-
# Filter rows where 'acName' matches any of the specified aircraft names
|
|
1637
|
-
filtered_df = df[df["acName"].isin(acName)]
|
|
1638
|
-
|
|
1639
|
-
# Check if any rows were found
|
|
1640
|
-
if filtered_df.empty:
|
|
1641
|
-
raise ValueError(f"No entries found for aircraft(s): {acName}.")
|
|
1642
|
-
else:
|
|
1643
|
-
# Select the required columns
|
|
1644
|
-
result_df = filtered_df[["acName"] + parameters].reset_index(
|
|
1645
|
-
drop=True
|
|
1646
|
-
)
|
|
1647
|
-
return result_df
|
|
1648
|
-
|
|
1649
|
-
@staticmethod
|
|
1650
|
-
def safe_get(df, column_name, default_value=None):
|
|
1651
|
-
"""
|
|
1652
|
-
Safely retrieves a column's value from a DataFrame, returning a default value if the column does not exist.
|
|
1653
|
-
|
|
1654
|
-
:param df: DataFrame to retrieve the value from.
|
|
1655
|
-
:param column_name: Name of the column to retrieve.
|
|
1656
|
-
:param default_value: Value to return if the column does not exist. Default is None.
|
|
1657
|
-
:type df: pd.DataFrame
|
|
1658
|
-
:type column_name: str
|
|
1659
|
-
:type default_value: any
|
|
1660
|
-
:returns: The value from the specified column or the default value if the column is missing.
|
|
1661
|
-
:rtype: any
|
|
1662
|
-
"""
|
|
1663
|
-
|
|
1664
|
-
if column_name in df.columns:
|
|
1665
|
-
return df[column_name].iloc[0]
|
|
1666
|
-
else:
|
|
1667
|
-
return default_value
|
|
1668
|
-
|
|
1669
1557
|
|
|
1670
|
-
class BADA3(Airplane):
|
|
1558
|
+
class BADA3(Airplane, Bada):
|
|
1671
1559
|
"""This class implements the part of BADA3 performance model that will be used in other classes following the BADA3 manual.
|
|
1672
1560
|
|
|
1673
1561
|
:param AC: Aircraft object {BADA3}.
|
|
@@ -4827,7 +4715,9 @@ class Bada3Aircraft(BADA3):
|
|
|
4827
4715
|
self.BADAVersion = badaVersion
|
|
4828
4716
|
|
|
4829
4717
|
if filePath == None:
|
|
4830
|
-
self.filePath = configuration.
|
|
4718
|
+
self.filePath = configuration.getBadaVersionPath(
|
|
4719
|
+
badaFamily="BADA3", badaVersion=badaVersion
|
|
4720
|
+
)
|
|
4831
4721
|
else:
|
|
4832
4722
|
self.filePath = filePath
|
|
4833
4723
|
|
|
@@ -4835,69 +4725,83 @@ class Bada3Aircraft(BADA3):
|
|
|
4835
4725
|
if allData is not None and acName in allData["acName"].values:
|
|
4836
4726
|
filtered_df = allData[allData["acName"] == acName]
|
|
4837
4727
|
|
|
4838
|
-
self.acName =
|
|
4839
|
-
self.xmlFiles =
|
|
4728
|
+
self.acName = configuration.safe_get(filtered_df, "acName", None)
|
|
4729
|
+
self.xmlFiles = configuration.safe_get(
|
|
4730
|
+
filtered_df, "xmlFiles", None
|
|
4731
|
+
)
|
|
4840
4732
|
|
|
4841
|
-
self.modificationDateOPF =
|
|
4733
|
+
self.modificationDateOPF = configuration.safe_get(
|
|
4842
4734
|
filtered_df, "modificationDateOPF", None
|
|
4843
4735
|
)
|
|
4844
|
-
self.modificationDateAPF =
|
|
4736
|
+
self.modificationDateAPF = configuration.safe_get(
|
|
4845
4737
|
filtered_df, "modificationDateAPF", None
|
|
4846
4738
|
)
|
|
4847
4739
|
|
|
4848
|
-
self.ICAO =
|
|
4849
|
-
self.numberOfEngines =
|
|
4740
|
+
self.ICAO = configuration.safe_get(filtered_df, "ICAO", None)
|
|
4741
|
+
self.numberOfEngines = configuration.safe_get(
|
|
4850
4742
|
filtered_df, "numberOfEngines", None
|
|
4851
4743
|
)
|
|
4852
|
-
self.engineType =
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
self.
|
|
4856
|
-
|
|
4857
|
-
self.
|
|
4858
|
-
|
|
4859
|
-
self.
|
|
4860
|
-
self.
|
|
4861
|
-
self.
|
|
4862
|
-
self.
|
|
4863
|
-
self.
|
|
4864
|
-
self.
|
|
4865
|
-
self.
|
|
4866
|
-
|
|
4867
|
-
self.
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
self.
|
|
4872
|
-
self.
|
|
4873
|
-
self.
|
|
4874
|
-
self.
|
|
4875
|
-
self.
|
|
4876
|
-
self.
|
|
4877
|
-
self.
|
|
4878
|
-
self.
|
|
4879
|
-
self.
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
self.
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
self.
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
self.
|
|
4889
|
-
self.
|
|
4890
|
-
self.
|
|
4891
|
-
|
|
4892
|
-
self.
|
|
4893
|
-
|
|
4894
|
-
self.
|
|
4895
|
-
|
|
4896
|
-
self.
|
|
4897
|
-
|
|
4744
|
+
self.engineType = configuration.safe_get(
|
|
4745
|
+
filtered_df, "engineType", None
|
|
4746
|
+
)
|
|
4747
|
+
self.engines = configuration.safe_get(filtered_df, "engines", None)
|
|
4748
|
+
self.WTC = configuration.safe_get(filtered_df, "WTC", None)
|
|
4749
|
+
self.mass = configuration.safe_get(filtered_df, "mass", None)
|
|
4750
|
+
|
|
4751
|
+
self.MTOW = configuration.safe_get(filtered_df, "MTOW", None)
|
|
4752
|
+
self.OEW = configuration.safe_get(filtered_df, "OEW", None)
|
|
4753
|
+
self.MPL = configuration.safe_get(filtered_df, "MPL", None)
|
|
4754
|
+
self.MREF = configuration.safe_get(filtered_df, "MREF", None)
|
|
4755
|
+
self.VMO = configuration.safe_get(filtered_df, "VMO", None)
|
|
4756
|
+
self.MMO = configuration.safe_get(filtered_df, "MMO", None)
|
|
4757
|
+
self.hmo = configuration.safe_get(filtered_df, "hmo", None)
|
|
4758
|
+
self.Hmax = configuration.safe_get(filtered_df, "Hmax", None)
|
|
4759
|
+
self.tempGrad = configuration.safe_get(
|
|
4760
|
+
filtered_df, "tempGrad", None
|
|
4761
|
+
)
|
|
4762
|
+
|
|
4763
|
+
self.S = configuration.safe_get(filtered_df, "S", None)
|
|
4764
|
+
self.Clbo = configuration.safe_get(filtered_df, "Clbo", None)
|
|
4765
|
+
self.k = configuration.safe_get(filtered_df, "k", None)
|
|
4766
|
+
self.Vstall = configuration.safe_get(filtered_df, "Vstall", None)
|
|
4767
|
+
self.CD0 = configuration.safe_get(filtered_df, "CD0", None)
|
|
4768
|
+
self.CD2 = configuration.safe_get(filtered_df, "CD2", None)
|
|
4769
|
+
self.HLids = configuration.safe_get(filtered_df, "HLids", None)
|
|
4770
|
+
self.Ct = configuration.safe_get(filtered_df, "Ct", None)
|
|
4771
|
+
self.CTdeslow = configuration.safe_get(
|
|
4772
|
+
filtered_df, "CTdeslow", None
|
|
4773
|
+
)
|
|
4774
|
+
self.CTdeshigh = configuration.safe_get(
|
|
4775
|
+
filtered_df, "CTdeshigh", None
|
|
4776
|
+
)
|
|
4777
|
+
self.CTdesapp = configuration.safe_get(
|
|
4778
|
+
filtered_df, "CTdesapp", None
|
|
4779
|
+
)
|
|
4780
|
+
self.CTdesld = configuration.safe_get(filtered_df, "CTdesld", None)
|
|
4781
|
+
self.HpDes = configuration.safe_get(filtered_df, "HpDes", None)
|
|
4782
|
+
self.Cf = configuration.safe_get(filtered_df, "Cf", None)
|
|
4783
|
+
self.CfDes = configuration.safe_get(filtered_df, "CfDes", None)
|
|
4784
|
+
self.CfCrz = configuration.safe_get(filtered_df, "CfCrz", None)
|
|
4785
|
+
self.TOL = configuration.safe_get(filtered_df, "TOL", None)
|
|
4786
|
+
self.LDL = configuration.safe_get(filtered_df, "LDL", None)
|
|
4787
|
+
self.span = configuration.safe_get(filtered_df, "span", None)
|
|
4788
|
+
self.length = configuration.safe_get(filtered_df, "length", None)
|
|
4789
|
+
|
|
4790
|
+
self.V1 = configuration.safe_get(filtered_df, "V1", None)
|
|
4791
|
+
self.V2 = configuration.safe_get(filtered_df, "V2", None)
|
|
4792
|
+
self.M = configuration.safe_get(filtered_df, "M", None)
|
|
4793
|
+
|
|
4794
|
+
self.GPFdata = configuration.safe_get(filtered_df, "GPFdata", None)
|
|
4795
|
+
|
|
4796
|
+
self.drone = configuration.safe_get(filtered_df, "drone", None)
|
|
4797
|
+
|
|
4798
|
+
self.DeltaCD = configuration.safe_get(filtered_df, "DeltaCD", None)
|
|
4799
|
+
self.speedSchedule = configuration.safe_get(
|
|
4898
4800
|
filtered_df, "speedSchedule", None
|
|
4899
4801
|
)
|
|
4900
|
-
self.aeroConfig =
|
|
4802
|
+
self.aeroConfig = configuration.safe_get(
|
|
4803
|
+
filtered_df, "aeroConfig", None
|
|
4804
|
+
)
|
|
4901
4805
|
|
|
4902
4806
|
self.flightEnvelope = FlightEnvelope(self)
|
|
4903
4807
|
self.ARPM = ARPM(self)
|
|
@@ -4906,20 +4810,17 @@ class Bada3Aircraft(BADA3):
|
|
|
4906
4810
|
|
|
4907
4811
|
else:
|
|
4908
4812
|
# read BADA3 GPF file
|
|
4909
|
-
GPFDataFrame = Parser.parseGPF(self.filePath
|
|
4813
|
+
GPFDataFrame = Parser.parseGPF(self.filePath)
|
|
4910
4814
|
|
|
4911
4815
|
# check if SYNONYM file exist
|
|
4912
|
-
synonymFile = os.path.join(
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
synonymFileXML = os.path.join(
|
|
4916
|
-
self.filePath, "BADA3", badaVersion, "SYNONYM.xml"
|
|
4917
|
-
)
|
|
4816
|
+
synonymFile = os.path.join(self.filePath, "SYNONYM.NEW")
|
|
4817
|
+
synonymFileXML = os.path.join(self.filePath, "SYNONYM.xml")
|
|
4818
|
+
|
|
4918
4819
|
if os.path.isfile(synonymFile) or os.path.isfile(synonymFileXML):
|
|
4919
4820
|
self.synonymFileAvailable = True
|
|
4920
4821
|
|
|
4921
4822
|
self.SearchedACName = Parser.parseSynonym(
|
|
4922
|
-
self.filePath,
|
|
4823
|
+
self.filePath, acName
|
|
4923
4824
|
)
|
|
4924
4825
|
|
|
4925
4826
|
if self.SearchedACName == None:
|
|
@@ -4940,8 +4841,6 @@ class Bada3Aircraft(BADA3):
|
|
|
4940
4841
|
OPFfile = (
|
|
4941
4842
|
os.path.join(
|
|
4942
4843
|
self.filePath,
|
|
4943
|
-
"BADA3",
|
|
4944
|
-
badaVersion,
|
|
4945
4844
|
self.SearchedACName,
|
|
4946
4845
|
)
|
|
4947
4846
|
+ ".OPF"
|
|
@@ -4949,8 +4848,6 @@ class Bada3Aircraft(BADA3):
|
|
|
4949
4848
|
APFfile = (
|
|
4950
4849
|
os.path.join(
|
|
4951
4850
|
self.filePath,
|
|
4952
|
-
"BADA3",
|
|
4953
|
-
badaVersion,
|
|
4954
4851
|
self.SearchedACName,
|
|
4955
4852
|
)
|
|
4956
4853
|
+ ".APF"
|
|
@@ -4964,10 +4861,10 @@ class Bada3Aircraft(BADA3):
|
|
|
4964
4861
|
self.ACModelAvailable = True
|
|
4965
4862
|
|
|
4966
4863
|
OPFDataFrame = Parser.parseOPF(
|
|
4967
|
-
self.filePath,
|
|
4864
|
+
self.filePath, self.SearchedACName
|
|
4968
4865
|
)
|
|
4969
4866
|
APFDataFrame = Parser.parseAPF(
|
|
4970
|
-
self.filePath,
|
|
4867
|
+
self.filePath, self.SearchedACName
|
|
4971
4868
|
)
|
|
4972
4869
|
|
|
4973
4870
|
OPF_APF_combined_df = Parser.combineOPF_APF(
|
|
@@ -4977,89 +4874,119 @@ class Bada3Aircraft(BADA3):
|
|
|
4977
4874
|
OPF_APF_combined_df, GPFDataFrame
|
|
4978
4875
|
)
|
|
4979
4876
|
|
|
4980
|
-
self.acName =
|
|
4981
|
-
|
|
4877
|
+
self.acName = configuration.safe_get(
|
|
4878
|
+
combined_df, "acName", None
|
|
4879
|
+
)
|
|
4880
|
+
self.xmlFiles = configuration.safe_get(
|
|
4982
4881
|
combined_df, "xmlFiles", None
|
|
4983
4882
|
)
|
|
4984
4883
|
|
|
4985
|
-
self.modificationDateOPF =
|
|
4884
|
+
self.modificationDateOPF = configuration.safe_get(
|
|
4986
4885
|
combined_df, "modificationDateOPF", None
|
|
4987
4886
|
)
|
|
4988
|
-
self.modificationDateAPF =
|
|
4887
|
+
self.modificationDateAPF = configuration.safe_get(
|
|
4989
4888
|
combined_df, "modificationDateAPF", None
|
|
4990
4889
|
)
|
|
4991
4890
|
|
|
4992
|
-
self.ICAO =
|
|
4993
|
-
|
|
4891
|
+
self.ICAO = configuration.safe_get(
|
|
4892
|
+
combined_df, "ICAO", None
|
|
4893
|
+
)
|
|
4894
|
+
self.numberOfEngines = configuration.safe_get(
|
|
4994
4895
|
combined_df, "numberOfEngines", None
|
|
4995
4896
|
)
|
|
4996
|
-
self.engineType =
|
|
4897
|
+
self.engineType = configuration.safe_get(
|
|
4997
4898
|
combined_df, "engineType", None
|
|
4998
4899
|
)
|
|
4999
|
-
self.engines =
|
|
4900
|
+
self.engines = configuration.safe_get(
|
|
5000
4901
|
combined_df, "engines", None
|
|
5001
4902
|
)
|
|
5002
|
-
self.WTC =
|
|
5003
|
-
self.mass =
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
self.
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
self.
|
|
5011
|
-
self.
|
|
5012
|
-
self.
|
|
5013
|
-
|
|
4903
|
+
self.WTC = configuration.safe_get(combined_df, "WTC", None)
|
|
4904
|
+
self.mass = configuration.safe_get(
|
|
4905
|
+
combined_df, "mass", None
|
|
4906
|
+
)
|
|
4907
|
+
|
|
4908
|
+
self.MTOW = configuration.safe_get(
|
|
4909
|
+
combined_df, "MTOW", None
|
|
4910
|
+
)
|
|
4911
|
+
self.OEW = configuration.safe_get(combined_df, "OEW", None)
|
|
4912
|
+
self.MPL = configuration.safe_get(combined_df, "MPL", None)
|
|
4913
|
+
self.MREF = configuration.safe_get(
|
|
4914
|
+
combined_df, "MREF", None
|
|
4915
|
+
)
|
|
4916
|
+
self.VMO = configuration.safe_get(combined_df, "VMO", None)
|
|
4917
|
+
self.MMO = configuration.safe_get(combined_df, "MMO", None)
|
|
4918
|
+
self.hmo = configuration.safe_get(combined_df, "hmo", None)
|
|
4919
|
+
self.Hmax = configuration.safe_get(
|
|
4920
|
+
combined_df, "Hmax", None
|
|
4921
|
+
)
|
|
4922
|
+
self.tempGrad = configuration.safe_get(
|
|
5014
4923
|
combined_df, "tempGrad", None
|
|
5015
4924
|
)
|
|
5016
4925
|
|
|
5017
|
-
self.S =
|
|
5018
|
-
self.Clbo =
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
self.
|
|
5022
|
-
self.
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
self.
|
|
4926
|
+
self.S = configuration.safe_get(combined_df, "S", None)
|
|
4927
|
+
self.Clbo = configuration.safe_get(
|
|
4928
|
+
combined_df, "Clbo", None
|
|
4929
|
+
)
|
|
4930
|
+
self.k = configuration.safe_get(combined_df, "k", None)
|
|
4931
|
+
self.Vstall = configuration.safe_get(
|
|
4932
|
+
combined_df, "Vstall", None
|
|
4933
|
+
)
|
|
4934
|
+
self.CD0 = configuration.safe_get(combined_df, "CD0", None)
|
|
4935
|
+
self.CD2 = configuration.safe_get(combined_df, "CD2", None)
|
|
4936
|
+
self.HLids = configuration.safe_get(
|
|
4937
|
+
combined_df, "HLids", None
|
|
4938
|
+
)
|
|
4939
|
+
self.Ct = configuration.safe_get(combined_df, "Ct", None)
|
|
4940
|
+
self.CTdeslow = configuration.safe_get(
|
|
5026
4941
|
combined_df, "CTdeslow", None
|
|
5027
4942
|
)
|
|
5028
|
-
self.CTdeshigh =
|
|
4943
|
+
self.CTdeshigh = configuration.safe_get(
|
|
5029
4944
|
combined_df, "CTdeshigh", None
|
|
5030
4945
|
)
|
|
5031
|
-
self.CTdesapp =
|
|
4946
|
+
self.CTdesapp = configuration.safe_get(
|
|
5032
4947
|
combined_df, "CTdesapp", None
|
|
5033
4948
|
)
|
|
5034
|
-
self.CTdesld =
|
|
4949
|
+
self.CTdesld = configuration.safe_get(
|
|
5035
4950
|
combined_df, "CTdesld", None
|
|
5036
4951
|
)
|
|
5037
|
-
self.HpDes =
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
self.
|
|
5041
|
-
self.
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
self.
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
self.
|
|
5048
|
-
self.
|
|
5049
|
-
|
|
5050
|
-
|
|
4952
|
+
self.HpDes = configuration.safe_get(
|
|
4953
|
+
combined_df, "HpDes", None
|
|
4954
|
+
)
|
|
4955
|
+
self.Cf = configuration.safe_get(combined_df, "Cf", None)
|
|
4956
|
+
self.CfDes = configuration.safe_get(
|
|
4957
|
+
combined_df, "CfDes", None
|
|
4958
|
+
)
|
|
4959
|
+
self.CfCrz = configuration.safe_get(
|
|
4960
|
+
combined_df, "CfCrz", None
|
|
4961
|
+
)
|
|
4962
|
+
self.TOL = configuration.safe_get(combined_df, "TOL", None)
|
|
4963
|
+
self.LDL = configuration.safe_get(combined_df, "LDL", None)
|
|
4964
|
+
self.span = configuration.safe_get(
|
|
4965
|
+
combined_df, "span", None
|
|
4966
|
+
)
|
|
4967
|
+
self.length = configuration.safe_get(
|
|
4968
|
+
combined_df, "length", None
|
|
4969
|
+
)
|
|
4970
|
+
|
|
4971
|
+
self.V1 = configuration.safe_get(combined_df, "V1", None)
|
|
4972
|
+
self.V2 = configuration.safe_get(combined_df, "V2", None)
|
|
4973
|
+
self.M = configuration.safe_get(combined_df, "M", None)
|
|
4974
|
+
|
|
4975
|
+
self.GPFdata = configuration.safe_get(
|
|
5051
4976
|
combined_df, "GPFdata", None
|
|
5052
4977
|
)
|
|
5053
4978
|
|
|
5054
|
-
self.drone =
|
|
4979
|
+
self.drone = configuration.safe_get(
|
|
4980
|
+
combined_df, "drone", None
|
|
4981
|
+
)
|
|
5055
4982
|
|
|
5056
|
-
self.DeltaCD =
|
|
4983
|
+
self.DeltaCD = configuration.safe_get(
|
|
5057
4984
|
combined_df, "DeltaCD", None
|
|
5058
4985
|
)
|
|
5059
|
-
self.speedSchedule =
|
|
4986
|
+
self.speedSchedule = configuration.safe_get(
|
|
5060
4987
|
combined_df, "speedSchedule", None
|
|
5061
4988
|
)
|
|
5062
|
-
self.aeroConfig =
|
|
4989
|
+
self.aeroConfig = configuration.safe_get(
|
|
5063
4990
|
combined_df, "aeroConfig", None
|
|
5064
4991
|
)
|
|
5065
4992
|
|
|
@@ -5072,96 +4999,126 @@ class Bada3Aircraft(BADA3):
|
|
|
5072
4999
|
# search for xml files
|
|
5073
5000
|
|
|
5074
5001
|
XMLDataFrame = Parser.parseXML(
|
|
5075
|
-
self.filePath,
|
|
5002
|
+
self.filePath, self.SearchedACName
|
|
5076
5003
|
)
|
|
5077
5004
|
|
|
5078
5005
|
combined_df = Parser.combineACDATA_GPF(
|
|
5079
5006
|
XMLDataFrame, GPFDataFrame
|
|
5080
5007
|
)
|
|
5081
5008
|
|
|
5082
|
-
self.acName =
|
|
5083
|
-
|
|
5009
|
+
self.acName = configuration.safe_get(
|
|
5010
|
+
combined_df, "acName", None
|
|
5011
|
+
)
|
|
5012
|
+
self.xmlFiles = configuration.safe_get(
|
|
5084
5013
|
combined_df, "xmlFiles", None
|
|
5085
5014
|
)
|
|
5086
5015
|
|
|
5087
|
-
self.modificationDateOPF =
|
|
5016
|
+
self.modificationDateOPF = configuration.safe_get(
|
|
5088
5017
|
combined_df, "modificationDateOPF", None
|
|
5089
5018
|
)
|
|
5090
|
-
self.modificationDateAPF =
|
|
5019
|
+
self.modificationDateAPF = configuration.safe_get(
|
|
5091
5020
|
combined_df, "modificationDateAPF", None
|
|
5092
5021
|
)
|
|
5093
5022
|
|
|
5094
|
-
self.ICAO =
|
|
5095
|
-
|
|
5023
|
+
self.ICAO = configuration.safe_get(
|
|
5024
|
+
combined_df, "ICAO", None
|
|
5025
|
+
)
|
|
5026
|
+
self.numberOfEngines = configuration.safe_get(
|
|
5096
5027
|
combined_df, "numberOfEngines", None
|
|
5097
5028
|
)
|
|
5098
|
-
self.engineType =
|
|
5029
|
+
self.engineType = configuration.safe_get(
|
|
5099
5030
|
combined_df, "engineType", None
|
|
5100
5031
|
)
|
|
5101
|
-
self.engines =
|
|
5032
|
+
self.engines = configuration.safe_get(
|
|
5102
5033
|
combined_df, "engines", None
|
|
5103
5034
|
)
|
|
5104
|
-
self.WTC =
|
|
5105
|
-
self.mass =
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
self.
|
|
5110
|
-
|
|
5111
|
-
|
|
5112
|
-
self.
|
|
5113
|
-
self.
|
|
5114
|
-
self.
|
|
5115
|
-
|
|
5035
|
+
self.WTC = configuration.safe_get(combined_df, "WTC", None)
|
|
5036
|
+
self.mass = configuration.safe_get(
|
|
5037
|
+
combined_df, "mass", None
|
|
5038
|
+
)
|
|
5039
|
+
|
|
5040
|
+
self.MTOW = configuration.safe_get(
|
|
5041
|
+
combined_df, "MTOW", None
|
|
5042
|
+
)
|
|
5043
|
+
self.OEW = configuration.safe_get(combined_df, "OEW", None)
|
|
5044
|
+
self.MPL = configuration.safe_get(combined_df, "MPL", None)
|
|
5045
|
+
self.MREF = configuration.safe_get(
|
|
5046
|
+
combined_df, "MREF", None
|
|
5047
|
+
)
|
|
5048
|
+
self.VMO = configuration.safe_get(combined_df, "VMO", None)
|
|
5049
|
+
self.MMO = configuration.safe_get(combined_df, "MMO", None)
|
|
5050
|
+
self.hmo = configuration.safe_get(combined_df, "hmo", None)
|
|
5051
|
+
self.Hmax = configuration.safe_get(
|
|
5052
|
+
combined_df, "Hmax", None
|
|
5053
|
+
)
|
|
5054
|
+
self.tempGrad = configuration.safe_get(
|
|
5116
5055
|
combined_df, "tempGrad", None
|
|
5117
5056
|
)
|
|
5118
5057
|
|
|
5119
|
-
self.S =
|
|
5120
|
-
self.Clbo =
|
|
5121
|
-
|
|
5122
|
-
|
|
5123
|
-
self.
|
|
5124
|
-
self.
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
self.
|
|
5058
|
+
self.S = configuration.safe_get(combined_df, "S", None)
|
|
5059
|
+
self.Clbo = configuration.safe_get(
|
|
5060
|
+
combined_df, "Clbo", None
|
|
5061
|
+
)
|
|
5062
|
+
self.k = configuration.safe_get(combined_df, "k", None)
|
|
5063
|
+
self.Vstall = configuration.safe_get(
|
|
5064
|
+
combined_df, "Vstall", None
|
|
5065
|
+
)
|
|
5066
|
+
self.CD0 = configuration.safe_get(combined_df, "CD0", None)
|
|
5067
|
+
self.CD2 = configuration.safe_get(combined_df, "CD2", None)
|
|
5068
|
+
self.HLids = configuration.safe_get(
|
|
5069
|
+
combined_df, "HLids", None
|
|
5070
|
+
)
|
|
5071
|
+
self.Ct = configuration.safe_get(combined_df, "Ct", None)
|
|
5072
|
+
self.CTdeslow = configuration.safe_get(
|
|
5128
5073
|
combined_df, "CTdeslow", None
|
|
5129
5074
|
)
|
|
5130
|
-
self.CTdeshigh =
|
|
5075
|
+
self.CTdeshigh = configuration.safe_get(
|
|
5131
5076
|
combined_df, "CTdeshigh", None
|
|
5132
5077
|
)
|
|
5133
|
-
self.CTdesapp =
|
|
5078
|
+
self.CTdesapp = configuration.safe_get(
|
|
5134
5079
|
combined_df, "CTdesapp", None
|
|
5135
5080
|
)
|
|
5136
|
-
self.CTdesld =
|
|
5081
|
+
self.CTdesld = configuration.safe_get(
|
|
5137
5082
|
combined_df, "CTdesld", None
|
|
5138
5083
|
)
|
|
5139
|
-
self.HpDes =
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
self.
|
|
5143
|
-
self.
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
self.
|
|
5147
|
-
|
|
5148
|
-
|
|
5149
|
-
self.
|
|
5150
|
-
self.
|
|
5151
|
-
|
|
5152
|
-
|
|
5084
|
+
self.HpDes = configuration.safe_get(
|
|
5085
|
+
combined_df, "HpDes", None
|
|
5086
|
+
)
|
|
5087
|
+
self.Cf = configuration.safe_get(combined_df, "Cf", None)
|
|
5088
|
+
self.CfDes = configuration.safe_get(
|
|
5089
|
+
combined_df, "CfDes", None
|
|
5090
|
+
)
|
|
5091
|
+
self.CfCrz = configuration.safe_get(
|
|
5092
|
+
combined_df, "CfCrz", None
|
|
5093
|
+
)
|
|
5094
|
+
self.TOL = configuration.safe_get(combined_df, "TOL", None)
|
|
5095
|
+
self.LDL = configuration.safe_get(combined_df, "LDL", None)
|
|
5096
|
+
self.span = configuration.safe_get(
|
|
5097
|
+
combined_df, "span", None
|
|
5098
|
+
)
|
|
5099
|
+
self.length = configuration.safe_get(
|
|
5100
|
+
combined_df, "length", None
|
|
5101
|
+
)
|
|
5102
|
+
|
|
5103
|
+
self.V1 = configuration.safe_get(combined_df, "V1", None)
|
|
5104
|
+
self.V2 = configuration.safe_get(combined_df, "V2", None)
|
|
5105
|
+
self.M = configuration.safe_get(combined_df, "M", None)
|
|
5106
|
+
|
|
5107
|
+
self.GPFdata = configuration.safe_get(
|
|
5153
5108
|
combined_df, "GPFdata", None
|
|
5154
5109
|
)
|
|
5155
5110
|
|
|
5156
|
-
self.drone =
|
|
5111
|
+
self.drone = configuration.safe_get(
|
|
5112
|
+
combined_df, "drone", None
|
|
5113
|
+
)
|
|
5157
5114
|
|
|
5158
|
-
self.DeltaCD =
|
|
5115
|
+
self.DeltaCD = configuration.safe_get(
|
|
5159
5116
|
combined_df, "DeltaCD", None
|
|
5160
5117
|
)
|
|
5161
|
-
self.speedSchedule =
|
|
5118
|
+
self.speedSchedule = configuration.safe_get(
|
|
5162
5119
|
combined_df, "speedSchedule", None
|
|
5163
5120
|
)
|
|
5164
|
-
self.aeroConfig =
|
|
5121
|
+
self.aeroConfig = configuration.safe_get(
|
|
5165
5122
|
combined_df, "aeroConfig", None
|
|
5166
5123
|
)
|
|
5167
5124
|
|