Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netbuild/NBLoadedTLDef.h
169666 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file NBLoadedTLDef.h
15
/// @author Daniel Krajzewicz
16
/// @author Sascha Krieg
17
/// @date Fri, 29.04.2005
18
///
19
// A loaded (complete) traffic light logic
20
/****************************************************************************/
21
#pragma once
22
#include <config.h>
23
24
#include <vector>
25
#include <string>
26
#include <set>
27
#include "NBTrafficLightDefinition.h"
28
#include "NBNode.h"
29
#include <utils/common/SUMOTime.h>
30
31
32
// ===========================================================================
33
// class definitions
34
// ===========================================================================
35
/**
36
* @class NBLoadedTLDef
37
* @brief A loaded (complete) traffic light logic
38
*/
39
class NBLoadedTLDef : public NBTrafficLightDefinition {
40
public:
41
/** @class SignalGroup
42
* @brief A single signal group, may control several connections
43
*/
44
class SignalGroup : public Named {
45
public:
46
/** @brief Constructor
47
* @param[in] id The id of the signal group
48
*/
49
SignalGroup(const std::string& id);
50
51
/// @brief Destructor
52
~SignalGroup();
53
54
/** @brief Inserts a controlled connection
55
* @param[in] c The connection to be controlled by this signal group
56
*/
57
void addConnection(const NBConnection& c);
58
59
/** @brief Sets the begin of a phase
60
* @param[in] time The time at which the phase starts
61
* @param[in] color The color of this signal starting at the given time
62
*/
63
void addPhaseBegin(SUMOTime time, TLColor color);
64
65
/** @brief Sets the times for redyellow and yellow
66
* @param[in] tRedYellowe The duration of the redyellow phase
67
* @param[in] tYellow The duration of the yellow phase
68
*/
69
void setYellowTimes(SUMOTime tRedYellowe, SUMOTime tYellow);
70
71
/** @brief Returns the times at which the signal switches
72
* @param[in] cycleDuration The duration of the complete cycle
73
* @return The switch times of this signal
74
*/
75
std::vector<SUMOTime> getTimes(SUMOTime cycleDuration) const;
76
77
/** @brief Sorts the phases */
78
void sortPhases();
79
80
/** @brief Returns the number of links (connection) controlled by this signal
81
* @return The number of links controlled by this signal
82
*/
83
int getLinkNo() const;
84
85
/** @brief Returns whether vehicles on controlled links may drive at the given time
86
* @param[in] time The regarded time
87
* @return Whether vehicles may drive at this time
88
*/
89
bool mayDrive(SUMOTime time) const;
90
91
/** @brief Returns whether controlled links have yellow at the given time
92
* @param[in] time The regarded time
93
* @return Whether controlled links are yellow at this time
94
*/
95
bool hasYellow(SUMOTime time) const;
96
97
/** @brief Returns whether this signal controls the given edge
98
* @param[in] from The incoming edge
99
* @return Whether this edge is controlled by this signal
100
*/
101
bool containsIncoming(NBEdge* from) const;
102
103
/** @brief Replaces the given incoming edge by the others given
104
* @param[in] which The edge to replace
105
* @param[in] by The replacements
106
*/
107
void remapIncoming(NBEdge* which, const EdgeVector& by);
108
109
/** @brief Returns whether this signal controls a connection where the given edge is the destination
110
* @param[in] from The outgoing edge
111
* @return Whether this edge's predecessing edge is controlled by this signal
112
*/
113
bool containsOutgoing(NBEdge* to) const;
114
115
/** @brief Replaces the given outgoing edge by the others given
116
* @param[in] which The edge to replace
117
* @param[in] by The replacements
118
*/
119
void remapOutgoing(NBEdge* which, const EdgeVector& by);
120
121
/** @brief Returns the connection at the given index
122
* @param[in] pos The position within this signal
123
* @return The connection at the given index
124
*/
125
const NBConnection& getConnection(int pos) const;
126
127
/** @brief Sets the yellow time
128
* @param[in] tyellow The yellow time to set in seconds
129
* @param[in] forced Whether resetting tyellow was forced by the user by setting "tls.yellow.patch-small"
130
*/
131
void patchTYellow(SUMOTime tyellow, bool forced);
132
133
/** @brief Replaces a removed edge/lane
134
* @param[in] removed The edge to replace
135
* @param[in] removedLane The lane of this edge to replace
136
* @param[in] by The edge to insert instead
137
* @param[in] byLane This edge's lane to insert instead
138
*/
139
void remap(NBEdge* removed, int removedLane, NBEdge* by, int byLane);
140
141
/** @class PhaseDef
142
* @brief Definition of a single, loaded phase
143
*/
144
class PhaseDef {
145
public:
146
/** @brief Constructor
147
* @param[in] time The begin time of this phase
148
* @param[in] color A signal's color from this time
149
*/
150
PhaseDef(SUMOTime time, TLColor color)
151
: myTime(time), myColor(color) { }
152
153
/// @brief The begin time of this phase
154
SUMOTime myTime;
155
/// @brief A signal's color from this time
156
TLColor myColor;
157
};
158
159
private:
160
/// @brief Connections controlled by this signal
161
NBConnectionVector myConnections;
162
/// @brief The phases of this signal
163
std::vector<PhaseDef> myPhases;
164
/// @brief The times of redyellow and yellow
165
SUMOTime myTRedYellow, myTYellow;
166
};
167
168
169
170
/// @brief Definition of the container for signal groups
171
typedef std::map<std::string, SignalGroup*> SignalGroupCont;
172
173
174
/** @brief Constructor
175
* @param[in] id The id of the tls
176
* @param[in] junctions Junctions controlled by this tls
177
* @param[in] offset The offset of the plan
178
* @param[in] type The algorithm type for the computed traffic light
179
*/
180
NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id,
181
const std::vector<NBNode*>& junctions, SUMOTime offset,
182
TrafficLightType type);
183
184
185
/** @brief Constructor
186
* @param[in] id The id of the tls
187
* @param[in] junction The junction controlled by this tls
188
* @param[in] offset The offset of the plan
189
* @param[in] type The algorithm type for the computed traffic light
190
*/
191
NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id, NBNode* junction, SUMOTime offset,
192
TrafficLightType type);
193
194
195
/** @brief Constructor
196
* @param[in] id The id of the tls
197
* @param[in] offset The offset of the plan
198
* @param[in] type The algorithm type for the computed traffic light
199
*/
200
NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id, SUMOTime offset,
201
TrafficLightType type);
202
203
204
/// @brief Destructor
205
~NBLoadedTLDef();
206
207
208
/** @brief Sets the duration of a cycle
209
* @param[in] cycleDur The duration of the cycle
210
*/
211
void setCycleDuration(SUMOTime cycleDur);
212
213
214
/** @brief Adds a signal group
215
* @param[in] id The id of the signal group
216
*/
217
void addSignalGroup(const std::string& id);
218
219
220
/** @brief Adds a connection to a signal group
221
* @param[in] groupid The id of the signal group to add the connection to
222
* @param[in] connection The connection to add
223
*/
224
bool addToSignalGroup(const std::string& groupid,
225
const NBConnection& connection);
226
227
228
/** @brief Adds a list of connections to a signal group
229
* @param[in] groupid The id of the signal group to add the connections to
230
* @param[in] connections The connections to add
231
*/
232
bool addToSignalGroup(const std::string& groupid,
233
const NBConnectionVector& connections);
234
235
236
/** @brief Sets the information about the begin of a phase
237
* @param[in] groupid The id of the signal group to add the phase to
238
* @param[in] time The time the phase starts at
239
* @param[in] color The color of the signal during this phase
240
*/
241
void addSignalGroupPhaseBegin(const std::string& groupid,
242
SUMOTime time, TLColor color);
243
244
245
/** @brief Sets the times the light is yellow or red/yellow
246
* @param[in] groupid The id of the signal group to add the phase to
247
* @param[in] tRedYellow The duration of redyellow
248
* @param[in] tYellow The duration of yellow
249
*/
250
void setSignalYellowTimes(const std::string& groupid,
251
SUMOTime tRedYellow, SUMOTime tYellow);
252
253
254
/// @name Public methods from NBTrafficLightDefinition-interface
255
/// @{
256
257
/** @brief Informs edges about being controlled by a tls
258
* @param[in] ec The container of edges
259
* @see NBTrafficLightDefinition::setTLControllingInformation
260
*/
261
void setTLControllingInformation() const;
262
263
264
/** @brief Replaces occurrences of the removed edge in incoming/outgoing edges of all definitions
265
* @param[in] removed The removed edge
266
* @param[in] incoming The edges to use instead if an incoming edge was removed
267
* @param[in] outgoing The edges to use instead if an outgoing edge was removed
268
* @see NBTrafficLightDefinition::remapRemoved
269
*/
270
void remapRemoved(NBEdge* removed,
271
const EdgeVector& incoming, const EdgeVector& outgoing);
272
273
/* initialize myNeedsContRelation and set myNeedsContRelationReady to true */
274
void initNeedsContRelation() const;
275
276
///@brief Returns the maximum index controlled by this traffic light
277
int getMaxIndex();
278
279
/// @}
280
281
282
protected:
283
/// @name Protected methods from NBTrafficLightDefinition-interface
284
/// @{
285
286
/** @brief Computes the traffic light logic finally in dependence to the type
287
* @param[in] brakingTime Duration a vehicle needs for braking in front of the tls in seconds
288
* @return The computed logic
289
* @see NBTrafficLightDefinition::myCompute
290
*/
291
NBTrafficLightLogic* myCompute(int brakingTimeSeconds);
292
293
/** @brief Builds the list of participating nodes/edges/links
294
* @see NBTrafficLightDefinition::setParticipantsInformation
295
*/
296
void setParticipantsInformation();
297
298
299
/** @brief Collects the nodes participating in this traffic light
300
* @see NBTrafficLightDefinition::collectNodes
301
*/
302
void collectNodes();
303
304
305
/** @brief Collects the links participating in this traffic light
306
* @exception ProcessError If a link could not be found
307
* @see NBTrafficLightDefinition::collectLinks
308
*/
309
void collectLinks();
310
311
312
/** @brief Returns the information whether a connection must brake, given a phase
313
* @param[in] possProhibited The connection to investigate
314
* @param[in] state The state
315
* @param[in] strmpos The index of this connection within the masks
316
* @return Whether the given connection must brake
317
*/
318
bool mustBrake(const NBConnection& possProhibited,
319
const std::string& state,
320
int strmpos) const;
321
322
323
/** @brief Replaces a removed edge/lane
324
* @param[in] removed The edge to replace
325
* @param[in] removedLane The lane of this edge to replace
326
* @param[in] by The edge to insert instead
327
* @param[in] byLane This edge's lane to insert instead
328
* @see NBTrafficLightDefinition::replaceRemoved
329
*/
330
void replaceRemoved(NBEdge* removed, int removedLane,
331
NBEdge* by, int byLane, bool incoming);
332
/// @}
333
334
private:
335
/** @brief Builds the phase for a given time
336
* @param[in] ec The edge control to use
337
* @param[in] time The time to build the phase for
338
* @return The phase of this tls for the given time
339
*/
340
std::string buildPhaseState(const SUMOTime time) const;
341
342
// pointer to the NBEdgeCont for checking edges
343
const NBEdgeCont* myEdgeCont;
344
345
346
private:
347
/// @brief Controlled signal groups
348
SignalGroupCont mySignalGroups;
349
350
/// @brief The duration of a single cycle
351
SUMOTime myCycleDuration;
352
353
354
};
355
356