SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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.sourceforge.net/
11 // Copyright (C) 2001-2012 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;
49 class SUMOVehicle;
50 
51 
52 // ===========================================================================
53 // class definitions
54 // ===========================================================================
67 public:
75  class MeanDataValues : public MSMoveReminder {
76  public:
78  MeanDataValues(MSLane* const lane, const SUMOReal length, const bool doAdd, const std::set<std::string>* const vTypes = 0);
79 
81  virtual ~MeanDataValues();
82 
83 
86  virtual void reset(bool afterWrite = false) = 0;
87 
92  virtual void addTo(MeanDataValues& val) const = 0;
93 
94 
103  virtual bool notifyEnter(SUMOVehicle& veh, MSMoveReminder::Notification reason);
104 
105 
119  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos,
120  SUMOReal newPos, SUMOReal newSpeed);
121 
122 
131  virtual bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos,
133 
134 
140  bool vehicleApplies(const SUMOVehicle& veh) const;
141 
142 
147  virtual bool isEmpty() const;
148 
149 
152  virtual void update();
153 
161  virtual void write(OutputDevice& dev, const SUMOTime period,
162  const SUMOReal numLanes, const SUMOReal defaultTravelTime,
163  const int numVehicles = -1) const = 0;
164 
168  virtual SUMOReal getSamples() const;
169 
170  protected:
173 
178  public:
182 
183  private:
185  const std::set<std::string>* const myVehicleTypes;
186 
187  };
188 
189 
195  public:
197  MeanDataValueTracker(MSLane* const lane, const SUMOReal length,
198  const std::set<std::string>* const vTypes = 0,
199  const MSMeanData* const parent = 0);
200 
202  virtual ~MeanDataValueTracker();
203 
206  void reset(bool afterWrite);
207 
212  void addTo(MSMeanData::MeanDataValues& val) const;
213 
216 
227  void notifyMoveInternal(SUMOVehicle& veh, SUMOReal timeOnLane, SUMOReal speed);
228 
229 
239  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
240 
241 
255 
256  bool isEmpty() const;
257 
265  void write(OutputDevice& dev, const SUMOTime period,
266  const SUMOReal numLanes, const SUMOReal defaultTravelTime,
267  const int numVehicles = -1) const;
268 
269  size_t getNumReady() const;
270 
271  void clearFirst();
272 
273  SUMOReal getSamples() const;
274 
275  private:
276  class TrackerEntry {
277  public:
280  : myNumVehicleEntered(0), myNumVehicleLeft(0), myValues(values) {}
281 
284 
287 
290  };
291 
293  std::map<SUMOVehicle*, TrackerEntry*> myTrackedData;
294 
296  std::list<TrackerEntry*> myCurrentData;
297 
300 
301  };
302 
303 
304 public:
319  MSMeanData(const std::string& id,
320  const SUMOTime dumpBegin, const SUMOTime dumpEnd,
321  const bool useLanes, const bool withEmpty,
322  const bool printDefaults, const bool withInternal,
323  const bool trackVehicles, const SUMOReal minSamples,
324  const SUMOReal maxTravelTime,
325  const std::set<std::string> vTypes);
326 
327 
329  virtual ~MSMeanData();
330 
333  void init();
334 
337 
352  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
353 
360  void writeXMLDetectorProlog(OutputDevice& dev) const;
362 
365  virtual void detectorUpdate(const SUMOTime step);
366 
367 
368 protected:
374  virtual MSMeanData::MeanDataValues* createValues(MSLane* const lane, const SUMOReal length, const bool doAdd) const = 0;
375 
381  void resetOnly(SUMOTime stopTime);
382 
397  void writeEdge(OutputDevice& dev, const std::vector<MeanDataValues*>& edgeValues,
398  MSEdge* edge, SUMOTime startTime, SUMOTime stopTime);
399 
409  bool writePrefix(OutputDevice& dev, const MeanDataValues& values,
410  const SumoXMLTag tag, const std::string id) const;
411 
412 protected:
415 
418 
420  const std::set<std::string> myVehicleTypes;
421 
423  std::vector<std::vector<MeanDataValues*> > myMeasures;
424 
425 private:
427  const bool myAmEdgeBased;
428 
431 
433  std::vector<MSEdge*> myEdges;
434 
436  const bool myDumpEmpty;
437 
439  const bool myPrintDefaults;
440 
442  const bool myDumpInternal;
443 
445  const bool myTrackVehicles;
446 
448  std::list< std::pair<SUMOTime, SUMOTime> > myPendingIntervals;
449 
450 private:
452  MSMeanData(const MSMeanData&);
453 
456 
457 };
458 
459 
460 #endif
461 
462 /****************************************************************************/
463