Skip to content

Commit

Permalink
core, editoast: rename signal_sighting to signal_critical_position
Browse files Browse the repository at this point in the history
Letting core's API v1 untouched (as it didn't change)

Signed-off-by: Pierre-Etienne Bougué <[email protected]>
  • Loading branch information
bougue-pe committed Nov 26, 2024
1 parent aa69c92 commit 08755cd
Show file tree
Hide file tree
Showing 15 changed files with 64 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ZoneUpdate(
@Json(name = "is_entry") val isEntry: Boolean,
)

class SignalSighting(
class SignalCriticalPosition(
val signal: String,
val time: TimeDelta,
val position: Offset<TravelledPath>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class SignalProjectionEndpointV2(private val infraManager: InfraManager) : Take
chunkPath,
blockPath,
routePath,
trainSimulation.signalSightings,
trainSimulation.signalCriticalPositions,
trainSimulation.zoneUpdates,
trainSimulation.simulationEndTime
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import fr.sncf.osrd.api.api_v2.DirectionalTrackRange
import fr.sncf.osrd.api.api_v2.SignalSighting
import fr.sncf.osrd.api.api_v2.SignalCriticalPosition
import fr.sncf.osrd.api.api_v2.ZoneUpdate
import fr.sncf.osrd.utils.json.UnitAdapterFactory
import fr.sncf.osrd.utils.units.TimeDelta
Expand All @@ -21,7 +21,8 @@ class SignalProjectionRequest(
)

class TrainSimulation(
@Json(name = "signal_sightings") val signalSightings: Collection<SignalSighting>,
@Json(name = "signal_critical_positions")
val signalCriticalPositions: Collection<SignalCriticalPosition>,
@Json(name = "zone_updates") val zoneUpdates: Collection<ZoneUpdate>,
@Json(name = "simulation_end_time") val simulationEndTime: TimeDelta,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ class CompleteReportTrain(
speeds: List<Double>,
@Json(name = "energy_consumption") energyConsumption: Double,
@Json(name = "path_item_times") pathItemTimes: List<TimeDelta>,
@Json(name = "signal_sightings") val signalSightings: List<SignalSighting>,
@Json(name = "signal_critical_positions")
val signalCriticalPositions: List<SignalCriticalPosition>,
@Json(name = "zone_updates") val zoneUpdates: List<ZoneUpdate>,
@Json(name = "spacing_requirements") val spacingRequirements: List<SpacingRequirement>,
@Json(name = "routing_requirements") val routingRequirements: List<RoutingRequirement>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.sncf.osrd.signal_projection

import fr.sncf.osrd.api.FullInfra
import fr.sncf.osrd.api.api_v2.SignalSighting
import fr.sncf.osrd.api.api_v2.SignalCriticalPosition
import fr.sncf.osrd.api.api_v2.ZoneUpdate
import fr.sncf.osrd.api.api_v2.project_signals.SignalUpdate
import fr.sncf.osrd.conflicts.TravelledPath
Expand All @@ -11,9 +11,15 @@ import fr.sncf.osrd.signaling.SignalingSimulator
import fr.sncf.osrd.signaling.ZoneStatus
import fr.sncf.osrd.sim_infra.api.*
import fr.sncf.osrd.sim_infra.impl.ChunkPath
import fr.sncf.osrd.standalone_sim.*
import fr.sncf.osrd.standalone_sim.PathOffsetBuilder
import fr.sncf.osrd.standalone_sim.PathSignal
import fr.sncf.osrd.standalone_sim.pathSignalsInRange
import fr.sncf.osrd.standalone_sim.trainPathBlockOffset
import fr.sncf.osrd.utils.indexing.StaticIdxList
import fr.sncf.osrd.utils.units.*
import fr.sncf.osrd.utils.units.Duration
import fr.sncf.osrd.utils.units.Length
import fr.sncf.osrd.utils.units.TimeDelta
import fr.sncf.osrd.utils.units.meters
import java.awt.Color

data class SignalAspectChangeEventV2(val newAspect: String, val time: TimeDelta)
Expand All @@ -23,7 +29,7 @@ fun projectSignals(
chunkPath: ChunkPath,
blockPath: StaticIdxList<Block>,
routePath: StaticIdxList<Route>,
signalSightings: Collection<SignalSighting>,
signalCriticalPositions: Collection<SignalCriticalPosition>,
zoneUpdates: Collection<ZoneUpdate>,
simulationEndTime: TimeDelta
): List<SignalUpdate> {
Expand Down Expand Up @@ -98,7 +104,7 @@ fun projectSignals(
loadedSignalInfra,
sigSystemManager,
rawInfra,
signalSightings,
signalCriticalPositions,
Length(chunkPath.endOffset - chunkPath.beginOffset),
simulationEndTime
)
Expand Down Expand Up @@ -186,7 +192,7 @@ private fun signalUpdates(
loadedSignalInfra: LoadedSignalInfra,
sigSystemManager: SigSystemManager,
rawInfra: RawInfra,
signalSightings: Collection<SignalSighting>,
signalCriticalPositions: Collection<SignalCriticalPosition>,
travelledPathLength: Length<TravelledPath>,
simulationEndTime: TimeDelta,
): MutableList<SignalUpdate> {
Expand Down Expand Up @@ -221,7 +227,7 @@ private fun signalUpdates(
}
}

val signalSightingMap = signalSightings.associateBy { it.signal }
val signalCriticalPositionMap = signalCriticalPositions.associateBy { it.signal }

val nextSignal = mutableMapOf<LogicalSignalId, PathSignal>()
for (i in 0 until signalsOnPath.size - 1) nextSignal[signalsOnPath[i].signal] =
Expand All @@ -240,14 +246,17 @@ private fun signalUpdates(

if (events.isEmpty()) continue

// Compute the "green" section
// It happens before the first event
// Compute the "green" section (free block):
// * only seen signals (especially when train path is different from the projection path)
// * starting at the moment they must be green (sighting time or closed-signal stop ending)
// * ending at the first event
if (
events.first().time != Duration.ZERO && signalSightingMap.contains(physicalSignalName)
events.first().time != Duration.ZERO &&
signalCriticalPositionMap.contains(physicalSignalName)
) {
val event = events.first()
val timeEnd = event.time
val timeStart = signalSightingMap[physicalSignalName]!!.time
val timeStart = signalCriticalPositionMap[physicalSignalName]!!.time
if (timeEnd > timeStart) {
signalUpdates.add(
SignalUpdate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ fun runScheduleMetadataExtractor(
}
val closedSignalStops = pathStops.filter { it.receptionSignal.isStopOnClosedSignal }

val signalSightings = mutableListOf<SignalSighting>()
val signalCriticalPositions = mutableListOf<SignalCriticalPosition>()
var indexClosedSignalStop = 0

var closedSignalStopOffset =
Expand Down Expand Up @@ -160,8 +160,8 @@ fun runScheduleMetadataExtractor(
}
}

signalSightings.add(
SignalSighting(
signalCriticalPositions.add(
SignalCriticalPosition(
rawInfra.getPhysicalSignalName(
loadedSignalInfra.getPhysicalSignal(pathSignal.signal)
)!!,
Expand Down Expand Up @@ -227,7 +227,7 @@ fun runScheduleMetadataExtractor(
reportTrain.speeds,
reportTrain.energyConsumption,
reportTrain.pathItemTimes,
signalSightings,
signalCriticalPositions,
zoneUpdates,
spacingRequirements.requirements.map {
SpacingRequirement(it.zone, it.beginTime.seconds, it.endTime.seconds)
Expand Down
17 changes: 10 additions & 7 deletions editoast/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3306,7 +3306,7 @@ components:
- $ref: '#/components/schemas/ReportTrain'
- type: object
required:
- signal_sightings
- signal_critical_positions
- zone_updates
- spacing_requirements
- routing_requirements
Expand All @@ -3315,10 +3315,10 @@ components:
type: array
items:
$ref: '#/components/schemas/RoutingRequirement'
signal_sightings:
signal_critical_positions:
type: array
items:
$ref: '#/components/schemas/SignalSighting'
$ref: '#/components/schemas/SignalCriticalPosition'
spacing_requirements:
type: array
items:
Expand Down Expand Up @@ -9504,8 +9504,11 @@ components:
maxLength: 255
minLength: 1
additionalProperties: false
SignalSighting:
SignalCriticalPosition:
type: object
description: |-
First position (space and time) along the path where given signal must
be free (sighting time or closed-signal stop ending)
required:
- signal
- time
Expand Down Expand Up @@ -9586,7 +9589,7 @@ components:
- $ref: '#/components/schemas/ReportTrain'
- type: object
required:
- signal_sightings
- signal_critical_positions
- zone_updates
- spacing_requirements
- routing_requirements
Expand All @@ -9595,10 +9598,10 @@ components:
type: array
items:
$ref: '#/components/schemas/RoutingRequirement'
signal_sightings:
signal_critical_positions:
type: array
items:
$ref: '#/components/schemas/SignalSighting'
$ref: '#/components/schemas/SignalCriticalPosition'
spacing_requirements:
type: array
items:
Expand Down
6 changes: 3 additions & 3 deletions editoast/src/core/signal_projection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use serde::Serialize;
use std::collections::HashMap;
use utoipa::ToSchema;

use crate::core::simulation::SignalSighting;
use crate::core::simulation::SignalCriticalPosition;
use crate::core::simulation::ZoneUpdate;
use crate::core::{AsCoreRequest, Json};

Expand All @@ -22,7 +22,7 @@ pub struct SignalUpdatesRequest<'a> {
pub routes: &'a Vec<Identifier>,
/// Path description as block ids
pub blocks: &'a Vec<Identifier>,
/// List of signal sightings and zone updates for each train
/// List of signal critical positions and zone updates for each train
pub train_simulations: HashMap<i64, TrainSimulation<'a>>,
}

Expand Down Expand Up @@ -51,7 +51,7 @@ pub struct SignalUpdate {

#[derive(Debug, Serialize)]
pub struct TrainSimulation<'a> {
pub signal_sightings: &'a Vec<SignalSighting>,
pub signal_critical_positions: &'a Vec<SignalCriticalPosition>,
pub zone_updates: &'a Vec<ZoneUpdate>,
pub simulation_end_time: u64,
}
Expand Down
8 changes: 5 additions & 3 deletions editoast/src/core/simulation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use std::hash::Hash;
editoast_common::schemas! {
CompleteReportTrain,
RoutingRequirement,
SignalSighting,
SignalCriticalPosition,
SpacingRequirement,
RoutingZoneRequirement,
ZoneUpdate,
Expand Down Expand Up @@ -306,14 +306,16 @@ pub struct ReportTrain {
pub struct CompleteReportTrain {
#[serde(flatten)]
pub report_train: ReportTrain,
pub signal_sightings: Vec<SignalSighting>,
pub signal_critical_positions: Vec<SignalCriticalPosition>,
pub zone_updates: Vec<ZoneUpdate>,
pub spacing_requirements: Vec<SpacingRequirement>,
pub routing_requirements: Vec<RoutingRequirement>,
}

#[derive(Debug, Clone, PartialEq, Hash, Serialize, Deserialize, ToSchema)]
pub struct SignalSighting {
/// First position (space and time) along the path where given signal must
/// be free (sighting time or closed-signal stop ending)
pub struct SignalCriticalPosition {
pub signal: String,
/// Time in ms
pub time: u64,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@
"time_tail_free": 42.075
}
},
"signal_sightings": [
"signal_critical_positions": [
{
"offset": 0.0,
"signal": "SA1",
Expand Down
2 changes: 1 addition & 1 deletion editoast/src/views/timetable/stdcm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ mod tests {
energy_consumption: 0.0,
path_item_times: vec![0, 10],
},
signal_sightings: vec![],
signal_critical_positions: vec![],
zone_updates: vec![],
spacing_requirements: vec![],
routing_requirements: vec![],
Expand Down
4 changes: 2 additions & 2 deletions editoast/src/views/train_schedule.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use crate::core::pathfinding::PathfindingResultSuccess;
use crate::core::simulation::CompleteReportTrain;
use crate::core::simulation::PhysicsConsistParameters;
use crate::core::simulation::ReportTrain;
use crate::core::simulation::SignalSighting;
use crate::core::simulation::SignalCriticalPosition;
use crate::core::simulation::SimulationMargins;
use crate::core::simulation::SimulationPath;
use crate::core::simulation::SimulationPowerRestrictionItem;
Expand Down Expand Up @@ -961,7 +961,7 @@ mod tests {
"speeds": [],
"energy_consumption": 0.0,
"path_item_times": [0, 1000, 2000, 3000],
"signal_sightings": [],
"signal_critical_positions": [],
"zone_updates": [],
"spacing_requirements": [],
"routing_requirements": []
Expand Down
16 changes: 8 additions & 8 deletions editoast/src/views/train_schedule/projection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ use crate::views::path::projection::TrackLocationFromPath;
use crate::views::train_schedule::train_simulation_batch;
use crate::views::train_schedule::CompleteReportTrain;
use crate::views::train_schedule::ReportTrain;
use crate::views::train_schedule::SignalSighting;
use crate::views::train_schedule::SignalCriticalPosition;
use crate::views::train_schedule::ZoneUpdate;
use crate::views::AuthenticationExt;
use crate::views::AuthorizationError;
Expand Down Expand Up @@ -208,7 +208,7 @@ async fn project_path(

let CompleteReportTrain {
report_train,
signal_sightings,
signal_critical_positions,
zone_updates,
..
} = match sim {
Expand All @@ -222,7 +222,7 @@ async fn project_path(
let train_details = TrainSimulationDetails {
positions,
times,
signal_sightings,
signal_critical_positions,
zone_updates,
train_path: track_ranges,
};
Expand Down Expand Up @@ -334,7 +334,7 @@ struct TrainSimulationDetails {
positions: Vec<u64>,
times: Vec<u64>,
train_path: Vec<TrackRange>,
signal_sightings: Vec<SignalSighting>,
signal_critical_positions: Vec<SignalCriticalPosition>,
zone_updates: Vec<ZoneUpdate>,
}

Expand Down Expand Up @@ -362,7 +362,7 @@ async fn compute_batch_signal_updates<'a>(
(
*id,
TrainSimulation {
signal_sightings: &details.signal_sightings,
signal_critical_positions: &details.signal_critical_positions,
zone_updates: &details.zone_updates,
simulation_end_time: details.times[details.times.len() - 1],
},
Expand Down Expand Up @@ -586,7 +586,7 @@ mod tests {
positions,
times,
train_path,
signal_sightings: vec![],
signal_critical_positions: vec![],
zone_updates: vec![],
};

Expand Down Expand Up @@ -620,7 +620,7 @@ mod tests {
positions: positions.clone(),
times: times.clone(),
train_path,
signal_sightings: vec![],
signal_critical_positions: vec![],
zone_updates: vec![],
};

Expand Down Expand Up @@ -657,7 +657,7 @@ mod tests {
positions,
times,
train_path,
signal_sightings: vec![],
signal_critical_positions: vec![],
zone_updates: vec![],
};

Expand Down
4 changes: 2 additions & 2 deletions front/src/common/api/generatedEditoastApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3093,7 +3093,7 @@ export type RoutingRequirement = {
route: string;
zones: RoutingZoneRequirement[];
};
export type SignalSighting = {
export type SignalCriticalPosition = {
/** Position in mm */
position: number;
signal: string;
Expand Down Expand Up @@ -3133,7 +3133,7 @@ export type SimulationResponse =
};
final_output: ReportTrain & {
routing_requirements: RoutingRequirement[];
signal_sightings: SignalSighting[];
signal_critical_positions: SignalCriticalPosition[];
spacing_requirements: SpacingRequirement[];
zone_updates: ZoneUpdate[];
};
Expand Down
Loading

0 comments on commit 08755cd

Please sign in to comment.