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.dev/sumo
3 // Copyright (C) 2001-2024 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 
91  Parameterised* buildInductLoop(const std::string& id,
92  const std::string& lane, double pos, double length, SUMOTime splInterval,
93  const std::string& device, bool friendlyPos,
94  const std::string name, const std::string& vTypes, const std::string& nextEdges, int detectPersons);
95 
96 
113  Parameterised* buildInstantInductLoop(const std::string& id,
114  const std::string& lane, double pos,
115  const std::string& device, bool friendlyPos,
116  const std::string name, const std::string& vTypes,
117  const std::string& nextEdges);
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 name, const std::string& vTypes,
135  const std::string& nextEdges,
136  int detectPersons, bool friendlyPos, bool showDetector,
137  MSTLLogicControl::TLSLogicVariants* tlls = 0, MSLane* toLane = 0);
138 
139  Parameterised* buildE2Detector(const std::string& id, std::vector<MSLane*> lanes, double pos, double endPos,
140  const std::string& device, SUMOTime frequency,
141  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
142  const std::string name, const std::string& vTypes,
143  const std::string& nextEdges,
144  int detectPersons, bool friendlyPos, bool showDetector,
145  MSTLLogicControl::TLSLogicVariants* tlls = 0, MSLane* toLane = 0);
146 
147 
161  Parameterised* beginE3Detector(const std::string& id, const std::string& device, SUMOTime splInterval,
162  double haltingSpeedThreshold, SUMOTime haltingTimeThreshold,
163  const std::string name, const std::string& vTypes,
164  const std::string& nextEdges,
165  int detectPersons, bool openEntry, bool expectArrival);
166 
167 
180  void addE3Entry(const std::string& lane, double pos, bool friendlyPos);
181 
182 
195  void addE3Exit(const std::string& lane, double pos, bool friendlyPos);
196 
197 
207  void endE3Detector();
208 
209 
217  std::string getCurrentE3ID() const;
218 
219 
233  void buildVTypeProbe(const std::string& id,
234  const std::string& vtype, SUMOTime frequency,
235  const std::string& device);
236 
237 
252  void buildRouteProbe(const std::string& id, const std::string& edge,
253  SUMOTime frequency, SUMOTime begin,
254  const std::string& device,
255  const std::string& vTypes);
257 
258 
259 
264 
276  virtual MSDetectorFileOutput* createInductLoop(const std::string& id,
277  MSLane* lane, double pos,
278  double length,
279  const std::string name, const std::string& vTypes,
280  const std::string& nextEdges,
281  int detectPersons,
282  bool show);
283 
284 
294  virtual MSDetectorFileOutput* createInstantInductLoop(const std::string& id,
295  MSLane* lane, double pos, const std::string& od,
296  const std::string name, const std::string& vTypes,
297  const std::string& nextEdges);
298 
299 
306  virtual MSE2Collector* createE2Detector(const std::string& id,
307  DetectorUsage usage, MSLane* lane, double pos, double endPos, double length,
308  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
309  const std::string name, const std::string& vTypes,
310  const std::string& nextEdges,
311  int detectPersons, bool showDetector);
312 
313  virtual MSE2Collector* createE2Detector(const std::string& id,
314  DetectorUsage usage, std::vector<MSLane*> lanes, double pos, double endPos,
315  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold,
316  const std::string name, const std::string& vTypes,
317  const std::string& nextEdges,
318  int detectPersons, bool showDetector);
319 
330  virtual MSDetectorFileOutput* createE3Detector(const std::string& id,
331  const CrossSectionVector& entries, const CrossSectionVector& exits,
332  double haltingSpeedThreshold, SUMOTime haltingTimeThreshold,
333  const std::string name, const std::string& vTypes,
334  const std::string& nextEdges,
335  int detectPersons, bool openEntry, bool expectArrival);
336 
337 
356  void createEdgeLaneMeanData(const std::string& id, SUMOTime frequency,
357  SUMOTime begin, SUMOTime end, const std::string& type,
358  const bool useLanes, const bool withEmpty, const bool printDefaults,
359  const bool withInternal, const bool trackVehicles, const int detectPersons,
360  const double maxTravelTime, const double minSamples,
361  const double haltSpeed, const std::string& vTypes,
362  const std::string& writeAttributes,
363  std::vector<MSEdge*> edges,
364  bool aggregate,
365  const std::string& device);
367 
368 
369 protected:
375  public:
383  E3DetectorDefinition(const std::string& id,
384  const std::string& device, double haltingSpeedThreshold,
385  SUMOTime haltingTimeThreshold, SUMOTime splInterval,
386  const std::string name, const std::string& vTypes,
387  const std::string& nextEdges,
388  int detectPersons, bool openEntry, bool expectArrival);
389 
391  virtual ~E3DetectorDefinition();
392 
394  const std::string myID;
396  const std::string myDevice;
408  std::string myName;
410  const std::string myVehicleTypes;
412  const std::string myNextEdges;
420 
421  private:
424 
427 
428  };
429 
430 
431 protected:
448  double getPositionChecking(double pos, MSLane* lane, bool friendlyPos,
449  SumoXMLTag tag,
450  const std::string& detid);
451 
452 
455 
462  MSEdge* getEdgeChecking(const std::string& edgeID, SumoXMLTag type,
463  const std::string& detid);
464 
465 public:
472  MSLane* getLaneChecking(const std::string& laneID, SumoXMLTag type,
473  const std::string& detid);
474 
475 protected:
483  void checkSampleInterval(SUMOTime splInterval, SumoXMLTag type, const std::string& id);
485 
486 
487 protected:
490 
491 
492 private:
495 
496 
497 private:
500 
503 
504 };
long long int SUMOTime
Definition: GUI.h:35
std::vector< MSCrossSection > CrossSectionVector
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:84
The simulated network and simulation perfomer.
Definition: MSNet.h:89
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 types to filter.
CrossSectionVector myEntries
List of detector's entries.
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.
const std::string myNextEdges
The route edges to filter by.
double myHaltingSpeedThreshold
The speed a vehicle's speed must be below to be assigned as jammed.
E3DetectorDefinition(const std::string &id, const std::string &device, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, SUMOTime splInterval, const std::string name, const std::string &vTypes, const std::string &nextEdges, int detectPersons, bool openEntry, bool expectArrival)
Constructor.
bool myExpectArrival
Whether the detector expects vehicles to arrive inside (and doesn't issue a warning in this case)
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.
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, std::vector< MSEdge * > edges, bool aggregate, const std::string &device)
Creates edge based mean data collector using the given specification.
MSLane * getLaneChecking(const std::string &laneID, SumoXMLTag type, const std::string &detid)
Returns the named lane.
virtual MSDetectorFileOutput * createInstantInductLoop(const std::string &id, MSLane *lane, double pos, const std::string &od, const std::string name, const std::string &vTypes, const std::string &nextEdges)
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.
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 name, const std::string &vTypes, const std::string &nextEdges, int detectPersons, bool showDetector)
Creates a MSE2Collector instance, overridden by GUIE2Collector::createE2Detector()
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.
virtual MSDetectorFileOutput * createInductLoop(const std::string &id, MSLane *lane, double pos, double length, const std::string name, const std::string &vTypes, const std::string &nextEdges, int detectPersons, bool show)
Creates an instance of an e1 detector using the given values.
virtual ~NLDetectorBuilder()
Destructor.
MSEdge * getEdgeChecking(const std::string &edgeID, SumoXMLTag type, const std::string &detid)
Returns the named edge.
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.
virtual MSDetectorFileOutput * createE3Detector(const std::string &id, const CrossSectionVector &entries, const CrossSectionVector &exits, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string name, const std::string &vTypes, const std::string &nextEdges, int detectPersons, bool openEntry, bool expectArrival)
Creates an instance of an e3 detector using the given values.
void addE3Entry(const std::string &lane, double pos, bool friendlyPos)
Builds an entry point of an e3 detector.
Parameterised * buildInductLoop(const std::string &id, const std::string &lane, double pos, double length, SUMOTime splInterval, const std::string &device, bool friendlyPos, const std::string name, const std::string &vTypes, const std::string &nextEdges, int detectPersons)
Builds an e1 detector and adds it to the net.
Parameterised * buildInstantInductLoop(const std::string &id, const std::string &lane, double pos, const std::string &device, bool friendlyPos, const std::string name, const std::string &vTypes, const std::string &nextEdges)
Builds an instantenous induction and adds it to the net.
NLDetectorBuilder(const NLDetectorBuilder &)
Invalidated copy constructor.
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 name, const std::string &vTypes, const std::string &nextEdges, 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...
Parameterised * beginE3Detector(const std::string &id, const std::string &device, SUMOTime splInterval, double haltingSpeedThreshold, SUMOTime haltingTimeThreshold, const std::string name, const std::string &vTypes, const std::string &nextEdges, int detectPersons, bool openEntry, bool expectArrival)
Stores temporary the initial information about an e3 detector to build.
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