43 #define IDLE_SPEED (10 / 3.6) 61 if (eClass.size() < 6) {
65 const std::string type = eClass.substr(0, 3);
66 if (type ==
"HDV" || type ==
"LB_" || type ==
"RB_" || type ==
"LSZ" || eClass.find(
"LKW") != std::string::npos) {
73 std::vector<std::string> phemPath;
75 if (getenv(
"PHEMLIGHT_PATH") != 0) {
76 phemPath.push_back(std::string(getenv(
"PHEMLIGHT_PATH")) +
"/");
78 if (getenv(
"SUMO_HOME") != 0) {
79 phemPath.push_back(std::string(getenv(
"SUMO_HOME")) +
"/data/emissions/PHEMlight/");
93 std::string eclower = eClass;
94 std::transform(eclower.begin(), eclower.end(), eclower.begin(), tolower);
102 std::string eClassOffset =
"0";
103 if (eClass.length() == 5 && eClass.substr(0, 4) ==
"Euro") {
104 if (eClass[4] >=
'0' && eClass[4] <=
'6') {
105 eClassOffset = eClass.substr(4, 1);
109 if (vClass ==
"Passenger") {
111 if (fuel ==
"Gasoline") {
113 }
else if (fuel ==
"Diesel") {
115 }
else if (fuel ==
"HybridGasoline") {
116 desc =
"H_" + desc +
"G_";
117 }
else if (fuel ==
"HybridDiesel") {
118 desc =
"H_" + desc +
"G_";
120 desc +=
"EU" + eClassOffset;
121 }
else if (vClass ==
"Moped") {
122 desc =
"KKR_G_EU" + eClassOffset;
123 }
else if (vClass ==
"Motorcycle") {
124 desc =
"MR_G_EU" + eClassOffset;
125 if (fuel ==
"Gasoline2S") {
130 }
else if (vClass ==
"Delivery") {
132 if (fuel ==
"Gasoline") {
134 }
else if (fuel ==
"Diesel") {
137 desc +=
"EU" + eClassOffset +
"_I";
138 if (weight > 1305.) {
140 if (weight > 1760.) {
144 }
else if (vClass ==
"UrbanBus") {
145 desc =
"LB_D_EU" + eClassOffset;
146 }
else if (vClass ==
"Coach") {
147 desc =
"RB_D_EU" + eClassOffset;
148 }
else if (vClass ==
"Truck") {
149 desc =
"Solo_LKW_D_EU" + eClassOffset +
"_I";
150 if (weight > 1305.) {
153 }
else if (vClass ==
"Trailer") {
154 desc =
"LSZ_D_EU" + eClassOffset;
166 if (name.find(
"KKR_") != std::string::npos) {
168 }
else if (name.find(
"RB_") != std::string::npos) {
170 }
else if (name.find(
"LB_") != std::string::npos) {
172 }
else if (name.find(
"LNF_") != std::string::npos) {
174 }
else if (name.find(
"LSZ_") != std::string::npos) {
176 }
else if (name.find(
"MR_") != std::string::npos) {
178 }
else if (name.find(
"LKW_") != std::string::npos) {
188 std::string fuel =
"Gasoline";
189 if (name.find(
"_D_") != std::string::npos) {
192 if (name.find(
"H_") != std::string::npos) {
193 fuel =
"Hybrid" + fuel;
202 if (name.find(
"_EU1") != std::string::npos) {
204 }
else if (name.find(
"_EU2") != std::string::npos) {
206 }
else if (name.find(
"_EU3") != std::string::npos) {
208 }
else if (name.find(
"_EU4") != std::string::npos) {
210 }
else if (name.find(
"_EU5") != std::string::npos) {
212 }
else if (name.find(
"_EU6") != std::string::npos) {
222 if (name.find(
"LNF_") != std::string::npos) {
223 if (name.find(
"_III") != std::string::npos) {
225 }
else if (name.find(
"_II") != std::string::npos) {
227 }
else if (name.find(
"_I") != std::string::npos) {
231 if (name.find(
"Solo_LKW_") != std::string::npos) {
232 if (name.find(
"_II") != std::string::npos) {
234 }
else if (name.find(
"_I") != std::string::npos) {
266 const double corrSpeed =
MAX2((
double) 0.0, v);
271 if (v >
IDLE_SPEED && a < oldCep->GetDecelCoast(corrSpeed, a, slope, 0)) {
276 power = oldCep->
CalcPower(corrSpeed, a, slope);
279 const PHEMCEP*
const oldCep = 0;
288 power = currCep->
CalcPower(corrSpeed, corrAcc, slope);
Data Handler for a single CEP emission data set.
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)
bool hasString(const std::string &str) const
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...
int myIndex
the index of the next class
double compute(const SUMOEmissionClass c, const PollutantsInterface::EmissionType e, const double v, const double a, const double slope, const std::map< int, double > *param) const
Returns the amount of emitted pollutant given the vehicle type and state (in mg/s or in ml/s for fuel...
const std::string & GetVehicleFuelType() const
Getter function to recieve vehicle data from CEP.
HelpersPHEMlight()
Constructor.
int getEuroClass(const SUMOEmissionClass c) const
Returns the Euro emission class described by this emission class as described in the Amitran interfac...
EmissionType
Enumerating all emission types, including fuel.
bool setclass(const std::string &VEH)
static const int HEAVY_BIT
the bit to set for denoting heavy vehicles
C++ TraCI client API implementation.
static OptionsCont & getOptions()
Retrieves the options.
double getWeight(const SUMOEmissionClass c) const
Returns a reference weight in kg described by this emission class as described in the Amitran interfa...
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)
bool GetCEP(const std::vector< std::string > &DataPath, Helpers *Helper)
void addAlias(const std::string str, const T key)
std::string getFuel(const SUMOEmissionClass c) const
Returns the fuel type described by this emission class as described in the Amitran interface (Gasolin...
const std::string & getgClass() const
double 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...
const std::string & getString(const T key) const
static const std::string strDiesel
double GetDecelCoast(double speed, double acc, double gradient)
const double SECONDS_PER_HOUR
static const int PHEMLIGHT_BASE
static const std::string strGasoline
const std::string & getErrMsg() const
double GetMaxAccel(double speed, double gradient)
const std::map< std::string, CEP * > & getCEPS() const
StringBijection< SUMOEmissionClass > myEmissionClassStrings
Mapping between emission class names and integer representations.
std::string getAmitranVehicleClass(const SUMOEmissionClass c) const
Returns the vehicle class described by this emission class as described in the Amitran interface (Pas...
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.
SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc)
Checks whether the string describes a known vehicle class.
static const std::string strBEV
void setCommentPrefix(const std::string &value)
T get(const std::string &str) const
PHEMCEP * GetCep(SUMOEmissionClass emissionClass)
Returns the CEP data for a PHEM emission class.
PHEMlightdll::Helpers myHelper
PHEMlightdll::CEPHandler myCEPHandler
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.
static const double ZERO_SPEED_ACCURACY
double CalcPower(double speed, double acc, double gradient)
const std::string & getFuelType() const
double GetEmission(const std::string &pollutantIdentifier, double power, double speed, bool normalized=false) const
Returns a emission measure for power[kW] level.
double GetCO2Emission(double _FC, double _CO, double _HC, Helpers *VehicleClass)
Helper methods for PHEMlight-based emission computation.
void setPHEMDataV(const std::string &value)