SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSE2Collector.h
Go to the documentation of this file.
1 /****************************************************************************/
12 // An areal (along a single lane) detector
13 /****************************************************************************/
14 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
15 // Copyright (C) 2014 DLR (http://www.dlr.de/) and contributors
16 /****************************************************************************/
17 //
18 // This file is part of SUMO.
19 // SUMO is free software: you can redistribute it and/or modify
20 // it under the terms of the GNU General Public License as published by
21 // the Free Software Foundation, either version 3 of the License, or
22 // (at your option) any later version.
23 //
24 /****************************************************************************/
25 #ifndef MSE2Collector_h
26 #define MSE2Collector_h
27 
28 
29 // ===========================================================================
30 // included modules
31 // ===========================================================================
32 #ifdef _MSC_VER
33 #include <windows_config.h>
34 #else
35 #include <config.h>
36 #endif
37 
38 #include <vector>
39 #include <list>
40 #include <microsim/MSLane.h>
45 
46 
47 // ===========================================================================
48 // class declarations
49 // ===========================================================================
50 class OutputDevice;
51 
52 
53 // ===========================================================================
54 // class definitions
55 // ===========================================================================
80 public:
93  MSE2Collector(const std::string& id, DetectorUsage usage,
94  MSLane* const lane, SUMOReal startPos, SUMOReal detLength,
95  SUMOTime haltingTimeThreshold, SUMOReal haltingSpeedThreshold,
96  SUMOReal jamDistThreshold);
97 
98 
100  virtual ~MSE2Collector();
101 
102 
108  virtual DetectorUsage getUsageType() const {
109  return myUsage;
110  }
111 
112 
113 
116 
132  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos,
133  SUMOReal newSpeed);
134 
135 
147  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, MSMoveReminder::Notification reason);
148 
149 
164 
165 
166 
175  void detectorUpdate(const SUMOTime step);
176 
177 
178 
181 
190  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
191 
192 
199  void writeXMLDetectorProlog(OutputDevice& dev) const;
201 
202 
208  return myStartPos;
209  }
210 
211 
216  SUMOReal getEndPos() const {
217  return myEndPos;
218  }
219 
220 
227  void reset();
228 
229 
232 
234  unsigned getCurrentVehicleNumber() const;
235 
238 
241 
244 
246  unsigned getCurrentJamNumber() const;
247 
249  unsigned getCurrentMaxJamLengthInVehicles() const;
250 
253 
255  unsigned getCurrentJamLengthInVehicles() const;
256 
259 
261  unsigned getCurrentStartedHalts() const;
262 
270 
275  std::vector<std::string> getCurrentVehicleIDs() const;
277 
278 
279 protected:
285  struct JamInfo {
287  std::list<SUMOVehicle*>::const_iterator firstStandingVehicle;
288 
290  std::list<SUMOVehicle*>::const_iterator lastStandingVehicle;
291  };
292 
293 
305  public:
311  : myLane(lane) { }
312 
313 
319  : myLane(s.myLane) { }
320 
321 
328  int operator()(const SUMOVehicle* v1, const SUMOVehicle* v2);
329 
330  private:
331  by_vehicle_position_sorter& operator=(const by_vehicle_position_sorter&); // just to avoid a compiler warning
332  private:
334  const MSLane* const myLane;
335  };
336 
337 
338 private:
341 
353 
356 
358  std::list<SUMOVehicle*> myKnownVehicles;
359 
361  std::map<const SUMOVehicle*, SUMOTime> myHaltingVehicleDurations;
362 
364  std::map<const SUMOVehicle*, SUMOTime> myIntervalHaltingVehicleDurations;
365 
367  std::vector<SUMOTime> myPastStandingDurations;
368 
370  std::vector<SUMOTime> myPastIntervalStandingDurations;
371 
372 
375 
387  unsigned myTimeSamples;
405 
406 
409 
417  unsigned myCurrentJamNo;
431 
432 
433 private:
436 
439 
440 
441 };
442 
443 
444 #endif
445 
446 /****************************************************************************/
447