 |
Eclipse SUMO - Simulation of Urban MObility
|
Go to the documentation of this file.
44 #define HAS_NOT_LEFT_DETECTOR -1
50 double positionInMeters,
51 const std::string& vTypes) :
54 myPosition(positionInMeters),
58 assert(
myPosition >= 0 && myPosition <= myLane->getLength());
95 double newPos,
double newSpeed) {
104 double entryTime =
SIMTIME + timeBeforeEnter;
115 const double leaveTime =
SIMTIME + timeBeforeLeave;
151 ? std::accumulate(d.begin(), d.end(), (double) 0.0,
speedSum) / (double) d.size()
160 ? std::accumulate(d.begin(), d.end(), (double) 0.0,
lengthSum) / (double) d.size()
172 double occupancy = 0;
174 for (std::vector< VehicleData >::const_iterator i = d.begin(); i != d.end(); ++i) {
176 const double timeOnDetDuringInterval = leaveTime -
MAX2(
STEPS2TIME(tbeg), (*i).entryTimeM);
177 occupancy +=
MIN2(timeOnDetDuringInterval,
TS);
179 return occupancy /
TS * (double) 100.;
186 return (
int) d.size();
190 std::vector<std::string>
193 std::vector<std::string> ret;
194 for (std::vector<VehicleData>::iterator i = d.begin(); i != d.end(); ++i) {
195 ret.push_back((*i).idM);
220 const double t(
STEPS2TIME(stopTime - startTime));
222 double occupancy = 0.;
226 double inverseSpeedSum = 0.;
228 const double timeOnDetDuringInterval = i->leaveTimeM -
MAX2(
STEPS2TIME(startTime), i->entryTimeM);
229 occupancy +=
MIN2(timeOnDetDuringInterval, t);
231 assert(i->speedM > 0);
232 inverseSpeedSum += 1. / i->speedM;
238 occupancy = occupancy / t * (double) 100.;
252 double entryTimestep) {
263 double leaveTimestep) {
270 double entryTimestep = it->second;
272 assert(entryTimestep < leaveTimestep);
292 std::vector<MSInductLoop::VehicleData>
295 std::vector<VehicleData> ret;
297 if ((*i).entryTimeM >= t || (leaveTime && (*i).leaveTimeM >= t)) {
302 if ((*i).entryTimeM >= t || (leaveTime && (*i).leaveTimeM >= t)) {
The vehicle changes lanes (micro only)
Representation of a vehicle or person.
const std::string & getID() const
Returns the name of the vehicle type.
Base of value-generating classes (detectors)
double myLastLeaveTime
Leave-time of the last vehicle detected [s].
Representation of a lane in the micro simulation.
double getCurrentLength() const
Returns the length of the vehicle on the detector.
Struct to store the data of the counted vehicle internally.
virtual void enterDetectorByMove(SUMOTrafficObject &veh, double entryTimestep)
Introduces a vehicle to the detector's map myVehiclesOnDet.
static double lengthSum(double sumSoFar, const MSInductLoop::VehicleData &data)
Adds up VehicleData::lengthM.
Static storage of an output device and its base (abstract) implementation.
virtual const MSVehicleType & getVehicleType() const =0
Returns the vehicle's type.
virtual const std::string & getID() const =0
Get the vehicle's ID.
double getCurrentSpeed() const
Returns the speed of the vehicle on the detector.
bool notifyEnter(SUMOTrafficObject &veh, Notification reason, const MSLane *enteredLane=0)
Checks whether the reminder is activated by a vehicle entering the lane.
double getTimeSinceLastDetection() const
Returns the time since the last vehicle left the detector.
virtual void leaveDetectorByLaneChange(SUMOTrafficObject &veh, double lastPos)
Removes a vehicle from the detector's map myVehiclesOnDet.
virtual double getBackPositionOnLane(const MSLane *lane) const =0
Get the vehicle's back position along the given lane.
double myLastOccupancy
Occupancy by the last vehicle detected.
Something on a lane to be noticed about vehicle movement.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
weights: time range begin
double getCurrentOccupancy() const
Returns the current occupancy.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
double speedM
Speed of the vehicle in [m/s].
virtual void leaveDetectorByMove(SUMOTrafficObject &veh, double leaveTimestep)
Processes a vehicle that leaves the detector.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
VehicleMap myVehiclesOnDet
Data for vehicles that have entered the detector (vehicle -> enter time)
static std::string escapeXML(const std::string &orig, const bool maskDoubleHyphen=false)
Replaces the standard escapes by their XML entities.
int getCurrentPassedNumber() const
Returns the number of vehicles that have passed the detector.
static double speedSum(double sumSoFar, const MSInductLoop::VehicleData &data)
Adds up VehicleData::speedM.
The vehicle has departed (was inserted into the network)
virtual std::vector< VehicleData > collectVehiclesOnDet(SUMOTime t, bool leaveTime=false) const
Returns vehicle data for vehicles that have been on the detector starting at the given time.
std::vector< std::string > getCurrentVehicleIDs() const
Returns the ids of vehicles that have passed the detector.
bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double newSpeed)
Checks whether the vehicle shall be counted and/or shall still touch this MSMoveReminder.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
The vehicle starts or ends parking.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
virtual double getPreviousSpeed() const =0
Returns the vehicle's previous speed.
bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Dismisses the vehicle if it is on the detector due to a lane change.
double getLength() const
Get vehicle's length [m].
VehicleDataCont myLastVehicleDataCont
Data of vehicles that have completely passed the detector in the last time interval.
bool vehicleApplies(const SUMOTrafficObject &veh) const
Checks whether the detector measures vehicles of the given type.
~MSInductLoop()
Destructor.
static double passingTime(const double lastPos, const double passedPos, const double currentPos, const double lastSpeed, const double currentSpeed)
Calculates the time at which the position passedPosition has been passed In case of a ballistic updat...
const double myPosition
Detector's position on lane [m].
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
an aggreagated-output interval
bool writeXMLHeader(const std::string &rootElement, const std::string &schemaFile, std::map< SumoXMLAttr, std::string > attrs=std::map< SumoXMLAttr, std::string >())
Writes an XML header with optional configuration.
virtual double getPositionOnLane() const =0
Get the vehicle's position along the lane.
#define HAS_NOT_LEFT_DETECTOR
MSInductLoop(const std::string &id, MSLane *const lane, double positionInMeters, const std::string &vTypes)
Constructor.
VehicleDataCont myVehicleDataCont
Data of vehicles that have completely passed the detector.
int myEnteredVehicleNumber
The number of entered vehicles.
const std::string & getID() const
Returns the id.
Notification
Definition of a vehicle state.
The vehicle arrived at a junction.
virtual void reset()
Resets all generated values to allow computation of next interval.
The vehicle is being teleported.
MSLane *const myLane
Lane on which the reminder works.
virtual double getSpeed() const =0
Returns the vehicle's current speed.
void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "detector" as root element.