Eclipse SUMO - Simulation of Urban MObility
MSMeanData.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
19 // Data collector for edges/lanes
20 /****************************************************************************/
21 #pragma once
22 #include <config.h>
23 
24 #include <vector>
25 #include <set>
26 #include <list>
27 #include <limits>
30 #include <utils/common/SUMOTime.h>
31 
32 
33 // ===========================================================================
34 // class declarations
35 // ===========================================================================
36 class OutputDevice;
37 class MSEdge;
38 class MSLane;
39 class SUMOTrafficObject;
40 
41 typedef std::vector<MSEdge*> MSEdgeVector;
42 
43 // ===========================================================================
44 // class definitions
45 // ===========================================================================
58 public:
66  class MeanDataValues : public MSMoveReminder {
67  public:
69  MeanDataValues(MSLane* const lane, const double length, const bool doAdd, const MSMeanData* const parent);
70 
72  virtual ~MeanDataValues();
73 
74 
77  virtual void reset(bool afterWrite = false) = 0;
78 
83  virtual void addTo(MeanDataValues& val) const = 0;
84 
85 
94  virtual bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
95 
96 
110  bool notifyMove(SUMOTrafficObject& veh, double oldPos,
111  double newPos, double newSpeed);
112 
113 
122  virtual bool notifyLeave(SUMOTrafficObject& veh, double lastPos,
123  MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
124 
125 
130  virtual bool isEmpty() const;
131 
132 
135  virtual void update();
136 
144  virtual void write(OutputDevice& dev, long long int attributeMask, const SUMOTime period,
145  const int numLanes, const double speedLimit, const double defaultTravelTime,
146  const int numVehicles = -1) const = 0;
147 
151  virtual double getSamples() const;
152 
156  double getTravelledDistance() const {
157  return travelledDistance;
158  }
159 
161  return resetTime;
162  }
163 
164  double getLaneLength() const {
165  return myLaneLength;
166  }
167 
169  virtual double getAttributeValue(SumoXMLAttr a, const SUMOTime period, const double numLanes, const double speedLimit) const {
170  UNUSED_PARAMETER(a);
171  UNUSED_PARAMETER(period);
172  UNUSED_PARAMETER(numLanes);
173  UNUSED_PARAMETER(speedLimit);
174  return 0;
175  }
176 
177  protected:
179  const MSMeanData* const myParent;
180 
182  const double myLaneLength;
183 
188 
192 
195  };
196 
197 
203  public:
205  MeanDataValueTracker(MSLane* const lane, const double length,
206  const MSMeanData* const parent);
207 
209  virtual ~MeanDataValueTracker();
210 
213  void reset(bool afterWrite);
214 
219  void addTo(MSMeanData::MeanDataValues& val) const;
220 
223 
227  void notifyMoveInternal(const SUMOTrafficObject& veh, const double frontOnLane, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double meanLengthOnLane);
228 
229 
239  bool notifyLeave(SUMOTrafficObject& veh, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
240 
241 
253  bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
255 
256  bool isEmpty() const;
257 
265  void write(OutputDevice& dev, long long int attributeMask, const SUMOTime period,
266  const int numLanes, const double speedLimit, const double defaultTravelTime,
267  const int numVehicles = -1) const;
268 
269  int getNumReady() const;
270 
271  void clearFirst();
272 
273  double getSamples() const;
274 
275  private:
276  class TrackerEntry {
277  public:
280  : myNumVehicleEntered(0), myNumVehicleLeft(0), myValues(values) {}
281 
283  virtual ~TrackerEntry() {
284  delete myValues;
285  }
286 
289 
292 
295  };
296 
298  std::map<const SUMOTrafficObject*, TrackerEntry*> myTrackedData;
299 
301  std::list<TrackerEntry*> myCurrentData;
302 
303  };
304 
305 
306 public:
322  MSMeanData(const std::string& id,
323  const SUMOTime dumpBegin, const SUMOTime dumpEnd,
324  const bool useLanes, const bool withEmpty,
325  const bool printDefaults, const bool withInternal,
326  const bool trackVehicles, const int detectPersons,
327  const double minSamples,
328  const double maxTravelTime,
329  const std::string& vTypes,
330  const std::string& writeAttributes,
331  const std::vector<MSEdge*>& edges,
332  bool aggregate);
333 
334 
336  virtual ~MSMeanData();
337 
340  void init();
341 
344 
359  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
360 
367  virtual void writeXMLDetectorProlog(OutputDevice& dev) const;
369 
372  virtual void detectorUpdate(const SUMOTime step);
373 
374  double getMinSamples() const {
375  return myMinSamples;
376  }
377 
378  double getMaxTravelTime() const {
379  return myMaxTravelTime;
380  }
381 
382  bool isEdgeData() const {
383  return myAmEdgeBased;
384  }
385 
387  virtual std::vector<std::string> getAttributeNames() const {
388  return std::vector<std::string>();
389  }
390 
392  virtual double getAttributeValue(const MSLane* lane, SumoXMLAttr a, double defaultValue) const {
393  UNUSED_PARAMETER(lane);
394  UNUSED_PARAMETER(a);
395  return defaultValue;
396  }
397 
398 protected:
404  virtual MSMeanData::MeanDataValues* createValues(MSLane* const lane, const double length, const bool doAdd) const = 0;
405 
411  void resetOnly(SUMOTime stopTime);
412 
417  virtual std::string getEdgeID(const MSEdge* const edge);
418 
433  void writeEdge(OutputDevice& dev, const std::vector<MeanDataValues*>& edgeValues,
434  const MSEdge* const edge, SUMOTime startTime, SUMOTime stopTime);
435 
436 
448  void writeAggregated(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
449 
456  virtual void openInterval(OutputDevice& dev, const SUMOTime startTime, const SUMOTime stopTime);
457 
467  virtual bool writePrefix(OutputDevice& dev, const MeanDataValues& values,
468  const SumoXMLTag tag, const std::string id) const;
469 
470 
471 protected:
472  const std::vector<MeanDataValues*>* getEdgeValues(const MSEdge* edge) const;
473 
474 protected:
476  const double myMinSamples;
477 
479  const double myMaxTravelTime;
480 
482  std::vector<std::vector<MeanDataValues*> > myMeasures;
483 
485  const bool myDumpEmpty;
486 
488  const bool myAmEdgeBased;
489 
490 private:
491  static long long int initWrittenAttributes(const std::string writeAttributes, const std::string& id);
492 
495 
498 
501 
503  std::map<const MSEdge*, int> myEdgeIndex;
504 
506  const bool myPrintDefaults;
507 
509  const bool myDumpInternal;
510 
512  const bool myTrackVehicles;
513 
515  const long long int myWrittenAttributes;
516 
518  const bool myAggregate;
519 
521  std::list< std::pair<SUMOTime, SUMOTime> > myPendingIntervals;
522 
523 private:
526 
529 
530 };
long long int SUMOTime
Definition: GUI.h:35
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:73
std::vector< MSEdge * > MSEdgeVector
Definition: MSMeanData.h:39
SumoXMLTag
Numbers representing SUMO-XML - element names.
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:30
Base of value-generating classes (detectors)
A road/street connecting two junctions.
Definition: MSEdge.h:77
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
Definition: MSMeanData.h:276
MeanDataValues * myValues
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:294
virtual ~TrackerEntry()
Constructor.
Definition: MSMeanData.h:283
int myNumVehicleEntered
The number of vehicles which entered in the current interval.
Definition: MSMeanData.h:288
TrackerEntry(MeanDataValues *const values)
Constructor.
Definition: MSMeanData.h:279
int myNumVehicleLeft
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:291
Data structure for mean (aggregated) edge/lane values for tracked vehicles.
Definition: MSMeanData.h:202
double getSamples() const
Returns the number of collected sample seconds.
Definition: MSMeanData.cpp:405
MeanDataValueTracker(MSLane *const lane, const double length, const MSMeanData *const parent)
Constructor.
Definition: MSMeanData.cpp:288
bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Called if the vehicle leaves the reminder's lane.
Definition: MSMeanData.cpp:338
void addTo(MSMeanData::MeanDataValues &val) const
Add the values of this to the given one and store them there.
Definition: MSMeanData.cpp:326
void notifyMoveInternal(const SUMOTrafficObject &veh, const double frontOnLane, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double meanLengthOnLane)
Internal notification about the vehicle moves.
Definition: MSMeanData.cpp:332
virtual ~MeanDataValueTracker()
Destructor.
Definition: MSMeanData.cpp:296
void write(OutputDevice &dev, long long int attributeMask, const SUMOTime period, const int numLanes, const double speedLimit, const double defaultTravelTime, const int numVehicles=-1) const
Writes output values into the given stream.
Definition: MSMeanData.cpp:377
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Computes current values and adds them to their sums.
Definition: MSMeanData.cpp:347
std::list< TrackerEntry * > myCurrentData
The currently active meandata "intervals".
Definition: MSMeanData.h:301
bool isEmpty() const
Returns whether any data was collected.
Definition: MSMeanData.cpp:371
void reset(bool afterWrite)
Resets values so they may be used for the next interval.
Definition: MSMeanData.cpp:313
std::map< const SUMOTrafficObject *, TrackerEntry * > myTrackedData
The map of vehicles to data entries.
Definition: MSMeanData.h:298
Data structure for mean (aggregated) edge/lane values.
Definition: MSMeanData.h:66
virtual void addTo(MeanDataValues &val) const =0
Add the values of this to the given one and store them there.
virtual bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Called if the vehicle leaves the reminder's lane.
Definition: MSMeanData.cpp:260
MeanDataValues(MSLane *const lane, const double length, const bool doAdd, const MSMeanData *const parent)
Constructor.
Definition: MSMeanData.cpp:60
double getTravelledDistance() const
Returns the total travelled distance.
Definition: MSMeanData.h:156
SUMOTime getResetTime() const
Definition: MSMeanData.h:160
virtual void update()
Called if a per timestep update is needed. Default does nothing.
Definition: MSMeanData.cpp:275
double getLaneLength() const
Definition: MSMeanData.h:164
double travelledDistance
The sum of the distances the vehicles travelled.
Definition: MSMeanData.h:190
virtual bool isEmpty() const
Returns whether any data was collected.
Definition: MSMeanData.cpp:269
virtual void write(OutputDevice &dev, long long int attributeMask, const SUMOTime period, const int numLanes, const double speedLimit, const double defaultTravelTime, const int numVehicles=-1) const =0
Writes output values into the given stream.
bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double newSpeed)
Checks whether the reminder still has to be notified about the vehicle moves.
Definition: MSMeanData.cpp:87
const double myLaneLength
The length of the lane / edge the data collector is on.
Definition: MSMeanData.h:182
virtual ~MeanDataValues()
Destructor.
Definition: MSMeanData.cpp:70
virtual double getAttributeValue(SumoXMLAttr a, const SUMOTime period, const double numLanes, const double speedLimit) const
return attribute value
Definition: MSMeanData.h:169
virtual void reset(bool afterWrite=false)=0
Resets values so they may be used for the next interval.
SUMOTime resetTime
time at which collection was reset;
Definition: MSMeanData.h:194
virtual bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Called if the vehicle enters the reminder's lane.
Definition: MSMeanData.cpp:75
const MSMeanData *const myParent
The meandata parent.
Definition: MSMeanData.h:179
virtual double getSamples() const
Returns the number of collected sample seconds.
Definition: MSMeanData.cpp:280
Data collector for edges/lanes.
Definition: MSMeanData.h:57
virtual double getAttributeValue(const MSLane *lane, SumoXMLAttr a, double defaultValue) const
return attribute value for the given lane
Definition: MSMeanData.h:392
double getMaxTravelTime() const
Definition: MSMeanData.h:378
const bool myAggregate
whether the data for all edges shall be aggregated
Definition: MSMeanData.h:518
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
Definition: MSMeanData.cpp:699
const bool myDumpInternal
Whether internal lanes/edges shall be written.
Definition: MSMeanData.h:509
const SUMOTime myDumpBegin
The first and the last time step to write information (-1 indicates always)
Definition: MSMeanData.h:494
virtual void detectorUpdate(const SUMOTime step)
Updates the detector.
Definition: MSMeanData.cpp:754
bool isEdgeData() const
Definition: MSMeanData.h:382
virtual ~MSMeanData()
Destructor.
Definition: MSMeanData.cpp:511
double getMinSamples() const
Definition: MSMeanData.h:374
virtual MSMeanData::MeanDataValues * createValues(MSLane *const lane, const double length, const bool doAdd) const =0
Create an instance of MeanDataValues.
void writeAggregated(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes aggregate of all edge values into the given stream.
Definition: MSMeanData.cpp:552
void init()
Adds the value collectors to all relevant edges.
Definition: MSMeanData.cpp:443
const double myMinSamples
the minimum sample seconds
Definition: MSMeanData.h:476
void resetOnly(SUMOTime stopTime)
Resets network value in order to allow processing of the next interval.
Definition: MSMeanData.cpp:521
const long long int myWrittenAttributes
bit mask for checking attributes to be written
Definition: MSMeanData.h:515
const bool myPrintDefaults
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:506
virtual std::vector< std::string > getAttributeNames() const
return all attributes that are (potentially) written by this output
Definition: MSMeanData.h:387
MSMeanData(const MSMeanData &)
Invalidated copy constructor.
std::map< const MSEdge *, int > myEdgeIndex
The index in myEdges / myMeasures.
Definition: MSMeanData.h:503
const bool myAmEdgeBased
Information whether the output shall be edge-based (not lane-based)
Definition: MSMeanData.h:488
SUMOTime myInitTime
time at which init was called();
Definition: MSMeanData.h:497
const double myMaxTravelTime
the maximum travel time to write
Definition: MSMeanData.h:479
const SUMOTime myDumpEnd
Definition: MSMeanData.h:494
std::list< std::pair< SUMOTime, SUMOTime > > myPendingIntervals
The intervals for which output still has to be generated (only in the tracking case)
Definition: MSMeanData.h:521
const std::vector< MeanDataValues * > * getEdgeValues(const MSEdge *edge) const
Definition: MSMeanData.cpp:777
void writeEdge(OutputDevice &dev, const std::vector< MeanDataValues * > &edgeValues, const MSEdge *const edge, SUMOTime startTime, SUMOTime stopTime)
Writes edge values into the given stream.
Definition: MSMeanData.cpp:596
virtual std::string getEdgeID(const MSEdge *const edge)
Return the relevant edge id.
Definition: MSMeanData.cpp:546
static long long int initWrittenAttributes(const std::string writeAttributes, const std::string &id)
Definition: MSMeanData.cpp:762
virtual void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "netstats" as root element.
Definition: MSMeanData.cpp:748
const bool myDumpEmpty
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:485
MSEdgeVector myEdges
The corresponding first edges.
Definition: MSMeanData.h:500
MSMeanData(const std::string &id, const SUMOTime dumpBegin, const SUMOTime dumpEnd, const bool useLanes, const bool withEmpty, const bool printDefaults, const bool withInternal, const bool trackVehicles, const int detectPersons, const double minSamples, const double maxTravelTime, const std::string &vTypes, const std::string &writeAttributes, const std::vector< MSEdge * > &edges, bool aggregate)
Constructor.
Definition: MSMeanData.cpp:413
virtual void openInterval(OutputDevice &dev, const SUMOTime startTime, const SUMOTime stopTime)
Writes the interval opener.
Definition: MSMeanData.cpp:680
std::vector< std::vector< MeanDataValues * > > myMeasures
Value collectors; sorted by edge, then by lane.
Definition: MSMeanData.h:482
virtual bool writePrefix(OutputDevice &dev, const MeanDataValues &values, const SumoXMLTag tag, const std::string id) const
Checks for emptiness and writes prefix into the given stream.
Definition: MSMeanData.cpp:687
const bool myTrackVehicles
Whether vehicles are tracked.
Definition: MSMeanData.h:512
MSMeanData & operator=(const MSMeanData &)
Invalidated assignment operator.
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
Representation of a vehicle, person, or container.