SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RODFDetector.h
Go to the documentation of this file.
1 /****************************************************************************/
9 // Class representing a detector within the DFROUTER
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
12 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 #ifndef RODFDetector_h
23 #define RODFDetector_h
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <map>
36 #include <string>
37 #include <vector>
38 #include <utils/common/SUMOTime.h>
40 #include <utils/common/Named.h>
41 #include "RODFRouteCont.h"
42 
43 
44 // ===========================================================================
45 // class declarations
46 // ===========================================================================
47 class RODFRouteCont;
48 class RODFDetectorFlows;
49 class ROEdge;
50 class RODFEdge;
51 class RODFDetectorCon;
52 class RODFNet;
53 struct RODFRouteDesc;
54 class OutputDevice;
55 
56 
57 // ===========================================================================
58 // enumerations
59 // ===========================================================================
67 
70 
73 
77 };
78 
79 
80 // ===========================================================================
81 // class definitions
82 // ===========================================================================
87 class RODFDetector : public Named {
88 public:
99  RODFDetector(const std::string& id, const std::string& laneID,
100  SUMOReal pos, const RODFDetectorType type);
101 
102 
110  RODFDetector(const std::string& id, const RODFDetector& f);
111 
112 
114  ~RODFDetector();
115 
116 
117 
120 
124  const std::string& getLaneID() const {
125  return myLaneID;
126  };
127 
128 
132  std::string getEdgeID() const {
133  return myLaneID.substr(0, myLaneID.rfind('_'));
134  }
135 
136 
140  SUMOReal getPos() const {
141  return myPosition;
142  };
143 
144 
150  return myType;
151  };
153 
154 
155  void setType(RODFDetectorType type);
156  void addRoute(RODFRouteDesc& nrd);
157  void addRoutes(RODFRouteCont* routes);
158  bool hasRoutes() const;
159  const std::vector<RODFRouteDesc>& getRouteVector() const;
160  void addPriorDetector(RODFDetector* det);
162  const std::vector<RODFDetector*>& getPriorDetectors() const;
163  const std::vector<RODFDetector*>& getFollowerDetectors() const;
164 
165 
168 
169  bool writeEmitterDefinition(const std::string& file,
170  const std::map<size_t, RandomDistributor<size_t>* >& dists,
171  const RODFDetectorFlows& flows,
172  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
173  bool includeUnusedRoutes, SUMOReal scale,
174  bool insertionsOnly, SUMOReal defaultSpeed) const;
175  bool writeRoutes(std::vector<std::string>& saved,
176  OutputDevice& out);
177  void writeSingleSpeedTrigger(const std::string& file,
178  const RODFDetectorFlows& flows,
179  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
180  SUMOReal defaultSpeed);
181  void writeEndRerouterDetectors(const std::string& file);
183 
184  void buildDestinationDistribution(const RODFDetectorCon& detectors,
185  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
186  const RODFNet& net,
187  std::map<size_t, RandomDistributor<size_t>* >& into) const;
188 
189  void computeSplitProbabilities(const RODFNet* net, const RODFDetectorCon& detectors,
190  const RODFDetectorFlows& flows,
191  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
192 
193  const std::vector<std::map<RODFEdge*, SUMOReal> >& getSplitProbabilities() const {
194  return mySplitProbabilities;
195  }
196 
197 protected:
198  int getFlowFor(const ROEdge* edge, SUMOTime time) const;
200 
201 
202 protected:
203  std::string myLaneID;
207  std::vector<RODFDetector*> myPriorDetectors, myFollowingDetectors;
208  std::vector<std::map<RODFEdge*, SUMOReal> > mySplitProbabilities;
209  std::map<std::string, RODFEdge*> myRoute2Edge;
210 
211 
212 private:
214  RODFDetector(const RODFDetector& src);
215 
217  RODFDetector& operator=(const RODFDetector& src);
218 
219 };
220 
221 
227 public:
228  RODFDetectorCon();
230  bool addDetector(RODFDetector* dfd);
231  void removeDetector(const std::string& id);
232  bool detectorsHaveCompleteTypes() const;
233  bool detectorsHaveRoutes() const;
234  const std::vector<RODFDetector*>& getDetectors() const;
235  void save(const std::string& file) const;
236  void saveAsPOIs(const std::string& file) const;
237  void saveRoutes(const std::string& file) const;
238 
239  const RODFDetector& getDetector(const std::string& id) const;
240  const RODFDetector& getAnyDetectorForEdge(const RODFEdge* const edge) const;
241 
242  bool knows(const std::string& id) const;
243  void writeEmitters(const std::string& file,
244  const RODFDetectorFlows& flows,
245  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset,
246  const RODFNet& net,
247  bool writeCalibrators, bool includeUnusedRoutes,
248  SUMOReal scale,
249  bool insertionsOnly);
250 
251  void writeEmitterPOIs(const std::string& file,
252  const RODFDetectorFlows& flows);
253 
254  void writeSpeedTrigger(const RODFNet* const net, const std::string& file,
255  const RODFDetectorFlows& flows,
256  SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset);
257 
258  void writeValidationDetectors(const std::string& file,
259  bool includeSources, bool singleFile, bool friendly);
260  void writeEndRerouterDetectors(const std::string& file);
261 
262  int getAggFlowFor(const ROEdge* edge, SUMOTime time, SUMOTime period,
263  const RODFDetectorFlows& flows) const;
264 
265  void guessEmptyFlows(RODFDetectorFlows& flows);
266 
267  void mesoJoin(const std::string& nid, const std::vector<std::string>& oldids);
268 
269 
270 protected:
274  void clearDists(std::map<size_t, RandomDistributor<size_t>* >& dists) const;
275 
276 
277 protected:
278  std::vector<RODFDetector*> myDetectors;
279  std::map<std::string, RODFDetector*> myDetectorMap;
280  std::map<std::string, std::vector<RODFDetector*> > myDetectorEdgeMap;
281 
282 private:
284  RODFDetectorCon(const RODFDetectorCon& src);
285 
288 
289 };
290 
291 
292 #endif
293 
294 /****************************************************************************/
295 
std::vector< RODFDetector * > myDetectors
Definition: RODFDetector.h:278
bool knows(const std::string &id) const
void addRoute(RODFRouteDesc &nrd)
void removeDetector(const std::string &id)
RODFDetectorType
Numerical representation of different detector types.
Definition: RODFDetector.h:64
std::map< std::string, RODFDetector * > myDetectorMap
Definition: RODFDetector.h:279
Represents a generic random distribution.
bool addDetector(RODFDetector *dfd)
void addRoutes(RODFRouteCont *routes)
A source detector.
Definition: RODFDetector.h:75
RODFDetector(const std::string &id, const std::string &laneID, SUMOReal pos, const RODFDetectorType type)
Constructor.
void buildDestinationDistribution(const RODFDetectorCon &detectors, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, const RODFNet &net, std::map< size_t, RandomDistributor< size_t > * > &into) const
const std::vector< RODFRouteDesc > & getRouteVector() const
void writeEndRerouterDetectors(const std::string &file)
const std::vector< RODFDetector * > & getDetectors() const
void saveRoutes(const std::string &file) const
void writeSpeedTrigger(const RODFNet *const net, const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
bool writeEmitterDefinition(const std::string &file, const std::map< size_t, RandomDistributor< size_t > * > &dists, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, bool includeUnusedRoutes, SUMOReal scale, bool insertionsOnly, SUMOReal defaultSpeed) const
std::string getEdgeID() const
Returns the id of the edge this detector is placed on.
Definition: RODFDetector.h:132
SUMOReal computeDistanceFactor(const RODFRouteDesc &rd) const
A container for flows.
A container for RODFDetectors.
Definition: RODFDetector.h:226
void computeSplitProbabilities(const RODFNet *net, const RODFDetectorCon &detectors, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset)
RODFRouteCont * myRoutes
Definition: RODFDetector.h:206
const RODFDetector & getAnyDetectorForEdge(const RODFEdge *const edge) const
void writeEmitters(const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, const RODFNet &net, bool writeCalibrators, bool includeUnusedRoutes, SUMOReal scale, bool insertionsOnly)
RODFDetectorType getType() const
Returns the type of the detector.
Definition: RODFDetector.h:149
A not yet defined detector.
Definition: RODFDetector.h:66
void addFollowingDetector(RODFDetector *det)
std::map< std::string, std::vector< RODFDetector * > > myDetectorEdgeMap
Definition: RODFDetector.h:280
SUMOReal myPosition
Definition: RODFDetector.h:204
bool writeRoutes(std::vector< std::string > &saved, OutputDevice &out)
void save(const std::string &file) const
An in-between detector.
Definition: RODFDetector.h:72
RODFDetector & operator=(const RODFDetector &src)
Invalidated assignment operator.
std::vector< RODFDetector * > myFollowingDetectors
Definition: RODFDetector.h:207
void addPriorDetector(RODFDetector *det)
int getAggFlowFor(const ROEdge *edge, SUMOTime time, SUMOTime period, const RODFDetectorFlows &flows) const
A detector which had to be discarded (!!!)
Definition: RODFDetector.h:69
A DFROUTER-network.
Definition: RODFNet.h:51
void writeValidationDetectors(const std::string &file, bool includeSources, bool singleFile, bool friendly)
RODFDetectorCon & operator=(const RODFDetectorCon &src)
Invalidated assignment operator.
~RODFDetector()
Destructor.
std::string myLaneID
Definition: RODFDetector.h:203
void writeSingleSpeedTrigger(const std::string &file, const RODFDetectorFlows &flows, SUMOTime startTime, SUMOTime endTime, SUMOTime stepOffset, SUMOReal defaultSpeed)
void saveAsPOIs(const std::string &file) const
A route within the DFROUTER.
Definition: RODFRouteDesc.h:53
A basic edge for routing applications.
Definition: ROEdge.h:67
std::vector< std::map< RODFEdge *, SUMOReal > > mySplitProbabilities
Definition: RODFDetector.h:208
Base class for objects which have an id.
Definition: Named.h:45
int getFlowFor(const ROEdge *edge, SUMOTime time) const
const std::vector< RODFDetector * > & getPriorDetectors() const
RODFDetectorType myType
Definition: RODFDetector.h:205
std::map< std::string, RODFEdge * > myRoute2Edge
Definition: RODFDetector.h:209
const RODFDetector & getDetector(const std::string &id) const
void guessEmptyFlows(RODFDetectorFlows &flows)
Class representing a detector within the DFROUTER.
Definition: RODFDetector.h:87
A container for DFROUTER-routes.
Definition: RODFRouteCont.h:63
int SUMOTime
Definition: SUMOTime.h:43
std::vector< RODFDetector * > myPriorDetectors
Definition: RODFDetector.h:207
SUMOReal getPos() const
Returns the position at which the detector lies.
Definition: RODFDetector.h:140
void writeEmitterPOIs(const std::string &file, const RODFDetectorFlows &flows)
void setType(RODFDetectorType type)
const std::vector< RODFDetector * > & getFollowerDetectors() const
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:70
#define SUMOReal
Definition: config.h:215
const std::vector< std::map< RODFEdge *, SUMOReal > > & getSplitProbabilities() const
Definition: RODFDetector.h:193
void writeEndRerouterDetectors(const std::string &file)
void mesoJoin(const std::string &nid, const std::vector< std::string > &oldids)
void clearDists(std::map< size_t, RandomDistributor< size_t > * > &dists) const
Clears the given distributions map, deleting the timed distributions.
bool detectorsHaveRoutes() const
bool hasRoutes() const
bool detectorsHaveCompleteTypes() const
const std::string & getLaneID() const
Returns the id of the lane this detector is placed on.
Definition: RODFDetector.h:124