Eclipse SUMO - Simulation of Urban MObility
PollutantsInterface.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2013-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 /****************************************************************************/
15 // Interface to capsulate different emission models
16 /****************************************************************************/
17 #ifndef PollutantsInterface_h
18 #define PollutantsInterface_h
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 #include <vector>
27 #include <limits>
28 #include <cmath>
29 #include <algorithm>
30 #include <utils/common/StdDefs.h>
32 #include "PHEMCEP.h"
33 
34 
35 // ===========================================================================
36 // class declarations
37 // ===========================================================================
38 class HelpersHBEFA;
39 class HelpersHBEFA3;
40 class HelpersPHEMlight;
41 class HelpersEnergy;
42 
43 
44 // ===========================================================================
45 // class definitions
46 // ===========================================================================
52 
53 public:
55  enum EmissionType { CO2, CO, HC, FUEL, NO_X, PM_X, ELEC };
56 
61  struct Emissions {
62  double CO2;
63  double CO;
64  double HC;
65  double fuel;
66  double NOx;
67  double PMx;
68  double electricity;
69 
79  Emissions(double co2 = 0, double co = 0, double hc = 0, double f = 0, double nox = 0, double pmx = 0, double elec = 0)
80  : CO2(co2), CO(co), HC(hc), fuel(f), NOx(nox), PMx(pmx), electricity(elec) {
81  }
82 
87  void addScaled(const Emissions& a, const double scale = 1.) {
88  CO2 += scale * a.CO2;
89  CO += scale * a.CO;
90  HC += scale * a.HC;
91  fuel += scale * a.fuel;
92  NOx += scale * a.NOx;
93  PMx += scale * a.PMx;
94  electricity += scale * a.electricity;
95  }
96  };
97 
102  class Helper {
103  public:
107  Helper(std::string name) : myName(name) {}
108 
112  const std::string& getName() const {
113  return myName;
114  }
115 
125  virtual SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc) {
126  UNUSED_PARAMETER(vc);
127  if (myEmissionClassStrings.hasString(eClass)) {
128  return myEmissionClassStrings.get(eClass);
129  }
130  std::string eclower = eClass;
131  std::transform(eclower.begin(), eclower.end(), eclower.begin(), tolower);
132  return myEmissionClassStrings.get(eclower);
133  }
134 
139  const std::string getClassName(const SUMOEmissionClass c) const {
140  return myName + "/" + myEmissionClassStrings.getString(c);
141  }
142 
148  virtual bool isSilent(const SUMOEmissionClass c) {
149  return (c & 0xffffffff & ~HEAVY_BIT) == 0;
150  }
151 
154 
165  virtual SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass,
166  const std::string& fuel, const std::string& eClass, const double weight) const {
167  UNUSED_PARAMETER(vClass);
168  UNUSED_PARAMETER(fuel);
169  UNUSED_PARAMETER(eClass);
170  UNUSED_PARAMETER(weight);
171  return base;
172  }
173 
179  virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const {
180  UNUSED_PARAMETER(c);
181  return "Passenger";
182  }
183 
189  virtual std::string getFuel(const SUMOEmissionClass c) const {
190  UNUSED_PARAMETER(c);
191  return "Gasoline";
192  }
193 
199  virtual int getEuroClass(const SUMOEmissionClass c) const {
200  UNUSED_PARAMETER(c);
201  return 0;
202  }
203 
210  virtual double getWeight(const SUMOEmissionClass c) const {
211  UNUSED_PARAMETER(c);
212  return -1.;
213  }
215 
224  virtual double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const std::map<int, double>* param) const = 0;
225 
234  virtual double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope) const {
235  UNUSED_PARAMETER(c);
236  UNUSED_PARAMETER(v);
237  UNUSED_PARAMETER(slope);
238  return a;
239  }
240 
244  void addAllClassesInto(std::vector<SUMOEmissionClass>& list) const {
246  }
247 
248  protected:
250  const std::string myName;
251 
254 
255  private:
257  Helper& operator=(const Helper&) = delete;
258  };
259 
261  static const int ZERO_EMISSIONS = 0;
262 
264  static const int HEAVY_BIT = 1 << 15;
265 
270  static SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc = SVC_IGNORING);
271 
276  static const std::vector<SUMOEmissionClass> getAllClasses();
277 
279  static const std::vector<std::string>& getAllClassesStr();
280 
285  static std::string getName(const SUMOEmissionClass c);
286 
291  static bool isHeavy(const SUMOEmissionClass c);
292 
297  static bool isSilent(const SUMOEmissionClass c);
298 
307  static SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel, const std::string& eClass, const double weight);
308 
313  static std::string getAmitranVehicleClass(const SUMOEmissionClass c);
314 
319  static std::string getFuel(const SUMOEmissionClass c);
320 
325  static int getEuroClass(const SUMOEmissionClass c);
326 
332  static double getWeight(const SUMOEmissionClass c);
333 
342  static double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const std::map<int, double>* param = 0);
343 
351  static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope, const std::map<int, double>* param = 0);
352 
362  static double computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const double tt, const std::map<int, double>* param = 0);
363 
371  static double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope);
372 
374  static const HelpersEnergy& getEnergyHelper() {
375  return myEnergyHelper;
376  }
377 
378 private:
381 
384 
387 
390 
392  static Helper* myHelpers[];
393 
395  static std::vector<std::string> myAllClassesStr;
396 };
397 
398 
399 #endif
400 
401 /****************************************************************************/
UNUSED_PARAMETER
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:31
PollutantsInterface::Helper::getName
const std::string & getName() const
Returns the name of the model.
Definition: PollutantsInterface.h:112
SUMOVehicleClass
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
Definition: SUMOVehicleClass.h:133
PollutantsInterface::getEnergyHelper
static const HelpersEnergy & getEnergyHelper()
get energy helper
Definition: PollutantsInterface.h:374
PollutantsInterface::myEnergyHelper
static HelpersEnergy myEnergyHelper
Instance of EnergyHelper which gets cleaned up automatically.
Definition: PollutantsInterface.h:389
PollutantsInterface::Emissions::Emissions
Emissions(double co2=0, double co=0, double hc=0, double f=0, double nox=0, double pmx=0, double elec=0)
Constructor, intializes all members.
Definition: PollutantsInterface.h:79
PollutantsInterface::Helper::compute
virtual double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const std::map< int, double > *param) const =0
Returns the amount of the emitted pollutant given the vehicle type and state (in mg/s or ml/s for fue...
PollutantsInterface::Emissions::PMx
double PMx
Definition: PollutantsInterface.h:67
PollutantsInterface::isSilent
static bool isSilent(const SUMOEmissionClass c)
Checks whether the emission class describes an electric or similar silent vehicle.
Definition: PollutantsInterface.cpp:111
PollutantsInterface::isHeavy
static bool isHeavy(const SUMOEmissionClass c)
Checks whether the emission class describes a bus, truck or similar vehicle.
Definition: PollutantsInterface.cpp:105
PollutantsInterface::Helper::isSilent
virtual bool isSilent(const SUMOEmissionClass c)
Returns whether the class denotes a silent vehicle for interfacing with the noise model....
Definition: PollutantsInterface.h:148
StringBijection::getString
const std::string & getString(const T key) const
Definition: StringBijection.h:106
PollutantsInterface::Helper::addAllClassesInto
void addAllClassesInto(std::vector< SUMOEmissionClass > &list) const
Add all known emission classes of this model to the given container.
Definition: PollutantsInterface.h:244
PollutantsInterface::Emissions::CO
double CO
Definition: PollutantsInterface.h:63
PollutantsInterface::EmissionType
EmissionType
Enumerating all emission types, including fuel.
Definition: PollutantsInterface.h:55
PollutantsInterface::FUEL
@ FUEL
Definition: PollutantsInterface.h:55
PollutantsInterface::Helper::Helper
Helper(std::string name)
Constructor, intializes the name.
Definition: PollutantsInterface.h:107
PollutantsInterface::Helper::operator=
Helper & operator=(const Helper &)=delete
invalidate copy constructor
PollutantsInterface::getEuroClass
static int getEuroClass(const SUMOEmissionClass c)
Returns the Euro norm described by the given emission class.
Definition: PollutantsInterface.cpp:136
PollutantsInterface::Helper::getAmitranVehicleClass
virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const
Returns the vehicle class described by this emission class as described in the Amitran interface (Pas...
Definition: PollutantsInterface.h:179
PollutantsInterface::Helper::getModifiedAccel
virtual double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope) const
Returns the adapted acceleration value, useful for comparing with external PHEMlight references....
Definition: PollutantsInterface.h:234
PollutantsInterface::Helper
abstract superclass for the model helpers
Definition: PollutantsInterface.h:102
PollutantsInterface::Helper::getClass
virtual SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string &vClass, const std::string &fuel, const std::string &eClass, const double weight) const
Returns the emission class described by the given parameters. The base is used to determine the model...
Definition: PollutantsInterface.h:165
SUMOEmissionClass
int SUMOEmissionClass
Definition: SUMOVehicleClass.h:231
PollutantsInterface::HEAVY_BIT
static const int HEAVY_BIT
the bit to set for denoting heavy vehicles
Definition: PollutantsInterface.h:264
PollutantsInterface::getName
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
Definition: PollutantsInterface.cpp:99
HelpersPHEMlight
Helper methods for PHEMlight-based emission computation.
Definition: HelpersPHEMlight.h:48
PollutantsInterface::Helper::myName
const std::string myName
the name of the model
Definition: PollutantsInterface.h:250
PollutantsInterface::Helper::getWeight
virtual double getWeight(const SUMOEmissionClass c) const
Returns a reference weight in kg described by this emission class as described in the Amitran interfa...
Definition: PollutantsInterface.h:210
PollutantsInterface::Helper::getFuel
virtual std::string getFuel(const SUMOEmissionClass c) const
Returns the fuel type described by this emission class as described in the Amitran interface (Gasolin...
Definition: PollutantsInterface.h:189
PollutantsInterface::CO
@ CO
Definition: PollutantsInterface.h:55
PollutantsInterface::Helper::getClassName
const std::string getClassName(const SUMOEmissionClass c) const
Returns the complete name of the emission class including the model.
Definition: PollutantsInterface.h:139
PollutantsInterface::getModifiedAccel
static double getModifiedAccel(const SUMOEmissionClass c, const double v, const double a, const double slope)
Returns the adapted acceleration value, useful for comparing with external PHEMlight references.
Definition: PollutantsInterface.cpp:170
StringBijection< SUMOEmissionClass >
PollutantsInterface::getClass
static SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string &vClass, const std::string &fuel, const std::string &eClass, const double weight)
Returns the emission class fittig the given parameters.
Definition: PollutantsInterface.cpp:117
HelpersEnergy
Helper methods for energy-based electricity consumption computation based on the battery device.
Definition: HelpersEnergy.h:42
PollutantsInterface::Emissions::CO2
double CO2
Definition: PollutantsInterface.h:62
PollutantsInterface::getAllClasses
static const std::vector< SUMOEmissionClass > getAllClasses()
Checks whether the string describes a known vehicle class.
Definition: PollutantsInterface.cpp:72
HelpersHBEFA3
Helper methods for HBEFA3-based emission computation.
Definition: HelpersHBEFA3.h:46
PollutantsInterface::getAmitranVehicleClass
static std::string getAmitranVehicleClass(const SUMOEmissionClass c)
Returns the vehicle class described by the given emission class.
Definition: PollutantsInterface.cpp:124
StringBijection::get
T get(const std::string &str) const
Definition: StringBijection.h:97
PollutantsInterface::PM_X
@ PM_X
Definition: PollutantsInterface.h:55
SUMOVehicleClass.h
PollutantsInterface::HC
@ HC
Definition: PollutantsInterface.h:55
PollutantsInterface::computeAll
static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope, const std::map< int, double > *param=0)
Returns the amount of all emitted pollutants given the vehicle type and state (in mg/s or ml/s for fu...
Definition: PollutantsInterface.cpp:154
StringBijection::addKeysInto
void addKeysInto(std::vector< T > &list) const
Definition: StringBijection.h:141
PollutantsInterface::NO_X
@ NO_X
Definition: PollutantsInterface.h:55
PollutantsInterface::Emissions::addScaled
void addScaled(const Emissions &a, const double scale=1.)
Add the values of the other struct to this one, scaling the values if needed.
Definition: PollutantsInterface.h:87
PollutantsInterface::ELEC
@ ELEC
Definition: PollutantsInterface.h:55
PollutantsInterface::CO2
@ CO2
Definition: PollutantsInterface.h:55
PollutantsInterface::computeDefault
static double computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const double tt, const std::map< int, double > *param=0)
Returns the amount of emitted pollutant given the vehicle type and default values for the state (in m...
Definition: PollutantsInterface.cpp:163
PollutantsInterface::getWeight
static double getWeight(const SUMOEmissionClass c)
Returns a representative weight for the given emission class see http://colombo-fp7....
Definition: PollutantsInterface.cpp:142
PollutantsInterface::Emissions::electricity
double electricity
Definition: PollutantsInterface.h:68
PollutantsInterface::getClassByName
static SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc=SVC_IGNORING)
Checks whether the string describes a known vehicle class.
Definition: PollutantsInterface.cpp:53
PollutantsInterface::getFuel
static std::string getFuel(const SUMOEmissionClass c)
Returns the fuel type of the given emission class.
Definition: PollutantsInterface.cpp:130
PollutantsInterface::myHBEFA2Helper
static HelpersHBEFA myHBEFA2Helper
Instance of HBEFA2Helper which gets cleaned up automatically.
Definition: PollutantsInterface.h:380
PollutantsInterface::ZERO_EMISSIONS
static const int ZERO_EMISSIONS
the first class in each model representing a zero emission vehicle
Definition: PollutantsInterface.h:261
PollutantsInterface::Helper::getClassByName
virtual SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc)
Returns the emission class associated with the given name, aliases are possible If this method is ask...
Definition: PollutantsInterface.h:125
HelpersHBEFA
Helper methods for HBEFA-based emission computation.
Definition: HelpersHBEFA.h:46
PollutantsInterface::myHBEFA3Helper
static HelpersHBEFA3 myHBEFA3Helper
Instance of HBEFA3Helper which gets cleaned up automatically.
Definition: PollutantsInterface.h:383
PollutantsInterface::Emissions::NOx
double NOx
Definition: PollutantsInterface.h:66
PollutantsInterface::Helper::myEmissionClassStrings
StringBijection< SUMOEmissionClass > myEmissionClassStrings
Mapping between emission class names and integer representations.
Definition: PollutantsInterface.h:253
PollutantsInterface::Emissions
Storage for collected values of all emission types.
Definition: PollutantsInterface.h:61
PollutantsInterface::Emissions::HC
double HC
Definition: PollutantsInterface.h:64
PollutantsInterface::compute
static double compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const std::map< int, double > *param=0)
Returns the amount of the emitted pollutant given the vehicle type and state (in mg/s or ml/s for fue...
Definition: PollutantsInterface.cpp:148
config.h
StringBijection::hasString
bool hasString(const std::string &str) const
Definition: StringBijection.h:116
PollutantsInterface
Helper methods for PHEMlight-based emission computation.
Definition: PollutantsInterface.h:51
StdDefs.h
PollutantsInterface::getAllClassesStr
static const std::vector< std::string > & getAllClassesStr()
Get all SUMOEmissionClass in string format.
Definition: PollutantsInterface.cpp:82
PollutantsInterface::Emissions::fuel
double fuel
Definition: PollutantsInterface.h:65
PollutantsInterface::myHelpers
static Helper * myHelpers[]
the known model helpers
Definition: PollutantsInterface.h:392
SVC_IGNORING
@ SVC_IGNORING
vehicles ignoring classes
Definition: SUMOVehicleClass.h:135
PollutantsInterface::Helper::getEuroClass
virtual int getEuroClass(const SUMOEmissionClass c) const
Returns the Euro emission class described by this emission class as described in the Amitran interfac...
Definition: PollutantsInterface.h:199
PollutantsInterface::myPHEMlightHelper
static HelpersPHEMlight myPHEMlightHelper
Instance of PHEMlightHelper which gets cleaned up automatically.
Definition: PollutantsInterface.h:386
PollutantsInterface::myAllClassesStr
static std::vector< std::string > myAllClassesStr
get all emission classes in strin format
Definition: PollutantsInterface.h:395
PHEMCEP.h