From 4698a663b1e62858121ce7e6caba0d74e88c276f Mon Sep 17 00:00:00 2001 From: Erashin Date: Wed, 3 Jul 2024 14:34:51 +0200 Subject: [PATCH] core: skip work schedules on track chunks with no routes --- .../fr/sncf/osrd/sim_infra/api/InterlockingInfra.kt | 2 +- .../kotlin/fr/sncf/osrd/sim_infra/impl/RawInfraImpl.kt | 4 ++-- .../preprocessing/implementation/BlockAvailability.kt | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/api/InterlockingInfra.kt b/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/api/InterlockingInfra.kt index e84ffdc5de3..25b14955086 100644 --- a/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/api/InterlockingInfra.kt +++ b/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/api/InterlockingInfra.kt @@ -32,7 +32,7 @@ interface LocationInfra : TrackNetworkInfra, TrackInfra, TrackProperties { fun getDetectorName(det: DetectorId): String - fun getTrackChunkZone(chunk: TrackChunkId): ZoneId + fun getTrackChunkZone(chunk: TrackChunkId): ZoneId? } fun LocationInfra.isBufferStop(detector: StaticIdx): Boolean { diff --git a/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/impl/RawInfraImpl.kt b/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/impl/RawInfraImpl.kt index 669cf1d8b72..a29fec5b34f 100644 --- a/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/impl/RawInfraImpl.kt +++ b/core/kt-osrd-sim-infra/src/main/kotlin/fr/sncf/osrd/sim_infra/impl/RawInfraImpl.kt @@ -605,8 +605,8 @@ class RawInfraImpl( return detectorPool[det].names[0] } - override fun getTrackChunkZone(chunk: TrackChunkId): ZoneId { - return chunkToZoneMap[chunk]!! + override fun getTrackChunkZone(chunk: TrackChunkId): ZoneId? { + return chunkToZoneMap[chunk] } override fun getNextTrackSection( diff --git a/core/src/main/kotlin/fr/sncf/osrd/stdcm/preprocessing/implementation/BlockAvailability.kt b/core/src/main/kotlin/fr/sncf/osrd/stdcm/preprocessing/implementation/BlockAvailability.kt index b77a79d3d34..0ce5ab29f50 100644 --- a/core/src/main/kotlin/fr/sncf/osrd/stdcm/preprocessing/implementation/BlockAvailability.kt +++ b/core/src/main/kotlin/fr/sncf/osrd/stdcm/preprocessing/implementation/BlockAvailability.kt @@ -17,6 +17,10 @@ import fr.sncf.osrd.utils.units.Offset import fr.sncf.osrd.utils.units.meters import kotlin.math.max import kotlin.math.min +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +val blockAvailabilityLogger: Logger = LoggerFactory.getLogger("BlockAvailability") data class BlockAvailability( val fullInfra: FullInfra, @@ -143,6 +147,12 @@ private fun convertWorkSchedules( val chunkEndOffset = chunkStartOffset + infra.getTrackChunkLength(chunk).distance if (chunkStartOffset > range.end || chunkEndOffset < range.begin) continue val zone = infra.getTrackChunkZone(chunk) + if (zone == null) { + blockAvailabilityLogger.info( + "Skipping part of work schedule [${entry.startTime}; ${entry.endTime}] because it is on a track not fully covered by routes: $track", + ) + continue + } res.add( SpacingRequirement( infra.getZoneName(zone),