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-sim.org/
11 // Copyright (C) 2001-2014 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  protected:
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  int 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  virtual 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 
387  virtual std::string getEdgeID(const MSEdge* const edge);
388 
403  void writeEdge(OutputDevice& dev, const std::vector<MeanDataValues*>& edgeValues,
404  MSEdge* edge, SUMOTime startTime, SUMOTime stopTime);
405 
412  virtual void openInterval(OutputDevice& dev, const SUMOTime startTime, const SUMOTime stopTime);
413 
423  virtual bool writePrefix(OutputDevice& dev, const MeanDataValues& values,
424  const SumoXMLTag tag, const std::string id) const;
425 
426 protected:
429 
432 
434  const std::set<std::string> myVehicleTypes;
435 
437  std::vector<std::vector<MeanDataValues*> > myMeasures;
438 
440  const bool myDumpEmpty;
441 
442 private:
444  const bool myAmEdgeBased;
445 
448 
450  std::vector<MSEdge*> myEdges;
451 
453  const bool myPrintDefaults;
454 
456  const bool myDumpInternal;
457 
459  const bool myTrackVehicles;
460 
462  std::list< std::pair<SUMOTime, SUMOTime> > myPendingIntervals;
463 
464 private:
466  MSMeanData(const MSMeanData&);
467 
470 
471 };
472 
473 
474 #endif
475 
476 /****************************************************************************/
477