SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSE2Collector.h
Go to the documentation of this file.
1 /****************************************************************************/
12 // An areal (along a single lane) detector
13 /****************************************************************************/
14 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
15 // Copyright (C) 2014 DLR (http://www.dlr.de/) and contributors
16 /****************************************************************************/
17 //
18 // This file is part of SUMO.
19 // SUMO is free software: you can redistribute it and/or modify
20 // it under the terms of the GNU General Public License as published by
21 // the Free Software Foundation, either version 3 of the License, or
22 // (at your option) any later version.
23 //
24 /****************************************************************************/
25 #ifndef MSE2Collector_h
26 #define MSE2Collector_h
27 
28 
29 // ===========================================================================
30 // included modules
31 // ===========================================================================
32 #ifdef _MSC_VER
33 #include <windows_config.h>
34 #else
35 #include <config.h>
36 #endif
37 
38 #include <vector>
39 #include <list>
40 #include <microsim/MSLane.h>
45 
46 
47 // ===========================================================================
48 // class declarations
49 // ===========================================================================
50 class OutputDevice;
51 
52 
53 // ===========================================================================
54 // class definitions
55 // ===========================================================================
80 public:
93  MSE2Collector(const std::string& id, DetectorUsage usage,
94  MSLane* const lane, SUMOReal startPos, SUMOReal detLength,
95  SUMOTime haltingTimeThreshold, SUMOReal haltingSpeedThreshold,
96  SUMOReal jamDistThreshold);
97 
98 
100  virtual ~MSE2Collector();
101 
102 
108  virtual DetectorUsage getUsageType() const {
109  return myUsage;
110  }
111 
112 
113 
116 
132  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos,
133  SUMOReal newSpeed);
134 
135 
147  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
148 
149 
164 
165 
166 
175  void detectorUpdate(const SUMOTime step);
176 
177 
178 
181 
190  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
191 
192 
199  void writeXMLDetectorProlog(OutputDevice& dev) const;
201 
202 
208  return myStartPos;
209  }
210 
211 
216  SUMOReal getEndPos() const {
217  return myEndPos;
218  }
219 
220 
227  void reset();
228 
229 
232 
234  unsigned getCurrentVehicleNumber() const;
235 
238 
241 
244 
246  unsigned getCurrentJamNumber() const;
247 
249  unsigned getCurrentMaxJamLengthInVehicles() const;
250 
253 
255  unsigned getCurrentJamLengthInVehicles() const;
256 
259 
261  unsigned getCurrentStartedHalts() const;
262 
270 
275  std::vector<std::string> getCurrentVehicleIDs() const;
277 
278 
279 protected:
285  struct JamInfo {
287  std::list<SUMOVehicle*>::const_iterator firstStandingVehicle;
288 
290  std::list<SUMOVehicle*>::const_iterator lastStandingVehicle;
291  };
292 
293 
305  public:
311  : myLane(lane) { }
312 
313 
319  : myLane(s.myLane) { }
320 
321 
328  int operator()(const SUMOVehicle* v1, const SUMOVehicle* v2);
329 
330  private:
331  by_vehicle_position_sorter& operator=(const by_vehicle_position_sorter&); // just to avoid a compiler warning
332  private:
334  const MSLane* const myLane;
335  };
336 
337 
338 private:
341 
353 
356 
358  std::list<SUMOVehicle*> myKnownVehicles;
359 
361  std::map<const SUMOVehicle*, SUMOTime> myHaltingVehicleDurations;
362 
364  std::map<const SUMOVehicle*, SUMOTime> myIntervalHaltingVehicleDurations;
365 
367  std::vector<SUMOTime> myPastStandingDurations;
368 
370  std::vector<SUMOTime> myPastIntervalStandingDurations;
371 
372 
375 
387  unsigned myTimeSamples;
405 
406 
409 
417  unsigned myCurrentJamNo;
431 
432 
433 private:
436 
439 
440 
441 };
442 
443 
444 #endif
445 
446 /****************************************************************************/
447 
std::map< const SUMOVehicle *, SUMOTime > myHaltingVehicleDurations
Storage for halting durations of known vehicles (for halting vehicles)
std::vector< SUMOTime > myPastIntervalStandingDurations
Halting durations of ended halts for the current interval [s].
std::vector< std::string > getCurrentVehicleIDs() const
Returns the IDs of the vehicles within the area.
unsigned myCurrentJamNo
The current jam number.
unsigned getCurrentJamNumber() const
Returns the current number of jams.
SUMOReal myMaxJamInMeters
The max jam length [m].
unsigned getCurrentStartedHalts() const
Returns the length of all jams in meters.
virtual ~MSE2Collector()
Destructor.
An areal (along a single lane) detector.
Definition: MSE2Collector.h:79
SUMOReal getCurrentMeanLength() const
Returns the mean vehicle length of vehicles currently on the detector.
Internal representation of a jam.
unsigned getCurrentMaxJamLengthInVehicles() const
Returns the length in vehicles of the currently largest jam.
SUMOReal myStartedHalts
The number of started halts [#].
Notification
Definition of a vehicle state.
A class used to sort known vehicles by their position.
std::vector< SUMOTime > myPastStandingDurations
Halting durations of ended halts [s].
unsigned myMaxVehicleNumber
The max number of vehicles [#veh].
SUMOReal getCurrentJamLengthInMeters() const
Returns the length of all jams in meters.
by_vehicle_position_sorter & operator=(const by_vehicle_position_sorter &)
SUMOReal myCurrentMeanLength
The current mean length.
virtual DetectorUsage getUsageType() const
Returns the detector's usage type.
unsigned myCurrentStartedHalts
The number of started halts in the last step.
by_vehicle_position_sorter(const MSLane *const lane)
constructor
bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason)
Adds the vehicle to known vehicles if not beyond the dector.
MSE2Collector & operator=(const MSE2Collector &)
Invalidated assignment operator.
unsigned myVehicleSamples
The number of collected samples [#].
Representation of a vehicle.
Definition: SUMOVehicle.h:64
SUMOReal getStartPos() const
Returns the begin position of the detector.
std::list< SUMOVehicle * > myKnownVehicles
List of known vehicles.
SUMOReal getCurrentMeanSpeed() const
Returns the mean vehicle speed of vehicles currently on the detector.
Something on a lane to be noticed about vehicle movement.
SUMOReal myJamHaltingSpeedThreshold
A vehicle must driver slower than this to be counted as a part of a jam.
unsigned myCurrentJamLengthInVehicles
The overall jam length in vehicles.
SUMOTime myJamHaltingTimeThreshold
A vehicle must be that long beyond myJamHaltingSpeedThreshold to be counted as a part of a jam...
SUMOReal mySpeedSum
The sum of collected vehicle speeds [m/s].
unsigned myMeanVehicleNumber
The mean number of vehicles [#veh].
SUMOReal myCurrentMaxJamLengthInMeters
the current maximum jam length in meters
SUMOReal getCurrentHaltingNumber() const
Returns the number of current haltings within the area.
unsigned myMeanMaxJamInVehicles
The mean jam length [#veh].
SUMOReal myCurrentJamLengthInMeters
The overall jam length in meters.
by_vehicle_position_sorter(const by_vehicle_position_sorter &s)
copy constructor
std::list< SUMOVehicle * >::const_iterator firstStandingVehicle
The first standing vehicle.
SUMOReal myStartPos
The position the detector starts at.
unsigned myMaxJamInVehicles
The max jam length [#veh].
void detectorUpdate(const SUMOTime step)
Computes the detector values in each time step.
SUMOReal myEndPos
The position the detector ends at.
SUMOReal myCurrentOccupancy
The current occupancy.
SUMOReal myMaxOccupancy
The maximum occupancy [%].
bool notifyMove(SUMOVehicle &veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed)
Adds/removes vehicles from the list of vehicles to regard.
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
SUMOReal getCurrentOccupancy() const
Returns the curent detector occupancy.
DetectorUsage myUsage
Information about how this detector is used.
SUMOReal myCurrentMeanSpeed
The current mean speed.
void reset()
Resets all values.
unsigned myTimeSamples
The current aggregation duration [#steps].
unsigned getCurrentVehicleNumber() const
Returns the number of vehicles currently on the detector.
SUMOReal myMeanMaxJamInMeters
The mean jam length [m].
SUMOReal myOccupancySum
The sum of occupancies [%].
const MSLane *const myLane
The lane the detector is placed at.
int SUMOTime
Definition: SUMOTime.h:43
MSE2Collector(const std::string &id, DetectorUsage usage, MSLane *const lane, SUMOReal startPos, SUMOReal detLength, SUMOTime haltingTimeThreshold, SUMOReal haltingSpeedThreshold, SUMOReal jamDistThreshold)
Constructor.
std::list< SUMOVehicle * >::const_iterator lastStandingVehicle
The last standing vehicle.
unsigned myCurrentMaxJamLengthInVehicles
The current maximum jam length in vehicles.
SUMOReal myJamLengthInMetersSum
The sum of jam lengths [m].
SUMOReal getCurrentMaxJamLengthInMeters() const
Returns the length in meters of the currently largest jam.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
unsigned getCurrentJamLengthInVehicles() const
Returns the length of all jams in vehicles.
#define SUMOReal
Definition: config.h:215
bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, MSMoveReminder::Notification reason)
Removes a known vehicle due to its lane-change.
std::map< const SUMOVehicle *, SUMOTime > myIntervalHaltingVehicleDurations
Storage for halting durations of known vehicles (current interval)
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
SUMOReal myCurrentHaltingsNumber
The number of halted vehicles [#].
int operator()(const SUMOVehicle *v1, const SUMOVehicle *v2)
Comparison funtcion.
Base of value-generating classes (detectors)
unsigned myJamLengthInVehiclesSum
The sum of jam lengths [#veh].
SUMOReal myJamDistanceThreshold
Two standing vehicles must be closer than this to be counted into the same jam.
void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "detector" as root element.
SUMOReal getEndPos() const
Returns the end position of the detector.