File tree Expand file tree Collapse file tree 3 files changed +24
-6
lines changed
core/src/main/kotlin/fr/sncf/osrd/stdcm/graph Expand file tree Collapse file tree 3 files changed +24
-6
lines changed Original file line number Diff line number Diff line change @@ -92,7 +92,7 @@ data class STDCMEdge(
92
92
stopDuration,
93
93
graph.delayManager.getMaxAdditionalStopDuration(
94
94
infraExplorerWithNewEnvelope,
95
- timeData.earliestReachableTime + totalTime
95
+ getEdgeEndTime(),
96
96
)
97
97
),
98
98
endSpeed,
@@ -172,4 +172,23 @@ data class STDCMEdge(
172
172
fun fromTravelledOffset (travelledPathOffset : Offset <TravelledPath >): Offset <BlockPath > {
173
173
return infraExplorer.getIncrementalPath().fromTravelledPath(travelledPathOffset)
174
174
}
175
+
176
+ /* * Return the time at which the train quits this edge and moves on to the next. */
177
+ private fun getEdgeEndTime (): Double {
178
+ return timeData.earliestReachableTime + totalTime
179
+ }
180
+
181
+ /* *
182
+ * Return how much delay we can add on this edge. We need to be given the time added on the next
183
+ * edges (both departure delaying and allowances), as they carry over previous edges.
184
+ */
185
+ fun getMaxAddedDelay (addedAllowanceOnNextEdges : Double ): Double {
186
+ val maxAddedDelay = timeData.timeOfNextConflictAtLocation - getEdgeEndTime()
187
+ return maxAddedDelay - addedAllowanceOnNextEdges
188
+ }
189
+
190
+ /* * Return all delay added to this edge, engineering + departure delay */
191
+ fun getTotalAddedDelayOnEdge (): Double {
192
+ return timeData.delayAddedToLastDeparture + (engineeringAllowance?.extraDuration ? : 0.0 )
193
+ }
175
194
}
Original file line number Diff line number Diff line change @@ -162,6 +162,8 @@ class STDCMGraph(
162
162
while (true ) {
163
163
val edge = node.previousEdge ? : return maxTime
164
164
165
+ // TODO: this is wrong, we should use `edge.getMaxAddedDelay` instead.
166
+ // But doing so can lead to infinite loops, especially in the unit test "infraWithLoop".
165
167
val latestTimeWithMaxShift =
166
168
edge.timeData.earliestReachableTime +
167
169
edge.totalTime +
Original file line number Diff line number Diff line change @@ -67,9 +67,7 @@ fun generatePreviousSimulationSegments(
67
67
if (currentEdge.endAtStop) break
68
68
69
69
val envelope = currentEdge.originalEnvelope
70
- val edgeEndTime = currentEdge.timeData.earliestReachableTime + currentEdge.totalTime
71
- val maxAddedDelay =
72
- currentEdge.timeData.timeOfNextConflictAtLocation - edgeEndTime - alreadyAddedDelay
70
+ val maxAddedDelay = currentEdge.getMaxAddedDelay(alreadyAddedDelay)
73
71
if (maxAddedDelay <= 0.0 ) break
74
72
75
73
val backwardsPointPairs =
@@ -103,8 +101,7 @@ fun generatePreviousSimulationSegments(
103
101
)
104
102
)
105
103
}
106
- currentEdge.engineeringAllowance?.let { alreadyAddedDelay + = it.extraDuration }
107
- alreadyAddedDelay + = currentEdge.timeData.delayAddedToLastDeparture
104
+ alreadyAddedDelay + = currentEdge.getTotalAddedDelayOnEdge()
108
105
currentEdge = currentEdge.previousNode.previousEdge
109
106
}
110
107
}
You can’t perform that action at this time.
0 commit comments