Skip to content

Commit 7f524fa

Browse files
committed
api: add stops details to the report
1 parent 583b3f6 commit 7f524fa

File tree

9 files changed

+82
-28
lines changed

9 files changed

+82
-28
lines changed

api/openapi.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,8 @@ components:
843843
time: { type: number, format: float }
844844
position: { type: number, format: float }
845845
duration: { type: number, format: float }
846+
line_number: { type: number }
847+
track_number: { type: number }
846848
route_aspects:
847849
type: array
848850
items:

api/osrd_infra/views/train_schedule/standalone_simulation_report.py

+23-21
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@ def convert_simulation_results(
6666
route_begin_occupancy, route_end_occupancy = convert_route_occupancies(
6767
simulation_result["route_occupancies"], projection_path_payload, departure_time
6868
)
69-
route_aspects = project_signal_updates(
70-
simulation_result["signal_updates"], projection_path_payload, departure_time
71-
)
69+
route_aspects = project_signal_updates(simulation_result["signal_updates"], projection_path_payload, departure_time)
7270

7371
speeds = [{**speed, "time": speed["time"] + departure_time} for speed in simulation_result["speeds"]]
7472
stops = [{**stop, "time": stop["time"] + departure_time} for stop in simulation_result["stops"]]
@@ -161,14 +159,16 @@ def build_signal_updates(signal_updates, departure_time):
161159
results = []
162160

163161
for update in signal_updates:
164-
results.append({
165-
"signal_id": update["signal_id"],
166-
"time_start": update["time_start"] + departure_time,
167-
"time_end": update["time_end"] + departure_time,
168-
"color": update["color"],
169-
"blinking": update["blinking"],
170-
"aspect_label": update["aspect_label"]
171-
})
162+
results.append(
163+
{
164+
"signal_id": update["signal_id"],
165+
"time_start": update["time_start"] + departure_time,
166+
"time_end": update["time_end"] + departure_time,
167+
"color": update["color"],
168+
"blinking": update["blinking"],
169+
"aspect_label": update["aspect_label"],
170+
}
171+
)
172172
return results
173173

174174

@@ -189,16 +189,18 @@ def project_signal_updates(signal_updates, projection_path_payload: PathPayload,
189189
end_pos += track_range.length()
190190

191191
for update in updates_by_route_id[route_id]:
192-
results.append({
193-
"signal_id": update["signal_id"],
194-
"route_id": route_id,
195-
"time_start": update["time_start"] + departure_time,
196-
"time_end": update["time_end"] + departure_time,
197-
"position_start": start_pos,
198-
"position_end": end_pos,
199-
"color": update["color"],
200-
"blinking": update["blinking"]
201-
})
192+
results.append(
193+
{
194+
"signal_id": update["signal_id"],
195+
"route_id": route_id,
196+
"time_start": update["time_start"] + departure_time,
197+
"time_end": update["time_end"] + departure_time,
198+
"position_start": start_pos,
199+
"position_end": end_pos,
200+
"color": update["color"],
201+
"blinking": update["blinking"],
202+
}
203+
)
202204
start_pos = end_pos
203205
return results
204206

core/src/main/java/fr/sncf/osrd/infra/api/tracks/undirected/TrackEdge.java

+1
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ public sealed interface TrackEdge permits SwitchBranch, TrackSection {
3939

4040
/** Returns a list of ranges, each having a set of blocked loading gauge type */
4141
ImmutableRangeMap<Double, LoadingGaugeConstraint> getLoadingGaugeConstraints();
42+
4243
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
package fr.sncf.osrd.infra.api.tracks.undirected;
22

3-
public non-sealed interface TrackSection extends TrackEdge {}
3+
public non-sealed interface TrackSection extends TrackEdge {
4+
5+
/** Returns line code */
6+
int getLineCode();
7+
8+
/** Returns track number */
9+
int getTrackNumber();
10+
}

core/src/main/java/fr/sncf/osrd/infra/implementation/tracks/undirected/TrackSectionImpl.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class TrackSectionImpl implements TrackSection {
2020
private final LineString geo;
2121
private final LineString sch;
2222
private final ImmutableRangeMap<Double, LoadingGaugeConstraint> loadingGaugeConstraints;
23+
private int trackNumber = 0;
24+
private int lineCode = 0;
2325

2426
@Override
2527
@ExcludeFromGeneratedCodeCoverage
@@ -37,14 +39,18 @@ public TrackSectionImpl(
3739
ImmutableSet<OperationalPoint> operationalPoints,
3840
LineString geo,
3941
LineString sch,
40-
ImmutableRangeMap<Double, LoadingGaugeConstraint> loadingGaugeConstraints
42+
ImmutableRangeMap<Double, LoadingGaugeConstraint> loadingGaugeConstraints,
43+
int trackNumber,
44+
int lineCode
4145
) {
4246
this.length = length;
4347
this.id = id;
4448
this.operationalPoints = operationalPoints;
4549
this.geo = geo;
4650
this.sch = sch;
4751
this.loadingGaugeConstraints = loadingGaugeConstraints;
52+
this.trackNumber = trackNumber;
53+
this.lineCode = lineCode;
4854
}
4955

5056
/** Constructor with empty operational points and geometry */
@@ -103,6 +109,16 @@ public ImmutableRangeMap<Double, LoadingGaugeConstraint> getLoadingGaugeConstrai
103109
return loadingGaugeConstraints;
104110
}
105111

112+
@Override
113+
public int getLineCode() {
114+
return lineCode;
115+
}
116+
117+
@Override
118+
public int getTrackNumber() {
119+
return trackNumber;
120+
}
121+
106122
@Override
107123
public LineString getGeo() {
108124
return geo;

core/src/main/java/fr/sncf/osrd/infra/implementation/tracks/undirected/UndirectedInfraBuilder.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,9 @@ private TrackSectionImpl makeTrackSection(RJSTrackSection track) {
195195
ImmutableSet.copyOf(operationalPointsPerTrack.get(track.id)),
196196
track.geo,
197197
track.sch,
198-
buildLoadingGaugeLimits(track.loadingGaugeLimits)
198+
buildLoadingGaugeLimits(track.loadingGaugeLimits),
199+
track.trackNumber,
200+
track.lineCode
199201
);
200202
builder.addEdge(begin, end, edge);
201203
edge.gradients = makeGradients(track);

core/src/main/java/fr/sncf/osrd/railjson/schema/infra/RJSTrackSection.java

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.sncf.osrd.railjson.schema.infra;
22

3+
import com.squareup.moshi.Json;
34
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
45
import fr.sncf.osrd.railjson.schema.common.ID;
56
import fr.sncf.osrd.railjson.schema.common.Identified;
@@ -23,6 +24,12 @@ public class RJSTrackSection implements Identified {
2324
public LineString geo;
2425
public LineString sch;
2526

27+
@Json(name = "line_code")
28+
public int lineCode;
29+
30+
@Json(name = "track_number")
31+
public int trackNumber;
32+
2633
public RJSTrackSection(String id, double length) {
2734
this.id = id;
2835
this.length = length;

core/src/main/java/fr/sncf/osrd/standalone_sim/ScheduleMetadataExtractor.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ public static ResultTrain run(
5050
var stops = new ArrayList<ResultStops>();
5151
for (var stop : schedule.stops) {
5252
var stopTime = ResultPosition.interpolateTime(stop.position, headPositions);
53-
stops.add(new ResultStops(stopTime, stop.position, stop.duration));
53+
var location = trainPath.findLocation(stop.position);
54+
stops.add(new ResultStops(stopTime, stop.position, stop.duration,
55+
location.track().getLineCode(), location.track().getTrackNumber()));
5456
}
5557

5658
// Compute events
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
11
package fr.sncf.osrd.standalone_sim.result;
22

3-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
3+
import com.squareup.moshi.Json;
44

5-
@SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
6-
public record ResultStops(double time, double position, double duration) {
5+
public class ResultStops {
6+
double time;
7+
double position;
8+
double duration;
9+
@Json(name = "line_number")
10+
int lineNumber;
11+
@Json(name = "track_number")
12+
int trackNumber;
13+
14+
/** RestultStops constructor */
15+
public ResultStops(double time, double position, double duration, int lineNumber, int trackNumber) {
16+
this.time = time;
17+
this.position = position;
18+
this.duration = duration;
19+
this.lineNumber = lineNumber;
20+
this.trackNumber = trackNumber;
21+
}
722
}

0 commit comments

Comments
 (0)