CO2emission / app.py
shrut27's picture
Added 15 categories
3f6ab90 verified
import streamlit as st
fuel_values = ["Coal", "Natural Gas", "Oil", "Renewable Energy", "Other"]
purchased_goods_values = ["Cement", "Plaster", "Paint", "Timber", "Concrete"]
supplier_values = ["Supplier C", "Supplier D", "Supplier E", "Supplier F", "Supplier G"]
scope_values = ["Electricity", "Natural Gas"]
material_inputs_values = ["Cotton", "Polymer", "Chemical A", "Chemical B"]
transport_values = ["Cotton", "Polymer", "Chemical A", "Chemical B"]
waste_output_values = ["Waste sent to landfill"]
categories = ["Category 1", "Category 2", "Category 3", "Category 4", "Category 5",
"Category 6", "Category 7", "Category 8", "Category 9", "Category 10",
"Category 11", "Category 12", "Category 13", "Category 14", "Category 15"]
def calculate_emissions_supplier_specific(purchased_goods_data):
total_emissions = sum([qty * emission_factor for _, _, qty, emission_factor in purchased_goods_data])
st.header(f"Total Emissions for Supplier-specific Method: {total_emissions} kg CO2e")
def calculate_emissions_hybrid(scope1_and_scope2_data, material_inputs_data, transport_data, waste_output_data):
scope1_and_scope2_emissions = sum([float(item['Amount (kWh)']) * float(item['Emission factor (kg CO2e/kWh)']) for item in scope1_and_scope2_data])
waste_output_emissions = sum([float(item['Amount (kg)']) * float(item['Emission factor (kg CO2e/kg of waste sent to landfill)']) for item in waste_output_data])
other_upstream_emissions = sum([float(item['Mass purchased (kg)']) * float(item['Emission factor (kg CO2e/kg)']) for item in material_inputs_data])
total_emissions = scope1_and_scope2_emissions + waste_output_emissions + other_upstream_emissions
transport_emissions_per_item = [
float(item['Distance of transport (km)']) * float(item1['Mass purchased (kg)']) * float(item['Vehicle type emission factor (kg CO2e/kg/km)'])
for item in transport_data for item1 in material_inputs_data if item["Purchased Goods"] == item1["Purchased Goods"]
]
for i, item in enumerate(transport_data):
st.header(f"Emissions for Purchased Item {i + 1}: {transport_emissions_per_item[i]} kg CO2e")
def calculate_emissions_hybrid_pro(tshirt_data, scope_data, waste_output_data):
scope1_and_scope2_emissions = sum([float(item['Amount (kWh)']) * float(item['Emission factor (kg CO2e/kWh)']) for item in scope_data])
waste_output_emissions = sum([float(item['Amount (kg)']) * float(item['Emission factor (kg CO2e/kg of waste sent to landfill)']) for item in waste_output_data])
other_upstream_emissions = sum([float(item['Number of t-shirts purchased']) * float(item['Cradle-to-gate process emission factor (kg CO2e/per t-shirt(excluding scopes)']) for item in tshirt_data])
total_emissions = scope1_and_scope2_emissions + waste_output_emissions + other_upstream_emissions
st.header(f"Total Emissions for HybridPro Method: {total_emissions} kg CO2e")
def collect_category_3_data():
st.header("Category 3: Fuel and Energy related activities not included in scope 1 and Scope 2")
method_options = ["Method 1: Upstream emissions of purchased fuels",
"Method 2: Upstream emissions of purchased electricity",
"Method 3: Transmission and distribution losses",
"Method 4: Emissions from power that is purchased and sold"]
selected_method = st.selectbox("Select Method", method_options)
if selected_method == "Method 1: Upstream emissions of purchased fuels":
fuel_data = dynamic_input_fields("Fuel Data", ["Fuel consumed (kWh)", "Upstream fuel emission factor (kg CO2e/kWh)"], ["Fuel consumed (kWh)", "Upstream fuel emission factor (kg CO2e/kWh)"])
calculate_emissions_category_3_method_1(fuel_data)
elif selected_method == "Method 2: Upstream emissions of purchased electricity":
selected_country = st.selectbox("Select country", ["Australia", "Canada", "India", "US", "Turkey"])
electricity_data = dynamic_input_fields("Electricity Data", ["Electricity"], ["Electricity"], country=selected_country)
steam_data = dynamic_input_fields("Steam Data", ["Steam"], ["Steam"], country=selected_country)
heating_data = dynamic_input_fields("Heating Data", ["Heating"], ["Heating"], country=selected_country)
cooling_data = dynamic_input_fields("Cooling Data", ["Cooling"], ["Cooling"], country=selected_country)
upstream_emission_factors = dynamic_input_fields("Upstream Emission Factors", ["Electricity", "Steam", "Heating", "Cooling"], ["Electricity", "Steam", "Heating", "Cooling"], country=selected_country)
calculate_emissions_category_3_method_2(electricity_data, steam_data, heating_data, cooling_data, upstream_emission_factors,selected_country)
elif selected_method == "Method 3: Transmission and distribution losses":
selected_country = st.selectbox("Select country", ["Australia", "Canada", "India", "US", "Turkey"])
electricity_data = dynamic_input_fields("Electricity Data", ["Electricity"], ["Electricity"], country=selected_country)
steam_data = dynamic_input_fields("Steam Data", ["Steam"], ["Steam"], country=selected_country)
heating_data = dynamic_input_fields("Heating Data", ["Heating"], ["Heating"], country=selected_country)
cooling_data = dynamic_input_fields("Cooling Data", ["Cooling"], ["Cooling"], country=selected_country)
t_and_d_loss_data = dynamic_input_fields("T&D Loss Data", ["Transmission"], ["Transmission"], country=selected_country)
upstream_emission_factors = dynamic_input_fields("Upstream Emission Factors", ["Electricity", "Steam", "Heating", "Cooling"], ["Electricity", "Steam", "Heating", "Cooling"], country=selected_country)
calculate_emissions_category_3_method_3(electricity_data,steam_data,heating_data,cooling_data,upstream_emission_factors, t_and_d_loss_data,selected_country)
elif selected_method == "Method 4: Emissions from power that is purchased and sold":
selected_country = st.selectbox("Select country", ["Australia", "Canada", "India", "US", "Turkey"])
electricity_data = dynamic_input_fields("Electricity Data", ["Electricity"], ["Electricity"],country=selected_country)
steam_data = dynamic_input_fields("Steam Data", ["Steam"], ["Steam"],country=selected_country)
heating_data = dynamic_input_fields("Heating Data", ["Heating"], ["Heating"],country=selected_country)
cooling_data = dynamic_input_fields("Cooling Data", ["Cooling"], ["Cooling"],country=selected_country)
upstream_emission_factors = dynamic_input_fields("Upstream Emission Factors", ["Electricity", "Steam", "Heating", "Cooling"], ["Country", "Electricity", "Steam", "Heating", "Cooling"], country=selected_country)
calculate_emissions_category_3_method_4(electricity_data,steam_data,heating_data,cooling_data,upstream_emission_factors,selected_country)
def calculate_emissions_category_3_method_1(fuel_data):
total_emissions = sum(
[
item["Fuel consumed (kWh)"] * (item["Upstream fuel emission factor (kg CO2e/kWh)"])
for item in fuel_data
]
)
st.header(f"Total Emissions for Upstream emissions of purchased fuels is {total_emissions} kg CO2e")
def calculate_emissions_category_3_method_2(electricity_data, steam_data, heating_data, cooling_data, upstream_emission_factor,selected_country):
country_electricity = next(item for item in electricity_data if item["Country"] == selected_country)["Electricity"]
country_steam = next(item for item in steam_data if item["Country"] == selected_country)["Steam"]
country_heating = next(item for item in heating_data if item["Country"] == selected_country)["Heating"]
country_cooling = next(item for item in cooling_data if item["Country"] == selected_country)["Cooling"]
country_factors = next(item for item in upstream_emission_factor if item["Country"] == selected_country)
total_emissions = (
country_electricity * country_factors["Electricity"]
+ country_steam * country_factors["Steam"]
+ country_heating * country_factors["Heating"]
+ country_cooling * country_factors["Cooling"]
)
st.header(f"Total Emissions for Upstream emissions of purchased electricity: {total_emissions} kg CO2e")
def calculate_emissions_category_3_method_3(electricity_data, steam_data, heating_data, cooling_data, upstream_emission_factors,t_and_d_loss, selected_country):
country_electricity = next(item for item in electricity_data if item["Country"] == selected_country)["Electricity"]
country_steam = next(item for item in steam_data if item["Country"] == selected_country)["Steam"]
country_heating = next(item for item in heating_data if item["Country"] == selected_country)["Heating"]
country_cooling = next(item for item in cooling_data if item["Country"] == selected_country)["Cooling"]
country_factors = next(item for item in upstream_emission_factors if item["Country"] == selected_country)
country_td = next(item for item in t_and_d_loss if item["Country"] == selected_country)
st.header(country_factors)
total_emissions = (
country_electricity * country_factors["Electricity"] * country_td["Transmission"]
+ country_steam * country_factors["Steam"] * country_td["Transmission"]
+ country_heating * country_factors["Heating"] * country_td["Transmission"]
+ country_cooling * country_factors["Cooling"] * country_td["Transmission"]
)
st.header(f"Total Emissions for Transmission and distribution losses: {total_emissions} kg CO2e")
def calculate_emissions_category_3_method_4(electricity_data, steam_data, heating_data, cooling_data, emission_factors, selected_country):
country_factors = next((item for item in emission_factors if item["Country"] == selected_country), None)
st.header(country_factors)
if country_factors is not None:
total_emissions = (
sum(item["Electricity"] * country_factors["Electricity"] for item in electricity_data)
+ sum(item["Steam"] * country_factors["Steam"] for item in steam_data)
+ sum(item["Heating"] * country_factors["Heating"] for item in heating_data)
+ sum(item["Cooling"] * country_factors["Cooling"] for item in cooling_data)
)
st.header(f"Total Emissions where power is purchased and sold: {total_emissions} kg CO2e")
else:
st.warning(f"No emission factors found for {selected_country} in emission_factors.")
def calculate_emissions_category_4_method_1(fuel_data, electricity_data, refrigerant_data, total_fuel_spend=None, total_distance_travelled=None):
fuel_emissions = sum([item["Fuel consumed (liters)"] * item["Emission factor (kg CO2e/liter)"] for item in fuel_data])
electricity_emissions = sum([item["Quantity of electricity consumed (kWh)"] * item["Emission factor for electricity grid (kg CO2e/kWh)"] for item in electricity_data])
refrigerant_emissions = sum([item["Refrigerant leakage (kg)"] * item["Global warming potential for refrigerant (kg CO2e)"] for item in refrigerant_data])
if total_fuel_spend:
quantities_of_fuel = sum([item["Total fuel spend ($)"] / item["Average fuel price ($/liter)"] for item in fuel_data])
fuel_emissions_from_spending = quantities_of_fuel * sum([item["Average fuel price ($/liter)"] * item["Emission factor (kg CO2e/liter)"] for item in fuel_data])
total_emissions = fuel_emissions + electricity_emissions + refrigerant_emissions + fuel_emissions_from_spending
elif total_distance_travelled:
quantities_of_fuel_consumed = sum([item["Total distance travelled (km)"] * item["Fuel efficiency of vehicle (liters/km)"] for item in fuel_data])
fuel_emissions_from_distance = quantities_of_fuel_consumed * sum([item["Emission factor for the fuel (kg CO2e/liter)"] for item in fuel_data])
total_emissions = fuel_emissions + electricity_emissions + refrigerant_emissions + fuel_emissions_from_distance
else:
total_emissions = fuel_emissions + electricity_emissions + refrigerant_emissions
st.header(f"Total Emissions for Fuel-based Method: {total_emissions} kg CO2e")
def calculate_emissions_category_4_method_2(fuel_data, average_efficiency_unladen, total_distance_travelled_unladen):
total_emissions_unladen = sum([item["Quantity of fuel consumed from backhaul"] * item["Emission factor for the fuel (kg CO2e/liter)"] for item in fuel_data])
total_emissions_unladen += sum([average_efficiency_unladen * total_distance_travelled_unladen * item["Emission factor for the fuel (kg CO2e/liter)"] for item in fuel_data])
st.header(f"Total Emissions for Unladen Backhaul: {total_emissions_unladen} kg CO2e")
def calculate_emissions_category_4_method_3(transport_data):
total_emissions_transport = sum([
item["Mass of goods purchased (tonnes)"] * item["Distance travelled in transport leg (km)"] * item["Emission factor of transport mode or vehicle type (kg CO2e/tonne-km)"]
for item in transport_data
])
st.header(f"Total Emissions for Transportation: {total_emissions_transport} kg CO2e")
def calculate_emissions_category_4_method_4(storage_data):
total_emissions_distribution = sum([
(
item["Fuel consumed (kWh)"] * item["Fuel emission factor (kg CO2e/kWh)"]
+ item["Electricity consumed (kWh)"] * item["Electricity emission factor (kg CO2e/kWh)"]
+ item["Refrigerant leakage (kg)"] * item["Refrigerant emission factor (kg CO2e/kg)"]
) * (
item["Volume of company A’s goods (m3)"] / item["Total volume of goods in storage facility (m3)"] if item["Total volume of goods in storage facility (m3)"] != 0 else 0
)
for item in storage_data
])
st.header(f"Total Emissions for Distribution: {total_emissions_distribution} kg CO2e")
def calculate_emissions_category_4_method_5(storage_data):
total_emissions_distribution = sum([
item["Volume of stored goods (m3)"] * item["Average number of days stored (days)"] * item["Emission factor for storage facility (kg CO2e/m3/day)"]
for item in storage_data
])
st.header(f"Total Emissions for Distribution (Method 5): {total_emissions_distribution} kg CO2e")
def calculate_emissions_category_5_method_1(waste_treatment_data):
total_emissions_category_5 = sum([
item["Allocated scope 1 and scope 2 emissions of waste treatment company"]
for item in waste_treatment_data
])
st.header(f"Total Emissions for Category 5 (Method 1): {total_emissions_category_5} kg CO2e")
def collect_category_4_method_1_data():
st.header("Category 4: Method 1 - Fuel-based Method")
fuel_data = dynamic_input_fields_with_emission_factor("Fuel Data", "Enter fuel data", ["Fuel consumed (liters)", "Emission factor (kg CO2e/liter)", "Total fuel spend ($)", "Average fuel price ($/liter)","Total distance travelled (km)"],
["Fuel consumed (liters)", "Emission factor (kg CO2e/liter)", "Total fuel spend ($)", "Average fuel price ($/liter)","Total distance travelled (km)"])
electricity_data = dynamic_input_fields_with_emission_factor("Electricity Data", "Enter electricity data", ["Quantity of electricity consumed (kWh)", "Emission factor for electricity grid (kg CO2e/kWh)"],
["Quantity of electricity consumed (kWh)", "Emission factor for electricity grid (kg CO2e/kWh)"])
refrigerant_data = dynamic_input_fields_with_emission_factor("Refrigerant Data", "Enter refrigerant data", ["Refrigerant leakage (kg)", "Global warming potential for refrigerant (kg CO2e)"],
["Refrigerant leakage (kg)", "Global warming potential for refrigerant (kg CO2e)"])
total_fuel_spend = st.checkbox("Calculate based on total fuel spend")
calculate_emissions_category_4_method_1(fuel_data, electricity_data, refrigerant_data, total_fuel_spend=total_fuel_spend)
def collect_category_4_method_2_data():
st.header("Category 4: Method 2 - Unladen Backhaul")
fuel_data = dynamic_input_fields_with_emission_factor("Fuel Data", "Enter fuel data", ["Quantity of fuel consumed from backhaul", "Emission factor for the fuel (kg CO2e/liter)"],
["Quantity of fuel consumed from backhaul", "Emission factor for the fuel (kg CO2e/liter)"])
average_efficiency_unladen = st.number_input("Average efficiency unladen", min_value=0.0, step=0.01, key="average_efficiency_unladen")
total_distance_travelled_unladen = st.number_input("Total distance travelled unladen (km)", min_value=0.0, step=0.01, key="total_distance_travelled_unladen")
calculate_emissions_category_4_method_2(fuel_data, average_efficiency_unladen, total_distance_travelled_unladen)
def collect_category_4_method_3_data():
st.header("Category 4: Method 3 - Transportation")
transport_data = dynamic_input_fields_with_emission_factor("Transport Data", "Enter transport data", ["Mass of goods purchased (tonnes)", "Distance travelled in transport leg (km)", "Emission factor of transport mode or vehicle type (kg CO2e/tonne-km)"],
["Mass of goods purchased (tonnes)", "Distance travelled in transport leg (km)", "Emission factor of transport mode or vehicle type (kg CO2e/tonne-km)"])
calculate_emissions_category_4_method_3(transport_data)
def collect_category_4_method_4_data():
st.header("Category 4: Method 4 - Distribution")
storage_data = dynamic_input_fields_with_emission_factor("Storage Data", "Enter storage data", ["Fuel consumed (kWh)", "Electricity consumed (kWh)", "Refrigerant leakage (kg)",
"Volume of company A’s goods (m3)", "Total volume of goods in storage facility (m3)",
"Fuel emission factor (kg CO2e/kWh)", "Electricity emission factor (kg CO2e/kWh)", "Refrigerant emission factor (kg CO2e/kg)"],
["Fuel consumed (kWh)", "Electricity consumed (kWh)", "Refrigerant leakage (kg)",
"Volume of company A’s goods (m3)", "Total volume of goods in storage facility (m3)",
"Fuel emission factor (kg CO2e/kWh)", "Electricity emission factor (kg CO2e/kWh)", "Refrigerant emission factor (kg CO2e/kg)"])
calculate_emissions_category_4_method_4(storage_data)
def collect_category_4_method_5_data():
st.header("Category 4: Method 5 - Distribution (Method 5)")
storage_data = dynamic_input_fields_with_emission_factor("Storage Data", "Enter storage data", ["Volume of stored goods (m3)", "Average number of days stored (days)", "Emission factor for storage facility (kg CO2e/m3/day)"],
["Volume of stored goods (m3)", "Average number of days stored (days)", "Emission factor for storage facility (kg CO2e/m3/day)"])
calculate_emissions_category_4_method_5(storage_data)
def get_input_category_5_method_1():
st.subheader("Method 1: CO2e emissions from waste generated in operations")
waste_treatment_data = dynamic_input_fields("Waste Treatment Provider", ["Allocated emissions"], ["Allocated scope 1 and scope 2 emissions of waste treatment company"])
calculate_emissions_category_5_method_1(waste_treatment_data)
def calculate_emissions_category_5_method_1(waste_treatment_data):
total_emissions = sum([item["Allocated emissions"] for item in waste_treatment_data])
st.header(f"Total Emissions for Method 1: {total_emissions} kg CO2e")
def get_input_category_5_method_2():
st.subheader("Method 2: CO2e emissions from waste generated in operations")
waste_type_data = dynamic_input_fields_with_emission_factor("Waste Type", "Enter waste type data",
["Waste produced (tonnes)", "Waste treatment", "Waste type and waste treatment specific emission factor"],
["Waste produced (tonnes)", "Waste treatment", "Waste type and waste treatment specific emission factor"])
calculate_emissions_category_5_method_2(waste_type_data)
def calculate_emissions_category_5_method_2(waste_type_data):
total_emissions = sum([
item["Waste produced (tonnes)"] * item["Waste type and waste treatment specific emission factor"]
for item in waste_type_data
])
st.header(f"Total Emissions for Method 2: {total_emissions} kg CO2e")
def get_input_category_5_method_3():
st.subheader("Method 3: Average Method - CO2e emissions from waste generated in operations")
waste_treatment_method_data = dynamic_input_fields_with_emission_factor("Waste Treatment Method", "Enter waste treatment method data",
["Total mass of waste (tonnes)", "Proportion (percent)", "Emission factor (kg CO2e/tonne)"],
["Total mass of waste (tonnes)", "Proportion (percent)", "Emission factor (kg CO2e/tonne)"])
calculate_emissions_category_5_method_3(waste_treatment_method_data)
def calculate_emissions_category_5_method_3(waste_treatment_method_data):
total_emissions = sum([
item["Total mass of waste (tonnes)"] * (item["Proportion (percent)"] / 100) * item["Emission factor (kg CO2e/tonne)"]
for item in waste_treatment_method_data
])
st.header(f"Total Emissions for Method 3: {total_emissions} kg CO2e")
def get_input_category_6_method_1():
st.subheader("Method 1: Distance-based Method - Business Travel Emissions")
road_travel_data = dynamic_input_fields_with_dropdown_int("Road Travel", "Select road travel data",
["Location", "Average employees per vehicle","Number of employees in group", "Car_type", "Distance (km)", "Emission factor (kg CO2e/vehicle-km)"],
["Location", "Average employees per vehicle", "Number of employees in group", "Car_type", "Distance (km)", "Emission factor (kg CO2e/vehicle-km)"])
air_travel_data = dynamic_input_fields_with_dropdown_int("Air Travel", "Select air travel data",
["Number of employees in group", "Flight type", "Distance (km)", "Emission factor (kg CO2e/passenger-km)"],
["Number of employees in group", "Flight type", "Distance (km)", "Emission factor (kg CO2e/passenger-km)"])
include_hotel = st.checkbox("Include Hotel Emissions (Optional)")
hotel_data = []
if include_hotel:
hotel_data = dynamic_input_fields("Hotel", ["Annual number of hotel nights", "Hotel emission factor (kg CO2e/night)"],
["Annual number of hotel nights", "Hotel emission factor (kg CO2e/night)"])
calculate_emissions_category_6_method_1(road_travel_data, air_travel_data, hotel_data)
def calculate_emissions_category_6_method_1(road_travel_data, air_travel_data, hotel_data):
road_travel_emissions = 0
for item in road_travel_data:
if item["Average employees per vehicle"] != 0:
road_travel_emissions += (item["Distance (km)"] / item["Average employees per vehicle"]) * item["Emission factor (kg CO2e/vehicle-km)"]
air_travel_emissions = sum([
item["Distance (km)"] * item["Emission factor (kg CO2e/passenger-km)"]
for item in air_travel_data
])
total_emissions = road_travel_emissions + air_travel_emissions
if hotel_data:
hotel_emissions = sum([
item["Annual number of hotel nights"] * item["Hotel emission factor (kg CO2e/night)"]
for item in hotel_data
])
total_emissions += hotel_emissions
st.header(f"Total Business Travel Emissions: {total_emissions} kg CO2e")
def get_input_category_7_method_1():
st.subheader("Method 1: Distance-based Method - Employee Travel Emissions")
employee_data = dynamic_input_fields_with_dropdown_int("Employee", "Select employee data",
["Rail commute (times per week)", "One way distance by rail (km)",
"Rail emission factor (kg CO2e/passenger-km)",
"Car commute (times per week)", "Car emission factor (kg CO2e/vehicle-km)",
"One way distance by car (km)"],
["Rail commute (times per week)", "One way distance by rail (km)",
"Rail emission factor (kg CO2e/passenger-km)",
"Car commute (times per week)", "Car emission factor (kg CO2e/vehicle-km)",
"One way distance by car (km)"])
telework_data = dynamic_input_fields_with_dropdown_int("Telework", "Select telework data",
["Quantities of energy consumed (kWh)", "Emission factor for energy source (kg CO2e/kWh)"],
["Quantities of energy consumed (kWh)", "Emission factor for energy source (kg CO2e/kWh)"])
calculate_emissions_category_7_method_1(employee_data, telework_data)
def calculate_emissions_category_7_method_1(employee_data, telework_data):
total_distance_rail = sum([
item["Rail commute (times per week)"] * 2 * 5 * item["One way distance by rail (km)"]
for item in employee_data
])
total_distance_car = sum([
item["Car commute (times per week)"] * 2 * 5 * item["One way distance by car (km)"]
for item in employee_data
])
total_emissions = sum([
(total_distance_rail * item["Rail emission factor (kg CO2e/passenger-km)"]) +
(total_distance_car * item["Car emission factor (kg CO2e/vehicle-km)"])
for item in employee_data
])
if telework_data:
total_emissions += sum([
item["Quantities of energy consumed (kWh)"] * item["Emission factor for energy source (kg CO2e/kWh)"]
for item in telework_data
])
st.header(f"Total Employee Travel Emissions (Method 1): {total_emissions} kg CO2e")
def get_input_category_7_method_2():
st.subheader("Method 2: Average-data Method - Employee Travel Emissions")
commute_data = dynamic_input_fields_with_dropdown_int("Commute Group", "Select commute group data",
["Percent of total commutes", "Average one-way distance (km)",
"Emission factor (kg CO2e/vehicle or passenger km)"],
["Percent of total commutes", "Average one-way distance (km)",
"Emission factor (kg CO2e/vehicle or passenger km)"])
total_employees = st.number_input("Enter the total number of employees:", min_value=1, step=1, key="total_employees")
calculate_emissions_category_7_method_2(commute_data, total_employees)
def calculate_emissions_category_7_method_2(commute_data, total_employees):
total_emissions = sum([
total_employees * (item["Percent of total commutes"] / 100) * 2 * 235 * item["Average one-way distance (km)"] *
item["Emission factor (kg CO2e/vehicle or passenger km)"]
for item in commute_data
])
st.header(f"Total Employee Travel Emissions (Method 2): {total_emissions} kg CO2e")
def get_input_category_8_method_1():
st.subheader("Method 1: Asset-specific method - Upstream Leased Assets Emissions")
asset_data = dynamic_input_fields("Upstream Leased Asset", ["Natural gas (kWh)", "Natural gas emission factor (kg CO2e/kWh)",
"Electricity (kWh)", "Electricity emission factor (kg CO2e/kWh)",
"Fugitive emissions", "Fugitive emission factor"],
["Natural gas (kWh)", "Natural gas emission factor (kg CO2e/kWh)",
"Electricity (kWh)", "Electricity emission factor (kg CO2e/kWh)",
"Fugitive emissions", "Fugitive emission factor"])
calculate_emissions_category_8_method_1(asset_data)
def calculate_emissions_category_8_method_1(asset_data):
total_emissions = sum([
(
item["Natural gas (kWh)"] * item["Natural gas emission factor (kg CO2e/kWh)"]
+ item["Electricity (kWh)"] * item["Electricity emission factor (kg CO2e/kWh)"]
+ item["Fugitive emissions"] * item["Fugitive emission factor"]
)
for item in asset_data
])
st.header(f"Total Emissions from Upstream Leased Assets (Asset-specific Method): {total_emissions} kg CO2e")
def calculate_emissions_category_8_method_2(lessor_data, leased_asset_data):
total_emissions = sum([
(
item["Fuel consumed (e.g., liter)"] * item["Emission factor for fuel source (e.g., kg CO2e/liter)"]
+ item["Refrigerant leakage (kg)"] * item["Emission factor for refrigerant (kg CO2e/kg)"]
+ item["Process emissions"]
+ item["Electricity, steam, heating, cooling consumed (e.g., kWh)"]
* item["Emission factor for electricity, steam, heating, cooling (e.g., kg CO2e/kWh)"]
)
for item in lessor_data
])
total_emissions_allocated = sum([
(item["Scope 1 and Scope 2 emissions of lessor (kg CO2e)"]
* item["Area, volume, quantity, etc., of the leased asset"]
/ item["Total area, volume, quantity, etc., of lessor assets"]) if item["Total area, volume, quantity, etc., of lessor assets"] != 0 else 0
for item in leased_asset_data
])
st.header(f"Total Emissions from Upstream Leased Assets (CO2e Emissions from Leased Assets Method): {total_emissions + total_emissions_allocated} kg CO2e")
def calculate_emissions_category_8_method_3(building_data):
total_emissions = sum([
item["Total floor space of building type (m2)"] * item["Average emission factor for building type (kg CO2e/m2/year)"]
for item in building_data
])
st.header(f"Total Emissions from Upstream Leased Assets (Average-data Method for Leased Buildings): {total_emissions} kg CO2e")
def calculate_emissions_category_8_method_4(asset_data):
total_emissions = sum([
item["Number of assets"] * item["Average emissions per asset type (kg CO2e/asset type/year)"]
for item in asset_data
])
st.header(f"Total Emissions from Upstream Leased Assets (Average-data Method for Other Leased Assets): {total_emissions} kg CO2e")
def get_input_category_8_method_2():
st.subheader("Method 2: CO2e emissions from leased assets - Upstream Leased Assets Emissions")
lessor_data = dynamic_input_fields("Lessor", ["Fuel consumed (e.g., liter)", "Emission factor for fuel source (e.g., kg CO2e/liter)",
"Refrigerant leakage (kg)", "Emission factor for refrigerant (kg CO2e/kg)",
"Process emissions", "Electricity, steam, heating, cooling consumed (e.g., kWh)",
"Emission factor for electricity, steam, heating, cooling (e.g., kg CO2e/kWh)"],
["Fuel consumed (e.g., liter)", "Emission factor for fuel source (e.g., kg CO2e/liter)",
"Refrigerant leakage (kg)", "Emission factor for refrigerant (kg CO2e/kg)",
"Process emissions", "Electricity, steam, heating, cooling consumed (e.g., kWh)",
"Emission factor for electricity, steam, heating, cooling (e.g., kg CO2e/kWh)"])
leased_asset_data = dynamic_input_fields("Leased Asset", ["Scope 1 and Scope 2 emissions of lessor (kg CO2e)",
"Area, volume, quantity, etc., of the leased asset",
"Total area, volume, quantity, etc., of lessor assets"],
["Scope 1 and Scope 2 emissions of lessor (kg CO2e)",
"Area, volume, quantity, etc., of the leased asset",
"Total area, volume, quantity, etc., of lessor assets"])
calculate_emissions_category_8_method_2(lessor_data, leased_asset_data)
def get_input_category_8_method_3():
st.subheader("Method 3: Average-data method for leased buildings - Upstream Leased Assets Emissions")
building_data = dynamic_input_fields("Building", ["Total floor space of building type (m2)",
"Average emission factor for building type (kg CO2e/m2/year)"],
["Total floor space of building type (m2)",
"Average emission factor for building type (kg CO2e/m2/year)"])
calculate_emissions_category_8_method_3(building_data)
def get_input_category_8_method_4():
st.subheader("Method 4: Average-data method for leased assets other than buildings - Upstream Leased Assets Emissions")
asset_data = dynamic_input_fields("Leased Asset", ["Number of assets", "Average emissions per asset type (kg CO2e/asset type/year)"],
["Number of assets", "Average emissions per asset type (kg CO2e/asset type/year)"])
calculate_emissions_category_8_method_4(asset_data)
def calculate_emissions_category_9_method_1(transportation_data):
total_emissions = sum([
item["Mass of goods sold (tonnes)"] * item["Total downstream distance transported (km)"]
* item["Emission factor (kg CO2e/tonne-km)"]
for item in transportation_data
])
st.header(f"Total Emissions from Downstream Transportation: {total_emissions} kg CO2e")
def get_input_category_9_method_1():
st.subheader("Method 1: Downstream Transportation Emissions")
transportation_data = dynamic_input_fields("Transportation", ["Mass of goods sold (tonnes)",
"Total downstream distance transported (km)",
"Transport mode or vehicle type",
"Emission factor (kg CO2e/tonne-km)"],
["Mass of goods sold (tonnes)",
"Total downstream distance transported (km)",
"Transport mode or vehicle type",
"Emission factor (kg CO2e/tonne-km)"])
calculate_emissions_category_9_method_1(transportation_data)
def get_input_category_10_method_1():
st.subheader("Method 1: Site-specific Method - Processing of Sold Intermediate Products")
fuel_data = dynamic_input_fields("Fuel", ["Quantity consumed (e.g., liter)", "Life cycle emission factor (kg CO2e/liter)"],
["Quantity consumed (e.g., liter)", "Life cycle emission factor (kg CO2e/liter)"])
electricity_data = dynamic_input_fields("Electricity", ["Quantity consumed (e.g., kWh)", "Life cycle emission factor (kg CO2e/kWh)"],
["Quantity consumed (e.g., kWh)", "Life cycle emission factor (kg CO2e/kWh)"])
refrigerant_data = dynamic_input_fields("Refrigerant", ["Quantity of leakage (kg)", "Global Warming Potential (kg CO2e/kg)"],
["Quantity of leakage (kg)", "Global Warming Potential (kg CO2e/kg)"])
process_emissions = st.number_input("Sum of Process Emissions (kg CO2e)", min_value=0.0, step=0.1)
include_waste = st.checkbox("Include Waste Emissions (Optional)")
waste_data = []
if include_waste:
waste_data = dynamic_input_fields("Waste", ["Mass of waste output (kg)", "Emission factor (kg CO2e/kg waste)"],
["Mass of waste output (kg)", "Emission factor (kg CO2e/kg waste)"])
calculate_emissions_category_10_method_1(fuel_data, electricity_data, refrigerant_data, process_emissions, waste_data)
def calculate_emissions_category_10_method_1(fuel_data, electricity_data, refrigerant_data, process_emissions, waste_data):
total_fuel_emissions = sum([
item["Quantity consumed (e.g., liter)"] * item["Life cycle emission factor (kg CO2e/liter)"]
for item in fuel_data
])
total_electricity_emissions = sum([
item["Quantity consumed (e.g., kWh)"] * item["Life cycle emission factor (kg CO2e/kWh)"]
for item in electricity_data
])
total_refrigerant_emissions = sum([
item["Quantity of leakage (kg)"] * item["Global Warming Potential (kg CO2e/kg)"]
for item in refrigerant_data
])
total_waste_emissions = 0.0
if waste_data:
total_waste_emissions = sum([
item["Mass of waste output (kg)"] * item["Emission factor (kg CO2e/kg waste)"]
for item in waste_data
])
total_emissions = total_fuel_emissions + total_electricity_emissions + total_refrigerant_emissions + process_emissions + total_waste_emissions
st.header(f"Total Emissions from Processing of Sold Intermediate Products (Method 1): {total_emissions} kg CO2e")
def get_input_category_10_method_2():
st.subheader("Method 2: Average-data Method - Processing of Sold Intermediate Products")
product_data = dynamic_input_fields("Intermediate Product", ["Mass of sold intermediate product (kg)", "Emission factor of processing stages (kg CO2e/kg of final product)"],
["Mass of sold intermediate product (kg)", "Emission factor of processing stages (kg CO2e/kg of final product)"])
calculate_emissions_category_10_method_2(product_data)
def calculate_emissions_category_10_method_2(product_data):
total_emissions = sum([
item["Mass of sold intermediate product (kg)"] * item["Emission factor of processing stages (kg CO2e/kg of final product)"]
for item in product_data
])
st.header(f"Total Emissions from Processing of Sold Intermediate Products (Method 2): {total_emissions} kg CO2e")
def get_input_category_11_method_1():
st.subheader("Method 1: Direct Use-phase Emissions from Products Consuming Energy (Fuels or Electricity) during Use")
product_data = dynamic_input_fields("Product", ["Total lifetime expected uses", "Number sold",
"Fuel consumed per use (kWh)", "Emission factor for fuel (kg CO2e/kWh)"],
["Total lifetime expected uses", "Number sold",
"Fuel consumed per use (kWh)", "Emission factor for fuel (kg CO2e/kWh)"])
include_electricity = st.checkbox("Include Electricity Emissions (Optional)")
electricity_data = []
if include_electricity:
electricity_data = dynamic_input_fields("Product Electricity", ["Electricity consumed per use (kWh)", "Emission factor for electricity (kg CO2e/kWh)"],
["Electricity consumed per use (kWh)", "Emission factor for electricity (kg CO2e/kWh)"])
refrigerant_data = dynamic_input_fields("Product Refrigerant", ["Refrigerant leakage per use (kg)", "Global Warming Potential (kg CO2e/kg)"],
["Refrigerant leakage per use (kg)", "Global Warming Potential (kg CO2e/kg)"])
calculate_emissions_category_11_method_1(product_data, electricity_data, refrigerant_data)
def calculate_emissions_category_11_method_1(product_data, electricity_data, refrigerant_data):
total_fuel_emissions = sum([
item["Total lifetime expected uses"] * item["Number sold"] * item["Fuel consumed per use (kWh)"] * item["Emission factor for fuel (kg CO2e/kWh)"]
for item in product_data
])
total_electricity_emissions = 0.0
if electricity_data:
total_electricity_emissions = sum([
item1["Total lifetime expected uses"] * item1["Number sold"] * item["Electricity consumed per use (kWh)"] * item["Emission factor for electricity (kg CO2e/kWh)"]
for item in electricity_data for item1 in product_data
])
total_refrigerant_emissions = sum([
item1["Total lifetime expected uses"] * item1["Number sold"] * item["Refrigerant leakage per use (kg)"] * item["Global Warming Potential (kg CO2e/kg)"]
for item in refrigerant_data for item1 in product_data
])
total_emissions = total_fuel_emissions + total_electricity_emissions + total_refrigerant_emissions
st.header(f"Total Emissions from Use of Sold Products (Method 1): {total_emissions} kg CO2e")
def get_input_category_11_method_2():
st.subheader("Method 2: Direct Use-phase Emissions from Combusted Fuels and Feedstocks")
fuel_data = dynamic_input_fields("Fuel/Feedstock", ["Total quantity sold (e.g., kWh)", "Combustion emission factor (kg CO2e/kWh)"],
["Total quantity sold (e.g., kWh)", "Combustion emission factor (kg CO2e/kWh)"])
calculate_emissions_category_11_method_2(fuel_data)
def calculate_emissions_category_11_method_2(fuel_data):
total_fuel_emissions = sum([
item["Total quantity sold (e.g., kWh)"] * item["Combustion emission factor (kg CO2e/kWh)"]
for item in fuel_data
])
st.header(f"Total Emissions from Use of Sold Products (Method 2): {total_fuel_emissions} kg CO2e")
def get_input_category_11_method_3():
st.subheader("Method 3: Direct Use-phase Emissions from Greenhouse Gases and Products Containing or Forming Greenhouse Gases")
ghg_data = dynamic_input_fields("GHG/Product Group", ["GHG contained per product", "Total Number of products sold",
"% of GHG released during lifetime use of product", "GWP of the GHG"],
["GHG contained per product", "Total Number of products sold",
"% of GHG released during lifetime use of product", "GWP of the GHG"])
calculate_emissions_category_11_method_3(ghg_data)
def calculate_emissions_category_11_method_3(ghg_data):
total_emissions = sum([
item["GHG contained per product"] * item["Total Number of products sold"] *
item["% of GHG released during lifetime use of product"] * item["GWP of the GHG"]
for item in ghg_data
])
st.header(f"Total Emissions from Use of Sold Products (Method 3): {total_emissions} kg CO2e")
def get_input_category_11_method_4():
st.subheader("Method 4: Indirect Use-phase CO2e Emissions of Products")
use_scenario_data = dynamic_input_fields("Use Scenario", ["% of total lifetime uses", "Number sold",
"Fuel consumed per use (e.g., kWh)", "Emission factor for fuel (e.g., kg CO2e/kWh)"],
["% of total lifetime uses", "Number sold",
"Fuel consumed per use (e.g., kWh)", "Emission factor for fuel (e.g., kg CO2e/kWh)"])
include_electricity = st.checkbox("Include Electricity Emissions (Optional)")
electricity_data = []
if include_electricity:
electricity_data = dynamic_input_fields("Use Scenario electricity", ["% of total lifetime uses", "Number sold",
"Electricity consumed per use (kWh)", "Emission factor for electricity (kg CO2e/kWh)"],
["% of total lifetime uses", "Number sold",
"Electricity consumed per use (kWh)", "Emission factor for electricity (kg CO2e/kWh)"])
refrigerant_data = dynamic_input_fields("Use Scenario refrigerant", ["% of total lifetime uses", "Number sold",
"Refrigerant leakage per use (kg)", "Emission factor for refrigerant (kg CO2e/kg)"],
["% of total lifetime uses", "Number sold",
"Refrigerant leakage per use (kg)", "Emission factor for refrigerant (kg CO2e/kg)"])
ghg_data = dynamic_input_fields("Use Scenario ghg data", ["% of total lifetime uses", "Number sold",
"GHG emitted indirectly (kg)", "GWP of the GHG"],
["% of total lifetime uses", "Number sold",
"GHG emitted indirectly (kg)", "GWP of the GHG"])
calculate_emissions_category_11_method_4(use_scenario_data, electricity_data, refrigerant_data, ghg_data)
def calculate_emissions_category_11_method_4(use_scenario_data, electricity_data, refrigerant_data, ghg_data):
total_fuel_emissions = sum([
item["% of total lifetime uses"] * item["Number sold"] * item["Fuel consumed per use (e.g., kWh)"] * item["Emission factor for fuel (e.g., kg CO2e/kWh)"]
for item in use_scenario_data
])
total_electricity_emissions = 0.0
if electricity_data:
total_electricity_emissions = sum([
item["% of total lifetime uses"] * item["Number sold"] * item["Electricity consumed per use (kWh)"] * item["Emission factor for electricity (kg CO2e/kWh)"]
for item in electricity_data
])
total_refrigerant_emissions = sum([
item["% of total lifetime uses"] * item["Number sold"] * item["Refrigerant leakage per use (kg)"] * item["Emission factor for refrigerant (kg CO2e/kg)"]
for item in refrigerant_data
])
total_ghg_emissions = sum([
item["% of total lifetime uses"] * item["Number sold"] * item["GHG emitted indirectly (kg)"] * item["GWP of the GHG"]
for item in ghg_data
])
total_emissions = total_fuel_emissions + total_electricity_emissions + total_refrigerant_emissions + total_ghg_emissions
st.header(f"Total Emissions from Use of Sold Products (Method 4): {total_emissions} kg CO2e")
def get_input_category_11_method_5():
st.subheader("Method 5: Use-phase CO2e Emissions of Sold Intermediate Products")
intermediate_product_data = dynamic_input_fields("Intermediate Product", ["Total intermediate products sold",
"Total lifetime uses of final sold product",
"Emissions per use of sold intermediate product (kg CO2e/use)"],
["Total intermediate products sold",
"Total lifetime uses of final sold product",
"Emissions per use of sold intermediate product (kg CO2e/use)"])
calculate_emissions_category_11_method_5(intermediate_product_data)
def calculate_emissions_category_11_method_5(intermediate_product_data):
total_emissions = sum([
item["Total intermediate products sold"] * item["Total lifetime uses of final sold product"] *
item["Emissions per use of sold intermediate product (kg CO2e/use)"]
for item in intermediate_product_data
])
st.header(f"Total Emissions from Use of Sold Products (Method 5): {total_emissions} kg CO2e")
def get_input_category_12_method_1():
st.subheader("Category 12: End-of-Life Treatment of Sold Products - Method 1: Waste-type-specific method")
waste_data = dynamic_input_fields("Waste Treatment Method", ["Total mass of sold products and packaging (kg)",
"Proportion of waste produced (%)",
"Emission factor of waste treatment method (kg CO2e/kg)"],
["Total mass of sold products and packaging (kg)",
"Proportion of waste produced (%)",
"Emission factor of waste treatment method (kg CO2e/kg)"])
calculate_emissions_category_12_method_1(waste_data)
def calculate_emissions_category_12_method_1(waste_data):
total_emissions = sum([
item["Total mass of sold products and packaging (kg)"] *
(item["Proportion of waste produced (%)"] / 100) *
item["Emission factor of waste treatment method (kg CO2e/kg)"]
for item in waste_data
])
st.header(f"Total CO2e Emissions from End-of-Life Treatment of Sold Products (Method 1): {total_emissions} kg CO2e")
def get_input_category_13():
st.subheader("Category 13: Downstream Leased Assets")
leased_assets_data = dynamic_input_fields("Lessee", ["Scope 1 and Scope 2 emissions (kg CO2e)",
"Physical area of the leased asset (e.g., area, volume)"],
["Scope 1 and Scope 2 emissions (kg CO2e)",
"Physical area of the leased asset (e.g., area, volume)"])
calculate_emissions_category_13(leased_assets_data)
def calculate_emissions_category_13(leased_assets_data):
total_physical_area = calculate_total_physical_area(leased_assets_data)
total_emissions = sum([
item["Scope 1 and Scope 2 emissions (kg CO2e)"] *
(item["Physical area of the leased asset (e.g., area, volume)"] / total_physical_area) if total_physical_area!=0 else 0
for item in leased_assets_data
])
st.header(f"Total CO2e Emissions from Leased Assets (Category 13): {total_emissions} kg CO2e")
def calculate_total_physical_area(leased_assets_data):
return sum([item["Physical area of the leased asset (e.g., area, volume)"] for item in leased_assets_data])
def get_input_category_14_method_1():
st.subheader("Category 14: Franchises - Method 1: Franchise-specific method")
franchise_data = dynamic_input_fields("Franchise", ["Scope 1 emissions (kg CO2e)", "Scope 2 emissions (kg CO2e)"],
["Scope 1 emissions (kg CO2e)", "Scope 2 emissions (kg CO2e)"])
calculate_emissions_category_14_method_1(franchise_data)
def calculate_emissions_category_14_method_1(franchise_data):
total_emissions = sum([
item["Scope 1 emissions (kg CO2e)"] + item["Scope 2 emissions (kg CO2e)"]
for item in franchise_data
])
st.header(f"Total CO2e Emissions from Franchises (Method 1): {total_emissions} kg CO2e")
def get_input_category_14_method_2():
st.subheader("Category 14: Franchises - Method 2: Allocating emissions from franchise buildings")
franchise_building_data = dynamic_input_fields("Franchise Building",
["Energy use from franchise (kWh)", "Franchise's area (m2)",
"Building's total area (m2)", "Building's occupancy rate"],
["Energy use from franchise (kWh)", "Franchise's area (m2)",
"Building's total area (m2)", "Building's occupancy rate"])
calculate_emissions_category_14_method_2(franchise_building_data)
def calculate_emissions_category_14_method_2(franchise_building_data):
total_emissions = sum([
item["Energy use from franchise (kWh)"] *
(item["Franchise's area (m2)"] / item["Building's total area (m2)"] * item["Building's occupancy rate"]) if item["Building's total area (m2)"] * item["Building's occupancy rate"] !=0 else 0
for item in franchise_building_data
])
st.header(f"Total CO2e Emissions from Franchises (Method 2): {total_emissions} kg CO2e")
def get_input_category_14_method_3():
st.subheader("Category 14: Franchises - Method 3: Extrapolating emissions from sample groups")
franchise_groups_data = dynamic_input_fields("Franchise Group", ["Total emissions from sampled franchises within group",
"Total number of franchises within group",
"Number of franchises sampled within group"],
["Total emissions from sampled franchises within group",
"Total number of franchises within group",
"Number of franchises sampled within group"])
calculate_emissions_category_14_method_3(franchise_groups_data)
def calculate_emissions_category_14_method_3(franchise_groups_data):
total_emissions = sum([
(item["Total emissions from sampled franchises within group"] / item["Total number of franchises within group"]) *
item["Number of franchises sampled within group"] if item["Total number of franchises within group"]!=0 else 0
for item in franchise_groups_data
])
st.header(f"Total CO2e Emissions from Franchises (Method 3): {total_emissions} kg CO2e")
def get_input_category_14_method_4():
st.subheader("Category 14: Franchises - Method 4: Average data method for leased buildings (if floor space data is available)")
building_types_data = dynamic_input_fields("Building Type", ["Total floor space of building type (m2)",
"Average emission factor for building type (kg CO2e/m2/year)"],
["Total floor space of building type (m2)",
"Average emission factor for building type (kg CO2e/m2/year)"])
calculate_emissions_category_14_method_4(building_types_data)
def calculate_emissions_category_14_method_4(building_types_data):
total_emissions = sum([
item["Total floor space of building type (m2)"] * item["Average emission factor for building type (kg CO2e/m2/year)"]
for item in building_types_data
])
st.header(f"Total CO2e Emissions from Franchises (Method 4): {total_emissions} kg CO2e")
def get_input_category_14_method_5():
st.subheader("Category 14: Franchises - Method 5: Average data method for other asset types or for leased buildings where floor space data is not available")
building_asset_types_data = dynamic_input_fields("Building/Asset Type", ["Number of buildings or assets",
"Average emissions per building or asset type per year (kg CO2e/building or asset type/year)"],
["Number of buildings or assets",
"Average emissions per building or asset type per year (kg CO2e/building or asset type/year)"])
calculate_emissions_category_14_method_5(building_asset_types_data)
def calculate_emissions_category_14_method_5(building_asset_types_data):
total_emissions = sum([
item["Number of buildings or assets"] * item["Average emissions per building or asset type per year (kg CO2e/building or asset type/year)"]
for item in building_asset_types_data
])
st.header(f"Total CO2e Emissions from Franchises (Method 5): {total_emissions} kg CO2e")
def get_input_category_15_method_1():
st.subheader("Category 15: Investments - Method 1: Investment-specific method for equity investments")
equity_investment_data = dynamic_input_fields("Equity Investment",
["Scope 1 and scope 2 emissions of investee company (tonnes CO2e)",
"Reporting company’s share of equity (%)"],
["Scope 1 and scope 2 emissions of investee company (tonnes CO2e)",
"Reporting company’s share of equity (%)"])
calculate_emissions_category_15_method_1(equity_investment_data)
def calculate_emissions_category_15_method_1(equity_investment_data):
total_emissions = sum([
item["Scope 1 and scope 2 emissions of investee company (tonnes CO2e)"] *
(item["Reporting company’s share of equity (%)"] / 100)
for item in equity_investment_data
])
st.header(f"Total CO2e Emissions from Investments (Method 1): {total_emissions} tonnes CO2e")
def get_input_category_15_method_2():
st.subheader("Category 15: Investments - Method 2: Average data method for equity investments")
equity_investment_average_data = dynamic_input_fields("Equity Investment Average Data",
["Investee company total revenue ($)",
"Emission factor for investee’s sector (kg CO2e/$ revenue)",
"Reporting company’s share of equity (%)"],
["Investee company total revenue ($)",
"Emission factor for investee’s sector (kg CO2e/$ revenue)",
"Reporting company’s share of equity (%)"])
calculate_emissions_category_15_method_2(equity_investment_average_data)
def calculate_emissions_category_15_method_2(equity_investment_average_data):
total_emissions = sum([
(item["Investee company total revenue ($)"] * item["Emission factor for investee’s sector (kg CO2e/$ revenue)"]) *
(item["Reporting company’s share of equity (%)"] / 100)
for item in equity_investment_average_data
])
st.header(f"Total CO2e Emissions from Investments (Method 2): {total_emissions} tonnes CO2e")
def get_input_category_15_method_3():
st.subheader("Category 15: Investments - Method 3: Project-specific method for project finance and debt investments")
project_finance_data = dynamic_input_fields("Project Finance",
["Scope 1 and scope 2 emissions of relevant project (tonnes CO2e)",
"Value of debt investment ($)", "Total project costs (total equity plus debt) ($)",
"Share of total project costs (%)"],
["Scope 1 and scope 2 emissions of relevant project (tonnes CO2e)",
"Value of debt investment ($)", "Total project costs (total equity plus debt) ($)",
"Share of total project costs (%)"])
calculate_emissions_category_15_method_3(project_finance_data)
def calculate_emissions_category_15_method_3(project_finance_data):
total_emissions = sum([
item["Scope 1 and scope 2 emissions of relevant project (tonnes CO2e)"] *
(item["Share of total project costs (%)"] / 100)
for item in project_finance_data
])
st.header(f"Total CO2e Emissions from Investments (Method 3): {total_emissions} tonnes CO2e")
def get_input_category_15_method_4():
st.subheader("Category 15: Investments - Method 4: Average-data method for project finance and debt investments")
project_finance_average_data = dynamic_input_fields("Project Finance Average Data",
["Project construction cost or project revenue in reporting year ($ million)",
"Emission factor of relevant construction or operating sector (kg CO2e/$ revenue)",
"Share of total project costs (value of debt investment / total equity plus debt) (%)"],
["Project construction cost or project revenue in reporting year ($ million)",
"Emission factor of relevant construction or operating sector (kg CO2e/$ revenue)",
"Share of total project costs (value of debt investment / total equity plus debt) (%)"])
calculate_emissions_category_15_method_4(project_finance_average_data)
def calculate_emissions_category_15_method_4(project_finance_average_data):
total_emissions = sum([
((item["Project construction cost or project revenue in reporting year ($ million)"] *
item["Emission factor of relevant construction or operating sector (kg CO2e/$ revenue)"]) *
item["Share of total project costs (value of debt investment / total equity plus debt) (%)"] / 100)
for item in project_finance_average_data
])
st.header(f"Total CO2e Emissions from Investments (Method 4): {total_emissions} tonnes CO2e")
def main():
st.title("CO2 Emission Calculator")
selected_category = st.selectbox("Select Category", categories)
if selected_category in ["Category 1", "Category 2"]:
method_options = ["Supplier Specific Method", "Hybrid Method", "HybridPro Method"]
method = st.selectbox("Select Method", method_options)
if method == "Supplier Specific Method":
st.header("Supplier Specific Method")
num_items = st.number_input("Number of items", min_value=1, step=1)
purchased_goods_data = []
for i in range(num_items):
goods = st.selectbox(f"Purchased Goods {i + 1}", purchased_goods_values, key=f"goods_{i}")
supplier = st.selectbox(f"Supplier {i + 1}", supplier_values, key=f"supplier_{i}")
qty = st.number_input(f"Qty Purchased (kg) {i + 1}", min_value=0.0, step=0.01, key=f"qty_{i}")
emission_factor = st.number_input(f"Supplier-specific Emission Factor (kg CO2e/kg) {i + 1}", min_value=0.0, step=0.01, key=f"emission_factor_{i}")
purchased_goods_data.append((goods, supplier, qty, emission_factor))
calculate_emissions_supplier_specific(purchased_goods_data)
elif method == "Hybrid Method":
st.header("Hybrid Method")
scope1_and_scope2_data = dynamic_input_fields_with_dropdown("Scope 1 and Scope 2 data from supplier B relating to production of purchased goods", "Enter scope 1 and scope 2 data", scope_values, ["Category","Amount (kWh)", "Emission factor (kg CO2e/kWh)"])
material_inputs_data = dynamic_input_fields_with_dropdown("Material inputs of purchased goods", "Enter material input data", material_inputs_values, ["Purchased Goods", "Mass purchased (kg)", "Emission factor (kg CO2e/kg)"])
transport_data = dynamic_input_fields_with_dropdown("Transport of material inputs to supplier B", "Enter transport data", transport_values, ["Purchased Goods", "Distance of transport (km)", "Vehicle type emission factor (kg CO2e/kg/km)"])
waste_output_data = dynamic_input_fields_with_emission_factor("Waste outputs by supplier B relating to production of purchased goods", "Enter waste output data", waste_output_values, ["Amount (kg)", "Emission factor (kg CO2e/kg of waste sent to landfill)"])
calculate_emissions_hybrid(scope1_and_scope2_data, material_inputs_data, transport_data, waste_output_data)
elif method == "HybridPro Method":
scope_data = dynamic_input_fields_with_dropdown("Scope 1 and Scope 2 data from supplier B", "Enter scope data", scope_values, ["Category","Amount (kWh)", "Emission factor (kg CO2e/kWh)"])
tshirt_data = dynamic_input_fields_with_emission_factor("T-shirts", "Enter T-shirt data", purchased_goods_values,
["Number of t-shirts purchased",
"Cradle-to-gate process emission factor (kg CO2e/per t-shirt)","Cradle-to-gate process emission factor (kg CO2e/per t-shirt(excluding scopes)"])
waste_output_data = dynamic_input_fields_with_emission_factor("Waste outputs by supplier B", "Enter waste output data", waste_output_values,
["Amount (kg)", "Emission factor (kg CO2e/kg of waste sent to landfill)"])
calculate_emissions_hybrid_pro(tshirt_data, scope_data, waste_output_data)
elif selected_category=="Category 3":
collect_category_3_data()
elif selected_category == "Category 4":
method_options = ["Method 1: Fuel-based Method", "Method 2: Unladen Backhaul", "Method 3: Transportation", "Method 4: Distribution", "Method 5: Distribution"]
selected_method = st.selectbox("Select Method for Category 4", method_options)
if selected_method == "Method 1: Fuel-based Method":
collect_category_4_method_1_data()
elif selected_method == "Method 2: Unladen Backhaul":
collect_category_4_method_2_data()
elif selected_method == "Method 3: Transportation":
collect_category_4_method_3_data()
elif selected_method == "Method 4: Distribution":
collect_category_4_method_4_data()
elif selected_method == "Method 5: Distribution":
collect_category_4_method_5_data()
elif selected_category == "Category 5":
method_options = ["Method 1: Waste Operations using scope", "Method 2: Waste operations using produce", "Method 3: Average Method"]
selected_method = st.selectbox("Select Method for Category 5", method_options)
if selected_method == "Method 1: Waste Operations using scope":
get_input_category_5_method_1()
elif selected_method == "Method 2: Waste operations using produce":
get_input_category_5_method_2()
elif selected_method == "Method 3: Average Method":
get_input_category_5_method_3()
elif selected_category == "Category 6":
get_input_category_6_method_1()
elif selected_category == "Category 7":
method_options = ["Method 1: Standard method", "Method 2: Average Method"]
selected_method = st.selectbox("Select Method for Category 7", method_options)
if selected_method == "Method 1: Standard method":
get_input_category_7_method_1()
elif selected_method == "Method 2: Average Method":
get_input_category_7_method_2()
elif selected_category == "Category 8":
method_options = ["Method 1: Asset specific", "Method 2: Leased assets", "Method 3: Average method for leased assets","Method 4: Average method for leased buildings"]
selected_method = st.selectbox("Select Method for Category 8", method_options)
if selected_method == "Method 1: Asset specific":
get_input_category_8_method_1()
elif selected_method == "Method 2: Leased assets":
get_input_category_8_method_2()
elif selected_method == "Method 3: Average method for leased assets":
get_input_category_8_method_3()
elif selected_method == "Method 4: Average method for leased buildings":
get_input_category_8_method_4()
elif selected_category == "Category 9":
get_input_category_9_method_1()
elif selected_category == "Category 10":
method_options = ["Method 1: Site-specific", "Method 2: Average specific"]
selected_method = st.selectbox("Select Method for Category 10", method_options)
if selected_method == "Method 1: Site-specific":
get_input_category_10_method_1()
elif selected_method == "Method 2: Average specific":
get_input_category_10_method_2()
elif selected_category == "Category 11":
method_options = ["Method 1: Direct energy consumption", "Method 2: Combusted Fuels", "Method 3: Greenhouse gases","Method 4: Indirect use","Method 5: Sold-intermediate products"]
selected_method = st.selectbox("Select Method for Category 11", method_options)
if selected_method == "Method 1: Direct energy consumption":
get_input_category_11_method_1()
elif selected_method == "Method 2: Combusted Fuels":
get_input_category_11_method_2()
elif selected_method == "Method 3: Greenhouse gases":
get_input_category_11_method_3()
elif selected_method == "Method 4: Indirect use":
get_input_category_11_method_4()
else:
get_input_category_11_method_5()
elif selected_category == "Category 12":
get_input_category_12_method_1()
elif selected_category == "Category 13":
get_input_category_13()
elif selected_category == "Category 14":
method_options = ["Method 1: Franchise-specific", "Method 2: Allocating emissions from franchise buildings that are not sub-metered", "Method 3: Extrapolating emissions from sample groups","Method 4: Average data method for leased buildings (if floor space data is available)","Method 5: Average data method for other asset types or for leased buildings where floor space data is not available"]
selected_method = st.selectbox("Select Method for Category 14", method_options)
if selected_method == "Method 1: Franchise-specific":
get_input_category_14_method_1()
elif selected_method == "Method 2: Allocating emissions from franchise buildings that are not sub-metered":
get_input_category_14_method_2()
elif selected_method == "Method 3: Extrapolating emissions from sample groups":
get_input_category_14_method_3()
elif selected_method == "Method 4: Average data method for leased buildings (if floor space data is available)":
get_input_category_14_method_4()
else:
get_input_category_14_method_5()
else:
method_options = ["Method 1: Investment-specific method for calculating emissions from equity investments", "Method 2: Average data method ", "Method 3: Project-specific method for calculating emissions from project finance and debt investments with known use of proceeds","Method 4: Average-data method for calculating emissions from project finance and debt investments with known use of proceeds"]
selected_method = st.selectbox("Select Method for Category 14", method_options)
if selected_method == "Method 1: Investment-specific method for calculating emissions from equity investments":
get_input_category_15_method_1()
elif selected_method == "Method 2: Average data method ":
get_input_category_15_method_2()
elif selected_method == "Method 3: Project-specific method for calculating emissions from project finance and debt investments with known use of proceeds":
get_input_category_15_method_3()
elif selected_method == "Method 4: Average-data method for calculating emissions from project finance and debt investments with known use of proceeds":
get_input_category_15_method_4()
def dynamic_input_fields(label, values, headings, country=None):
num_items = st.number_input(f"**Number of {label} items**", min_value=1, step=1, key=f"{label}_num_items")
input_fields = []
for i in range(num_items):
st.subheader(f"{label} {i + 1}")
input_data = {}
if country:
input_data["Country"] = country
for value, heading in zip(values, headings):
key = f"{label}_{i}_{value}_{heading}"
input_data[value] = st.number_input(f"{heading} {i + 1}", min_value=0.0, step=0.01, key=key)
input_fields.append(input_data)
return input_fields
def dynamic_input_fields_with_dropdown(label, prompt, values, headings):
num_items = st.number_input(f"**Number of {label} items**", min_value=1, step=1, key=f"{label}_num_items")
input_fields = []
for i in range(num_items):
st.subheader(f"{label} {i + 1}")
input_data = {}
input_data[headings[0]] = st.selectbox(f"{headings[0]} {i + 1}", values, key=f"{label}_{i}_{headings[0]}")
for heading in headings[1:]:
input_data[heading] = st.number_input(f"{heading} {i + 1}", min_value=0.0, step=0.01, key=f"{label}_{i}_{heading}")
input_fields.append(input_data)
return input_fields
def dynamic_input_fields_with_emission_factor(label, prompt, values, headings):
num_items = st.number_input(f"**Number of {label} items**", min_value=1, step=1, key=f"{label}_num_items")
input_fields = []
for i in range(num_items):
st.subheader(f"{label} {i + 1}")
input_data = {}
for heading in headings:
input_data[heading] = st.number_input(f"{heading} {i + 1}", min_value=0.0, step=0.01, key=f"{label}_{i}_{heading}")
input_fields.append(input_data)
return input_fields
def dynamic_input_fields_with_dropdown_int(label, prompt, values, headings):
num_items = st.number_input(f"**Number of {label} items**", min_value=1, step=1, key=f"{label}_num_items")
input_fields = []
dropdown_options = {
"Location": ["US", "Aus"],
"Car_type": ["Hybrid", "Gasoline", "4 wheel"],
}
for i in range(num_items):
st.subheader(f"{label} {i + 1}")
input_data = {}
for j, heading in enumerate(headings):
if heading in dropdown_options:
input_data[heading] = st.selectbox(f"{heading} {i + 1}", dropdown_options[heading], key=f"{label}_{i}_{heading}")
else:
input_data[heading] = st.number_input(f"{heading} {i + 1}", min_value=0, step=1, key=f"{label}_{i}_{heading}")
input_fields.append(input_data)
return input_fields
if __name__ == "__main__":
main()