59 if (oc.
isSet(
"tls.half-offset")) {
65 if (oc.
isSet(
"tls.quarter-offset")) {
66 std::vector<std::string> ids = oc.
getStringVector(
"tls.quarter-offset");
80 for (Program2Def::const_iterator it_prog = programs.begin(); it_prog != programs.end(); it_prog++) {
81 idS.
avoid(it_prog->first);
143 for (Logics::iterator it = logics.begin(); it != logics.end(); it++) {
148 if (oc.
getBool(
"tls.group-signals")) {
152 if (lDef ==
nullptr) {
154 if (logic !=
nullptr) {
158 node->removeTrafficLight(def);
159 node->addTrafficLight(lDef);
165 if (lDef !=
nullptr) {
169 }
else if (oc.
getBool(
"tls.ungroup-signals")) {
173 if (lDef !=
nullptr) {
186 return std::pair<int, int>((
int)
myComputed.size(), numPrograms);
195 const std::string&
id = def->
getID();
199 if (built ==
nullptr) {
200 WRITE_WARNING(
"Could not build program '" + programID +
"' for traffic light '" +
id +
"'");
224 for (Definitions::iterator it = definitions.begin(); it != definitions.end(); it++) {
229 for (Logics::iterator it = logics.begin(); it != logics.end(); it++) {
233 for (std::set<NBTrafficLightDefinition*>::iterator it =
myExtracted.begin(); it !=
myExtracted.end(); it++) {
244 for (Definitions::iterator it = definitions.begin(); it != definitions.end(); it++) {
245 (*it)->remapRemoved(removed, incoming, outgoing);
252 NBEdge* by,
int byLane,
bool incoming) {
254 for (Definitions::iterator it = definitions.begin(); it != definitions.end(); it++) {
255 (*it)->replaceRemoved(removed, removedLane, by, byLane, incoming);
265 Program2Def::const_iterator i2 = programs.find(programID);
266 if (i2 != programs.end()) {
286 Id2Logics::const_iterator i =
myComputed.find(
id);
289 Program2Logic::const_iterator i2 = programs.find(programID);
290 if (i2 != programs.end()) {
302 for (Definitions::iterator it = definitions.begin(); it != definitions.end(); it++) {
303 (*it)->setParticipantsInformation();
308 for (Definitions::iterator it = definitions.begin(); it != definitions.end(); it++) {
309 (*it)->setTLControllingInformation();
312 for (std::map<std::string, NBNode*>::const_iterator it = nc.
begin(); it != nc.
end(); it ++) {
329 std::map<NBEdge*, std::string> defaultSignalIDs;
330 for (
const NBConnection& con : def->getControlledLinks()) {
331 const NBEdge::Connection& c = con.getFrom()->getConnection(con.getFromLane(), con.getTo(), con.getToLane());
333 defaultSignalIDs[con.getFrom()] = c.
getParameter(
"signalID");
338 for (
const NBConnection& con : def->getControlledLinks()) {
339 const NBEdge::Connection& c = con.getFrom()->getConnection(con.getFromLane(), con.getTo(), con.getToLane());
340 if (!c.
knowsParameter(
"signalID") && defaultSignalIDs.count(con.getFrom()) != 0) {
341 WRITE_WARNINGF(
"Guessing signalID for link index % at traffic light '%'.", con.getTLIndex(), def->getID());
342 def->setParameter(
"linkSignalID:" +
toString(con.getTLIndex()), defaultSignalIDs[con.getFrom()]);
352 for (Id2Logics::const_iterator it_id =
myComputed.begin(); it_id !=
myComputed.end(); it_id++) {
354 for (Program2Logic::const_iterator it_prog = programs.begin(); it_prog != programs.end(); it_prog++) {
355 result.push_back(it_prog->second);
367 for (Program2Def::const_iterator it_prog = programs.begin(); it_prog != programs.end(); it_prog++) {
368 result.push_back(it_prog->second);
#define WRITE_WARNINGF(...)
#define WRITE_WARNING(msg)
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::string getNext()
Returns the next id.
void avoid(const std::string &id)
make sure that the given id is never supplied
Storage for edges, including some functionality operating on multiple edges.
void clearControllingTLInformation() const
Clears information about controlling traffic lights for all connenections of all edges.
The representation of a single edge during network building.
A loaded (complete) traffic light logic.
bool usingSignalGroups() const
whether this definition uses signal group (multiple connections with the same link index)
void ungroupSignals()
let all connections use a distinct link index
void groupSignals()
let connections with the same state use the same link index
Container for nodes during the netbuilding process.
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
Represents a single node (junction) during network building.
bool setCrossingTLIndices(const std::string &tlID, int startIndex)
SumoXMLNodeType getType() const
Returns the type of this node.
void removeTrafficLight(NBTrafficLightDefinition *tlDef)
Removes the given traffic light from this node.
A traffic light logics which must be computed (only nodes/edges are given)
void setTLControllingInformation() const
Informs edges about being controlled by a tls.
The base class for traffic light logic definitions.
const NBConnectionVector & getControlledLinks() const
returns the controlled links (depends on previous call to collectLinks)
const std::string & getProgramID() const
Returns the ProgramID.
virtual void setProgramID(const std::string &programID)
Sets the programID.
const std::vector< NBNode * > & getNodes() const
Returns the list of controlled nodes.
NBTrafficLightLogic * compute(OptionsCont &oc)
Computes the traffic light logic.
virtual void setParticipantsInformation()
Builds the list of participating nodes/edges/links.
void replaceRemoved(NBEdge *removed, int removedLane, NBEdge *by, int byLane, bool incoming)
Replaces occurences of the removed edge/lane in all definitions by the given edge.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void setOpenDriveSignalParameters()
set OpenDRIVE signal reference parameters after all link indices are known
std::vector< NBTrafficLightLogic * > getComputed() const
Returns a list of all computed logics.
std::map< std::string, NBTrafficLightDefinition * > Program2Def
std::set< std::string > myHalfOffsetTLS
List of tls which shall have an offset of T/2.
static const Program2Def EmptyDefinitions
std::vector< NBTrafficLightLogic * > Logics
std::vector< NBTrafficLightDefinition * > Definitions
Returns a list of all definitions (convenience for easier iteration)
bool removeProgram(const std::string id, const std::string programID, bool del=true)
Removes a program of a logic definition from the dictionary.
bool computeSingleLogic(OptionsCont &oc, NBTrafficLightDefinition *def)
Computes a specific traffic light logic (using by NETEDIT)
void clear()
Destroys all stored definitions and logics.
const std::map< std::string, NBTrafficLightDefinition * > & getPrograms(const std::string &id) const
Returns all programs for the given tl-id.
void remapRemoved(NBEdge *removed, const EdgeVector &incoming, const EdgeVector &outgoing)
Replaces occurences of the removed edge in incoming/outgoing edges of all definitions.
Definitions getDefinitions() const
std::set< std::string > myQuarterOffsetTLS
List of tls which shall have an offset of T/2.
Id2Logics myComputed
The container for previously computed tl-logics.
NBTrafficLightLogic * getLogic(const std::string &id, const std::string &programID) const
Returns the computed logic for the given name.
Id2Defs myDefinitions
The container for tl-ids to their definitions.
std::pair< int, int > computeLogics(OptionsCont &oc)
Computes the traffic light logics using the stored definitions and stores the results.
bool removeFully(const std::string id)
Removes a logic definition (and all programs) from the dictionary.
NBTrafficLightLogicCont()
Constructor.
std::map< std::string, NBTrafficLightLogic * > Program2Logic
Definition of internal the container types.
~NBTrafficLightLogicCont()
Destructor.
bool insert(NBTrafficLightDefinition *logic, bool forceInsert=false)
Adds a logic definition to the dictionary.
NBTrafficLightDefinition * getDefinition(const std::string &id, const std::string &programID) const
Returns the named definition.
void extract(NBTrafficLightDefinition *definition)
Extracts a traffic light definition from myDefinitions but keeps it in myExtracted for eventual * del...
void setTLControllingInformation(const NBEdgeCont &ec, const NBNodeCont &nc)
Informs the edges about being controlled by a tls.
std::set< NBTrafficLightDefinition * > myExtracted
The container for extracted definitions.
A SUMO-compliant built logic for a traffic light.
SUMOTime getDuration() const
Returns the duration of the complete cycle.
void setOffset(SUMOTime offset)
Sets the offset of this tls.
const std::string & getID() const
Returns the id.
A storage for options typed value containers)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
bool knowsParameter(const std::string &key) const
Returns whether the parameter is known.
A structure which describes a connection between edges or lanes.