Eclipse SUMO - Simulation of Urban MObility
NLDetectorBuilder.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2022 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 // Builds detectors for microsim
22 /****************************************************************************/
23 #pragma once
24 #include <config.h>
25 
26 #include <string>
30 // #include <microsim/output/MSMultiLaneE2Collector.h>
31 
32 // ===========================================================================
33 // class declarations
34 // ===========================================================================
36 class MSLane;
37 class MSEdge;
38 
39 class MEInductLoop;
40 class MESegment;
41 
42 
43 // ===========================================================================
44 // class definitions
45 // ===========================================================================
54 public:
60 
61 
63  virtual ~NLDetectorBuilder();
64 
65 
68 
90  Parameterised* buildInductLoop(const std::string& id,
91  const std::string& lane, double pos, SUMOTime splInterval,
92  const std::string& device, bool friendlyPos,
93  const std::string& vTypes, int detectPersons);
94 
95 
112  Parameterised* buildInstantInductLoop(const std::string& id,
113  const std::string& lane, double pos,
114  const std::string& device, bool friendlyPos,
115  const std::string& vTypes);
116 
117 
118 
119 
131  Parameterised* buildE2Detector(const std::string& id, MSLane* lane, double pos, double endPos, double length,
132  const std::string& device, SUMOTime frequency,
133  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
134  const std::string& vTypes, int detectPersons, bool friendlyPos, bool showDetector,
135  MSTLLogicControl::TLSLogicVariants* tlls = 0, MSLane* toLane = 0);
136 
137  Parameterised* buildE2Detector(const std::string& id, std::vector<MSLane*> lanes, double pos, double endPos,
138  const std::string& device, SUMOTime frequency,
139  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
140  const std::string& vTypes, int detectPersons, bool friendlyPos, bool showDetector,
141  MSTLLogicControl::TLSLogicVariants* tlls = 0, MSLane* toLane = 0);
142 
143 
157  Parameterised* beginE3Detector(const std::string& id, const std::string& device, SUMOTime splInterval,
158  double haltingSpeedThreshold, SUMOTime haltingTimeThreshold,
159  const std::string& vTypes, int detectPersons, bool openEntry);
160 
161 
174  void addE3Entry(const std::string& lane, double pos, bool friendlyPos);
175 
176 
189  void addE3Exit(const std::string& lane, double pos, bool friendlyPos);
190 
191 
201  void endE3Detector();
202 
203 
211  std::string getCurrentE3ID() const;
212 
213 
227  void buildVTypeProbe(const std::string& id,
228  const std::string& vtype, SUMOTime frequency,
229  const std::string& device);
230 
231 
246  void buildRouteProbe(const std::string& id, const std::string& edge,
247  SUMOTime frequency, SUMOTime begin,
248  const std::string& device,
249  const std::string& vTypes);
251 
252 
253 
258 
269  virtual MSDetectorFileOutput* createInductLoop(const std::string& id,
270  MSLane* lane, double pos,
271  const std::string& vTypes,
272  int detectPersons,
273  bool show = true);
274 
275 
285  virtual MSDetectorFileOutput* createInstantInductLoop(const std::string& id,
286  MSLane* lane, double pos, const std::string& od,
287  const std::string& vTypes);
288 
289 
296  virtual MSE2Collector* createE2Detector(const std::string& id,
297  DetectorUsage usage, MSLane* lane, double pos, double endPos, double length,
298  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
299  const std::string& vTypes, int detectPersons, bool showDetector = true);
300 
301  virtual MSE2Collector* createE2Detector(const std::string& id,
302  DetectorUsage usage, std::vector<MSLane*> lanes, double pos, double endPos,
303  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
304  const std::string& vTypes, int detectPersons, bool showDetector = true);
305 
316  virtual MSDetectorFileOutput* createE3Detector(const std::string& id,
317  const CrossSectionVector& entries, const CrossSectionVector& exits,
318  double haltingSpeedThreshold, SUMOTime haltingTimeThreshold,
319  const std::string& vTypes, int detectPersons, bool openEntry);
320 
321 
340  void createEdgeLaneMeanData(const std::string& id, SUMOTime frequency,
341  SUMOTime begin, SUMOTime end, const std::string& type,
342  const bool useLanes, const bool withEmpty, const bool printDefaults,
343  const bool withInternal, const bool trackVehicles, const int detectPersons,
344  const double maxTravelTime, const double minSamples,
345  const double haltSpeed, const std::string& vTypes,
346  const std::string& writeAttributes,
347  const std::string& device);
349 
350 
351 protected:
357  public:
365  E3DetectorDefinition(const std::string& id,
366  const std::string& device, double haltingSpeedThreshold,
367  SUMOTime haltingTimeThreshold, SUMOTime splInterval,
368  const std::string& vTypes, int detectPersons, bool openEntry);
369 
371  virtual ~E3DetectorDefinition();
372 
374  const std::string myID;
376  const std::string myDevice;
388  const std::string myVehicleTypes;
394 
395  private:
398 
401 
402  };
403 
404 
405 protected:
422  double getPositionChecking(double pos, MSLane* lane, bool friendlyPos,
423  SumoXMLTag tag,
424  const std::string& detid);
425 
426 
429 
436  MSEdge* getEdgeChecking(const std::string& edgeID, SumoXMLTag type,
437  const std::string& detid);
438 
439 public:
446  MSLane* getLaneChecking(const std::string& laneID, SumoXMLTag type,
447  const std::string& detid);
448 
449 protected:
457  void checkSampleInterval(SUMOTime splInterval, SumoXMLTag type, const std::string& id);
459 
460 
461 protected:
464 
465 
466 private:
469 
470 
471 private:
474 
477 
478 };
std::vector< MSCrossSection > CrossSectionVector
long long int SUMOTime
Definition: SUMOTime.h:32
SumoXMLTag
Numbers representing SUMO-XML - element names.
An induction loop for mesoscopic simulation.
Definition: MEInductLoop.h:45
A single mesoscopic segment (cell)
Definition: MESegment.h:49
Base of value-generating classes (detectors)
An areal detector corresponding to a sequence of consecutive lanes.
Definition: MSE2Collector.h:79
A road/street connecting two junctions.
Definition: MSEdge.h:77
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
The simulated network and simulation perfomer.
Definition: MSNet.h:88
Storage for all programs of a single tls.
Holds the incoming definitions of an e3 detector unless the detector is build.
E3DetectorDefinition & operator=(const E3DetectorDefinition &)
Invalidated assignment operator.
const std::string myVehicleTypes
The device the detector shall use.
CrossSectionVector myEntries
List of detector's entries.
E3DetectorDefinition(const std::string &id, const std::string &device, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, SUMOTime splInterval, const std::string &vTypes, int detectPersons, bool openEntry)
Constructor.
const std::string myID
The id of the detector.
SUMOTime mySampleInterval
The aggregation interval.
bool myOpenEntry
Whether the detector is declared as having incomplete entry detectors.
E3DetectorDefinition(const E3DetectorDefinition &)
Invalidated copy constructor.
double myHaltingSpeedThreshold
The speed a vehicle's speed must be below to be assigned as jammed.
const std::string myDevice
The device the detector shall use.
SUMOTime myHaltingTimeThreshold
The time a vehicle's speed must be below haltingSpeedThreshold to be assigned as jammed.
CrossSectionVector myExits
List of detector's exits.
Builds detectors for microsim.
void checkSampleInterval(SUMOTime splInterval, SumoXMLTag type, const std::string &id)
Checks whether the given frequency (sample interval) is valid.
void endE3Detector()
Builds of an e3 detector using collected values.
MSNet & myNet
The net to fill.
Parameterised * buildInductLoop(const std::string &id, const std::string &lane, double pos, SUMOTime splInterval, const std::string &device, bool friendlyPos, const std::string &vTypes, int detectPersons)
Builds an e1 detector and adds it to the net.
virtual MSDetectorFileOutput * createInstantInductLoop(const std::string &id, MSLane *lane, double pos, const std::string &od, const std::string &vTypes)
Creates an instance of an e1 detector using the given values.
MSLane * getLaneChecking(const std::string &laneID, SumoXMLTag type, const std::string &detid)
Returns the named lane.
Parameterised * buildE2Detector(const std::string &id, MSLane *lane, double pos, double endPos, double length, const std::string &device, SUMOTime frequency, SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold, const std::string &vTypes, int detectPersons, bool friendlyPos, bool showDetector, MSTLLogicControl::TLSLogicVariants *tlls=0, MSLane *toLane=0)
Builds a new E2 detector and adds it to the net's detector control. Also performs some consistency ch...
virtual MSE2Collector * createE2Detector(const std::string &id, DetectorUsage usage, MSLane *lane, double pos, double endPos, double length, SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold, const std::string &vTypes, int detectPersons, bool showDetector=true)
Creates a MSE2Collector instance, overridden by GUIE2Collector::createE2Detector()
virtual MSDetectorFileOutput * createInductLoop(const std::string &id, MSLane *lane, double pos, const std::string &vTypes, int detectPersons, bool show=true)
Creates an instance of an e1 detector using the given values.
double getPositionChecking(double pos, MSLane *lane, bool friendlyPos, SumoXMLTag tag, const std::string &detid)
Computes the position to use.
NLDetectorBuilder & operator=(const NLDetectorBuilder &)
Invalidated assignment operator.
void buildVTypeProbe(const std::string &id, const std::string &vtype, SUMOTime frequency, const std::string &device)
Builds a vTypeProbe and adds it to the net.
void addE3Exit(const std::string &lane, double pos, bool friendlyPos)
Builds an exit point of an e3 detector.
Parameterised * beginE3Detector(const std::string &id, const std::string &device, SUMOTime splInterval, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string &vTypes, int detectPersons, bool openEntry)
Stores temporary the initial information about an e3 detector to build.
virtual ~NLDetectorBuilder()
Destructor.
MSEdge * getEdgeChecking(const std::string &edgeID, SumoXMLTag type, const std::string &detid)
Returns the named edge.
void createEdgeLaneMeanData(const std::string &id, SUMOTime frequency, SUMOTime begin, SUMOTime end, const std::string &type, const bool useLanes, const bool withEmpty, const bool printDefaults, const bool withInternal, const bool trackVehicles, const int detectPersons, const double maxTravelTime, const double minSamples, const double haltSpeed, const std::string &vTypes, const std::string &writeAttributes, const std::string &device)
Creates edge based mean data collector using the given specification.
void buildRouteProbe(const std::string &id, const std::string &edge, SUMOTime frequency, SUMOTime begin, const std::string &device, const std::string &vTypes)
Builds a routeProbe and adds it to the net.
void addE3Entry(const std::string &lane, double pos, bool friendlyPos)
Builds an entry point of an e3 detector.
NLDetectorBuilder(const NLDetectorBuilder &)
Invalidated copy constructor.
virtual MSDetectorFileOutput * createE3Detector(const std::string &id, const CrossSectionVector &entries, const CrossSectionVector &exits, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string &vTypes, int detectPersons, bool openEntry)
Creates an instance of an e3 detector using the given values.
Parameterised * buildInstantInductLoop(const std::string &id, const std::string &lane, double pos, const std::string &device, bool friendlyPos, const std::string &vTypes)
Builds an instantenous induction and adds it to the net.
E3DetectorDefinition * myE3Definition
definition of the currently parsed e3 detector
std::string getCurrentE3ID() const
Returns the id of the currently built e3 detector.
NLDetectorBuilder(MSNet &net)
Constructor.
An upper class for objects with additional parameters.
Definition: Parameterised.h:41