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 /****************************************************************************/
17 // Class representing a detector within the DFROUTER
18 /****************************************************************************/
19 #ifndef RODFDetector_h
20 #define RODFDetector_h
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #include <config.h>
27 
28 #include <map>
29 #include <string>
30 #include <vector>
31 #include <set>
32 #include <utils/common/SUMOTime.h>
34 #include <utils/common/Named.h>
35 #include "RODFRouteCont.h"
36 
37 
38 // ===========================================================================
39 // class declarations
40 // ===========================================================================
41 class RODFRouteCont;
42 class RODFDetectorFlows;
43 class ROEdge;
44 class RODFEdge;
45 class RODFDetectorCon;
46 class RODFNet;
47 struct RODFRouteDesc;
48 class OutputDevice;
49 class SUMOVTypeParameter;
50 
51 
52 // ===========================================================================
53 // enumerations
54 // ===========================================================================
62 
65 
68 
72 };
73 
74 
75 // ===========================================================================
76 // class definitions
77 // ===========================================================================
82 class RODFDetector : public Named {
83 public:
94  RODFDetector(const std::string& id, const std::string& laneID,
95  double pos, const RODFDetectorType type);
96 
97 
105  RODFDetector(const std::string& id, const RODFDetector& f);
106 
107 
109  ~RODFDetector();
110 
111 
112 
115 
119  const std::string& getLaneID() const {
120  return myLaneID;
121  };
122 
123 
127  std::string getEdgeID() const {
128  return myLaneID.substr(0, myLaneID.rfind('_'));
129  }
130 
131 
135  double getPos() const {
136  return myPosition;
137  };
138 
139 
145  return myType;
146  };
148 
149 
150  void setType(RODFDetectorType type);
151  void addRoute(RODFRouteDesc& nrd);
152  void addRoutes(RODFRouteCont* routes);
153  bool hasRoutes() const;
154  const std::vector<RODFRouteDesc>& getRouteVector() const;
155  void addPriorDetector(const RODFDetector* det);
156  void addFollowingDetector(const RODFDetector* det);
157  const std::set<const RODFDetector*>& getPriorDetectors() const;
158  const std::set<const RODFDetector*>& getFollowerDetectors() const;
159 
160 
163 
164  bool writeEmitterDefinition(const std::string& file,
165  const std::map<SUMOTime, RandomDistributor<int>* >& dists,
166  const RODFDetectorFlows& flows,
167  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
168  bool includeUnusedRoutes, double scale,
169  bool insertionsOnly, double defaultSpeed) const;
170  bool writeRoutes(std::vector<std::string>& saved,
171  OutputDevice& out);
172  void writeSingleSpeedTrigger(const std::string& file,
173  const RODFDetectorFlows& flows,
174  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
175  double defaultSpeed);
176  void writeEndRerouterDetectors(const std::string& file);
178 
179  void buildDestinationDistribution(const RODFDetectorCon& detectors,
180  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
181  const RODFNet& net,
182  std::map<SUMOTime, RandomDistributor<int>* >& into) const;
183 
184  void computeSplitProbabilities(const RODFNet* net, const RODFDetectorCon& detectors,
185  const RODFDetectorFlows& flows,
186  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
187 
188  const std::vector<std::map<RODFEdge*, double> >& getSplitProbabilities() const {
189  return mySplitProbabilities;
190  }
191 
192 protected:
193  int getFlowFor(const ROEdge* edge, SUMOTime time) const;
194  double computeDistanceFactor(const RODFRouteDesc& rd) const;
195 
196 
197 protected:
198  std::string myLaneID;
199  double myPosition;
202  std::set<const RODFDetector*> myPriorDetectors, myFollowingDetectors;
203  std::vector<std::map<RODFEdge*, double> > mySplitProbabilities;
204  std::map<std::string, RODFEdge*> myRoute2Edge;
205 
206 
207 private:
209  RODFDetector(const RODFDetector& src);
210 
212  RODFDetector& operator=(const RODFDetector& src);
213 
214 };
215 
216 
222 public:
223  RODFDetectorCon();
225  bool addDetector(RODFDetector* dfd);
226  void removeDetector(const std::string& id);
227  bool detectorsHaveCompleteTypes() const;
228  bool detectorsHaveRoutes() const;
229  const std::vector<RODFDetector*>& getDetectors() const;
230  void save(const std::string& file) const;
231  void saveAsPOIs(const std::string& file) const;
232  void saveRoutes(const std::string& file) const;
233 
234  const RODFDetector& getDetector(const std::string& id) const;
235  RODFDetector& getModifiableDetector(const std::string& id) const;
236  const RODFDetector& getAnyDetectorForEdge(const RODFEdge* const edge) const;
237 
238  bool knows(const std::string& id) const;
239  void writeEmitters(const std::string& file,
240  const RODFDetectorFlows& flows,
241  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
242  const RODFNet& net,
243  bool writeCalibrators, bool includeUnusedRoutes,
244  double scale,
245  bool insertionsOnly);
246 
247  void writeEmitterPOIs(const std::string& file,
248  const RODFDetectorFlows& flows);
249 
250  void writeSpeedTrigger(const RODFNet* const net, const std::string& file,
251  const RODFDetectorFlows& flows,
252  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
253 
254  void writeValidationDetectors(const std::string& file,
255  bool includeSources, bool singleFile, bool friendly);
256  void writeEndRerouterDetectors(const std::string& file);
257 
258  int getAggFlowFor(const ROEdge* edge, SUMOTime time, SUMOTime period,
259  const RODFDetectorFlows& flows) const;
260 
261  void guessEmptyFlows(RODFDetectorFlows& flows);
262 
263  void mesoJoin(const std::string& nid, const std::vector<std::string>& oldids);
264 
265  void setSpeedFactorAndDev(SUMOVTypeParameter& type, double maxFactor, double avgFactor, double dev, bool forceDev);
266 
267 protected:
271  void clearDists(std::map<SUMOTime, RandomDistributor<int>* >& dists) const;
272 
273 
274 protected:
275  std::vector<RODFDetector*> myDetectors;
276  std::map<std::string, RODFDetector*> myDetectorMap;
277  std::map<std::string, std::vector<RODFDetector*> > myDetectorEdgeMap;
278 
279 private:
281  RODFDetectorCon(const RODFDetectorCon& src);
282 
285 
286 };
287 
288 
289 #endif
290 
291 /****************************************************************************/
292 
RODFDetector::addRoutes
void addRoutes(RODFRouteCont *routes)
Definition: RODFDetector.cpp:252
SINK_DETECTOR
Definition: RODFDetector.h:71
RODFDetectorFlows
A container for flows.
Definition: RODFDetectorFlow.h:68
RODFDetectorCon::detectorsHaveRoutes
bool detectorsHaveRoutes() const
Definition: RODFDetector.cpp:513
RODFDetector::myFollowingDetectors
std::set< const RODFDetector * > myFollowingDetectors
Definition: RODFDetector.h:202
RODFDetector::addRoute
void addRoute(RODFRouteDesc &nrd)
Definition: RODFDetector.cpp:259
RODFDetector::getEdgeID
std::string getEdgeID() const
Returns the id of the edge this detector is placed on.
Definition: RODFDetector.h:127
RODFDetectorCon::getAggFlowFor
int getAggFlowFor(const ROEdge *edge, SUMOTime time, SUMOTime period, const RODFDetectorFlows &flows) const
Definition: RODFDetector.cpp:760
RODFEdge
Definition: RODFEdge.h:48
RODFDetector
Class representing a detector within the DFROUTER.
Definition: RODFDetector.h:82
RODFDetectorCon::myDetectorMap
std::map< std::string, RODFDetector * > myDetectorMap
Definition: RODFDetector.h:276
SUMOTime.h
RODFDetectorCon::knows
bool knows(const std::string &id) const
Definition: RODFDetector.cpp:620
Named
Base class for objects which have an id.
Definition: Named.h:57
RODFDetector::addPriorDetector
void addPriorDetector(const RODFDetector *det)
Definition: RODFDetector.cpp:227
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
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:274
RODFDetectorCon::removeDetector
void removeDetector(const std::string &id)
Definition: RODFDetector.cpp:873
RODFDetectorCon::writeSpeedTrigger
void writeSpeedTrigger(const RODFNet *const net, const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
Definition: RODFDetector.cpp:804
RODFDetectorCon::saveRoutes
void saveRoutes(const std::string &file) const
Definition: RODFDetector.cpp:586
RODFDetectorCon::getAnyDetectorForEdge
const RODFDetector & getAnyDetectorForEdge(const RODFEdge *const edge) const
Definition: RODFDetector.cpp:945
RODFDetector::getFollowerDetectors
const std::set< const RODFDetector * > & getFollowerDetectors() const
Definition: RODFDetector.cpp:245
RODFDetectorCon::RODFDetectorCon
RODFDetectorCon()
Definition: RODFDetector.cpp:475
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:35
RODFDetectorCon::myDetectors
std::vector< RODFDetector * > myDetectors
Definition: RODFDetector.h:275
RODFDetector::getRouteVector
const std::vector< RODFRouteDesc > & getRouteVector() const
Definition: RODFDetector.cpp:221
RODFDetectorCon
A container for RODFDetectors.
Definition: RODFDetector.h:221
RODFDetector::RODFDetector
RODFDetector(const std::string &id, const std::string &laneID, double pos, const RODFDetectorType type)
Constructor.
Definition: RODFDetector.cpp:55
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:626
RODFDetector::mySplitProbabilities
std::vector< std::map< RODFEdge *, double > > mySplitProbabilities
Definition: RODFDetector.h:203
RODFDetector::getType
RODFDetectorType getType() const
Returns the type of the detector.
Definition: RODFDetector.h:144
RODFDetector::hasRoutes
bool hasRoutes() const
Definition: RODFDetector.cpp:268
RODFDetectorCon::getDetector
const RODFDetector & getDetector(const std::string &id) const
Definition: RODFDetector.cpp:608
RandomDistributor.h
RODFDetector::~RODFDetector
~RODFDetector()
Destructor.
Definition: RODFDetector.cpp:69
RODFDetector::myLaneID
std::string myLaneID
Definition: RODFDetector.h:198
RODFDetectorCon::writeEmitterPOIs
void writeEmitterPOIs(const std::string &file, const RODFDetectorFlows &flows)
Definition: RODFDetector.cpp:728
RODFDetector::getPriorDetectors
const std::set< const RODFDetector * > & getPriorDetectors() const
Definition: RODFDetector.cpp:239
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:47
Named.h
RODFDetectorCon::mesoJoin
void mesoJoin(const std::string &nid, const std::vector< std::string > &oldids)
Definition: RODFDetector.cpp:964
RODFDetector::computeSplitProbabilities
void computeSplitProbabilities(const RODFNet *net, const RODFDetectorCon &detectors, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
Definition: RODFDetector.cpp:92
RODFDetector::myRoutes
RODFRouteCont * myRoutes
Definition: RODFDetector.h:201
RODFDetector::getSplitProbabilities
const std::vector< std::map< RODFEdge *, double > > & getSplitProbabilities() const
Definition: RODFDetector.h:188
RODFDetector::writeSingleSpeedTrigger
void writeSingleSpeedTrigger(const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, double defaultSpeed)
Definition: RODFDetector.cpp:444
RODFDetectorCon::detectorsHaveCompleteTypes
bool detectorsHaveCompleteTypes() const
Definition: RODFDetector.cpp:502
RODFDetector::computeDistanceFactor
double computeDistanceFactor(const RODFRouteDesc &rd) const
Definition: RODFDetector.cpp:81
RODFDetector::writeRoutes
bool writeRoutes(std::vector< std::string > &saved, OutputDevice &out)
Definition: RODFDetector.cpp:434
RandomDistributor< int >
RODFDetectorCon::getDetectors
const std::vector< RODFDetector * > & getDetectors() const
Definition: RODFDetector.cpp:524
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:167
RODFDetector::myPriorDetectors
std::set< const RODFDetector * > myPriorDetectors
Definition: RODFDetector.h:202
RODFDetector::myRoute2Edge
std::map< std::string, RODFEdge * > myRoute2Edge
Definition: RODFDetector.h:204
RODFDetectorType
RODFDetectorType
Numerical representation of different detector types.
Definition: RODFDetector.h:59
RODFDetectorCon::clearDists
void clearDists(std::map< SUMOTime, RandomDistributor< int > * > &dists) const
Clears the given distributions map, deleting the timed distributions.
Definition: RODFDetector.cpp:956
RODFDetectorCon::operator=
RODFDetectorCon & operator=(const RODFDetectorCon &src)
Invalidated assignment operator.
RODFDetector::myType
RODFDetectorType myType
Definition: RODFDetector.h:200
RODFNet
A DFROUTER-network.
Definition: RODFNet.h:45
ROEdge
A basic edge for routing applications.
Definition: ROEdge.h:73
RODFDetectorCon::guessEmptyFlows
void guessEmptyFlows(RODFDetectorFlows &flows)
Definition: RODFDetector.cpp:900
RODFDetector::getPos
double getPos() const
Returns the position at which the detector lies.
Definition: RODFDetector.h:135
TYPE_NOT_DEFINED
A not yet defined detector.
Definition: RODFDetector.h:61
SOURCE_DETECTOR
A source detector.
Definition: RODFDetector.h:70
RODFDetector::myPosition
double myPosition
Definition: RODFDetector.h:199
config.h
RODFDetector::getLaneID
const std::string & getLaneID() const
Returns the id of the lane this detector is placed on.
Definition: RODFDetector.h:119
RODFDetectorCon::saveAsPOIs
void saveAsPOIs(const std::string &file) const
Definition: RODFDetector.cpp:558
RODFDetectorCon::~RODFDetectorCon
~RODFDetectorCon()
Definition: RODFDetector.cpp:478
BETWEEN_DETECTOR
An in-between detector.
Definition: RODFDetector.h:67
RODFRouteCont
A container for DFROUTER-routes.
Definition: RODFRouteCont.h:56
RODFDetector::setType
void setType(RODFDetectorType type)
Definition: RODFDetector.cpp:75
DISCARDED_DETECTOR
A detector which had to be discarded (!!!)
Definition: RODFDetector.h:64
RODFDetector::addFollowingDetector
void addFollowingDetector(const RODFDetector *det)
Definition: RODFDetector.cpp:233
RODFDetectorCon::setSpeedFactorAndDev
void setSpeedFactorAndDev(SUMOVTypeParameter &type, double maxFactor, double avgFactor, double dev, bool forceDev)
Definition: RODFDetector.cpp:709
RODFDetectorCon::writeEndRerouterDetectors
void writeEndRerouterDetectors(const std::string &file)
Definition: RODFDetector.cpp:826
RODFDetectorCon::save
void save(const std::string &file) const
Definition: RODFDetector.cpp:530
RODFDetector::getFlowFor
int getFlowFor(const ROEdge *edge, SUMOTime time) const
RODFDetectorCon::addDetector
bool addDetector(RODFDetector *dfd)
Definition: RODFDetector.cpp:486
RODFRouteCont.h
RODFDetectorCon::writeValidationDetectors
void writeValidationDetectors(const std::string &file, bool includeSources, bool singleFile, bool friendly)
Definition: RODFDetector.cpp:842
RODFDetectorCon::getModifiableDetector
RODFDetector & getModifiableDetector(const std::string &id) const
Definition: RODFDetector.cpp:614
RODFDetectorCon::myDetectorEdgeMap
std::map< std::string, std::vector< RODFDetector * > > myDetectorEdgeMap
Definition: RODFDetector.h:277