47#define DEFAULT_VEH_LENGTH_WITH_GAP (SUMOVTypeParameter::getDefault().length + SUMOVTypeParameter::getDefault().minGap)
49#define MESO_MIN_SPEED (0.05)
55#define DEBUG_COND (myEdge.isSelected())
56#define DEBUG_COND2(obj) ((obj != 0 && (obj)->isSelected()))
91 myDetectorData.push_back(data);
109 const double length,
const double speed,
111 const bool multiQueue,
121 const std::vector<MSLane*>& lanes = parent.
getLanes();
125 for (
MSLane*
const l : lanes) {
136 if (usableLanes == 0) {
142 const double distToEnd = parent.
getLength() - (idx + 1) * length;
143 if (next ==
nullptr || distToEnd < edgeType.
lookahead) {
146 if (edge->isTazConnector()) {
149 const std::vector<MSLane*>*
const allowed = parent.
allowedLanes(*edge);
150 assert(allowed !=
nullptr);
151 assert(allowed->size() > 0);
152 for (
MSLane*
const l : *allowed) {
153 std::vector<MSLane*>::const_iterator it = std::find(lanes.begin(), lanes.end(), l);
158 std::vector<int> reach(lanes.size(), 0);
159 for (
int i = 0; i < (int)lanes.size(); i++) {
160 for (
const MSLink*
const link : lanes[i]->getLinkCont()) {
161 if (&link->getLane()->getEdge() == edge) {
162 reach[i] |= 1 << link->getLane()->getIndex();
173 maxAllow &= ~minAllow;
175 WRITE_WARNINGF(
"Mismodelled capacity on edge '%'. Not all lanes are usable by vClass '%'. Use option --meso-lane-queue or add unused class to option --meso-ignore-lanes-by-vclass.",
181 initSegment(edgeType, parent, length * usableLanes);
186 if (dist + edge.
getLength() >= lookahead) {
190 std::vector<std::pair<double, int> >& previous = searched[std::make_pair(&edge, reach)];
191 for (
const std::pair<double, int>& p : previous) {
192 if (p.first <= dist && p.second >= depth) {
196 previous.push_back(std::make_pair(dist, depth));
197 const std::vector<MSLane*>& lanes = edge.
getLanes();
199 for (
int i = 0; i < (int)reach.size(); i++) {
205 if (succ->isTazConnector()) {
210 std::vector<int> succReach(reach.size(), 0);
211 for (
int i = 0; i < (int)reach.size(); i++) {
212 for (
int j = 0; j < (int)lanes.size(); j++) {
213 if ((reach[i] & (1 << j)) != 0) {
214 for (
const MSLink*
const link : lanes[j]->getLinkCont()) {
215 if (&link->getLane()->getEdge() == succ) {
217 succReach[i] |= 1 << link->getLane()->getIndex();
224 if (queues != usable) {
239 const double laneScale = capacity /
myLength;
279 myEdge(myDummyParent),
280 myNextSegment(nullptr), myLength(0), myIndex(0),
281 myTau_ff(0), myTau_fj(0), myTau_jf(0), myTau_jj(0),
283 myCheckMinorPenalty(false),
285 myJunctionControl(false),
295 myQueues[lane->getIndex()].setPermissions(lane->getPermissions());
325 return std::numeric_limits<double>::max();
327#ifdef DEBUG_JAMTHRESHOLD
339 if (queueIndex == -1) {
344 assert(queueIndex < (
int)
myQueues.size());
345 myQueues[queueIndex].addDetector(data);
369 if (queueIndex == -1) {
371 SUMOTime earliestExitTime = currentTime;
372 for (std::vector<MEVehicle*>::const_reverse_iterator i = q.getVehicles().rbegin(); i != q.getVehicles().rend(); ++i) {
373 const SUMOTime exitTime =
MAX2(earliestExitTime, (*i)->getEventTime());
374 (*i)->updateDetectorForWriting(&data, currentTime, exitTime);
375 earliestExitTime = exitTime +
tauWithVehLength(
myTau_ff, (*i)->getVehicleType().getLengthWithGap(), (*i)->getVehicleType().getCarFollowModel().getHeadwayTime());
379 SUMOTime earliestExitTime = currentTime;
380 for (std::vector<MEVehicle*>::const_reverse_iterator i =
myQueues[queueIndex].
getVehicles().rbegin(); i !=
myQueues[queueIndex].getVehicles().rend(); ++i) {
381 const SUMOTime exitTime =
MAX2(earliestExitTime, (*i)->getEventTime());
382 (*i)->updateDetectorForWriting(&data, currentTime, exitTime);
383 earliestExitTime = exitTime +
tauWithVehLength(
myTau_ff, (*i)->getVehicleType().getLengthWithGap(), (*i)->getVehicleType().getCarFollowModel().getHeadwayTime());
398 return earliestEntry;
402 int minSize = std::numeric_limits<int>::max();
410 for (
int i = 0; i < (int)
myQueues.size(); i++) {
419 if (succ ==
nullptr) {
423 if (it !=
myFollowerMap.end() && (k == 0 || (usable & it->second & permitted) != 0)) {
424 usable &= it->second;
428 for (
int i = 0; i < (int)
myQueues.size(); i++) {
432 if ((usable & (1 << i)) != 0) {
450 if (minSize == std::numeric_limits<int>::max()) {
451 return earliestEntry;
474 const bool isRail = veh->
isRail();
487 receive(veh, qIdx, time,
true);
513 SUMOTime earliestExitTime = currentTime;
515 for (std::vector<MEVehicle*>::const_reverse_iterator veh = q.getVehicles().rbegin(); veh != q.getVehicles().rend(); ++veh) {
516 v += (*veh)->getConservativeSpeed(earliestExitTime);
517 earliestExitTime +=
tauWithVehLength(tau, (*veh)->getVehicleType().getLengthWithGap(), (*veh)->getVehicleType().getCarFollowModel().getHeadwayTime());
538 for (
const MEVehicle*
const veh : q.getVehicles()) {
562 SUMOTime earliestLeave = earliestEntry;
565 earliestLeave =
MAX2(earliestLeave, q.getBlockTime());
566 latestEntry =
MAX2(latestEntry, q.getEntryBlockTime());
569 return MAX2(earliestEntry, latestEntry);
586 if (&link->getLane()->getEdge() == nextEdge) {
592 if (lane != bestLane) {
593 for (
MSLink*
const link : lane->getLinkCont()) {
594 if (&link->getLane()->getEdge() == nextEdge) {
614 std::cout <<
" link=0";
621 0,
nullptr,
false, veh)
637 return (link ==
nullptr
643 0,
nullptr,
false, veh));
649 assert(link !=
nullptr);
684 if (link !=
nullptr) {
723 const double n_jam_threshold = headwayCapacity * nextJamThreshold / nextQueueCapacity;
772 const double maxSpeedOnEdge = veh->
getEdge()->
getLanes()[qIdx]->getVehicleMaxSpeed(veh);
793 if (!isDepart && leaderOut > tleave &&
overtake()) {
794 if (cars.size() == 1) {
797 if (link !=
nullptr) {
803 cars.insert(cars.begin() + 1, veh);
805 tleave =
MAX2(leaderOut +
tauWithVehLength(
myTau_ff, cars[0]->getVehicleType().getLengthWithGap(), cars[0]->getVehicleType().getCarFollowModel().getHeadwayTime()), tleave);
806 cars.insert(cars.begin(), veh);
812 if (!isDepart && !isTeleport) {
826 }
else if (newEdge) {
834 if (newLeader !=
nullptr) {
845 for (
MEVehicle*
const veh : q.getVehicles()) {
861 SUMOTime oldEarliestExitTime = currentTime;
871 for (std::vector<MEVehicle*>::const_reverse_iterator i = vehs.rbegin() + 1; i != vehs.rend(); ++i) {
872 const SUMOTime oldExitTime =
MAX2(oldEarliestExitTime, (*i)->getEventTime());
873 (*i)->updateDetectors(currentTime, oldExitTime,
false);
875 oldEarliestExitTime = oldExitTime + minTau;
876 newEvent =
MAX2(
newArrival(*i, newSpeed, currentTime), newEvent + minTau);
877 (*i)->setEventTime(newEvent);
899 if (qIdx == -1 || qIdx == i) {
912 if (q.size() != 0 && q.getVehicles().back()->getEventTime() < result) {
913 result = q.getVehicles().back()->getEventTime();
926 for (
int i = 0; i < (int)
myQueues.size(); i++) {
934 for (
int i = 0; i < (int)
myQueues.size(); i++) {
954 q.getModifiableVehicles().clear();
984std::vector<const MEVehicle*>
986 std::vector<const MEVehicle*> result;
988 result.insert(result.end(), q.getVehicles().begin(), q.getVehicles().end());
997 if (q.size() > 0 && q.getVehicles().back()->getWaitingTime() > 0) {
1014 if (link !=
nullptr) {
1039 for (
const MEVehicle* veh : q.getVehicles()) {
1040 result += veh->getWaitingSeconds();
#define DEFAULT_VEH_LENGTH_WITH_GAP
std::vector< MSEdge * > MSEdgeVector
#define WRITE_WARNINGF(...)
constexpr SUMOTime TIME2STEPS(double x)
const SVCPermissions SVCAll
all VClasses are allowed
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
bool isRailwayOrShared(SVCPermissions permissions)
Returns whether an edge with the given permissions is a railway edge or a shared road/rail edge.
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SPLIT
The departure is triggered by a train split.
@ SUMO_TAG_VIEWSETTINGS_VEHICLES
@ SUMO_TAG_SEGMENT
segment of a lane
@ TRAFFIC_LIGHT_RIGHT_ON_RED
@ TRAFFIC_LIGHT_NOJUNCTION
@ SUMO_ATTR_STATE
The state of a link.
@ SUMO_ATTR_TIME
trigger: the time of the step
bool gDebugFlag1
global utility flags for debugging
static bool isEnteringRoundabout(const MSEdge &e)
whether the given edge is entering a roundabout
void addLeaderCar(MEVehicle *veh, MSLink *link, const bool fromState=false)
Adds the given car to the leading vehicles.
SUMOTime changeSegment(MEVehicle *veh, SUMOTime leaveTime, MESegment *const toSegment, MSMoveReminder::Notification reason, const bool ignoreLink=false) const
change to the next segment this handles combinations of the following cases: (ending / continuing rou...
MESegment * getSegmentForEdge(const MSEdge &e, double pos=0)
Get the segment for a given edge at a given position.
void removeLeaderCar(MEVehicle *v)
Removes the given car from the leading vehicles.
void setOccupancy(const double occ)
MEVehicle * remove(MEVehicle *v)
void setBlockTime(SUMOTime t)
SUMOTime getBlockTime() const
double myOccupancy
The occupied space (in m) in the queue.
bool allows(SUMOVehicleClass vclass) const
std::vector< MEVehicle * > & getModifiableVehicles()
void addReminders(MEVehicle *veh) const
void addDetector(MSMoveReminder *data)
void setEntryBlockTime(SUMOTime entryBlockTime)
set the next time at which a vehicle may enter this queue
double getOccupancy() const
std::vector< MEVehicle * > myVehicles
const std::vector< MEVehicle * > & getVehicles() const
SUMOTime getEntryBlockTime() const
return the next time at which a vehicle may enter this queue
A single mesoscopic segment (cell)
void addReminders(MEVehicle *veh) const
add this lanes MoveReminders to the given vehicle
double myQueueCapacity
The number of lanes represented by the queue * the length of the lane.
SUMOTime tauWithVehLength(SUMOTime tau, double lengthWithGap, double vehicleTau) const
convert net time gap (leader back to follower front) to gross time gap (leader front to follower fron...
SUMOTime myTau_ff
The time headway parameters, see the Eissfeldt thesis.
bool initialise(MEVehicle *veh, SUMOTime time)
Inserts (emits) vehicle into the segment.
std::vector< Queue > myQueues
The car queues. Vehicles are inserted in the front and removed in the back.
double getBruttoOccupancy() const
Returns the occupany of the segment (the sum of the vehicle lengths + minGaps)
SUMOTime myLastHeadway
the last headway
static const int PARKING_QUEUE
bool limitedControlOverride(const MSLink *link) const
whether the given link may be passed because the option meso-junction-control.limited is set
bool isOpen(const MEVehicle *veh) const
Returns whether the vehicle may use the next link.
void addDetector(MSMoveReminder *data, int queueIndex=-1)
Adds a data collector for a detector to this segment.
void clearState()
Remove all vehicles before quick-loading state.
void receive(MEVehicle *veh, const int qIdx, SUMOTime time, const bool isDepart=false, const bool isTeleport=false, const bool newEdge=false)
Adds the vehicle to the segment, adapting its parameters.
static SVCPermissions myMultiModalWarnings
SUMOTime getLinkPenalty(const MEVehicle *veh) const
Returns the penalty time for passing a link (if using gMesoTLSPenalty > 0 or gMesoMinorPenalty > 0)
void writeVehicles(OutputDevice &of) const
std::map< const MSEdge *, int > myFollowerMap
The follower edge to allowed que index mapping for multi queue segments.
MSLink * getLink(const MEVehicle *veh, bool tlsPenalty=false) const
Returns the link the given car will use when passing the next junction.
int myNumVehicles
The cached value for the number of vehicles.
void setSpeedForQueue(double newSpeed, SUMOTime currentTime, SUMOTime blockTime, const std::vector< MEVehicle * > &vehs)
SUMOTime hasSpaceFor(const MEVehicle *const veh, const SUMOTime entryTime, int &qIdx, const bool init=false) const
Returns whether the given vehicle would still fit into the segment.
void updatePermissions()
called when permissions change due to Rerouter or TraCI
void saveState(OutputDevice &out) const
Saves the state of this segment into the given stream.
void initSegment(const MesoEdgeType &edgeType, const MSEdge &parent, const double capacity)
set model parameters (may be updated from additional file after network loading is complete)
void resetCachedSpeeds()
reset myLastMeanSpeedUpdate
const MSEdge & getEdge() const
Returns the edge this segment belongs to.
static MESegment myVaporizationTarget
int myLookahead
The number of route edges after myEdge to look up in myFollowerMap.
void addDownstreamFollowers(const MSEdge &edge, const std::vector< int > &reach, const double dist, const double lookahead, const int depth, SearchedMap &searched)
add the queues leading to the successors of the given downstream edge to myFollowerMap
virtual std::string getQueueExtraState(int) const
model specific queue state (e.g. the gap times of meso-ltm) for saving / loading
double myJamThreshold
The space (in m) which needs to be occupied before the segment is considered jammed.
const int myIndex
Running number of the segment in the edge.
virtual void send(MEVehicle *veh, MESegment *const next, const int nextQIdx, SUMOTime time, const MSMoveReminder::Notification reason)
Removes the vehicle from the segment, adapting its parameters.
double myMeanSpeed
the mean speed on this segment. Updated at event time or on demand
bool myCheckMinorPenalty
penalty for minor links
virtual SUMOTime computeHeadway(Queue &q, const Queue &qNext, const MESegment *const next, const MEVehicle *veh) const
compute current headway depending on traffic state
double jamThresholdForSpeed(double speed, double jamThresh) const
compute jam threshold for the given speed and jam-threshold option
SUMOTime myLastMeanSpeedUpdate
the time at which myMeanSpeed was last updated
void setSpeed(double newSpeed, SUMOTime currentTime, double jamThresh=DO_NOT_PATCH_JAM_THRESHOLD, int qIdx=-1)
reset mySpeed and patch the speed of all vehicles in it. Also set/recompute myJamThreshold
MESegment * myNextSegment
The next segment of this edge, 0 if this is the last segment of this edge.
bool hasBlockedLeader() const
whether a leader in any queue is blocked
double getWaitingSeconds() const
Get the waiting time for vehicles in all queues.
const double myLength
The segment's length.
SUMOTime getEventTime() const
Returns the (planned) time at which the next vehicle leaves this segment.
const MSEdge & myEdge
The microsim edge this segment belongs to.
static const std::string OVERRIDE_TLS_PENALTIES
special param value
MESegment(const std::string &id, const MSEdge &parent, MESegment *next, const double length, const double speed, const int idx, const bool multiQueue, const MesoEdgeType &edgeType)
constructor
MEVehicle * removeCar(MEVehicle *v, SUMOTime leaveTime, const MSMoveReminder::Notification reason)
Removes the given car from the edge's que.
std::vector< const MEVehicle * > getVehicles() const
returns all vehicles (for debugging)
static MSEdge myDummyParent
void recomputeJamThreshold(double jamThresh)
compute a value for myJamThreshold if jamThresh is negative, compute a value which allows free flow a...
double getMeanSpeed() const
wrapper to satisfy the FunctionBinding signature
int getCarNumber() const
Returns the total number of cars on the segment.
void loadState(const std::vector< SUMOVehicle * > &vehs, const SUMOTime blockTime, const SUMOTime entryBlockTime, const int queIdx)
Loads the state of this segment with the given parameters.
double myTau_length
Headway parameter for computing gross time headyway from net time headway, length and edge speed.
SUMOTime newArrival(const MEVehicle *const v, double newSpeed, SUMOTime currentTime)
compute the new arrival time when switching speed
bool myJunctionControl
Whether junction control is enabled.
virtual bool hasSpaceForInsertion(const Queue &q, int qIdx, double newOccupancy, SUMOTime entryTime) const
check jam-avoidance constraints during insertion
bool myTLSPenalty
Whether tls penalty is enabled.
static const double DO_NOT_PATCH_JAM_THRESHOLD
double getFlow() const
returns flow based on headway
static bool isInvalid(const MESegment *segment)
whether the given segment is 0 or encodes vaporization
SUMOTime getNextInsertionTime(SUMOTime earliestEntry) const
return a time after earliestEntry at which a vehicle may be inserted at full speed
double myCapacity
The number of lanes represented by the queue * the length of the lane.
bool myOvertaking
Whether overtaking is permitted on this segment.
void prepareDetectorForWriting(MSMoveReminder &data, int queueIndex=-1)
Removes a data collector for a detector from this segment.
std::map< std::pair< const MSEdge *, std::vector< int > >, std::vector< std::pair< double, int > > > SearchedMap
the (distance, depth) pairs at which a downstream edge was searched with a given lane reach
bool vaporizeAnyCar(SUMOTime currentTime, const MSDetectorFileOutput *filter)
tries to remove any car from this segment
SUMOTime getTauJJ(double nextQueueSize, double nextQueueCapacity, double nextJamThreshold) const
A vehicle from the mesoscopic point of view.
void markJammed(bool jammed)
double estimateLeaveSpeed(const MSLink *link) const
Returns the vehicle's estimated speed after driving across the link.
void processStop()
ends the current stop and performs loading/unloading
SUMOTime getWaitingTime(const bool accumulated=false) const
Returns the duration for which the vehicle was blocked.
bool hasArrived() const
Returns whether this vehicle has already arrived (reached the arrivalPosition on its final edge)
bool moveRoutePointer()
Update when the vehicle enters a new edge in the move step.
void updateDetectors(const SUMOTime currentTime, const SUMOTime exitTime, const bool isLeave, const MSMoveReminder::Notification reason=MSMoveReminder::NOTIFICATION_JUNCTION)
Updates all vehicle detectors.
SUMOTime checkStop(SUMOTime time)
Returns until when to stop at the current segment and sets the information that the stop has been rea...
void setUnqueuedEventTime(SUMOTime t)
Sets the minimum time at which the vehicle leaves its current segment (this includes planned stops)
SUMOTime getLastEntryTime() const
Returns the time the vehicle entered the current segment.
void setEventTime(SUMOTime t, bool hasDelay=true)
Sets the (planned) time at which the vehicle leaves its current segment.
MESegment * getSegment() const
Returns the current segment the vehicle is on.
void setLastEntryTime(SUMOTime t)
Sets the entry time for the current segment.
int getQueIndex() const
Returns the index of the que the vehicle is in.
virtual void setSegment(MESegment *s, int idx=0)
Sets the current segment the vehicle is at together with its que.
SUMOTime getEventTime() const
Returns the (planned) time at which the vehicle leaves its current segment.
void setBlockTime(const SUMOTime t)
Sets the time at which the vehicle was blocked.
double getSpeed() const
Returns the vehicle's estimated speed assuming no delays.
double getImpatience() const
Returns this vehicles impatience.
const MSEdge * succEdge(int nSuccs) const
Returns the nSuccs'th successor of edge the vehicle is currently at.
int getInsertionChecks() const
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
bool isParking() const
Returns whether the vehicle is parking.
const MSEdge * getEdge() const
Returns the edge the vehicle is currently at.
void addReminder(MSMoveReminder *rem, double pos=0)
Adds a MoveReminder dynamically.
virtual void activateReminders(const MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
"Activates" all current move reminder
SUMOVehicleClass getVClass() const
Returns the vehicle's access class.
void onDepart()
Called when the vehicle is inserted into the network.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
bool isStopped() const
Returns whether the vehicle is at a stop.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
virtual double getHeadwayTime() const
Get the driver's desired headway [s].
Base of value-generating classes (detectors)
bool vehicleApplies(const SUMOTrafficObject &veh) const
Checks whether the detector measures vehicles of the given type.
bool sidingDeadlock(const SUMOVehicle *veh) const
whether insertion on this driveway would cause deadlock in an approached siding
static const MSDriveWay * getDepartureDriveway(const SUMOVehicle *veh, bool init=false)
bool foeDriveWayOccupied(bool store, const SUMOVehicle *ego, MSEdgeVector &occupied) const
whether any of myFoes is occupied (vehicles that are the target of a join must be ignored)
A road/street connecting two junctions.
virtual void unlock() const
release exclusive access to the mesoscopic state
SVCPermissions getPermissions() const
Returns the combined permissions of all lanes of this edge.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Get the allowed lanes to reach the destination-edge.
void invalidateMesoCache() const
bool isNormal() const
return whether this edge is an internal edge
double getSpeedLimit() const
Returns the speed limit of the edge @caution The speed limit of the first lane is returned; should pr...
const MSJunction * getToJunction() const
double getLength() const
return the length of the edge
static SVCPermissions getMesoPermissions(SVCPermissions p, SVCPermissions ignoreIgnored=0)
bool isRoundabout() const
bool isInternal() const
return whether this edge is an internal edge
bool isVaporizing() const
Returns whether vehicles on this edge shall be vaporized.
void addWaiting(SUMOVehicle *vehicle) const
Adds a vehicle to the list of waiting vehicles.
bool hasMinorLink() const
whether any lane has a minor link
virtual void lock() const
grant exclusive access to the mesoscopic state
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
static MELoop * gMesoNet
mesoscopic simulation infrastructure
static bool gMesoLimitedJunctionControl
SumoXMLNodeType getType() const
return the type of this Junction
Representation of a lane in the micro simulation.
MSEdge & getEdge() const
Returns the lane's edge.
const std::vector< MSLink * > & getLinkCont() const
returns the container with all links !!!
bool isTLSControlled() const
MSLane * getLane() const
Returns the connected lane.
bool opened(SUMOTime arrivalTime, double arrivalSpeed, double leaveSpeed, double vehicleLength, double impatience, double decel, SUMOTime waitingTime, double posLat=0, BlockingFoes *collectFoes=nullptr, bool ignoreRed=false, const SUMOTrafficObject *ego=nullptr, double dist=-1) const
Returns the information whether the link may be passed.
bool havePriority() const
Returns whether this link is a major link.
SUMOTime getMesoTLSPenalty() const
Returns the time penalty for passing a tls-controlled link (meso)
void removeApproaching(const SUMOVehicle *veh)
removes the vehicle from myApproachingVehicles
double getGreenFraction() const
Returns the average proportion of green time to cycle time.
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
@ NOTIFICATION_ARRIVED
The vehicle arrived at its destination (is deleted)
@ NOTIFICATION_VAPORIZED_CALIBRATOR
The vehicle got removed by a calibrator.
@ NOTIFICATION_DEPARTED
The vehicle has departed (was inserted into the network)
@ NOTIFICATION_SEGMENT
The vehicle changes the segment (meso only)
@ NOTIFICATION_VAPORIZED_VAPORIZER
The vehicle got vaporized with a vaporizer.
@ NOTIFICATION_JUNCTION
The vehicle arrived at a junction.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
static bool isSignalized(SUMOVehicleClass svc)
void scheduleVehicleRemoval(SUMOVehicle *veh, bool checkDuplicate=false)
Removes a vehicle after it has ended.
double getLengthWithGap() const
Get vehicle's length including the minimum gap [m].
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
static void writeVehicle(OutputDevice &of, const MSBaseVehicle &veh)
Writes the dump of the given vehicle into the given device.
Base class for objects which have an id.
static std::string getIDSecure(const T *obj, const std::string &fallBack="NULL")
get an identifier for Named-like object which may be Null
const std::string & getID() const
Returns the id.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const ATTR_TYPE &attr, const T &val, const bool isNull=false, const bool escape=false)
writes a named attribute
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static double rand(SumoRNG *rng=nullptr)
Returns a random real number in [0, 1)
Representation of a vehicle.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
edge type specific meso parameters