SUMO - Simulation of Urban MObility
MSMeanData.h
Go to the documentation of this file.
1 /****************************************************************************/
8 // Data collector for edges/lanes
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
11 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 #ifndef MSMeanData_h
22 #define MSMeanData_h
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <vector>
35 #include <set>
36 #include <list>
37 #include <limits>
40 #include <utils/common/SUMOTime.h>
41 
42 
43 // ===========================================================================
44 // class declarations
45 // ===========================================================================
46 class OutputDevice;
47 class MSEdge;
48 class MSLane;
50 
51 typedef std::vector<MSEdge*> MSEdgeVector;
52 
53 // ===========================================================================
54 // class definitions
55 // ===========================================================================
68 public:
76  class MeanDataValues : public MSMoveReminder {
77  public:
79  MeanDataValues(MSLane* const lane, const SUMOReal length, const bool doAdd, const std::set<std::string>* const vTypes = 0);
80 
82  virtual ~MeanDataValues();
83 
84 
87  virtual void reset(bool afterWrite = false) = 0;
88 
93  virtual void addTo(MeanDataValues& val) const = 0;
94 
95 
104  virtual bool notifyEnter(SUMOVehicle& veh, MSMoveReminder::Notification reason);
105 
106 
120  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos,
121  SUMOReal newPos, SUMOReal newSpeed);
122 
123 
132  virtual bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos,
134 
135 
141  bool vehicleApplies(const SUMOVehicle& veh) const;
142 
143 
148  virtual bool isEmpty() const;
149 
150 
153  virtual void update();
154 
162  virtual void write(OutputDevice& dev, const SUMOTime period,
163  const SUMOReal numLanes, const SUMOReal defaultTravelTime,
164  const int numVehicles = -1) const = 0;
165 
169  virtual SUMOReal getSamples() const;
170 
171  protected:
174 
179  public:
183 
184  protected:
186  const std::set<std::string>* const myVehicleTypes;
187 
188  };
189 
190 
196  public:
198  MeanDataValueTracker(MSLane* const lane, const SUMOReal length,
199  const std::set<std::string>* const vTypes = 0,
200  const MSMeanData* const parent = 0);
201 
203  virtual ~MeanDataValueTracker();
204 
207  void reset(bool afterWrite);
208 
213  void addTo(MSMeanData::MeanDataValues& val) const;
214 
217 
228  void notifyMoveInternal(SUMOVehicle& veh, SUMOReal timeOnLane, SUMOReal speed);
229 
230 
240  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
241 
242 
256 
257  bool isEmpty() const;
258 
266  void write(OutputDevice& dev, const SUMOTime period,
267  const SUMOReal numLanes, const SUMOReal defaultTravelTime,
268  const int numVehicles = -1) const;
269 
270  int getNumReady() const;
271 
272  void clearFirst();
273 
274  SUMOReal getSamples() const;
275 
276  private:
277  class TrackerEntry {
278  public:
281  : myNumVehicleEntered(0), myNumVehicleLeft(0), myValues(values) {}
282 
284  virtual ~TrackerEntry() {
285  delete myValues;
286  }
287 
290 
293 
296  };
297 
299  std::map<SUMOVehicle*, TrackerEntry*> myTrackedData;
300 
302  std::list<TrackerEntry*> myCurrentData;
303 
306 
307  };
308 
309 
310 public:
325  MSMeanData(const std::string& id,
326  const SUMOTime dumpBegin, const SUMOTime dumpEnd,
327  const bool useLanes, const bool withEmpty,
328  const bool printDefaults, const bool withInternal,
329  const bool trackVehicles, const SUMOReal minSamples,
330  const SUMOReal maxTravelTime,
331  const std::set<std::string> vTypes);
332 
333 
335  virtual ~MSMeanData();
336 
339  void init();
340 
343 
358  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
359 
366  virtual void writeXMLDetectorProlog(OutputDevice& dev) const;
368 
371  virtual void detectorUpdate(const SUMOTime step);
372 
373 
374 protected:
380  virtual MSMeanData::MeanDataValues* createValues(MSLane* const lane, const SUMOReal length, const bool doAdd) const = 0;
381 
387  void resetOnly(SUMOTime stopTime);
388 
393  virtual std::string getEdgeID(const MSEdge* const edge);
394 
409  void writeEdge(OutputDevice& dev, const std::vector<MeanDataValues*>& edgeValues,
410  MSEdge* edge, SUMOTime startTime, SUMOTime stopTime);
411 
418  virtual void openInterval(OutputDevice& dev, const SUMOTime startTime, const SUMOTime stopTime);
419 
429  virtual bool writePrefix(OutputDevice& dev, const MeanDataValues& values,
430  const SumoXMLTag tag, const std::string id) const;
431 
432 protected:
435 
438 
440  const std::set<std::string> myVehicleTypes;
441 
443  std::vector<std::vector<MeanDataValues*> > myMeasures;
444 
446  const bool myDumpEmpty;
447 
448 private:
450  const bool myAmEdgeBased;
451 
454 
457 
459  const bool myPrintDefaults;
460 
462  const bool myDumpInternal;
463 
465  const bool myTrackVehicles;
466 
468  std::list< std::pair<SUMOTime, SUMOTime> > myPendingIntervals;
469 
470 private:
472  MSMeanData(const MSMeanData&);
473 
476 
477 };
478 
479 
480 #endif
481 
482 /****************************************************************************/
483 
Data collector for edges/lanes.
Definition: MSMeanData.h:67
virtual MSMeanData::MeanDataValues * createValues(MSLane *const lane, const SUMOReal length, const bool doAdd) const =0
Create an instance of MeanDataValues.
SumoXMLTag
Numbers representing SUMO-XML - element names.
const SUMOReal myLaneLength
The length of the lane / edge the data collector is on.
Definition: MSMeanData.h:173
long long int SUMOTime
Definition: SUMOTime.h:43
std::vector< std::vector< MeanDataValues * > > myMeasures
Value collectors; sorted by edge, then by lane.
Definition: MSMeanData.h:443
MeanDataValues(MSLane *const lane, const SUMOReal length, const bool doAdd, const std::set< std::string > *const vTypes=0)
Constructor.
Definition: MSMeanData.cpp:61
const bool myDumpInternal
Whether internal lanes/edges shall be written.
Definition: MSMeanData.h:462
virtual ~TrackerEntry()
Constructor.
Definition: MSMeanData.h:284
const SUMOTime myDumpEnd
Definition: MSMeanData.h:453
const std::set< std::string > *const myVehicleTypes
The vehicle types to look for (0 or empty means all)
Definition: MSMeanData.h:186
SUMOReal travelledDistance
The sum of the distances the vehicles travelled.
Definition: MSMeanData.h:181
const SUMOReal myMaxTravelTime
the maximum travel time to write
Definition: MSMeanData.h:437
Notification
Definition of a vehicle state.
MeanDataValues * myValues
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:295
const std::set< std::string > myVehicleTypes
The vehicle types to look for (empty means all)
Definition: MSMeanData.h:440
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:446
const MSMeanData * myParent
The meandata parent.
Definition: MSMeanData.h:305
TrackerEntry(MeanDataValues *const values)
Constructor.
Definition: MSMeanData.h:280
std::list< TrackerEntry * > myCurrentData
The currently active meandata "intervals".
Definition: MSMeanData.h:302
A road/street connecting two junctions.
Definition: MSEdge.h:80
const bool myPrintDefaults
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:459
virtual bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, MSMoveReminder::Notification reason)
Called if the vehicle leaves the reminder&#39;s lane.
Definition: MSMeanData.cpp:111
int myNumVehicleLeft
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:292
Representation of a vehicle.
Definition: SUMOVehicle.h:66
Data structure for mean (aggregated) edge/lane values.
Definition: MSMeanData.h:76
Definition: MSMeanData.h:277
MSEdgeVector myEdges
The corresponding first edges.
Definition: MSMeanData.h:456
const bool myAmEdgeBased
Information whether the output shall be edge-based (not lane-based)
Definition: MSMeanData.h:450
virtual bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason)
Called if the vehicle enters the reminder&#39;s lane.
Definition: MSMeanData.cpp:76
virtual bool isEmpty() const
Returns whether any data was collected.
Definition: MSMeanData.cpp:127
std::vector< MSEdge * > MSEdgeVector
Definition: MSMeanData.h:49
virtual void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "netstats" as root element.
Definition: MSMeanData.cpp:495
virtual void write(OutputDevice &dev, const SUMOTime period, const SUMOReal numLanes, const SUMOReal defaultTravelTime, const int numVehicles=-1) const =0
Writes output values into the given stream.
Something on a lane to be noticed about vehicle movement.
const SUMOTime myDumpBegin
The first and the last time step to write information (-1 indicates always)
Definition: MSMeanData.h:453
virtual void notifyMoveInternal(SUMOVehicle &veh, SUMOReal timeOnLane, SUMOReal speed)
Internal notification about the vehicle moves.
virtual ~MSMeanData()
Destructor.
Definition: MSMeanData.cpp:333
bool notifyMove(SUMOVehicle &veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed)
Checks whether the reminder still has to be notified about the vehicle moves.
Definition: MSMeanData.cpp:83
const SUMOReal myMinSamples
the minimum sample seconds
Definition: MSMeanData.h:434
virtual void addTo(MeanDataValues &val) const =0
Add the values of this to the given one and store them there.
virtual void openInterval(OutputDevice &dev, const SUMOTime startTime, const SUMOTime stopTime)
Writes the interval opener.
Definition: MSMeanData.cpp:439
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 SUMOReal minSamples, const SUMOReal maxTravelTime, const std::set< std::string > vTypes)
Constructor.
Definition: MSMeanData.cpp:264
virtual ~MeanDataValues()
Destructor.
Definition: MSMeanData.cpp:71
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
Definition: MSMeanData.cpp:456
virtual void reset(bool afterWrite=false)=0
Resets values so they may be used for the next interval.
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:468
void writeEdge(OutputDevice &dev, const std::vector< MeanDataValues * > &edgeValues, MSEdge *edge, SUMOTime startTime, SUMOTime stopTime)
Writes edge values into the given stream.
Definition: MSMeanData.cpp:373
virtual void update()
Called if a per timestep update is needed. Default does nothing.
Definition: MSMeanData.cpp:133
int myNumVehicleEntered
The number of vehicles which entered in the current interval.
Definition: MSMeanData.h:289
std::map< SUMOVehicle *, TrackerEntry * > myTrackedData
The map of vehicles to data entries.
Definition: MSMeanData.h:299
MSMoveReminder & operator=(const MSMoveReminder &)
virtual void detectorUpdate(const SUMOTime step)
Updates the detector.
Definition: MSMeanData.cpp:501
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
#define SUMOReal
Definition: config.h:213
virtual SUMOReal getSamples() const
Returns the number of collected sample seconds.
Definition: MSMeanData.cpp:138
bool vehicleApplies(const SUMOVehicle &veh) const
Tests whether the vehicles type is to be regarded.
Definition: MSMeanData.cpp:120
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:77
void resetOnly(SUMOTime stopTime)
Resets network value in order to allow processing of the next interval.
Definition: MSMeanData.cpp:343
const bool myDumpEmpty
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:446
Data structure for mean (aggregated) edge/lane values for tracked vehicles.
Definition: MSMeanData.h:195
const bool myTrackVehicles
Whether vehicles are tracked.
Definition: MSMeanData.h:465
Representation of a lane in the micro simulation.
Definition: MSLane.h:79
virtual std::string getEdgeID(const MSEdge *const edge)
Return the relevant edge id.
Definition: MSMeanData.cpp:367
Base of value-generating classes (detectors)
void init()
Adds the value collectors to all relevant edges.
Definition: MSMeanData.cpp:286