Eclipse SUMO - Simulation of Urban MObility
MSMeanData_Harmonoise.cpp
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 // Redirector for mean data output (net->edgecontrol)
17 /****************************************************************************/
18 
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
25 #include <microsim/MSLane.h>
26 #include <microsim/MSVehicle.h>
28 #include <utils/common/SUMOTime.h>
29 #include <utils/common/ToString.h>
31 #include "MSMeanData_Harmonoise.h"
33 #include <limits>
34 
35 
36 // ===========================================================================
37 // method definitions
38 // ===========================================================================
39 // ---------------------------------------------------------------------------
40 // MSMeanData_Harmonoise::MSLaneMeanDataValues - methods
41 // ---------------------------------------------------------------------------
42 MSMeanData_Harmonoise::MSLaneMeanDataValues::MSLaneMeanDataValues(MSLane* const lane, const double length, const bool doAdd,
43  const MSMeanData_Harmonoise* parent)
44  : MSMeanData::MeanDataValues(lane, length, doAdd, parent),
45  currentTimeN(0), meanNTemp(0), myParent(parent) {}
46 
47 
49 }
50 
51 
52 void
54  sampleSeconds = 0;
55  currentTimeN = 0;
56  meanNTemp = 0;
57  travelledDistance = 0;
58 }
59 
60 
61 void
64  v.sampleSeconds += sampleSeconds;
65  v.meanNTemp += meanNTemp;
66  v.travelledDistance += travelledDistance;
67 }
68 
69 
70 void
72  meanNTemp += currentTimeN;
73  currentTimeN = 0;
74 }
75 
76 
77 void
78 MSMeanData_Harmonoise::MSLaneMeanDataValues::notifyMoveInternal(const SUMOTrafficObject& veh, const double /* frontOnLane */, const double timeOnLane, const double /*meanSpeedFrontOnLane*/, const double meanSpeedVehicleOnLane, const double /*travelledDistanceFrontOnLane*/, const double travelledDistanceVehicleOnLane, const double /* meanLengthOnLane */) {
80  // XXX: recheck, which value to use here for the speed. (Leo) Refs. #2579
81  (double) meanSpeedVehicleOnLane, veh.getAcceleration());
82  currentTimeN += (double) pow(10., (sn / 10.));
83  sampleSeconds += timeOnLane;
84  travelledDistance += travelledDistanceVehicleOnLane;
85 }
86 
87 
88 void
90  const double /*numLanes*/, const double defaultTravelTime, const int /*numVehicles*/) const {
91  dev.writeAttr("noise", (meanNTemp != 0 ? (double)(10. * log10(meanNTemp * TS / STEPS2TIME(period))) : (double) 0.));
92  if (sampleSeconds > myParent->myMinSamples) {
93  double traveltime = myParent->myMaxTravelTime;
94  if (travelledDistance > 0.f) {
95  traveltime = MIN2(traveltime, myLaneLength * sampleSeconds / travelledDistance);
96  }
97  dev.writeAttr("traveltime", traveltime);
98  } else if (defaultTravelTime >= 0.) {
99  // @todo default value for noise
100  dev.writeAttr("traveltime", defaultTravelTime);
101  }
102  dev.closeTag();
103 }
104 
105 
106 
107 // ---------------------------------------------------------------------------
108 // MSMeanData_Harmonoise - methods
109 // ---------------------------------------------------------------------------
111  const SUMOTime dumpBegin, const SUMOTime dumpEnd,
112  const bool useLanes, const bool withEmpty,
113  const bool printDefaults, const bool withInternal,
114  const bool trackVehicles,
115  const double maxTravelTime, const double minSamples,
116  const std::string& vTypes)
117  : MSMeanData(id, dumpBegin, dumpEnd, useLanes, withEmpty, printDefaults,
118  withInternal, trackVehicles, 0, maxTravelTime, minSamples, vTypes) {
119 }
120 
121 
123 
124 
126 MSMeanData_Harmonoise::createValues(MSLane* const lane, const double length, const bool doAdd) const {
127  return new MSLaneMeanDataValues(lane, length, doAdd, this);
128 }
129 
130 
131 void
134  for (std::vector<std::vector<MeanDataValues*> >::const_iterator i = myMeasures.begin(); i != myMeasures.end(); ++i) {
135  const std::vector<MeanDataValues*>& lm = *i;
136  for (std::vector<MeanDataValues*>::const_iterator j = lm.begin(); j != lm.end(); ++j) {
137  (*j)->update();
138  }
139  }
140 }
141 
142 
143 /****************************************************************************/
144 
MSVehicleType::getEmissionClass
SUMOEmissionClass getEmissionClass() const
Get this vehicle type's emission class.
Definition: MSVehicleType.h:194
SUMOTrafficObject
Representation of a vehicle or person.
Definition: SUMOTrafficObject.h:48
ToString.h
MIN2
T MIN2(T a, T b)
Definition: StdDefs.h:74
MSMeanData_Harmonoise::MSLaneMeanDataValues::addTo
void addTo(MSMeanData::MeanDataValues &val) const
Add the values to this meanData.
Definition: MSMeanData_Harmonoise.cpp:62
MSMeanData_Harmonoise::MSLaneMeanDataValues::meanNTemp
double meanNTemp
Sum of produced noise over time (pow(10, (<NOISE>/10.)))
Definition: MSMeanData_Harmonoise.h:115
SUMOTime.h
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:83
MSDetectorControl.h
MSMeanData_Harmonoise::createValues
MSMeanData::MeanDataValues * createValues(MSLane *const lane, const double length, const bool doAdd) const
Create an instance of MeanDataValues.
Definition: MSMeanData_Harmonoise.cpp:126
SUMOTrafficObject::getAcceleration
virtual double getAcceleration() const =0
Returns the vehicle's acceleration.
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
SUMOTrafficObject::getVehicleType
virtual const MSVehicleType & getVehicleType() const =0
Returns the vehicle's type.
MSMeanData_Harmonoise
Noise data collector for edges/lanes.
Definition: MSMeanData_Harmonoise.h:53
MSMeanData_Harmonoise::MSMeanData_Harmonoise
MSMeanData_Harmonoise(const std::string &id, const SUMOTime dumpBegin, const SUMOTime dumpEnd, const bool useLanes, const bool withEmpty, const bool printDefaults, const bool withInternal, const bool trackVehicles, const double minSamples, const double maxTravelTime, const std::string &vTypes)
Constructor.
Definition: MSMeanData_Harmonoise.cpp:110
MSMeanData_Harmonoise::MSLaneMeanDataValues::update
void update()
Computes the noise in the last time step.
Definition: MSMeanData_Harmonoise.cpp:71
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:35
MSMeanData::myMeasures
std::vector< std::vector< MeanDataValues * > > myMeasures
Value collectors; sorted by edge, then by lane.
Definition: MSMeanData.h:430
MSVehicle.h
OutputDevice::closeTag
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
Definition: OutputDevice.cpp:254
HelpersHarmonoise.h
OutputDevice::writeAttr
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:256
MSMeanData
Data collector for edges/lanes.
Definition: MSMeanData.h:60
HelpersHarmonoise::computeNoise
static double computeNoise(SUMOEmissionClass c, double v, double a)
Returns the noise produced by the a vehicle of the given type at the given speed.
Definition: HelpersHarmonoise.cpp:97
TS
#define TS
Definition: SUMOTime.h:44
sn
static double sn[6]
Definition: odrSpiral.cpp:44
MSMeanData_Harmonoise::MSLaneMeanDataValues::MSLaneMeanDataValues
MSLaneMeanDataValues(MSLane *const lane, const double length, const bool doAdd, const MSMeanData_Harmonoise *parent)
Constructor.
Definition: MSMeanData_Harmonoise.cpp:42
STEPS2TIME
#define STEPS2TIME(x)
Definition: SUMOTime.h:57
MSMeanData::MeanDataValues::travelledDistance
double travelledDistance
The sum of the distances the vehicles travelled.
Definition: MSMeanData.h:176
OutputDevice.h
MSMeanData_Harmonoise::detectorUpdate
virtual void detectorUpdate(const SUMOTime step)
Updates the detector.
Definition: MSMeanData_Harmonoise.cpp:132
MSMeanData_Harmonoise.h
MSMeanData::MeanDataValues
Data structure for mean (aggregated) edge/lane values.
Definition: MSMeanData.h:69
MSMeanData_Harmonoise::MSLaneMeanDataValues
Data structure for mean (aggregated) edge/lane values.
Definition: MSMeanData_Harmonoise.h:62
MSMeanData_Harmonoise::~MSMeanData_Harmonoise
virtual ~MSMeanData_Harmonoise()
Destructor.
Definition: MSMeanData_Harmonoise.cpp:122
MSMeanData_Harmonoise::MSLaneMeanDataValues::reset
void reset(bool afterWrite=false)
Resets values so they may be used for the next interval.
Definition: MSMeanData_Harmonoise.cpp:53
MSMeanData::MeanDataValues::sampleSeconds
double sampleSeconds
Definition: MSMeanData.h:173
MSMeanData_Harmonoise::MSLaneMeanDataValues::~MSLaneMeanDataValues
virtual ~MSLaneMeanDataValues()
Destructor.
Definition: MSMeanData_Harmonoise.cpp:48
config.h
MSMeanData_Harmonoise::MSLaneMeanDataValues::notifyMoveInternal
void notifyMoveInternal(const SUMOTrafficObject &veh, const double, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double)
Internal notification about the vehicle moves.
Definition: MSMeanData_Harmonoise.cpp:78
MSLane.h
MSMeanData_Harmonoise::MSLaneMeanDataValues::write
void write(OutputDevice &dev, const SUMOTime period, const double numLanes, const double defaultTravelTime, const int numVehicles=-1) const
Writes output values into the given stream.
Definition: MSMeanData_Harmonoise.cpp:89
MSMeanData::detectorUpdate
virtual void detectorUpdate(const SUMOTime step)
Updates the detector.
Definition: MSMeanData.cpp:643