Spaces:
Sleeping
Sleeping
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() | |