NBLoadedTLDef Class Reference

#include <NBLoadedTLDef.h>

Inheritance diagram for NBLoadedTLDef:

NBTrafficLightDefinition Named

Detailed Description

A loaded (complete) traffic light logic.

Definition at line 47 of file NBLoadedTLDef.h.


Public Types

typedef std::map< std::string,
SignalGroup * > 
SignalGroupCont
 Definition of the container for signal groups.
enum  TLColor {
  TLCOLOR_RED, TLCOLOR_YELLOW, TLCOLOR_REDYELLOW, TLCOLOR_GREEN,
  TLCOLOR_BLINK
}
 An enumeration of possible tl-signal states. More...

Public Member Functions

void addControlledInnerEdges (const std::vector< std::string > &edges) throw ()
 Adds the given ids into the list of edges not controlled by the tls.
void addSignalGroup (const std::string &id) throw ()
 Adds a signal group.
void addSignalGroupPhaseBegin (const std::string &groupid, SUMOTime time, TLColor color) throw ()
 Sets the information about the begin of a phase.
bool addToSignalGroup (const std::string &groupid, const NBConnectionVector &connections) throw ()
 Adds a list of connections to a signal group.
bool addToSignalGroup (const std::string &groupid, const NBConnection &connection) throw ()
 Adds a connection to a signal group.
NBTrafficLightLogiccompute (const NBEdgeCont &ec, OptionsCont &oc) throw ()
 Computes the traffic light logic.
SignalGroupfindGroup (NBEdge *from, NBEdge *to) const throw ()
 Returns the signal group which is responsible for the given connection.
bool foes (const NBEdge *const from1, const NBEdge *const to1, const NBEdge *const from2, const NBEdge *const to2) const throw ()
 Returns the information whether the given flows cross.
bool forbids (const NBEdge *const possProhibitorFrom, const NBEdge *const possProhibitorTo, const NBEdge *const possProhibitedFrom, const NBEdge *const possProhibitedTo, bool regardNonSignalisedLowerPriority) const throw ()
 Returns the information whether "prohibited" flow must let "prohibitor" flow pass.
const std::string & getID () const throw ()
 Returns the id.
const EdgeVectorgetIncomingEdges () const throw ()
 Returns the list of incoming edges (must be build first).
bool isLeftMover (const NBEdge *const from, const NBEdge *const to) const throw ()
 returns the information whether the given link is a left-mover
bool mustBrake (const NBEdge *const possProhibitedFrom, const NBEdge *const possProhibitedTo, const NBEdge *const possProhibitorFrom, const NBEdge *const possProhibitorTo, bool regardNonSignalisedLowerPriority) const throw ()
 Returns the information whether the described flow must let any other flow pass.
bool mustBrake (const NBConnection &possProhibited, const NBConnection &possProhibitor, bool regardNonSignalisedLowerPriority) const throw ()
 Returns the information whether the described flow must let the other flow pass.
bool mustBrake (const NBEdge *const from, const NBEdge *const to) const throw ()
 Returns the information whether the described flow must let any other flow pass.
 NBLoadedTLDef (const std::string &id) throw ()
 Constructor.
 NBLoadedTLDef (const std::string &id, NBNode *junction) throw ()
 Constructor.
 NBLoadedTLDef (const std::string &id, const std::vector< NBNode * > &junctions) throw ()
 Constructor.
void setCycleDuration (unsigned int cycleDur) throw ()
 Sets the duration of a cycle.
virtual void setParticipantsInformation () throw ()
 Builds the list of participating nodes/edges/links.
void setSignalYellowTimes (const std::string &groupid, SUMOTime tRedYellow, SUMOTime tYellow) throw ()
 Sets the times the light is yellow or red/yellow.
 ~NBLoadedTLDef () throw ()
 Destructor.
Access to controlled nodes
void addNode (NBNode *node) throw ()
 Adds a node to the traffic light logic.
const std::vector< NBNode * > & getNodes () const throw ()
 Returns the list of controlled nodes.
void removeNode (NBNode *node) throw ()
 Removes the given node from the list of controlled nodes.
Public methods from NBTrafficLightDefinition-interface
void remapRemoved (NBEdge *removed, const EdgeVector &incoming, const EdgeVector &outgoing) throw ()
 Replaces occurences of the removed edge in incoming/outgoing edges of all definitions.
void setTLControllingInformation (const NBEdgeCont &ec) const throw ()
 Informs edges about being controlled by a tls.

Protected Member Functions

void collectEdges () throw ()
 Build the list of participating edges.
unsigned int computeBrakingTime (SUMOReal minDecel) const throw ()
 Computes the time vehicles may need to brake.
std::pair< unsigned int,
unsigned int > 
getSizes () const throw ()
 Returns a pair of <number participating lanes, number participating links>.
Protected methods from NBTrafficLightDefinition-interface
void collectLinks () throw (ProcessError)
 Collects the links participating in this traffic light
Exceptions:
ProcessError If a link could not be found.

void collectNodes () throw ()
 Collects the nodes participating in this traffic light.
bool mustBrake (const NBEdgeCont &ec, const NBConnection &possProhibited, const std::string &state, unsigned int strmpos) const throw ()
 Returns the information whether a connection must brake, given a phase.
NBTrafficLightLogicmyCompute (const NBEdgeCont &ec, unsigned int brakingTime) throw ()
 Computes the traffic light logic finally in dependence to the type.
void replaceRemoved (NBEdge *removed, int removedLane, NBEdge *by, int byLane) throw ()
 Replaces a removed edge/lane.

Protected Attributes

std::vector< std::string > myControlledInnerEdges
 List of inner edges that shall be controlled, though.
NBConnectionVector myControlledLinks
 The list of controlled links.
std::vector< NBNode * > myControlledNodes
 The container with participating nodes.
EdgeVector myEdgesWithin
 The list of edges within the area controlled by the tls.
std::string myID
 The name of the object.
EdgeVector myIncomingEdges
 The list of incoming edges.

Private Member Functions

std::string buildPhaseState (const NBEdgeCont &ec, unsigned int time) const throw ()
 Builds the phase for a given time.

Private Attributes

unsigned int myCycleDuration
 The duration of a single cycle.
SignalGroupCont mySignalGroups
 Controlled signal groups.

Data Structures

class  SignalGroup
 A single signal group, may control several connections. More...

Member Typedef Documentation

typedef std::map<std::string, SignalGroup*> NBLoadedTLDef::SignalGroupCont

Definition of the container for signal groups.

Definition at line 202 of file NBLoadedTLDef.h.


Member Enumeration Documentation

An enumeration of possible tl-signal states.

Enumerator:
TLCOLOR_RED  Signal shows red.
TLCOLOR_YELLOW  Signal shows yellow.
TLCOLOR_REDYELLOW  Signal shows red/yellow (unused).
TLCOLOR_GREEN  Signal shows green.
TLCOLOR_BLINK  Signal is blinking yellow.

Definition at line 76 of file NBTrafficLightDefinition.h.

00076                  {
00078         TLCOLOR_RED,
00080         TLCOLOR_YELLOW,
00082         TLCOLOR_REDYELLOW,
00084         TLCOLOR_GREEN,
00086         TLCOLOR_BLINK
00087     };


Constructor & Destructor Documentation

NBLoadedTLDef::NBLoadedTLDef ( const std::string &  id,
const std::vector< NBNode * > &  junctions 
) throw ()

Constructor.

Parameters:
[in] id The id of the tls
[in] junctions Junctions controlled by this tls

Definition at line 263 of file NBLoadedTLDef.cpp.

00265         : NBTrafficLightDefinition(id, junctions) {}

NBLoadedTLDef::NBLoadedTLDef ( const std::string &  id,
NBNode junction 
) throw ()

Constructor.

Parameters:
[in] id The id of the tls
[in] junction The junction controlled by this tls

Definition at line 268 of file NBLoadedTLDef.cpp.

00269         : NBTrafficLightDefinition(id, junction) {}

NBLoadedTLDef::NBLoadedTLDef ( const std::string &  id  )  throw ()

Constructor.

Parameters:
[in] id The id of the tls

Definition at line 272 of file NBLoadedTLDef.cpp.

00273         : NBTrafficLightDefinition(id) {}

NBLoadedTLDef::~NBLoadedTLDef (  )  throw ()

Destructor.

Definition at line 276 of file NBLoadedTLDef.cpp.

References mySignalGroups.

00276                                       {
00277     for (SignalGroupCont::iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); ++i) {
00278         delete(*i).second;
00279     }
00280 }


Member Function Documentation

void NBTrafficLightDefinition::addControlledInnerEdges ( const std::vector< std::string > &  edges  )  throw () [inherited]

Adds the given ids into the list of edges not controlled by the tls.

Parameters:
[in] edges The list of edge ids to add the inner edges to

Definition at line 368 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledInnerEdges.

Referenced by NIXMLNodesHandler::processTrafficLightDefinitions().

00368                                                                                            {
00369     copy(edges.begin(), edges.end(), back_inserter(myControlledInnerEdges));
00370 }

void NBTrafficLightDefinition::addNode ( NBNode node  )  throw () [inherited]

Adds a node to the traffic light logic.

Parameters:
[in] node A further node that shall be controlled by the tls

Definition at line 348 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledNodes.

Referenced by addToSignalGroup(), and NIXMLNodesHandler::processTrafficLightDefinitions().

00348                                                       {
00349     if (std::find(myControlledNodes.begin(), myControlledNodes.end(), node)==myControlledNodes.end()) {
00350         myControlledNodes.push_back(node);
00351         std::sort(myControlledNodes.begin(), myControlledNodes.end(), NBNode::nodes_by_id_sorter());
00352         node->addTrafficLight(this);
00353     }
00354 }

void NBLoadedTLDef::addSignalGroup ( const std::string &  id  )  throw ()

Adds a signal group.

Parameters:
[in] id The id of the signal group

Definition at line 538 of file NBLoadedTLDef.cpp.

References mySignalGroups.

Referenced by NIVissimTL::NIVissimTLSignalGroup::addTo(), and NIVisumTL::build().

00538                                                          {
00539     assert(mySignalGroups.find(id)==mySignalGroups.end());
00540     mySignalGroups[id] = new SignalGroup(id);
00541 }

void NBLoadedTLDef::addSignalGroupPhaseBegin ( const std::string &  groupid,
SUMOTime  time,
TLColor  color 
) throw ()

Sets the information about the begin of a phase.

Parameters:
[in] groupid The id of the signal group to add the phase to
[in] time The time the phase starts at
[in] color The color of the signal during this phase

Definition at line 545 of file NBLoadedTLDef.cpp.

References mySignalGroups.

Referenced by NIVissimTL::NIVissimTLSignalGroup::addTo(), and NIVisumTL::build().

00546                                                                {
00547     assert(mySignalGroups.find(groupid)!=mySignalGroups.end());
00548     mySignalGroups[groupid]->addPhaseBegin(time, color);
00549 }

bool NBLoadedTLDef::addToSignalGroup ( const std::string &  groupid,
const NBConnectionVector connections 
) throw ()

Adds a list of connections to a signal group.

Parameters:
[in] groupid The id of the signal group to add the connections to
[in] connections The connections to add

Definition at line 527 of file NBLoadedTLDef.cpp.

References addToSignalGroup().

00528                                                                                {
00529     bool ok = true;
00530     for (NBConnectionVector::const_iterator i=connections.begin(); i!=connections.end(); i++) {
00531         ok &= addToSignalGroup(groupid, *i);
00532     }
00533     return ok;
00534 }

bool NBLoadedTLDef::addToSignalGroup ( const std::string &  groupid,
const NBConnection connection 
) throw ()

Adds a connection to a signal group.

Parameters:
[in] groupid The id of the signal group to add the connection to
[in] connection The connection to add

Definition at line 506 of file NBLoadedTLDef.cpp.

References NBTrafficLightDefinition::addNode(), NBNode::addTrafficLight(), and mySignalGroups.

Referenced by NIVissimTL::NIVissimTLSignal::addTo(), addToSignalGroup(), and NIVisumTL::build().

00507                                                                         {
00508     if (mySignalGroups.find(groupid)==mySignalGroups.end()) {
00509         return false;
00510     }
00511     mySignalGroups[groupid]->addConnection(connection);
00512     NBNode *n1 = connection.getFrom()->getToNode();
00513     if (n1!=0) {
00514         addNode(n1);
00515         n1->addTrafficLight(this);
00516     }
00517     NBNode *n2 = connection.getTo()->getFromNode();
00518     if (n2!=0) {
00519         addNode(n2);
00520         n2->addTrafficLight(this);
00521     }
00522     return true;
00523 }

std::string NBLoadedTLDef::buildPhaseState ( const NBEdgeCont ec,
unsigned int  time 
) const throw () [private]

Builds the phase for a given time.

Parameters:
[in] ec The edge control to use
[in] time The time to build the phase for
Returns:
The phase of this tls for the given time

Definition at line 364 of file NBLoadedTLDef.cpp.

References NBConnection::check(), NBLoadedTLDef::SignalGroup::getConnection(), NBLoadedTLDef::SignalGroup::getLinkNo(), NBLoadedTLDef::SignalGroup::hasYellow(), NBLoadedTLDef::SignalGroup::mayDrive(), mustBrake(), and mySignalGroups.

Referenced by myCompute().

00364                                                                                     {
00365     unsigned int pos = 0;
00366     std::string state;
00367     // set the green and yellow information first;
00368     //  the information whether other have to break needs those masks
00369     //  completely filled
00370     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00371         SignalGroup *group = (*i).second;
00372         unsigned int linkNo = group->getLinkNo();
00373         bool mayDrive = group->mayDrive(time);
00374         bool hasYellow = group->hasYellow(time);
00375         char c = 'r';
00376         if (mayDrive) {
00377             c = 'g';
00378         }
00379         if (hasYellow) {
00380             c = 'y';
00381         }
00382         for (unsigned int j=0; j<linkNo; j++) {
00383             const NBConnection &conn = group->getConnection(j);
00384             NBConnection assConn(conn);
00385             // assert that the connection really exists
00386             if (assConn.check(ec)) {
00387                 state = state + c;
00388                 ++pos;
00389             }
00390         }
00391     }
00392     // set the braking mask
00393     pos = 0;
00394     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00395         SignalGroup *group = (*i).second;
00396         unsigned int linkNo = group->getLinkNo();
00397         for (unsigned int j=0; j<linkNo; j++) {
00398             const NBConnection &conn = group->getConnection(j);
00399             NBConnection assConn(conn);
00400             if (assConn.check(ec)) {
00401                 if (!mustBrake(ec, assConn, state, pos)) {
00402                     if (state[pos]=='g') {
00403                         state[pos] = 'G';
00404                     }
00405                     if (state[pos]=='y') {
00406                         state[pos] = 'Y';
00407                     }
00408                 }
00409                 pos++;
00410             }
00411         }
00412     }
00413     return state;
00414 }

void NBTrafficLightDefinition::collectEdges (  )  throw () [protected, inherited]

Build the list of participating edges.

Definition at line 121 of file NBTrafficLightDefinition.cpp.

References NBEdge::getID(), NBTrafficLightDefinition::myControlledInnerEdges, NBTrafficLightDefinition::myControlledNodes, NBTrafficLightDefinition::myEdgesWithin, and NBTrafficLightDefinition::myIncomingEdges.

Referenced by NBTrafficLightDefinition::setParticipantsInformation(), and NBOwnTLDef::setParticipantsInformation().

00121                                                {
00122     EdgeVector myOutgoing;
00123     // collect the edges from the participating nodes
00124     for (std::vector<NBNode*>::iterator i=myControlledNodes.begin(); i!=myControlledNodes.end(); i++) {
00125         const EdgeVector &incoming = (*i)->getIncomingEdges();
00126         copy(incoming.begin(), incoming.end(), back_inserter(myIncomingEdges));
00127         const EdgeVector &outgoing = (*i)->getOutgoingEdges();
00128         copy(outgoing.begin(), outgoing.end(), back_inserter(myOutgoing));
00129     }
00130     // check which of the edges are completely within the junction
00131     //  remove these edges from the list of incoming edges
00132     //  add them to the list of edges lying within the node
00133     for (EdgeVector::iterator j=myIncomingEdges.begin(); j!=myIncomingEdges.end();) {
00134         NBEdge *edge = *j;
00135         // an edge lies within the logic if it is outgoing as well as incoming
00136         EdgeVector::iterator k = find(myOutgoing.begin(), myOutgoing.end(), edge);
00137         if (k!=myOutgoing.end()) {
00138             if (find(myControlledInnerEdges.begin(), myControlledInnerEdges.end(), edge->getID())==myControlledInnerEdges.end()) {
00139                 myEdgesWithin.push_back(edge);
00140                 (*j)->setIsInnerEdge();
00141                 j = myIncomingEdges.erase(j);
00142                 continue;
00143             }
00144         }
00145         ++j;
00146     }
00147 }

void NBLoadedTLDef::collectLinks (  )  throw (ProcessError) [protected, virtual]

Collects the links participating in this traffic light

Exceptions:
ProcessError If a link could not be found.

See also:
NBTrafficLightDefinition::collectLinks

Reimplemented from NBTrafficLightDefinition.

Definition at line 476 of file NBLoadedTLDef.cpp.

References NBEdge::getConnectionsFromLane(), NBEdge::getNoLanes(), NBTrafficLightDefinition::myControlledLinks, NBTrafficLightDefinition::myIncomingEdges, NBEdge::Connection::toEdge, and NBEdge::Connection::toLane.

00476                                                 {
00477     // build the list of links which are controled by the traffic light
00478     for (EdgeVector::iterator i=myIncomingEdges.begin(); i!=myIncomingEdges.end(); i++) {
00479         NBEdge *incoming = *i;
00480         unsigned int noLanes = incoming->getNoLanes();
00481         for (unsigned int j=0; j<noLanes; j++) {
00482             std::vector<NBEdge::Connection> elv = incoming->getConnectionsFromLane(j);
00483             for (std::vector<NBEdge::Connection>::iterator k=elv.begin(); k!=elv.end(); k++) {
00484                 NBEdge::Connection el = *k;
00485                 if (el.toEdge!=0) {
00486                     myControlledLinks.push_back(NBConnection(incoming, j, el.toEdge, el.toLane));
00487                 }
00488             }
00489         }
00490     }
00491 }

void NBLoadedTLDef::collectNodes (  )  throw () [protected]

Collects the nodes participating in this traffic light.

See also:
NBTrafficLightDefinition::collectNodes

Definition at line 459 of file NBLoadedTLDef.cpp.

References NBLoadedTLDef::SignalGroup::getConnection(), NBConnection::getFrom(), NBLoadedTLDef::SignalGroup::getLinkNo(), NBEdge::getToNode(), NBTrafficLightDefinition::myControlledNodes, and mySignalGroups.

00459                                     {
00460     SignalGroupCont::const_iterator m;
00461     for (m=mySignalGroups.begin(); m!=mySignalGroups.end(); m++) {
00462         SignalGroup *group = (*m).second;
00463         unsigned int linkNo = group->getLinkNo();
00464         for (unsigned int j=0; j<linkNo; j++) {
00465             const NBConnection &conn = group->getConnection(j);
00466             NBEdge *edge = conn.getFrom();
00467             NBNode *node = edge->getToNode();
00468             myControlledNodes.push_back(node);
00469         }
00470     }
00471     std::sort(myControlledNodes.begin(), myControlledNodes.end(), NBNode::nodes_by_id_sorter());
00472 }

NBTrafficLightLogic * NBTrafficLightDefinition::compute ( const NBEdgeCont ec,
OptionsCont oc 
) throw () [inherited]

Computes the traffic light logic.

Does some initialisation at first, then calls myCompute to finally build the tl-logic

Parameters:
[in] ec The edge container in order to retrieve edge information
[in] oc The options container holding options needed during the building
Returns:
The built logic (may be 0)

Definition at line 88 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::computeBrakingTime(), Named::getID(), NBTrafficLightDefinition::myCompute(), NBTrafficLightDefinition::myIncomingEdges, and WRITE_WARNING.

Referenced by NBTrafficLightLogicCont::computeLogics().

00088                                                                                {
00089     // it is not really a traffic light if no incoming edge exists
00090     if (myIncomingEdges.size()==0) {
00091         WRITE_WARNING("The traffic light '" + getID() + "' has no incoming edges; it will not be build.");
00092         return 0;
00093     }
00094     // compute the time needed to brake
00095     unsigned int brakingTime = computeBrakingTime(oc.getFloat("min-decel"));
00096     // perform the computation depending on whether the traffic light
00097     //  definition was loaded or shall be computed new completely
00098     if (oc.isSet("traffic-light-yellow")) {
00099         brakingTime = oc.getInt("traffic-light-yellow");
00100     }
00101     return myCompute(ec, brakingTime);
00102 }

unsigned int NBTrafficLightDefinition::computeBrakingTime ( SUMOReal  minDecel  )  const throw () [protected, inherited]

Computes the time vehicles may need to brake.

This time depends on the maximum speed allowed on incoming junctions. It is computed as max_speed_allowed / minimum_vehicle_decleration

Definition at line 106 of file NBTrafficLightDefinition.cpp.

References NBContHelper::maxSpeed(), NBTrafficLightDefinition::myIncomingEdges, and SUMOReal.

Referenced by NBTrafficLightDefinition::compute().

00106                                                                             {
00107     SUMOReal vmax = NBContHelper::maxSpeed(myIncomingEdges);
00108     return (unsigned int)(vmax / minDecel);
00109 }

NBLoadedTLDef::SignalGroup * NBLoadedTLDef::findGroup ( NBEdge from,
NBEdge to 
) const throw ()

Returns the signal group which is responsible for the given connection.

Parameters:
[in] from The connection's start edge
[in] to The connection's end edge
Returns:
The signal group which controls the given connection

Definition at line 495 of file NBLoadedTLDef.cpp.

References mySignalGroups.

00495                                                                {
00496     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00497         if ((*i).second->containsConnection(from, to)) {
00498             return (*i).second;
00499         }
00500     }
00501     return 0;
00502 }

bool NBTrafficLightDefinition::foes ( const NBEdge *const   from1,
const NBEdge *const   to1,
const NBEdge *const   from2,
const NBEdge *const   to2 
) const throw () [inherited]

Returns the information whether the given flows cross.

Parameters:
[in] from1 The starting edge of the first stream
[in] to1 The ending edge of the first stream
[in] from2 The starting edge of the second stream
[in] to2 The ending edge of the second stream
Returns:
Whether both stream are foes (cross)

Definition at line 325 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledNodes.

Referenced by NBOwnTLDef::computeUnblockedWeightedStreamNumber().

00326                                                                                                    {
00327     if (to1==0||to2==0) {
00328         return false;
00329     }
00330     // retrieve both nodes (it is possible that a connection
00331     std::vector<NBNode*>::const_iterator incoming =
00332         find_if(myControlledNodes.begin(), myControlledNodes.end(),
00333                 NBContHelper::node_with_incoming_finder(from1));
00334     std::vector<NBNode*>::const_iterator outgoing =
00335         find_if(myControlledNodes.begin(), myControlledNodes.end(),
00336                 NBContHelper::node_with_outgoing_finder(to1));
00337     assert(incoming!=myControlledNodes.end());
00338     NBNode *incnode = *incoming;
00339     NBNode *outnode = *outgoing;
00340     if (incnode!=outnode) {
00341         return false;
00342     }
00343     return incnode->foes(from1, to1, from2, to2);
00344 }

bool NBTrafficLightDefinition::forbids ( const NBEdge *const   possProhibitorFrom,
const NBEdge *const   possProhibitorTo,
const NBEdge *const   possProhibitedFrom,
const NBEdge *const   possProhibitedTo,
bool  regardNonSignalisedLowerPriority 
) const throw () [inherited]

Returns the information whether "prohibited" flow must let "prohibitor" flow pass.

Parameters:
[in] possProhibitedFrom The maybe prohibited connection's begin
[in] possProhibitedTo The maybe prohibited connection's end
[in] possProhibitorFrom The maybe prohibiting connection's begin
[in] possProhibitorTo The maybe prohibiting connection's end
[in] regardNonSignalisedLowerPriority Whether the right of way rules without traffic lights shall be regarded
Returns:
Whether the second flow prohibits the first one
See also:
forbids

Definition at line 248 of file NBTrafficLightDefinition.cpp.

References NBNode::foes(), NBNode::forbids(), and NBTrafficLightDefinition::myControlledNodes.

Referenced by NBTrafficLightDefinition::mustBrake(), and NBOwnTLDef::myCompute().

00252                                                                                        {
00253     if (possProhibitorFrom==0||possProhibitorTo==0||possProhibitedFrom==0||possProhibitedTo==0) {
00254         return false;
00255     }
00256     // retrieve both nodes
00257     std::vector<NBNode*>::const_iterator incoming =
00258         find_if(myControlledNodes.begin(), myControlledNodes.end(), NBContHelper::node_with_incoming_finder(possProhibitorFrom));
00259     std::vector<NBNode*>::const_iterator outgoing =
00260         find_if(myControlledNodes.begin(), myControlledNodes.end(), NBContHelper::node_with_outgoing_finder(possProhibitedTo));
00261     assert(incoming!=myControlledNodes.end());
00262     NBNode *incnode = *incoming;
00263     NBNode *outnode = *outgoing;
00264     EdgeVector::const_iterator i;
00265     if (incnode!=outnode) {
00266         // the links are located at different nodes
00267         const EdgeVector &ev1 = possProhibitedTo->getConnectedEdges();
00268         // go through the following edge,
00269         //  check whether one of these connections is prohibited
00270         for (i=ev1.begin(); i!=ev1.end(); ++i) {
00271             std::vector<NBNode*>::const_iterator outgoing2 =
00272                 find_if(myControlledNodes.begin(), myControlledNodes.end(), NBContHelper::node_with_outgoing_finder(*i));
00273             if (outgoing2==myControlledNodes.end()) {
00274                 continue;
00275             }
00276             NBNode *outnode2 = *outgoing2;
00277             if (incnode!=outnode2) {
00278                 continue;
00279             }
00280             bool ret1 = incnode->foes(possProhibitorTo, *i,
00281                                       possProhibitedFrom, possProhibitedTo);
00282             bool ret2 = incnode->forbids(possProhibitorFrom, possProhibitorTo,
00283                                          possProhibitedTo, *i,
00284                                          regardNonSignalisedLowerPriority);
00285             bool ret = ret1||ret2;
00286             if (ret) {
00287                 return true;
00288             }
00289         }
00290 
00291         const EdgeVector &ev2 = possProhibitorTo->getConnectedEdges();
00292         // go through the following edge,
00293         //  check whether one of these connections is prohibited
00294         for (i=ev2.begin(); i!=ev2.end(); ++i) {
00295             std::vector<NBNode*>::const_iterator incoming2 =
00296                 find_if(myControlledNodes.begin(), myControlledNodes.end(), NBContHelper::node_with_incoming_finder(possProhibitorTo));
00297             if (incoming2==myControlledNodes.end()) {
00298                 continue;
00299             }
00300             NBNode *incnode2 = *incoming2;
00301             if (incnode2!=outnode) {
00302                 continue;
00303             }
00304             bool ret1 = incnode2->foes(possProhibitorTo, *i,
00305                                        possProhibitedFrom, possProhibitedTo);
00306             bool ret2 = incnode2->forbids(possProhibitorTo, *i,
00307                                           possProhibitedFrom, possProhibitedTo,
00308                                           regardNonSignalisedLowerPriority);
00309             bool ret = ret1||ret2;
00310             if (ret) {
00311                 return true;
00312             }
00313         }
00314         return false;
00315     }
00316     // both links are located at the same node
00317     //  check using this node's information
00318     return incnode->forbids(possProhibitorFrom, possProhibitorTo,
00319                             possProhibitedFrom, possProhibitedTo,
00320                             regardNonSignalisedLowerPriority);
00321 }

const std::string& Named::getID (  )  const throw () [inline, inherited]

Returns the id.

Returns:
The stored id

Definition at line 59 of file Named.h.

References Named::myID.

Referenced by RORouteDef_Alternatives::addAlternative(), MSRouteProbe::addRoute(), MSEmitter::MSEmitter_FileTriggeredChild::buildAndScheduleFlowVehicle(), MSCalibrator::MSCalibrator_FileTriggeredChild::buildAndScheduleFlowVehicle(), RORouteDef_Complete::buildCurrentRoute(), ODDistrictHandler::closeDistrict(), NBTrafficLightDefinition::collectLinks(), NBTrafficLightDefinition::compute(), GUIPointOfInterest::drawGL(), MSInductLoop::enterDetectorByMove(), MSVTypeProbe::execute(), MSNet::getBusStopID(), GUITriggeredRerouter::getMicrosimID(), GUIPointOfInterest::getMicrosimID(), GUILaneSpeedTrigger::getMicrosimID(), GUIInductLoop::MyWrapper::getMicrosimID(), GUIEmitter::getMicrosimID(), GUIBusStop::getMicrosimID(), GUI_E2_ZS_Collector::MyWrapper::getMicrosimID(), traci::TraCIServer::handlePoiDomain(), RORDLoader_SUMOBase::myCharacters(), NBOwnTLDef::myCompute(), myCompute(), MSTriggeredRerouter::myStartElement(), MSLaneSpeedTrigger::myStartElement(), MSEmitter::MSEmitter_FileTriggeredChild::myStartElement(), MSCalibrator::MSCalibrator_FileTriggeredChild::myStartElement(), NBLoadedTLDef::SignalGroup::patchTYellow(), TraCIServerAPI_Vehicle::processGet(), MSVehicle::replaceRoute(), MSVehicle::saveState(), NBOwnTLDef::setTLControllingInformation(), setTLControllingInformation(), RORDLoader_SUMOBase::startRoute(), GUIEmitter::GUIEmitterChild_UserTriggeredChild::wrappedExecute(), NBTrafficLightLogic::writeXML(), MSRouteProbe::writeXMLOutput(), MSInductLoop::writeXMLOutput(), MSE2Collector::writeXMLOutput(), and MSVehicle::~MSVehicle().

00059                                            {
00060         return myID;
00061     }

const EdgeVector & NBTrafficLightDefinition::getIncomingEdges (  )  const throw () [inherited]

Returns the list of incoming edges (must be build first).

Returns:
The edges which are incoming into the tls

Definition at line 374 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myIncomingEdges.

Referenced by NBOwnTLDef::myCompute().

00374                                                          {
00375     return myIncomingEdges;
00376 }

const std::vector<NBNode*>& NBTrafficLightDefinition::getNodes (  )  const throw () [inline, inherited]

Returns the list of controlled nodes.

Returns:
Controlled nodes

Definition at line 147 of file NBTrafficLightDefinition.h.

References NBTrafficLightDefinition::myControlledNodes.

00147                                                        {
00148         return myControlledNodes;
00149     }

std::pair< unsigned int, unsigned int > NBTrafficLightDefinition::getSizes (  )  const throw () [protected, inherited]

Returns a pair of <number participating lanes, number participating links>.

Returns:
The numbers of lanes and links controlled by this tls

Definition at line 180 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myIncomingEdges.

00180                                                  {
00181     unsigned int noLanes = 0;
00182     unsigned int noLinks = 0;
00183     for (EdgeVector::const_iterator i=myIncomingEdges.begin(); i!=myIncomingEdges.end(); i++) {
00184         unsigned int noLanesEdge = (*i)->getNoLanes();
00185         for (unsigned int j=0; j<noLanesEdge; j++) {
00186             assert((*i)->getConnectionsFromLane(j).size()!=0);
00187             noLinks += (unsigned int)(*i)->getConnectionsFromLane(j).size();
00188         }
00189         noLanes += noLanesEdge;
00190     }
00191     return std::pair<unsigned int, unsigned int>(noLanes, noLinks);
00192 }

bool NBTrafficLightDefinition::isLeftMover ( const NBEdge *const   from,
const NBEdge *const   to 
) const throw () [inherited]

returns the information whether the given link is a left-mover

Parameters:
[in] from The connection's start edge
[in] to The connection's end edge
Returns:
Whether the connection is a left-mover

Definition at line 196 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledNodes.

Referenced by NBOwnTLDef::myCompute().

00196                                                                                                      {
00197     // the destination edge may be unused
00198     if (to==0) {
00199         return false;
00200     }
00201     // get the node which is holding this connection
00202     std::vector<NBNode*>::const_iterator i =
00203         find_if(myControlledNodes.begin(), myControlledNodes.end(),
00204                 NBContHelper::node_with_incoming_finder(from));
00205     assert(i!=myControlledNodes.end());
00206     NBNode *node = *i;
00207     return node->isLeftMover(from, to);
00208 }

bool NBTrafficLightDefinition::mustBrake ( const NBEdge *const   possProhibitedFrom,
const NBEdge *const   possProhibitedTo,
const NBEdge *const   possProhibitorFrom,
const NBEdge *const   possProhibitorTo,
bool  regardNonSignalisedLowerPriority 
) const throw () [inherited]

Returns the information whether the described flow must let any other flow pass.

Parameters:
[in] possProhibitedFrom The maybe prohibited connection's begin
[in] possProhibitedTo The maybe prohibited connection's end
[in] possProhibitorFrom The maybe prohibiting connection's begin
[in] possProhibitorTo The maybe prohibiting connection's end
[in] regardNonSignalisedLowerPriority Whether the right of way rules without traffic lights shall be regarded
Returns:
Whether the second flow prohibits the first one
See also:
forbids

Definition at line 226 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::forbids().

00230                                                                                          {
00231     return forbids(possProhibitorFrom, possProhibitorTo,
00232                    possProhibitedFrom, possProhibitedTo,
00233                    regardNonSignalisedLowerPriority);
00234 }

bool NBTrafficLightDefinition::mustBrake ( const NBConnection possProhibited,
const NBConnection possProhibitor,
bool  regardNonSignalisedLowerPriority 
) const throw () [inherited]

Returns the information whether the described flow must let the other flow pass.

Parameters:
[in] possProhibited The maybe prohibited connection
[in] possProhibitor The maybe prohibiting connection
[in] regardNonSignalisedLowerPriority Whether the right of way rules without traffic lights shall be regarded
Returns:
Whether the second flow prohibits the first one
See also:
forbids

Definition at line 238 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::forbids().

00240                                                                                          {
00241     return forbids(possProhibitor.getFrom(), possProhibitor.getTo(),
00242                    possProhibited.getFrom(), possProhibited.getTo(),
00243                    regardNonSignalisedLowerPriority);
00244 }

bool NBTrafficLightDefinition::mustBrake ( const NBEdge *const   from,
const NBEdge *const   to 
) const throw () [inherited]

Returns the information whether the described flow must let any other flow pass.

If the from/to connection passes only one junction (from is incoming into same node as to outgoes from) the node is asked whether the flow must brake- Otherwise true is returned (recheck!) "from" must be an incoming edge into one of the participating nodes!

Parameters:
[in] from The connection's start edge
[in] to The connection's end edge
Returns:
Whether the described connection must brake (has higher priorised foes)

Definition at line 212 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledNodes.

Referenced by mustBrake().

00212                                                                                                     {
00213     std::vector<NBNode*>::const_iterator i =
00214         find_if(myControlledNodes.begin(), myControlledNodes.end(),
00215                 NBContHelper::node_with_incoming_finder(from));
00216     assert(i!=myControlledNodes.end());
00217     NBNode *node = *i;
00218     if (!node->hasOutgoing(to)) {
00219         return true; // !!!
00220     }
00221     return node->mustBrake(from, to, -1);
00222 }

bool NBLoadedTLDef::mustBrake ( const NBEdgeCont ec,
const NBConnection possProhibited,
const std::string &  state,
unsigned int  strmpos 
) const throw () [protected]

Returns the information whether a connection must brake, given a phase.

Parameters:
[in] ec The edge control to retrieve edges from
[in] possProhibited The connection to investigate
[in] state The state
[in] strmpos The index of this connection within the masks
Returns:
Whether the given connection must brake

Definition at line 418 of file NBLoadedTLDef.cpp.

References NBConnection::check(), NBLoadedTLDef::SignalGroup::getConnection(), NBConnection::getFrom(), NBLoadedTLDef::SignalGroup::getLinkNo(), NBTrafficLightDefinition::mustBrake(), and mySignalGroups.

Referenced by buildPhaseState().

00421                                                              {
00422     // check whether the stream has red
00423     if (state[strmpos]!='g'&&state[strmpos]!='G') {
00424         return true;
00425     }
00426 
00427     // check whether another stream which has green is a higher
00428     //  priorised foe to the given
00429     unsigned int pos = 0;
00430     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00431         SignalGroup *group = (*i).second;
00432         // get otherlinks that have green
00433         unsigned int linkNo = group->getLinkNo();
00434         for (unsigned int j=0; j<linkNo; j++) {
00435             // get the current connection (possible foe)
00436             const NBConnection &other = group->getConnection(j);
00437             NBConnection possProhibitor(other);
00438             // if the connction ist still valid ...
00439             if (possProhibitor.check(ec)) {
00440                 // ... do nothing if it starts at the same edge
00441                 if (possProhibited.getFrom()==possProhibitor.getFrom()) {
00442                     pos++;
00443                     continue;
00444                 }
00445                 if (state[pos]=='g'||state[pos]=='G') {
00446                     if (NBTrafficLightDefinition::mustBrake(possProhibited, possProhibitor, true)) {
00447                         return true;
00448                     }
00449                 }
00450                 pos++;
00451             }
00452         }
00453     }
00454     return false;
00455 }

NBTrafficLightLogic * NBLoadedTLDef::myCompute ( const NBEdgeCont ec,
unsigned int  brakingTime 
) throw () [protected, virtual]

Computes the traffic light logic finally in dependence to the type.

Parameters:
[in] ec The edge container
[in] brakingTime Duration a vehicle needs for braking in front of the tls
Returns:
The computed logic
See also:
NBTrafficLightDefinition::myCompute

Implements NBTrafficLightDefinition.

Definition at line 284 of file NBLoadedTLDef.cpp.

References NBTrafficLightLogic::addStep(), buildPhaseState(), MsgHandler::clear(), NBTrafficLightLogic::closeBuilding(), Named::getID(), OptionsCont::getOptions(), NBLoadedTLDef::SignalGroup::getTimes(), MsgHandler::getWarningInstance(), myCycleDuration, mySignalGroups, NBLoadedTLDef::SignalGroup::patchTYellow(), NBLoadedTLDef::SignalGroup::sortPhases(), and WRITE_WARNING.

00284                                                                                {
00285     MsgHandler::getWarningInstance()->clear(); // !!!
00286     NBLoadedTLDef::SignalGroupCont::const_iterator i;
00287     // compute the switching times
00288     std::set<SUMOReal> tmpSwitchTimes;
00289     for (i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00290         NBLoadedTLDef::SignalGroup *group = (*i).second;
00291         // needed later
00292         group->sortPhases();
00293         // patch the yellow time for this group
00294         if (OptionsCont::getOptions().getBool("patch-small-tyellow")) {
00295             group->patchTYellow(brakingTime);
00296         }
00297         // copy the now valid times into the container
00298         //  both the given red and green phases are added and also the
00299         //  yellow times
00300         DoubleVector gtimes = group->getTimes(myCycleDuration);
00301         for (DoubleVector::const_iterator k=gtimes.begin(); k!=gtimes.end(); k++) {
00302             tmpSwitchTimes.insert(*k);
00303         }
00304     }
00305     std::vector<SUMOReal> switchTimes;
00306     copy(tmpSwitchTimes.begin(), tmpSwitchTimes.end(), back_inserter(switchTimes));
00307     sort(switchTimes.begin(), switchTimes.end());
00308 
00309     // count the signals
00310     unsigned int noSignals = 0;
00311     for (i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00312         noSignals += (*i).second->getLinkNo();
00313     }
00314     // build the phases
00315     NBTrafficLightLogic *logic = new NBTrafficLightLogic(getID(), "0", noSignals);
00316     for (std::vector<SUMOReal>::iterator l=switchTimes.begin(); l!=switchTimes.end(); l++) {
00317         // compute the duration of the current phase
00318         unsigned int duration;
00319         if (l!=switchTimes.end()-1) {
00320             // get from the difference to the next switching time
00321             duration = (unsigned int)((*(l+1)) - (*l));
00322         } else {
00323             // get from the differenc to the first switching time
00324             duration = (unsigned int)(myCycleDuration - (*l) + *(switchTimes.begin())) ;
00325         }
00326         // no information about yellow times will be generated
00327         assert((*l)>=0);
00328         logic->addStep(duration, buildPhaseState(ec, (unsigned int)(*l)));
00329     }
00330     // check whether any warnings were printed
00331     if (MsgHandler::getWarningInstance()->wasInformed()) {
00332         WRITE_WARNING("During computation of traffic light '" + getID() + "'.");
00333     }
00334     logic->closeBuilding();
00335     return logic;
00336 }

void NBLoadedTLDef::remapRemoved ( NBEdge removed,
const EdgeVector incoming,
const EdgeVector outgoing 
) throw () [virtual]

Replaces occurences of the removed edge in incoming/outgoing edges of all definitions.

Parameters:
[in] removed The removed edge
[in] incoming The edges to use instead if an incoming edge was removed
[in] outgoing The edges to use instead if an outgoing edge was removed
See also:
NBTrafficLightDefinition::remapRemoved

Implements NBTrafficLightDefinition.

Definition at line 566 of file NBLoadedTLDef.cpp.

References NBLoadedTLDef::SignalGroup::containsIncoming(), NBLoadedTLDef::SignalGroup::containsOutgoing(), mySignalGroups, NBLoadedTLDef::SignalGroup::remapIncoming(), and NBLoadedTLDef::SignalGroup::remapOutgoing().

00568                                                                 {
00569     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00570         SignalGroup *group = (*i).second;
00571         if (group->containsIncoming(removed)) {
00572             group->remapIncoming(removed, incoming);
00573         }
00574         if (group->containsOutgoing(removed)) {
00575             group->remapOutgoing(removed, outgoing);
00576         }
00577     }
00578 }

void NBTrafficLightDefinition::removeNode ( NBNode node  )  throw () [inherited]

Removes the given node from the list of controlled nodes.

Parameters:
[in] node The node that shall not be controlled by the tls any more

Definition at line 358 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::myControlledNodes.

00358                                                          {
00359     std::vector<NBNode*>::iterator i = std::find(myControlledNodes.begin(), myControlledNodes.end(), node);
00360     if (i!=myControlledNodes.end()) {
00361         myControlledNodes.erase(i);
00362     }
00363     // !!! remove in node?
00364 }

void NBLoadedTLDef::replaceRemoved ( NBEdge removed,
int  removedLane,
NBEdge by,
int  byLane 
) throw () [protected, virtual]

Replaces a removed edge/lane.

Parameters:
[in] removed The edge to replace
[in] removedLane The lane of this edge to replace
[in] by The edge to insert instead
[in] byLane This edge's lane to insert instead
See also:
NBTrafficLightDefinition::replaceRemoved

Implements NBTrafficLightDefinition.

Definition at line 582 of file NBLoadedTLDef.cpp.

References NBLoadedTLDef::SignalGroup::containsIncoming(), NBLoadedTLDef::SignalGroup::containsOutgoing(), mySignalGroups, and NBLoadedTLDef::SignalGroup::remap().

00583                                                               {
00584     for (SignalGroupCont::const_iterator i=mySignalGroups.begin(); i!=mySignalGroups.end(); i++) {
00585         SignalGroup *group = (*i).second;
00586         if (group->containsIncoming(removed)||group->containsOutgoing(removed)) {
00587             group->remap(removed, removedLane, by, byLane);
00588         }
00589     }
00590 }

void NBLoadedTLDef::setCycleDuration ( unsigned int  cycleDur  )  throw ()

Sets the duration of a cycle.

Parameters:
[in] cycleDur The duration of the cycle

Definition at line 560 of file NBLoadedTLDef.cpp.

References myCycleDuration.

Referenced by NIVisumTL::build().

00560                                                              {
00561     myCycleDuration = cycleDur;
00562 }

void NBTrafficLightDefinition::setParticipantsInformation (  )  throw () [virtual, inherited]

Builds the list of participating nodes/edges/links.

Reimplemented in NBOwnTLDef.

Definition at line 113 of file NBTrafficLightDefinition.cpp.

References NBTrafficLightDefinition::collectEdges(), and NBTrafficLightDefinition::collectLinks().

00113                                                              {
00114     // collect the information about participating edges and links
00115     collectEdges();
00116     collectLinks();
00117 }

void NBLoadedTLDef::setSignalYellowTimes ( const std::string &  groupid,
SUMOTime  tRedYellow,
SUMOTime  tYellow 
) throw ()

Sets the times the light is yellow or red/yellow.

Parameters:
[in] groupid The id of the signal group to add the phase to
[in] tRedYellow The duration of redyellow
[in] tYellow The duration of yellow

Definition at line 552 of file NBLoadedTLDef.cpp.

References mySignalGroups.

Referenced by NIVissimTL::NIVissimTLSignalGroup::addTo(), and NIVisumTL::build().

00553                                                                                        {
00554     assert(mySignalGroups.find(groupid)!=mySignalGroups.end());
00555     mySignalGroups[groupid]->setYellowTimes(myTRedYellow, myTYellow);
00556 }

void NBLoadedTLDef::setTLControllingInformation ( const NBEdgeCont ec  )  const throw () [virtual]

Informs edges about being controlled by a tls.

Parameters:
[in] ec The container of edges
See also:
NBTrafficLightDefinition::setTLControllingInformation

Implements NBTrafficLightDefinition.

Definition at line 340 of file NBLoadedTLDef.cpp.

References NBLoadedTLDef::SignalGroup::getConnection(), NBConnection::getFrom(), NBConnection::getFromLane(), Named::getID(), NBLoadedTLDef::SignalGroup::getLinkNo(), NBEdge::getNoLanes(), NBConnection::getTo(), NBConnection::getToLane(), mySignalGroups, NBEdge::setControllingTLInformation(), and WRITE_WARNING.

00340                                                                              {
00341     // assign the links to the connections
00342     unsigned int pos = 0;
00343     for (SignalGroupCont::const_iterator m=mySignalGroups.begin(); m!=mySignalGroups.end(); m++) {
00344         SignalGroup *group = (*m).second;
00345         unsigned int linkNo = group->getLinkNo();
00346         for (unsigned int j=0; j<linkNo; j++) {
00347             const NBConnection &conn = group->getConnection(j);
00348             assert(conn.getFromLane()<0||(int) conn.getFrom()->getNoLanes()>conn.getFromLane());
00349             NBConnection tst(conn);
00350             if (tst.check(ec)) {
00351                 NBEdge *edge = conn.getFrom();
00352                 if (edge->setControllingTLInformation(conn.getFromLane(), conn.getTo(), conn.getToLane(), getID(), pos)) {
00353                     pos++;
00354                 }
00355             } else {
00356                 WRITE_WARNING("Could not set signal on connection (signal: " + getID() + ", group: " + group->getID()+ ")");
00357             }
00358         }
00359     }
00360 }


Field Documentation

std::vector<std::string> NBTrafficLightDefinition::myControlledInnerEdges [protected, inherited]

List of inner edges that shall be controlled, though.

Definition at line 315 of file NBTrafficLightDefinition.h.

Referenced by NBTrafficLightDefinition::addControlledInnerEdges(), and NBTrafficLightDefinition::collectEdges().

std::vector<NBNode*> NBTrafficLightDefinition::myControlledNodes [protected, inherited]

unsigned int NBLoadedTLDef::myCycleDuration [private]

The duration of a single cycle.

Definition at line 370 of file NBLoadedTLDef.h.

Referenced by myCompute(), and setCycleDuration().

The list of edges within the area controlled by the tls.

Definition at line 309 of file NBTrafficLightDefinition.h.

Referenced by NBTrafficLightDefinition::collectEdges().

std::string Named::myID [protected, inherited]


The documentation for this class was generated from the following files:

Generated on Wed May 5 00:06:51 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6