SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
PollutantsInterface.h
Go to the documentation of this file.
1 /****************************************************************************/
8 // Interface to capsulate different emission models
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
11 // Copyright (C) 2013-2016 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 #ifndef PollutantsInterface_h
22 #define PollutantsInterface_h
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <vector>
35 #include <limits>
36 #include <cmath>
37 #include <algorithm>
38 #include <utils/common/StdDefs.h>
40 #include "PHEMCEP.h"
41 
42 
43 // ===========================================================================
44 // class declarations
45 // ===========================================================================
46 class HelpersHBEFA;
47 class HelpersHBEFA3;
48 class HelpersPHEMlight;
49 
50 
51 // ===========================================================================
52 // class definitions
53 // ===========================================================================
59 public:
60 
62  enum EmissionType { CO2, CO, HC, FUEL, NO_X, PM_X, ELEC };
63 
64 
69  struct Emissions {
77 
87  Emissions(SUMOReal co2 = 0, SUMOReal co = 0, SUMOReal hc = 0, SUMOReal f = 0, SUMOReal nox = 0, SUMOReal pmx = 0, SUMOReal elec = 0)
88  : CO2(co2), CO(co), HC(hc), fuel(f), NOx(nox), PMx(pmx), electricity(elec) {
89  }
90 
95  void addScaled(const Emissions& a, const SUMOReal scale = 1.) {
96  CO2 += scale * a.CO2;
97  CO += scale * a.CO;
98  HC += scale * a.HC;
99  fuel += scale * a.fuel;
100  NOx += scale * a.NOx;
101  PMx += scale * a.PMx;
102  electricity += scale * a.electricity;
103  }
104  };
105 
106 
111  class Helper {
112  public:
116  Helper(std::string name) : myName(name) {}
117 
121  const std::string& getName() const {
122  return myName;
123  }
124 
134  virtual SUMOEmissionClass getClassByName(const std::string& eClass, const SUMOVehicleClass vc) {
135  UNUSED_PARAMETER(vc);
136  if (myEmissionClassStrings.hasString(eClass)) {
137  return myEmissionClassStrings.get(eClass);
138  }
139  std::string eclower = eClass;
140  std::transform(eclower.begin(), eclower.end(), eclower.begin(), tolower);
141  return myEmissionClassStrings.get(eclower);
142  }
143 
148  const std::string getClassName(const SUMOEmissionClass c) const {
149  return myName + "/" + myEmissionClassStrings.getString(c);
150  }
151 
157  virtual bool isSilent(const SUMOEmissionClass c) {
158  return (c & 0xffffffff & ~HEAVY_BIT) == 0;
159  }
160 
163 
174  virtual SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass,
175  const std::string& fuel, const std::string& eClass, const double weight) const {
176  UNUSED_PARAMETER(vClass);
177  UNUSED_PARAMETER(fuel);
178  UNUSED_PARAMETER(eClass);
179  UNUSED_PARAMETER(weight);
180  return base;
181  }
182 
188  virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const {
189  UNUSED_PARAMETER(c);
190  return "Passenger";
191  }
192 
198  virtual std::string getFuel(const SUMOEmissionClass c) const {
199  UNUSED_PARAMETER(c);
200  return "Gasoline";
201  }
202 
208  virtual int getEuroClass(const SUMOEmissionClass c) const {
209  UNUSED_PARAMETER(c);
210  return 0;
211  }
212 
219  virtual SUMOReal getWeight(const SUMOEmissionClass c) const {
220  UNUSED_PARAMETER(c);
221  return -1.;
222  }
224 
233  virtual SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope) const = 0;
234 
238  void addAllClassesInto(std::vector<SUMOEmissionClass>& list) const {
240  }
241 
242 
243  protected:
245  const std::string myName;
246 
249 
250  private:
251  Helper& operator=(const Helper&); // just to avoid a compiler warning
252 
253 
254  };
255 
256 
258  static Helper* myHelpers[];
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 
272 
277  static const std::vector<SUMOEmissionClass> getAllClasses();
278 
279 
284  static std::string getName(const SUMOEmissionClass c);
285 
286 
291  static bool isHeavy(const SUMOEmissionClass c);
292 
293 
298  static bool isSilent(const SUMOEmissionClass c);
299 
300 
309  static SUMOEmissionClass getClass(const SUMOEmissionClass base, const std::string& vClass, const std::string& fuel, const std::string& eClass, const double weight);
310 
311 
316  static std::string getAmitranVehicleClass(const SUMOEmissionClass c);
317 
318 
323  static std::string getFuel(const SUMOEmissionClass c);
324 
325 
330  static int getEuroClass(const SUMOEmissionClass c);
331 
332 
338  static SUMOReal getWeight(const SUMOEmissionClass c);
339 
340 
349  static SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope);
350 
351 
359  static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope);
360 
361 
371  static SUMOReal computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const SUMOReal tt);
372 
373 private:
380 
381 };
382 
383 
384 #endif
385 
386 /****************************************************************************/
void addKeysInto(std::vector< T > &list) const
virtual int getEuroClass(const SUMOEmissionClass c) const
Returns the Euro emission class described by this emission class as described in the Amitran interfac...
static SUMOReal getWeight(const SUMOEmissionClass c)
Returns a representative weight for the given emission class see http://colombo-fp7.eu/deliverables/COLOMBO_D4.2_ExtendedPHEMSUMO_v1.7.pdf.
void addScaled(const Emissions &a, const SUMOReal scale=1.)
Add the values of the other struct to this one, scaling the values if needed.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
virtual SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope) const =0
Returns the amount of the emitted pollutant given the vehicle type and state (in mg/s or ml/s for fue...
bool hasString(const std::string &str) const
void addAllClassesInto(std::vector< SUMOEmissionClass > &list) const
Add all known emission classes of this model to the given container.
static Emissions computeAll(const SUMOEmissionClass c, const double v, const double a, const double slope)
Returns the amount of all emitted pollutants given the vehicle type and state (in mg/s or ml/s for fu...
virtual bool isSilent(const SUMOEmissionClass c)
Returns whether the class denotes a silent vehicle for interfacing with the noise model...
EmissionType
Enumerating all emission types, including fuel.
virtual SUMOReal getWeight(const SUMOEmissionClass c) const
Returns a reference weight in kg described by this emission class as described in the Amitran interfa...
Storage for collected values of all emission types.
const std::string myName
the name of the model
const std::string getClassName(const SUMOEmissionClass c) const
Returns the complete name of the emission class including the model.
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:39
static const int HEAVY_BIT
the bit to set for denoting heavy vehicles
Helper methods for PHEMlight-based emission computation.
static const int ZERO_EMISSIONS
the first class in each model representing a zero emission vehicle
const std::string & getName() const
Returns the name of the model.
static Helper * myHelpers[]
the known model helpers
static std::string getAmitranVehicleClass(const SUMOEmissionClass c)
Returns the vehicle class described by the given emission class.
virtual std::string getAmitranVehicleClass(const SUMOEmissionClass c) const
Returns the vehicle class described by this emission class as described in the Amitran interface (Pas...
static HelpersPHEMlight myPHEMlightHelper
Instance of PHEMlightHelper which gets cleaned up automatically.
abstract superclass for the model helpers
int SUMOEmissionClass
static SUMOReal computeDefault(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope, const SUMOReal tt)
Returns the amount of emitted pollutant given the vehicle type and default values for the state (in m...
Helper methods for HBEFA3-based emission computation.
Definition: HelpersHBEFA3.h:54
const std::string & getString(const T key) const
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.
static HelpersHBEFA3 myHBEFA3Helper
Instance of HBEFA3Helper which gets cleaned up automatically.
static const std::vector< SUMOEmissionClass > getAllClasses()
Checks whether the string describes a known vehicle class.
Emissions(SUMOReal co2=0, SUMOReal co=0, SUMOReal hc=0, SUMOReal f=0, SUMOReal nox=0, SUMOReal pmx=0, SUMOReal elec=0)
Constructor, intializes all members.
static bool isSilent(const SUMOEmissionClass c)
Checks whether the emission class describes an electric or similar silent vehicle.
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
static bool isHeavy(const SUMOEmissionClass c)
Checks whether the emission class describes a bus, truck or similar vehicle.
static int getEuroClass(const SUMOEmissionClass c)
Returns the Euro norm described by the given emission class.
Helper(std::string name)
Constructor, intializes the name.
Helper methods for HBEFA-based emission computation.
Definition: HelpersHBEFA.h:54
static SUMOReal compute(const SUMOEmissionClass c, const EmissionType e, const double v, const double a, const double slope)
Returns the amount of the emitted pollutant given the vehicle type and state (in mg/s or ml/s for fue...
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...
static SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc=SVC_IGNORING)
Checks whether the string describes a known vehicle class.
StringBijection< SUMOEmissionClass > myEmissionClassStrings
Mapping between emission class names and integer representations.
static HelpersHBEFA myHBEFA2Helper
Instance of HBEFA2Helper which gets cleaned up automatically.
T get(const std::string &str) const
#define SUMOReal
Definition: config.h:214
Helper & operator=(const Helper &)
vehicles ignoring classes
static std::string getFuel(const SUMOEmissionClass c)
Returns the fuel type of the given emission class.
Helper methods for PHEMlight-based emission computation.
virtual std::string getFuel(const SUMOEmissionClass c) const
Returns the fuel type described by this emission class as described in the Amitran interface (Gasolin...
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...