# Straßenverkehr (1A3b)

Bemerkung

This project and docupage is under active development!

Für den Straßenverkehr in TREMOD werden die Fahrzeugbestände, Fahr- und Verkehrsleistungen, sowie der Energiebedarf und die Emissionen aller in Deutschland betriebenen motorisierten Verkehrsmittel des Straßenverkehrs jährlich erfasst. Die Ergebnisse liegen für den Zeitraum ab 1950 bis 2050 für Deutschland insgesamt (bzw. bis 1993 unterteilt für Ost- und Westdeutschland) vor. TREMOD bildet das Inlandsprinzip (Verkehre auf deutschem Territorium) und das Energiebilanzprinzip (in Deutschland für den Straßenverkehr abgesetzte Energiemengen) ab.

Hinweis: Die nachfolgende Dokumentation fokussiert auf die Modelllogik von TREMOD. Weitere Informationen zu den Datenquellen, Annahmen und Ergebnissen und Berechnungsmethoden werden in den veröffentlichen TREMOD-Berichten für das UBA dokumentiert.

Aktuelle Version: 7.01 (Arbeitsversion)

## 1. Methodik

Der Energieverbrauch und die Emissionen pro Jahr werden bottom berechnet und können anschließend differenziert oder in aggregierter Form in TREMOD abgefragt werden. Die Berechnung erfolgt in den Modulen stock (Bestände), mileage (Fahr- und Verkehrsleistung) und emissions (Energieverbrauchs- und Emissionsfaktoren) statt, siehe Abbildung.

Schema Emissionsberechnung Straßenverkehr

TREMOD verwendet verschiedene Definitionen für Fahrzeugmerkmale, von der Fahrzeugkategorie (oberste Ebende) bis hin zur Fahrzeugschicht (differenzierteste Ebene). Dazwischen existieren weitere Ebenen, z.B. Segment ( Fahrzeugkategorie + Größenklasse + Antrieb) oder Konzept (Fahrzeugkategorie + Antrieb + Emissionsstandard). Folgende Tabelle stellt diese am Beispiel Lkw dar.

Fahrzeugdefinitionen
Defintion | Abkürzung | Beispiel
--- | --- | ---
Fahrzeugkategorie | Fzkat | Lkw
Größenklasse | GK | 12–14t (zGG)
Antrieb | Antr | Diesel
Segment | Segm | RigidTruck >12-14t (Diesel)
Baujahr | BJ | 2010
Emissionsstandards | ES | Euro-V
Attribut | Attr | SCR, DPF
Fahrzeugschicht | FS | RT >12-14t Euro-V SCR
Konzept | Konz | HDV diesel Euro-5 SCR (DPF)

Abkürzungen: SCR: Selektive Catalytic Reduktion, EGR: Exhaust Gas Recirculation, zGG: zulässiges Gesamtgewicht

TREMOD verwendet eine Vielzahl an verschiedenen Eingangsdaten. Ein Teil der Eingangsdaten wird standardmäßig für die Fortschreibung des Inventars und des Trendszenarios aktualisiert, andere Eingangsdaten können bei Bedarf, z.B. im Fall von methodischen Weiterentwicklungen aktualisiert werden. Folgende Tabelle gibt hierzu eine Übersicht.

Übersicht Eingangsdaten Straße und Aktualisierungsturnus
Modul | Jährlich (Inventar + Trendszenario) | Bei Bedarf
--- | --- | ---
Allgemein | Energiebilanzdaten, Anteil Biokraftstoffe | Heizwerte, Dichten
Bestand | Realbestände KBA, Bestände Mopeds und Pedelces, Neuzulassungen (NZL), NZL-Anteil Segment, NZL-Anteil Emissionsstandard | Anteil EGR/SCR, Anteil Partikelfilter, Anteil High-Emitter, Anteil Softwareupdates
Fahrleistung | Fahrleistungen pro Fahrzeugkategorie, Anteil Straßenkategorie | Fahrleistungsgewichtung Segment, Fahrleistungsgewichtung Alter
Verkehrsleistung | Verkehrsleistungen pro Verkehrsart | Auslastungsgrade Segment
Emissionen | CO2-Intensität Kraftstoffe, jährliche Effizienzverbesserung | Emissionsfaktoren HBEFA

In den folgenden Abschnitten zur Berechnung wird auf die jeweiligen Eingangsdaten vertieft eingegangen.

### 1.1 Bestände

Im Bestands-Modul werden die Realbestände des KBA um zusätzliche Merkmale der Emissionsberechnung (z.B. Abgasnachbehandlung) erweitert und auf Basis von jährlichen Neuzulassungen und Überlebenskurven für das Trendszenarios bis 2050 fortgeschrieben. Ergebnis ist der Fahrzeugbestand nach Fahrzeugschicht für die Bezugsjahre 1950 bis 2050.

Der Realbestand wird aus einer Sonderauswertung des Kraftfahrtbundesamtes (KBA) ermittelt. Diese umfasst den Bestand zum 1.1. des Jahres für Deutschland insgesamt nach verschiedenen Merkmalen, z.B. Fahrzeugkategorie, Antrieb, Größenklasse (z.B. zul. Gesamtgewicht) Erstzulassungsjahr, Emissionsklasse.

Die Anfrage wird per E-Mail an fahrzeugstatistik@kba.de gestellt und erfolgt im Rahmen der Amtshilfe. Die Daten müssen vor der Verwendung in TREMOD aufbereitet werden:

- Berechnung des Bestandes zur Jahresmitte aus dem Bestand zum 1.1. des Bezugsjahres und dem 1.1. des Folgejahres zur Ableitung eines repräsentativen Fahrzeugbestandes für das ganze Bezugsjahr (Im Gegensatz zu einem Bestand zu einem Stichtag, z.B. 1.7. werden somit auch ungleiche Änderungen innerhalb der 1. und 2. Jahreshälfte erfasst. Beispielsweise wurden Elektro-Pkw bisher stärker gegen Jahresende zugelassen)

- Neuzuordnung der Fahrzeugkategorien, z.B. „Lastkraftwagen“ in LNF (3,5 t zGG) und LKW (>= 3,5 t zGG)

- Neuzuordnung nicht verwendeter Antriebsarten, z.B. „Vielstoff“ zu „Diesel“

- Zusammenfassung von Fahrzeugen mit einem Alter von mehr als 60 Jahren zu 60 Jahren.

- Zuordnung der Emissionsstandards über die Emissionsklasse und das Erstzulassungsjahr inklusive Neuzuordnung unplausibler Emissionsstandards, z.B. Euro 1 Baujahr 2010 zu Euro 5.

Anschließend wird in TREMOD der Bestand nach Fahrzeugkategorie, Antrieb, Erstzulassungsjahr und Emissionsstandard um weitere Attribute ergänzt:

- Anteil Partikelfilter Diesel-Pkw und Busse je Baujahr

- Anteil EGR und SCR bei Bussen und schweren Nutzfahrzeugen mit Euro IV und V

- Anteil Euro 5- und Euro 6 Diesel-Pkw mit Softwareupdates je Bezugsjahr

- Anteil High-Emitters für Busse und schweren Nutzfahrzeuge mit Euro V, VI und 7

Die Berechnung erfolgt multiplikativ mit den jeweiligen Anteilen zum Fahrzeugbestand.

Für das Trendszenario werden jährlichen Neuzulassungen nach Fahrzeugschicht und die Überlebenskurven benötigt. Die jährlichen Neuzulassungen berechnen sich aus aus dem Produkt folgender Werte:

- AbsolutenNeuzulassungen je Fahrzeugkategorie

- Anteil Segmente je Fahrzeugkategorie

- Anteil Emissionsstandards je Segment und Zulassungsjahr

Die Neuzulassungen und Neuzulassungsanteile werden auf Basis von Annahmen, z.B. Erfüllung der CO2-Flottenzielwerte und Schadstoffemissionsgrenzwerte festgelegt.

Die Überlebenskurven beschreiben das Verhältnis der neuzugelassenen Fahrzeuge zum verbleibenden Bestand für das Fahrzeugalter von 0-60 Jahre. Für die Fortschreibung wird das Verhältnis des verbleibenden Bestands des jeweiligen Bezugsjahres zum Vorjahr berechnet, damit auch der Bestand der Fahrzeuge im Realbestand fortschrieben werden kann.

Ablaufdiagramm Bestandsberechnung

Abkürzungen: Fzkat: Fahrzeugkategorie, Segm: Segment, ES: Emissionsstandard, BJ: Baujahr, FS: Fahrzeugschicht, SCR: Selektive Catalytic Reduktion, EGR: Exhaust Gas Recirculation, DPF: Diesel Particle Filter, Trend: Trendszenario

### 1.2 Fahrleistungen

Im Fahrleistungsmodul werden jährliche Fahr- und Verkehrsleistungen je nach Fahrzeugschicht, Baujahr, Energie und Straßenkategorie sowie die mittlere kumulierte (Lebens-)Fahrleistung je Fahrzeugsegment (Größenklasse und Antrieb) berechnet.

Für die Fahrleistungen werden zunächst die Gesamtfahrleistungen je Fahrzeugkategorie und Bezugsjahr auf die Straßenkategorien aufgeteilt. Die Eingangsdaten für Realjahre werden aus verschiedenen Erhebungen, z.B. der Bundesanstalt für Straßenwesen (BASt), dem Kraftfahrtbundesamt (KBA), dem Bundesamt für Logistik und Mobilität (BALM) oder dem statistischen Bundesamt (DESTATIS) zusammengestellt und für TREMOD aufbereitet. Die Ergebnisse werden soweit möglich mit der Erhebung Verkehr in Zahlen (VIZ) des Bundesministeriums für Verkehr (BMV) abgeglichen. Hierbei ist jedoch zu erwähnen, dass TREMOD die Inlandsfahrleistungen und VIZ die Inländerfahrleistungen ausweist.

Anschließend erfolgt auf Basis der Bestandsanteile und von Gewichtungsfaktoren nach Segment und Alter die Berechnung der Fahrleistung pro Straßenkategorie, Fahrzeugschicht, Baujahr und Energieart. Die Eingangsdaten für die Gewichtungsfaktoren stammen aus verschiedenen Quellen, z.B. der Fahrleistungserhebung der BASt. Weitere Informationen sind in den jeweils aktuellen TREMOD-Berichten dokumentiert.

Ablaufdiagramm Fahrleistungsberechnung

Abkürzungen: Fzkat: Fahrzeugkategorie, Segm: Segment, ES: Emissionsstandard, BJ: Baujahr, FS: Fahrzeugschicht, SK: Straßenkategorie, En: Energieart)

Die kumulierten Fahrleistungen werden in zwei Schritten berechnet:

  - Berechnung der mittlere Jahresfahrleistungen je Fahrzeugsegment und Baujahr (Fahrleistung dividiert durch Bestand)

  - Aufkumulierung der mittleren Jahresfahrleistungen seit der Erstzulassung

Die Verkehrsleistungen werden mithilfe der spezifischen Kapazität je Segment (z.B. Zuladung in Tonnen oder Sitzplätze) und mittleren Auslastungsgraden zunächst bottom-up berechnet. Anschließend werden die Auslastungsgrade so kalibriert, dass die vorgegebene Verkehrsleistung je Verkehrsart getroffen wird und die Berechnung erneut durchgeführt.

### 1.3 Energieverbrauch und Emissionen

Die Berechnung des Energieverbrauchs und der Emissionen basiert auf der Methodik des Handbuch Emissionsfaktoren für den Straßenverkehr (HBEFA). Es wird zwischen Warm (hot)-, Kaltstart (coldstart)- und Verdungstungs(Evaporation)-Emissionen unterschieden, welche unterschiedliche Aktivitätsdaten und Emissionsfaktoren verwenden. Detaillierte Informationen zum HBEFA finden sich unter www.hbefa.net.

Die Warmemissionen (warm emissions) werden pro Fahrzeugschicht, Baujahr, Energieart und Straßenkategorie berechnet. Hierbei werden die Emissionsfaktoren pro Kilometer mit der Fahrleistung verknüpft. Die Einheit der Emissionen wird in den folgenden Formeln beispielhaft in g angegeben, kann aber je nach Schadstoff variieren, z.B. MJ für Energieverbrauch, # für Partikelanzahl.

Warmemissionen (g/km) = Fahrleistung (km) x Basisemissionsfaktor (g/km)

Differenzierung: Fahrzeugschicht, Energieart, Straßenkategorie, Schadstoff. Anmerkung: mit Basisemissionsfaktor sind hier die ungewichteten Emissionsfaktoren je Fahrzeugschicht (im HBEFA „Subsegment“) gemeint. Diese beziehen sich z.B. auf eine kumulierte Fahrleistung von 50.000 km.

Anschließend werden auf die Basisemissionsfaktoren je nach Fahrzeugkategorie und Schadstoff verschiedene Korrekturfaktoren angewendet. Folgende Tabelle gibt hierzu einen Überblick:

Einflussfaktoren und Parameter
Faktor | Abhängige Parameter | Schadstoffe | Fahrzeugkategorie | Anwendung zum Basisemissionsfaktor
--- | --- | --- | --- | ---
Energieeffizienz | Baujahr | EC | alle | multiplikativ
Verschlechterungsfaktor | kumulierte Fahrleistung | HC, CO, NOx, PM10-ex, CH4, N2O, NH3, N2O | Pkw, LNF, Lkw, LZ, SZ, LBus, ÜeKfzl, Üekfzs, FlBus, SRbus | additiv
Auslastungskorrektur | mittlere Beladung | alle | Lkw, LZ, SZ, LBus, Üekfzs, FlBus, SRbus | lineare interpolation (0%,50%,100% Beladung)
Kraftstoffqualität | Bezugsjahr | HC, CO, NOx, PM10-ex | alle | multiplikativ

Die Berechnung der N2O und NH3 Emissionen wird wie im HBEFA gemäß der Methode des COPERT-Modells nachgebildet und berücksichtigt zusätzlich den Schwefelgehalt im Kraftstoff.

Die Kaltstartemissionen berechnen sich aus der Anzahl der Kaltstarts und den mittleren Emissionsfaktoren pro Start je Fahrzeugschicht. Die Anzahl der Starts wird aus der Fahrleistung und der mittleren Wegelänge je Fahrzeugkategorie/-Segment berechnet.

Kaltstartemissionen/Energieverbrauch (g) = Anzahl starts (-) x Emissionsfaktor (g/Start)

Differenzierung: Fahrzeugschicht, Energieart, Schadstoff

Die Verdunstungsemissionen berechnen sich je nach Art der Verdunstung aus dem Bestand (soak emissions), der Fahrleistung (running losses) und der Anzahl Starts (diurnal). Anm: Verdunstungsemissionen treten nur für Nicht-Methan-Kohlenwasserstoffe (NMHC) und deren Komponenten auf. Der Energieverbrauch und sonstige Schadstoffe sind nicht betroffen.

Abstellemissionen (g) = Anzahl stopps (-) x Emissionsfaktor (g/Stopp)

Differenzierung: Fahrzeugschicht, Energieart, Schadstoff

(Die Anzahl der Stops wird gleich der Anzahl der Starts angenommen, siehe Kaltstartemissionen).

Tankatmung (g) = Anzahl Fahrzeuge (-) x 365 (d) x Emissionsfaktor (g/Fahrzeug/d)

Differenzierung: Fahrzeugschicht, Energieart, Schadstoff

Running Losses (g) = Fahrleistung (km) x Emissionsfaktor (g/km)

Differenzierung: Fahrzeugschicht, Energieart, Straßenkategorie, Schadstoff

Zusätzlich finden folgende Schritte für abgeleitete Emissionen statt:

  - die Aufteilung aller Emissionen nach fossilen und Biokraftstoffen

  - die Berechnung der kraftstoffverbrauchsabhängigen Emissionen (CO2, SO2, Pb)

  - Berechnung der Emissionen von HC-Komponenten (z.B. CH4, NMHC)

  - Berechnung von NO2-Emissionen aus den NOx-Emissionen

  - Berechnung von CO2-Äquivalenten

  - Berechnung von Black-Carbon Emissionen

Die Aufteilung in fossile und Biokraftstoffe erfolgt über die Anteilsfaktoren je Energieart und Bezugsjahr. Sie wird für alle Größen (Fahrleistungen, Energieverbrauch, Emissionen) durchgeführt. Die Eingangsdaten für die Biokraftstoffanteile stammen aus der amtlichen Mineralölstatistik (AMS) des BAFA. Im Trendszenario werden Annahmen zum Biokraftstoffeinsatz, z.B. zur Einhaltung gesetzlicher Quoten, getroffen.

Emissionen_Energie (g) = Emissionen_Energie_Bezug (g) x Anteil_Energie/Energie_Bezug (%)

Differenzierung: Bezugsjahr, Energieart, Verkehrsträger

Die CO2-Emissionen werden mithilfe des Energieverbrauchs und spezifischer CO2-Emissionsfaktoren (kg/TJ) je Energieart berechnet. Die Emissionsfaktoren werden jährlich vom Umweltbundesamt aktualisiert und für TREMOD zur Verfügung gestellt. Die Werte für SO2 und Pb sind in den TREMOD-Berichten beschrieben. Die folgende Formel veranschaulicht die Berechnung am Beispiel CO2.

CO2-Emissionen (kg) = Energieverbrauch (TJ) x Emissionsfaktor (kg/TJ)

Differenzierung: Bezugsjahr, Energieart, Verkehrsträger

Die Schadstoffe CH4, NMHC, Benzol, Toluol, Xylol werden als Anteile von HC, welche mit den HC-Emissionen multipliziert werden berechnet. Die HC-Anteile stammen aus dem HBEFA. Die folgende Formel veranschaulicht die Berechnung am Beispiel CH4.

CH4-Emissionen (g) = HC-Emissionen (g) x Anteil CH4/HC (%)

Differenzierung: Konzept, Emissionsart

Die NO2-Emissionen werden als Anteile von NOx, welche mit den NOx-Emissionen multipliziert werden, berechnet. Die NO2-Anteile stammen aus dem HBEFA.

NO2-Emissionen (g) = NOx-Emissionen (g) x Anteil NO2/NOx (%)

Differenzierung: Konzept, kumulierte Fahrleistung, Straßenkategorie

### 1.4 Energiebilanzkorrektur und ZSE-Ausgabe

TREMOD berechnet die Energieverbräuche des Verkehrs bottom-up auf Grundlage von Beständen, Fahrleistungen und spezifischen Emissionsfaktoren. Für die Berichterstattung des Umweltbundesamtes sind jedoch die offiziell gemeldeten Kraftstoffabsätze im Verkehr relevant, welche jährlich von der Arbeitsgemeinschaft Energiebilanzen (AGEB) erstellt werden. Daher wird in TREMOD eine Energiebilanzkorrektur durchgeführt. Diese erfolgt in Form von Korrekturfaktoren, welche auf den Energieverbrauch und die Emissionen angewendet werden. Bestände und Fahrleistungen werden nicht korrigiert. Folgende Formel veranschaulicht die Berechnung am Beispiel des Benzinverbrauchs.

Benzinverbrauch_korrigiert (MJ) = Benzinverbrauch (MJ) x Korrekturfaktor (-)

Differenzierung: Verkehrsträger, Fahrzeugkategorie, Energieart, Bezugsjahr

Für die Unterscheidung nach Fahrzeugkategorie und Energieart wird wie folgt vorgegangen:

  - Die Korrekturfaktoren für Benzin-Pkw, Benzin-LNF und MZR werden direkt aus dem Verhältnis des Benzinabsatzes laut Energiebilanz zum berechneten Benzinverbrauch für alle Fahrzeugkategorien in TREMOD berechnet.

  - Die Korrekturfaktoren für Diesel-Pkw und Diesel-LNF werden von Benzin-Pkw und Benzin-LNF übernommen.

  - Die Korrekturfaktoren für SNF und Busse werden aus der Restmenge des Dieselabsatzes (Dieselabsatz ingesamt - Dieselabsatz Pkw+LNF) im Verhältnis zum berechneten Dieselverbrauch der SNF und Busse berechnet.

  - Für alle sonstigen Energiearten werden die Korrekturfaktoren über das Verhältnis von Absatz zu Verbrauch ermittelt, unabhängig von der Fahrzeugkategorie.

  - Falls keine Energiebilanzdaten für eine Energieart vorliegen oder diese für die Berichterstattung nicht relevant sind, wird als Korrekturfaktor 1 verwendet

Die hierbei berechneten Korrekturfaktoren werden auch für die Emissionen angewendet.

Die korrigierten Energieverbrauchsdaten bilden auch die Grundlage für die nationale Berichterstattung im zentralen System Emissionen (ZSE). TREMOD verfügt hierzu über eine eigene ZSE-Schnittstelle für den Verkehr.

Das ZSE unterscheidet im Straßenverkehr nach Fahrzeugkategorie, Kraftstoffart, Emissionsstandard, Emissionsart, Straßenkategorie und Bezugsjahr. Dabei wird jedoch eine aggregierte Datenform und eine eigene Nomenklatur verwendet, welche in entsprechenden Zuordnungstabellen hinterlegt ist. Auch wird nur ein Teil der in TREMOD verfügbaren Schadstoffe für das ZSE berichtet.

Das ZSE beinhaltet folgende Kenngrößen:

  - Aktivitätsrate: für direkte Emissionen in Terajoule (TJ), für Verdunstungsemissionen in Tonnen (t) Kraftstoff

  - Emissionsfaktoren: für direkte Emissionen in kg/TJ, für Verdunstungsemissionen in kg/t Kraftstoff

Die Emissionsfaktoren berechnen sich aus dem Quotient aus den Emissionen und dem Endenergieverbrauch je Bezugsjahr und ZSE-Kategorie.

## 2. Implementierung

Der Quellcode für sämtliche Abfragen und Berechnungen von TREMOD erfolgt in Python und die Datenhaltung in mehreren PostgreSQL-Datenbanken. Im folgenden werden die Datenschnittstellen, Eingangsdatenformate und Berechnungschritte skizziert.

### 2.1 Datenschnittstellen

Alle Eingangsdaten und Definitionen sind als Tabellen in der SQL-Datenbank gespeichert und können dort verändert werden, z.B. für jährliche Updates. Sie werden über das Modul tableoperations aufgerufen und in die Berechnungen für TREMOD-Road integriert. Der Name der Datenbank setzt sich aus „tremod_road“ + „Versionsnummer“ zusammen.

Alle verwendeten Tabellen werden im Modul tableoperations.py und der Klasse PersistanceLayer aufgelistet. Sie beinhaltet folgende Methoden, welche im folgenden genauer beschrieben werden:

get_common

get_definitions

get_stock_data

get_milage_data

get_emission_factors

Die Methoden get_results und write_to_db dienen dem Lesen und Schreiben der Ergebnisse zu Bestand, Fahr- und Verkehrsleistung und Emissionen in die Datenbank.

### 2.2 Eingangsdaten

Die aktuellen Datenquellen sind in den UBA-Berichten zur TREMODD-Aktualisierung dokumentiert. Daher wird nur auf die wichtigsten Tabellen eingegangen, welche im Rahmen der jährlichen Updates angepasst werden.

Common data

Tabellen:

Energiebilanz

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idland | integer | siehe tg_land
bezugsjahr | integer | Bezugsjahr
idenergy | integer | siehe tg_energie
idvtr | integer | siehe tg_vtraeger
menge | double precision | Energieabsatz in t
tj | double precision | Energieabsatz in TJ
com_enbil | text | Kommentar/Quelle
heizwert | double precision | Heizwert in MJ/kg
dichte | double precision | Dichte in kg/l bzw. kg/m³

Kraftstoffbezogene Emissionsfaktoren, tank-to-wheel

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idland | integer | siehe tg_land
idvtr | integer | siehe tg_vtraeger
idss | integer | Schadstoff
jahr | bigint | Bezugsjahr
idenergy | integer | siehe tg_energie
efaspez | double precision | Emissionsfaktor g/kg
efaspez_tj | double precision | Emissionsfaktor kg/TJ
ppm | double precision | Schwefelanteil Kraftstoff in ppm
com | text | Kommentar

Biokraftstoffanteile

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
bezugsjahr | integer | Bezugsjahr
idenergy | integer | siehe tg_energie
idenergy_bezug | integer | siehe tg_energie
anteil | real | Anteil in % (energetisch)
idvtr | integer | Verkehrsträger (Straße, Schiene, Binnenschiff, Luft)

Defintions

Tabellen:

Schadstoffe (tg_ss)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idss | integer |
ss | text |
com_ss | text |
ss_en | text |
com_ss_en | text |
res_unit | text |

Verkehrsarten (tg_verkehrsart)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idverkehrsart | integer |
verkehrsart | text |
com_verkehrsart | text |

Energiearten (tg_energie)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idenergy | integer | ID Energieart
energie | text | Energieart kurz
dichte | double precision | Dichte in kg/m³
com_energie | text | Energieart lang_en
corinair_encode | text | aktuell nicht benötigt
heizwert | double precision | aktuell nicht benötigt
aktivenbil | boolean | aktuell nicht benötigt
energie_elcd | text | Energieart kurz_dt
energie_ges | text | Energieart Bezug (Biokrafstoffe inkl.)
idenergy_bezug | integer | ID Energieart_Bezug

Straßenkategorien (tg_sk)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idsk | integer | ID Straßenkategorie
sk | text | Straßenkategorie_kurz_dt
com_sk | text | Straßenkategorie_lang_dt
aktiv_segment | boolean | aktuell nicht benötigt
sk_dtch | text | aktuell nicht benötigt
com_sk_dtch | text | aktuell nicht benötigt
sk_dtbrd | double precision | aktuell nicht benötigt
com_sk_dtbrd | double precision | aktuell nicht benötigt
sk_en | text | Straßenkategorie_kurz_en
com_sk_en | double precision | aktuell nicht benötigt
sk_fr | double precision | aktuell nicht benötigt
com_sk_fr | double precision | aktuell nicht benötigt
sk_it | double precision | aktuell nicht benötigt
com_sk_it | double precision | aktuell nicht benötigt

Straßentypen (tg_strtyp)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idstrtyp | integer | ID Straßentyp
strtyp | text | Straßentyp_kurz_dt
com_strtyp | text | Straßentyp_lang_dt
sk_elcd | text | aktuell nicht benötigt
idvsav | integer | aktuell nicht benötigt

Fahrzeugkategorien (tg_fzkat)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idfzkat | integer | ID Fahrzeugkategorie
fzkat | text | Fahrzeugkategorie_kurz_dt
com_fzkat | text | Fahrzeugkategorie_lang_dt
realstock | boolean | Vorkommen in Realbestand ja/nein
modelstock | boolean | Vorkommen in Modelbestand ja/nein
selected | boolean | aktuell nicht benötigt
aktiviert | boolean | aktuell nicht benötigt
aktiv_fs | boolean | aktuell nicht benötigt
idfzkat_hb | integer | Zuordnung Fahrzeugkategorie HBEFA
idftyp | integer | ID Fahrzeugtyp (1 leichte Motorwagen, 2 schwere Motorwagen, 3 mot. Zweiräder)
idfzklasse | integer | aktuell nicht benötigt
idfzkat_buwal/emis | integer | aktuell nicht benötigt
idpg | integer | aktuell nicht benötigt
idvtr | integer | siehe tg_vtraeger
idpriöff | integer | aktuell nicht benötigt
idverkehrsart | integer | siehe tg_verkehrsart
fzkat_dtch | text | aktuell nicht benötigt
com_fzkat_dtch | text | aktuell nicht benötigt
fzkat_dtbrd | double precision | aktuell nicht benötigt
com_fzkat_dtbrd | text | aktuell nicht benötigt
fzkat_en | text | Fahrzeugkategorie_kurz_en
com_fzkat_en | double precision | Fahrzeugkategorie_lang_en
fzkat_fr | double precision | aktuell nicht benötigt
com_fzkat_fr | double precision | aktuell nicht benötigt
fzkat_it | double precision | aktuell nicht benötigt
com_fzkat_it | double precision | aktuell nicht benötigt
aktiviert_ch | boolean | aktuell nicht benötigt
aktiviert_brd | boolean | aktuell nicht benötigt
aktiviert_a | boolean | aktuell nicht benötigt
fzkat_elcd | text | aktuell nicht benötigt

Segmente (tb_fzkat_segm)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idfzkat | integer | siehe tg_fzkat
segment | bigint | ID Segment
idgk | integer | siehe tg_gk
idantrieb | integer | siehe tg_antrieb
segmentname | text | Segment_en
idfzkat_hb | integer | ID Fahrzeugkategorie HBEFA
idsegment_hb | integer | ID Segment HBEFA aktuell
idsegment_hb3 | integer | ID Segment HBEFA 3
idsegment_hb4 | integer | ID Segment HBEFA 4
aktiv | boolean | aktuell nicht benötigt
aktivbezugsjahr | boolean | aktuell nicht benötigt
idaufbau | integer | aktuell nicht benötigt
segmentgruppe | bigint | aktuell nicht benötigt
idenergy | integer | siehe tg_energie
idgk_vav | integer | aktuell nicht benötigt
idantrieb_vav | integer | aktuell nicht benötigt

Emissionsstandards (tg_es)

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
ides | integer | ID Emissionsstandard
es | text | Emissionsstandard_kurz_en
com_es | text | Emissionsstandard_lang_en
aktiv | boolean | Verwendet ja/nein
ides_alt | integer | aktuell nicht benötigt
idemconc | integer | aktuell nicht benötigt
idvehcat | integer | aktuell nicht benötigt
ides_vav | integer | aktuell nicht benötigt

Stock

Tabellen:

btb_bestand_real

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
idfzkat | integer | siehe tg_fzkat
bezugsjahr | bigint | Bezugsjahr
baujahr | integer | Baujahr
segment | bigint | siehe tb_fzkat_segm
ides | integer | siehe tg_es
bestand | double precision | Bestand (Mittelwert 1.1. Bezusjahr und 1.1. Folgejahr)

btb_neuzulassungen

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
idfzkat | integer | siehe tg_fzkat
baujahr | integer | Baujahr
neuzulassungen | integer | Anzahl Neuzulassungen bis Jahresende
recordowner | character varying | aktuell nicht benötigt

btb_neuzul_anteile

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
idfzkat | integer | siehe tg_fzkat
segment | integer | siehe tb_fzkat_segm
baujahr | integer | Baujahr
anteil | real | Neuzulassungsanteil der Segmente pro Fahrzeugkategorie und Baujahr
idue_kurve | integer | siehe btg_ue_kurven
recordowner | character varying | aktuell nicht benötigt

Mileage

Tabellen:

Verkehrsleistungen

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
bezugsjahr | integer | Bezugsjahr
idverkehrsart | integer | siehe tg_verkehrsart
wert | real | Jährliche Verkehrsleistung in Pkm oder tkm

Gesamtfahrleistungen

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
bezugsjahr | integer | Bezugsjahr
idfzkat | integer | siehe tg_fzkat
fl | real | Jährliche Inlandsfahrleistung in km
com_fl | character varying | Kommentar

Fahrleistungsanteile Straßentyp

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
idstrtyp | integer | siehe tg_strtyp
bezugsjahr | integer | Bezugsjahr
idfzkat | integer | siehe tg_fzkat
flant | real | Fahrleistungsanteil der Straßentypen pro Fahrzeugkategorie und Jahr
idvs_kurve | integer | siehe tg_vs_kurve

Emissions

Tabellen:

Hinweis: Erläuterungen zu den Spalten sind im HBEFA bzw. inder HBEFA-Dokumentation zu finden

Emissionsfaktoren warm

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
reference_year | bigint |
country | text |
emission_category | text |
pollutant | text |
traffic_scenario | text |
ambient_cond._pattern | text |
vehicle_category | text |
subsegment | text |
idsubsegment | integer |
energy | text |
aggr._traffic_situation | text |
road_category | text |
ef_unit | text |
v | double precision |
v_0% | double precision |
v_100% | double precision |
efa | double precision |
efa_0% | double precision |
efa_100% | double precision |
cum._mileage | double precision |

Emissionsfaktoren Kaltstart

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
reference_year | bigint |
country | text |
emission_category | text |
pollutant | text |
traffic_scenario | text |
ambient_cond._pattern | text |
vehicle_category | text |
subsegment | text |
idsubsegment | integer |
energy | text |
road_category | text |
ef_unit | text |
efa | double precision |

Emissionsfaktoren soak

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
reference_year | bigint |
country | text |
emission_category | text |
pollutant | text |
traffic_scenario | text |
ambient_cond._pattern | text |
vehicle_category | text |
subsegment | text |
idsubsegment | integer |
energy | text |
road_category | text |
ef_unit | text |
efa | double precision |

Emissionsfaktoren Running losses

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
reference_year | bigint |
country | text |
emission_category | text |
pollutant | text |
traffic_scenario | text |
ambient_cond._pattern | text |
vehicle_category | text |
subsegment | text |
idsubsegment | integer |
energy | text |
road_category | text |
ef_unit | text |
v | bigint |
v_0% | text |
v_100% | text |
efa | double precision |
efa_0% | text |
efa_100% | text |
cum._mileage | bigint |

Emissionsfaktoren diurnal

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
reference_year | bigint |
country | text |
emission_category | text |
pollutant | text |
traffic_scenario | text |
ambient_cond._pattern | text |
vehicle_category | text |
subsegment | text |
idsubsegment | integer |
energy | text |
road_category | text |
ef_unit | text |
efa | double precision |

Energieeffizienzentwicklung

Spaltenname | Datentyp | Beschreibung
--- | --- | ---
idszenario | integer | siehe btg_szenario
segment | integer | siehe tg_fzkat_segm
baujahr | integer | Baujahr
idss | integer | siehe tg_ss
idsk | integer | siehe tg_sk
fs | integer | siehe tb_fzkat_fs
idfzkat | integer | siehe tg_fzkat
kf | real | Relativer Korrekturfaktor Energieverbrauch bezogen auf den Energieverbrauch pro Baujahr je Fahrzeugschicht im HBEFA
idenergy | integer | siehe tg_energie

### 2.3 Berechnungen

Im folgenden werden die Berechnungsschritte der Module stock, mileage, emissions und results vereinfacht dargestellt.

Die Module verfügen über verschiedene Klassen (class), welche wiederum verschiedene Methoden beinhalten. Jede Klasse und Methode verfügt über eine Kurzbeschreibung sowie ein Liste der Variablen und Ausgabeparameter.

stock

Code-Beschreibung:

class road.src.stock.Stock(local=False, legacy=True)

  Bases: `object`

  Represents a class to handle stock data transformations, merging, and calculations in the context of vehicles.

  This class is designed to work with stock data and its associated definitions. It provides methods to prepare and extend stock data by adding extra layers (e.g., vehicles like articulated and solo trucks) and to work with detailed technical attributes such as particulate filters and SCR shares. It ensures data consistency and performs operations necessary for scenario-based stock modeling.

  Variablen:

    - legacy – Indicates whether the stock data is handled in a legacy format.

    - stock_data – Contains the stock data loaded from the persistence layer.

    - definitions – Contains the definitions (like subsegments) used in stock-related computations.

    - total_stock – Holds the transformed and prepared stock data.

    - stock_scen – Represents scenario-specific stock data used for further transformations.

  calculate_scenario(base_year=None, end_year=2050)

    Analyzes and calculates scenario projections for stock and new registrations. The function uses various datasets including stock data, survival functions, emission standards, and new registrations to compute predicted scenarios for the specified range of years. It operates on base and end years and makes use of survival functions to adjust stock calculations over time. This function assumes behavior as per defined scenarios and integrates new registration shares into yearly stock updates.

    Parameter:

      - base_year – Integer representing the starting year for calculations. Defaults to the latest year in the stock dataset if not provided.

      - end_year – Integer representing the last year for scenario analysis. Defaults to 2050.

    Rückgabe:

      A DataFrame summarizing computed scenarios that include stock and new registrations adjusted for specified constraints and survival probabilities.

  extend_stock_data(idscn_sel=[4], calc_scenario=True, start_year=None, end_year=None)

    Prepares and processes technical attributes and stock data to calculate production year and technology-specific shares such as particulate filter, SCR shares, and software-update shares.

    The function extends input data, filters by technical attributes, merges with various definitions data, and calculates specific shares affecting stock distribution. It prepares and manipulates stock data for further analysis of production year-specific and technology-specific distributions.

    Parameter:

      - idscn_sel – select scenario IDs, which have to be calculated. Defaults to None, which means all.

      - tbl_tec_attr – DataFrame containing technical attributes including technology types and other identification fields.

      - g_subsegment – DataFrame holding segment-specific information with fields for traffic modes and other subsegment details.

      - b_particlefilter – DataFrame containing details relevant to particulate filter technologies, production years, and specific segment information.

      - start_year – Integer representing the starting year for calculations. Defaults to the latest

      - end_year – Integer representing the last year for scenario analysis. Defaults to 2050 or last Scenaario Year in the Dataset.

    Rückgabe:

      A tuple containing: - DataFrame with updated attributes and particulate filter information. - DataFrame capturing the remaining SCR share attributes missing from the particulate filter dataset.

    Verursacht:

      KeyError – If any required column(s) are missing in the DataFrames during join or filtering operations.

  prepare_stock_data(idscn_sel=None, calc_scenario=True, start_year=None, end_year=None)

    Prepare the stock data by adding extra vehicle layer for articulated and solo trucks.

    Parameter:

      - idscn_sel – select scenario IDs, which have to be calculated. Defaults to None, which means all.

      - calc_scenario – whether to calculate scenario-specific stock data. Defaults to True.

      - start_year – Integer representing the starting year for calculations. Defaults to the latest

      - end_year – Integer representing the last year for scenario analysis. Defaults to 2050 or last Scenario Year in the Dataset.

    Rückgabe:

      stock with extra vehicle layer

Flow-Chart Module Stock

Mileage

Code-Beschreibung:

class road.src.milage.Milage(local=False, legacy=True)

  Bases: `object`

  Handles mileage data processing, providing cumulative statistics, time-series data extraction, and segment-specific mileage calculations.

  This class operates on vehicle mileage datasets and associated statistics, leveraging various hierarchical joins and aggregations to derive insights like mileage time-series or cumulative data at different granularity levels.

  Variablen:

    - legacy – Indicates whether legacy configurations are used.

    - local – Determines the locality of the persistence layer storage.

    - milage_data – Contains raw mileage data fetched from the persistence layer.

    - definitions – Stores definitions used for mileage calculations.

    - milage_ts – Stores calculated mileage time-series data.

    - milage_segm – Contains segment-level mileage data aggregates.

    - milage_cum – Stores cumulative computed mileage statistics.

    - milage_fs_ts_en – Enables mileage full-segment time-series calculations.

  get_milage_cum(total_stock=None, start_year=None, end_year=None, calc_scenario=True)

    Computes cumulative mileage and prepares a table for emission calculations.

    This function calculates cumulative mileage data by performing various data aggregation and transformation tasks on raw input datasets. It integrates mileage segment data at temporal and sub-segmental levels, combines them with several derived metrics, aggregates data to compute statistics (e.g., sum, mean, etc.), and sorts it for further analysis. Additionally, it preprocesses data to generate a detailed table for mileage-based emission calculations by incorporating energy shares and default energy subsets.

    The function handles missing data, uses default fallback values for some missing attributes, and ensures alignment across various scenarios and years.

    Verursacht:

      - ValueError – Raised if any unexpected discrepancies occur in the input data/processing.

      - KeyError – Raised if required columns or keys are missing from the input datasets.

    Rückgabe:

      A Pandas DataFrame containing the processed mileage and energy-related data for subsequent emission calculations.

    Rückgabetyp:

      pandas.DataFrame

  get_milage_fs(total_stock=None, start_year=None, end_year=None, calc_scenario=True)

    Calculate weighted mileage shares for different scenarios, vehicle categories, segments, and origins based on stock data. The function performs data processing and joins multiple tables to compute the mileage shares, along with age-dependent weights.

    This function begins by preparing total stock data, if not provided, and loads several necessary data tables. It calculates weighted mileage shares by combining segment-specific data, origin-specific data, as well as age dependency. Grouped aggregations are applied to calculate mileage shares, validating that the sum of shares per key grouping equals 1. The outcome is stored and returned in milage_segm.

    Parameter:

      - calc_scenario

      - end_year

      - start_year

      - total_stock (pandas.DataFrame, optional) – Optional. A DataFrame representing stock data to be used in calculations. If None, stock data is prepared internally.

    Rückgabe:

      A DataFrame containing calculated mileage shares (milage_shares_fs) for various scenarios, vehicle categories, sources, curves, years, and segments, along with associated intermediary calculations.

    Rückgabetyp:

      pandas.DataFrame

  get_milage_ts()

    Compiles and returns a time series of milage data by joining multiple datasets.

    This function constructs a time series dataset combining various milage-related data sets, including road categories. A sequence of join operations is used to associate key attributes from the datasets, ensuring alignment between scenarios, reference years, and vehicle categories. The processed dataset is stored as an instance variable and returned by the function.

    Rückgabe:

      The completed time series dataset with combined milage data, including road category information.

    Rückgabetyp:

      pandas.DataFrame

  get_transport_alg(total_stock=None, start_year=None, end_year=None, calc_scenario=True)

    Compiles and returns a time series of transport performance data by joining multiple datasets.

    This function uses previously calculated mileage data and adds definitions and values. It calculates transport performances (pass-km and ton-km) and checks/updates the load factor (alg). It constructs a time series dataset combining various transport-related data sets. A sequence of join operations is used to associate key attributes from the datasets, ensuring alignment between scenarios, reference years, and vehicle categories. The processed dataset is stored as an instance variable and returned by the function.

    Rückgabe:

      The completed time series dataset with transport performance and load factor data information.

    Rückgabetyp:

      pandas.DataFrame

Flow-Chart Module Mileage

emissions

Code-Beschreibung:

class road.src.emissions.RoadEmissions(local=False, legacy=True)

  Bases: `object`

  This class calculates emissions of road transport based on input data from the module stock, milage and the emission factors loaded in this module. The calculation steps are largely based on the HBEFA (Handbook Emission Factors for Road Transport) methodology, but have been partially adapted to meet additional TREMOD requirements. The calculation is performed at a disaggregated level, e.g., pollutant, emission type, reference year, vehicle category, sub-segments, year of manufacture, road type, etc. The class is divided into several different methods, the results of which are summarized in merged_results. The methods are described in the following sections. The caclulation is The methodology is based on the HBEFA:

  Variablen:

    - legacy – Indicates the use of legacy datasets.

    - stock_data – Vehicle stock dataset.

    - mileage_data – Vehicle mileage dataset.

    - em_efac – Emission factors dataset.

    - definitions – Supporting definitions for emission modeling.

    - num_cores – Number of cores for parallel computation.

    - milage – Milage object for calculations.

    - efa_akt – Harmonized emission factors for TREMOD use.

  bc_emissions()
    Calculates black carbon emissions based on predefined shares and

      applies necessary transformations to generate updated emission data.

    Verursacht:

      - KeyError – If expected keys are missing in the self.definitions or bc_shares data structures.

      - ValueError – If data alignment issues occur during table join operations.

    Rückgabe:

      DataFrame containing the black carbon emissions, updated with weighted values based on specific shares and segments.

    Rückgabetyp:

      pd.DataFrame

  biofuelshares()

    Calculates and integrates the share of biofuels in the energy mix based on given parameters stored in the instance’s attributes. Filters only relevant biofuels data, performs merging, and adjusts energy values proportional to the biofuel shares.

    Verursacht:

      KeyError – If required keys are missing during filtering, joining, or renaming operations.

    Rückgabe:

      Updated DataFrame where the energy values are adjusted to include biofuel shares, and unnecessary intermediate columns are dropped.

    Rückgabetyp:

      pandas.DataFrame

  coldstart_emissions(start_year=None, end_year=None, calc_scenario=True)

    Calculate cold start emissions for vehicles based on provided datasets. This method processes emission factors, mileage and trip length data, performs the necessary joins and aggregations, and computes emissions for cold starts.

    It uses predefined datasets such as emission factors, subsegment definitions, energy categories, and vehicle categories for the computation. Cold start emissions are calculated for the applicable vehicle categories and scenarios.

    The resulting emissions data is stored in the class instance’s result attribute.

    Parameter:

      - start_year – The starting year for the analysis.

      - end_year – The ending year for the analysis.

      - calc_scenario – A boolean indicating whether to calculate scenario emissions.

    Rückgabe:

      A DataFrame containing the calculated cold start emissions for all scenarios, categories, and applicable or available pollutants.

  static compare_dtypes(df1, df2)

    Compare the data types of two DataFrame objects.

    This static method compares the data types of columns in two given DataFrame objects. It returns a dictionary indicating whether each column has matching data types across both DataFrames.

    Parameter:

      - df1 (DataFrame) – The first DataFrame object to compare.

      - df2 (DataFrame) – The second DataFrame object to compare.

    Rückgabe:

      A dictionary where keys are column names and values are boolean flags indicating if the columns have different data type in both DataFrames.

    Rückgabetyp:

      dict

  convert_input_to_polars()

    Converts input data to Polars DataFrame types.

    This method iterates over various attributes of the class and converts them into appropriate Polars DataFrame types using the convert_pol_dtypes method. It handles different datasets such as efa_akt, milage.res_transport_alg, milage.milage_fs_ts_en, milage.milage_cum, elements in em_efac, definitions, and common. The conversion process may include specifying target data types and string identifiers for certain segments.

    Rückgabe:

      None

  static convert_pol_dtypes(df_pol: DataFrame, target_dtype: Type[DataType] = UInt32, string_id: str = 'id') → DataFrame

    Converts specified columns in a Polars DataFrame to the target data type.

    Parameter:

      - df_pol (pol.DataFrame) – The input Polars DataFrame.

      - target_dtype (Type[pol.DataType]) – The target data type to which the columns should be converted.

      - string_id (str) – The prefix of the column names that should be converted. Defaults to „id“.

    Rückgabe:

      A new Polars DataFrame with specified columns converted to the target data type.

    Rückgabetyp:

      pol.DataFrame

  evap_emissions(start_year=None, end_year=None, calc_scenario=True)

    Calculates evaporation emissions including diurnal, soak, and running losses. This method processes vehicle stock, start and milage data and applies emission factors to estimate the emissions generated over specified years.

    :param : :type : param start_year: The starting year for the analysis. :param : :type : param end_year: The ending year for the analysis. :param : :type : param calc_scenario: A boolean indicating whether to calculate scenario emissions. :param : and applicable or available pollutants. :type : return: A DataFrame containing the calculated warm emissions for all scenarios, categories,

  static fill_missing_cols(df, columns, default_value=0.0, casting=Float64)

    Fills missing columns in a Polars DataFrame with a specified default value.

    Parameter:

      - df (DataFrame) – The input DataFrame to process.

      - columns (List[str]) – A list of column names to check and potentially add to the DataFrame.

      - default_value (Any) – The default value to assign to newly added columns. Defaults to 0.

    Rückgabe:

      A new DataFrame with the specified missing columns filled with the default value.

    Rückgabetyp:

      Polars DataFrame

  fuel_derived_emissions()

    Calculates and retrieves fuel-derived emissions by applying specific emission factors to the corresponding fuel amounts. This function processes data by merging it with definitions, specific emission factors, and then calculates the resulting emission values. It updates the merged results with the processed data.

    Parameter:

      self – The instance of the class, used to access its attributes and other methods.

    Rückgabe:

      DataFrame containing the fuel-derived emissions after processing.

    Rückgabetyp:

      pandas.DataFrame

  get_merged_results(append_tbl=None, biosplit=False, start_year=None, end_year=None, calc_scenario=True)

    Merges and processes various emission result tables into a single dataset. This method consolidates warm emissions, cold start emissions, evaporative emissions, and other relevant data based either on initial structures or supplemental tables provided. It ensures correct unit attribution and organizes the data in a predefined structure, enabling compatibility for export and processing in other applications and several dissaminations.

    Parameter:

      - append_tbl – Additional data in a tabular format to append to the existing merged results. Optional.

      - biosplit – Indicator to include biosplit functionality during calculations. Defaults to False.

      - start_year – The starting year for the analysis.

      - end_year – The ending year for the analysis.

      - calc_scenario – A boolean indicating whether to calculate scenario emissions.

    Rückgabe:

      A DataFrame containing the calculated warm emissions for all scenarios, categories, and applicable or available pollutants.

  ghg_emissions()

    Calculates CO2-equivalents from CO2 and other greenhouse gases. This function processes data by merging it with definitions, specific emission factors, and then calculates the resulting emission values.

    Parameter:

      self – The instance of the class, used to access its attributes and other methods.

    Rückgabe:

      DataFrame containing the ghg emissions after processing.

    Rückgabetyp:

      pandas.DataFrame

  hbefa_prep_warm_em()

    Prepares the emission factor data used for warm emissions calculation. This method handles the merging of HBEFA data with relevant definitions, as well as transformations and renaming operations required for further processing in the TREMOD model, e.g. vehicle category, road category, pollutant IDs.

    Verursacht:

      - KeyError – If expected columns or definitions are missing from the input DataFrame.

      - AttributeError – If required instance variables such as self.em_efac or self.definitions are not properly initialized.

    Rückgabe:

      A DataFrame containing aggregated and processed emission factors, including attributes such as subsegment IDs, traffic situations, technologies, gradients, and velocities, prepared for use in warm emissions calculations.

    Rückgabetyp:

      pandas.DataFrame

  hc_split()

    Recalculates HC (Hydrocarbon) emissions components for various vehicle types based on HC shares, differentiating cold, hot, and evaporative emissions. Components for hot emissions and vehicles from Euro 6-d on remain in retained results. The recalculations are conducted based on specific filters and joins applied to the provided datasets.

    Rückgabe:

      A dataframe containing recalculated HC emissions components.

    Rückgabetyp:

      pandas.DataFrame

  static load_corrections(df: DataFrame) → DataFrame

    Processes the input dataframe to calculate a corrected value for „efak_corr_lf“ based on specific conditions applied to the „alg“ column. Required to adjust the hot emission factors from the HBEFA to the average load of the vehicles.

    The method divides the dataframe into two subsets based on the value of „alg“. Correction coefficients ‚m‘ and ‚a‘ are computed separately for each subset and are then applied to derive the „efak_corr_lf“ column. Finally, the computed values are combined and the intermediate columns used in the calculation are dropped before returning the dataframe.

    Parameter:

      df – A DataFrame with required columns: - „alg“ - „efa“ - „efa_0%“ - „efa_100%“

    Rückgabe:

      A DataFrame with the calculated „efak_corr_lf“ column and the intermediate columns removed.

  static milage_det_hdv(mileage, base_kkm, k, v_cycle, d, we_pos, cf_tech, valid_to_milage)

    Calculates the correction factor (cf_det) based on input parameters related to mileage, base kilometers (kkm), average cycle velocity, and positive work. This method ensures the correction factor does not exceed an upper limit determined by valid mileage. Needed to adjust the hot emission factors from the HBEFA to the cumulative mileage of the vehicles.

    Parameter:

      - mileage – Current mileage of the vehicle

      - base_kkm – Base distance in kilometers (kkm) used as reference

      - k – Scalar factor

      - v_cycle – Average cycle velocity

      - d – Constant factor

      - we_pos – Positive work energy

      - cf_tech – Correction factor specific to vehicle technology

      - valid_to_milage – Maximum mileage to validate the correction factor calculations

    Rückgabe:

      Deterioration correction factor (cf_det) considering input parameters

  no2_emissions()

    Calculate NO2 emissions based on the provided emission factors and mileage data. This method processes emission factors, filters and calculates NO2 emissions for specific vehicle segments and conditions, and then updates the merged results with the generated data.

    Verursacht:

      KeyError – If required keys are missing in the dataframes being processed.

    Rückgabe:

      A DataFrame containing NO2 emissions data filtered and calculated according to mileage-based conditions.

    Rückgabetyp:

      pandas.DataFrame

  warm_emissions(start_year=None, end_year=None, calc_scenario=True)

    Calculates warm emissions, including correction factors for cumulative mileage, load, fuel quality, and energy consumption efficiency corrections by year of manufacture. This function involves several intermediate calculations and steps to ensure the robustness and accuracy of the final emissions data output. The method begins by ensuring that the required emission factors are loaded or prepared from the HBEFA. It then collects and processes cumulative mileage data, calculates raw emissions, and makes various adjustments based on heavy and light vehicle types. Corrections are made to account for the effects of mileage, fuel quality, and load. Several links to emission factors and definition frameworks are made to supplement, correct, and complete the data set for emission calculation. For N2O and NH3 emissions, as well as HC-diff, hot emissions are taken directly from the HBEFA for vehicles with Euro 6 or newer. For older vehicles, the calculations are replicated in the method.

    Parameter:

      - start_year – The starting year for the analysis.

      - end_year – The ending year for the analysis.

      - calc_scenario – A boolean indicating whether to calculate scenario emissions.

    Rückgabe:

      A DataFrame containing the calculated warm emissions for all scenarios, categories, and applicable or available pollutants.

Flow-Chart Module Emissions

results

Code-Beschreibung:

class road.src.results.TremodDevelVariant(local=False, legacy=False, resultpath=None)

  Bases: `object`

  Diese Klasse stellt Methoden zur Berechnung aller Ergebnisse bereit und schreibt diese in die Datenbank u.a. zur Weiterverwendung in der Nutzungsvariante. Zusätzlich sind weitere Ergebnisse oder Auswertungen implementiert.

  calc_cse(start_year=None, end_year=None, calc_scenario=True)

    Berechnet die Ergebnisse im ZSE-Format indem die ZSE-Nomenklatur hinzugefügt wird, die Daten entsprechend aggregiert werden. Ergebnisse sind Aktivitätraten und Emissionsfaktoren pro Aktvitätsrate.

    Parameter:

      - start_year – The starting year for the calculation.

      - end_year – The ending year for the calculation.

      - calc_scenario – A boolean flag indicating whether to calculate the scenario.

    Rückgabe:

      None

  calc_energy_correction(start_year=None, end_year=None, calc_scenario=True)

    Berechnet die Korrekturfaktoren zur Umrechnung aller Ergebnisse vom Inlands- auf das Energiebilanzprinzip.

    Parameter:

      - start_year (int or None) – The starting year for the calculation.

      - end_year (int or None) – The ending year for the calculation.

      - calc_scenario (bool) – A boolean flag indicating whether to calculate the scenario.

  calc_road_emissions(start_year=None, end_year=None, calc_scenario=True, write_to_db=True)

    Dient dem Berechnen aller Ergebnisse und schreiben in die Ergebnistabelle. Die Methoden der Klasse RoadEmissions des Moduls emissions.py werden hierfür verwendet.

    Parameter:

      - start_year (Int, optional) – The starting year for the emission calculation.

      - end_year (Int, optional) – The ending year for the emission calculation.

      - calc_scenario (Bool, optional) – A flag to determine whether to calculate the scenario or not.

      - write_to_db (Bool, optional) – A flag to determine whether to write the results to the database.

  calc_wtt_emissions(start_year=None, end_year=None, calc_scenario=True)

    Berechnet die Vorkettenemissionen auf Basis der jährlichen Endenergiebedarfe und Vorkettenemissionsfaktoren je Energieart.

    Parameter:

      - start_year (Optional[int]) – The starting year for the emission calculations.

      - end_year (Optional[int]) – The ending year for the emission calculations.

      - calc_scenario (bool) – A boolean indicating whether to calculate the emission scenario.

    Rückgabe:

      None

  run_tests(start_year=None, end_year=None, calc_scenario=True)

    Executes a series of tests based on the provided parameters. The function calculates energy correction for the specified year range and scenario, reads the emission data from a file, and then performs value tests by comparing the modeled data against a reference dataset.

    Parameter:

      - start_year (int or None) – The starting year for the energy correction calculation. Defaults to None.

      - end_year (int or None) – The ending year for the energy correction calculation. Defaults to None.

      - calc_scenario (bool) – A flag to determine whether to apply the calculation scenario. Defaults to True.

    Rückgabe:

      A ValueTests object containing the results of the comparison between the modeled data and the reference emissions dataset.

    Rückgabetyp:

      ValueTests

  view_agg_results(start_year=None, end_year=None, calc_scenario=True)

    returns aggregated results for checking.

    Parameter:

      - start_year (int or None) – The starting year for the energy correction calculation. Defaults to None.

      - end_year (int or None) – The ending year for the energy correction calculation. Defaults to None.

      - calc_scenario (bool) – A flag to determine whether to apply the calculation scenario. Defaults to True.

    Rückgabe:

      A ValueTests object containing the results of the comparison between the modeled data and the reference emissions dataset.

    Rückgabetyp:

      ValueTests

Flow-Chart Module Results

### 2.4 HBEFA-API

Das Modul hbefa_api dient der automatisierten Abfrage von Emissionsfaktoren über die offizielle HBEFA-Schnittstelle (API). Es ermöglicht den Abruf strukturierter Datensätze mit Emissionsfaktoren des Straßenverkehrs und deren Integration in den TREMOD-Road-Workflow.

Es werden fünf Abfragen konfiguriert und durchgeführt, um die Tabellen mit Emissionsfaktoren (hot, cold, soak, diurnal, running losses) zu erzeugen (siehe Tabellen bei Emissions). Hierzu müssen Nutzername und Passwort für eine gültige HBEFA-Lizenz daten vorliegen. Diese Daten dürfen im Rahmen einer einfachen Lizenz für das UBA verwendet werden.

Die wichtigsten zu definierenden Abfrageparameter für die Tabellen der Emissionskategorien hot, coldstart , dirunal, soak und running losses sind:

> - weighting (Flottengewichtete oder -ungewichtete Emissionsfaktoren)

> - country (Land. Wichtig für Länderspezifische Daten)

> - emcat (Emissionskategorie, z.B. „hot“, „cold“)

> - pollutant (Schadstoff)

> - agglevel_fleet (Differenzierung nach Fahrzeugeigenschaft. IdR. nach Fahrzeugschicht, d.h. „subsegment“)

> - agglevel_ts (Individuelle oder aggregierte Verkehrssituationen)

> - idvehcat (Fahrzeugkategorie)

> - lang (Sprache)

> - idtraffic_scen (Länderspezifisches Szenario, z.B. für Flottenzusammensetzung)

> - idtsgrad (Auswahl Verkehrssituationen)

> - idpatternambientcond (Auswahl Umgebungsbedingungen, z.B. Temperaturverteilungen)

> - nocorr (Verwendung Basis-Emissionsfaktoren aus PHEM oder korrigierte Emissionsfaktoren, z.B. um Temperatur)

> - hbversion_int (Nummer HBEFA-Version)

Die Abfrage der Emissionsfaktorentabellen erforlgt nicht bei jedem Rechenlauf zur Bestimmung der Emissionen des Straßenverkehrs, sondern muss bei Bedarf beispielsweise wegen folgender Gründe aktiv ausgeführt werden:

> - Update der TREMOD-Version und sich zwischenzeitlicher veränderter HBEFA-Version

> - Aktualisierungen des HBEFA, die in eine bestehende TREMOD-Version einfließen sollen

> - Erweiterung der TREMOD-Berechnungen (z.B. weitere Schadstoffe)

Wichtigste Dateien und Funktionen:

- hbefapi.py: Enthält die Klasse HBEFapi, welche die technische Kommunikation mit der API übernimmt (Login-Management, CSRF-Token-Extraktion, asynchrone Abfragen und Status-Polling).

- dataset.py: Beinhaltet die Klasse HBEFADatasetManager. Dies ist die zentrale Steuerungseinheit, welche die API initialisiert, Abfragen orchestriert und die Ergebnisse persistiert. Sie bietet zudem eine CLI-Schnittstelle via typer.

- config.py: Zentrale Konfigurationsdatei für Abfrageparameter (z. B. HBEFA-Version, Land, Schadstoffe) und Dateipfade.

- write2postgres.py: Skript zur Übertragung der lokal in SQLite-Datenbanken zwischengespeicherten Ergebnisse in die PostgreSQL-Datenbank von TREMOD.

- credentials.py: Speichert die API-Zugangsdaten (URL, Benutzername, Passwort). Diese Datei ist lokal zu pflegen und sollte nicht in das Repository eingehen.

Konfiguration und Durchführung der Abfragen:

Die Abfragen werden primär über die config.py gesteuert. Hier werden in der Dictionary HBEFA2TREMOD_TABLES die gewünschten Tabellen (z. B. hot, coldstart, evap) und deren Parameter (Schadstoffe, Fahrzeugkategorien, Aggregationslevel) definiert.

Die Durchführung erfolgt durch Ausführen der dataset.py des Moduls, beispielsweise über die Befehlszeile:

    python dataset.py --run-hbefa2tremod-tables --write-to-db

Dabei werden asynchrone Tasks am HBEFA-Server gestartet, deren Status regelmäßig abgefragt wird. Nach Abschluss werden die Ergebnisse standardmäßig in einer SQLite-Datenbank unter road/data/hbefa/raw/ abgelegt.

Abruf von Definitionstabellen:

Zusätzlich zu den Emissionsfaktoren können auch die Definitions- bzw. Parametertabellen der API (z. B. Listen der verfügbaren Schadstoffe, Fahrzeugkategorien, Verkehrssituationen) abgerufen werden. Dies ist hilfreich, um die gültigen Parameterwerte für die Konfiguration in config.py zu ermitteln. Der Abruf erfolgt durch Setzen des Flags –get-definition-tables True:

    python dataset.py --get-definition-tables --write-to-db

Diese Tabellen werden in einer separaten SQLite-Datenbank namens dataset_param_tables_[ZEITSTEMPEL].db im Verzeichnis road/data/hbefa/raw/ gespeichert.

Datenhaltung und Transfer:

Die Ergebnisse der Emissionsfaktor-Abfragen werden zunächst lokal in SQLite-Datenbanken unter road/data/hbefa/raw/ gespeichert (Dateiname: dataset_[QUERY]_[ZEITSTEMPEL].db). Dies dient der Entkopplung von der API und den Hauptdatenbanken.

Für die Verwendung in TREMOD-Road müssen diese Daten mit dem Skript write2postgres.py in die PostgreSQL-Datenbank übertragen werden. Nach einem erfolgreichen API-Abruf sind im Skript write2postgres.py folgende Einstellungen zu prüfen bzw. anzupassen:

- DATE_OF_CALL: Zur Bestimmung des Pfad zur lokalen SQLite-Datenbank, die die gewünschten abgerufenen Daten enthält.

- SUFFIX_4_POSTGRES: Ein optionales Suffix für die Tabellennamen (z. B. _hb501006 oder _hb521111_test), um verschiedene HBEFA-Stände in der Datenbank parallel vorhalten zu können.

Das Skript liest die Tabellen aus den SQLite-Datenbanken und schreibt in die entsprechenden Postgres-Tabellen (z. B. für Emissionsfaktoren warm oder Kaltstart). Hierbei wird die in der TableOperations.py definierte Datenbank als Zieldatenbank verwendet.

Logging:

Das Modul unterstützt ein detailliertes Logging. Die Log-Dateien werden unter road/data/hbefa/logs/ mit Zeitstempel abgelegt (z. B. dataset_2026-06-26_09-52-00.log). Geloggt werden:

- Erfolg oder Fehler beim Login.

- Start von asynchronen Tasks inkl. Task-IDs.

- Status-Updates während des Pollings.

- Detaillierte Fehlermeldungen der API im Falle von ungültigen Parametern.

- Erfolgreiche Schreibvorgänge in Dateien oder Datenbanken.

Ablaufschéma einer Abfrage: