diff --git a/aman/sys/aco/Ant.py b/aman/sys/aco/Ant.py index 4b71474..ad6f0a6 100644 --- a/aman/sys/aco/Ant.py +++ b/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(): diff --git a/aman/sys/aco/Colony.py b/aman/sys/aco/Colony.py index bcadac7..463cdc3 100644 --- a/aman/sys/aco/Colony.py +++ b/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 diff --git a/aman/sys/aco/RunwayManager.py b/aman/sys/aco/RunwayManager.py index 0426d5d..bf0fe84 100644 --- a/aman/sys/aco/RunwayManager.py +++ b/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