Eclipse 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-2020 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
21 // A detector of vehicles passing an area between entry/exit points
22 /****************************************************************************/
23 #pragma once
24 #include <config.h>
25 
26 #include <string>
27 #include <vector>
28 #include <limits>
31 #include <utils/common/Named.h>
34 #ifdef HAVE_FOX
35 #include <fx.h>
36 #endif
37 
38 
39 // ===========================================================================
40 // class declarations
41 // ===========================================================================
42 class SUMOTrafficObject;
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(SUMOTrafficObject& veh, Notification reason, const MSLane* enteredLane);
87 
103  bool notifyMove(SUMOTrafficObject& veh, double, double newPos, double);
104 
105 
116  bool notifyLeave(SUMOTrafficObject& 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(SUMOTrafficObject& veh, Notification reason, const MSLane* enteredLane);
165 
181  bool notifyMove(SUMOTrafficObject& veh, double oldPos, double newPos, double);
182 
192  bool notifyLeave(SUMOTrafficObject& 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 SUMOTrafficObject& veh, const double entryTimestep, const double fractionTimeOnDet, MSE3EntryReminder* entryReminder);
248 
249 
255  void leaveFront(const SUMOTrafficObject& veh, const double leaveTimestep);
256 
257 
266  void leave(const SUMOTrafficObject& 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 
342  virtual void clearState();
343 
344 protected:
347 
350 
352  std::vector<MSE3EntryReminder*> myEntryReminders;
353 
355  std::vector<MSE3LeaveReminder*> myLeaveReminders;
356 
357 
358  // @brief Time-threshold to determine if a vehicle is halting.
360 
363 
372  struct E3Values {
374  double entryTime;
380  double speedSum;
382  int haltings;
394  bool hadUpdate;
397  };
398 
400  std::map<const SUMOTrafficObject*, E3Values> myEnteredContainer;
401 
403  std::vector<E3Values> myLeftContainer;
404 
405 #ifdef HAVE_FOX
407  FXMutex myContainerMutex;
408 #endif
409 
412 
415 
419 
420 
423 
425  const bool myOpenEntry;
426 
427 private:
430 
433 
434 
435 };
std::vector< MSCrossSection > CrossSectionVector
long long int SUMOTime
Definition: SUMOTime.h:31
A simple description of a position on a lane (crossing of a lane)
Base of value-generating classes (detectors)
A place on the road net (at a certain lane and position on it) where the E3 area begins.
Definition: MSE3Collector.h:64
bool notifyMove(SUMOTrafficObject &veh, double, double newPos, double)
Checks whether the vehicle enters.
MSE3EntryReminder & operator=(const MSE3EntryReminder &)
Invalidated assignment operator.
MSE3EntryReminder(const MSCrossSection &crossSection, MSE3Collector &collector)
Constructor.
double myPosition
The position on the lane.
MSE3Collector & myCollector
The parent collector.
bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Processes state changes of a vehicle.
MSE3EntryReminder(const MSE3EntryReminder &)
Invalidated copy constructor.
bool notifyEnter(SUMOTrafficObject &veh, Notification reason, const MSLane *enteredLane)
Checks whether the reminder is activated by a vehicle entering the lane.
A place on the road net (at a certain lane and position on it) where the E3 area ends.
MSE3LeaveReminder & operator=(const MSE3LeaveReminder &)
Invalidated assignment operator.
MSE3LeaveReminder(const MSCrossSection &crossSection, MSE3Collector &collector)
Constructor.
bool notifyEnter(SUMOTrafficObject &veh, Notification reason, const MSLane *enteredLane)
Checks whether the reminder is activated by a vehicle entering the lane.
MSE3Collector & myCollector
The parent collector.
bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double)
Checks whether the vehicle leaves.
double myPosition
The position on the lane.
MSE3LeaveReminder(const MSE3LeaveReminder &)
Invalidated copy constructor.
bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Processes state changes of a vehicle.
A detector of vehicles passing an area between entry/exit points.
Definition: MSE3Collector.h:58
std::vector< E3Values > myLeftContainer
Container for vehicles that have left the area.
std::map< const SUMOTrafficObject *, E3Values > myEnteredContainer
Container for vehicles that have entered the area.
double myHaltingSpeedThreshold
Speed-threshold to determine if a vehicle is halting.
double myCurrentMeanSpeed
The current mean speed of known vehicles (inside)
virtual void clearState()
Remove all vehicles before quick-loading state.
void reset()
Resets all generated values to allow computation of next interval.
CrossSectionVector myExits
The detector's exits.
int myCurrentHaltingsNumber
The current number of haltings (inside)
void enter(const SUMOTrafficObject &veh, const double entryTimestep, const double fractionTimeOnDet, MSE3EntryReminder *entryReminder)
Called if a vehicle touches an entry-cross-section.
SUMOTime myLastResetTime
Information when the last reset has been done.
int getVehiclesWithin() const
Returns the number of vehicles within the area.
std::vector< MSE3EntryReminder * > myEntryReminders
The detector's built entry reminder.
const bool myOpenEntry
whether this dector is declared as having incomplete entry detectors
void leave(const SUMOTrafficObject &veh, const double leaveTimestep, const double fractionTimeOnDet)
Called if a vehicle back passes a leave-cross-section.
std::vector< MSE3LeaveReminder * > myLeaveReminders
The detector's built exit reminder.
std::vector< std::string > getCurrentVehicleIDs() const
Returns the number of vehicles within the area.
virtual ~MSE3Collector()
Destructor.
void writeXMLDetectorProlog(OutputDevice &dev) const
Opens the XML-output using "e3Detector" as root element.
double getCurrentMeanSpeed() const
Returns the mean speed within the area.
MSE3Collector & operator=(const MSE3Collector &)
Invalidated assignment operator.
MSE3Collector(const MSE3Collector &)
Invalidated copy constructor.
int getCurrentHaltingNumber() const
Returns the number of current haltings within the area.
void detectorUpdate(const SUMOTime step)
Computes the detector values in each time step.
MSE3Collector(const std::string &id, const CrossSectionVector &entries, const CrossSectionVector &exits, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string &vTypes, bool openEntry)
Constructor.
SUMOTime myHaltingTimeThreshold
CrossSectionVector myEntries
The detector's entries.
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Writes collected values into the given stream.
void leaveFront(const SUMOTrafficObject &veh, const double leaveTimestep)
Called if a vehicle front passes a leave-cross-section.
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:60
An upper class for objects with additional parameters.
Definition: Parameterised.h:39
Representation of a vehicle, person, or container.
Internal storage for values from a vehicle.
int intervalHaltings
The sum of haltings the vehicle has/had within the area during the current interval.
MSE3EntryReminder * entryReminder
the reminder on which the vehicle entered the detector
SUMOTime timeLoss
The timeLoss of the vehicle when entering. Updated to the actual time loss within the area when leavi...
double frontLeaveTime
The time the vehicle's front was crossing the leave line.
double entryTime
The vehicle's entry time.
SUMOTime intervalTimeLoss
The timeLoss of the vehicle when entering. Updated to the current timeLoss at interval write.
double speedSum
The sum of registered speeds the vehicle has/had inside the area.
bool hadUpdate
An internal information whether the update step was performed.
SUMOTime haltingBegin
Begin time of last halt begin.
double intervalSpeedSum
The sum of registered speeds the vehicle has/had inside the area during the current interval.
int haltings
The sum of haltings the vehicle has/had within the area.
double backLeaveTime
The time the vehicle's back was crossing the leave line.