SUMO - Simulation of Urban MObility
MSE3Collector.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2003-2018 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // A detector of vehicles passing an area between entry/exit points
19 /****************************************************************************/
20 #ifndef MSE3Collector_h
21 #define MSE3Collector_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <string>
30 #include <vector>
31 #include <limits>
34 #include <utils/common/Named.h>
37 
38 
39 // ===========================================================================
40 // class declarations
41 // ===========================================================================
42 class SUMOVehicle;
43 class OutputDevice;
44 
45 
46 // ===========================================================================
47 // class definitions
48 // ===========================================================================
59 public:
65  public:
71  MSE3EntryReminder(const MSCrossSection& crossSection, MSE3Collector& collector);
72 
73 
76 
86  bool notifyEnter(SUMOVehicle& veh, Notification reason, const MSLane* enteredLane);
87 
103  bool notifyMove(SUMOVehicle& veh, double , double newPos, double);
104 
105 
116  bool notifyLeave(SUMOVehicle& veh, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
118 
119 
120  private:
123 
125  double myPosition;
126 
127  private:
130 
133 
134  };
135 
136 
137 
143  public:
149  MSE3LeaveReminder(const MSCrossSection& crossSection, MSE3Collector& collector);
150 
151 
153 
154 
164  bool notifyEnter(SUMOVehicle& veh, Notification reason, const MSLane* enteredLane);
165 
181  bool notifyMove(SUMOVehicle& veh, double oldPos, double newPos, double);
182 
192  bool notifyLeave(SUMOVehicle& veh, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
194 
195 
196  private:
199 
201  double myPosition;
202 
203  private:
206 
209 
210  };
211 
212 
223  MSE3Collector(const std::string& id,
224  const CrossSectionVector& entries, const CrossSectionVector& exits,
225  double haltingSpeedThreshold,
226  SUMOTime haltingTimeThreshold,
227  const std::string& vTypes, bool openEntry);
228 
229 
231  virtual ~MSE3Collector();
232 
233 
236  void reset();
237 
238 
247  void enter(const SUMOVehicle& veh, const double entryTimestep, const double fractionTimeOnDet);
248 
249 
255  void leaveFront(const SUMOVehicle& veh, const double leaveTimestep);
256 
257 
266  void leave(const SUMOVehicle& veh, const double leaveTimestep, const double fractionTimeOnDet);
267 
268 
271 
278  double getCurrentMeanSpeed() const;
279 
280 
287  int getCurrentHaltingNumber() const;
288 
289 
293  int getVehiclesWithin() const;
294 
295 
300  std::vector<std::string> getCurrentVehicleIDs() const;
302 
303 
306 
315  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
316 
317 
326  void writeXMLDetectorProlog(OutputDevice& dev) const;
328 
329 
330 
339  void detectorUpdate(const SUMOTime step);
340 
341 
342 protected:
345 
348 
350  std::vector<MSE3EntryReminder*> myEntryReminders;
351 
353  std::vector<MSE3LeaveReminder*> myLeaveReminders;
354 
355 
356  // @brief Time-threshold to determine if a vehicle is halting.
358 
361 
370  struct E3Values {
372  double entryTime;
378  double speedSum;
380  int haltings;
382  double haltingBegin;
392  bool hadUpdate;
393  };
394 
396  std::map<const SUMOVehicle*, E3Values> myEnteredContainer;
397 
399  std::vector<E3Values> myLeftContainer;
400 
401 
404 
407 
411 
412 
415 
417  const bool myOpenEntry;
418 
419 private:
422 
425 
426 
427 };
428 
429 
430 #endif
431 
432 /****************************************************************************/
433 
double intervalSpeedSum
The sum of registered speeds the vehicle has/had inside the area during the current interval...
long long int SUMOTime
Definition: SUMOTime.h:36
bool notifyMove(SUMOVehicle &veh, double, double newPos, double)
Checks whether the vehicle enters.
int haltings
The sum of haltings the vehicle has/had within the area.
int getCurrentHaltingNumber() const
Returns the number of current haltings within the area.
void enter(const SUMOVehicle &veh, const double entryTimestep, const double fractionTimeOnDet)
Called if a vehicle touches an entry-cross-section.
virtual ~MSE3Collector()
Destructor.
A simple description of a position on a lane (crossing of a lane)
std::vector< MSE3EntryReminder * > myEntryReminders
The detector&#39;s built entry reminder.
bool hadUpdate
An internal information whether the update step was performed.
A place on the road net (at a certain lane and position on it) where the E3 area ends.
MSE3EntryReminder(const MSCrossSection &crossSection, MSE3Collector &collector)
Constructor.
A place on the road net (at a certain lane and position on it) where the E3 area begins.
Definition: MSE3Collector.h:64
double myHaltingSpeedThreshold
Speed-threshold to determine if a vehicle is halting.
Notification
Definition of a vehicle state.
std::vector< MSCrossSection > CrossSectionVector
double frontLeaveTime
The time the vehicle&#39;s front was crossing the leave line.
double myCurrentMeanSpeed
The current mean speed of known vehicles (inside)
SUMOTime myLastResetTime
Information when the last reset has been done.
std::vector< std::string > getCurrentVehicleIDs() const
Returns the number of vehicles within the area.
std::vector< MSE3LeaveReminder * > myLeaveReminders
The detector&#39;s built exit reminder.
bool notifyLeave(SUMOVehicle &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Processes state changes of a vehicle.
double backLeaveTime
The time the vehicle&#39;s back was crossing the leave line.
MSE3EntryReminder & operator=(const MSE3EntryReminder &)
Invalidated assignment operator.
int myCurrentHaltingsNumber
The current number of haltings (inside)
Representation of a vehicle.
Definition: SUMOVehicle.h:60
std::map< const SUMOVehicle *, E3Values > myEnteredContainer
Container for vehicles that have entered the area.
Internal storage for values from a vehicle.
double entryTime
The vehicle&#39;s entry time.
double getCurrentMeanSpeed() const
Returns the mean speed within the area.
SUMOTime myHaltingTimeThreshold
MSE3Collector(const std::string &id, const CrossSectionVector &entries, const CrossSectionVector &exits, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string &vTypes, bool openEntry)
Constructor.
const bool myOpenEntry
whether this dector is declared as having incomplete entry detectors
MSE3Collector & myCollector
The parent collector.
Something on a lane to be noticed about vehicle movement.
void leaveFront(const SUMOVehicle &veh, const double leaveTimestep)
Called if a vehicle front passes a leave-cross-section.
void leave(const SUMOVehicle &veh, const double leaveTimestep, const double fractionTimeOnDet)
Called if a vehicle back passes a leave-cross-section.
std::vector< E3Values > myLeftContainer
Container for vehicles that have left the area.
SUMOTime intervalTimeLoss
The timeLoss of the vehicle when entering. Updated to the current timeLoss at interval write...
CrossSectionVector myEntries
The detector&#39;s entries.
double myPosition
The position on the lane.
double speedSum
The sum of registered speeds the vehicle has/had inside the area.
void reset()
Resets all generated values to allow computation of next interval.
A detector of vehicles passing an area between entry/exit points.
Definition: MSE3Collector.h:58
bool notifyEnter(SUMOVehicle &veh, Notification reason, const MSLane *enteredLane)
Checks whether the reminder is activated by a vehicle entering the lane.
int intervalHaltings
The sum of haltings the vehicle has/had within the area during the current interval.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
int getVehiclesWithin() const
Returns the number of vehicles within the area.
void detectorUpdate(const SUMOTime step)
Computes the detector values in each time step.
Representation of a lane in the micro simulation.
Definition: MSLane.h:71
double haltingBegin
Begin time of last halt begin.
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
MSE3Collector & myCollector
The parent collector.
SUMOTime timeLoss
The timeLoss of the vehicle when entering. Updated to the actual time loss within the area when leavi...
Base of value-generating classes (detectors)
double myPosition
The position on the lane.
CrossSectionVector myExits
The detector&#39;s exits.
void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "e3Detector" as root element.