42 #ifdef CHECK_MEMORY_LEAKS 44 #endif // CHECK_MEMORY_LEAKS 47 #define IDLE_SPEED (10 / 3.6) 65 if (eClass.size() < 6) {
69 const std::string type = eClass.substr(0, 3);
70 if (type ==
"HDV" || type ==
"LB_" || type ==
"RB_" || type ==
"LSZ" || eClass.find(
"LKW") != std::string::npos) {
77 std::vector<std::string> phemPath;
79 if (getenv(
"PHEMLIGHT_PATH") != 0) {
80 phemPath.push_back(std::string(getenv(
"PHEMLIGHT_PATH")) +
"/");
82 if (getenv(
"SUMO_HOME") != 0) {
83 phemPath.push_back(std::string(getenv(
"SUMO_HOME")) +
"/data/emissions/PHEMlight/");
97 std::string eclower = eClass;
98 std::transform(eclower.begin(), eclower.end(), eclower.begin(), tolower);
106 std::string eClassOffset =
"0";
107 if (eClass.length() == 5 && eClass.substr(0, 4) ==
"Euro") {
108 if (eClass[4] >=
'0' && eClass[4] <=
'6') {
109 eClassOffset = eClass.substr(4, 1);
113 if (vClass ==
"Passenger") {
115 if (fuel ==
"Gasoline") {
117 }
else if (fuel ==
"Diesel") {
119 }
else if (fuel ==
"HybridGasoline") {
120 desc =
"H_" + desc +
"G_";
121 }
else if (fuel ==
"HybridDiesel") {
122 desc =
"H_" + desc +
"G_";
124 desc +=
"EU" + eClassOffset;
125 }
else if (vClass ==
"Moped") {
126 desc =
"KKR_G_EU" + eClassOffset;
127 }
else if (vClass ==
"Motorcycle") {
128 desc =
"MR_G_EU" + eClassOffset;
129 if (fuel ==
"Gasoline2S") {
134 }
else if (vClass ==
"Delivery") {
136 if (fuel ==
"Gasoline") {
138 }
else if (fuel ==
"Diesel") {
141 desc +=
"EU" + eClassOffset +
"_I";
142 if (weight > 1305.) {
144 if (weight > 1760.) {
148 }
else if (vClass ==
"UrbanBus") {
149 desc =
"LB_D_EU" + eClassOffset;
150 }
else if (vClass ==
"Coach") {
151 desc =
"RB_D_EU" + eClassOffset;
152 }
else if (vClass ==
"Truck") {
153 desc =
"Solo_LKW_D_EU" + eClassOffset +
"_I";
154 if (weight > 1305.) {
157 }
else if (vClass ==
"Trailer") {
158 desc =
"LSZ_D_EU" + eClassOffset;
170 if (name.find(
"KKR_") != std::string::npos) {
172 }
else if (name.find(
"RB_") != std::string::npos) {
174 }
else if (name.find(
"LB_") != std::string::npos) {
176 }
else if (name.find(
"LNF_") != std::string::npos) {
178 }
else if (name.find(
"LSZ_") != std::string::npos) {
180 }
else if (name.find(
"MR_") != std::string::npos) {
182 }
else if (name.find(
"LKW_") != std::string::npos) {
192 std::string fuel =
"Gasoline";
193 if (name.find(
"_D_") != std::string::npos) {
196 if (name.find(
"H_") != std::string::npos) {
197 fuel =
"Hybrid" + fuel;
206 if (name.find(
"_EU1") != std::string::npos) {
208 }
else if (name.find(
"_EU2") != std::string::npos) {
210 }
else if (name.find(
"_EU3") != std::string::npos) {
212 }
else if (name.find(
"_EU4") != std::string::npos) {
214 }
else if (name.find(
"_EU5") != std::string::npos) {
216 }
else if (name.find(
"_EU6") != std::string::npos) {
226 if (name.find(
"LNF_") != std::string::npos) {
227 if (name.find(
"_III") != std::string::npos) {
229 }
else if (name.find(
"_II") != std::string::npos) {
231 }
else if (name.find(
"_I") != std::string::npos) {
235 if (name.find(
"Solo_LKW_") != std::string::npos) {
236 if (name.find(
"_II") != std::string::npos) {
238 }
else if (name.find(
"_I") != std::string::npos) {
260 const double corrSpeed =
MAX2((
double) 0.0, v);
265 if (v >
IDLE_SPEED && a < oldCep->GetDecelCoast(corrSpeed, a, slope, 0)) {
270 power = oldCep->
CalcPower(corrSpeed, a, slope);
273 const PHEMCEP*
const oldCep = 0;
277 if (a < currCep->GetDecelCoast(corrSpeed, a, slope) && currCep->
getFuelType() !=
"BEV") {
281 power = currCep->
CalcPower(corrSpeed, v == 0.0 ? 0.0 : a, slope);
301 if (fuelType ==
"D") {
303 }
else if (fuelType ==
"G") {
305 }
else if (fuelType ==
"BEV") {
312 if (fuelType ==
"BEV") {
Data Handler for a single CEP emission data set.
SUMOReal getEmission(const PHEMCEP *oldCep, PHEMlightdll::CEP *currCep, const std::string &e, const double p, const double v) const
Returns the amount of emitted pollutant given the vehicle type and state (in mg/s or in ml/s for fuel...
void remove(const std::string str, const T key)
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
double GetEmission(const std::string &pollutant, double power, double speed, Helpers *VehicleClass)
int myIndex
the index of the next class
const std::string & getString(const T key) const
HelpersPHEMlight()
Constructor.
EmissionType
Enumerating all emission types, including fuel.
bool setclass(const std::string &VEH)
double CalcPower(double v, double a, double slope, double vehicleLoading=0) const
Returns the power of used for a vehicle at state v,a, slope and loading.
std::string getFuel(const SUMOEmissionClass c) const
Returns the fuel type described by this emission class as described in the Amitran interface (Gasolin...
static const int HEAVY_BIT
the bit to set for denoting heavy vehicles
SUMOReal getWeight(const SUMOEmissionClass c) const
Returns a reference weight in kg described by this emission class as described in the Amitran interfa...
const std::string & getErrMsg() const
static OptionsCont & getOptions()
Retrieves the options.
static PHEMCEPHandler & getHandlerInstance()
Implementatio of Singelton pattern.
std::map< SUMOEmissionClass, PHEMlightdll::CEP * > myCEPs
void insert(const std::string str, const T key, bool checkDuplicates=true)
double GetEmission(const std::string &pollutantIdentifier, double power, double speed, bool normalized=false) const
Returns a emission measure for power[kW] level.
bool GetCEP(const std::vector< std::string > &DataPath, Helpers *Helper)
void addAlias(const std::string str, const T key)
T get(const std::string &str) const
const std::string & GetVehicleFuelType() const
Getter function to recieve vehicle data from CEP.
const double SECONDS_PER_HOUR
static const int PHEMLIGHT_BASE
SUMOReal compute(const SUMOEmissionClass c, const PollutantsInterface::EmissionType e, const double v, const double a, const double slope) const
Returns the amount of emitted pollutant given the vehicle type and state (in mg/s or in ml/s for fuel...
StringBijection< SUMOEmissionClass > myEmissionClassStrings
Mapping between emission class names and integer representations.
SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc)
Checks whether the string describes a known vehicle class.
int getEuroClass(const SUMOEmissionClass c) const
Returns the Euro emission class described by this emission class as described in the Amitran interfac...
void setCommentPrefix(const std::string &value)
PHEMCEP * GetCep(SUMOEmissionClass emissionClass)
Returns the CEP data for a PHEM emission class.
const std::map< std::string, CEP * > & getCEPS() const
PHEMlightdll::Helpers myHelper
PHEMlightdll::CEPHandler myCEPHandler
const std::string & getgClass() const
bool hasString(const std::string &str) const
double CalcPower(double speed, double acc, double gradient)
std::string getAmitranVehicleClass(const SUMOEmissionClass c) const
Returns the vehicle class described by this emission class as described in the Amitran interface (Pas...
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.
const std::string & getFuelType() const
double GetCO2Emission(double _FC, double _CO, double _HC, Helpers *VehicleClass)
Helper methods for PHEMlight-based emission computation.
void setPHEMDataV(const std::string &value)