Skip to content

Commit

Permalink
core: take step planned timing data into account in block availability
Browse files Browse the repository at this point in the history
  • Loading branch information
Erashin committed Jul 19, 2024
1 parent f2d6885 commit a20af1c
Show file tree
Hide file tree
Showing 5 changed files with 595 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import fr.sncf.osrd.standalone_sim.makeElectricalProfiles
import fr.sncf.osrd.standalone_sim.makeMRSPResponse
import fr.sncf.osrd.standalone_sim.result.ElectrificationRange
import fr.sncf.osrd.standalone_sim.runScheduleMetadataExtractor
import fr.sncf.osrd.stdcm.PlannedTimingData
import fr.sncf.osrd.stdcm.STDCMResult
import fr.sncf.osrd.stdcm.STDCMStep
import fr.sncf.osrd.stdcm.graph.findPath
Expand All @@ -33,9 +34,12 @@ import fr.sncf.osrd.train.RollingStock
import fr.sncf.osrd.train.TrainStop
import fr.sncf.osrd.utils.Direction
import fr.sncf.osrd.utils.units.Offset
import fr.sncf.osrd.utils.units.TimeDelta
import fr.sncf.osrd.utils.units.meters
import fr.sncf.osrd.utils.units.seconds
import java.time.Duration.between
import java.time.Duration.ofMillis
import java.time.ZonedDateTime
import org.takes.Request
import org.takes.Response
import org.takes.Take
Expand Down Expand Up @@ -67,6 +71,7 @@ class STDCMEndpointV2(private val infraManager: InfraManager) : Take {
val trainsRequirements =
parseRawTrainsRequirements(request.trainsRequirements, request.startTime)
val spacingRequirements = trainsRequirements.flatMap { it.spacingRequirements }
val steps = parseSteps(infra, request.pathItems, request.startTime)

// Run the STDCM pathfinding
val path =
Expand All @@ -75,11 +80,12 @@ class STDCMEndpointV2(private val infraManager: InfraManager) : Take {
rollingStock,
request.comfort,
0.0,
parseSteps(infra, request.pathItems),
steps,
makeBlockAvailability(
infra,
spacingRequirements,
workSchedules = request.workSchedules,
steps,
gridMarginBeforeTrain = request.timeGapBefore.seconds,
gridMarginAfterTrain = request.timeGapAfter.seconds
),
Expand Down Expand Up @@ -173,7 +179,11 @@ class STDCMEndpointV2(private val infraManager: InfraManager) : Take {
}
}

private fun parseSteps(infra: FullInfra, pathItems: List<STDCMPathItem>): List<STDCMStep> {
private fun parseSteps(
infra: FullInfra,
pathItems: List<STDCMPathItem>,
startTime: ZonedDateTime
): List<STDCMStep> {
if (pathItems.last().stopDuration == null) {
throw OSRDError(ErrorType.MissingLastSTDCMStop)
}
Expand All @@ -182,7 +192,14 @@ private fun parseSteps(infra: FullInfra, pathItems: List<STDCMPathItem>): List<S
STDCMStep(
findWaypointBlocks(infra, it.locations),
it.stopDuration?.seconds,
it.stopDuration != null
it.stopDuration != null,
if (it.stepTimingData != null)
PlannedTimingData(
TimeDelta(between(startTime, it.stepTimingData.arrivalTime).toMillis()),
it.stepTimingData.arrivalTimeToleranceBefore,
it.stepTimingData.arrivalTimeToleranceAfter
)
else null
)
}
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,9 @@ import fr.sncf.osrd.api.api_v2.standalone_sim.MarginValueAdapter
import fr.sncf.osrd.api.api_v2.standalone_sim.PhysicsRollingStockModel
import fr.sncf.osrd.railjson.schema.rollingstock.RJSLoadingGaugeType
import fr.sncf.osrd.railjson.schema.rollingstock.RJSRollingResistance
import fr.sncf.osrd.sim_infra.api.TrackSection
import fr.sncf.osrd.train.RollingStock.Comfort
import fr.sncf.osrd.utils.json.UnitAdapterFactory
import fr.sncf.osrd.utils.units.Duration
import fr.sncf.osrd.utils.units.Offset
import fr.sncf.osrd.utils.units.TimeDelta
import fr.sncf.osrd.utils.units.seconds
import java.time.ZonedDateTime
Expand Down Expand Up @@ -69,8 +67,6 @@ data class StepTimingData(
@Json(name = "arrival_time_tolerance_after") val arrivalTimeToleranceAfter: Duration,
)

class TrackOffset(val track: String, val offset: Offset<TrackSection>)

data class WorkSchedule(
/** List of affected track ranges */
@Json(name = "track_ranges") val trackRanges: Collection<UndirectedTrackRange> = listOf(),
Expand Down
11 changes: 10 additions & 1 deletion core/src/main/kotlin/fr/sncf/osrd/stdcm/STDCMStep.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,18 @@ package fr.sncf.osrd.stdcm

import fr.sncf.osrd.graph.PathfindingEdgeLocationId
import fr.sncf.osrd.sim_infra.api.Block
import fr.sncf.osrd.utils.units.Duration
import fr.sncf.osrd.utils.units.TimeDelta

data class STDCMStep(
val locations: Collection<PathfindingEdgeLocationId<Block>>,
val duration: Double?,
val stop: Boolean
val stop: Boolean,
val plannedTimingData: PlannedTimingData? = null,
)

data class PlannedTimingData(
val arrivalTime: TimeDelta,
val arrivalTimeToleranceBefore: Duration,
val arrivalTimeToleranceAfter: Duration,
)
Loading

0 comments on commit a20af1c

Please sign in to comment.