Browse Source

add a function to register a new inbound

Sven Czarnian 3 years ago
parent
commit
f83febab3a
3 changed files with 21 additions and 2 deletions
  1. 1 1
      aman/sys/aco/Ant.py
  2. 1 1
      aman/sys/aco/Colony.py
  3. 19 0
      aman/sys/aco/RunwayManager.py

+ 1 - 1
aman/sys/aco/Ant.py

@@ -84,7 +84,7 @@ class Ant:
         node.Inbound.PlannedArrivalTime = eta
         node.Inbound.PlannedArrivalRoute = node.ArrivalCandidates[rwy.Name].ArrivalRoute
         node.Inbound.InitialArrivalTime = node.ArrivalCandidates[rwy.Name].InitialArrivalTime
-        self.RunwayManager.RunwayInbounds[rwy.Name] = node
+        self.RunwayManager.registerNode(node, rwy.Name)
 
         delay = node.Inbound.PlannedArrivalTime - node.Inbound.InitialArrivalTime 
         if 0.0 < delay.total_seconds():

+ 1 - 1
aman/sys/aco/Colony.py

@@ -29,7 +29,7 @@ class Colony:
         node.Inbound.PlannedArrivalTime = eta
         node.Inbound.InitialArrivalTime = node.ArrivalCandidates[rwy.Name].InitialArrivalTime
         node.Inbound.PlannedTrackmiles = node.ArrivalCandidates[rwy.Name].Trackmiles
-        rwyManager.RunwayInbounds[rwy.Name] = node
+        rwyManager.registerNode(node, rwy.Name)
 
         return True
 

+ 19 - 0
aman/sys/aco/RunwayManager.py

@@ -143,3 +143,22 @@ class RunwayManager:
                 eta = candidate
 
         return selectedRunway, eta, lostTime
+
+    def registerNode(self, node : Node, runway : str):
+        self.RunwayInbounds[runway] = node
+
+         # find the corresponding IAF
+        iaf = node.ArrivalCandidates[runway].ArrivalRoute[0].Waypoint.Name
+        if iaf in self.IafInbounds:
+            delta = 100000.0
+            targetLevel = None
+
+            # find the planned level
+            for level in self.IafInbounds[iaf]:
+                difference = abs(level - node.ArrivalCandidates[runway].ArrivalRoute[0].Altitude)
+                if difference < delta:
+                    delta = difference
+                    targetLevel = level
+
+            if targetLevel in self.IafInbounds[iaf]:
+                self.IafInbounds[iaf][targetLevel] = node