SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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-2015 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 
285 
288 
291  };
292 
294  std::map<SUMOVehicle*, TrackerEntry*> myTrackedData;
295 
297  std::list<TrackerEntry*> myCurrentData;
298 
301 
302  };
303 
304 
305 public:
320  MSMeanData(const std::string& id,
321  const SUMOTime dumpBegin, const SUMOTime dumpEnd,
322  const bool useLanes, const bool withEmpty,
323  const bool printDefaults, const bool withInternal,
324  const bool trackVehicles, const SUMOReal minSamples,
325  const SUMOReal maxTravelTime,
326  const std::set<std::string> vTypes);
327 
328 
330  virtual ~MSMeanData();
331 
334  void init();
335 
338 
353  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
354 
361  virtual void writeXMLDetectorProlog(OutputDevice& dev) const;
363 
366  virtual void detectorUpdate(const SUMOTime step);
367 
368 
369 protected:
375  virtual MSMeanData::MeanDataValues* createValues(MSLane* const lane, const SUMOReal length, const bool doAdd) const = 0;
376 
382  void resetOnly(SUMOTime stopTime);
383 
388  virtual std::string getEdgeID(const MSEdge* const edge);
389 
404  void writeEdge(OutputDevice& dev, const std::vector<MeanDataValues*>& edgeValues,
405  MSEdge* edge, SUMOTime startTime, SUMOTime stopTime);
406 
413  virtual void openInterval(OutputDevice& dev, const SUMOTime startTime, const SUMOTime stopTime);
414 
424  virtual bool writePrefix(OutputDevice& dev, const MeanDataValues& values,
425  const SumoXMLTag tag, const std::string id) const;
426 
427 protected:
430 
433 
435  const std::set<std::string> myVehicleTypes;
436 
438  std::vector<std::vector<MeanDataValues*> > myMeasures;
439 
441  const bool myDumpEmpty;
442 
443 private:
445  const bool myAmEdgeBased;
446 
449 
452 
454  const bool myPrintDefaults;
455 
457  const bool myDumpInternal;
458 
460  const bool myTrackVehicles;
461 
463  std::list< std::pair<SUMOTime, SUMOTime> > myPendingIntervals;
464 
465 private:
467  MSMeanData(const MSMeanData&);
468 
471 
472 };
473 
474 
475 #endif
476 
477 /****************************************************************************/
478 
Data collector for edges/lanes.
Definition: MSMeanData.h:67
virtual ~MeanDataValueTracker()
Destructor.
Definition: MSMeanData.cpp:159
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
std::vector< std::vector< MeanDataValues * > > myMeasures
Value collectors; sorted by edge, then by lane.
Definition: MSMeanData.h:438
MeanDataValues(MSLane *const lane, const SUMOReal length, const bool doAdd, const std::set< std::string > *const vTypes=0)
Constructor.
Definition: MSMeanData.cpp:63
const bool myDumpInternal
Whether internal lanes/edges shall be written.
Definition: MSMeanData.h:457
const SUMOTime myDumpEnd
Definition: MSMeanData.h:448
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:432
Notification
Definition of a vehicle state.
MeanDataValues * myValues
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:290
bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason)
Computes current values and adds them to their sums.
Definition: MSMeanData.cpp:195
const std::set< std::string > myVehicleTypes
The vehicle types to look for (empty means all)
Definition: MSMeanData.h:435
MSMeanData & operator=(const MSMeanData &)
Invalidated assignment operator.
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:440
const MSMeanData * myParent
The meandata parent.
Definition: MSMeanData.h:300
TrackerEntry(MeanDataValues *const values)
Constructor.
Definition: MSMeanData.h:280
std::list< TrackerEntry * > myCurrentData
The currently active meandata "intervals".
Definition: MSMeanData.h:297
A road/street connecting two junctions.
Definition: MSEdge.h:81
const bool myPrintDefaults
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:454
MeanDataValueTracker(MSLane *const lane, const SUMOReal length, const std::set< std::string > *const vTypes=0, const MSMeanData *const parent=0)
Constructor.
Definition: MSMeanData.cpp:150
virtual bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, MSMoveReminder::Notification reason)
Called if the vehicle leaves the reminder's lane.
Definition: MSMeanData.cpp:113
int myNumVehicleLeft
The number of vehicles which left in the current interval.
Definition: MSMeanData.h:287
Representation of a vehicle.
Definition: SUMOVehicle.h:65
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:451
const bool myAmEdgeBased
Information whether the output shall be edge-based (not lane-based)
Definition: MSMeanData.h:445
virtual bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason)
Called if the vehicle enters the reminder's lane.
Definition: MSMeanData.cpp:78
virtual bool isEmpty() const
Returns whether any data was collected.
Definition: MSMeanData.cpp:131
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:489
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:448
virtual ~MSMeanData()
Destructor.
Definition: MSMeanData.cpp:323
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:85
const SUMOReal myMinSamples
the minimum sample seconds
Definition: MSMeanData.h:429
void notifyMoveInternal(SUMOVehicle &veh, SUMOReal timeOnLane, SUMOReal speed)
Internal notification about the vehicle moves.
Definition: MSMeanData.cpp:180
bool isEmpty() const
Returns whether any data was collected.
Definition: MSMeanData.cpp:214
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:433
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:254
void addTo(MSMeanData::MeanDataValues &val) const
Add the values of this to the given one and store them there.
Definition: MSMeanData.cpp:174
virtual ~MeanDataValues()
Destructor.
Definition: MSMeanData.cpp:73
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
Definition: MSMeanData.cpp:450
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:463
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:365
virtual void update()
Called if a per timestep update is needed. Default does nothing.
Definition: MSMeanData.cpp:137
int myNumVehicleEntered
The number of vehicles which entered in the current interval.
Definition: MSMeanData.h:284
int SUMOTime
Definition: SUMOTime.h:43
std::map< SUMOVehicle *, TrackerEntry * > myTrackedData
The map of vehicles to data entries.
Definition: MSMeanData.h:294
void write(OutputDevice &dev, const SUMOTime period, const SUMOReal numLanes, const SUMOReal defaultTravelTime, const int numVehicles=-1) const
Writes output values into the given stream.
Definition: MSMeanData.cpp:220
virtual void detectorUpdate(const SUMOTime step)
Updates the detector.
Definition: MSMeanData.cpp:495
SUMOReal getSamples() const
Returns the number of collected sample seconds.
Definition: MSMeanData.cpp:246
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
#define SUMOReal
Definition: config.h:218
virtual SUMOReal getSamples() const
Returns the number of collected sample seconds.
Definition: MSMeanData.cpp:142
bool vehicleApplies(const SUMOVehicle &veh) const
Tests whether the vehicles type is to be regarded.
Definition: MSMeanData.cpp:124
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:78
void resetOnly(SUMOTime stopTime)
Resets network value in order to allow processing of the next interval.
Definition: MSMeanData.cpp:333
const bool myDumpEmpty
Whether empty lanes/edges shall be written.
Definition: MSMeanData.h:441
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:460
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
virtual std::string getEdgeID(const MSEdge *const edge)
Return the relevant edge id.
Definition: MSMeanData.cpp:359
Base of value-generating classes (detectors)
bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, MSMoveReminder::Notification reason)
Called if the vehicle leaves the reminder's lane.
Definition: MSMeanData.cpp:186
void init()
Adds the value collectors to all relevant edges.
Definition: MSMeanData.cpp:276
void reset(bool afterWrite)
Resets values so they may be used for the next interval.
Definition: MSMeanData.cpp:164