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.
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...
void remove(const std::string str, const T key)
double getWeight(const SUMOEmissionClass c) const
Returns a reference weight in kg described by this emission class as described in the Amitran interfa...
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...
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
C++ TraCI client API implementation.
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)
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...
T get(const std::string &str) const
static const std::string strDiesel
double GetDecelCoast(double speed, double acc, double gradient)
const std::string & GetVehicleFuelType() const
Getter function to recieve vehicle data from CEP.
const double SECONDS_PER_HOUR
static const int PHEMLIGHT_BASE
static const std::string strGasoline
double GetMaxAccel(double speed, double gradient)
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...
static const std::string strBEV
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
static const double ZERO_SPEED_ACCURACY
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)