Eclipse SUMO - Simulation of Urban MObility
RODFDetector.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-2019 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 /****************************************************************************/
16 // Class representing a detector within the DFROUTER
17 /****************************************************************************/
18 #ifndef RODFDetector_h
19 #define RODFDetector_h
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
27 #include <map>
28 #include <string>
29 #include <vector>
30 #include <set>
31 #include <utils/common/SUMOTime.h>
33 #include <utils/common/Named.h>
34 #include "RODFRouteCont.h"
35 
36 
37 // ===========================================================================
38 // class declarations
39 // ===========================================================================
40 class RODFRouteCont;
41 class RODFDetectorFlows;
42 class ROEdge;
43 class RODFEdge;
44 class RODFDetectorCon;
45 class RODFNet;
46 struct RODFRouteDesc;
47 class OutputDevice;
48 class SUMOVTypeParameter;
49 
50 
51 // ===========================================================================
52 // enumerations
53 // ===========================================================================
61 
64 
67 
71 };
72 
73 
74 // ===========================================================================
75 // class definitions
76 // ===========================================================================
81 class RODFDetector : public Named {
82 public:
93  RODFDetector(const std::string& id, const std::string& laneID,
94  double pos, const RODFDetectorType type);
95 
96 
104  RODFDetector(const std::string& id, const RODFDetector& f);
105 
106 
108  ~RODFDetector();
109 
110 
111 
114 
118  const std::string& getLaneID() const {
119  return myLaneID;
120  };
121 
122 
126  std::string getEdgeID() const {
127  return myLaneID.substr(0, myLaneID.rfind('_'));
128  }
129 
130 
134  double getPos() const {
135  return myPosition;
136  };
137 
138 
144  return myType;
145  };
147 
148 
149  void setType(RODFDetectorType type);
150  void addRoute(RODFRouteDesc& nrd);
151  void addRoutes(RODFRouteCont* routes);
152  bool hasRoutes() const;
153  const std::vector<RODFRouteDesc>& getRouteVector() const;
154  void addPriorDetector(const RODFDetector* det);
155  void addFollowingDetector(const RODFDetector* det);
156  const std::set<const RODFDetector*>& getPriorDetectors() const;
157  const std::set<const RODFDetector*>& getFollowerDetectors() const;
158 
159 
162 
163  bool writeEmitterDefinition(const std::string& file,
164  const std::map<SUMOTime, RandomDistributor<int>* >& dists,
165  const RODFDetectorFlows& flows,
166  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
167  bool includeUnusedRoutes, double scale,
168  bool insertionsOnly, double defaultSpeed) const;
169  bool writeRoutes(std::vector<std::string>& saved,
170  OutputDevice& out);
171  void writeSingleSpeedTrigger(const std::string& file,
172  const RODFDetectorFlows& flows,
173  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
174  double defaultSpeed);
175  void writeEndRerouterDetectors(const std::string& file);
177 
178  void buildDestinationDistribution(const RODFDetectorCon& detectors,
179  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
180  const RODFNet& net,
181  std::map<SUMOTime, RandomDistributor<int>* >& into) const;
182 
183  void computeSplitProbabilities(const RODFNet* net, const RODFDetectorCon& detectors,
184  const RODFDetectorFlows& flows,
185  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
186 
187  const std::vector<std::map<RODFEdge*, double> >& getSplitProbabilities() const {
188  return mySplitProbabilities;
189  }
190 
191 protected:
192  int getFlowFor(const ROEdge* edge, SUMOTime time) const;
193  double computeDistanceFactor(const RODFRouteDesc& rd) const;
194 
195 
196 protected:
197  std::string myLaneID;
198  double myPosition;
201  std::set<const RODFDetector*> myPriorDetectors, myFollowingDetectors;
202  std::vector<std::map<RODFEdge*, double> > mySplitProbabilities;
203  std::map<std::string, RODFEdge*> myRoute2Edge;
204 
205 
206 private:
208  RODFDetector(const RODFDetector& src);
209 
211  RODFDetector& operator=(const RODFDetector& src);
212 
213 };
214 
215 
221 public:
222  RODFDetectorCon();
224  bool addDetector(RODFDetector* dfd);
225  void removeDetector(const std::string& id);
226  bool detectorsHaveCompleteTypes() const;
227  bool detectorsHaveRoutes() const;
228  const std::vector<RODFDetector*>& getDetectors() const;
229  void save(const std::string& file) const;
230  void saveAsPOIs(const std::string& file) const;
231  void saveRoutes(const std::string& file) const;
232 
233  const RODFDetector& getDetector(const std::string& id) const;
234  RODFDetector& getModifiableDetector(const std::string& id) const;
235  const RODFDetector& getAnyDetectorForEdge(const RODFEdge* const edge) const;
236 
237  bool knows(const std::string& id) const;
238  void writeEmitters(const std::string& file,
239  const RODFDetectorFlows& flows,
240  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
241  const RODFNet& net,
242  bool writeCalibrators, bool includeUnusedRoutes,
243  double scale,
244  bool insertionsOnly);
245 
246  void writeEmitterPOIs(const std::string& file,
247  const RODFDetectorFlows& flows);
248 
249  void writeSpeedTrigger(const RODFNet* const net, const std::string& file,
250  const RODFDetectorFlows& flows,
251  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
252 
253  void writeValidationDetectors(const std::string& file,
254  bool includeSources, bool singleFile, bool friendly);
255  void writeEndRerouterDetectors(const std::string& file);
256 
257  int getAggFlowFor(const ROEdge* edge, SUMOTime time, SUMOTime period,
258  const RODFDetectorFlows& flows) const;
259 
260  void guessEmptyFlows(RODFDetectorFlows& flows);
261 
262  void mesoJoin(const std::string& nid, const std::vector<std::string>& oldids);
263 
264  void setSpeedFactorAndDev(SUMOVTypeParameter& type, double maxFactor, double avgFactor, double dev, bool forceDev);
265 
266 protected:
270  void clearDists(std::map<SUMOTime, RandomDistributor<int>* >& dists) const;
271 
272 
273 protected:
274  std::vector<RODFDetector*> myDetectors;
275  std::map<std::string, RODFDetector*> myDetectorMap;
276  std::map<std::string, std::vector<RODFDetector*> > myDetectorEdgeMap;
277 
278 private:
280  RODFDetectorCon(const RODFDetectorCon& src);
281 
284 
285 };
286 
287 
288 #endif
289 
290 /****************************************************************************/
291 
RODFDetector::addRoutes
void addRoutes(RODFRouteCont *routes)
Definition: RODFDetector.cpp:251
SINK_DETECTOR
@ SINK_DETECTOR
Definition: RODFDetector.h:70
RODFDetectorFlows
A container for flows.
Definition: RODFDetectorFlow.h:67
RODFDetectorCon::detectorsHaveRoutes
bool detectorsHaveRoutes() const
Definition: RODFDetector.cpp:512
RODFDetector::myFollowingDetectors
std::set< const RODFDetector * > myFollowingDetectors
Definition: RODFDetector.h:201
RODFDetector::addRoute
void addRoute(RODFRouteDesc &nrd)
Definition: RODFDetector.cpp:258
RODFDetector::getEdgeID
std::string getEdgeID() const
Returns the id of the edge this detector is placed on.
Definition: RODFDetector.h:126
RODFDetectorCon::getAggFlowFor
int getAggFlowFor(const ROEdge *edge, SUMOTime time, SUMOTime period, const RODFDetectorFlows &flows) const
Definition: RODFDetector.cpp:759
RODFEdge
Definition: RODFEdge.h:47
RODFDetector
Class representing a detector within the DFROUTER.
Definition: RODFDetector.h:81
RODFDetectorCon::myDetectorMap
std::map< std::string, RODFDetector * > myDetectorMap
Definition: RODFDetector.h:275
SUMOTime.h
RODFDetectorCon::knows
bool knows(const std::string &id) const
Definition: RODFDetector.cpp:619
Named
Base class for objects which have an id.
Definition: Named.h:56
RODFDetector::addPriorDetector
void addPriorDetector(const RODFDetector *det)
Definition: RODFDetector.cpp:226
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:63
RODFDetector::writeEmitterDefinition
bool writeEmitterDefinition(const std::string &file, const std::map< SUMOTime, RandomDistributor< int > * > &dists, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, bool includeUnusedRoutes, double scale, bool insertionsOnly, double defaultSpeed) const
Definition: RODFDetector.cpp:273
RODFDetectorCon::removeDetector
void removeDetector(const std::string &id)
Definition: RODFDetector.cpp:872
RODFDetectorCon::writeSpeedTrigger
void writeSpeedTrigger(const RODFNet *const net, const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
Definition: RODFDetector.cpp:803
RODFDetectorCon::saveRoutes
void saveRoutes(const std::string &file) const
Definition: RODFDetector.cpp:585
RODFDetectorCon::getAnyDetectorForEdge
const RODFDetector & getAnyDetectorForEdge(const RODFEdge *const edge) const
Definition: RODFDetector.cpp:944
RODFDetector::getFollowerDetectors
const std::set< const RODFDetector * > & getFollowerDetectors() const
Definition: RODFDetector.cpp:244
RODFDetectorCon::RODFDetectorCon
RODFDetectorCon()
Definition: RODFDetector.cpp:474
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
RODFDetectorCon::myDetectors
std::vector< RODFDetector * > myDetectors
Definition: RODFDetector.h:274
RODFDetector::getRouteVector
const std::vector< RODFRouteDesc > & getRouteVector() const
Definition: RODFDetector.cpp:220
RODFDetectorCon
A container for RODFDetectors.
Definition: RODFDetector.h:220
RODFDetector::RODFDetector
RODFDetector(const std::string &id, const std::string &laneID, double pos, const RODFDetectorType type)
Constructor.
Definition: RODFDetector.cpp:54
RODFDetector::writeEndRerouterDetectors
void writeEndRerouterDetectors(const std::string &file)
RODFDetectorCon::writeEmitters
void writeEmitters(const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, const RODFNet &net, bool writeCalibrators, bool includeUnusedRoutes, double scale, bool insertionsOnly)
Definition: RODFDetector.cpp:625
RODFDetector::mySplitProbabilities
std::vector< std::map< RODFEdge *, double > > mySplitProbabilities
Definition: RODFDetector.h:202
RODFDetector::getType
RODFDetectorType getType() const
Returns the type of the detector.
Definition: RODFDetector.h:143
RODFDetector::hasRoutes
bool hasRoutes() const
Definition: RODFDetector.cpp:267
RODFDetectorCon::getDetector
const RODFDetector & getDetector(const std::string &id) const
Definition: RODFDetector.cpp:607
RandomDistributor.h
RODFDetector::~RODFDetector
~RODFDetector()
Destructor.
Definition: RODFDetector.cpp:68
RODFDetector::myLaneID
std::string myLaneID
Definition: RODFDetector.h:197
RODFDetectorCon::writeEmitterPOIs
void writeEmitterPOIs(const std::string &file, const RODFDetectorFlows &flows)
Definition: RODFDetector.cpp:727
RODFDetector::getPriorDetectors
const std::set< const RODFDetector * > & getPriorDetectors() const
Definition: RODFDetector.cpp:238
RODFDetector::operator=
RODFDetector & operator=(const RODFDetector &src)
Invalidated assignment operator.
SUMOVTypeParameter
Structure representing possible vehicle parameter.
Definition: SUMOVTypeParameter.h:86
RODFRouteDesc
A route within the DFROUTER.
Definition: RODFRouteDesc.h:46
Named.h
RODFDetectorCon::mesoJoin
void mesoJoin(const std::string &nid, const std::vector< std::string > &oldids)
Definition: RODFDetector.cpp:963
RODFDetector::computeSplitProbabilities
void computeSplitProbabilities(const RODFNet *net, const RODFDetectorCon &detectors, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
Definition: RODFDetector.cpp:91
RODFDetector::myRoutes
RODFRouteCont * myRoutes
Definition: RODFDetector.h:200
RODFDetector::getSplitProbabilities
const std::vector< std::map< RODFEdge *, double > > & getSplitProbabilities() const
Definition: RODFDetector.h:187
RODFDetector::writeSingleSpeedTrigger
void writeSingleSpeedTrigger(const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, double defaultSpeed)
Definition: RODFDetector.cpp:443
RODFDetectorCon::detectorsHaveCompleteTypes
bool detectorsHaveCompleteTypes() const
Definition: RODFDetector.cpp:501
RODFDetector::computeDistanceFactor
double computeDistanceFactor(const RODFRouteDesc &rd) const
Definition: RODFDetector.cpp:80
RODFDetector::writeRoutes
bool writeRoutes(std::vector< std::string > &saved, OutputDevice &out)
Definition: RODFDetector.cpp:433
RandomDistributor< int >
RODFDetectorCon::getDetectors
const std::vector< RODFDetector * > & getDetectors() const
Definition: RODFDetector.cpp:523
RODFDetector::buildDestinationDistribution
void buildDestinationDistribution(const RODFDetectorCon &detectors, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, const RODFNet &net, std::map< SUMOTime, RandomDistributor< int > * > &into) const
Definition: RODFDetector.cpp:166
RODFDetector::myPriorDetectors
std::set< const RODFDetector * > myPriorDetectors
Definition: RODFDetector.h:201
RODFDetector::myRoute2Edge
std::map< std::string, RODFEdge * > myRoute2Edge
Definition: RODFDetector.h:203
RODFDetectorType
RODFDetectorType
Numerical representation of different detector types.
Definition: RODFDetector.h:58
RODFDetectorCon::clearDists
void clearDists(std::map< SUMOTime, RandomDistributor< int > * > &dists) const
Clears the given distributions map, deleting the timed distributions.
Definition: RODFDetector.cpp:955
RODFDetectorCon::operator=
RODFDetectorCon & operator=(const RODFDetectorCon &src)
Invalidated assignment operator.
RODFDetector::myType
RODFDetectorType myType
Definition: RODFDetector.h:199
RODFNet
A DFROUTER-network.
Definition: RODFNet.h:44
ROEdge
A basic edge for routing applications.
Definition: ROEdge.h:72
RODFDetectorCon::guessEmptyFlows
void guessEmptyFlows(RODFDetectorFlows &flows)
Definition: RODFDetector.cpp:899
RODFDetector::getPos
double getPos() const
Returns the position at which the detector lies.
Definition: RODFDetector.h:134
TYPE_NOT_DEFINED
@ TYPE_NOT_DEFINED
A not yet defined detector.
Definition: RODFDetector.h:60
SOURCE_DETECTOR
@ SOURCE_DETECTOR
A source detector.
Definition: RODFDetector.h:69
RODFDetector::myPosition
double myPosition
Definition: RODFDetector.h:198
config.h
RODFDetector::getLaneID
const std::string & getLaneID() const
Returns the id of the lane this detector is placed on.
Definition: RODFDetector.h:118
RODFDetectorCon::saveAsPOIs
void saveAsPOIs(const std::string &file) const
Definition: RODFDetector.cpp:557
RODFDetectorCon::~RODFDetectorCon
~RODFDetectorCon()
Definition: RODFDetector.cpp:477
BETWEEN_DETECTOR
@ BETWEEN_DETECTOR
An in-between detector.
Definition: RODFDetector.h:66
RODFRouteCont
A container for DFROUTER-routes.
Definition: RODFRouteCont.h:55
RODFDetector::setType
void setType(RODFDetectorType type)
Definition: RODFDetector.cpp:74
DISCARDED_DETECTOR
@ DISCARDED_DETECTOR
A detector which had to be discarded (!!!)
Definition: RODFDetector.h:63
RODFDetector::addFollowingDetector
void addFollowingDetector(const RODFDetector *det)
Definition: RODFDetector.cpp:232
RODFDetectorCon::setSpeedFactorAndDev
void setSpeedFactorAndDev(SUMOVTypeParameter &type, double maxFactor, double avgFactor, double dev, bool forceDev)
Definition: RODFDetector.cpp:708
RODFDetectorCon::writeEndRerouterDetectors
void writeEndRerouterDetectors(const std::string &file)
Definition: RODFDetector.cpp:825
RODFDetectorCon::save
void save(const std::string &file) const
Definition: RODFDetector.cpp:529
RODFDetector::getFlowFor
int getFlowFor(const ROEdge *edge, SUMOTime time) const
RODFDetectorCon::addDetector
bool addDetector(RODFDetector *dfd)
Definition: RODFDetector.cpp:485
RODFRouteCont.h
RODFDetectorCon::writeValidationDetectors
void writeValidationDetectors(const std::string &file, bool includeSources, bool singleFile, bool friendly)
Definition: RODFDetector.cpp:841
RODFDetectorCon::getModifiableDetector
RODFDetector & getModifiableDetector(const std::string &id) const
Definition: RODFDetector.cpp:613
RODFDetectorCon::myDetectorEdgeMap
std::map< std::string, std::vector< RODFDetector * > > myDetectorEdgeMap
Definition: RODFDetector.h:276