 |
Eclipse SUMO - Simulation of Urban MObility
|
Go to the documentation of this file.
52 myConnections.push_back(c);
58 myPhases.push_back(
PhaseDef(time, color));
64 myTRedYellow = tRedYellow;
80 }
else if (forced && myTYellow < tyellow) {
90 std::vector<double> ret;
91 for (std::vector<PhaseDef>::const_iterator i = myPhases.begin(); i != myPhases.end(); i++) {
92 ret.push_back((
double)(*i).myTime);
96 for (std::vector<PhaseDef>::const_iterator i = myPhases.begin(); i != myPhases.end(); i++) {
99 if (time > cycleDuration) {
100 time = time - cycleDuration;
102 ret.push_back((
double) time);
112 return (
int) myConnections.size();
118 assert(myPhases.size() != 0);
119 for (std::vector<PhaseDef>::const_reverse_iterator i = myPhases.rbegin(); i != myPhases.rend(); i++) {
121 if (time >= nextTime) {
131 bool has_red_now = !mayDrive(time);
132 bool had_green = mayDrive(time - myTYellow);
133 return has_red_now && had_green;
139 for (NBConnectionVector::const_iterator i = myConnections.begin(); i != myConnections.end(); i++) {
140 if ((*i).getFrom() == from && (*i).getTo() == to) {
151 assert(pos < (
int)myConnections.size());
152 return myConnections[pos];
158 for (NBConnectionVector::const_iterator i = myConnections.begin(); i != myConnections.end(); i++) {
159 if ((*i).getFrom() == from) {
170 for (NBConnectionVector::iterator i = myConnections.begin(); i != myConnections.end();) {
171 if ((*i).getFrom() == which) {
173 i = myConnections.erase(i);
174 for (EdgeVector::const_iterator j = by.begin(); j != by.end(); j++) {
177 throw ProcessError(
"Could not replace edge '" + which->
getID() +
"' by '" + (*j)->getID() +
"'.\nUndefined...");
179 newConns.push_back(curr);
185 copy(newConns.begin(), newConns.end(),
186 back_inserter(myConnections));
192 for (NBConnectionVector::const_iterator i = myConnections.begin(); i != myConnections.end(); i++) {
193 if ((*i).getTo() == to) {
204 for (NBConnectionVector::iterator i = myConnections.begin(); i != myConnections.end();) {
205 if ((*i).getTo() == which) {
207 i = myConnections.erase(i);
208 for (EdgeVector::const_iterator j = by.begin(); j != by.end(); j++) {
211 throw ProcessError(
"Could not replace edge '" + which->
getID() +
"' by '" + (*j)->getID() +
"'.\nUndefined...");
213 newConns.push_back(curr);
219 copy(newConns.begin(), newConns.end(),
220 back_inserter(myConnections));
227 for (NBConnectionVector::iterator i = myConnections.begin(); i != myConnections.end(); i++) {
228 if ((*i).getTo() == removed
230 ((*i).getToLane() == removedLane
232 (*i).getToLane() == -1)) {
233 (*i).replaceTo(removed, removedLane, by, byLane);
235 }
else if ((*i).getTo() == removed && removedLane == -1) {
236 (*i).replaceTo(removed, by);
239 if ((*i).getFrom() == removed
241 ((*i).getFromLane() == removedLane
243 (*i).getFromLane() == -1)) {
244 (*i).replaceFrom(removed, removedLane, by, byLane);
246 }
else if ((*i).getFrom() == removed && removedLane == -1) {
247 (*i).replaceFrom(removed, by);
285 NBLoadedTLDef::SignalGroupCont::const_iterator i;
287 std::set<double> tmpSwitchTimes;
298 for (std::vector<double>::const_iterator k = gtimes.begin(); k != gtimes.end(); k++) {
299 tmpSwitchTimes.insert(*k);
302 std::vector<double> switchTimes;
303 copy(tmpSwitchTimes.begin(), tmpSwitchTimes.end(), back_inserter(switchTimes));
304 sort(switchTimes.begin(), switchTimes.end());
309 noSignals += (*i).second->getLinkNo();
313 for (std::vector<double>::iterator l = switchTimes.begin(); l != switchTimes.end(); l++) {
316 if (l != switchTimes.end() - 1) {
318 duration = (int)((*(l + 1)) - (*l));
336 const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = logic->
getPhases();
337 for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) {
338 const std::string state = (*it).state;
350 && (state[i2] ==
'G' || state[i2] ==
'g')
389 bool mayDrive = group->
mayDrive(time);
398 for (
int j = 0; j < linkNo; j++) {
413 for (
int j = 0; j < linkNo; j++) {
418 if (state[pos] ==
'g') {
421 if (state[pos] ==
'y') {
435 const std::string& state,
438 if (state[strmpos] !=
'g' && state[strmpos] !=
'G') {
449 for (
int j = 0; j < linkNo; j++) {
460 if (state[pos] ==
'g' || state[pos] ==
'G') {
485 SignalGroupCont::const_iterator m;
489 for (
int j = 0; j < linkNo; j++) {
507 for (
int j = 0; j < noLanes; j++) {
509 for (std::vector<NBEdge::Connection>::iterator k = elv.begin(); k != elv.end(); k++) {
511 if (el.
toEdge !=
nullptr) {
523 for (
int j = 0; j < linkNo; j++) {
553 if ((*i).second->containsConnection(from, to)) {
586 for (NBConnectionVector::const_iterator i = connections.begin(); i != connections.end(); i++) {
643 group->
remap(removed, removedLane, by, byLane);
652 throw ProcessError(
"myNeedsContRelation was not propperly initialized\n");
661 if (logic !=
nullptr) {
data structure for caching needsCont information
NBEdge * toEdge
The edge the connections yields in.
NBTrafficLightLogic * compute(OptionsCont &oc)
Computes the traffic light logic.
#define WRITE_WARNING(msg)
bool hasYellow(SUMOTime time) const
Returns whether controlled links have yellow at the given time.
int getTLIndex() const
returns the index within the controlling tls or InvalidTLIndex if this link is unontrolled
Base class for objects which have an id.
Storage for edges, including some functionality operating on multiple edges.
void collectNodes()
Collects the nodes participating in this traffic light.
@ TLCOLOR_RED
Signal shows red.
Used for sorting the cells by the begin time they describe.
void addConnection(const NBConnection &c)
Inserts a controlled connection.
void addSignalGroup(const std::string &id)
Adds a signal group.
std::vector< NBNode * > myControlledNodes
The container with participating nodes.
A single signal group, may control several connections.
void patchTYellow(int tyellow, bool forced)
Sets the yellow time.
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
NBConnectionVector myControlledLinks
The list of controlled links.
int getLinkNo() const
Returns the number of links (connection) controlled by this signal.
std::vector< Connection > getConnectionsFromLane(int lane, NBEdge *to=nullptr, int toLane=-1) const
Returns connections from a given lane.
void setYellowTimes(SUMOTime tRedYellowe, SUMOTime tYellow)
Sets the times for redyellow and yellow.
void closeBuilding(bool checkVarDurations=true)
closes the building process
NBEdge * getFrom() const
returns the from-edge (start of the connection)
bool mustBrake(const NBEdge *const from, const NBEdge *const to) const
Returns the information whether the described flow must let any other flow pass.
SUMOTime myOffset
The offset in the program.
bool setControllingTLInformation(const NBConnection &c, const std::string &tlID)
Returns if the link could be set as to be controlled.
const static int InvalidTlIndex
NBEdge * getTo() const
returns the to-edge (end of the connection)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
void addSignalGroupPhaseBegin(const std::string &groupid, SUMOTime time, TLColor color)
Sets the information about the begin of a phase.
SignalGroupCont mySignalGroups
Controlled signal groups.
TrafficLightType myType
The algorithm type for the traffic light.
virtual void collectEdges()
Build the list of participating edges.
void setCycleDuration(int cycleDur)
Sets the duration of a cycle.
The representation of a single edge during network building.
virtual void clear()
Clears information whether an error occurred previously.
void addStep(SUMOTime duration, const std::string &state, const std::vector< int > &next=std::vector< int >(), const std::string &name="", int index=-1)
Adds a phase to the logic.
int toLane
The lane the connections yields in.
void setTLControllingInformation() const
Informs edges about being controlled by a tls.
NBNode * getToNode() const
Returns the destination node of the edge.
bool containsOutgoing(NBEdge *to) const
Returns whether this signal controls a connection where the given edge is the destination.
void setTLIndex(int tlIndex)
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
TLColor
An enumeration of possible tl-signal states.
void setSignalYellowTimes(const std::string &groupid, SUMOTime tRedYellow, SUMOTime tYellow)
Sets the times the light is yellow or red/yellow.
const std::vector< PhaseDefinition > & getPhases() const
Returns the phases.
const NBConnection & getConnection(int pos) const
Returns the connection at the given index.
int getNumLinks()
Returns the number of participating links.
void remapRemoved(NBEdge *removed, const EdgeVector &incoming, const EdgeVector &outgoing)
Replaces occurences of the removed edge in incoming/outgoing edges of all definitions.
int getToLane() const
returns the to-lane
int getNumLanes() const
Returns the number of lanes.
bool mayDrive(SUMOTime time) const
Returns whether vehicles on controlled links may drive at the given time.
bool mustBrake(const NBConnection &possProhibited, const std::string &state, int strmpos) const
Returns the information whether a connection must brake, given a phase.
void addTrafficLight(NBTrafficLightDefinition *tlDef)
Adds a traffic light to the list of traffic lights that control this node.
static bool rightTurnConflict(const NBEdge *from, const NBEdge *to, int fromLane, const NBEdge *prohibitorFrom, const NBEdge *prohibitorTo, int prohibitorFromLane, bool lefthand=false)
return whether the given laneToLane connection is a right turn which must yield to a bicycle crossing...
NeedsContRelation myNeedsContRelation
bool mayBeTLSControlled(int fromLane, NBEdge *toEdge, int toLane) const
return true if certain connection must be controlled by TLS
bool containsIncoming(NBEdge *from) const
Returns whether this signal controls the given edge.
int myCycleDuration
The duration of a single cycle.
void collectLinks()
Collects the links participating in this traffic light.
bool replaceFrom(NBEdge *which, NBEdge *by)
replaces the from-edge by the one given
bool myNeedsContRelationReady
~SignalGroup()
Destructor.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
bool check(const NBEdgeCont &ec)
checks whether the edges are still valid
SignalGroup(const std::string &id)
Constructor.
void remapIncoming(NBEdge *which, const EdgeVector &by)
Replaces the given incoming edge by the others given.
Sorts phases by their begin time.
void replaceRemoved(NBEdge *removed, int removedLane, NBEdge *by, int byLane)
Replaces a removed edge/lane.
void remapOutgoing(NBEdge *which, const EdgeVector &by)
Replaces the given outgoing edge by the others given.
bool replaceTo(NBEdge *which, NBEdge *by)
replaces the to-edge by the one given
static const std::string DefaultProgramID
void setParticipantsInformation()
Builds the list of participating nodes/edges/links.
std::vector< NBConnection > NBConnectionVector
Definition of a connection vector.
const std::string & getProgramID() const
Returns the ProgramID.
Definition of a single, loaded phase.
void initNeedsContRelation() const
std::string buildPhaseState(int time) const
Builds the phase for a given time.
virtual void addNode(NBNode *node)
Adds a node to the traffic light logic.
void addPhaseBegin(SUMOTime time, TLColor color)
Sets the begin of a phase.
~NBLoadedTLDef()
Destructor.
void remap(NBEdge *removed, int removedLane, NBEdge *by, int byLane)
Replaces a removed edge/lane.
NBTrafficLightLogic * myCompute(int brakingTimeSeconds)
Computes the traffic light logic finally in dependence to the type.
const NBEdgeCont * myEdgeCont
A SUMO-compliant built logic for a traffic light.
Represents a single node (junction) during network building.
EdgeVector myIncomingEdges
The list of incoming edges.
void sortPhases()
Sorts the phases.
bool containsConnection(NBEdge *from, NBEdge *to) const
Returns whether the given connection is controlled by this signal.
A structure which describes a connection between edges or lanes.
std::vector< double > getTimes(SUMOTime cycleDuration) const
Returns the times at which the signal switches.
int getMaxIndex()
Returns the maximum index controlled by this traffic light.
const std::string & getID() const
Returns the id.
NBNode * getFromNode() const
Returns the origin node of the edge.
int getFromLane() const
returns the from-lane
bool forbids(const NBEdge *const possProhibitorFrom, const NBEdge *const possProhibitorTo, const NBEdge *const possProhibitedFrom, const NBEdge *const possProhibitedTo, bool regardNonSignalisedLowerPriority, bool sameNodeOnly=false) const
Returns the information whether "prohibited" flow must let "prohibitor" flow pass.
bool addToSignalGroup(const std::string &groupid, const NBConnection &connection)
Adds a connection to a signal group.
The base class for traffic light logic definitions.
NBLoadedTLDef(const NBEdgeCont &ec, const std::string &id, const std::vector< NBNode * > &junctions, SUMOTime offset, TrafficLightType type)
Constructor.
SignalGroup * findGroup(NBEdge *from, NBEdge *to) const
Returns the signal group which is responsible for the given connection.
const std::string & getID() const
@ TLCOLOR_GREEN
Signal shows green.